実行後すぐに結果がかえってきます。
検索しているにしてはすこし早すぎるように思うのですが、
どこかにインデックスが作られていたりするのでしょうか?
もし単純なfindでないならば、仕組みを教えて欲しいです。
よろしくお願いします。
これらのコマンドは、ディスク全体を検索するのではなく、Path が通っている範囲を検索します。
( echo $PATH 等で表示される範囲)
Path の指定先が多ければ検索範囲が広くなりますが、それでもディスク全体に対してはごく一部の範囲でしょう。
なので一般のファイル検索等に比べて、処理時間は短時間となります。
組み込みコマンドのwhichなどの場合はインデックスはシェルの中に作られています。
コマンドを実行するときの最初のコマンド部分の補完にも使われているものと共通だと思います。
bashなどは自動で検索し直しますが、(t)cshやzshなどは高速化のためrehashコマンドで明示的にインデックスを再構築するようになっています。(t)cshやzshで新しくインストールしたコマンドが補完に出てこないことがあるのはそのためです。
外部コマンドのwhichを使った場合はPATHを全部検索しますが、他の回答やコメントにあるように、PATHを通しているところだけに対して特定のファイルの存在をチェックするだけなので、そんなに時間はかかりません。
コメント(1件)
echo $PATH で表示されるパスに対し、先に表示されたディレクトリ順にコマンドを探していきます。
PATH=/usr/bin;/usr/local/bin
となっていて、両方に同じコマンドがある場合、/usr/local/bin にあるコマンドよりも /usr/bin にあるコマンドを優先で実行します。
これは、Windows のコマンドプロンプトも同様です。