Previous Topへ Next

UNIXコマンドを実戦に使う1/UNIX commands in action 1

英語をしゃべれない理由

一般的なUNIX入門書ならここからUNIXの基礎コマンドを延々解説しはじめるという構成になるでしょう。
そういう解説書を私も何冊か読みました。
しかしそういう解説書を読み続けて、全くの初心者がUNIXを使えるようになるかというと私はかなり否定的な感想を持ちました。
その理由はそういう基礎コマンドを覚えて、何かの役に立つかどうかということが実感できないからです。

もちろん役には立ちます。
しかし初心者ほど結果をすぐに求めたがるのは、仕方が無いことなのです。

英語をしゃべれるでしょうか?
しゃべれるとしたらどうやってしゃべれるようになりましたか?

日本の英語のグラマーの教育は世界水準から考えても決して低いとは思いませんが、大学を卒業しているにも拘らず英語をしゃべれない人は沢山います。
私自身も中学から大学の4年間まで、合計10年も英語教育を受け、しかも成績は決して悪くはなかったのですが大学を卒業した頃はやはり英語をしゃべれませんでした。
それは学校の英語教育が、単語の暗記、文法の暗記、英書講読に偏っていたからです。
英語を覚えたのは実際に外国に行ってネイティブスピーカーと話をしてからです。

簡単な例を挙げます。

学校では過去形、過去分詞、過去進行形など高度な文法を教わります。
しかしこんな簡単な文例を学校では教えません。

「ありがとう」
「いいえ、いいんですよ」

ありがとうはThank youというのは誰でも判りますが、それに返す言葉が分かりません。
No, I'm all right.
では直訳過ぎて英語圏の人には意味が判らないでしょう。
こういう場合は

You are welcome

といいます。
「あなたなら歓迎ですよ」というくらいの意味でしょうが、これはもう慣用句です。
子供でも使っているような言葉ですが、言わなければ怪訝な顔をされます。
しかし10年も高等学府で教育を受けて、難しい構文でも読み下すことができるのにこんな日常会話のやりとりができないというのが日本の英語教育です。

UNIXの基礎解説も同じような過ちを犯しています。

詳細に基礎コマンドを並べられるよりも、実際に使ってみてコンピュータがその通りに反応してくれるという実感を持った方が学習は進むはずです。


そこでここから実戦に使うコマンドを書いていきます。






新規にファイルを作ってみます。
GUI環境ではメニューコマンドから「新規」をクリックするか、コマンド+shift+Nキーに当たるコマンドです。

「test」というファイル名のテキストファイルを作ります。

echo > test.txt

とタイプして実行して下さい。
もしカレントディレクトリが~になっていたら、ホームディレクトリの中に「test」という名前のテキストファイルができます。
GUI環境でのぞいて確認して下さい。



lsコマンドで確認することもできます。


今度はデスクトップに「test.txt」というファイルを作ってみます。

echo > ~/Desktop/test.txt

デスクトップにまっさらな「test」というテキストファイルができたでしょうか。
確認して下さい。






なんだかいきなりタイトルが難しくなってきました。
しかしここでやることは前段の応用です。

MacOSXのterminalのようにCUI(キャラクターユーザインタフェイス、つまり今ターミナルで打っているような、文字だけでコンピュータをコントロールするインタフェイスのこと)を使う環境をシェルと呼びます。
これはよくカーネル(コンピュータのマシン語レベルで情報を処理する基礎部分)を貝の身に喩えて、 貝の身を包む貝殻に譬えられます。
カーネルをユーザが直接触ることはできませんので、貝殻を通じて操作するわけです。

同じUNIXでもシェルにはいくつか種類があります。
bash、csh、tcsh等と約されるシェルが代表的な物でどれもおおむね似ていますが、細かい部分に微妙に違いがあり目的によって使い分けられているようです。

MacOSXのterminalで使われているシェルはこのうちtcshと呼ばれているものに当たります。
(ここら辺り興味がある人はUNIXの歴史ということでググッて見て下さい。いろいろ興味深い技術的な話が出てきます。しかしここでは詳細な技術的背景の説明はできるだけ省きます。)

(訂正:MacOSXのterminalシェルは10.2まではtcshでしたが、10.3からbashに変わったようです。私はまだパンサーを入れていないので詳細は判らないのですが、どうしてこういう変更をするのでしょうかね。もっとも前評判ではOSXはbashを標準にするはずということだったので、本来の姿に戻ったということなんでしょうか?
tcshとbashの違いについては機会があったら書いてみようと思います。)

UNIXのシェルというのはユーザを設定したらそれ以降の過去のコマンド履歴を憶えているのが一般的です。
コマンド履歴を覚えていたらカーソルキーのupキーを叩くだけで過去に使ったコマンドが全部出てきます。
そうするとこれまで練習したコマンドをいちいちタイプしなくても、カーソルキーを叩くだけで使ったことがあるコマンドは全て思い出してくれます。

これは使い慣れてみると本当に便利な機能です。
前段で

コマンドを暗記する必要なんか無い

と書いたのはこういう理由からです。

ところがMacOSXにバンドルされているシェルにはなぜかこの機能が設定されていません。
それがどういう理由なのか判りませんが、せっかくterminalを使ってコマンドを打っているのに、この機能が使えないというのではterminalを使う意味が半減するといっても良いぐらいこの機能は便利なのです。

そこでこれを設定するコマンドを以下のようにタイプします。
先ほどの新しいファイルを作るechoコマンドを使います。

echo "source /usr/share/tcsh/examples/rc" > ~/.tcshrc

と打って一回実行して下さい。
次に以下のようにタイプします。

echo "source /usr/share/tcsh/examples/login" >> ~/.tcshrc

これはホームディレクトリ直下にtcshの初期値
「.tcshrc」
という不可視ファイルを作り、シェルを起動する度にその初期値を読み込むというコマンドです。(ドットで始まるファイル名はGUI環境下では全て不可視ファイルになり見えなくなります)

このふたつを実行してみて、いくつか今まで練習したコマンドを実行してみて下さい。
そしてterminalを終了して再び起動して、プロンプトが表示されたらカーソルキーのupキーを叩いてみて下さい。
これで先ほど打ったいくつかの練習用コマンドが呼び出せるようになったでしょうか?

いつも決まったルーティンワークがある場合は、こういう機能があると本当に作業がはかどります。
特に一度に数百個ものファイルを処理するコマンドをいくつも実行しないといけない場合、MacやWindowsのGUI環境で作業していると途方もない時間がかかってしまいますが、シェルのこういう機能を使うとわずかな時間で、しかもタイプは数回しか打たずに実行できるわけです。
UNIXユーザがよく「MacやWindowsは不便だ」というのはこういうことがあるからです。

terminalの便利さが少し判ってきましたか?



<後日追記>

このコマンド履歴を記憶させる手順はOS10.2バンドルのtcshのターミナルまでは必要だった。
しかしOS10.3以降はターミナルはbashを標準とするようになった。
このbashは最初からコマンドの履歴を残す設定になっているので以上の手順は必要ない。
ただこの記事を削除しないで残している意味は、shなどのバイナリの履歴などの記録をどこに残す構造になっているかを知るという意味ではこの記事は参考になると思うためだ。

bashもbashrcにコマンド履歴や設定などの記録を記述している。
ということは履歴が残らなくなったり、シェルの振る舞いがおかしくなったらbashrcを疑えば良いわけだ。
一度削除して新たにechoコマンドでbashrcを作り直すということも考えられる。

こういう仕組みを知っているとトラブルシューティングの時にも多いに役に立つ。












Previous Topへ Next





site statistics