tail (Unix)

aus Wikipedia, der freien Enzyklopädie

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 tails 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

Einzelnachweise

  1. a b tail-Spezifikation des POSIX-Standards. Abgerufen am 25. April 2019 (englisch).
  2. The Open Group Base Specifications Issue 7, 2018 edition, 12.2 Utility Syntax Guidelines. Abgerufen am 25. April 2019 (englisch).