在 Ubuntu 中查找包含字符串的文件并将其删除

在 Ubuntu 中查找包含字符串的文件并将其删除

我的 CMS 充斥着垃圾邮件脚本,几乎每个文件夹中都有。我发现,可以使用此 find/grep 命令找到这些脚本:

sudo find . -type f \( -name '*.php' -or -name '*.node' \) -exec grep -i "eval(base64_decode" {} +

嗯,有些文件只包含垃圾脚本,它们的大小在 300 - 302 字节之间。

但是 CMS 使用的一些其他文件也受到了感染。它们不应该被完全删除,只需删除从第一个字符到第一个 php 结尾(“?>”)的所有内容即可。

首先我使用“删除”命令并写下:

sudo find . -type f \( -name '*.php' -or -name '*.node' \) -exec grep -i "eval(base64_decode" {} + -delete

但这是一个很大的错误,因为我删除了所有重要的文件。在我删除更多文件之前,我只想问一下该怎么办?

类似于:获取上述代码找到的每个文件并检查其大小是否在 300 - 302 字节之间,如果是 -> 删除它。如果不是 -> 删除第一个 PHP 部分。但很重要!!!不要删除其余部分!文件如下:

<?php ?> ... <?php ?> ... <?php ?>"

只有第一个 PHP 块被感染。

你能帮帮我吗?有数百个文件,我不想自己做。

提前谢谢您!

答案1

您可以尝试以下命令,它将对每个与模式匹配的文件调用 perl 查找/替换命令"eval(base64_decode"

sudo find . -type f \( -name '*.php' -or -name '*.node' \) -exec grep -li "eval(base64_decode" {} \; 2>/dev/null | xargs perl -i -p0e 's/<\?php.*?\?>//s'

该部分将仅删除命令返回的文件中的perl第一个块。<?php ?>find

相关内容