我发现一个脚本启动了两次,所以我想在任何位置的任何文件中搜索脚本名称,以查看它在哪里被调用。
所以我这样做了...
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 也会尽职尽责地进行搜索。