Linuxを使っていると、「あるコマンドが正しくインストールされているか」「実際にどのパスにあるのか」といった確認をしたくなる場面がよくあります。そんな時に役立つのが「which」コマンドです。
このコマンドは、シンプルながら非常に便利で、日常的にLinuxを操作するエンジニアや開発者にとって、なくてはならないツールです。
本記事では、「which」コマンドの基本的な使い方から、似たコマンドとの違い、トラブル時の対処法まで、初心者の方にもわかりやすく解説します。
whichコマンドとは?
whichコマンドは、指定したコマンドが「どのパスに存在するか」を表示してくれるコマンドです。
たとえば、シェルがコマンドを実行する際に参照する環境変数PATHに基づいて、対象のコマンドがどのディレクトリにあるのかを教えてくれます。
基本構文
which コマンド名
使用例
$ which ls
/bin/ls
この例では、lsコマンドが/bin/lsに存在していることがわかります。つまり、シェルがlsを実行するときは、このパスを参照しているということです。
whichコマンドの基本的な使い方
複数のコマンドを一括で確認
whichコマンドは複数のコマンドを同時に指定することができます。
$ which ls cp mv
/bin/ls
/bin/cp
/bin/mv
このように、ls、cp、mvのそれぞれの実体パスが表示されます。
コマンドが見つからない場合
もし指定したコマンドがPATH上に存在しない場合は、何も出力されず、終了ステータスで判断することができます。
$ which notexist
$ echo $?
1
終了ステータスが1であれば、見つからなかったということになります。成功した場合は0になります。
whichの内部的な仕組み
whichコマンドは、環境変数PATHに設定されたディレクトリを順に検索し、最初に見つかった該当コマンドのパスを返します。
したがって、PATHの設定が変わると、whichの結果も変わります。
$ echo $PATH
/usr/local/bin:/usr/bin:/bin
上記の例では、whichはこの順番でコマンドを探します。つまり、同じ名前のコマンドが複数のパスに存在する場合は、優先順位の高いディレクトリにあるものが使われます。
type、whereis、commandとの違い
Linuxでは、コマンドの場所を調べるために、which以外にもtypeやwhereis、commandなどのコマンドがあります。用途や表示内容が異なるため、使い分けが重要です。
typeコマンド
$ type ls
ls is aliased to `ls --color=auto'
typeは、コマンドがエイリアス、シェルビルトイン、関数、あるいは外部コマンドかどうかを調べます。
whereisコマンド
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
whereisは、バイナリ、ソースコード、マニュアルページを検索します。whichよりも幅広い情報が得られます。
command -v(推奨される方法)
$ command -v ls
/bin/ls
command -vはPOSIX準拠の方法で、スクリプトで使うのに適しています。新しい環境ではwhichの代わりにこちらが推奨されることもあります。
whichコマンドが使えない?よくあるトラブルと対処法
whichがインストールされていない
一部の軽量LinuxディストリビューションやDockerコンテナでは、whichが最初からインストールされていないこともあります。
対処方法(Debian系の場合)
sudo apt update
sudo apt install which
RedHat系の場合
sudo yum install which
コマンドは存在するのに表示されない
これは、PATHに含まれていないディレクトリにあるコマンドを調べた場合に起きます。
対処法:
そのディレクトリを一時的にPATHに追加してから再実行してみましょう。
export PATH=$PATH:/opt/mytools
which mycommand
スクリプト内での活用例
シェルスクリプトの中で、あるコマンドの存在をチェックしたい時にもwhichは使えます。
if which curl > /dev/null; then
echo "curlがインストールされています"
else
echo "curlが見つかりません"
fi
ただし、スクリプトの可搬性やPOSIX準拠を考慮するなら、command -vを使うのがベストです。
whichはどんなときに便利か?
- ソフトウェアが正しくインストールされているか確認したいとき
- スクリプトやMakefileでコマンドの場所を確認したいとき
- 同じ名前のコマンドが複数存在する環境で、どれが使われているのかを知りたいとき
普段意識せず使っているコマンドも、実は複数の場所にインストールされていて、意図しない動作をすることがあります。そんなときに、whichは確認ツールとしてとても役立ちます。
まとめ
whichコマンドは非常にシンプルでありながら、Linuxの運用やトラブルシューティングの際に欠かせない存在です。
コマンドの実体を確認するだけでなく、環境設定の見直しやスクリプトでの存在チェックなど、さまざまな場面で活躍します。
ただし、近年ではwhichよりもcommand -vやtypeの方が推奨されるケースもあります。
目的に応じて使い分けることで、よりスマートにLinuxを扱うことができるでしょう。
「このコマンド、どこにあるの?」と思ったら、まずはwhichを試してみてください。あなたのLinuxライフが、少しだけ快適になるはずです。
