Почему поиск по шаблону зависает? - PullRequest
1 голос
/ 24 ноября 2011

Я использую Linux CentOs и пытаюсь найти вредоносный код в моей установке WordPress с помощью этой команды:

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

Когда я нажимаю Enter, процесс просто зависает ... Я хочу еще раз проверить, что у меня правильный синтаксис, и все, что мне нужно сделать, это подождать?

Как я могу получить какую-то обратную связь / что-то происходящее во время поиска?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Вместо использования 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 '{}' ';'

, чтобы запустить ваш скрипт для каждого файла в текущем каталогеи все его подкаталоги (рекурсивно).

1 голос
/ 24 ноября 2011

Вероятно, это занимает время из-за -r * (рекурсивно, все файлы / каталоги)?

Рассмотрим

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

, который будет обрабатывать файлы партиями (макс.) 10 и печатать эти команды по ходу.

Конечно, таким образом вы, вероятно, можете оптимизировать чертовски из этого, с помощью простой меры, как

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

Вид связанных:

Вы можете делать подобные вещи без поиска для небольших деревьев, с недавним bash:

shopt -s globstar
grep -l 'pattern' **/*.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...