Unix-Tools 2: head & tail
Wir fangen mit head
an. Es wird normalerweise mit head [datei 1] … [datei n]
aufgerufen. Sollte keine Datei angegeben sein, wird die Standardeingabe verwendet. Ich habe einige kleine Dateien angelegt, um die Benutzung zu verdeutlichen. head -n 1 datei1 datei2 datei3
gibt folgendes zurück:
==> datei1 <==
1
==> datei2 <==
a
==> datei3 <==
Das
-n 1
weist head
an, nur die erste Zeile jeder Datei auszugeben. -n -5
zeigt alles außer der letzten 5 Zeilen an. Nur das erste Zeichen kann mit -c 1
(character, dt. Zeichen) ausgeben werden. Wenn man zudem nicht angezeigt bekommen will aus welcher Datei der Inhalt stammt, kann man -q (quite, dt. still) verwenden. Das waren eigentlich auch schon alle interessanten Optionen, jetzt zu tail
.
tail
ist das Gegenstück zu head
. Es zeigt das Ende bestimmer Dateien an. Auch hier kann wieder -c
für Zeichen, -n
für Linien, -q
für reinen Output verwendet werden. (-n -2
zeigt im Fall tail
alles ab der zweiten Zeile an.) Eine wichtige Option, die hauptsächlich nur für tail
Sinn macht, ist -f
(follow, dt. folgen). Damit wird der Inhalt einer Datei jede fünfte Sekunde ausgegeben. Bekannt ist der Befehl tail -f /var/log/messages
unter Linux, um die allgemeine Log-Datei zu beobachten (während man z.B. einen iPod anschließt um zu erfahren welche Gerätedatei dem Gerät zugewiesen wird). Wem fünf Sekunden zu viele sind, kann das mit -s
(sleep intervall, dt. Schlafintervall) ändern. tail -n 5 -s 1 -f /var/log/messages
gibt also jede Sekunde die letzten 5 Zeilen der Datei /var/log/messages
auf dem Bildschirm aus:
Jun 15 08:00:51 tcr kernel: [ 38.703095] kjournald starting. Commit interval 5 seconds
Jun 15 08:00:51 tcr kernel: [ 38.703117] EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
Jun 15 08:00:51 tcr kernel: [ 38.704944] EXT3 FS on sdc2, internal journal
Jun 15 08:00:51 tcr kernel: [ 38.704955] EXT3-fs: mounted filesystem with ordered data mode.
Jun 15 08:00:57 tcr pulseaudio[1517]: ratelimit.c: 1 events suppressed
Sobald sich auf dem System etwas verändert und es in die Log-Datei geschrieben wird, wird es auch direkt auf dem Bildschirm angezeigt. Falls die Datei noch nicht existiert, man aber sofort den Inhalt haben möchte wenn sie erstellt wird, kann man -F verwenden (Unix/Linux unterscheidet zwischen Groß- und Kleinschreibung):
titan% tail -n 5 -F datei4
tail: cannot open `datei4' for reading: No such file or directory
[Auf einer anderen Konsole erstelle ich die Datei "datei4" mit dem Inhalt "TEST!"]
tail: `datei4' has appeared; following end of new file
TEST!
Auch noch zu erwähnen ist der –-pid
(Process ID, dt. Prozess-ID) Schalter, der den tail
-Prozess automatisch terminiert wenn der Prozess, der die ausgegebene Datei besitzt, terminiert. Wenn z.B. Firefox in die Log-Datei schreibt kann es interessant sein diese mit tail
zu verfolgen. Wenn nun aber Firefox beendet wird, wird es keine neuen Inhalte in der Datei geben; deswegen ist auch ein tail
unnotwendig und wird mit -F
automatisch beendet.
Bleibt nur noch viel Spaß beim Ausprobieren zu wünschen. 😉