如何使用 grep 在任意位置搜索文件

如何使用 grep 在任意位置搜索文件

我发现一个脚本启动了两次,所以我想在任何位置的任何文件中搜索脚本名称,以查看它在哪里被调用。

所以我这样做了...

cd /
sudo grep -r autostart *

但这给了我错误..

boot/System.map-3.5.0-23-generic:c1490f90 t autostart_arrays
grep: dev/vsock: Invalid argument

答案1

这不是错误。Grep 只是报告了搜索特殊文件(可能是套接字)失败,并且已在处理下一个文件。如果您不想看到 grep 的错误消息,可以将它们发送到 bitbucket:

fgrep -r autostart * 2> /dev/null

注意命令行工具在您的情况下可能会更快,因为您正在搜索字符串,而不是正则表达式。

与你想象的相反,grep 并没有崩溃。从技术上讲,它也没有挂起。也许它正在搜索/dev/random字符串。最终它会在那里找到它,尽管这可能需要大量的时间。遗憾的是,不久之后 grep在 中找到字符串后/dev/random,它会遇到/dev/zero,它肯定会花费无限的时间来寻找字符串。因此,从逻辑上讲,您的命令保证不会终止。

如果您希望阻止fgrep搜索特殊文件,请将其与以下方法结合使用find

find / -type f -exec fgrep -l autostart {} \;

而且由于您正在寻找脚本,跳过文件系统上所有不可执行的文件将节省大量时间:

find / -type f -executable -exec fgrep -l autostart {} \;

事实上,我会首先重点搜索常见的嫌疑人:

find {,/usr}/{,s}bin /etc -type f -executable -exec fgrep -l autostart {} \;

特别是如果您安装了一些远程文件系统,grep 也会尽职尽责地进行搜索。

相关内容