Der Linux-Befehl tail zeigt Daten vom Ende einer Datei an. Es kann sogar Aktualisierungen anzeigen, die einer Datei in Echtzeit hinzugefügt wurden. Wir zeigen Ihnen, wie Sie es verwenden.
Inhaltsverzeichnis
Hat systemd den Schwanz getötet?
Der tail-Befehl zeigt Ihnen Daten vom Ende einer Datei an. Normalerweise werden neue Daten am Ende einer Datei hinzugefügt, daher bietet der Befehl tail eine schnelle und einfache Möglichkeit, die neuesten Ergänzungen zu einer Datei anzuzeigen. Es kann auch eine Datei überwachen und jeden neuen Texteintrag in dieser Datei anzeigen, wenn er auftritt. Dies macht es zu einem großartigen Tool zum Überwachen von Protokolldateien.
Viele moderne Linux-Distributionen haben den systemd-System- und Service-Manager übernommen. Dies ist der erste ausgeführte Prozess, er hat Prozess-ID 1, und es ist das übergeordnete Element aller anderen Prozesse. Diese Rolle war früher behandelt von den Älteren init-System.
Zusammen mit dieser Änderung kam ein neues Format für Systemprotokolldateien. Nicht mehr im Klartext erstellt, unter systemd werden sie im Binärformat aufgezeichnet. Zu diese Protokolldateien lesen, müssen Sie verwenden das Dienstprogramm journactl. Der tail-Befehl funktioniert mit Nur-Text-Formaten. Es liest keine Binärdateien. Bedeutet dies, dass der Befehl tail eine Lösung für die Suche nach einem Problem ist? Hat es noch etwas zu bieten?
Der tail-Befehl hat mehr zu bieten, als Aktualisierungen in Echtzeit anzuzeigen. Außerdem gibt es immer noch viele Protokolldateien, die nicht vom System generiert werden und immer noch als reine Textdateien erstellt werden. Beispielsweise haben von Anwendungen generierte Protokolldateien ihr Format nicht geändert.
Schwanz benutzen
Übergeben Sie den Namen einer Datei an tail und es werden Ihnen die letzten zehn Zeilen dieser Datei angezeigt. Die von uns verwendeten Beispieldateien enthalten Listen mit sortierten Wörtern. Jede Zeile ist nummeriert, daher sollte es leicht sein, den Beispielen zu folgen und zu sehen, welche Auswirkungen die verschiedenen Optionen haben.
tail word-list.txt
Um eine andere Anzahl von Zeilen anzuzeigen, verwenden Sie die Option -n (Anzahl der Zeilen):
tail -n 15 word-list.txt
Eigentlich kann man auf das „-n“ verzichten und einfach einen Bindestrich „-“ und die Zahl verwenden. Stellen Sie sicher, dass keine Leerzeichen dazwischen sind. Technisch, Dies ist eine veraltete Befehlsform, aber es ist noch in der man-Seite, und es funktioniert immer noch.
tail -12 word-list.txt
Tail mit mehreren Dateien verwenden
Sie können mit mehreren Dateien gleichzeitig arbeiten. Übergeben Sie einfach die Dateinamen in der Befehlszeile:
tail -n 4 list-1.txt list-2.txt list-3.txt
Für jede Datei wird eine kleine Kopfzeile angezeigt, damit Sie wissen, zu welcher Datei die Zeilen gehören.
Anzeigen von Zeilen am Anfang einer Datei
Der Modifikator + (count from the start) bewirkt, dass Endzeilen ab dem Anfang einer Datei angezeigt werden, beginnend bei einer bestimmten Zeilennummer. Wenn Ihre Datei sehr lang ist und Sie eine Zeile in der Nähe des Dateianfangs auswählen, werden viele Ausgaben an das Terminalfenster gesendet. Wenn dies der Fall ist, ist es sinnvoll, die Ausgabe von tail in less umzuleiten.
tail +440 list-1.txt
Sie können kontrolliert durch den Text blättern.
Da diese Datei zufällig 20.445 Zeilen enthält, entspricht dieser Befehl der Verwendung der Option „-6“:
tail +20440 list-1.txt
Verwenden von Bytes mit Schwanz
Sie können tail anweisen, Offsets in Bytes anstelle von Zeilen zu verwenden, indem Sie die Option -c (Bytes) verwenden. Dies kann nützlich sein, wenn Sie eine Textdatei haben, die in Datensätzen normaler Größe formatiert wurde. Beachten Sie, dass ein Zeilenumbruchzeichen als ein Byte zählt. Dieser Befehl zeigt die letzten 93 Bytes in der Datei an:
tail -c 93 list-2.txt
Sie können die Option -c (Bytes) mit dem Modifikator + (Zähler ab Dateianfang) kombinieren und einen Offset in Bytes ab Dateianfang angeben:
tail -c +351053 list-e.txt
Paspel in den Schwanz
Zuvor haben wir die Ausgabe von tail in less umgeleitet. Wir können auch die Ausgabe anderer Befehle an tail weiterleiten.
Um die fünf Dateien oder Ordner mit den ältesten Änderungszeiten zu identifizieren, verwenden Sie die Option -t (Sortieren nach Änderungszeit) mit ls und leiten Sie die Ausgabe an tail weiter.
ls -tl | tail -5
Das Hauptkommando listet Textzeilen vom Anfang einer Datei auf. Wir können dies mit tail kombinieren, um einen Abschnitt der Datei zu extrahieren. Hier verwenden wir den Befehl head, um die ersten 200 Zeilen aus einer Datei zu extrahieren. Dies wird in den Schwanz geleitet, der die letzten zehn Leitungen extrahiert. Dadurch erhalten wir die Zeilen 191 bis Zeile 200. Das sind die letzten zehn Zeilen der ersten 200 Zeilen:
head -n 200 list-1.txt | tail -10
Dieser Befehl listet die fünf speicherintensivsten Prozesse auf.
ps aux | sort -nk +4 | tail -5
Lass uns das aufschlüsseln.
Der ps-Befehl zeigt Informationen über laufende Prozesse an. Die verwendeten Optionen sind:
a: Listen Sie alle Prozesse auf, nicht nur für den aktuellen Benutzer.
u: Anzeigen einer benutzerorientierten Ausgabe.
x: Listet alle Prozesse auf, einschließlich derer, die nicht in einem TTY ausgeführt werden.
Der Sortierbefehl sortiert die Ausgabe von ps. Die Optionen, die wir mit sort verwenden, sind:
n: Numerisch sortieren.
k +4: Sortieren nach der vierten Spalte.
Der Befehl tail -5 zeigt die letzten fünf Prozesse der sortierten Ausgabe an. Dies sind die fünf speicherhungrigsten Prozesse.
Verwenden von tail zum Verfolgen von Dateien in Echtzeit
Das Verfolgen neuer Texteinträge, die in einer Datei – normalerweise einer Protokolldatei – ankommen, ist mit tail einfach. Übergeben Sie den Dateinamen in der Befehlszeile und verwenden Sie die Option -f (folgen).
tail -f geek-1.log
Wenn jeder neue Protokolleintrag zur Protokolldatei hinzugefügt wird, aktualisiert tail seine Anzeige im Terminalfenster.
Sie können die Ausgabe so verfeinern, dass sie nur Zeilen von besonderer Relevanz oder Interesse enthält. Hier verwenden wir grep to nur Zeilen anzeigen, die enthalten das Wort „Durchschnitt“:
tail -f geek-1.log | grep average
Um die Änderungen an zwei oder mehr Dateien zu verfolgen, übergeben Sie die Dateinamen in der Befehlszeile:
tail -f -n 5 geek-1.log geek-2.log
Jeder Eintrag ist mit einer Kopfzeile versehen, die anzeigt, aus welcher Datei der Text stammt.
Die Anzeige wird jedes Mal aktualisiert, wenn ein neuer Eintrag in einer verfolgten Datei eintrifft. Um den Aktualisierungszeitraum anzugeben, verwenden Sie die Option -s (Schlafperiode). Dadurch wird tail angewiesen, zwischen den Dateiprüfungen einige Sekunden zu warten, in diesem Beispiel fünf.
tail -f -s 5 geek-1.log
Zugegeben, anhand eines Screenshots kann man es nicht erkennen, aber die Aktualisierungen der Datei erfolgen alle zwei Sekunden. Die neuen Dateieinträge werden alle fünf Sekunden im Terminalfenster angezeigt.
Wenn Sie den Textergänzungen in mehr als einer Datei folgen, können Sie die Kopfzeilen unterdrücken, die angeben, aus welcher Protokolldatei der Text stammt. Verwenden Sie dazu die Option -q (leise):
tail -f -q geek-1.log geek-2.log
Die Ausgabe der Dateien wird in einer nahtlosen Textmischung angezeigt. Es gibt keinen Hinweis, aus welcher Protokolldatei jeder Eintrag stammt.
Schwanz hat immer noch Wert
Obwohl der Zugriff auf die System-Log-Dateien mittlerweile von journalctl bereitgestellt wird, hat tail noch einiges zu bieten. Dies gilt insbesondere, wenn es in Verbindung mit anderen Befehlen verwendet wird, indem man in den Schwanz hinein oder aus dem Schwanz herausleitet.
systemd mag die Landschaft verändert haben, aber es gibt immer noch einen Platz für traditionelle Dienstprogramme, die der Unix-Philosophie entsprechen, eine Sache gut zu machen.