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.
Практика: экспресс‑аудит логов веб‑сервера
zgrep -h "GET /wp-login.php" /var/log/nginx/access*.gz | awk '{print $1}' > attackers.txt
sort attackers.txt | uniq -c | sort -nr | head
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‑петлю.
Оттачивайте короткие команды, комбинируйте их в конвейеры, держите шпаргалку под рукой и не бойтесь углубляться в регулярные выражения. Именно они превращают хаос гигабайтных логов в понятную картину происходящего.