În calitate de utilizatori Linux, lucrăm adesea cu de lungă durată procesele Linux de fundal, care se numesc demoni sau servicii. Unele dintre exemplele comune ale serviciilor sunt Shell securizat (sshd), Network Manager (networkd), Volume Manager (LVM), Cron, iar lista poate continua.
De multe ori avem nevoie monitorizați jurnalele a acestor servicii pentru a depana problemele sistemului. Cu toate acestea, una dintre principalele provocări este că aceste servicii generează o mulțime de jurnale și de cele mai multe ori parcurgerea acestor jurnale o face greoaie, aici putem folosi comanda coadă.
tail command este un utilitar de linie de comandă, similar cu comanda capului care citește un fișier și imprimă ultimele 10 rânduri (conținut) ale unuia sau mai multor fișiere la ieșire standard.
În acest ghid practic, vom afla despre comanda coadă. Până la sfârșitul acestui ghid, utilizatorii liniei de comandă Linux vor putea folosi comanda tail în mod eficient.
Cuprins
Sintaxa lui coadă comanda este similară cu alte comenzi Linux:
$ coada [OPȚIUNI] [FIȘIER-1] [FIȘIER-2]...
În mod implicit, coadă comanda tipărește ultimul 10 linii ale fișierului dat, așa cum se arată.
$ tail /var/log/secureApr 2 14:17:24 TecMint sshd[201178]: Deconectat de la utilizatorul tecmint 192.168.0.162 portul 59774. Apr 2 14:17:24 TecMint sshd[201165]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 14:29:12 TecMint sshd[201366]: Parola acceptată pentru tecmint de la 192.168.0.162 portul 56378 ssh2. Apr 2 14:29:12 TecMint systemd[201371]: pam_unix (systemd-user: session): sesiune deschisă pentru utilizatorul tecmint (uid=1002) de (uid=0) Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune deschisă pentru utilizatorul tecmint (uid=1002) de (uid=0) Apr 2 14:29:12 TecMint sshd[201382]: Deconectare primită de la portul 192.168.0.162 56378:11: deconectat de utilizator. Apr 2 14:29:12 TecMint sshd[201382]: Deconectat de la utilizatorul tecmint 192.168.0.162 portul 56378. Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 15:12:55 TecMint sshd[202049]: Parola acceptată pentru root de la 192.168.0.162 portul 53334 ssh2. Apr 2 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0)
Aici, putem vedea că comanda de mai sus arată ultimele zece linii din /var/log/secure fişier.
În ultimul exemplu, comanda imprimă ultimele 10 rânduri ale fișierului dat. Cu toate acestea, putem folosi -n
opțiune care ne permite să limităm numărul de linii de tipărit pe ecran, așa cum se arată.
$ coada -n 3 /var/log/secure Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 15:12:55 TecMint sshd[202049]: Parola acceptată pentru root de la 192.168.0.162 portul 53334 ssh2. Apr 2 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0)
În acest exemplu, putem vedea că acum comanda arată doar ultimele trei linii în loc de cele zece linii.
Aici, putem folosi plusul (+)
simbol cu -n
opțiunea, care ne permite să controlăm punctul de plecare din fișierul dat.
Pentru a înțelege acest lucru, să folosim +5
valoare pentru a începe ieșirea din a 5-a linie:
$ coada -n +5 /var/log/secureApr 2 14:17:24 TecMint sshd[201178]: Deconectat de la utilizatorul tecmint 192.168.0.162 portul 59774. Apr 2 14:17:24 TecMint sshd[201165]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 14:29:12 TecMint sshd[201366]: Parola acceptată pentru tecmint de la 192.168.0.162 portul 56378 ssh2. Apr 2 14:29:12 TecMint systemd[201371]: pam_unix (systemd-user: session): sesiune deschisă pentru utilizatorul tecmint (uid=1002) de (uid=0) Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune deschisă pentru utilizatorul tecmint (uid=1002) de (uid=0) Apr 2 14:29:12 TecMint sshd[201382]: Deconectare primită de la portul 192.168.0.162 56378:11: deconectat de utilizator. Apr 2 14:29:12 TecMint sshd[201382]: Deconectat de la utilizatorul tecmint 192.168.0.162 portul 56378. Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 15:12:55 TecMint sshd[202049]: Parola acceptată pentru root de la 192.168.0.162 portul 53334 ssh2. Apr 2 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0)
Similar liniilor, putem folosi și comanda pentru a afișa ultimul N
caractere ale fișierului folosind -c
opțiunea după cum se arată mai jos:
$ tail -c 7 /var/log/secure (uid=0)
În acest exemplu, putem vedea că comanda arată ultimele șapte ASCII caracterele fișierului dat.
În mod similar, putem folosi simbolul plus (+)
cu -c
opțiunea de a sări peste primul N
caracter. Deci, să sărim peste prima linie a fișierului folosind comanda de mai jos:
$ coada -c +5 /var/log/secureApr 2 03:02:59 TecMint sudo[162801]: root: TTY=pts/2; PWD=/rădăcină; UTILIZATOR=rădăcină; COMMAND=/bin/dnf instalează R. Apr 2 03:02:59 TecMint sudo[162801]: pam_unix (sudo: session): sesiune deschisă pentru utilizator root (uid=0) de către root (uid=0) Apr 2 03:03:02 TecMint sudo[162801]: pam_unix (sudo: session): sesiune închisă pentru utilizator root. Apr 2 03:11:17 TecMint groupadd[163602]: grup adăugat în /etc/group: name=avahi, GID=70. Apr 2 03:11:18 TecMint groupadd[163602]: grup adăugat la /etc/gshadow: name=avahi. Apr 2 03:11:18 TecMint groupadd[163602]: grup nou: nume=avahi, GID=70. Apr 2 03:11:19 TecMint useradd[163610]: utilizator nou: name=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none. Apr 2 03:13:41 TecMint groupadd[163704]: grup adăugat în /etc/group: name=colord, GID=986. Apr 2 03:13:41 TecMint groupadd[163704]: grup adăugat la /etc/gshadow: name=colord.
Aici, putem vedea că comanda arată toate liniile, cu excepția primei linii.
Îl putem instrui pe coadă comandă pentru a afișa numele curent al fișierului ca antet de afișare, ceea ce este util atunci când lucrați cu mai multe fișiere.
Deci, să folosim -v
opțiunea de a activa antetul afișajului:
$ coada -n 3 -v /var/log/secure==>/var/log/secure <== Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 15:12:55 TecMint sshd[202049]: Parola acceptată pentru root de la 192.168.0.162 portul 53334 ssh2. Apr 2 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0)
În rezultatul de mai sus, ==> /var/log/secure <==
reprezintă antetul afișajului.
La fel ca orice altă comandă de procesare a fișierelor, putem folosi și mai multe fișiere cu coadă comanda. În astfel de cazuri, antetul de afișare este folosit pentru a separa conținutul fișierului.
$ 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): sesiune închisă pentru utilizatorul tecmint. Apr 2 15:12:55 TecMint sshd[202049]: Parola acceptată pentru root de la 192.168.0.162 portul 53334 ssh2. Apr 2 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0) ==> /var/log/secure-20230402 <== Mar 31 03:50:53 TecMint groupadd[156163]: grup nou: nume=docker, GID=987. 31 mar 04:46:11 TecMint sshd[159403]: Parola acceptată pentru root de la 192.168.0.162 portul 46480 ssh2. 31 mar 04:46:11 TecMint sshd[159403]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0)
În rezultatul de mai sus, putem vedea antetul de afișare pentru fiecare fișier.
În exemplul anterior, am văzut că comanda activează antetul de afișare în timp ce lucrați cu mai multe fișiere. Cu toate acestea, putem suprima acest comportament implicit folosind -q
opțiune.
$ coada -q -n 3 /var/log/secure /var/log/secure-20230402Apr 2 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sesiune închisă pentru utilizatorul tecmint. Apr 2 15:12:55 TecMint sshd[202049]: Parola acceptată pentru root de la 192.168.0.162 portul 53334 ssh2. Apr 2 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0) Mar 31 03:50:53 TecMint groupadd[156163]: grup nou: nume=docker, GID=987. 31 mar 04:46:11 TecMint sshd[159403]: Parola acceptată pentru root de la 192.168.0.162 portul 46480 ssh2. 31 mar 04:46:11 TecMint sshd[159403]: pam_unix (sshd: session): sesiune deschisă pentru utilizator root (uid=0) de (uid=0)
Aici, putem vedea că acum comanda afișează conținutul fișierului unul după altul fără niciun antet de afișare.
Până acum am văzut că comanda tail iese odată ce procesează numărul necesar de linii sau caractere. Cu toate acestea, uneori vrem să vedem și jurnalele nou generate.
În astfel de cazuri, putem folosi -f
opțiunea cu comanda, care ne permite să monitorizăm fișierul pentru modificări în timp real.
Pentru a înțelege acest lucru, mai întâi, să executăm comanda de mai jos în primul terminal:
$ tail -f /var/log/messagesApr 2 15:13:28 TecMint NetworkManager[741]: [1680462808.8441] politică: set-hostname: numele gazdă curent a fost schimbat în afara NetworkManager: „TecMint” 2 aprilie 15:13:28 TecMint systemd[1]: Se pornește serviciul de dispecer de script Network Manager... 2 aprilie 15:13:28 TecMint systemd[1]: A pornit Serviciul de dispecer de script Manager de rețea. Apr 2 15:13:37 TecMint arpwatch[11001]: redenumiți arp.dat -> arp.dat-: Operațiunea nu este permisă. Apr 2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Dezactivat cu succes. Apr 2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Dezactivat cu succes. Apr 2 15:18:03 TecMint systemd[1]: Se pornește dnf makecache... Apr 2 15:18:03 TecMint dnf[202235]: Memoria cache a metadatelor a fost reîmprospătată recent. Apr 2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Dezactivat cu succes. Apr 2 15:18:03 TecMint systemd[1]: Terminat dnf makecache.
Aici, putem vedea că comanda așteaptă la infinit după afișarea ultimelor zece linii:
Apoi, să deschidem un alt terminal și să adăugăm ceva text la numere-2.txt fişier:
$ echo „Vedeți jurnalele în timp real” >> /var/log/messages.
Acum, să trecem la primul terminal pentru a vedea textul nou adăugat:
$ tail -f /var/log/messagesApr 2 15:13:28 TecMint NetworkManager[741]: [1680462808.8441] politică: set-hostname: numele gazdă curent a fost schimbat în afara NetworkManager: „TecMint” 2 aprilie 15:13:28 TecMint systemd[1]: Se pornește serviciul de dispecer de script Network Manager... 2 aprilie 15:13:28 TecMint systemd[1]: A pornit Serviciul de dispecer de script Manager de rețea. Apr 2 15:13:37 TecMint arpwatch[11001]: redenumiți arp.dat -> arp.dat-: Operațiunea nu este permisă. Apr 2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Dezactivat cu succes. Apr 2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Dezactivat cu succes. Apr 2 15:18:03 TecMint systemd[1]: Se pornește dnf makecache... Apr 2 15:18:03 TecMint dnf[202235]: Memoria cache a metadatelor a fost reîmprospătată recent. Apr 2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Dezactivat cu succes. Apr 2 15:18:03 TecMint systemd[1]: Terminat dnf makecache.Vedeți jurnalele în timp real
Aici, putem vedea că comanda coadă arată textul nou adăugat.
Știți vreun alt exemplu cel mai bun al comenzii tail în Linux? Spune-ne opiniile tale în comentariile de mai jos.