Как пользователи Linux, мы часто работаем с длительными фоновыми процессами Linux, которые называются демонами или службами. Некоторые из распространенных примеров таких служб — Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron, и список можно продолжать.
Много раз нам необходимо отслеживать журналы этих служб для отладки системных проблем. Однако одна из основных проблем заключается в том, что эти службы генерируют большое количество журналов, и в большинстве случаев просмотр этих журналов становится громоздким, поэтому здесь мы можем использовать команду tail.
Команда tail — это утилита командной строки, аналогичная команде head, которая читает файл и печатает последние 10 строк (содержимое) одного или нескольких файлов на стандартный вывод.
Синтаксис команды tail
Синтаксис команды tail аналогичен другим командам Linux:
$ tail [OPTIONS] [FILE-1] [FILE-2] ...
1. Печать последних 10 строк файла в Linux
По умолчанию команда tail печатает последние 10 строк заданного файла, как показано на рисунке.
$ tail /var/log/secure
Здесь мы видим, что приведенная выше команда показывает последние десять строк из файла /var/log/secure.
2. Печать последних N строк файла в Linux
В последнем примере команда печатает последние 10 строк данного файла. Однако мы можем использовать опцию -n, которая позволяет нам ограничить количество строк, выводимых на экран, как показано на рисунке.
$ tail -n 3 /var/log/secure
В этом примере мы видим, что теперь команда показывает только последние три строки вместо десяти строк.
3. Игнорирование первых N строк файла в Linux
Здесь мы можем использовать символ плюс (+) с опцией -n, которая позволяет нам управлять точкой отсчета от заданного файла.
Чтобы понять это, давайте используем значение +5, чтобы начать вывод с 5-й строки:
$ tail -n +5 /var/log/secure
4. Показать последние N символов файла
Аналогично строкам, мы также можем использовать команду для отображения последних N символов файла с помощью опции -c, как показано ниже:
$ tail -c 7 /var/log/secure
В данном примере мы видим, что команда показывает последние семь ASCII-символов заданного файла.
5. Удаление первых N символов файла
Аналогично, мы можем использовать символ плюс (+) с опцией -c, чтобы пропустить первые N символов. Итак, давайте пропустим первую строку файла с помощью следующей команды:
$ tail -c +5 /var/log/secure
Здесь мы видим, что команда показывает все строки, кроме первой.
6. Показывать имя файла в заголовке
Мы можем указать команде tail отображать имя текущего файла в виде заголовка, что очень удобно при работе с несколькими файлами.
Итак, давайте воспользуемся опцией -v, чтобы включить отображение заголовка:
$ tail -n 3 -v /var/log/secure
В приведенном выше выводе, ==> /var/log/secure <== представляет собой отображаемый заголовок.
7. Показывать имя файла в качестве заголовка в нескольких файлах
Как и любая другая команда обработки файлов, команда tail может использовать несколько файлов. В таких случаях для разделения содержимого файлов используется отображаемый заголовок.
$ tail -n 3 -v /var/log/secure /var/log/secure-20230402
В приведенном выше выводе мы можем видеть отображаемый заголовок для каждого файла.
8. Как отключить отображение заголовка в файле
В предыдущем примере мы видели, что команда включает отображение заголовка при работе с несколькими файлами. Однако мы можем отключить это поведение по умолчанию с помощью опции -q.
$ tail -q -n 3 /var/log/secure /var/log/secure-20230402
Здесь мы видим, что теперь команда отображает содержимое файла одно за другим без какого-либо заголовка.
9. Как следить за изменениями в файле
До сих пор мы видели, что команда tail завершает работу, как только обработает необходимое количество строк или символов. Однако иногда мы хотим просмотреть только что созданные журналы.
В таких случаях мы можем использовать опцию -f, которая позволяет следить за изменениями в файле в режиме реального времени.
Чтобы понять это, сначала выполним приведенную ниже команду в первом терминале:
$ tail -f /var/log/messages
Здесь мы видим, что команда ждет бесконечно долго после отображения последних десяти строк:
Далее, давайте откроем другой терминал и добавим некоторый текст в файл numbers-2.txt:
$ echo "View Logs in Real-Time" >> /var/log/messages
Теперь давайте переключимся на первый терминал, чтобы просмотреть новый добавленный текст:
$ tail -f /var/log/messages
Здесь мы видим, что команда tail показывает только что добавленный текст.