コマンドの実行ファイルだけでなくマニュアルの場所も知りたい

whichコマンドはPATH上の実行ファイルの場所しか調べられない。実行ファイルに加えて、ソースコードやマニュアルページの場所もまとめて知りたい場合はwhereisコマンドを使う。

whereis でバイナリ・ソース・マニュアルをまとめて検索する

whereisにコマンド名を渡すと、バイナリ・ソースコード・マニュアルページの場所を一度に検索して表示する。

$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

lsの実行ファイルとマニュアルページの場所が表示されている。この環境にはソースコードが存在しないため、ソースの場所は表示されていない。

-b でバイナリのみを検索する

-bオプションを使用すると、バイナリの場所のみを検索する。

$ whereis -b ls
ls: /usr/bin/ls

-m でマニュアルページのみを検索する

-mオプションを使用すると、マニュアルページの場所のみを検索する。

$ whereis -m ls
ls: /usr/share/man/man1/ls.1.gz

-s でソースコードのみを検索する

-sオプションを使用すると、ソースコードの場所のみを検索する。多くのディストリビューションではソースコードが標準でインストールされていないため、該当なしになることが多い。

$ whereis -s ls
ls:

該当するコマンドが存在しない場合

存在しないコマンド名を指定した場合は、コマンド名の後ろに何も表示されない。

$ whereis thiscommanddoesnotexist
thiscommanddoesnotexist:

whichとは異なりエラーメッセージを出さないため、シェルスクリプトで存在確認に使う場合は出力内容をパースする必要がある。

which との違い

whichはPATH上の実行ファイルの場所しか調べられないのに対し、whereisは標準的な場所にあるバイナリ・ソースコード・マニュアルページをまとめて検索できる。

$ which ls
/usr/bin/ls

実行ファイルの場所だけを素早く確認したい場合はwhich、マニュアルページやソースコードの場所も含めて調べたい場合はwhereisを使うとよい。