連載
» 2017年03月16日 05時00分 UPDATE

Linux基本コマンドTips(94):whichコマンド――実行コマンドのフルパスを表示する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「which」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

連載目次

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、実行コマンドのフルパスを表示する「which」コマンドです。

whichコマンドとは?

 「which」は、指定されたコマンドを、環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示するコマンドです。「which コマンド名」で、実行コマンドのフルパスを表示します。



whichコマンドの書式

which [オプション] コマンド名

※[ ]は省略可能な引数を示しています




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


画面1 画面1 「passwd」コマンドの実行ファイルがフルパスで表示された


エイリアス(alias)も検索する

 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


画面2 画面2 「alias | which -i」でエイリアスに登録されている「ls」も一緒に表示される


ビルトインコマンドを検索する

 whichコマンドでは、「cd」や「echo」のようなシェルのビルトインコマンドは検索できません。もし、「bashが何を実行しているか」を確認したい場合は、「type」コマンド(本連載第13回)を使用し、「type ls」や「type cd」のように指定して検索しましょう。


【※】主なビルトインコマンドは、同名でほぼ同じ機能の実行ファイルが「/bin」下に用意されているので、「which cd」ならば「/bin/cd」(CentOSでは「/usr/bin/cd」)のように表示されます。



コマンド実行例

type コマンド名

(ビルトインのコマンドを検索する)(画面3


画面3 画面3 「type」コマンドで、実際にはbashの組み込まれている「cd」が実行されることが分かる(英語での表示は「cd is a shell builtin」)


PATHにある全ての実行ファイルを表示する

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)。

画面4 画面4 ユーザー「study」のホームディレクトリ下にも同名の実行ファイルがあることが分かる

 なお、CentOSでは、whichコマンドが「--show-tilde」付きで実行されるようにエイリアスが設定されているため、ホームディレクトリ下にある実行可能ファイルは、「~/bin/tree」のように表示されます(画面5)。

画面5 画面5 実行可能ファイルがチルダ記号(tilde)を使って表示されている

 また、CentOSでは「/bin」が「/usr/bin」へのシンボリックリンクとなっているため、「which -a passwd」のように「/usr/bin」にあるコマンドを「-a」で調べると、「/usr/bin」と「/bin」の2行は必ず表示されることになります(画面6)。

画面6 画面6 「/bin」は「/usr/bin」へのシンボリックリンクなので実際は同じファイル


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。