9 praktische Beispiele für den Tail-Befehl in Linux

Als Linux-Benutzer arbeiten wir oft mit lang laufenden Hintergrund-Linux-Prozessen, die als Daemons oder Dienste bezeichnet werden. Einige der üblichen Beispiele für diese Dienste sind Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron und so weiter.

Oft müssen wir die Protokolle dieser Dienste überwachen, um Systemprobleme zu debuggen. Eine der Hauptherausforderungen besteht jedoch darin, dass diese Dienste viele Protokolle generieren und es oft umständlich ist, diese Protokolle durchzugehen. Hier können wir den tail-Befehl verwenden.

Der tail-Befehl ist ein Befehlszeilen-Dienstprogramm, ähnlich dem head-Befehl, das eine Datei liest und die letzten 10 Zeilen (Inhalt) einer oder mehrerer Dateien auf die Standardausgabe druckt.

In diesem praktischen Leitfaden werden wir den tail-Befehl kennenlernen. Am Ende dieses Leitfadens werden Linux-Benutzer der Befehlszeile in der Lage sein, den tail-Befehl effektiv zu verwenden.
Inhaltsverzeichnis

tail Befehl Syntax

Die Syntax des tail Befehls ist ähnlich zu anderen Linux Befehlen:

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

1. Die letzten 10 Zeilen einer Datei in Linux ausgeben

Standardmäßig gibt der tail Befehl die letzten 10 Zeilen der angegebenen Datei aus, wie gezeigt.

$ 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 sehen wir, dass der obige Befehl die letzten zehn Zeilen aus der /var/log/secure Datei anzeigt.

2. Die letzten N Zeilen einer Datei in Linux ausgeben

In dem letzten Beispiel gibt der Befehl die letzten 10 Zeilen der angegebenen Datei aus. Wir können jedoch die -n Option verwenden, um die Anzahl der auf dem Bildschirm auszugebenden Zeilen zu begrenzen, wie gezeigt.

$ 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 diesem Beispiel sehen wir, dass der Befehl jetzt nur noch die letzten drei Zeilen anstatt der zehn Zeilen anzeigt.

3. Die ersten N Zeilen einer Datei in Linux ignorieren

Hier können wir das Pluszeichen (+) mit der Option -n verwenden, um den Startpunkt aus der angegebenen Datei zu steuern.

Um dies zu verstehen, verwenden wir den Wert +5, um die Ausgabe ab der 5. Zeile zu starten:

$ 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. Zeige die letzten N Zeichen der Datei

Ähnlich wie bei den Zeilen können wir auch den Befehl verwenden, um die letzten N Zeichen der Datei mit der Option -c wie unten gezeigt anzuzeigen:

$ tail -c 7 /var/log/secure

(uid=0)

In diesem Beispiel können wir sehen, dass der Befehl die letzten sieben ASCII-Zeichen der angegebenen Datei anzeigt.

5. Entferne die ersten N Zeichen der Datei

Auf ähnliche Weise können wir das Pluszeichen (+) mit der Option -c verwenden, um die ersten N Zeichen zu überspringen. Lassen Sie uns also die erste Zeile der Datei mit dem folgenden Befehl überspringen:

$ 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 sehen wir, dass der Befehl alle Zeilen außer der ersten Zeile anzeigt.

6. Zeige den Dateinamen im Header an

Wir können den Befehl tail anweisen, den aktuellen Dateinamen als Anzeigeheader anzuzeigen, was beim Arbeiten mit mehreren Dateien nützlich ist.

Also, lassen Sie uns die Option -v verwenden, um den Anzeigeheader zu aktivieren:

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

In der obigen Ausgabe repräsentiert ==> /var/log/secure <== den Anzeigeheader.

7. Dateiname als Header in mehreren Dateien anzeigen

Wie bei jedem anderen Dateiverarbeitungsbefehl können wir auch mehrere Dateien mit dem Befehl tail verwenden. In solchen Fällen wird der Anzeigeheader verwendet, um die Dateiinhalte zu trennen.

$ 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 der obigen Ausgabe können wir den Anzeigeheader für jede Datei sehen.

8. Anzeigeheader in Datei deaktivieren

Im vorherigen Beispiel haben wir gesehen, dass der Befehl den Anzeigeheader aktiviert, während wir mit mehreren Dateien arbeiten. Wir können jedoch dieses Standardverhalten mit der Option -q unterdrücken.

$ 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 sehen wir, dass der Befehl jetzt die Dateiinhalte nacheinander ohne Anzeigeheader anzeigt.

9. Wie man eine Datei auf Änderungen überwacht

Bisher haben wir gesehen, dass der tail-Befehl beendet, sobald er die erforderliche Anzahl von Zeilen oder Zeichen verarbeitet hat. Manchmal möchten wir jedoch auch die neu generierten Protokolle anzeigen.

In solchen Fällen können wir die Option -f mit dem Befehl verwenden, um die Datei in Echtzeit auf Änderungen zu überwachen.

Um dies zu verstehen, führen wir zuerst den unten stehenden Befehl im ersten Terminal aus:

$ 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 können wir sehen, dass das Befehl unendlich wartet, nachdem er die letzten zehn Zeilen angezeigt hat.

Nächstens, öffnen wir ein weiteres Terminal und fügen etwas Text zur Datei numbers-2.txt hinzu:

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

Jetzt wechseln wir zum ersten Terminal, um den neu hinzugefügten Text anzusehen:

$ 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 können wir sehen, dass der tail-Befehl den neu hinzugefügten Text zeigt.

Kennen Sie ein weiteres gutes Beispiel für den tail-Befehl in Linux? Teilen Sie uns Ihre Ansichten unten in den Kommentaren mit.

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