为什么这种模式搜索挂起?

时间:2011-11-24 00:00:12

标签: regex linux grep base64

我正在运行Linux CentOs,我试图使用此命令在我的wordpress安装中找到一些恶意代码:

grep -r 'php \$[a-zA-Z]*=.as.;' * |awk -F : '{print $1}'

当我点击进入时,这个过程就会挂起......我想仔细检查一下我的语法是否合适,我所要做的就是等待?

如何在搜索时获得某种反馈/发生的事情?

由于

2 个答案:

答案 0 :(得分:1)

由于-r *(递归地,所有文件/目录),它可能花时间?

考虑

find -type f -print0 | xargs -0trn10 grep -l 'php \$[a-zA-Z]*=.as.;'

将以(max)10批量处理文件,并按原样打印这些命令。

当然,像这样你可以通过一个简单的措施来优化它的效果,比如

find -type f -iname '*.php' -print0 | xargs -0trn10 grep -l 'php \$[a-zA-Z]*=.as.;'

有点相关:

你可以做一些类似的事情而不用寻找更小的树,最近的bash:

shopt -s globstar
grep -l 'pattern' **/*.php

答案 1 :(得分:1)

不是使用grep -r递归grep,而是使用find获取文件名列表,并一次将它们提供给grep。这允许您在grep旁边添加其他命令,例如echo s。例如,您可以创建一个名为is-it-malware.sh的脚本,其中包含以下内容:

#!/bin/bash

if grep 'php \$[a-zA-Z]*=.as.;' "$1" >/dev/null
then
    "!!! $1 is malware!!!"
else
    "    $1 is fine."
fi

并运行此命令:

find -type f -exec ./is-it-malware.sh '{}' ';'

在当前目录及其所有子目录中的每个文件上运行脚本(递归地)。