Egal ob Konfigurations-, Logdatei oder Adressbuch – viele Dinge lassen sich in einer Shell effizient mit einfachen Textdateien lösen. Dieser Artikel behandelt die Fülle an Linux Kommandozeilen-Tools, die Texte verbinden, sortieren, umleiten oder analysieren.
wc
Der Befehl wc (word count) ist ein einfacher Filter, um die Anzahl der Zeilen, Schriftzeichen (Bytes) oder Wörter in einer Datei zu ermitteln. Meistens benutzt man den Befehl, um die Zeilen einer Textdatei zu zählen, dazu benutzt man einfach wc -l:
$ wc -l kern.log 1026 kern.log
Wenn Sie keinen Dateinamen angeben, liest wc aus der Standardeingabe. Diese Funktion verwenden wir im folgenden nützlichen Ausdruck für das Zählen der Dateien in einem Verzeichnis:
$ ls | wc -l 138
Die Anzahl der Bytes in einer Datei ermitteln Sie mit wc -c:
$ wc -c kern.log 106932 kern.log
Die Verwendung von wc -c bei einer einzigen Datei ist zugegebenermaßen nicht besonders interessant – die gleiche Information finden Sie auch in der Ausgabe von ls -l. Wenn Sie aber wc mit dem find-Befehl kombinieren, erhalten Sie die Anzahl der Bytes von allen Dateien eines ganzen Verzeichnisbaums:
$ find /var/log -type f -exec wc -c {} \;
79680 /var/log/kern.log.6.gz
3781 /var/log/dpkg.log.4.gz
106932 /var/log/kern.log
…Zu diesem Beispiel kehren wir später wieder zurück, sehen wir uns aber zuerst noch einige weitere Shell-Tricks an.
head und tail
Ein anderes Paar von einfachen Textverarbeitungsfiltern bilden head und tail, die je nachdem die ersten 10 oder die letzten 10 Zeilen aus einer Eingabe extrahieren. Sie können auch eine größere oder kleinere Anzahl von Zeilen vorgeben. Auch diesen Befehl nutzt man meist in Kombination mit einem anderen Kommando, zum Beispiel um die zuletzt geänderten Dateien aufzulisten:
$ ls -t | head -1 kern.log
Und wenn Sie die letzten paar Zeilen dieser Datei sehen wollen:
$ tail -3 kern.log Nov 21 09:00:19 elk kernel: [11936.090452] [UFW BLOCK INPUT]: IN=eth0 OUT=… Nov 21 09:00:21 elk kernel: [11938.083655] [UFW BLOCK INPUT]: IN=eth0 OUT=… Nov 21 09:00:25 elk kernel: [11942.134431] [UFW BLOCK INPUT]: IN=eth0 OUT=…
Hier ein hübscher kleiner Trick, um durch die Kombination von head in tail eine bestimmte Zeile auszulesen:
$ head -13 /etc/passwd | tail -1 www-data:x:33:33:www-data:/var/www:/bin/sh
In diesem Fall haben wir die dreizehnte Zeile von /etc/passwd über die Pipe (|) als Eingabe von tail weitergeleitet. Eine weitere nützliche Funktion des tail-Befehls ist die Option -f, die wie gewohnt die letzten 10 Zeilen einer Datei angezeigt. Mit -f bleibt die Datei aber geöffnet, und tail zeigt alle neuen Zeilen an, die an das Ende der Datei entstehen. Dies ist besonders nützlich bei Log-Dateien, die Sie in Auge behalten möchten, zum Beispiel tail -f kern.log.



