本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「which」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、実行コマンドのフルパスを表示する「which」コマンドです。
「which」は、指定されたコマンドを、環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示するコマンドです。「which コマンド名」で、実行コマンドのフルパスを表示します。
whichコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-a | --all | 環境変数PATHにある全ての実行ファイルを表示する(デフォルトは最初に見つかったものだけを表示) |
-i | --read-alias | 標準入力からエイリアスを読み込み、合致したものを表示する |
--skip-alias | 「--read-alias」を打ち消す | |
--read-functions | 標準入力から関数(function)を読み込み、合致したものを表示する | |
--skip-functions | 「--read-functions」を打ち消す | |
--skip-dot | 環境変数PATHに「./」から始まるディレクトリがあった場合、そのディレクトリは検索対象外とする | |
--skip-tilde | 環境変数PATHに「~」(ホームディレクトリ)から始まるディレクトリがあった場合、そのディレクトリは検索対象外とする | |
--show-dot | 「which ./programname」のように「./」付きで検索したコマンドは、フルパスではなく「./programname」のように表示する | |
--show-tilde | ホームディレクトリをフルパスではなく「~」記号で表示する | |
--tty-only | 「tty」ではない場合、オプションの処理を直ちに終了する | |
「which 名前」では、指定した名前で実行されるコマンドの実行ファイルをフルパスで表示します。例えば、「which passwd」では「passwd」コマンドの実行ファイルが表示されます。
whichコマンドは、環境変数PATHに登録されているディレクトリにある実行可能ファイルを検索します。検索はPATHの登録順で、デフォルトでは最初に見つかったファイルだけを表示します。
which コマンド名
(指定した名前で実行されるコマンドをフルパスで表示する)(画面1)
whichコマンドは、環境変数PATHに登録されているディレクトリにある実行可能ファイルを検索します。
パスなしでコマンドを実行する際、シェルは「エイリアス」→「ビルトインコマンド」→「環境変数PATHに登録されているディレクトリにある実行コマンド」の順番で探し、最初に見つけたものを実行します(連載「“応用力”をつけるためのLinux再入門 第8回」参照)。また、環境変数PATHに登録されているディレクトリは、先に書かれているものが優先されます。
そこで、例えば「which ls」を実行すれば、「どこにあるlsコマンドが実行されているか」「lsコマンドがどこにあるか」が分かります。
ただし、「ls」と同じ名前のエイリアス(alias)が登録されている場合は、実際に実行されるのはエイリアスになります。「-i」オプション(「--read-alias」オプション)を使うと、エイリアスの登録内容も併せて検索することができます。
「-i」オプション(「--read-alias」オプション)は、標準入力からエイリアスを読み込みます。そこで、「which ls」でエイリアスに登録されているlsコマンドも確認したい場合は、「alias | which -i ls」のように指定して検索します。
なお、CentOSの場合は、「which」という名前のエイリアスで常に「--read-alias」オプションでエイリアスも検索するよう設定されています。
alias | which -i コマンド名
(指定したコマンドをエイリアスの登録内容も併せて検索する)(画面2)
whichコマンドでは、「cd」や「echo」のようなシェルのビルトインコマンドは検索できません。もし、「bashが何を実行しているか」を確認したい場合は、「type」コマンド(本連載第13回)を使用し、「type ls」や「type cd」のように指定して検索しましょう。
【※】主なビルトインコマンドは、同名でほぼ同じ機能の実行ファイルが「/bin」下に用意されているので、「which cd」ならば「/bin/cd」(CentOSでは「/usr/bin/cd」)のように表示されます。
type コマンド名
(ビルトインのコマンドを検索する)(画面3)
whichコマンドは、デフォルトでは環境変数PATHに登録されているディレクトリを順番に検索して、最初に見つけた実行可能ファイルを表示します。
全ての実行ファイルを表示したい場合は、「-a」オプションを指定します。
which -a コマンド名
(PATHにある全ての実行ファイルを表示する)
例えば、以下の実行例では「tree」コマンドを探しています。treeコマンドは、ディレクトリをツリー表示するというコマンドで、筆者がCentOSに追加インストールしました。
「which tree」では「/usr/local/bin/tree」と表示されるので、「/usr/local/bin/tree」が実行されると分かります。しかし、「which -a tree」で確認すると「/home/study/bin/tree」にも同名の実行可能ファイルが存在することが分かります(画面4)。
なお、CentOSでは、whichコマンドが「--show-tilde」付きで実行されるようにエイリアスが設定されているため、ホームディレクトリ下にある実行可能ファイルは、「~/bin/tree」のように表示されます(画面5)。
また、CentOSでは「/bin」が「/usr/bin」へのシンボリックリンクとなっているため、「which -a passwd」のように「/usr/bin」にあるコマンドを「-a」で調べると、「/usr/bin」と「/bin」の2行は必ず表示されることになります(画面6)。
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.