web-dev-qa-db-ja.com

検索と検索:使用法、互いの長所と短所

LinuxおよびUnixシステムには、一般的な2つの検索コマンド locate および find があります。

それぞれの長所と短所は何ですか? 1つが他よりも利点がある場合?

138
m0nhawk

locateは事前に構築されたデータベースを使用します。これは定期的に更新する必要がありますが、findはファイルシステムを反復してファイルを探します。

したがって、locatefindよりもはるかに高速ですが、データベースが(キャッシュとして認識できる)更新されていない場合は不正確になる可能性があります(updatedbコマンドを参照)。

また、findは、ファイルのすべての属性でファイルをフィルタリングできるので、より細分性を提供できますが、locateは、ファイル名と一致するパターンを使用します。

36
user435943

findは、UNIXの初心者またはたまに使用するユーザーが、manページを注意深く熟読しないと正常に使用することはできません。歴史的に、findの一部のバージョンは-printオプション、ユーザーの敵意に追加します。

locateは柔軟性が低くなりますが、一般的なケースで使用する方がはるかに直感的です。

7

Locateのわずかな欠点は、関心のあるファイルシステムの領域にインデックスが作成されない可能性があることです。Debianデスクトップシステム(Linux Mint 17.2など)では、/ etc/updatedb.confファイルは特定の領域を考慮から除外するように構成されています、/ tmp、/ var/spool、/ home/.ecryptfsなど。

/home/.ecryptfsを無視すると、暗号化されたディレクトリ内のファイル名が権限のないユーザーに公開されるのを防ぎます。ただし、ホームディレクトリがecryptfsで暗号化されている場合は、ホームディレクトリにインデックスが作成されていないため、locateはホームディレクトリで何も検出しません。これは、あなたにとってはほとんど役に立たないかもしれません(私にとってはそうです)。結果が見つからないことに加えて、updatedbプロセスは定期的にディスクをロードして何のメリットもありません。また、システムのメインユーザーまたは唯一のユーザーである場合は無効にされる場合もあります。

2
Jim