Командная строка без боли: grep, cat, less и nano для анализа логов

Командная строка без боли: grep, cat, less и nano для анализа логов

Linux живёт текстом: журналы сервисов, конфигурации, скрипты и даже пакеты менеджеров — всё хранится в простых файлах. Чем свободнее вы ориентируетесь в этом море строк, тем быстрее находите ошибки, автоматизируете рутинные задачи и создаёте надёжные решения. 

Почему важно знать «мелочи»

Каждая секунда, потраченная на ручное пролистывание гигабайтных логов, — это время, которое можно было бы посвятить анализу инцидента. Утилиты уровня grep и sed не требуют гигабайт памяти и работают быстрее сложных GUI‑аналогов. Они встроены по умолчанию, что критично на сервере без X‑сессии. Наконец, их можно связать в конвейер, превратив набор простых команд в микроскрипт из одной строки.

Молниеносный просмотр содержимого

cat — покажи всё и сразу

Базовая команда для вывода файла целиком:

cat /etc/services

Часто удобнее «приправить» вывод:

  • cat -n /etc/ssh/sshd_config
     — нумерация строк помогает сослаться на конкретное место;
  • cat -A messages.log
     — показываем символы табуляции и конец строки;
  • cat file{1..4}.txt >> merged.txt
     — конкатенация нескольких файлов.

head, tail и watch — живая лупа над журналами

head -n 50 /var/log/dpkg.log
  • С опцией -c можно указать количество байт, а не строк.
tail -f /var/log/auth.log

Команда дописывает новые строки онлайн. Иногда полезно обернуть её в watch:

watch -n2 tail -n20 /var/log/syslog

Так вы каждые две секунды видите последнюю двадцатку строк.

less — интерактивный просмотрщик

less +F nginx/access.log
  • /pattern — поиск вперёд, ?pattern — назад;
  • ®ex — фильтрация: остаются только подходящие строки;
  • v — открыть текущий файл во внешнем редакторе, заданном переменной VISUAL.

Установите пакет lesspipe , чтобы автоматически раскрывать архивы и PDF‑файлы прямо в less.

Поиск и фильтрация: grep и друзья

grep — «выжми» нужное

grep -R --color=auto -E "404|500" /var/log/nginx
  • -R — рекурсивный обход каталогов;
  • -E включает расширенные регэкспы (альтернация через вертикальную черту);
  • --color=auto подсвечивает совпадения, делая сканирование глазами легче.

ripgrep и The Silver Searcher — turbo‑скорость

ripgrep (rg) разбирает Git‑игнор, работает параллельно и выводит результат с подсветкой:

rg --stats 'TODO:' ~/projects

Аналогичный инструмент ag популярен в среде разработчиков.

Редактирование «на живую нить»

nano — когда нужно быстро подправить конфиг

Запустим с подсветкой ОТ SSH‑конфигурации:

sudo nano /etc/ssh/sshd_config
  • Ctrl + W — поиск, Alt + W — продолжить;
  • Alt + 3 — закомментировать выделенный блок;
  • Alt + / — прыгнуть в конец файла.

Активируйте подсветку синтаксиса добавив строку include "/usr/share/nano/*.nanorc" в ~/.nanorc.

sed — правим без открытия

sed -i.bak 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

Ключ -i.bak говорит создать бэкап. Для множественных шаблонов используйте файл правил — удобно для массовых обновлений.

awk — текст как таблица

awk -F: '{print $1, $3}' /etc/passwd | sort -k2 -n

Команда выводит имя пользователя и его UID, сортируя по числовому полю.

Композиция: сила конвейеров

journalctl -u ssh -p err -n 1000 
   | grep -vE "Disconnected from" 
   | awk '{print $11}' 
   | sort | uniq -c | sort -nr | head

Лаконичная цепочка показывает топ‑10 IP‑адресов, бросивших ошибку аутентификации по SSH.

find, xargs и массовые операции

find /var/www -type f -name "*.php" -size +1M -print0 
   | xargs -0 du -h | sort -h

Команда ищет «тяжёлые» PHP‑файлы, считает размер и сортирует по возрастанию. Хитрость с -print0 и -0 спасает от пробелов в имени файла.

diff и patch: контроль версий без Git

diff -u original.conf new.conf > fix.patch
 patch -p1 < fix.patch

Удобно при пересылке изменений коллегам, когда репозиторий недоступен.

tee, process substitution и именованные каналы

sudo tcpdump -i eth0 -n 
   | tee >(wc -l > packets.count) 
   | grep "flags [S]" > syn.log

Файл packets.count будет содержать число пакетов, а syn.log — только TCP‑SYN.

Практика: экспресс‑аудит логов веб‑сервера

  1. zgrep -h "GET /wp-login.php" /var/log/nginx/access*.gz 
            | awk '{print $1}' > attackers.txt
  2. sort attackers.txt | uniq -c | sort -nr | head
  3. xargs -a attackers.txt -I{} whois {} | grep -iE "country|org"

Три шага: находим атаки на WordPress, считаем частоту IP, смотрим географию.

Кодировки и локали: победа над кракозябрами

iconv -f windows-1251 -t utf-8 report.cp1251 > report.utf8

Проверьте текущую локаль:

locale | grep LANG

Лучше придерживаться UTF‑8 повсеместно, избегая «зашумления» вывода.

Права доступа: минимум риска

  • umask 027
     — новая директория получит права 750, файл — 640;
  • chmod g-w,o-rwx secrets.env
     — убираем лишние биты;
  • chattr +i /etc/hosts
     — блокируем случайное изменение системного файла.

Полезные мелочи, о которых часто забывают

  • bat  — «cat» с подсветкой и номером строк;
  • exa  — красочный аналог ls с деревом;
  • tldr‑pages  — лаконичные мануалы;
  • cheat.sh  — примеры команд в одну строку;
  • distrosea.com  — онлайн‑песочница для экспериментов без виртуалки.

Рекомендуемые практики для скриптов

  • Любой конвейер длиннее двух строк заносите в скрипт — завтра забудете порядок флагов.
  • Добавляйте set -euo pipefail в начало bash‑скриптов, чтобы ловить ошибки.
  • Используйте именованные функции вместо «магических» однострочников — их легче тестировать.

Итоги

Мастерство работы с текстом в Linux — это постоянное открытие новых связок команд. Когда grep, awk и sed становятся привычными, вы не тратите время на графические окна, а сразу переходите к анализу:

  • каталог внезапно «раздулся»? du | sort -h;
  • лог наполнился ошибками? grep -i error;
  • нужно починить конфиг на сотне серверов? sed -i через SSH‑петлю.

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

Linux grep cat less nano
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Хочешь поговорить с хакерами, профессорами и разработчиками не в чатике, а глаза в глаза?

Приезжай на Positive Hack Days Fest* 22–24 мая в Москве — здесь кибербез выходит в офлайн.

*Фест. Реклама. АО «Позитив Текнолоджиз», ИНН 7718668887