LPIC101/103.2 Textströme mit Filtern verarbeiten
Einleitung
Textströme und Textdateien mit Filtern verarbeiten
Begriffsklärung
Was ist ein Textstrom? Ein Textstrom ist eine Dateiübertragung in Textform.
Was ist der Unterschied zu einer Textdatei? Ein Textstrom liefert Daten an eine Textdatei.
Was ist ein Filter
Ein Filter ist ein Programm, welches die Ausgabe eines Befehls als Eingabe verwertet. Es wird in Linux mit einer sogenannten Pipe gekennzeichnet. So schaut eine Pipe in der Kommandozeile aus : |
. Eine Pipe signalisiert einen Textstrom.
Relevante Filter
Die folgenden Filter sind relevant. Sie werden sehr kompakt mit jeweils einem Beispiel dargestellt.
cat
Eines der Standardbefehle bei der Arbeit in dem Linux-Terminal. Von der Namensbedeutung her ist der Befehl ursprünglich dazu gedacht, Dateien vertikal zusammenzufügen (concatenate, verketten). In der Praxis wird er aber oft verwendet um den Inhalt einer Datei komplett auszugeben auf dem Terminal.
Beispiel : cat /var/log/syslog
Gibt die komplette Syslog Datei auf dem Terminal aus
bzcat, xzcat und zcat
Möchte man eine komprimierte Datei im Terminal ausgeben, kann man einen dieser drei Befehle verwenden. Der Befehl verhält sich ansonsten ähnlich wie cat. Dabei verwendet bzcat das Kompressionsprogrammm bzip2, xzcat das Programm xz (beide Verlinken lediglich auf das Programm). zcat ist eine eigenständiges Programm und wird in der Regel für die gleichen Programme wie gzip verwendet.
Zusatzinfo
bzip2 - Dieser Algorithmus ist leistungsfähiger als gzip und wird gerne für große Datenmengen verwendet.
Beispiel: bzcat gepackteDatei.bz
Leitet den Inhalt der Datei in die Standardausgabe.
head
Dieser Befehl zeigt die ersten (Standardmäßig 10) Zeilen einer Textdatei.
Beispiel: head /var/log/syslog
Zeigt die ersten zehn Zeilen der Systemlog Datei.
tail
Dieser Befehl zeigt die letzten (Standardmäßig 10) Zeilen einer Textdatei.
Beispiel: tail /var/log/syslog
Zeigt die letzten zehn Zeilen der Systemlog Datei.
less
Dieser Befehl zeigt eine Textdatei Seitenweise. Man kann – im Gegensatz zum veralteten Befehl "more" – vor- und zurücknavigieren.
Beispiel: less Textdatei.txt
Zeigt die Dateiinhalte Seitenweise.
nl
Dieser Befehl setzt vor die Zeilen einer Textdatei eine Nummer zur besseren Ablesbarkeit.
Beispiel: nl Textdatei.txt > nummerierte_Textdatei.txt
Nummeriert die Zeilen der Datei und gibt sie in einer neuen Datei aus. Die Anzeige der Änderungen kann anschließend mit cat erfolgen.
wc
Dieser Befehl zählt die Wörter einer Textdatei.
Beispiel: wc *
Zeigt die Wortzahl aller Dateien im aktuellen Pfad.
hexdump
Wandelt die Ausgabe einer Datei in Hexadezimal-, Oktal-, Dezimalzahlen oder ASCII Zeichen um. Es kann nahezu alles als Eingabe verwendet werden, auch Binärdateien. Die Voreinstellung ist Hexadezimal.
Beispiel: hexdump Textdatei.txt
Zeigt die Dateiinhalte im Hexadezimalformat.
od
Erledigt das gleiche wie hexdump. Einige Distributionen arbeiten mit hexdump, andere mit od und wieder andere mit beiden. Die Voreinstellung ist Oktal. Od hat verglichen mit hexdump etwas weniger Funktionen.
Beispiel: od Textdatei.txt
Zeigt die Dateiinhalte im Oktalformat.
sort
Sortiert die Zeilen von Text- und anderen Dateien.
Beispiel
sort -n textfile1
Sortiert die Textdatei in numerischer Reihenfolge (-n).
history | sort -n
Sortiert die History in numerischer Reihenfolge (-n).
history | sort
Sortiert die History in alphabetischer Reihenfolge (-n).
uniq
Zeigt nur die einzigartigen Zeilen einer Datei. Funktioniert nur nach sort
Beispiel :
sort textfile.txt | uniq
Sortiert die Datei und gibt nur einzigartige Zeilen aus.
split
Spaltet Dateien in mehrere. Die Angaben sind Standardmäßig Zeilenbasiert, können aber auch Dateigrößenorientiert sein (split -b). Standardangabe ist ein Split nach 1000 Zeilen.
Beispiel :
split -b 11m grosses-paket grosses-paket-split
Teilt die Quelldatei "grosses-paket" in mehrere 11MB große Teilpakete "grosses-paket-split". Die Ausgabe erzeugt mehrere Dateien, welche in folgender Logik an den Dateinamen angehängt werden "grosses-paket-splitaa","grosses-paket-splitab" usw..
cut,paste
Cut schneidet Spalten einer Textdatei aus. Es ist jedoch nicht mit dem Windows "Ausschneiden" zu verwechseln, da die Spalten in der Originaldatei bestehen bleiben. Zum erfolgreichen ausschneiden der Spalten benötigt man eine Angabe der Spalte (z. B. "-f2") und einen sogenannten Delimiter, welcher die Spalten voneinander trennt (z. B. "d:", also hier ein Doppelpunkt). Der Befehl Paste fügt zwei oder mehr Dateien zusammen. Im Gegensatz zu cat werden diese horizontal zusammengefügt.
Beispiel : In der Datei /etc/passwd stehen die Benutzernamen in der ersten Spalte. Diese Datei enthält jedoch auch weitere Informationen:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
Der folgende Befehl führt dazu, dass nur die Benutzernamen ausgegeben werden:
cut -d: -f1 /etc/passwd
root
daemon
bin
…
sed
Der sed Editor gehört nicht in dieses Kapitel und wird nur der Vollständigkeit halber erwähnt.
tr
Der Befehl tr steht für translate und ist am besten durch die Funktion "Suchen und Ersetzen" aus Excel zu vergleichen. Es werden bestimmte Zeichen oder Wörter einer Datei durch andere ersetzt.
Beispiel:
cat textfile1 | tr n x
Ersetzt alle Buchstaben "n" mit dem Buchstaben "x"
md5sum,sha256sum,sha512sum
Die drei genannten Befehle arbeiten alle nach derselben Syntax und haben den gleichen Zweck. Sie erstellen Prüfsummen für die jeweilige Datei, welche wiederum wichtig für Datenintegrität,-sicherheit und -authentizität sind. Es lassen sich mit den jeweiligen Befehlen auch die entsprechenden Hashwerte auslesen.
Beispiel:
sha512sum textfile.txt > SHA512SUMS
Erstellt einen Secure Hash Algorithm 2 (SHA) mit 64-Bit Schlüsselwörtern (512).
Kontrollfragen
Was ist ein Textstrom?
Was passiert bei folgender Befehlszeile : cat > textdatei.txt
Was passiert bei folgender Befehlszeile : cat < textdatei.txt | uniq
Wie kann man die Dateien in einem Verzeichnis nach Dateigröße sortieren?
Was passiert bei folgender Befehlszeile : dd if=/dev/sda bs=512 count=1|od -h --endian=big | nl