Linux / コマンド / whereis - コマンドのバイナリ・ソース・マニュアルの場所を探す

whereisは、コマンドに関連するバイナリ、ソースコード、マニュアルページを標準システムの場所で探します。PATH上の外部実行ファイルを探すwhichコマンドとは異なり、複数の種類の関連ファイルを一度に確認する際に便利です。

この記事ではwhereisの基本的な文法と主なオプション、実際の使用例、関連コマンドとの違い、使用時の注意点について説明します。

util-linuxのwhereisは、既定の検索場所に加え、PATH(実行ファイルの探索先)や MANPATH(マニュアルの探索先)などから検索場所を構成します。ファイルシステム全体を再帰的に探索するコマンドではないため、任意のユーザーディレクトリや標準外のインストール場所は見つからない場合があります。

基本的な文法

whereis [オプション] 名前 ...

オプションや詳細な動作は実装やバージョンによって異なる場合があります。現在のシステムではwhereis --helpとman whereisでインストールされたコマンドの説明を確認してください。

whereisの基本的な使い方

コマンド関連の場所をすべて探す

バイナリやマニュアルなど、見つかったパスを一行で表示します。

whereis bash

バイナリのみを探す

-bで実行ファイルのみ検索することを選択します。

whereis -b ssh

マニュアルのみを探す

-mでマニュアルページの位置だけを探します。

whereis -m printf

バイナリとマニュアルの位置を区別する

whereisは名前に関連する実行ファイル・マニュアルなどの標準的な場所を検索します。ディスク全体を再帰的に検索することはありません。

whereis ls

例の出力(インストールパスは環境によって異なります):

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

前のパスは実行ファイル、後のパスはマニュアルファイルです。現在のシェルが実際に選択する実行パスを知りたい場合は、typeまたはcommand -vを使用してください。

主なオプション

オプション 説明
-b バイナリを検索します。
-m マニュアルページを検索します。
-s ソースファイルを検索します。
-B DIRS -f バイナリ検索パスを指定します。
-M DIRS -f マニュアル検索パスを指定します。
-S DIRS -f ソース検索パスを指定します。
-u 明示した各種類で結果がちょうど1件にならない名前を表示します。0件や複数件が対象で、危険なファイルを判定する指定ではありません。
-l 実際の検索パスの一覧を表示します。

実践的活用例

検索パスを確認する

結果が予想と異なる場合は、-lで現在の実装が確認するパスをまず見ます。

whereis -l

カスタムパスでバイナリを探す

パスリストオプションの後には、ファイル名の処理を開始する-fが必要です。

whereis -b -B /usr/local/bin /opt/tools/bin -f mytool

実行パスと関連ファイルを一緒に診断する

シェル選択の結果と標準位置の関連ファイルをそれぞれ確認します。

command -v python3
whereis python3

whereisと関連コマンドを比較する

コマンド 主な役割 適した状況
whereis 標準位置の関連ファイル バイナリ・ソース・マニュアルを探索する
which PATH実行ファイル 外部実行パスの確認
type シェルコマンドの種類 エイリアス・関数・組み込みを含む診断
find パスを直接巡回 任意の場所と複雑な条件

使用する際の注意点

ディスク全体の検索ではありません

検索パス外にインストールされたファイルは見えない場合があります。

基本はプログラム名で指定する

基本はプログラム名を指定します。先頭のディレクトリ部分は取り除かれるため、パスを渡してもその場所を直接調べたり、その配下を再帰検索したりする指定にはなりません。

-B・-M・-Sの後の-fを確認する

検索ディレクトリのリストが終わり、ファイル名が始まることを区別しないと、引数の解釈が異なります。

FAQ

whereis は PATH だけを検索しますか?

いいえ。標準のバイナリ・ソース・マニュアルのパスや、環境から取得した位置を検索します。

結果がない理由は何ですか?

非標準の場所にインストールされているか、選択した種類のファイルが検索パスにない可能性があります。

検索パスを見ることはできますか?

util-linux の実装では whereis -l を使用します。

システム全体でファイルを探すには?

現在の状態を直接検索するにはfindによるパス探索、インデックスベースの名前検索には locate を使用します。

参考資料