Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​Давно не было ничего на тему полезных bash команд. Решил немного оживить рубрику. Рассмотрю несколько примеров, которые могут пригодиться на практике при работе с веб сервером. С помощью grep и регулярного выражения смотрим список всех IP адресов в логе: grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log Выводим только уникальные ip адреса: grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq А теперь считаем их количество: grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq | wc -l 10 самых активных IP адресов с наибольшим количеством запросов: grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq -c | sort -n -r | head -10 Не обязательно ip адреса грепать именно по регулярке. Можно взять awk и выводить первый столбец. Результат будет тот же самый, но с регуляркой более универсальное решение, которое сработает на любом лог файле, где есть ip адреса. Пример с awk будет ниже. 10 самых популярных url: awk '{print $7}' access.log | sort | uniq -c | sort -n -r | head -10 Подсчитать количество 500-х ошибок: awk '{print $10}' access.log | grep 500 | wc -l Обращаю внимание на номер столбца $10. У вас он может отличаться в зависимости от формата лога nginx или apache. Я обычно немного изменяю стандартный формат, добавляя несколько дополнительных столбцов. Вывести ip адрес и url запроса, где была 500 ошибка: grep 'status=500' access.log | awk '{print $1,$7}' Данные примеры легко модифицируются под практически любые запросы информации из логов. Достаточно немного потренироваться и разобраться в синтаксисе. Ниже ещё немного того, что может пригодиться. Например, ограничение лога по времени. К нему далее можно применять все предыдущие выборки. Вывести все записи лога в интервале 20.02.2022 15:20 - 16:20 cat access.log | sed -n '/20\/Feb\/2022:15:20/,/20\/Feb\/2022:16:20/p' Просмотр установленных соединений к веб серверу, а также их подсчёт: netstat -tan | grep "ESTABLISHED" | grep ":443" netstat -tan | grep "ESTABLISHED" | grep ":443" | wc -l Забирайте в закладки, чтобы потом не искать и не вспоминать, как написать. Bash такая штука, если постоянно на нём не пишешь, то очень долго рожаешь решения. Поэтому я всегда и всё записываю, чтобы потом просто брать готовые конструкции и немного модифицировать по необходимости. Хотя бы не приходится вспоминать утилиты и ключи. Со временем забывается. Например, я частенько забываю про утилиту uniq, а потом думаю, как бы мне повторяющиеся строки отсечь. #bash #terminal