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
実際、パスのどこかにパターンが指定されているすべてのファイルを検索します。 名前のファイルとディレクトリのみを検索するように指示できます (フルパスではなく)-b
でパターンを含める オプション。これは通常必要なものであり、扱いにくいリストを提供します。
locate
定期的に(1日1回、cron
によって)更新されるバイナリデータベースを使用するため、高速です。 )。 sudo updatedb
を実行すると、自分で更新して、最近追加されたファイルが確実に見つかるようにすることができます。
locate
についてもう1つ –ファイルがまだ存在するかどうかは関係ないため、最近削除されたファイルが見つからないようにするには、-e
を使用します。 。多くの場合、私はless
にもパイプします リストは長くなる可能性があるため。通常、私は次のことを行います:
sudo updatedb && locate -b -e gimp | less
Unityのダッシュがどのように機能するかをここで説明します。Zeitgeistを使用してシステムファイルにインデックスを付け、使用パターンから学習し、他のアプリケーションがこのデータを利用できるようにするため、locate
よりもはるかに多くの作業を実行します。 。