Следить за журналом и видеть только ошибки
--line-buffered нужен, чтобы grep печатал совпадения сразу, а не пачками.
Команда tail печатает конец файла и с ключом -f следит, как в журнал дописываются новые строки.
tail app.log
последние 10 строк
tail -n 50 app.log
последние 50 строк
tail -n +2 data.csv
всё, начиная со 2-й строки
tail -f /var/log/nginx/error.log
следить; Ctrl+C — выход
tail -F app.log
следить и пережить ротацию журнала
tail -n 0 -f app.log
только новые строки, без старых
tail -f a.log b.log
два файла сразу, с именами
tail -f app.log | grep --line-buffered ERROR
следить за ошибками
tail печатает конец файла: без ключей — 10 строк, с -n N — N строк. Новые
записи журналов дописываются в конец, поэтому tail — первый взгляд на «что
случилось только что».
Ключ -f (follow) не завершает команду: tail ждёт и печатает каждую строку,
которую дописали в файл. Так смотрят журнал службы, пока воспроизводят ошибку
в соседнем окне. Выход — Ctrl+C.
Журналы systemd лежат не в файлах, а в journald: для них аналог tail -f —
journalctl -f (см. journalctl).
-n 50 и короткая запись -50 равны. +N в -n +N значит «начиная со строки
N». Полный список — man tail.
| Ключ | Что делает | Пример |
|---|---|---|
-n N |
Напечатать последние N строк; -n +N — начиная со строки N. | tail -n 50 app.log |
-f |
Не выходить и печатать строки, которые дописываются в файл. | tail -f /var/log/nginx/error.log |
-F |
Как -f, но следить по имени и заново открыть файл после ротации. | tail -F app.log |
-c N |
Напечатать последние N байт. | tail -c 200 app.log |
--pid PID |
С -f завершиться, когда процесс PID закончит работу. | tail -f build.log --pid=4242 |
-q |
Не печатать заголовки ==> имя <== для нескольких файлов. | tail -q -n 1 *.log |
Ничего не найдено. Попробуй запрос короче.
--line-buffered нужен, чтобы grep печатал совпадения сразу, а не пачками.
logrotate переименовал файл и создал новый, а tail -f продолжает читать
старый. Следи по имени: tail -F заново откроет файл, когда тот заменят.
Системные журналы читает root и группа adm. Используй sudo tail или проверь
членство: id покажет, есть ли у тебя adm.
Файла нет — возможно, служба пишет в journald, а не в файл. Проверь ls
/var/log/ и journalctl -u служба -n 50.
Программа буферизует свой вывод, а не tail. В конвейере после tail -f добавь
--line-buffered для grep или stdbuf -oL перед командой.
Щёлкни по терминалу, чтобы фокус был в нём, и нажми Ctrl+C ещё раз: без фокуса сочетание получает браузер.
Есть неточность? Сообщить об ошибке в статье