Все знают о команде cat, которая используется для просмотра содержимого файлов. Но в некоторых случаях вам не нужно смотреть весь файл, иногда достаточно посмотреть только то, что находится в конце файла. Например, когда вы хотите посмотреть содержимое лог файла, то вам не нужно то, с чего он начинается, вам будет достаточно последних сообщений об ошибках.
Для этого можно использовать команду tail, она позволяет выводить заданное количество строк с конца файла, а также выводить новые строки в интерактивном режиме. В этой статье будет рассмотрена команда tail Linux.
Содержание статьи
Команда tail в Linux
Перед тем как мы будем рассматривать примеры tail linux, давайте разберем ее синтаксис и опции. А синтаксис очень прост:
$ tail опции файл
По умолчанию утилита выводит десять последних строк из файла, но ее поведение можно настроить с помощью опций:
- -c - выводить указанное количество байт с конца файла;
- -f - обновлять информацию по мере появления новых строк в файле;
- -n - выводить указанное количество строк из конца файла;
- --pid - используется с опцией -f, позволяет завершить работу утилиты, когда завершится указанный процесс;
- -q - не выводить имена файлов;
- --retry - повторять попытки открыть файл, если он недоступен;
- -v - выводить подробную информацию о файле;
В качестве значения параметра -c можно использовать число с приставкой b, kB, K, MB, M, GB, G T, P, E, Z, Y. Еще есть одно замечание по поводу имен файлов. По умолчанию утилита не отслеживает изменение имен, но вы можете указать что нужно отслеживать файл по дескриптору, подробнее в примерах.
Использование tail
Теперь, когда вы знаете основные опции, рассмотрим приемы работы с утилитой. Самый простой пример - выводим последние десять строк файла:
tail /var/log/syslog
Если вам недостаточно 10 строк и нужно намного больше, то вы можете увеличить этот параметр с помощью опции -n:
tail -n 100 /var/log/syslog
Когда вы хотите отслеживать появление новых строк в файле, добавьте опцию -f:
tail -f /var/log/syslog
Вы можете открыть несколько файлов одновременно, просто перечислив их в параметрах:
tail /var/log/syslog /var/log/Xorg.0.log
С помощью опции -s вы можете задать частоту обновления файла. По умолчанию данные обновляются раз в секунду, но вы можете настроить, например, обновление раз в пять секунд:
tail -f -s 5 /var/log/syslog
При открытии нескольких файлов будет выводиться имя файла перед участком кода. Если вы хотите убрать этот заголовок, добавьте опцию -q:
tail -q var/log/syslog /var/log/Xorg.0.log
Если вас интересует не число строк, а именно число байт, то вы можете их указать с помощью опции -c:
tail -c 500 /var/log/syslog
Для удобства, вы можете выбирать не все строки, а отфильтровать интересующие вас:
tail -f /var/log/syslog | grep err

Особенно, это полезно при анализе логов веб сервера или поиске ошибок в реальном времени. Если файл не открывается, вы можете использовать опцию retry чтобы повторять попытки:
tail -f --retry /var/log/syslog | grep err
Как я говорил в начале статьи, по умолчанию опция -f или --follow отслеживает файл по его имени, но вы можете включить режим отслеживания по дескриптору файла, тогда даже если имя измениться, вы будете получать всю информацию:
tail --follow=descriptor /var/log/syslog | grep err

Выводы
В этой статье была рассмотрена команда tail linux. С помощью нее очень удобно анализировать логи различных служб, а также искать в них ошибки. Надеюсь, эта информация была полезной для вас.
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали











Захотел проверить на текстовом файле. Создал файл 1.txt, написал в терминале tail -f 1.txt, стал менять файл через текстовый редактор и изменения почему-то не отслеживались. Зато заработало с флагом -F, почему так? Неужели изменение файла через текстовый редактор - это его удаление и создание с тем же именем нового?
Как выйти или закрыть это?
sudo tail -n5 -f /var/...
Ctrl+Z только [2]+ Stopped делает
Спасибо!
Ctrl+Z сворачивает в фоновый режим. Для выхода используйте Ctrl+C.
подскажите ,пожалуйста, как с помощью tail просматривать лог последне-созданного файла ?
классная статья! наконец то что то годное. Уже 5 лет как захожу сюда, хороший справочник кстати )
Спасибо за статью!
Не подскажете, как исключить из вывода строки содержащие определенную последовательность символов?
tail -f /var/log/syslog | grep err
Выводит те строки в которых есть err. А что, если мне нужно наоборот. Чтобы выводилось все кроме err?
Благодарю!
Используйте опцию -v или --invert-match
Доброго времени суток!
Тестировал команду: tail --follow=descriptor (файл генерировал лог каждую секунду).
При тестировании команды изменил имя файла, за которым шло отслеживание tail. По итогу лог перестал обновляться (основная проблема).
Решение:
Использовать вместо "--folow=descriptor" -> -F
tail -F
Использовал следующую систему:
OS: Linux Mint 21.1 x86_64
Kernel: 6.4.2
Shell: bash 5.1.16
Доброго времени суток.
Есть ли примеры на --pid?
«
-n - выводить указанное количество строк из конца файла;
--pid - используется с опцией -f, позволяет завершить работу утилиты, когда завершится указанный процесс;
»
https://www.youtube.com/watch?v=wWHz1mfFZ-w
Очень хороший ресурс, часто им пользуюсь, спасибо!
Замечание по статье: не указана опция чтения со строки с определённым номером "-n +"