Als Linux-gebruikers werken we vaak met langlopende achtergrond Linux-processen, die daemons of services worden genoemd. Enkele veelvoorkomende voorbeelden van de services zijn Beveiligde Shell (sshd), netwerkmanager (netwerkd), volumemanager (LVM), Kron, en de lijst gaat maar door.
Vaak hebben we dat nodig bewaak de logboeken van deze services om de systeemproblemen op te lossen. Een van de grootste uitdagingen is echter dat deze services veel logboeken genereren en het doorlopen van deze logboeken maakt het meestal omslachtig. Hier kunnen we de staart commando.
tail commando is een opdrachtregelprogramma, vergelijkbaar met het hoofd commando dat een bestand leest en de laatste 10 regels (inhoud) van een of meer bestanden afdrukt naar standaarduitvoer.
In deze praktische gids leren we over het staartcommando. Aan het einde van deze handleiding zullen gebruikers van de Linux-opdrachtregel de opdracht staart effectief kunnen gebruiken.
De syntaxis van de staart opdracht is vergelijkbaar met andere Linux-commando's:
$ staart [OPTIES] [BESTAND-1] [BESTAND-2]...
Standaard is de staart opdracht drukt de laatste af 10 regels van het gegeven bestand zoals weergegeven.
$staart /var/log/secure2 april 14:17:24 TecMint sshd[201178]: Losgekoppeld van gebruiker tecmint 192.168.0.162 poort 59774. 2 april 14:17:24 TecMint sshd[201165]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 14:29:12 TecMint sshd[201366]: Geaccepteerd wachtwoord voor tecmint van 192.168.0.162 poort 56378 ssh2. 2 april 14:29:12 TecMint systemd[201371]: pam_unix (systemd-user: session): sessie geopend voor gebruiker tecmint (uid=1002) door (uid=0) 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie geopend voor gebruiker tecmint (uid=1002) door (uid=0) 2 april 14:29:12 TecMint sshd[201382]: Ontvangen verbroken verbinding met 192.168.0.162-poort 56378:11: verbroken door gebruiker. 2 april 14:29:12 TecMint sshd[201382]: Losgekoppeld van gebruiker tecmint 192.168.0.162 poort 56378. 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 15:12:55 TecMint sshd[202049]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 53334 ssh2. 2 april 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0)
Hier kunnen we zien dat het bovenstaande commando de laatste tien regels van het /var/log/secure bestand.
In het laatste voorbeeld drukt de opdracht de laatste 10 regels van het opgegeven bestand af. We kunnen echter de -N
optie waarmee we het aantal regels kunnen beperken dat op het scherm moet worden afgedrukt, zoals weergegeven.
$ staart -n 3 /var/log/secure 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 15:12:55 TecMint sshd[202049]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 53334 ssh2. 2 april 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0)
In dit voorbeeld kunnen we zien dat de opdracht nu alleen de laatste drie regels weergeeft in plaats van de tien regels.
Hier kunnen we de plus gebruiken (+)
symbool met de -N
optie, waarmee we het startpunt vanuit het gegeven bestand kunnen bepalen.
Om dit te begrijpen, gebruiken we de +5
waarde om de uitvoer vanaf de 5e regel te starten:
$ staart -n +5 /var/log/secure2 april 14:17:24 TecMint sshd[201178]: Losgekoppeld van gebruiker tecmint 192.168.0.162 poort 59774. 2 april 14:17:24 TecMint sshd[201165]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 14:29:12 TecMint sshd[201366]: Geaccepteerd wachtwoord voor tecmint van 192.168.0.162 poort 56378 ssh2. 2 april 14:29:12 TecMint systemd[201371]: pam_unix (systemd-user: session): sessie geopend voor gebruiker tecmint (uid=1002) door (uid=0) 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie geopend voor gebruiker tecmint (uid=1002) door (uid=0) 2 april 14:29:12 TecMint sshd[201382]: Ontvangen verbroken verbinding met 192.168.0.162-poort 56378:11: verbroken door gebruiker. 2 april 14:29:12 TecMint sshd[201382]: Losgekoppeld van gebruiker tecmint 192.168.0.162 poort 56378. 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 15:12:55 TecMint sshd[202049]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 53334 ssh2. 2 april 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0)
Net als bij lijnen kunnen we ook de opdracht gebruiken om de laatste weer te geven N
karakters van het bestand met behulp van de -C
optie zoals hieronder weergegeven:
$ staart -c 7 /var/log/secure (uid=0)
In dit voorbeeld kunnen we zien dat de opdracht de laatste zeven laat zien ASCII karakters van het opgegeven bestand.
Op dezelfde manier kunnen we het plusteken gebruiken (+)
met de -C
optie om de eerste over te slaan N
karakter. Dus laten we de eerste regel van het bestand overslaan met behulp van de onderstaande opdracht:
$ staart -c +5 /var/log/secure2 april 03:02:59 TecMint sudo[162801]: root: TTY=pts/2; PWD=/root; GEBRUIKER=root; COMMAND=/bin/dnf installeer R. 2 april 03:02:59 TecMint sudo[162801]: pam_unix (sudo: session): sessie geopend voor gebruiker root (uid=0) door root (uid=0) 2 april 03:03:02 TecMint sudo[162801]: pam_unix (sudo: session): sessie gesloten voor gebruiker root. 2 april 03:11:17 TecMint groupadd[163602]: groep toegevoegd aan /etc/group: name=avahi, GID=70. 2 april 03:11:18 TecMint groupadd[163602]: groep toegevoegd aan /etc/gshadow: name=avahi. 2 april 03:11:18 TecMint groupadd[163602]: nieuwe groep: naam=avahi, GID=70. 2 april 03:11:19 TecMint useradd[163610]: nieuwe gebruiker: naam=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none. 2 april 03:13:41 TecMint groupadd[163704]: groep toegevoegd aan /etc/group: name=colord, GID=986. 2 april 03:13:41 TecMint groupadd[163704]: groep toegevoegd aan /etc/gshadow: name=colord.
Hier kunnen we zien dat de opdracht alle regels toont behalve de eerste regel.
We kunnen de staart opdracht om de huidige bestandsnaam weer te geven als een display-header, wat handig is bij het werken met meerdere bestanden.
Dus laten we de gebruiken -v
optie om de weergavekoptekst in te schakelen:
$ staart -n 3 -v /var/log/secure==>/var/log/secure <== 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 15:12:55 TecMint sshd[202049]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 53334 ssh2. 2 april 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0)
In de bovenstaande uitvoer, ==> /var/log/secure <==
vertegenwoordigt de displaykop.
Net als elke andere opdracht voor bestandsverwerking, kunnen we ook meerdere bestanden gebruiken met de staart commando. In dergelijke gevallen wordt de displayheader gebruikt om de inhoud van het bestand te scheiden.
$ tail -n 3 -v /var/log/secure /var/log/secure-20230402==> /var/log/secure <== 2 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 15:12:55 TecMint sshd[202049]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 53334 ssh2. 2 april 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0) ==> /var/log/secure-20230402 <== 31 maart 03:50:53 TecMint groupadd[156163]: nieuwe groep: name=docker, GID=987. 31 maart 04:46:11 TecMint sshd[159403]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 46480 ssh2. 31 maart 04:46:11 TecMint sshd[159403]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0)
In de bovenstaande uitvoer kunnen we de displayheader voor elk bestand zien.
In het vorige voorbeeld zagen we dat de opdracht de weergavekoptekst inschakelt tijdens het werken met meerdere bestanden. We kunnen dit standaardgedrag echter onderdrukken met behulp van de -Q
keuze.
$ tail -q -n 3 /var/log/secure /var/log/secure-202304022 april 14:29:12 TecMint sshd[201366]: pam_unix (sshd: session): sessie gesloten voor gebruiker tecmint. 2 april 15:12:55 TecMint sshd[202049]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 53334 ssh2. 2 april 15:12:55 TecMint sshd[202049]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0) 31 maart 03:50:53 TecMint groupadd[156163]: nieuwe groep: name=docker, GID=987. 31 maart 04:46:11 TecMint sshd[159403]: Geaccepteerd wachtwoord voor root van 192.168.0.162 poort 46480 ssh2. 31 maart 04:46:11 TecMint sshd[159403]: pam_unix (sshd: session): sessie geopend voor gebruiker root (uid=0) door (uid=0)
Hier kunnen we zien dat de opdracht nu de inhoud van het bestand één voor één weergeeft zonder weergavekoptekst.
Tot nu toe hebben we gezien dat het staartcommando wordt afgesloten zodra het vereiste aantal regels of tekens is verwerkt. Soms willen we echter ook de nieuw gegenereerde logboeken bekijken.
In dat geval kunnen we gebruik maken van de -F
optie met de opdracht, waarmee we het bestand in realtime kunnen controleren op wijzigingen.
Om dit te begrijpen, laten we eerst het onderstaande commando uitvoeren in de eerste terminal:
$ staart -f /var/log/berichten2 april 15:13:28 TecMint NetworkManager [741]: [1680462808.8441] beleid: set-hostname: huidige hostnaam is gewijzigd buiten NetworkManager: 'TecMint' 2 april 15:13:28 TecMint systemd[1]: Network Manager Script Dispatcher Service starten... 2 april 15:13:28 TecMint systemd[1]: Network Manager Script Dispatcher Service gestart. 2 april 15:13:37 TecMint arpwatch [11001]: hernoem arp.dat -> arp.dat-: bewerking niet toegestaan. 2 april 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: succesvol gedeactiveerd. 2 april 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: succesvol gedeactiveerd. 2 apr 15:18:03 TecMint systemd[1]: dnf makecache starten... 2 april 15:18:03 TecMint dnf [202235]: Metadata-cache onlangs vernieuwd. 2 april 15:18:03 TecMint systemd[1]: dnf-makecache.service: succesvol gedeactiveerd. 2 april 15:18:03 TecMint systemd[1]: voltooide dnf makecache.
Hier kunnen we zien dat de opdracht oneindig wacht na het weergeven van de laatste tien regels:
Laten we vervolgens een andere terminal openen en wat tekst toevoegen aan het getallen-2.txt bestand:
$ echo "Bekijk logboeken in realtime" >> /var/log/messages.
Laten we nu overschakelen naar de eerste terminal om de nieuw toegevoegde tekst te bekijken:
$ staart -f /var/log/berichten2 april 15:13:28 TecMint NetworkManager [741]: [1680462808.8441] beleid: set-hostname: huidige hostnaam is gewijzigd buiten NetworkManager: 'TecMint' 2 april 15:13:28 TecMint systemd[1]: Network Manager Script Dispatcher Service starten... 2 april 15:13:28 TecMint systemd[1]: Network Manager Script Dispatcher Service gestart. 2 april 15:13:37 TecMint arpwatch [11001]: hernoem arp.dat -> arp.dat-: bewerking niet toegestaan. 2 april 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: succesvol gedeactiveerd. 2 april 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: succesvol gedeactiveerd. 2 apr 15:18:03 TecMint systemd[1]: dnf makecache starten... 2 april 15:18:03 TecMint dnf [202235]: Metadata-cache onlangs vernieuwd. 2 april 15:18:03 TecMint systemd[1]: dnf-makecache.service: succesvol gedeactiveerd. 2 april 15:18:03 TecMint systemd[1]: voltooide dnf makecache.Bekijk logboeken in realtime
Hier kunnen we zien dat het staartcommando de nieuw toegevoegde tekst toont.
Kent u een ander goed voorbeeld van het staartcommando in Linux? Laat ons uw mening weten in de opmerkingen hieronder.