Просмотр текста и первый поиск
В Linux почти любая диагностика начинается с чтения текста. Конфиг сервиса, лог веб-сервера, список пользователей, вывод ps или df — всё это строки, которые нужно быстро открыть, просмотреть и сузить до нужного фрагмента.
Просмотреть файл целиком или частями
cat подходит для коротких файлов:
cat /etc/hostname
Для длинных файлов лучше использовать less, потому что он не вываливает всё в терминал сразу:
less /var/log/syslog
Внутри less полезны клавиши:
| Клавиша | Что делает |
|---|---|
/text |
найти текст вниз по файлу |
n |
перейти к следующему совпадению |
Shift+G |
перейти в конец |
q |
выйти |
head и tail нужны, когда важны начало или конец файла:
head -n 20 app.log
tail -n 50 app.log
tail -f app.log
tail -f часто используют при запуске сервиса: команда “следит” за новыми строками в логе.
Найти важное
grep отвечает на вопрос “есть ли здесь строки, похожие на шаблон?”:
grep "ERROR" app.log
grep -i "timeout" app.log
grep -n "listen" nginx.conf
Начинай с простого слова, а потом добавляй флаги. Для новичка важнее не регулярные выражения, а привычка быстро сузить поток информации.
Типовой ход мысли
Если лог большой, не читай его глазами с начала до конца. Сначала найди подозрительные слова: error, failed, denied, timeout, listen, permission. Потом уже открывай контекст вокруг найденных строк.
wc, sort и uniq: быстро посчитать и привести список в порядок
После просмотра файла часто нужно ответить на простой количественный вопрос: сколько строк, сколько совпадений, какие значения встречаются без повторов.
wc -l app.log
grep "ERROR" app.log | wc -l
sort words.txt
sort words.txt | uniq
sort words.txt | uniq -c
wc -l считает строки. Если передать ему имя файла, он покажет число и имя файла. Если подать данные через pipe, обычно выводится только число. Это удобно в конвейерах.
sort сортирует строки. uniq убирает только соседние дубликаты, поэтому перед uniq почти всегда ставят sort. Частая ошибка новичков — запустить uniq на несортированном файле и удивиться, что повторы остались. Команда работает правильно, просто одинаковые строки не стояли рядом.
Первое извлечение полей
В логах и CSV-файлах строка часто состоит из полей. Для простых случаев можно взять поле через cut, для более гибких — через awk.
cut -d',' -f1 users.csv
awk '{print $1}' access.log
awk '{print $9}' access.log | sort | uniq
cut -d',' -f1 означает: разделитель запятая, взять первое поле. Это хорошо работает, когда разделитель простой и одинаковый в каждой строке.
awk '{print $1}' читается так: запустить awk, для каждой строки выполнить действие в фигурных скобках, print $1 напечатать первое поле. В access.log первым полем часто бывает IP-адрес, а код ответа часто стоит в отдельном поле ближе к концу строки. Перед тем как писать итоговую команду, полезно вывести несколько строк через head и глазами понять структуру:
head -n 3 access.log
awk '{print $1, $9}' access.log | head
Поиск без лишнего риска
grep ничего не меняет в файле, поэтому это безопасная первая команда. Начинай с точного слова, затем добавляй флаги:
# Найти строки с точным словом ERROR.
grep "ERROR" app.log
# Найти error, Error, ERROR и другие варианты регистра.
grep -i "error" app.log
# Показать совпадения вместе с номерами строк.
grep -n "ERROR" app.log
# Показать все строки, кроме строк с INFO.
grep -v "INFO" app.log
# Посчитать количество строк с WARNING.
grep -c "WARNING" app.log
# Искать ERROR во всех файлах внутри каталога logs.
grep -r "ERROR" logs/
# Показать только имена файлов, где найден ERROR.
grep -rl "ERROR" logs/
| Флаг | Что делает |
|---|---|
-i |
Отключает чувствительность к регистру. |
-n |
Добавляет номера строк. |
-v |
Инвертирует поиск и оставляет строки без шаблона. |
-c |
Печатает только количество совпавших строк. |
-r |
Ищет рекурсивно по каталогу. |
-l |
Выводит только имена файлов с совпадением. |
Перед лабами важно понимать: команда поиска не обязана сразу быть сложной. Сначала проверь, что совпадения вообще есть, затем сохраняй их в файл через >.
