9 Praktijkvoorbeelden van het Tail Commando in Linux

Als Linux-gebruikers werken we vaak met langlopende achtergrondprocessen van Linux, die worden genoemd daemons of services. Enkele veelvoorkomende voorbeelden van services zijn Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron, en de lijst gaat verder.

Veel keer hebben we nodig om de logs van deze services te controleren om systeemproblemen op te lossen. Een van de belangrijkste uitdagingen is echter dat deze services veel logs genereren en het vaak lastig is om door deze logs te gaan, hier is waar we de tail-opdracht kunnen gebruiken.

De tail-opdracht is een opdrachtregelhulpprogramma, vergelijkbaar met de head-opdracht die een bestand leest en de laatste 10 regels (inhoud) van een of meer bestanden naar standaarduitvoer afdrukt.

In deze praktische gids zullen we meer leren over de tail-opdracht. Aan het einde van deze gids zullen Linux-gebruikers van de opdrachtregel de tail-opdracht effectief kunnen gebruiken.
Inhoudsopgave

Opdrachtregelsyntax voor tail

De syntax van het tail-commando is vergelijkbaar met andere Linux-commando’s:

$ tail [OPTIONS] [FILE-1] [FILE-2] ...

1. Laatste 10 regels van een bestand afdrukken in Linux

Standaard drukt het tail-commando de laatste 10 regels van het opgegeven bestand af zoals getoond.

$ 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)

Hier kunnen we zien dat het bovenstaande commando de laatste tien regels toont van het bestand /var/log/secure.

2. Laatste N regels van een bestand afdrukken in Linux

In het vorige voorbeeld drukt het commando de laatste 10 regels van het opgegeven bestand af. We kunnen echter de -n-optie gebruiken waarmee we het aantal regels dat op het scherm moet worden afgedrukt kunnen beperken zoals getoond.

$ 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)

In dit voorbeeld kunnen we zien dat het commando nu slechts de laatste drie regels weergeeft in plaats van de tien regels.

3. Negeer de eerste N regels van een bestand in Linux

Hier kunnen we het plus symbool (+) gebruiken met de -n optie, waarmee we het startpunt vanuit het opgegeven bestand kunnen beheersen.

Om dit te begrijpen, laten we de waarde +5 gebruiken om de uitvoer te starten vanaf de 5e regel:

$ 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. Toon de Laatste N Tekens van het Bestand

Vergelijkbaar met regels, kunnen we ook de opdracht gebruiken om de laatste N tekens van het bestand weer te geven met behulp van de -c optie zoals hieronder getoond:

$ tail -c 7 /var/log/secure

(uid=0)

In dit voorbeeld kunnen we zien dat de opdracht de laatste zeven ASCII tekens van het opgegeven bestand weergeeft.

5. Verwijder de Eerste N Tekens van het Bestand

Op dezelfde manier kunnen we het plus symbool (+) gebruiken met de -c optie om de eerste N tekens over te slaan. Laten we dus de eerste regel van het bestand overslaan met behulp van de onderstaande opdracht:

$ 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

Hier kunnen we zien dat de opdracht alle regels toont behalve de eerste regel.

6. Toon de Bestandsnaam in de Koptekst

We kunnen de tail opdracht instrueren om de huidige bestandsnaam weer te geven als een weergavekoptekst, wat handig is bij het werken met meerdere bestanden.

Dus, laten we de -v optie gebruiken om de weergavekoptekst in te schakelen:

$ 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)

7. Toon Bestandsnaam als Kop in Meerdere Bestanden

Net als bij elk ander bestandsverwerkingscommando kunnen we ook meerdere bestanden gebruiken met het tail-commando. In dergelijke gevallen wordt de weergavekop gebruikt om de bestandsinhoud te scheiden.

$ 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)

In de bovenstaande uitvoer kunnen we de weergavekop voor elk bestand zien.

8. Hoe De Weergavekop in Bestand Uitschakelen

In het vorige voorbeeld zagen we dat het commando de weergavekop inschakelt bij het werken met meerdere bestanden. We kunnen deze standaardgedrag echter onderdrukken met de -q-optie.

$ 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)

Hier kunnen we zien dat het commando nu de bestandsinhoud achter elkaar weergeeft zonder enige weergavekop.

9. Hoe Een Bestand Volgen voor Wijzigingen

Tot nu toe zagen we dat het tail-commando stopt zodra het het vereiste aantal regels of tekens heeft verwerkt. Soms willen we echter ook de nieuw gegenereerde logs bekijken.

In dergelijke gevallen kunnen we de -f-optie met het commando gebruiken, waarmee we het bestand kunnen controleren op wijzigingen in realtime.

Om dit te begrijpen, laten we eerst het onderstaande commando uitvoeren in de eerste terminal:

$ 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.

Hier kunnen we zien dat het commando oneindig wacht nadat de laatste tien regels zijn weergegeven:

Vervolgens openen we een andere terminal en voegen wat tekst toe aan het bestand numbers-2.txt:

$ echo "View Logs in Real-Time" >> /var/log/messages

Nu schakelen we over naar de eerste terminal om de nieuw toegevoegde tekst te bekijken:

$ 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

Hier kunnen we zien dat het tail-commando de nieuw toegevoegde tekst laat zien.

Ken je nog een ander goed voorbeeld van het tail-commando in Linux? Laat ons je mening weten in de reacties hieronder.

Source:
https://www.tecmint.com/tail-command-linux/