tail (Unix)
tail
(/usr/bin/tail
), (engl. „Schwanz“, „Ende“) ist einer der vielen Textfilter in den POSIX-Standard einhaltenden UNIX- und diesen ähnlichen Betriebssystemen und dient zur Ausgabe der letzten Zeilen einer Datei. Sein Gegenstück ist head
, welches die ersten Zeilen einer Datei anzeigt.
Der Funktionsumfang und das Verhalten tail
s ist durch den POSIX-Standard festgelegt.[1]
Arbeitsweise
Das Verhalten und die Syntax von tail
gleichen denen vieler anderer Kommandozeilen-Programme, insbesondere wird in der Spezifikation auf den Standard IEEE Std 1003.1-2017 verwiesen.[1][2] Es erwartet entweder einen Dateinamen oder einen Eingabe-Datenstrom auf stdin
und liefert seine Ausgabe auf stdout
, Fehlermeldungen werden auf stderr
ausgegeben. Ausgaben können mit den herkömmlichen Mitteln (Redirection, Pipeline) umgeleitet werden.
tail [Optionen] [<file>]
Wie viel von einer Datei ausgegeben wird, kann entweder in Bytes (-c N
, wobei N die Anzahl Bytes ist) oder in Zeilen (-n N
, wobei N die Anzahl der Zeilen ist) angegeben werden. Vorsicht: da die Internationalisierungs-Variablen (LANG
, LC_ALL
, LC_CTYPE
etc.) die Funktion von tail
erheblich beeinflussen, ist die Anzahl der Zeichen nicht gleich der Anzahl der Bytes (etwa bei Unicode-Dateien). Durch Modifikatoren kann noch festgelegt werden, ob relativ vom Beginn der Datei oder vom Ende (der Default) gezählt wird:
tail -c +100 /path/to/input # gibt alles ab dem 100. Byte des Inputs aus tail -c -100 /path/to/input # beide Versionen geben die letzten 100 Byte des Inputs aus tail -c 100 /path/to/input tail -n +100 /path/to/input # gibt alles ab der 100. Zeile des Inputs aus tail -n -100 /path/to/input # beide Versionen geben die letzten 100 Zeilen des Inputs aus tail -n 100 /path/to/input
Als Default gibt tail
die letzten 10 Zeilen einer Datei aus.
Obsolete Syntax-Varianten
Die meisten Implementationen (z. B. AIX, HP-UX) verstehen darüber hinaus auch noch eine – mittlerweile nicht mehr zur Verwendung empfohlene – Syntax, die ohne die Option -n
auskommt:
tail -20 /path/to/input # die letzten 20 Zeilen des Inputs tail -50c /path/to/input # die letzten 50 Bytes des Inputs
Diese Syntax entspricht nicht dem POSIX-Standard und ist deshalb zu vermeiden. Es kann nicht vorausgesetzt werden, dass diese Syntax auf einem System oder einer zukünftigen Version desselben noch unterstützt wird.
Änderungsverfolgung
Mit dem Schalter -f
(follow) wird die Ausgabe so lange kontinuierlich aktualisiert, bis dem Programm das Signal SIGINT
(z. B. mit der Tastenkombination Strg + C) gesendet wird. Diese Funktion macht tail
als Live-Monitor für sich laufend ändernde Dateien (z. B. Logs) geeignet.
Das folgende Beispiel zeigt die letzten 15 Zeilen des Logs eines HACMP-Clusters (/usr/es/adm/cluster.log
) und ergänzt kontinuierlich neue Einträge:
tail -fn 15 /usr/es/adm/cluster.log
Nonstandard-Varianten
Bei der Änderungsverfolgung folgt tail
der geöffneten Datei mittels Filehandle, weshalb naive Logdatei-Rotation mittels Umbenennung und Neuanlage der Datei die Weiterverfolgung verhindert. Darauf nehmen manche Implementierungen Rücksicht durch die Einführung einer Zusatzoption (-F
), die die zu verfolgende Datei ausschließlich über den Dateinamen identifiziert.
Weblinks
tail
: copy the last part of a file – Open Group Base Specificationtail(1)
: display the last part of a file – OpenBSD General Commands Manualtail(1)
: Den letzten Teil von Dateien ausgeben – Debian GNU/Linux Ausführbare Programme oder Shell-Befehle Handbuchseite
Einzelnachweise
- tail-Spezifikation des POSIX-Standards. Abgerufen am 25. April 2019 (englisch).
- The Open Group Base Specifications Issue 7, 2018 edition, 12.2 Utility Syntax Guidelines. Abgerufen am 25. April 2019 (englisch).