← назад к разделу

Приложение упало на стенде, разработчик просит «посмотри, что в логах» — а лог лежит на сервере с Linux, и попасть в него можно только через терминал: текстовое окно, где команды набирают, а не кликают мышкой. Пугаться не стоит: чтобы дойти до нужной строки, хватает пяти команд.

cat app.log 8 240 строк INFO ORD-76 paid INFO cart cleared INFO ORD-77 created DEBUG cache warm INFO ORD-77 item add WARN pool busy INFO ORD-77 pay start INFO ORD-78 created ERROR ORD-77 timeout INFO session close INFO ORD-77 created INFO ORD-77 item add INFO ORD-77 pay start ERROR ORD-77 timeout grep "ORD-77"4 строки INFO ORD-77 created INFO ORD-77 item add INFO ORD-77 pay start ERROR ORD-77 timeout tail -n 22 строки INFO ORD-77 pay start ERROR ORD-77 timeout причина виднастроку — в баг-репорт

Лог целиком глазами не читают: в файле 8 240 строк. Команда grep оставляет только строки про нужный заказ — их четыре, а tail берёт из них две последние. За три шага поток сузился до одной строки, в которой видно причину: заказ упал по таймауту.

Зачем тестировщику терминал

Терминал открывают не ради него самого, а ради трёх обычных дел. Главное — логи: текстовые файлы, куда приложение пишет, что делает и какие ошибки ловит; когда на сервере что-то пошло не так, ответ обычно там. Второе — проверить файл: дошёл ли, те ли в нём данные. Третье — стенд, к которому иначе и не подступиться: интерфейса у него нет.

Сам терминал — диалог: пишете команду, жмёте Enter, система выполняет и показывает результат.

Навигация по папкам

Файлы в Linux разложены по папкам (директориям), как на любом компьютере, и первым делом нужно попасть в ту, где лежат логи:

  • pwd — показать, где я сейчас.
  • ls — что лежит в текущей папке; ls -l — подробно (размер, дата), ls -a — вместе со скрытыми файлами.
  • cd имя_папки — зайти в папку, cd .. — подняться на уровень выше, cd без ничего — в домашнюю.

Просмотр файлов и логов

Четыре команды, которыми лог и читают:

  • cat файл — вывести файл целиком. Годится, пока файл маленький.
  • tail файл — показать последние строки; tail -n 50 файл — последние 50, tail -f файл — следить вживую: новые строки появляются по мере записи, прямо пока воспроизводишь баг.
  • head файл — наоборот, первые строки.
  • grep "текст" файл — найти строки с нужным текстом: grep "ERROR" app.log покажет все строки с ошибками. Логи бывают огромными, а grep сразу вытаскивает нужное. -n добавит номер строки, -C 3 — три строки вокруг: у ошибки ценен не заголовок, а стек под ним.

Воспроизвели баг — заходите в логи и сужаете вывод, как на картинке:

cd /var/log/app                       # где лежат логи
ls -l                                 # какие файлы есть и когда в них писали
grep "ORD-77" app.log | tail -n 2     # строки про заказ, из них две последние
tail -f app.log | grep "ERROR"        # следить за новыми ошибками вживую

Вертикальная черта | — конвейер: вывод левой команды становится входом правой, и порядок решает. grep "ERROR" app.log | tail -n 20 отберёт ошибки по всему файлу и покажет последние двадцать. А tail -n 20 app.log | grep "ERROR" поищет ошибку только в двадцати последних строках файла — и чаще всего вернёт пусто, хотя ошибка в логе есть.

Где потренироваться

Устанавливать Linux не нужно: есть онлайн-терминалы (запрос «online linux terminal», например webminal) — открываете в браузере и работаете настоящими командами, ничего не ломая у себя. На Mac терминал уже встроен и понимает то же самое, на Windows похожее поведение даёт WSL или Git Bash.

Где теряют время

Найденные строки лога прикладывают к баг-репорту — и дефект перестаёт быть «что-то пошло не так». Мешают этому три вещи:

  • Терминала боятся как «программирования» — а нужно пять команд.
  • Огромный лог читают глазами вместо grep "ERROR" — и тонут в тысячах строк.
  • Незнакомую команду набирают на боевом сервере. Читать (cat, tail, grep) безопасно, всё остальное — только с пониманием.

Коротко

  • Хватает пяти команд: ls и cd — где я и что тут; cat, tail, grep — что внутри файла.
  • cat — для маленьких файлов; у большого лога смотрят конец (tail -n 50), а tail -f — строки прямо во время воспроизведения бага.
  • grep сужает лог до нужных строк — по слову ERROR или по номеру заказа; -n даёт номер строки, -C 3 — соседние.
  • В конвейере решает порядок: grep отбирает по всему файлу, tail сначала обрежет файл — и ошибка в остаток может не попасть.
  • Чтение файлов безопасно, изменение — нет: незнакомую команду на боевом сервере не набирают.

Что почитать дальше