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よりもはるかに多くの作業を実行します。 。