見つけるよりも速い検索

見つけるよりも速い検索

より速く物事を見つける方法はありますかfind。私がやっていること:-

$sudo find / -perm +4000

しかし、必要な情報を見つけるのに時間がかかります。また、特定の権限ビットが設定されているファイルのほとんどは静的であり、動的ではないこともわかっています。

私は試した

[$] sudo locate --all / -perm +4000                                                                                               
locate: invalid option -- 'p'

しかし、ご覧のとおり失敗しました。locate を使用して同じことを実行する方法についてのアイデアはありますか。

共有するためだけ/usr/bin/locateにシンボリックリンクされており、/etc/alternatives/locateさらにシンボリックリンクされている/usr/bin/mlocate

答え1

残念ながら、 はファイル権限をインデックス化しないため、この機能を備えたlocate実装が見つからない限り(または自分で拡張しない限り)、mlocateを使用してファイルシステムをスキャンする必要があります。findmlocate

答え2

@shirish が述べたように、mlocate はファイル権限をインデックス化しません。しかし、それでもいくつか提案があります:

まず、find のマニュアルによると、-perm +mode は非推奨なので、代わりに -perm /mode を使用する必要があります。

-パーム +モード

モードでいずれかの許可ビットが設定されているファイルを検索する古い方法は非推奨です。代わりに -perm /mode を使用してください。シンボリック モードで '+' 構文を使用すると、予期しない結果が生じます。たとえば、'+u+x' は有効なシンボリック モード (+u,+x、つまり 0111 に相当) であるため、-perm +mode として評価されるのではなく、正確なモード指定子 -perm mode として評価され、実行ビットが設定されているファイルではなく、正確な許可 0111 のファイルに一致します。この段落がわかりにくいと感じたとしても、それはあなただけではありません。-perm /mode を使用してください。この形式の -perm テストは非推奨です。POSIX 仕様では、先頭の '+' をシンボリック モードの一部として解釈する必要があるため、代わりに '/' を使用するように切り替えました。

-perm /モード

ファイルにモードの許可ビットのいずれかが設定されています。この形式では、シンボリック モードが受け入れられます。シンボリック モードを使用する場合は、'u'、'g'、または 'o' を指定する必要があります。いくつかの例については、「例」セクションを参照してください。モードの許可ビットが設定されていない場合、このテストはどのファイルにも一致します (ここでの考え方は、-perm -000 の動作と一貫性を保つことです)。

次に、検索を高速化することができます。そのためには、できるだけ具体的に検索する必要があります。例:

find /some/path ...

ルートディレクトリ全体 (/) を検索する代わりに、検索するパス (/some/path) を指定するため、検索時間が短縮されます。

最後に、検索中にスキャンしたくないシステム フォルダーを除外できます。例:

 find /some/path -not \( -path /excluded/path -prune \) -name *.js

関連情報