Цель урока: Научиться использовать утилиту grep не просто как "поисковик слов", а как мощнейший инструмент для анализа текстовых данных, в первую очередь - системных журналов (логов). Мы глубоко изучим самые полезные опции grep и, что самое главное, сделаем первый и самый важный шаг в мир регулярных выражений (RegEx) - научимся искать не конкретные слова, а текстовые шаблоны.
Часть 1: Теория. Что такое grep и почему он незаменим?
grep (Global search for Regular Expression and Print) - это программа, которая читает текст (из файла или стандартного ввода) и выводит только те строки, которые содержат указанный вами шаблон.
Для системного администратора grep - это как стетоскоп и рентген для врача. Системные логи - это огромные текстовые файлы, содержащие тысячи строк о каждом "чихе" системы. Попытка найти в них что-то вручную - невозможна. grep позволяет мгновенно отфильтровать этот "шум" и оставить только ту информацию, которая имеет значение для диагностики проблемы: сообщения об ошибках, записи об успешном входе, IP-адреса атакующих и многое другое.
Базовый синтаксис:
grep [ОПЦИИ] "ШАБЛОН" /путь/к/файлу
-
[ОПЦИИ]: Ключи, которые изменяют поведение grep (например, игнорировать регистр).
-
"ШАБЛОН": То, что мы ищем. Это может быть простое слово или сложное регулярное выражение. Шаблон всегда рекомендуется брать в кавычки.
-
/путь/к/файлу: Файл, в котором мы ищем. Если путь не указан, grep будет читать из стандартного ввода (например, после |).
Для наших экспериментов мы будем использовать один из самых информативных лог-файлов - /var/log/auth.log, который содержит информацию обо всех попытках аутентификации в системе.
Часть 2: Практика. Самые полезные опции grep
Давайте рассмотрим ключи, которые вы будете использовать 99% времени.
-
-i (ignore case): Игнорировать регистр.
Очень полезно, когда вы не уверены, написано слово с большой или маленькой буквы (например, Error или error).# Найдет строки, содержащие 'session', 'Session', 'SESSION' и т.д. grep -i "session" /var/log/auth.log
-
-v (invert match): Инвертировать поиск.
Вывести все строки, которые НЕ содержат шаблон. Идеально для отсеивания ненужной информации.# Показать все строки из лога, КРОМЕ сообщений от планировщика cron grep -v "CRON" /var/log/auth.log
-
-r (recursive): Рекурсивный поиск.
Искать не в одном файле, а во всех файлах внутри указанного каталога и его подкаталогов.# Найти слово "error" во всех файлах внутри /var/log grep -r "error" /var/log
-
-n (line number): Показать номер строки.
Помогает быстро сориентироваться в большом файле.grep -n "Failed password" /var/log/auth.log
-
-c (count): Посчитать количество совпадений.
Не выводить сами строки, а просто сказать, сколько их было найдено.# Узнать, сколько раз были неудачные попытки входа по паролю grep -c "Failed password" /var/log/auth.log
-
-A N: Показать найденную строку и N строк пoсле (After) нее.
-
-B N: Показать найденную строку и N строк до (Before) нее.
-
-C N: Показать найденную строку и по N строк до и после (Context) нее.
-A, -B, -C (After, Before, Context): Показать контекст.
Это супер-возможность для анализа логов. Часто одна строка с ошибкой не дает полной картины. Нам нужно видеть, что происходило до и после нее.
-
-
# Найти неудачную попытку входа и показать 2 строки до и 2 строки после нее grep -C 2 "Failed password" /var/log/auth.log
Часть 3: Введение в регулярные выражения (RegEx)
Это то, что превращает grep из простого поисковика в мощнейший анализатор. Регулярное выражение - это не просто слово, а шаблон, описывающий текст. Мы изучим самые базовые, но самые важные метасимволы.
-
^ (Карет): Начало строки.
Шаблон должен находиться в самом начале строки.# Найти все сессии, открытые пользователем root. # Строка должна начинаться со слова "session" grep "^session" /var/log/auth.log
-
$ (Доллар): Конец строки.
Шаблон должен находиться в самом конце строки.# Найти все записи о пользователях, которые используют оболочку /bin/bash grep "/bin/bash$" /etc/passwd
-
. (Точка): Любой один символ.
Точка может заменить любую букву, цифру или знак.# Найти слова 'root' или 'rook' (и любые другие вариации) # grep "ro.t" /some/file
-
* (Звездочка): Ноль или более повторений предыдущего символа.
a* означает: "ни одной 'a', одна 'a', 'aa', 'aaa' и так далее".
.* - это очень частая и мощная комбинация, означающая "любое количество любых символов".# Найти строки, которые начинаются с "Aug" и заканчиваются на "sshd" # а между ними может быть что угодно grep "^Aug.*sshd" /var/log/auth.log
-
[] (Квадратные скобки): Любой из символов внутри скобок.
[abc] означает "либо a, либо b, либо c". Можно указывать диапазоны: [0-9] (любая цифра), [a-z] (любая строчная буква).# Найти строки, где есть слова 'Error' или 'error' (альтернатива ключу -i) grep "[Ee]rror" /var/log/syslog
-
\ (Обратный слэш): Экранирование.
Что если нам нужно найти настоящую точку . или звездочку *? Нужно сказать grep, что это не метасимвол, а обычный знак. Для этого перед ним ставится \.# Найти все IP-адреса, заканчивающиеся на ".1" grep "\.1$" /some/file_with_ips
Часть 4: Расширенные примеры и заключение
Давайте объединим наши знания для решения практической задачи.
Задача: Найти в логе auth.log все неудачные попытки входа по паролю для пользователя root с IP-адресов, которые начинаются на 192.168.
grep "Failed password for root from 192\.168\." /var/log/auth.log
Разбор:
-
"Failed password for root from - это обычный текст, который мы ищем.
-
192\.168\. - мы ищем 192.168., но так как точки являются метасимволами, мы их "экранируем" с помощью \, чтобы они воспринимались как обычные точки.
Использование grep в конвейерах:
Не забывайте, что grep прекрасно работает в связке с другими командами.
# Посмотреть, какие службы сейчас активны и слушают сеть, отфильтровав только TCP
ss -tulpn | grep "LISTEN"
Заключение:
Мы лишь прикоснулись к поверхности grep и регулярных выражений. Это огромная и невероятно мощная тема. Но даже этих базовых знаний вам хватит для решения 80% повседневных задач по анализу логов. Главное - это не заучить все ключи, а понять сам принцип: grep не ищет слова, он ищет соответствия шаблону. Практикуясь в составлении этих шаблонов, вы разовьете один из самых ценных навыков системного администратора.
На следующем, 18-м уроке, мы познакомимся с еще одним титаном обработки текста - потоковым редактором sed. Если grep - это инструмент для поиска, то sed - это инструмент для поиска и замены. Мы научимся на лету изменять содержимое файлов, не открывая их в редакторе, что открывает колоссальные возможности для автоматизации редактирования конфигурационных файлов.
Перейти к просмотру - УРОК №18.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com