whereis -
コマンドのバイナリ、ソース、マニュアルファイルがどこにあるかを突き止める
whereis [options] [
-BMS directory...
-f]
name...
whereis
は、指定されたコマンド名について、
そのバイナリ、ソース、マニュアルファイルがどこにあるかを突き止める。
whereis
に渡された名前は、まず先行するパス名の部分が取り除かれ、
次に、末尾に
.ext
の形を取る拡張子
(たとえば、
.c など)
があれば、それも
(ひとつだけ)
取り除かれる。ソースコードコントロールシステム
(SCCS)
を使用したことによる
s.
という接頭辞への対応も行われる。
whereis
は、それから、検索対象のプログラムなどを
Linux の標準的な場所と、
$PATH や
$MANPATH
によって指定されている場所で見つけ出そうとする。
- [訳注]
- 「s.
という接頭辞への対応」というのは、たとえば、ls
のソースファイルの探索を求められたときに、ls.c
だけでなく、s.ls.c
といったファイルも捜しに行くようにすることである。
検索対象の限定
(オプション
-b,
-m,
-s)
は累加式であり、コマンドラインで後に続く
name
というパターンに適用される。
なお、検索対象の限定をやり直すと、検索の条件が再設定されることになる。たとえば、
は、"ls" と "tr"
については、バイナリファイルと
man
ページを見つけようとし、"gcc"
については、man
ページだけを捜す。
オプション
-B,
-M,
-S
は、後に続く
name
というパターンに対する検索パスを設定し直す。たとえば、
whereis -m ls -M /usr/share/man/man1 -f cal
は、"ls" の man
ページは、デフォルトのパスのすべてで捜すが、"cal"
については、/usr/share/man/man1
ディレクトリのみで検索する。
- -b
- バイナリを検索する。
- -m
- マニュアルを検索する。
- -s
- ソースを検索する。
- -u
- 検出結果が異例であるコマンド名についてのみ表示する。
ここで異例というのは、明示的に調査を要求した各タイプについて、検出結果がただ
1
つではないことである。従って、'
whereis -m -u *'
というコマンドは、
カレントディレクトリのファイルのうちで、文書ファイルがまったく存在しないか、2
つ以上存在するものを求めることになる。
- [訳注]
- この説明は古くなっているのではないかと思う。実際には、手元の
util-linux 2.36 で ' whereis -m -u *'
を実行しても、文書ファイルのまったく存在しないものについては、何も表示されない。2
つ以上存在するものだけが表示される。
-
-B list
-
whereis
がバイナリを捜す場所を限定する。
list
は、ホワイトスペース
(訳注:
スペースやタブ)
で区切ったディレクトリのリストである。
-
-M list
-
whereis
がマニュアルや info
形式の文書を捜す場所を限定する。
list
は、ホワイトスペースで区切ったディレクトリのリストである。
-
-S list
-
whereis
がソースを捜す場所を限定する。
list
は、ホワイトスペースで区切ったディレクトリのリストである。
- -f
- ディレクトリのリストは直前で終わり、ここからファイル名が始まると知らせる。-B,
-M, -S
オプションの何れかを使用するときは、これを
使わなければならない。
- -l
-
whereis
が実際に使用している検索パスのリストを表示する。
-B, -M, -S
のどれも指定されていない場合にこのオプションが表示するのは、
ハードコードされたパスのうちで、
whereis
がシステム上で見つけることのできたものである。
-
-h, --help
- ヘルプを表示して終了する。
-
-V, --version
- バージョン情報を表示して終了する。
デフォルトで
whereis
は、ハードコードされたパスを使って、ファイルを見つけようとするが、
このパスは、グロブのパターンで定義されている。また、
whereis は、環境変数
$PATH
と
$MANPATH
の内容をデフォルトの検索パスとして使用しようとする。
どんなパスが使われているかを知る一番簡単な方法は、
コマンドにリストオプションの
-l
を追加することである。
-l を使えば、
-B,
-M,
-S
の効果も表示される。
- WHEREIS_DEBUG=all
- デバッグ出力を有効にする。
/usr/bin
にあるファイルの内、
/usr/man/man1
にマニュアルがないか、
/usr/src
にソースのないものをすべて見つけ出す。
-
cd /usr/bin
whereis -u -ms -M /usr/man/man1 -S /usr/src -f *
- [訳注]
- 上記のコマンドは、少なくとも手元の
util-linux 2.36
では、指定したディレクトリにマニュアルやソースがないものの表示はせず、たとえば
passwd.1.gz と passwd.1ssl.gz
のように、そうしたものが
2
つ以上ある場合だけ表示するようだ。
-u
オプションの訳注も参照。なお、
当方の場合、マニュアルがあるのは、/usr/share/man/man1
である。
この whereis コマンドは util-linux
パッケージの一部であり、Linux
Kernel Archive <
https://www.kernel.org/pub/linux/utils/util-linux/>
から入手できる。