Über die Kommandozeile flink in komprimierten Dateien und Archiven zu suchen, spart viel Zeit. Die richtigen Tools dazu bringt praktisch jedes Linux-System von Haus aus mit.
Um Platz für aktuell nicht mehr benötigte Daten zu schaffen, bietet es sich an, einzelne Dateien zu komprimieren oder diese zu einem komprimierten Archiv zusammenzufassen (siehe Kasten „Komprimierte Datei versus Archiv“). Das Sichern erfolgt danach meist auf einem externen Medium, beispielsweise auf einer DVD, einer weiteren Festplatte oder einem Server im Rechenzentrum.
Komprimierte Datei versus Archiv
Die in diesem Artikel vorgestellten Programme fallen in einigen Fällen in eine der beiden Kategorien Datenkompression und Erzeugen von Archiven, andere kombinieren beides. Zur ersten Kategorie zählen die Tools XZ, Gzip und Bzip2; die zweiten Kategorie besetzt Tar. Zip, 7-zip und Rar verbinden beide Techniken.
Um die mit Gzip, Bzip2 und XZ komprimierten Tar-Archive zu verarbeiten, müssen die Komprimierungsprogramme als Helfer installiert sein. Tar ruft diese direkt auf. Generell erkennen Sie leicht an der Dateiendung, um welche Art von Archiv oder Kompression es sich handelt. Die Tabelle „Dateiendungen“ gibt Aufschluss über gängige Formate.
7-zip erweist sich als Spezialfall: Dateien dieses Typs haben üblicherweise die Endung .7z
. Die passenden Tools dazu heißen 7z
, 7za
und 7zr
. Der Unterschied liegt darin, welche Formate (zum Teil inklusive Gzip, Bzip2, XZ, LZMA, Rar oder Zip) das Programm beherrscht. Die Namen der Pakete unter Debian und Ubuntu sind p7zip (7zr), p7zip-full (7z, 7za) und p7zip-rar (Rar-Plugin für 7z).
Dateiendungen
Typ | Endung |
---|---|
Komprimierte Dateien | |
Gzip | .gz |
Bzip2 | .bz2 |
XZ | .xz |
Archive | |
Zip | .zip |
7zip | .7z |
Rar | .rar |
Tar | .tar |
Tar+Gzip | .tar.gz |
Tar+Bzip2 | .tar.bz2 |
Tar+XZ | .tar.xz |
Erst zu einem späteren Zeitpunkt taucht meist die spannende Frage auf, wie Sie etwas in diesen komprimierten Dateien und Archiven wiederfinden. Meist kommen einem nur noch Fragmente in den Sinn – ein Teil des Dateinamens, der ungefähre Zeitraum der letzten Bearbeitung oder ein Ausschnitt des Inhalts.
Um die Datei oder das Archiv einfach auszupacken, helfen die Kommandos aus der Tabelle „Archive entpacken“. Danach prüfen Sie, ob die gewünschten Inhalte vorliegen. Dieses Vorgehen erweist sich bei kleinen Datenmengen durchaus als praktikabel.
Bei größeren Datenmengen stößt es aber schnell an seine Grenzen, beispielsweise, wenn für die ausgepackten Daten nicht genügend Speicherplatz bereitsteht. Deshalb haben findige Entwickler einfachere und effizientere Wege zum Durchsuchen der Archive ersonnen.
Archive entpacken
Typ | Kommando |
---|---|
Komprimierte Dateien | |
Gzip | gunzip Datei.gz , unp Datei.gz |
Bzip2 | bunzip2 Datei.bz2 , unp Datei.bz2 |
XZ | unxz Datei.xz , unp Datei.xz |
Archive | |
Zip | unzip Archiv.zip , unp Archiv.zip |
7zip | 7z e Archiv.7z , unp Archiv.7z |
Rar | unrar e Archiv.rar , unp Archiv.rar |
Tar | tar -xf Archiv.tar , unp Archiv.tar |
Tar+Gzip | tar -xzf Archiv.tar.gz , unp Archiv.tar.gz |
Tar+Bzip2 | tar -xjf Archiv.tar.bz2 , unp Archiv.tar.bz2 |
Tar+XZ | tar -xJf Archiv.tar.xz , unp Archiv.tar.xz |
Ohne Auspacken
Im Fall einer komprimierten Datei entspricht der Dateiname in der Regel dem Namen der gepackten Datei. Ein Archiv dagegen fasst unter einem eigenen Dateinamen mehrere Dateien zusammen. Die einzelnen Programme bieten jedoch eine Option, über die Sie die Liste im Archiv ausgeben. Mit den Kommandos aus Tabelle „Inhalt auflisten“ durchsuchen Sie das Archiv nur nach Dateinamen und packen es nicht auf den Datenträger aus.
Inhalt auflisten
Typ | Kommando |
---|---|
Komprimierte Dateien | |
Gzip | gzip -l Datei.gz |
Bzip2 | keine Option |
XZ | xz -l Datei.xz |
Archive | |
Zip | unzip -l Archiv.zip |
7zip | 7z l Archiv.7z |
Rar | unrar l Archiv.rar |
Tar | tar -tf Archiv.tar |
Tar+Gzip | tar -tzf Archiv.tar.gz |
Tar+Bzip2 | tar -tjf Archiv.tar.bz2 |
Tar+XZ | tar -tJf Archiv.tar.xz |
Die Dateiliste des Archivs filtern Sie bei Bedarf mit einem Grep-Kommando, indem Sie den gewünschten Namen als Muster verwenden. Beide Kommandos verbinden Sie dazu über eine Pipe miteinander. Die ausgegebene Dateiliste beinhaltet in jeder Zeile nur einen Dateinamen. Daher gibt das Grep-Kommando nur die Zeilen zurück, auf die das Suchmuster des Dateinamens passt. Drei Varianten von Grep helfen dabei [1]:
grep -F
(alternativ:fgrep
odergrep --fixed-strings
): Mit diesem Aufruf extrahieren Sie ausschließlich exakte Vorkommen einer Zeichenkette im Datenstrom. Sonderzeichen ignoriert das Tool.grep -G
(alternativ:grep --basic-regexp
): Grep ohne Auswahl des Suchmuster-Typs nutzt eine einfachere Variante von regulären Ausdrücken und nimmt das Suchmuster dementsprechend nicht so wortwörtlich wie Fgrep. Es interpretiert verschiedene Sonderzeichen (Wildcards), beispielsweise*
als Ausdruck für beliebig viele beliebige Zeichen. Diese einfachen regulären Ausdrücke sind ähnlich (aber nicht identisch) zu den Wildcards, die Sie in der Shell zum Auswählen von Dateien nutzen.egrep
(alternativ:grep -E
odergrep --extended-regexp
): Die „extended regular expressions“, also erweiterte reguläre Ausdrücke, entsprechen in etwa den Suchmustern in anderen Kommandozeilenprogrammen, wie zum Beispiel in Sed und Awk, im Editor Vi und im Betrachter Less.
Grep früher und heute
In Debian-Releases bis zur Version 4.0 („Etch“) waren Fgrep und Egrep Verweise auf Grep. Diese reichten den Aufruf an Grep mit der entsprechenden Option und den Parametern weiter, grep -F
für fgrep
und grep -E
für egrep
. Das erfolgte über ein Shell-Skript:
$ cat /bin/fgrep #!/bin/sh exec grep -F ${1+"$@"}
Mittlerweile hat sich das geändert: Die Kommandos liegen bei den aktuelleren Debian-Versionen als eigenständige Binaries vor. Scientific Linux und Ubuntu handhaben das ähnlich wie Debian, der Red-Hat/Fedora-Ableger CentOS hingegen nicht. Listing 1 zeigt, dass unter CentOS 5.5 Fgrep und Egrep auf Grep linken – zu erkennen am l
in den Benutzerrechten und dem Verweis in der rechten Spalte.
Die beiden Kommandos Fgrep und Egrep sind zudem als veraltet gekennzeichnet (siehe dazu die Manpage der Kommandos) und nur aus historischen Gründen noch in dieser Form enthalten. Es steht daher zu erwarten, dass diese Kommandos in der Zukunft entfallen und es stattdessen Grep mit der entsprechenden Option aufzurufen gilt. Ein genauer Termin für diese doch recht gravierende und umstrittene Änderung steht jedoch noch nicht fest.
Listing 1
$ ls -l $(which egrep fgrep grep) lrwxrwxrwx 1 root root 4 22. Okt 2010 /bin/egrep -> grep* lrwxrwxrwx 1 root root 4 22. Okt 2010 /bin/fgrep -> grep* -rwxr-xr-x 1 root root 85060 26. Sep 2009 /bin/grep*
Für ein tar.gz
-Archiv liefert die kurze Befehlsfolge aus Listing 2 erste Treffer. Zuerst durchsucht Tar das angegebene Archiv und schickt das komplette Inhaltsverzeichnis auf die Standardausgabe in eine Pipe. Aus dieser erhält Fgrep die Eingabedaten und filtert diese nach dem angegebenen Muster – hier dem Dateinamen.
Listing 2
$ tar -tzf Archiv.tar.gz | fgrep --color Dateiname
Hinterlasse einen Kommentar