bzip2 unter Ubuntu: Dateien komprimieren und entpacken

Einführung und Überblick

Das Kommandozeilenwerkzeug bzip2 zählt unter Linux zu den bewährtesten Dienstprogrammen, wenn ein besonders hohes Kompressionsverhältnis gefragt ist. In diesem Praxisleitfaden demonstrieren wir den professionellen Umgang mit den wichtigsten Parametern direkt in der Ubuntu-Shell. Sie erfahren unter anderem, wie sich Ausgangsdateien vor dem automatischen Löschen bewahren lassen, wie Integritätsprüfungen ablaufen und welcher Unterschied zwischen den verschiedenen Kompressionsstufen besteht. Ergänzend beleuchten wir die spezialisierten Hilfswerkzeuge bunzip2 sowie bzcat.

Paketprüfung, Basis-Kompression und Quellschutz (-k, -v)

Vor dem praktischen Einstieg empfiehlt sich eine kurze Prüfung, ob die Software im System hinterlegt ist, um sie bei Bedarf zügig via APT einzurichten.

Installation von bzip2 auf Ubuntu überprüfen

Zur Veranschaulichung des regulären Packverhaltens erstellen wir über echo zunächst ein simples Textdokument namens sample1.txt.

Erstellen der Testdatei sample1.txt

Technisch stützt sich bzip2 auf den Burrows-Wheeler-Algorithmus (Block-Sorting), der insbesondere bei redundanten Textmustern exzellente Einsparungen liefert. Im Standardbetrieb ersetzt das Programm die Ursprungsdatei nach erfolgreicher Verarbeitung durch das komprimierte Archiv mit der Endung .bz2. Aktiviert man das Flag -v, gibt die Shell informative Details zu Durchlauf und erzielter Einsparung aus.

⚙️ [Wichtige Optionen im Überblick]

-d : Dekomprimiert bestehende .bz2-Archive (funktional identisch mit bunzip2).
-k : Verhindert das automatische Löschen der Ausgangsdatei (--keep).
-v : Blendet ausführliche Status- und Prozentangaben zum Kompressionsgrad ein (--verbose).
-f : Überschreibt vorhandene Zieldateien ohne erneute Rückfrage (--force).
-t : Validiert die Bit-Integrität des Archivs, ohne es tatsächlich zu entpacken (--test).
-c : Leitet die komprimierten Daten auf die Standardausgabe (stdout) um.
-1 bis -9 : Definiert die Blockgröße (100k bis 900k) zur individuellen Balance zwischen Verarbeitungszeit und Dateigröße (Standardwert: -9).

bzip2 -v sample1.txt

Um das Erhalten der Originaldateien gezielt zu demonstrieren, erzeugen wir mit sample2.txt eine weitere Testbasis.

Testdatei sample2.txt anlegen

Mit dem Befehl bzip2 -vk sample2.txt initiieren wir den Archivierungsprozess mit aktivierter Detailausgabe und gleichzeitigem Schutz des Originals. Dank des Schalters -k verbleibt sample2.txt zusammen mit der neu erstellten Datei sample2.txt.bz2 vollständig auf dem Datenträger.

Kompression mit Quellschutz via -vk

Ein anschließender Aufruf von ls -l sample* verdeutlicht den Unterschied: Während vom ersten Durchlauf lediglich das Archiv sample1.txt.bz2 existiert, sind im zweiten Versuch sowohl Ursprungsdatei als auch Archiv parallel erhalten geblieben.

Dateiliste zur Gegenüberstellung des Quellschutzes

Dekompression und Archivvalidierung (-d, -t, bunzip2)

Mithilfe von bzip2 -tv sample1.txt.bz2 lässt sich der Archivinhalt präventiv auf Beschädigungen scannen. Das Flag -t führt einen Prüfsummentest ohne Schreibzugriffe auf das Dateisystem durch, während -v den Erfolg der Integritätsprüfung im Terminal quittiert.

Integritätsprüfung mit bzip2 -tv

Über das Kommando bzip2 -dv sample1.txt.bz2 stoßen wir die Rekonstruktion des Dokuments an. Da hierbei kein Erhaltungsflag gesetzt wurde, wird das Archiv .bz2 nach erfolgter Dekompression automatisch verworfen, sodass allein die wiederhergestellte Datei sample1.txt zurückbleibt.

Dekomprimieren mit bzip2 -dv

Für das Entpacken steht Administratoren zusätzlich der dedizierte Alias bunzip2 zur Verfügung. Durch Ausführung von bunzip2 -vk sample2.txt.bz2 stellen wir den Ursprungsinhalt wieder her und sichern das Archiv sample2.txt.bz2 durch den Parameter -k dauerhaft gegen vorzeitiges Löschen ab.

Archiv dekomprimieren via bunzip2 -vk

Eine Kontrollabfrage mittels ls -l sample* bestätigt, dass sowohl die extrahierten Nutzdaten als auch die entsprechenden Sicherungsarchive wie gewünscht im Verzeichnis liegen.

Dateistatus nach der Extraktion kontrollieren

Archivinhalte direkt sichten und Pipelines nutzen (-c, bzcat)

Für die Demonstration von Stream-Umleitungen und direkten Dateieinsichten via Standardausgabe legen wir die Beispieldatei sample3.txt an.

Beispieldatei sample3.txt erzeugen

Das Kommando bzip2 -c sample3.txt > sample3.txt.bz2 schickt das komprimierte Ergebnis an stdout, von wo aus es über den Redirektionsoperator (>) in ein Zielarchiv geschrieben wird. Diese Methodik belässt die Quelldatei unberührt, ohne dass dafür explizit die Option -k bemüht werden muss.

Kompression mit stdout-Redirektion

Soll der Textbestand eines Archivs schnell eingesehen werden, ohne hierfür Speicherplatz durch Extraktionsvorgänge zu binden, erweist sich bzcat als unverzichtbares Hilfsmittel. Die Anweisung bzcat sample3.txt.bz2 entspricht exakt der Funktionsweise von bzip2 -dc und streamt die Daten dekomprimiert auf die Standardausgabe – ideal für die schnelle Inspektion von Logs.

Archivinhalt ohne Entpacken anzeigen mit bzcat

Das Ausführen von ls -l sample3* veranschaulicht, dass sowohl das unberührte Dokument sample3.txt als auch das durch Stream-Umleitung erzeugte Archiv sample3.txt.bz2 fehlerfrei nebeneinander existieren.

Überprüfung der per Stream erstellten Dateien

Kompressionsstufen steuern (-1 bis -9) und Speicherbedarf

Um die Auswirkung der Blockgrößen auf Packdichte und Laufzeit greifbar zu machen, generieren wir mit seq 1 50000 > large_data.txt einen umfangreicheren Testdatenbestand.

Erzeugen umfangreicher Testdaten mit seq

Mit bzip2 -1 -vk -c large_data.txt > large_fast.bz2 wählen wir die Stufe -1, welche den Fokus primär auf maximale Ausführungsgeschwindigkeit legt. Hierbei wird ein kleinerer Verarbeitungsblock von 100k herangezogen, was den RAM-Bedarf minimiert und rasche Ergebnisse liefert.

Schnelle Kompression mit Stufe -1

Demgegenüber erzwingt bzip2 -9 -vk -c large_data.txt > large_best.bz2 das bestmögliche Kompressionsergebnis. Stufe -9 markiert das Standardverhalten des Werkzeugs und nutzt Blöcke von 900k Größe. Dies beansprucht zwar mehr Rechenleistung und Speicher, holt jedoch das Maximum an Platzersparnis aus den Rohdaten heraus.

Maximale Packungsdichte mit Stufe -9

Ein abschließender Größenvergleich via ls -lh large* stellt die Resultate gegenüber. Gegenüber der 283K großen Ausgangsdatei zeigen large_fast.bz2 (56K) und large_best.bz2 (67K) die Auswirkung der jeweiligen Algorithmus-Konfigurationen auf synthetische Zahlenmuster.

Größenvergleich der erzeugten Archive mit ls -lh

Damit sind die wesentlichen Einsatzszenarien von bzip2, bunzip2 und bzcat unter Ubuntu praxisnah abgedeckt. Durch die gezielte Kombination der passenden Optionen lässt sich der Speicherbedarf auf Linux-Systemen hochgradig kontrollieren und verwalten.