head und tail zeigen die ersten beziehungsweise letzten Zeilen einer Datei an. Beide Werkzeuge gehören zur Grundausstattung jeder Linux- und Unix-Shell und sind besonders nützlich, um große Logdateien oder lange Ausgaben gezielt zu untersuchen, ohne sie vollständig zu öffnen.
head: Die ersten Zeilen
Standardmäßig zeigt head die ersten zehn Zeilen einer Datei:
$ head config.ini
[server]
host=localhost
port=8080
log_level=info
Die Anzahl lässt sich mit -n festlegen, Bytes mit -c:
$ head -n 5 config.ini # die ersten 5 Zeilen
$ head -c 100 datei.bin # die ersten 100 Bytes
tail: Die letzten Zeilen
tail zeigt standardmäßig die letzten zehn Zeilen — ideal, um in Logs den neuesten Stand zu sehen:
$ tail /var/log/syslog
Mit -n wird die Anzahl angepasst:
$ tail -n 20 /var/log/syslog
Live-Verfolgung mit tail -f
Die wichtigste Option ist tail -f (follow): Der Befehl bleibt aktiv und zeigt neue Zeilen sofort an, sobald sie in die Datei geschrieben werden. Das ist das Standardwerkzeug, um Logdateien in Echtzeit zu beobachten:
$ tail -f /var/log/nginx/access.log
Die Beobachtung endet mit Strg + C. Vergleichbar arbeitet journalctl -f für systemd-Logs — siehe systemctl und journalctl.
head und tail in Pipelines
Beide Werkzeuge sind ideale Filter in Pipelines. Typische Kombinationen:
$ tail -n 100 app.log | grep ERROR # letzte 100 Zeilen filtern
$ ls -S | head -5 # die 5 größten Dateien
$ history | tail -20 # die letzten 20 Befehle
Zusammen mit grep, sort, uniq und cut sowie wc lassen sich so komplette Auswertungen in einer Zeile bauen.
Dateien aus der Mitte lesen
Durch die Kombination beider Befehle wird jede beliebige Textregion erreichbar:
$ head -n 50 datei.txt | tail -n 10 # Zeilen 41–50
$ sed -n "41,50p" datei.txt # dasselbe mit sed
Für die reine Textfilterung ist sed oft die bessere Wahl, für Dateisuche und Stapelverarbeitung find und xargs.
Verwandte Grundlagen: Bash-Befehle und curl und wget — Letztere kombinieren Downloads oft mit head oder tail, um große Antworten zu begrenzen.