第3週


コマンドとマニュアル


今までに結構沢山のコマンドが出てました。 出てきたコマンドをまとめてみると以下のようになります。

第1週
ps, echo, sort, grep, head, tail, cat, whoami, pwd, cd, ls, mkdir, mv, who, finger, rwho, mail
第2週
yppasswd, emacs, source, inc, scan, show, next, prev, refile, folders

これらのコマンドは今まで何気なく使ったのですが、これらのコマンドはいくつかの 種類に分類することができます。

*UNIXのコマンドの種類

UNIXのコマンドについては少しはわかったと思いますが、今まに出て来た コマンドの詳しい説明やまだ知らないコマンドのことを調べるにはどうしたら 良いのでしょうか。 普通コンピュータのオペレーィングシステムのコマンドについては「計算機に付いて きたマニュアルを読みなさい」とか「オペレーティングシステムの解説書が出ている ので本屋で買いなさい」というのが一般的ですが、UNIXシステムの場合は あまりそんな必要はありません。

*UNIXシステムのマニュアル

もうこれでUNIXシステムのコマンドは全てあなたのものです。

それでは今週の課題です。

+今週の課題

これで今週の授業は終わりです。 お疲れさまでした。


ホームに戻る
スケジュールに戻る

UNIXのコマンドの種類

UNIXシステムのコマンドは大別すると以下の様になります。

先週までに使ったコマンドをこの分類に当てはめてやると以下のようになります。

シェルの組み込みコマンド
echo, cd, source
外部コマンド
ps, sort, grep, head, tail, cat, whoami, pwd, ls, mkdir, mv, who, finger, rwho, yppasswd, emacs, inc, scan, show, next, prev, refile, folders
エリアス
mail

あるコマンドがどの種類のコマンドに属するかは which コマンドで調べることが 出来ます。 試しに source というコマンドを調べてみましょう。

    % which source

source というコマンドがシェルの組み込みコマンドだというメッセージが出た はずです。 シェルの組み込みコマンドというのはシェルの機能の一部として組み込まれて いる関数をいいます。 これらの関数はあるシェルを使っている限りいつでも使用することが 出来ますが、シェルが違うと使える保証は有りません。

次に ps というコマンドをさっきの which コマンドで調べましょう。

    % which ps

今度はディレクトリー名がメッセージとして返ってきました。 これはこのコマンドがそのディレクトリーにあるコマンドファイルであることを 示しています。 従ってこのコマンドはシェルの一部に含まれているのではなくシェルとは 別のコマンドファイルとして存在しています。 その意味でこれらのコマンドをシェルの外にあるという意味で外部コマンドと 呼びます。

*外部コマンド

外部コマンドの説明が長くなってしまいましたが、まとめると以下のように なります。 シェルの組み込み関数のまとめと比べてみてください。

では最後にエリアスです。 また前に使った which コマンドで調べてみましょう。

    % which mail

mail というコマンドはエリアス(alias)であり、どのように定義されているかが メッセージとして返ってきます。 ではエリアスとは何でしょうか。 エリアスを日本語に直すと「別名」というような意味でしょうか。 最初の週で使ったコマンド「ps axu | sort | grep root | head」のように 非常に長いコマンドを何回も打つのは大変ですしまた間違いの元です。 このような場合短いコマンド例えば pshead でこのコマンドを実行できたら 便利だと思いませんか。

    % pshead
    % alias pshead 'ps axu | sort | grep root | head'
    % pshead

最初に pshead というコマンドを使おうとしたときにはそんなコマンドはないと 言われたはずですが、2回目の pshead コマンドではうまくいったはずです。 上で使った alias コマンドでユーザーは自分のためだけのコマンドをつくる ことができます。

現在あなたのために設定されているエリアスを全てリストアップするには 何もつけない alias コマンドを使います。

    % alias

今は mail コマンドだけがエリアスとして定義されているはずです。 この定義は .cshrc の中で行われています。

どうです、UNIXシステムのコマンドのことが少しはわかりましたか。

今週の最初に戻る

外部コマンド

先にリストアップした外部コマンドについて which コマンドを用いてそのコマンド ファイルのありかを探してみてください。 気がつくと思うのですがコマンドによってコマンドファイルのある ディレクトリーが違っています。 ファイルのあるディレクトリーは「/usr/bin」だったり「/usr/local/bin」だった り「/usr/i18n/usr/bin」だったりとコマンドによって違うはずです。 ですが思い出してみると、どのコマンドもコマンドを打つときには最後のコマンド ファイル名だけで済んでいました。 都合がいいといえば都合がいいのですが、どうしてこれが可能だったのでしょうか。 実はこれはシェルの環境変数 PATH によって可能だったのです。 あなたのシェルの環境変数 PATH を見てみましょう。

    % echo $PATH

上のコマンドはシェルの環境変数 PATH の内容を見せてくれます。 環境変数 PATH は多数のディレクトリー名がコロン「:」で区切られています。 外部コマンドが実行されるときにはプログラムファイルを見つけるために このコロンで区切られた全てのディレクトリーが探されます。 ですからこの PATH に入っているディレクトリーにあるプログラムファイルは 全てプログラムファイル名を打ち込むだけで実行可能なのです。 この辺の事情はパソコンのOSのDOSでも同じです。 一度 PATH をリセットして外部コマンドを実行してみましょう(大文字と 小文字がありますから気をつけて下さい)。

    % echo $PATH
    % echo $path
    % unsetenv PATH
    % unset path
    % echo $PATH
    % echo $path
    % ps

上のコマンドを実行すると ps なんていうコマンドは知らないよと言われます。 これは PATH を正しく設定していないせいです。 上のコマンド実行後には外部コマンドが全く使えませんからログインし直して 下さい。

PATH が最初から必要な全てのコマンドファイルがあるディレクトリーを含んで いてくれて有り難いと思ったかも知れませんが、とんでもない PATH を正しく 設定しているのはあなた自身なのです。 ホームディレクトリーにある .login というファイルを見てください。

    % cat .login

この中には PATH を正しく設定するコマンドが含まれています。 この .login というファイルはあなたがこの授業の最初に initsetup という コマンドを実行したときにつくられました。 ですから PATH を設定したのは私ではないと言い張ることもできますが、 PATH を設定している .login というファイルはあなたが所有者のファイルですし、 一旦 initsetup を実行した後はあなたが責任を持って管理すべきファイルです。 従って PATH 変数を常に適切な値に設定しておくのはあなた自身の仕事です。 とはいえこの授業の中では更に .login を編集する必要はありませんし、 実は先週 .cshrc の中で source することにしたファイルの中でも PATH 変数の 変更を行っています。

元に戻る

UNIXシステムのマニュアル

これまで授業に出てきたコマンドの意味とかコマンドにつけたオプションの 意味はあまりわからずに使ってきたと思います。 各コマンドの意味や使い方を調べるために UNIXシステムには簡単なオンラインマニュアルが用意されています。

*コマンドの意味を調べる

これでこれまでに出てきたコマンドに付いては、どういうコマンドかとか コマンドの実行時のオプションの付け方とかコマンドのメッセージの意味とか をオンラインマニュアルにて調べることができるようになったと思います。

では今までに出てきていない新しいコマンドのことを調べるにはどうしたら 良いのでしょうか。 これもやはり man コマンドを用いてオンラインマニュアルにより調べることが できます。

*新しいコマンドを探す

もう少し man コマンドの使い方とUNIXシステムのオンラインマニュアル について見てみます。

*man コマンド

もう教官からコマンドの説明があまりなくてもやっていけるようになりました よね。

今週の最初に戻る

コマンドの意味を調べる

オンラインマニュアルを参照するコマンドは man(マニュアル manual の意味) です。 試しに ps コマンドのマニュアルを見てみましょう。

    % man ps

英語の説明が1ページ分出てきたはずです。 UNIXシステムの多くのオンラインマニュアルは英語で書かれていますので 早く慣れることにしましょう。 まず最初には ps というコマンドが何をするコマンドか簡単に書いてあります。 次には ps コマンドの実行の仕方(オプションの付け方)をまとめてあります。 その後もう少し詳しい ps コマンドの説明が始まります。

オンラインマニュアルの先を読んでいくにはスペースバーを押します。 1回スペースバーを押すと1ページ分進みます。 代わりにリターンキーを押すと1行分だけ進みます。 先に進み過ぎて戻りたい時には「b」キーを押すと1ページ分戻ります。 途中でオンラインマニュアルから抜けたい時には「q」キーを押すと man を終了します。 オンラインマニュアルを読む時にはベッタリと最初から最後まで読むことは あまりお勧めではありません。 むしろ自分の必要とする情報をスペースバーと b キーを使って探して 拾い読みするのが良いと思います。

オンラインマニュアルの最後の方には今使っている計算機でこのコマンドを 使う場合の注意(NOTES)、コマンドの制限事項(RESTRICTIONS)、 使用例(EXAMPLES)、関係するファイル(FILES)、関係する他のコマン ドのオンラインマニュアル(RELATED INFORMATION)などもあります。 EXAMPLE と RELATED INFORMATION は参考になると思います。

もう少し別なコマンドについてもマニュアルを見てみましょう。

    % man grep

今度は日本語でマニュアルが出てきましたからさっきよりわかり易いと思います。 ですが英語を無理やり日本語に直してあるところもありますから、かえって わかりづらい所もあるかも知れません。

UNIXシステムのオンラインマニュアルがどういうものか少しはわかったで しょうか。

元に戻る

新しいコマンドを探す

漠然とまだ出てきていないコマンドを探すといっても探すことはできません。 まずコマンドを探すためにはどのようなコマンドかをこちらが決めてやらなけ ればなりません。 UNIXのオンラインマニュアルの場合どういうコマンドかを「キーワード」 にて与えてやります。 今「画面上に時計を表示するようなコマンド」を見つけたいと思ったとします。 この時キーワードはどうすれば良いでしょうか。 試しに「tokei」とやってみましょうか。 man コマンドでキーワードを設定するには「-k」オプションを使います。

    % man -k tokei

一致するコマンドが無いというメッセージです。 残念ながらオンラインマニュアルは日本語は理解しないようです。 それでは英語のキーワード「clock」を使ってみましょう。

    % man -k clock

今度は沢山出てきました。 オンラインマニュアルに載っている項目(多くはコマンドの名前)と簡単な 説明が出てきました。 説明を読んでみると dxclock, oclock, xclock というのが可能性がありそう です。 更に各コマンドのオンラインマニュアルを読んでもいいのですが、とりあえず これらのコマンドを実行してみましょう。

    % dxclock
    CONTROL-c
    % oclock
    CONTROL-c
    % xclock
    CONTROL-c

上の例ではコマンドを終了するのに CONTROL-c を用いています。 UNIXシステムでは(他のOSの多くでも)コマンドの強制終了が CONTROL-c で 行なえます。 どの時計が一番気に入りましたか。

上の例では欲しいコマンドがすぐ見つかりましたが、キーワードの設定を誤ると コマンドの候補が沢山出てきてどれが欲しいコマンドかわかりません。 例えば「ファイルを1ページずつ表示するコマンド」を見つけたいとします。 キーワードを「file」としてコマンドを探すとどうなるでしょうか。

    % man -k file

非常に沢山の候補が出てきました。 「file」というどのコマンドにも関係ありそうなキーワードを選んでしまった せいです。 では表示するという意味の「display」ではどうでしょうか。

    % man -k display

ずいぶん少なくなりましたがまだ沢山の候補が出ています。 では「page」ではどうでしょうか。

    % man -k page

1ページに納まるくらいの候補の数になりました。 どうも「more, page」とういのが探しているコマンドのようです。 ではこのコマンドのマニュアルを見てからコマンドを実行してみましょう。

    % man more
    % more ~asakagc/semia2.www/data/week03.txt

マニュアルを読むと more というコマンドと page というコマンドは良く似て いるのですが、違いは次のページを表示する時に前のページを消すかどうかの 点だけのようです。 サブコマンドの項目を見ると、リターンキーを打つと次の1行を表示し スペースバーを打つと次のページを表示する。 また b キーを打つと1画面分逆方向にスキップすると書いてあります。 これはどこかで聞いたような話です。 たしかこれは man コマンドの使い方で出てきました。 実は man コマンドはマニュアルを表示する時にこの more コマンドを 使っていたのです。

どのようなキーワードを設定すれば探したいコマンドが早くみつかる かは一般的な指標はありません。 色々な考えつくキーワードを色々ためしてみましょう。

元に戻る

man コマンド

以下のように「yppasswd」をキーワードにして man コマンドを実行して 下さい。

    % man -k yppasswd

man コマンドのメッセージは今探したいコマンド yppasswd(第2週で パスワードを変更するのに用いました)の項目が2個有る(yppasswd (1) と yppasswd (3))といっています。 この場合 man コマンドで yppasswd の項目を見てやると、

    % man yppasswd

画面の頭のところに yppasswd というタイトルが出て、今見ている項目が yppasswd (1) だということがわかります。 では yppasswd (3) の方を見るにはどうしたら良いのでしょうか。 この場合には、

    % man 3 yppasswd

とすれば yppasswd (3) の項目を見ることができます。 では (1) とか (3) とかいうのはどうして分かれているのでしょうか。 まずシェルの環境変数 MANPATH をみてみましょう。

    % echo $MANPATH

この変数の内容は前に出てきた環境変数 PATH に似ています。 MANPATH は man 用の PATH という意味で、シェルが外部コマンドを探す時に PATH に書かれているディレクトリーを探すのと同様に、man がオンライン マニュアルを探す時に見るべきディレクトリーを順番に書いてあります。 ではそのディレクトリーの1つの中身を見てみましょう。

    % ls /usr/share/man

man1, man2, man3, man4, man5, man7, man8 というディレクトリーと whatis というファイルがあります。 ディレクトリー man1 の下を見てみます。

    % ls /usr/share/man/man1

沢山のファイル xxx.1(または xxx.1X)がありますね。 さっき調べた yppasswd に関係しそうな yppasswd.1 とういファイルもあります。 では man3 には、どんなファイルがあるでしょうか。

    % ls /usr/share/man/man3

非常に沢山の xxx.3(または xxx.3X)というファイルがありますがやはり yppasswd.3 というのも含まれています。 ここまで書くとわかると思うのですが前に出てきた yppasswd (1) や yppasswd (3) の (1) や (3) はこれらのオンラインマニュアルが man1 とか man3 というディレクトリーに格納されている事を 示しています。 man コマンドは何もオプションをつけないとユーザーが聞いてきた項目に 一致するもので最初に見つけたオンラインマニュアルを表示します。 ですからオプション無しの man コマンドは yppasswd (1) を表示したわけ です。

どうです man コマンドの事とUNIXシステムのオンラインマニュアルのことが 少しはわかったでしょうか。 更に詳しいことは、man (1) を見て下さい。

元に戻る

今週の課題

今週はまずUNIXシステムにおけるコマンドにどんな種類があるかを見ました。 では以下のコマンドをその種類毎に分類して下さい。 また外部コマンドについてはそのコマンドファイルがあるディレクトリー 名についても分類を行なって下さい。 結果を教官にメイルで送って下さい。

compress, diff, dxpaint, exit, f77, history, kill, xeyes

試しにエリアスの定義をしてみましょう。 何か気にいったコマンドを適当なエリアスに割り当ててみましょう。 エリアスの定義を行なった証拠を教官に送りましょう。

    % alias | mail -s 'サブジェクト' asakaguc@sci.hiroshima-u.ac.jp u0872000

上で出てきた外部コマンドについて man でオンラインマニュアルを検索して 下さい。 各コマンドの機能を日本語で簡単にまとめてメイルで教官に送って下さい。

最後の課題は新しいコマンドの検索です。 「ファイルを編集(edit)するコマンド(つまりファイルエディターです)」を 探したいとします。 これに該当するコマンドを全てリストアップしてみて下さい。 結果を教官に送りましょう。 最終的には(大体の見当がついたら)以下のようにファイルに一旦ためて emacs で編集するのが良いでしょう。

    % mkdir week03
    % cd week03
    % man -k キーワード > man.out
    % emacs man.out
    % mail -s 'サブジェクト' asakaguc@sci.hiroshima-u.ac.jp u0872000 \ 
      < man.out

これで今週の課題は終了です。

今週の最初に戻る