web-dev-qa-db-ja.com

なぜロケートは見つけるよりも速いのですか?

ソースでファイルを探していて、検索と検索の両方を試みました。意外なことに、locateはマシン全体を検索し、現在のディレクトリとサブディレクトリのみを検索するfindよりも高速でした。

両方のシェルコマンドを次に示します。

find . -name vendorsetup.sh # takes 50 seconds to search all files in curren -sub directories.

locate vendorsetup.sh # takes 20 seconds to search file in whole machine.

なんでこれ?

7
Sunil Shahu

locateはデータベースを使用し、定期的にファイルシステムのインベントリを作成します。データベースは検索用に最適化されています。 findはサブディレクトリ全体を走査する必要があります。これはかなり高速ですが、locateほど高速ではありません。

12
Jos

Locateについて:

Locateは、/var/lib/slocate/に格納されるインデックスを使用します。これは、夜間のCronジョブによって更新されます。この夜間ジョブは通常、現地時間の午前1時または午前2時に実行され、システム全体(接続されているすべてのドライブを含む)を完全にスキャンします。結果のインデックスは単なるファイル名のリストです。ファイルシステム内のすべての要素に対して既にインデックスが作成されているため、検索は非常に高速になります。

しかし、findはそうではありません。

毎回、検索を新鮮な検索と見なし、ファイルの場所のキャッシュを保存しません。

見つけるのに時間がかかります。

それが役立つことを願っています。

3
rɑːdʒɑ