答え1
locate(1)
これに比べて唯一の大きな利点がありますfind(1)
。まさにスピードです。
find(1)
しかしたくさん利点locate(1)
:
find(1)
オリジナルであり、AT&T Unixの最初のバージョンに戻る。組み込みLinuxの簡単なバージョンでも見つけることができます。by ビジーボックス。これはほぼ普遍的です。locate(1)
それよりはるかに若いですfind(1)
。最初の祖先はlocate(1)
1983年まで現れなかったlocate
、1994年に採択されるまでは広く使われていませんでした。GNU findutilsと入力してくださいそして4.4BSDエントリー。locate(1)
道路非標準そのため、デフォルトではどこにでもインストールされるわけではありません。一部のPOSIXタイプのオペレーティングシステムではこれをオプションとして提供するものもなく、使用可能な場合は必ず使用する必要がある最小機能セットを指定する独立した標準がないため、実装時に必要な機能が不足する可能性があります。一つある実は標準、はいBSD
locate(1)
ただし、これは他の2つの基本スタイルがすべてのオプション(、、、、、、およびlocate
)を-0
実装しているためです。-c
-d
-i
-l
-m
-s
-S
mlocate
BSDにない6つの追加オプションを実装しました:、、、、およびlocate
BSDにない実装-b
-e
-P
-q
--regex
-w
牛に似た一種の栄養locate
この6つと異なるものを実装してください。4つ:-A
、、、、そして。-D
(vs vsのようなエイリアスとニュアンスは無視されます。)-E
-p
-?
-h
--help
BSDMac OS XはBSDを提供しています
locate
。ほとんどのLinuxはGNUを提供します
locate
が、Red Hat LinuxとArchはmlocate
代替を提供します。 Debian は、デフォルトのインストールに両方のバージョンをインストールしませんが、デフォルトのパッケージリポジトリに両方のバージョンをインストールする場合は、locate
「」を実行しますmlocate
。Oracleが
mlocate
Solarisでリリースされました。11.2から、2014年12月発売。以前は、locate
Solarisにデフォルトでインストールされていませんでした。 (おそらくこれは、以下に関連するSolarisコマンドの数を減らすために行われました。Oracle Linux今すぐRed Hat Enterprise Linuxベース、も使用されますmlocate
。 )IBM AIXまだバージョンがリリースされていませんが
locate
、少なくともAIX 7.2から開始、findutils
GNUをインストールしていない場合Linuxアプリケーション用のAIXツールボックス。HP-UX返品現れる基本システムが不足しています
locate
。長老「本物」Unix実装は通常含まれません
locate
。find(1)
強力な表現構文と多くの機能を持っています。ブール演算子、等。find(1)
名前でファイルを選択するだけでは可能ではありません。以下から選択できます。- 年齢
- サイズ
- 所有者
- ファイルタイプ
- タイムスタンプ
- 特権
- サブツリー内の深さ...
名前でファイルを検索するときは、次のように検索できます。ファイルグロービング構文すべてのバージョン
find(1)
、またはGNUまたはBSDバージョンでは、以下を使用します。一般的な表現。現在のバージョンは
locate(1)
globパターンも受け入れますfind
が、BSDはlocate
正規表現をまったく実装していません。私と同じように、さまざまな種類のマシンで作業する必要がある場合は、grep
orの依存関係を開発するよりもフィルタリングを好むでしょう。-r
--regex
locate
これより強力なフィルタリングが必要find
な理由は...find(1)
ファイルシステム全体が必ずしも検索されるわけではありません。通常、作業したいすべてのファイルを含む親ディレクトリである子ディレクトリを指します。実装の一般的な動作locate(1)
は、パターンに一致するすべてのファイルをエクスポートしてgrep
フィルタリングなどを実行してバーストサイズを減らすことです。(悪いヒント:
locate /
システム上のすべてのファイルのリストを提供することもできます!)locate(1)
ユーザー権限に応じて出力を制限するいくつかのバリエーションがありますが、これは主要なオペレーティングシステムのデフォルトバージョンではslocate(1)
ありません。locate
find(1)
できる働くファイルの検索に加えて、見つかったファイルにアクセスすることもできます。最も強力で広くサポートされている演算子はありますが、-exec
他の演算子もあります。たとえば、最近のGNUおよびBSD検索の実装には-delete
演算子があります-execdir
。find(1)
リアルタイムで実行されるため、出力は常に最新の状態に保たれます。過去数時間または数日間更新されたデータベースに依存しているため、
locate(1)
出力は最新ではない可能性があります。 (これは古いキャッシュの問題.) このコインには両面があります。locate
存在しなくなったファイルには名前を付けることができます。GNUには、見つかった各ファイルの名前を印刷する前にファイルが存在することを確認するフラグがありますが、
locate
これは速度上の利点を一部排除し、BSDでは使用できません。mlocate
-e
locate
locate
locate
最後のデータベース更新以降に生成されたファイルには名前は付けられません。
locate
結果が間違っている可能性があることを知っているので、結果についてある程度不信になる方法を学びます。この問題を解決する方法はいくつかありますが、広く使用されている実装はありません。例えば、
rlocate
しかし、それは現れる最新のLinuxカーネルでは機能しません。find(1)
これを実行しているユーザーよりも多くの権限を持っていません。locate
システム内のすべてのユーザーにグローバルサービスを提供するため、プロセスはファイルシステム全体を見ることを期待updatedb
しroot
ています。これによりセキュリティの問題が選択されます。rootとして実行します
updatedb
が、出力ファイルをlocate
実行するために特別な権限が必要ないように、誰でも読めるようにします。これにより、システム上のすべてのファイル名がすべてのユーザーに効果的に公開されます。これは実際の問題を引き起こすのに十分かもしれません。BSDは、
locate
Mac OS XとFreeBSDでこのように構成されています。読み取りのみでデータベースに書き込ん
root
だ後locate
setuid
根これにより、データベースを読み取ることができます。これがlocate
実際に意味するのは、一般的に見えないファイルを表示しないようにオペレーティングシステムの権限システムを再実装する必要があることです。それはまた加える攻撃面特に危険にさらされたシステムルートアップグレード攻撃。locate
データベースファイルを所有する特別なユーザーまたはグループを作成し、そのユーザー/グループがデータベースを読み取れるようにlocate
バイナリにタグを付けます。setuid/setgid
これ自体は特権上昇攻撃を防ぐことはできませんが、発生する可能性のあるダメージを大幅に軽減できます。mlocate
このように構成されています。Red Hat Enterprise Linux。locate
しかし、デバッガを使用または作成できる場合は、まだ問題があります。コアダンプデータベースの特権部分にアクセスできます。
locate
システムの各ユーザーに対して個別に実行せずに、本当に「安全な」コマンドを生成する方法が見つかりませんでしたfind(1)
。
一般的に両方とも非常に便利です。locate(1)
これは、名前で特定のファイルを見つけようとするとうまく機能します(ファイルが存在することを知っていますが、正確な場所を覚えていない場合)。find(1)
検査する重点領域がある場合、または多くの利点が必要な場合には優れています。
答え2
locate
find
ファイルシステムを繰り返してファイルを探している間に定期的に更新する必要がある事前に構築されたデータベースを使用してください。
よりlocate
はるかに高速ですが、find
データベース(キャッシュと見なすことができます)が更新されない場合は、潜在的に不正確になる可能性updatedb
があります(コマンドを参照)。
また、ファイル名と一致するパターンを使用してfind
各属性でファイルをフィルタリングできるため、よりきめ細かく使用できます。locate
答え3
find
Unixを初めて使用する場合、または一般ユーザーが使用している場合は、マニュアルページを注意深く読むことなくUnixを正常に使用することはできません。歴史的に、一部のバージョンではfind
このオプションはデフォルトで設定されておらず、-print
これによりユーザーの敵意が高まりました。
locate
柔軟性は低下しますが、一般的な状況で使用する方がより直感的です。
答え4
検索の小さな欠点は、関心のあるファイルシステム領域を索引付けできないことです。 Linux Mint 17.2 などの Debian デスクトップシステムでは、/etc/updatedb.conf ファイルは、/tmp、/var/spool、/home/.ecryptfs など、特定の領域を考慮対象から除外するように構成されています。
/home/.ecryptfs を無視すると、暗号化されたディレクトリのファイル名が承認されていないユーザーに公開されるのを防ぎます。ただし、ホームディレクトリがecryptfsを使用して暗号化されている場合、これはホームディレクトリがインデックス化されていないことを意味するため、検索はホームディレクトリに何も見つからないことを意味します。これは本質的にあなたと私には役に立たないかもしれません。結果が見つからないだけでなく、updatebプロセスは何の利点もなく定期的にディスクをロードします。