我定期为客户端清理被黑客入侵的Wordpress安装,并且我已经编写了一组脚本来帮助我找到网站被黑客攻击的位置。我定期使用的一个代码片段在Ubuntu上工作得很好,但由于周五切换到Fedora的表现与预期相当。命令是这样的:
grep -Iri --exclude "*.js" "eval\s*(" * | grep -rivf ~/safeevals.txt >../foundevals.txt;
它应该发生什么(当我使用Ubuntu时发生了):grep遍历所有非二进制文件,不包括Javascript包含,对于eval()函数的所有出现,然后在一行上执行否定匹配逐行扫描Wordpress的vanilla安装中eval()函数的所有已知出现(其模式在〜/ safeevals.txt中)。
实际发生的事情:第一部分工作正常,因为我单独运行它,它确实在安装中找到了eval()的所有实例。然而,在管道重新浏览所有文件之后,不是通过这些结果进行greping,而是返回〜/ safeevals.txt的负匹配(即几乎安装中每个文件的每一行)。
知道为什么第二个grep没有对管道数据进行操作,或者我需要做些什么来修复它?感谢。
- 迈克尔
答案 0 :(得分:3)
刚刚在我的Debian框中测试过:显然,grep -r
喜欢假设.
的默认参数。我真的很想知道这种行为是否有效。无论如何,我想从第二个-r
命令中删除grep
选项将解决它。
编辑: rgrep默认为$ PWD似乎是grep的最新更改,请参阅unix.stackexchange上的this discussion以及上游grep代码存储库中提交的链接。