Като потребители на Linux, ние често работим с дълготрайни фонови Linux процеси, които се наричат демони или услуги. Някои от често срещаните примери за услугите са Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron и списъкът продължава.
Много пъти трябва да наблюдаваме регистрационните файлове на тези услуги, за да отстраним системните проблеми. Едно от основните предизвикателства обаче е, че тези услуги генерират много регистрационни файлове и през повечето време преминаването през тези регистрационни файлове го прави тромаво, това е мястото, където можем да използваме команда за опашка.
командата tail е помощна програма от командния ред, подобна на командата head, която чете файл и отпечатва последните 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 Zamunda.info sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774 Apr 2 14:17:24 Zamunda.info sshd[201165]: pam_unix(sshd:session): session closed for user tecmint Apr 2 14:29:12 Zamunda.info sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2 Apr 2 14:29:12 Zamunda.info systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 Zamunda.info sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 Zamunda.info sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user Apr 2 14:29:12 Zamunda.info sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378 Apr 2 14:29:12 Zamunda.info sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 Zamunda.info sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 Zamunda.info sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Тук можем да видим, че горната команда показва последните десет реда от /var/log/secure файл.
2. Отпечатайте последните N реда от файл в Linux
В последния пример командата отпечатва последните 10 реда от дадения файл. Въпреки това можем да използваме -n
опция, която ни позволява да ограничим броя на редовете, които да бъдат отпечатани на екрана, както е показано.
$ tail -n 3 /var/log/secure Apr 2 14:29:12 Zamunda.info sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 Zamunda.info sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 Zamunda.info 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 Zamunda.info sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774 Apr 2 14:17:24 Zamunda.info sshd[201165]: pam_unix(sshd:session): session closed for user tecmint Apr 2 14:29:12 Zamunda.info sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2 Apr 2 14:29:12 Zamunda.info systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 Zamunda.info sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 Zamunda.info sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user Apr 2 14:29:12 Zamunda.info sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378 Apr 2 14:29:12 Zamunda.info sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 Zamunda.info sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 Zamunda.info 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 Zamunda.info sudo[162801]: root : TTY=pts/2 ; PWD=/root ; USER=root ; COMMAND=/bin/dnf install R Apr 2 03:02:59 Zamunda.info sudo[162801]: pam_unix(sudo:session): session opened for user root(uid=0) by root(uid=0) Apr 2 03:03:02 Zamunda.info sudo[162801]: pam_unix(sudo:session): session closed for user root Apr 2 03:11:17 Zamunda.info groupadd[163602]: group added to /etc/group: name=avahi, GID=70 Apr 2 03:11:18 Zamunda.info groupadd[163602]: group added to /etc/gshadow: name=avahi Apr 2 03:11:18 Zamunda.info groupadd[163602]: new group: name=avahi, GID=70 Apr 2 03:11:19 Zamunda.info 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 Zamunda.info groupadd[163704]: group added to /etc/group: name=colord, GID=986 Apr 2 03:13:41 Zamunda.info 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 Zamunda.info sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 Zamunda.info sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 Zamunda.info 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 Zamunda.info sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 Zamunda.info sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 Zamunda.info 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 Zamunda.info groupadd[156163]: new group: name=docker, GID=987 Mar 31 04:46:11 Zamunda.info sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2 Mar 31 04:46:11 Zamunda.info 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 Zamunda.info sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 Zamunda.info sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 Zamunda.info sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0) Mar 31 03:50:53 Zamunda.info groupadd[156163]: new group: name=docker, GID=987 Mar 31 04:46:11 Zamunda.info sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2 Mar 31 04:46:11 Zamunda.info 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 Zamunda.info NetworkManager[741]: [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'Zamunda.info' Apr 2 15:13:28 Zamunda.info systemd[1]: Starting Network Manager Script Dispatcher Service... Apr 2 15:13:28 Zamunda.info systemd[1]: Started Network Manager Script Dispatcher Service. Apr 2 15:13:37 Zamunda.info arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted Apr 2 15:13:38 Zamunda.info systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully. Apr 2 15:13:58 Zamunda.info systemd[1]: systemd-hostnamed.service: Deactivated successfully. Apr 2 15:18:03 Zamunda.info systemd[1]: Starting dnf makecache... Apr 2 15:18:03 Zamunda.info dnf[202235]: Metadata cache refreshed recently. Apr 2 15:18:03 Zamunda.info systemd[1]: dnf-makecache.service: Deactivated successfully. Apr 2 15:18:03 Zamunda.info 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 Zamunda.info NetworkManager[741]: [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'Zamunda.info' Apr 2 15:13:28 Zamunda.info systemd[1]: Starting Network Manager Script Dispatcher Service... Apr 2 15:13:28 Zamunda.info systemd[1]: Started Network Manager Script Dispatcher Service. Apr 2 15:13:37 Zamunda.info arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted Apr 2 15:13:38 Zamunda.info systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully. Apr 2 15:13:58 Zamunda.info systemd[1]: systemd-hostnamed.service: Deactivated successfully. Apr 2 15:18:03 Zamunda.info systemd[1]: Starting dnf makecache... Apr 2 15:18:03 Zamunda.info dnf[202235]: Metadata cache refreshed recently. Apr 2 15:18:03 Zamunda.info systemd[1]: dnf-makecache.service: Deactivated successfully. Apr 2 15:18:03 Zamunda.info systemd[1]: Finished dnf makecache. View Logs in Real-Time
Тук можем да видим, че командата tail показва новодобавения текст.
Знаете ли за някой друг най-добър пример за командата tail в Linux? Кажете ни вашето мнение в коментарите по-долу.
Публикациите се превеждат автоматично с google translate