Как пользователи Linux, мы часто работаем с фоновые процессы Linux, которые называются демонами или службами. Некоторые из распространенных примеров услуг: Безопасная оболочка (sshd)Диспетчер сети (networkd), Диспетчер томов (LVM), КронИ список продолжается.
Много раз нам нужно следить за логами из этих сервисов для отладки системных проблем. Однако одна из основных проблем заключается в том, что эти сервисы генерируют много журналов, и большую часть времени просмотр этих журналов делает его громоздким, именно здесь мы можем использовать хвостовая команда.
команда tail — это утилита командной строки, похожая на команду головная команда который читает файл и печатает последние 10 строк (содержимое) одного или нескольких файлов в стандартный вывод.
В этом практическом руководстве мы узнаем о команде tail. К концу этого руководства пользователи командной строки Linux смогут эффективно использовать команду tail.
Оглавление
Синтаксис команды tail
Синтаксис хвост команда похожа на другие команды Linux:
$ tail [OPTIONS] [FILE-1] [FILE-2] ...
1. Распечатайте последние 10 строк файла в Linux
По умолчанию хвост команда печатает последний 10 строки данного файла, как показано.
$ tail /var/log/secure Apr 2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774 Apr 2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint Apr 2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2 Apr 2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user Apr 2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378 Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Здесь мы видим, что приведенная выше команда показывает последние десять строк из /var/журнал/безопасный файл.
2. Распечатайте последние N строк файла в Linux
В последнем примере команда печатает последние 10 строк данного файла. Тем не менее, мы можем использовать -n
опция, которая позволяет нам ограничить количество строк, которые будут напечатаны на экране, как показано.
$ tail -n 3 /var/log/secure Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
В этом примере мы видим, что теперь команда показывает только последние три строки вместо десяти.
3. Игнорировать первые N строк файла в Linux
Здесь мы можем использовать плюс (+)
символ с -n
опция, которая позволяет нам контролировать начальную точку из данного файла.
Чтобы понять это, воспользуемся +5
значение, чтобы начать вывод с 5-й строки:
$ tail -n +5 /var/log/secure Apr 2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774 Apr 2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint Apr 2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2 Apr 2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user Apr 2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378 Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
4. Показать последние N символов файла
Подобно линиям, мы также можем использовать команду для отображения последней N
символов файла с помощью -c
вариант, как показано ниже:
$ tail -c 7 /var/log/secure (uid=0)
В этом примере мы видим, что команда показывает последние семь ASCII символов данного файла.
5. Удалить первые N символов файла
Точно так же мы можем использовать символ плюса (+)
с -c
возможность пропустить первый N
характер. Итак, давайте пропустим первую строку файла, используя следующую команду:
$ tail -c +5 /var/log/secure Apr 2 03:02:59 TecMint sudo[162801]: root : TTY=pts/2 ; PWD=/root ; USER=root ; COMMAND=/bin/dnf install R Apr 2 03:02:59 TecMint sudo[162801]: pam_unix(sudo:session): session opened for user root(uid=0) by root(uid=0) Apr 2 03:03:02 TecMint sudo[162801]: pam_unix(sudo:session): session closed for user root Apr 2 03:11:17 TecMint groupadd[163602]: group added to /etc/group: name=avahi, GID=70 Apr 2 03:11:18 TecMint groupadd[163602]: group added to /etc/gshadow: name=avahi Apr 2 03:11:18 TecMint groupadd[163602]: new group: name=avahi, GID=70 Apr 2 03:11:19 TecMint useradd[163610]: new user: name=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none Apr 2 03:13:41 TecMint groupadd[163704]: group added to /etc/group: name=colord, GID=986 Apr 2 03:13:41 TecMint groupadd[163704]: group added to /etc/gshadow: name=colord
Здесь мы видим, что команда показывает все строки, кроме первой.
6. Показать имя файла в заголовке
Мы можем поручить хвост Команда для отображения текущего имени файла в качестве заголовка дисплея, что удобно при работе с несколькими файлами.
Итак, воспользуемся -v
возможность включить отображение заголовка:
$ tail -n 3 -v /var/log/secure ==>/var/log/secure <== Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
В приведенном выше выводе ==> /var/log/secure <==
представляет заголовок дисплея.
7. Показать имя файла в качестве заголовка в нескольких файлах
Как и любая другая команда обработки файлов, мы также можем использовать несколько файлов с хвост команда. В таких случаях заголовок дисплея используется для разделения содержимого файла.
$ tail -n 3 -v /var/log/secure /var/log/secure-20230402 ==> /var/log/secure <== Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0) ==> /var/log/secure-20230402 <== Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987 Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2 Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
В приведенном выше выводе мы видим отображаемый заголовок для каждого файла.
8. Как отключить отображение заголовка в файле
В предыдущем примере мы видели, что команда включает отображение заголовка при работе с несколькими файлами. Однако мы можем подавить это поведение по умолчанию с помощью -q
вариант.
$ tail -q -n 3 /var/log/secure /var/log/secure-20230402 Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0) Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987 Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2 Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Здесь мы видим, что теперь команда отображает содержимое файла одно за другим без какого-либо отображаемого заголовка.
9. Как отслеживать изменения в файле
До сих пор мы видели, что команда tail завершает работу после обработки необходимого количества строк или символов. Однако иногда мы также хотим просмотреть вновь созданные журналы.
В таких случаях мы можем использовать -f
опция с командой, которая позволяет нам отслеживать изменения в файле в режиме реального времени.
Чтобы понять это, сначала давайте выполним следующую команду в первом терминале:
$ tail -f /var/log/messages Apr 2 15:13:28 TecMint NetworkManager[741]: [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint' Apr 2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service... Apr 2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service. Apr 2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted Apr 2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully. Apr 2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Starting dnf makecache... Apr 2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently. Apr 2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Finished dnf makecache.
Здесь мы видим, что команда бесконечно ждет после отображения последних десяти строк:
Далее, давайте откроем другой терминал и добавим некоторый текст в числа-2.txt файл:
$ echo "View Logs in Real-Time" >> /var/log/messages
Теперь давайте переключимся на первый терминал, чтобы просмотреть только что добавленный текст:
$ tail -f /var/log/messages Apr 2 15:13:28 TecMint NetworkManager[741]: [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint' Apr 2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service... Apr 2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service. Apr 2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted Apr 2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully. Apr 2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Starting dnf makecache... Apr 2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently. Apr 2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Finished dnf makecache. View Logs in Real-Time
Здесь мы видим, что команда tail показывает только что добавленный текст.
Знаете ли вы какой-нибудь другой лучший пример команды tail в Linux? Сообщите нам свое мнение в комментариях ниже.