読書受け入れられた回答怪しい検索対検索:お互いの使い方、長所、短所これはlocate
、このアプリの最大の利点がスピードであることを意味し、私はこのアプリを使用することで得られる利点があるかどうかを確認するためにいくつかのテストを実行したいと思いました。
find
最初のステップは、同様のサービスを提供するときにツールの速度を推定することでしたlocate
(したがって追加の項目はなく、ファイル名のみを検索します)。
私は驚いた。
time find / 2>/dev/null >/dev/null
(ユーザー権限に応じて)すべてのファイルを繰り返すとします。
real 0m1.231s
user 0m0.353s
sys 0m0.867s
かなり速い結果。
私の質問は、適用されたコマンドが実際に速度をベンチマークする方法かどうかですfind
。
私が答えたい質問の1つは、ファイルシステム、つまりオペレーティングシステム(Linuxカーネル)に結果に影響を与える可能性のあるバッファの種類がありますか?
私の結果は、キャッシュを削除するとecho 3 > /proc/sys/vm/drop_caches
速度が大幅に向上することですfind
。
$ sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
$ time (find / 2>/dev/null >/dev/null)
real 0m24.290s
user 0m1.143s
sys 0m8.230s
しかし、私のLinuxシステムでは、その後の使用は約1秒にfind
戻ります。mlocate
要約すると、知りたいfindコマンドをベンチマークする方法(検索と比較)
更新/備考
この質問は別の比較によって引き起こされ、測定/ベンチマーク速度について質問していますが、locate
ライブOS /ファイルシステム(例えば)から収集されたデータはデータベース(例えば)です。私のOSカーネルはキャッシュ動作がかなり良いので、orを介した検索実行時間はまだかなり似ています。find
find
find
locate
find
locate
したがって、問題は、オペレーティングシステム(ファイルシステム)キャッシュを削除することがコールドブートをfind
完了するのに必要な「実際の」時間をシミュレートするのに十分であるかどうか、そしてこれらのスピードアップキャッシュが持続すると仮定することがどれほど現実的であるか(似ています)に帰結します。updatedb
locate
すべての後続find
の呼び出しに対してデータベースファイルとして)。
答え1
OpenBSDから、ロケーションデータベースはデフォルトで週に一度再構築されます。/etc/weekly
/usr/libexec/locate.updatedb
ユーザーとしてスクリプトを呼び出しますnobody
。
これlocate.updatedb
/bin/sh
ユーティリティは、ルートファイルシステム(OpenBSD)である程度実行されるスクリプトです。アクセスできるものはすべて場所データベースに保存されます。pdksh
find
nobody
find /
を介して生成されたファイルデータベースを使用するシステムよりも、これが高速であるとlocate
信じるのは難しいです。locate
find /
もちろん、違いは以下が見つかるということです。その他のドキュメントfind
そのユーザーよりも高いアクセス権を持つユーザーとして実行しますnobody
。
Linuxで、少なくとも職場でアクセスできるUbuntuシステムでは、locate
マニュアルに従ってデータベースが毎日再生成されるようですlocate(8)
。これはupdatedb
ユーティリティを介して行われます。
ユーティリティ(このシステムのシンボリックリンク/usr/bin/updatedb.mlocate
)は、パッケージに属するコンパイルされたバイナリですmlocate
。
あなたは見ることができます由来mlocate
ただし、これは基本的にファイルシステムを参照するCプログラムです。 mlocate
また、実行間で変更されていないファイルシステムビットに移動しないでください。
mlocate
同様に、データベースを照会することが(とにかく)データベースを実行するよりも遅くなる可能性があるという事実を信じることは困難ですfind /
。
最終的に、これがlocate
私が知っているすべてのツールがデータベースに対して機能する理由です。