Я работаю над своей виртуальной машиной на bash. Мне предлагается найти все IP-адреса, которые использовались для попытки доступа к машине без авторизации, используя файл auth.log. Кажется, я не нашел ответа на свою проблему. Вот пример:
все возвращенные строки должны быть записаны в мой общий файл /mnt/analyse/traitement/cueillette.txt. Пожалуйста, помогите! Спасибо
решение1
Вам не нужно перенаправлять grep в grep (это почти всегда признак того, что вы используете неэффективный, ошибочный подход. sed
одного этого достаточно для этой задачи. или awk
. или perl
), и это sudo su root cat
просто чепуха.
Попробуй это:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log > /mnt/analyse/traitement/cueillette.txt
Для каждой строки, которая соответствует «сбою аутентификации» (обратите внимание,нет"authentiфиcation"), этот sed
скрипт удаляет все от начала строки до (включительно) rhost=
и все после IP-адреса, а затем выводит строку.
Он использует sed
опцию -E
для расширенных регулярных выражений, так что ()
и +
работают без необходимости экранирования.
Обратите внимание, что хотя sed
команда запускается как root с sudo
, перенаправление вывода не выполняется — это делается в вашей исходной не-root оболочке. Если вам нужны права root для записи в выходной файл, запустите tee
с sudo
, например:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log |
sudo tee /mnt/analyse/traitement/cueillette.txt > /dev/null