Verpackungskünstler

gzip, bzip2 und tar

01.10.2005
Archivierungsprogramme gibt es wie Sand am Meer; die schnellsten Vertreter ihrer Art nutzen Sie auf der Kommandozeile: Mit kurzen Befehlen packen Sie Ihre Daten zusammen und wieder aus oder archivieren ganze Verzeichnishierarchien.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder Gnome regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Gründe zum Archivieren gibt es immer: Zusammengepackte und komprimierte Daten sparen Plattenplatz und Bandbreite beim Versand über das Internet. Unter Linux gibt es sowohl grafische Tools, wie zum Beispiel File Roller oder Ark (Abbildung 1), als auch Kommandozeilenprogramme, welche die verschiedenen Kompressions- und Archivtypen erzeugen und entpacken. Dieser Artikel stellt Shell-Tools vor und zeigt, wie Sie durch geschickte Kombination der Befehle zum Verpackungskünstler werden.

Abbildung 1: Ark erstellt (komprimierte) Archive Ihrer Daten und packt sie wieder aus – alles per Mausklick.

Gut verpackt mit "gzip"

Das Programm Gzip (GNU Zip) ist der "Standardpacker" unter Linux. Gzip komprimiert einfache Dateien; Archive ganzer Verzeichnisse legt das Tool allerdings nicht an. Der einfachste Aufruf lautet:

gzip datei

Gzip ersetzt die Originaldatei durch eine komprimierte Fassung mit der zusätzlichen Dateiendung .gz. Dateieigenschaften wie Rechte, Zugriffs- und Modifikationszeit bleiben beim Packen erhalten. Gefällt Ihnen die Dateiendung nicht, definieren Sie über -S (Suffix) eine eigene. So erzeugt der Aufruf

gzip -S .z bild.bmp

eine komprimierte Datei namens bild.bmp.z.

Die Größe der zurechtgestutzten Datei hängt unter anderem von der Verteilung gemeinsamer Zeichenketten in der Originaldatei ab. Das bedeutet, dass Gzip Dateien, in denen sich ähnliche Muster wiederholen, deutlich besser "zusammenschrumpft". Bereits komprimierte Dateien, etwa im MP3- oder JPEG-Format, verkleinert Gzip dagegen nicht besonders gut. Listing 1 zeigt die Unterschiede für eine Bitmap- und eine JPEG-Datei.

Weiterhin beeinflussen Sie die Größe über einen Kompressionsfaktor zwischen 1 und 9, wobei gzip -1 schneller komprimiert und gzip -9 langsamer, aber mit besserer Kompressionsrate arbeitet. Als Standard ist -6 definiert; um diese Vorgabe zu ändern, setzen Sie die Umgebungsvariable GZIP in der Datei ~/.bashrc, zum Beispiel

export GZIP="-9"

Listing 1

Komprimierung im Vergleich

$ ls -l
-rw-r--r--  1 huhn huhn 2313894 Sep  3 22:47 screenie.bmp
-rw-r--r--  1 huhn huhn  169862 Sep  5 12:41 screenie.jpg
$ gzip screenie*
$ ls -l
-rw-r--r--  1 huhn huhn    9547 Sep  3 22:47 screenie.bmp.gz
-rw-r--r--  1 huhn huhn  130524 Sep  5 12:41 screenie.jpg.gz

Eine mit Gzip komprimierte Datei entpacken Sie entweder mit Gunzip oder gzip -d. Liegt im Verzeichnis eine Datei mit gleichem Namen, fragt das Programm sicherheitshalber nach, ob Sie diese überschreiben wollen:

$ gunzip screenie.jpg.gz
gunzip: screenie.jpg already exists; do you wish to overwrite (y or n)?

Antworten Sie an dieser Stelle mit [N], bricht Gzip die Operation ab. Wenn Sie die Sicherheitsabfrage als störend empfinden, schalten Sie über die Option -f ab (englisch "force" = "erzwingen"). Der Parameter hat noch eine Nebenwirkung: Standardmäßig weigert Gzip sich, einen Symlink zu komprimieren. Lassen Sie Gzip zusammen mit dem Parameter -f auf solche Verweise los, komprimiert das Tool die Datei, auf die der symbolische Link zeigt, und gibt ihr den Namen des Symlinks (ergänzt um die Endung). Beim Entpacken landet anschließend allerdings kein Verweis, sondern eine Datei auf der Platte (Abbildung 2).

Abbildung 2: Aufgepasst beim Komprimieren von Symlinks: Der Parameter "-f" erzwingt dies, das Auspacken erzeugt allerdings keinen Verweis mehr.

Komprimierte Textdateien, wie zum Beispiel die HOWTOs unter /usr/share/doc/, müssen Sie nicht erst umständlich auspacken und dann mit einem Pager wie Less oder More anzeigen. Schneller geht es, wenn Sie Gzip mit dem Parameter -c (schreibt nach stdout) einsetzen und die Ausgabe über eine Pipe an einen Betrachter weiterleiten, z. B.:

gzip -dc /usr/share/doc/iptables/README.Debian.gz | less

Noch kürzer geht es mit zless Datei.gz: Hinter dem Befehl steckt ein kleines Skript, das im Wesentlichen das Gleiche leistet.

Neuer, schneller, besser: "bzip2"

Das Programm Bzip2 verwendet einen anderen Kompressionsalgorithmus und verkleinert daher die meisten Dateien deutlich besser. Listing 2 zeigt Gzip und Bzip2 im Vergleich. Weiterhin besitzt Bzip2 einen so genannten Recovery-Modus: Beim Komprimieren zerlegt das Tool die Dateien in einzelne Blöcke. Ist eine Datei beschädigt, ist es eventuell noch möglich, Daten aus den intakt gebliebenen Bereichen zu retten – dazu entpacken Sie mit Bzip2recover die unbeschädigten Teile.

Listing 2

"gzip" und "bzip2" im Vergleich

$ ls -l bild.bmp*
-rw-r--r--  1 huhn huhn 2313894 Sep  5 13:35 bild.bmp
-rw-r--r--  1 huhn huhn    2534 Sep  5 13:35 bild.bmp.bz2
-rw-r--r--  1 huhn huhn    9547 Sep  5 13:35 bild.bmp.gz

Abgesehen von einigen kleinen Unterschieden ähneln viele Bzip2-Optionen denen von Gzip. Auch hier geben Sie zum einfachen Komprimieren einer Datei nur deren Namen an:

bzip2 datei

Die komprimierte Datei trägt anschließend die Endung .bz2 und behält – genauso wie beim Packen mit Gzip – ihre ursprünglichen Dateieigenschaften. Anders als Gzip kennt Bzip2 eine Option, über die es eine Kopie des Originals anlegt. Geben Sie dafür einfach zusätzlich den Parameter -k (englisch "keep" = "behalten") an:

bzip2 -k datei

(Wer Gleiches mit Gzip erreichen will, gibt die komprimierte Datei auf die Standardausgabe aus und schreibt sie dann in eine neue Datei: gzip -c datei > datei.gz. Die komprimierte Fassung übernimmt auf diese Weise allerdings nicht die Dateieigenschaften.)

Wie bei Gzip bringen die Parameter -1 bis -9 (Standard) Bzip2 dazu, mehr oder weniger stark zu komprimieren. Um die Vorgabe zu ändern, setzen Sie die Umgebungsvariable GZIP. Fügen Sie beispielsweise in die Datei ~/.bashrc die Zeile

export BZIP2="-6"

ein. Zum Entpacken geben Sie entweder Bzip2 die Option -d mit auf den Weg oder verwenden den speziellen Entpackbefehl Bunzip2. Genau wie Gzip schützt das Programm vor dem Überschreiben vorhandener Dateien. Anders als bei Gzip überlässt das Tool Ihnen aber nicht die Entscheidung und fragt nach, sondern bricht einfach den Vorgang ab:

$ bunzip2 peggy.jpg.bz2
bunzip2: Output file peggy.jpg already exists.

Der Parameter -f schaltet dieses Verhalten ab.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Gut verpackt
    Archivierungsprogramme gibt es wie Sand am Meer; die schnellsten Vertreter ihrer Art nutzen Sie auf der Kommandozeile: Mit kurzen Befehlen packen Sie Ihre Daten zusammen und wieder aus oder archivieren ganze Verzeichnishierarchien.
  • Zu Befehl
    Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, wo es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
  • Verpackungskünstler
    Sparen Sie Platz: Mit einem Archivierungsprogramm fassen Sie mehrere Dateien zu einer einzigen zusammen, und mit einem Komprimierungs-Tool verkleinern Sie das Datenpaket. Wir zeigen, wie Sie zum Verpackungskünstler werden.
  • Suche in komprimierten Dateien und Archiven
    Ü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.
  • K-tools
    In dieser Rubrik stellen wir Monat für Monat Tools vor, die sich bei der Arbeit unter KDE als besonders nützlich erweisen, eine Aufgabe erfüllen, die sonst geflissentlich unbeachtet bleibt, oder einfach nur zu den netten Dingen im Leben gehören, die man – einmal entdeckt – nicht mehr missen möchte.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...