特定のテキストのみを含むファイルを検索する最速の方法

特定のテキストのみを含むファイルを検索する最速の方法

具体的には「

その理由は次のとおりです。 PIDがファイルのどこかに保存されていると確信するプロセスがありますが、どこにあるかはわかりません(そして見つけたいのですが)。私は/var/run/myproc.pidそのpidなどを保存するために使用できるファイル名を見つけようとしましたが、これまでは成功しませんでした。検索してみたいただその番号。同様のツールからPIDを取得し、その内容がその番号に対応するファイルを検索したいとps -aux思います。top

インターネット検索をしてみましたが、すべての回答には「「…その中に何が入っているのか。

よろしくお願いします。

答え1

目的のテキストをファイルに配置し、cmp各候補ファイルで実行します。

pgrep myproc >/tmp/the_pid
find /var -type f -size $(wc -c </tmp/the_pid)c -exec cmp -s /tmp/the_pid {} \; -print

strace -eopenただし、このユースケースでは、以下のプログラムを再起動するか、次を使用します。auditdルール:

auditctl -F "ppid=$$,a2&0x100" -S open
/path/to/daemon

答え2

grepに正規表現を渡すことができます。以下を試してください。 (PIDが67543であると仮定)

grep -R '^67543$' /

正規表現では、^ニンジン(sp)記号は「文字列の始まり」を意味し、ドル$記号は「文字列の終わり」を意味するため、上記の正規表現は「67543」文字列で始まり、終わるファイルのみを返します。

答え3

find searchtree -type f -size `stat -c%s needle`c | xargs -n1 diff -s needle

答え4

プログラムが起動時に起動しない場合、または他の多くのプログラムで起動される場合、pidfileはプロセスと同じくらい古く、1分以内です。

PIDを知っていれば、長さもわかりますので、検索するファイル数をさらに減らすことができます。

 find -type f -mmin -1 -size 6c -exec grep 12345 {} \;

5ビットPIDの場合は、末尾の改行文字が含まれているため、サイズとして6cを使用します(コメントとしてysangkokを参照)。

関連情報