30 примеров Grep для системных администраторов

30 Grep Examples System Admins



Вы можете найти grep глубоко в животном мозгу Unix и Unix-подобных операционных систем. Это базовая программа, используемая для сопоставления с образцом, она была написана в 70-х вместе с остальной частью инструмента UNIX, который мы знаем и любим (или ненавидим).

Хотя изучение формальных языков и регулярных выражений - это увлекательная тема. Изучение grep - это гораздо больше, чем регулярные выражения. Чтобы начать работу с ним и увидеть красоту и элегантность grep, вам нужно сначала увидеть несколько реальных примеров.







Примеры, которые удобны и сделают вашу жизнь немного проще. Вот 30 таких распространенных вариантов использования и параметров grep.



1. ps aux | grep

В ps aux перечислены все процессы и связанные с ними идентификаторы. Но часто этот список слишком длинный, чтобы человек мог его изучить. Отправляя вывод в команду grep, вы можете перечислить процессы, запущенные с учетом очень конкретного приложения. Например, это может быть sshd, nginx или httpd.



# пс в | grep sshd
корень400 0,0 0,2 69944 5624? SS17:47 0: 00/usr/sbin/sshd-D
корень1076 0,2 0,3 95204 6816? SS18:29 0: 00 sshd: корень@баллы/0
корень1093 0,0 0,0 12784 932баллы/0S +18:29 0: 00рукояткаsshd

2. Получение ваших IP-адресов

В большинстве операционных систем вы можете перечислить все свои сетевые интерфейсы и IP-адрес, назначенный этому интерфейсу, с помощью команды ifconfig или ip addr. Обе эти команды выведут много дополнительной информации. Но если вы хотите распечатать только IP-адрес (например, для сценариев оболочки), вы можете использовать следующую команду:





$IP-адрес | рукояткаинет| awk '{print $ 2; } '
$IP-адрес | рукоятка инет| awk '{print $ 2; } ' # Для строк только с inet не inet6 (IPv6)

Команда ip addr получает всю информацию (включая IP-адреса), затем она передается второй команде grep inet, которая выводит только строки с inet в них. Затем он передается в awk print оператор, который печатает второе слово в каждой строке (проще говоря).

P.S: Вы также можете сделать это без grep, если вы хорошо знаете awk.



3. Анализ неудачных попыток SSH

Если у вас есть сервер с выходом в Интернет с общедоступным IP-адресом, он будет постоянно подвергаться атакам SSH, и если вы разрешите пользователям иметь доступ к SSH на основе пароля (политика, которую я бы не рекомендовал), вы можете увидеть все такие неудачные попытки, используя следующая команда grep:

# cat /var/log/auth.log | grep Fail
Вывод образца
Декабрь5 16:двадцать: 03 дебиан sshd[509]: Неверный парольдляroot из порта 192.168.0.10052374ssh2
Декабрь5 16:двадцать: 07 debian sshd[509]: Неверный парольдляroot из порта 192.168.0.10052374ssh2
Декабрь5 16:двадцать:одиннадцатьdebian sshd[509]: Неверный парольдляroot из порта 192.168.0.10052374ssh2

4. Подключение Grep к Uniq

Иногда grep выводит много информации. В приведенном выше примере, возможно, один IP-адрес пытался войти в вашу систему. В большинстве случаев существует лишь несколько таких оскорбительных IP-адресов, которые вам нужно однозначно идентифицировать и занести в черный список.

#Кот /куда/бревно/auth.log| рукоятка 'Неудача' | уникальный -f 3

Команда uniq должна печатать только уникальные строки. Uniq -f 3 пропускает первые три поля (чтобы пропустить временные метки, которые никогда не повторяются), а затем начинает поиск уникальных строк.

5. Grepping для сообщений об ошибках

Использование Grep для доступа и журналов ошибок не ограничивается только SSH. Веб-серверы (например, Nginx) очень тщательно регистрируют ошибки и обращаются к журналам. Если вы настроили сценарии мониторинга, которые отправляют вам предупреждения, когда grep 404 возвращает новое значение. Это может быть весьма полезно.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/Декабрь/2018 г.: 02:двадцать:29+0530] 'ПОЛУЧИТЬ /favicon.ico HTTP / 1.1' 404 200
'http://192.168.0.102/' 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, например Gecko) Chrome / 70.0.3538.110 Safari / 537.36 '


192.168.0.101 - -[06/Декабрь/2018 г.: 02:Четыре пять:16+0530] 'ПОЛУЧИТЬ /favicon.ico HTTP / 1.1' 404 143
'http://192.168.0.102/' 'Mozilla / 5.0 (iPad; CPU OS 12_1, например Mac OS X)
AppleWebKit / 605.1.15 (KHTML, например Gecko) Версия / 12.0 Mobile / 15E148 Safari / 604.1 '

Регулярным выражением может быть не 404, а какая-то другая фильтрация регулярных выражений только для мобильных клиентов или только для устройств Apple, просматривающих веб-страницу. Это позволяет глубже понять, как работает ваше приложение.

6. Список пакетов

Для систем на основе Debian dpkg -l перечисляет все пакеты, установленные в вашей системе. Вы можете передать это в команду grep для поиска пакетов, принадлежащих определенному приложению. Например:

#dpkg - | рукоятка 'Я пришел'

7. grep -v имена файлов

Чтобы перечислить все строки, которые не содержать заданный шаблон, используйте флаг -v. По сути, это противоположность обычной команды grep.

8. grep -l

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

9. Параметр одиночного слова -w

$рукоятка <ШАБЛОН>fileNames

Флаг -w указывает grep искать данный шаблон как целое слово, а не только подстроку строки. Например, ранее мы искали IP-адрес и шаблон инет напечатал строки с обоими инет а также inet6 перечисление адресов IPv4 и IPv6. Но если бы мы использовали флаг -w только строки с инет поскольку слово, которому предшествуют и за которым следуют пробелы, является допустимым совпадением.

10. Расширенное регулярное выражение

Вы часто обнаруживаете, что регулярные выражения, встроенные в Grep, немного ограничивают. В большинстве сценариев и инструкций вы найдете использование флага -E, который позволит вам ввести шаблон в так называемом расширенном режиме.

Вот команды grep и grep -E для поиска слов Супермен и Человек-паук.

$рукоятка ' (Супер | Паук ) человек'текст
$рукоятка -А ТАКЖЕ '(Супер | Человек-паук) человек'текст

Как видите, расширенную версию читать намного проще.

11. Grep для ваших контейнеров

Если у вас есть большой кластер контейнеров, запущенных на вашем хосте, вы можете найти их по имени изображения, статусу, портам, которые они открывают, и многим другим атрибутам. Например,

$докерпс | рукоятка [imageName]

12. Grep для ваших стручков

Пока мы касаемся контейнеров. Kubernetes часто запускает несколько модулей в рамках одного развертывания. Хотя у каждого модуля есть уникальное имя, в данном пространстве имен они обычно начинаются с имени развертывания. Мы можем найти это и перечислить все модули, связанные с данным развертыванием.

$kubectl получить стручки| рукоятка <DeployName>

13. Готовность к большим данным

Часто так называемый анализ больших данных включает простой поиск, сортировку и подсчет шаблонов в заданном наборе данных. Утилиты UNIX низкого уровня, такие как grep, uniq, wc, особенно хороши в этом. В этом сообщении блога показан хороший пример задачи, выполненной за считанные секунды с использованием grep и других утилит Unix, в то время как Hadoop занял почти полчаса.

Например, размер этого набора данных превышает 1,7 ГБ. Он содержит информацию о множестве шахматных матчей, включая сделанные ходы, кто победил и т. Д. Нас интересуют только результаты, поэтому мы запускаем следующую команду:

$рукоятка 'Результат'миллионная база2,22.pgn| Сортировать | уникальный -c
221 [Результат'*']
653728 [Результат'0-1']
852305 [Результат'1-0']
690934 [Результат'1 / 2-1 / 2']

Это заняло около 15 секунд на 2-ядерном / 4-поточном процессоре 4-летней давности. Так что в следующий раз вы будете решать проблему с большими данными. Подумайте, можно ли вместо этого использовать grep.

14. grep –color = auto

Эта опция позволяет grep выделять шаблон внутри строки, где он был найден.

15. grep -i

Сопоставление с образцом Grep по своей природе чувствительно к регистру. Но если вас это не волнует, то использование флага -i сделает grep нечувствительным к регистру.

16. grep -n

Флаг -n покажет номера строк, поэтому вам не нужно беспокоиться о том, чтобы позже найти ту же строку.

17. git grep

Git, система контроля версий, сама имеет встроенную команду grep, которая работает почти так же, как ваш обычный grep. Но его можно использовать для поиска шаблонов в любом зафиксированном дереве с использованием собственного интерфейса командной строки git вместо утомительных каналов. Например, если вы находитесь в главной ветке своего репо, вы можете использовать grep для репо, используя:

(мастер)$git grep <шаблон>

18. grep -o

Флаг -o действительно полезен, когда вы пытаетесь отладить регулярное выражение. Он напечатает только соответствующую часть строки, а не всю строку. Итак, в случае, если вы получаете слишком много нежелательных строк для предоставленного шаблона, и вы не можете понять, почему это происходит. Вы можете использовать флаг -o, чтобы распечатать некорректную подстроку и оттуда рассуждать о своем регулярном выражении.

19. grep -x

Флаг -x будет печатать строку тогда и только тогда, когда вся строка соответствует вашему предоставленному регулярному выражению. Это чем-то похоже на флаг -w, который печатал строку, если и только целое слово соответствовало предоставленному регулярному выражению.

20. grep -T

При работе с журналами и выходными данными из сценариев оболочки вы более чем вероятно столкнетесь с жесткими вкладками, чтобы различать разные столбцы вывода. Флаг -T аккуратно выровняет эти вкладки, чтобы столбцы были аккуратно расположены, что делает вывод удобочитаемым.

21. grep -q

Это подавляет вывод и незаметно запускает команду grep. Очень полезно при замене текста или запуске grep в сценарии демона.

22. grep -P

Люди, которые привыкли к синтаксису регулярных выражений Perl, могут использовать флаг -P, чтобы использовать именно это. Вам не нужно изучать базовые регулярные выражения, которые grep использует по умолчанию.

23. grep -D [ДЕЙСТВИЕ]

В Unix почти все можно рассматривать как файл. Следовательно, в grep можно передать любое устройство, сокет или поток данных FIFO. Вы можете использовать флаг -D, за которым следует ДЕЙСТВИЕ (действие по умолчанию - ЧТЕНИЕ). Еще несколько вариантов: ПРОПУСТИТЬ, чтобы незаметно пропускать определенные устройства, и РЕКУРС, чтобы рекурсивно просматривать каталоги и символические ссылки.

24. Повторение

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

$рукоятка -А ТАКЖЕ [0-9]{10}

Это печатает строки, содержащие строки длиной 10 или более цифр.

25. Повторение сокращений.

Некоторые специальные символы зарезервированы для определенного вида повторения шаблона. Вы можете использовать их вместо фигурных скобок, если они вам подходят.

? : Шаблон, предшествующий вопросительному знаку, должен соответствовать нулю или одному разу.

*: Шаблон перед звездочкой должен совпадать ноль или более раз.

+: Шаблон перед плюсом должен совпадать один или несколько раз.

25. Байтовые смещения

Если вы хотите видеть байтовое смещение строк, в которых найдено совпадающее выражение, вы также можете использовать флаг -b для печати смещений. Чтобы напечатать смещение только соответствующей части строки, вы можете использовать флаг -b с флагом -o.

$рукоятка -b -или <ШАБЛОН> [имя файла]

Смещение просто означает, через сколько байтов от начала файла начинается соответствующая строка.

26. egrep, fgrep и rgerp

Вы часто будете видеть вызов egrep для использования расширенного синтаксиса регулярных выражений, который мы обсуждали ранее. Однако это устаревший синтаксис, и его рекомендуется избегать. Вместо этого используйте grep -E. Точно так же используйте grep -F вместо fgrep и grep -r вместо rgrep.

27. grep -z

Иногда ввод в grep - это не строки, заканчивающиеся символом новой строки. Например, если вы обрабатываете список имен файлов, они могут поступать из разных источников. Флаг -z указывает grep рассматривать символ NULL как конец строки. Это позволяет рассматривать входящий поток как любой обычный текстовый файл.

28. grep -a [имя файла]

Флаг -a указывает grep обрабатывать предоставленный файл как обычный текст. Файл может быть двоичным, но grep будет обрабатывать его содержимое как текст.

29. grep -U [имя файла]

Флаг -U указывает grep обрабатывать предоставленные файлы, как если бы они были двоичными, а не текстовыми. По умолчанию grep угадывает тип файла, глядя на первые несколько байтов. Использование этого флага отменяет работу предположений.

Grep -m ЧИСЛО

В больших файлах поиск выражения может длиться бесконечно. Однако, если вы хотите проверить только первые числа совпадений, вы можете использовать флаг -m для этого. Это быстрее, и выход часто управляем.

Заключение

Большая часть повседневной работы системного администратора связана с анализом больших объемов текста. Это могут быть журналы безопасности, журналы с вашего веб-сервера или почтового сервера, активность пользователей или даже большой текст страниц руководства. Grep дает вам дополнительную гибкость при работе с этими вариантами использования.

Надеюсь, несколько приведенных выше примеров и вариантов использования помогли вам лучше понять это живое ископаемое программное обеспечение.