查找仅包含某些文本的文件的最快方法

查找仅包含某些文本的文件的最快方法

我正在尝试找出查找其内容特别是“的文件的最佳和最快的方法”某物

原因是:我有一个进程,我非常确定将其 PID 存储在文件中的某个位置,但我不知道在哪里(并且我想找出答案)。我曾尝试寻找可用于存储所述 pid (/var/run/myproc.pid等)的文件名,但到目前为止没有成功。我想尝试搜索内容为只是那个数字。我想从ps -auxtop或类似的工具获取 PID,然后搜索内容仅为该数字的文件。

我一直在谷歌搜索,但所有答案似乎都解释了如何查找包含“某物“......其中的内容。我想要一些稍微不同的东西......我想要一个完全匹配的”某物

先感谢您。

答案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 应该与进程一样旧,开始时不到一分钟。

如果您知道 PID,您就知道它的长度,因此您可以减少进一步搜索的文件数量:

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

对于 5 位 PID,使用 6c 作为大小,因为它们包含尾随换行符(来自 ysangkok 作为注释)。

相关内容