next up previous contents
Next: 4 標準入出力とリダイレクト Up: UNIX 基礎演習 B 組 Previous: 2 コマンド入力の支援機能

Subsections


3 コマンド検索パス

3.1 コマンドの在処

第3部ファイルシステムの第1.5節 で紹介したとおり, UNIX のコマンドはファイルとして存在しています。 コマンドの多くは, コマンドと同名の実行可能なアクセス権を持つファイルです。

さて,実行しようとするコマンド(ファイル)がどこにあるのかを調べるために, which というコマンドが利用できます。 which の引数にコマンド名を与えると,そのコマンドの所在が絶対パ ス名で表示されます。 ls, cal, emacs, kterm の各コマンドがどこにあるのかを調べるために

which ls cal emacs kterm
を実行してください。

3.2 コマンド検索パス

コマンド行にコマンド名をタイプすると,シェルは実行すべきコマンド(ファイ ル)を特定のディレクトリから検索します。そのディレクトリは

echo $PATH
を実行して調べることができますので試してください 6
ディレクトリの絶対パス名が : (コロン) で区切られて表示されますが,先ほど which を使って調べたコマンドの在処は,すべてこのディレクトリのリスト中 に含まれているはずです。

ディレクトリ /bin の中のコマンド ls のようにファイルとして存在しているコ マンドを実行するときには,本来,パス名(例えば ls の絶対パスであれば /bin/ls) を使う必要があります。しかし,それでは不便ですので, $PATH リスト 7 に含まれるディレクトリ内のコマンドについては,ファ イル名(コマンド名)のみで実行できるようになっているのです。逆に言えば,こ のリストに含まれるディレクトリ以外の場所に,ファイルとして存在するコマン ドを実行するには,パス名を用いなければいけません。

ここで $PATH のリストに . (ドット = カレントディレクトリ) が含まれてい ないことに注意しましょう。コマンド名でコマンドを実行しようとすると, その実体であるファイルはあくまで $PATH リスト内のディレクトリから検索さ れます。したがって,$PATH リストに . が含まれていなければ,カレントディ レクトリ内に存在するコマンドを,コマンド名のみで実行することはできません。 そのため,仮にカレントディレクトリ内にコマンド com が存在するとして,そ れを実行したければ,カレントディレクトリに存在するコマンドであることを明 示して ./com 等とする必要があるのです 8

なお,コマンド名でコマンドを実行する場合,$PATH リストの始めの方から, コマンドが探索されます。したがって,同名のコマンドが $PATH リストの中の 複数のディレクトリに存在する場合,始めの方のディレクトリに存在するものが 実行されます。

3.3 シェル組み込みコマンド

コマンド which はどこにあるのでしょう -- which which を実行してください。 which: shell built-in command. (シェル組み込みコマン ド) と表示されますね。このように,コマンドと同名のファイルではなく,シェ ルが内部に持っているコマンドもあります。 例えば,ログアウトするために使っている exit というコマンドは,正確には現在使っているシェルを終了するためのシェ ル組み込みコマンドです。ログインシェルを終了すると計算機からログアウトす ることになるので9,exit で計算機の利用を終えることができるので す。

シェルの組み込みコマンドは,コマンド検索パスの設定にかかわらず,コマンド 名で実行できます。また,実行の優先順位はファイルのコマンドより高いです 10

シェル組み込みコマンドのマニュアルは,シェルのマニュアルに記載されていま す11

3.4 発展 -- PATH の設定; 標準の $PATH が変更されたため,本節の 実行例は WS 室システムでは無効

ディレクトリ /sbin には管理用コマンドが格納されています。一般ユーザー用 の標準設定では,/sbin は $PATH のリスト内にはありませんので,/sbin に存 在するコマンドをコマンド名だけで実行することはできません。しかし,$PATH のリストに /sbin を加えることによって,/sbin に存在するコマンドをコマンド 名のみで実行できるようになります。 そのためには,シェルとして csh や tcsh を使っている場合,

setenv PATH ${PATH}:/sbin
を一度実行します。 これにより,例えば /sbin/mount を mount と打つだ けで実行できるようになります。

ただし,この設定はログアウトすると無効になりますので,ログインする度に行わなけ ればなりません。それをせずに済ますには,ホームディレクトリのファイル .cshrc の最後に上記の内容を書き込んでおきます。.cshrc に書いた内容 は,ログインする度に自動的に実行されます12

なお,$PATH は環境変数と呼ばれるものの一つであり, setenv は環境変数を設定するためのシェル組み込みコマンドです。 setenv の一般的な書式は

setenv 環境変数名 値
ですが,これ以上の説明は割愛します 13


next up previous contents
Next: 4 標準入出力とリダイレクト Up: UNIX 基礎演習 B 組 Previous: 2 コマンド入力の支援機能

平成18年1月25日