Linuxのwhereコマンドやwhichコマンドは

実行後すぐに結果がかえってきます。

検索しているにしてはすこし早すぎるように思うのですが、
どこかにインデックスが作られていたりするのでしょうか?
もし単純なfindでないならば、仕組みを教えて欲しいです。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/12/13 09:25:41
  • 終了:2007/12/16 02:48:22

回答(2件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/12/13 09:38:18

ポイント35pt

これらのコマンドは、ディスク全体を検索するのではなく、Path が通っている範囲を検索します。

( echo $PATH 等で表示される範囲)


Path の指定先が多ければ検索範囲が広くなりますが、それでもディスク全体に対してはごく一部の範囲でしょう。

なので一般のファイル検索等に比べて、処理時間は短時間となります。

http://cyberam.dip.jp/linux_command/command/man.html#which

id:znz No.2

znz回答回数193ベストアンサー獲得回数252007/12/13 19:39:35

ポイント35pt

組み込みコマンドのwhichなどの場合はインデックスはシェルの中に作られています。

コマンドを実行するときの最初のコマンド部分の補完にも使われているものと共通だと思います。

bashなどは自動で検索し直しますが、(t)cshやzshなどは高速化のためrehashコマンドで明示的にインデックスを再構築するようになっています。(t)cshやzshで新しくインストールしたコマンドが補完に出てこないことがあるのはそのためです。

外部コマンドのwhichを使った場合はPATHを全部検索しますが、他の回答やコメントにあるように、PATHを通しているところだけに対して特定のファイルの存在をチェックするだけなので、そんなに時間はかかりません。

  • id:KuroNeko666
    Mookさんに追記
    echo $PATH で表示されるパスに対し、先に表示されたディレクトリ順にコマンドを探していきます。
    PATH=/usr/bin;/usr/local/bin
    となっていて、両方に同じコマンドがある場合、/usr/local/bin にあるコマンドよりも /usr/bin にあるコマンドを優先で実行します。

    これは、Windows のコマンドプロンプトも同様です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません