locate
whereis
とwhich
コマンドの基本的な違いは何ですか。
私が観察した基本的な違いは、locate
はファイルシステム全体で関連するすべてのファイル名を見つけますが、whereis
およびwhich
コマンドは、ファイルの場所(システム/ローカルアドレス)インストール済みアプリケーション。私の観察はどれくらい正確ですか?
これらのコマンドは内部でどのように実装されていますか。なぜlocate
はダッシュ検索と比較して非常に高速に動作し、locate
はファイルシステム階層全体でターゲット文字列に一致する特定のファイル名を検索する必要があるのですか?
which
は、プログラムのバイナリ実行可能ファイルを見つけます(PATHにある場合)。 man which
はより明確に説明しています:
現在の環境で実行されるファイル(またはリンク)のパス名を返します。引数が厳密にPOSIX準拠のシェルでコマンドとして指定されていた場合。これは、引数の名前と一致する実行可能ファイルのPATHを検索することにより行います。シンボリックリンクをたどりません。
whereis
は、プログラムのバイナリ、ソース、およびマニュアルページファイルを検索します。例えば
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
これらのコマンドの出力を引数としてls -l
またはfile
に渡すことで、さらに詳細を取得できます。
$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8
$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8
locate
は、パス内のどこかにパターンが指定されているすべてのファイルを実際に検索します。 names(フルパスではなく)に-b
オプションを含むパターンが含まれるファイルとディレクトリのみを検索するように指示できます。通常はあなたが望むもので、扱いにくいリストを提供します。
locate
は、定期的に(毎日1回、cron
によって)更新されるバイナリデータベースを使用するため、高速です。 Sudo updatedb
を実行して、自分で更新して、最近追加されたファイルが見つかるようにすることができます。
locate
についてもう1つ-ファイルがまだ存在するかどうかは関係ないので、最近削除されたファイルが見つからないようにするには、-e
を使用します。リストが長くなることがあるので、私はless
にもパイプします。通常私は:
Sudo updatedb && locate -b -e gimp | less
Unityのダッシュの仕組みについて説明します here - Zeitgeist を使用してシステムファイルのインデックスを作成し、使用パターンから学習し、他のアプリケーションがこのデータを利用できるようにします。 locate
よりも多くの作業。
単に
$ which samba
どのコマンドがPATH設定を介してリストされたプログラムのリストを検索します
$ whereis samba
whereisコマンドは、PATH設定に存在しないプログラムも検索します
$locate samba
また、ファイル名でファイルを検索しますが、ディレクトリ構造自体は検索せず、updatedbによって準備されたデータベースのみを検索します。そのため、検索は検索よりも高速ですが、精度は低くなります。例: