1

Попытка tail , хотя список доменов для поиска кода хакера. Все файлы, которые я ищу, одинаковы, поэтому я пытался что-то вроде этого:

grep -rnl * -e "Ai9LbaFz7lC13SwzDxAYT72vwA"

Попытка увидеть имя файла / каталог, а также.

Однако при этом выполняется поиск по всему файлу, и это может быть пустой тратой процессорного времени и времени, поэтому я пытаюсь записать его с помощью tail как мне нужно искать только небольшую часть файла. Это сработало:

tail -n10 * | grep --line-buffered -e '^==> .* <==$' -e 'Ai9LbaFz7lC13SwzDxAYT72vwA'

Однако tail не кажется рекурсивным, поэтому он будет оставаться только внутри своего каталога. Я определенно не мастер кода, поэтому я надеюсь, что кто-то может указать мне правильное направление.

Благодарю.

2 ответа2

2

Команда tail должна прочитать весь файл, чтобы вычислить последние десять строк. Он определяет строки путем поиска символов новой строки. Итак, он читает файл в поисках фиксированных строк.

Ваш grep, с другой стороны, читает весь файл в поисках фиксированной строки. Похоже, почти то же самое. Конечно, grep немного сложнее, но я держу пари, что накладные расходы на создание нового процесса и настройку каналов - это больше, чем накладные расходы grep. Однако вы можете немного ускорить grep, сказав, что ваш шаблон - это фиксированная строка, а не регулярное выражение. Для этого укажите опцию «-F» для grep (или используйте fgrep). Если у вас GNU grep, вы также можете использовать --mmap для ускорения работы.

grep -rnl * --mmap -F -e "Ai9LbaFz7lC13SwzDxAYT72vwA" и посмотрите, возможно ли это так же быстро или быстрее, чем ваше решение с tail. :)

Точность сканирования только с использованием grep - это еще один вопрос, так как это еще не подтверждает, что совпадение находится в последних 10 строках файла. Но я надеюсь замаскировать эту часть, предложив использовать команду постобработки для подсчета строк в соответствующих файлах или что-то в этом роде. ;)

1

Баш:

shopt -s globstar nullglob

for f in **; do
    if [[ -f $f ]] && tail -n 10 "$f" | grep -q --options 'pattern'; then
        echo "$f"
    fi
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .