tail — Das Ende von Dateien anzeigen und Logs verfolgen
Praxis-Guide zu tail: die letzten Zeilen einer Datei anzeigen und Logdateien mit -f/-F in Echtzeit verfolgen, filtern und überwachen.
tail zeigt dir das Ende einer Datei – standardmäßig die letzten 10 Zeilen. Seine berühmteste Funktion ist der Follow-Modus -f: Damit verfolgst du eine Logdatei in Echtzeit und siehst neue Einträge, sobald sie geschrieben werden. Achte auf den Unterschied zwischen -f (folgt dem geöffneten Dateideskriptor) und -F (folgt dem Dateinamen und öffnet die Datei nach einer Rotation neu) – bei rotierenden Logs ist fast immer -F die richtige Wahl. Mit -n +N springst du an eine Startzeile, etwa um die Kopfzeile einer CSV zu überspringen. Dieser Guide führt dich durch Follow-Modus, Bereichsauswahl und die wichtigsten Pipeline-Muster.
Grundlagen
tail <file> — Die letzten 10 Zeilen einer Datei anzeigen (Standard).
tail error.logtail -n <count> <file> — Die letzten N Zeilen einer Datei anzeigen.
tail -n 50 access.logtail -<count> <file> — Kurzform für -n. Die letzten N Zeilen anzeigen.
tail -20 error.logtail -n +<line> <file> — Alle Zeilen ab Zeile N anzeigen (die ersten N-1 Zeilen überspringen).
tail -n +2 data.csvFollow-Modus (Echtzeit-Überwachung)
tail -f <file> — Einer Datei folgen. Neue Zeilen in Echtzeit ausgeben, sobald sie angehängt werden.
tail -f /var/log/syslogtail -f <file1> <file2> — Mehreren Dateien gleichzeitig folgen, mit Dateinamen-Kopfzeilen.
tail -f /var/log/nginx/access.log /var/log/nginx/error.logtail -F <file> — Folgen mit Wiederholung. Folgt weiter, auch wenn die Datei rotiert oder neu angelegt wird.
tail -F /var/log/app.logtail -f -n <count> <file> — Die letzten N Zeilen anzeigen und dann weiter folgen.
tail -f -n 50 /var/log/syslogtail -f -n 0 <file> — Einer Datei folgen und nur neue Zeilen ab jetzt anzeigen (ohne Verlauf).
tail -f -n 0 /var/log/app.logtail -f <file> --pid=<pid> — Einer Datei folgen und stoppen, sobald der angegebene Prozess endet.
tail -f output.log --pid=$!tail -f -s <seconds> <file> — Folgen mit eigenem Prüfintervall zwischen den Durchläufen (Standard: 1 Sekunde).
tail -f -s 0.1 /var/log/app.logFollow-Modus mit Filterung
tail -f <file> | grep '<pattern>' — Einer Datei folgen und nur Zeilen anzeigen, die einem Muster entsprechen.
tail -f /var/log/syslog | grep 'ERROR'tail -f <file> | grep --line-buffered '<pattern>' — Folgen mit grep und Zeilenpufferung für sofortige Ausgabe.
tail -f access.log | grep --line-buffered '500'tail -f <file> | grep -v '<pattern>' — Einer Datei folgen und Zeilen ausschließen, die einem Muster entsprechen.
tail -f access.log | grep -v 'healthcheck'tail -f <file> | grep --color '<pattern>' — Einer Datei folgen und passende Muster farbig hervorheben.
tail -f /var/log/app.log | grep --color -E 'ERROR|WARN|$'tail -f <file> | awk '/<pattern>/ {print}' — Folgen mit awk für komplexere Filterung und Feldauswahl.
tail -f access.log | awk '$9 >= 500 {print}'Byte-Modus
tail -c <bytes> <file> — Die letzten N Bytes einer Datei statt Zeilen anzeigen.
tail -c 200 data.bintail -c <size>K <file> — Die letzten N Kilobytes anzeigen. Unterstützt die Suffixe K, M, G.
tail -c 1M large-file.logtail -c +<offset> <file> — Alle Bytes ab Byte N anzeigen (die ersten N-1 Bytes überspringen).
tail -c +100 data.binMehrere Dateien
tail <file1> <file2> — Die letzten 10 Zeilen jeder Datei mit Dateinamen-Kopfzeilen anzeigen.
tail error.log access.logtail -n <count> <file1> <file2> — Die letzten N Zeilen mehrerer Dateien anzeigen.
tail -n 5 *.logtail -q <file1> <file2> — Stiller Modus. Dateinamen-Kopfzeilen bei mehreren Dateien unterdrücken.
tail -q -n 1 *.csvtail -v <file> — Ausführlicher Modus. Immer eine Dateinamen-Kopfzeile anzeigen, auch bei einer einzelnen Datei.
tail -v -n 5 data.txtPipelines
<command> | tail — Nur die letzten 10 Zeilen einer Befehlsausgabe anzeigen.
history | tail<command> | tail -n <count> — Nur die letzten N Zeilen einer Befehlsausgabe anzeigen.
git log --oneline | tail -n 5<command> | tail -n 1 — Nur die letzte Zeile der Ausgabe holen.
wc -l *.py | tail -n 1sort <file> | tail -n <count> — Die letzten N Einträge nach dem Sortieren anzeigen (z. B. die größten Werte).
du -sh */ | sort -h | tail -n 5Typische Muster
tail -n +2 <file> — Die Kopfzeile überspringen und alle restlichen Datenzeilen anzeigen.
tail -n +2 data.csvhead -n <end> <file> | tail -n <count> — Einen bestimmten Zeilenbereich aus einer Datei ausschneiden.
head -n 20 data.txt | tail -n 5tail -n +<start> <file> | head -n <count> — Alternative Bereichsauswahl: ab Zeile N beginnen und M Zeilen nehmen.
tail -n +10 data.txt | head -n 5tail -f /var/log/*.log — Alle Logdateien eines Verzeichnisses gleichzeitig überwachen.
tail -f /var/log/nginx/*.logtail -f <file> | tee <output_file> — Einer Datei folgen und die Ausgabe gleichzeitig in eine andere Datei speichern.
tail -f app.log | tee filtered.logtail -f <file> | while read line; do echo "$(date): $line"; done — Einer Datei folgen und jeder neuen Zeile einen Zeitstempel voranstellen.
tail -f app.log | while read line; do echo "$(date '+%H:%M:%S'): $line"; done Fazit
tail ist das Standardwerkzeug zum Beobachten von Logdateien und das Gegenstück zu head. Die wichtigste Entscheidung im Alltag: -f folgt der Datei über ihren Deskriptor und „verliert" sie, wenn ein Logrotate sie wegrotiert; -F dagegen folgt dem Pfad und öffnet die neue Datei automatisch – für produktive Logs ist -F daher meist die sichere Wahl. Beim Filtern in Echtzeit brauchst du oft grep --line-buffered, sonst hält die Pufferung in der Pipeline die Ausgabe zurück. Und denk daran, dass tail -f von sich aus nicht endet – beende es mit Strg-C oder binde es mit --pid an die Lebensdauer eines Prozesses.
Weiterführende Links
- Wikipedia: tail (Unix) – Überblick und Funktionsweise des Kommandos
- ubuntuusers-Wiki: tail – deutschsprachige Einführung mit Beispielen