bzip2, bunzip2 - ein blocksortierender Dateikompressor, Version 1.0.8
bzcat - Dateien dekomprimieren und in die Standardausgabe leiten
bzip2recover - Daten aus beschädigten Bzip2-Dateien wiederherstellen
bzip2 [
-cdfkqstvzVL123456789 ] [
Dateinamen … ]
bzip2 [
-h|--help ]
bunzip2 [
-fkvsVL ] [
Dateinamen … ]
bunzip2 [
-h|--help ]
bzcat [
-s ] [
Dateinamen … ]
bzcat [
-h|--help ]
bzip2recover Dateiname
bzip2 komprimiert Dateien mit dem blocksortierenden
Textkompressionsalgorithmus nach Burrows-Wheeler und der Huffman-Kodierung.
Die Kompression wird generell als besser angesehen als mit den konventionellen
LZ77/LZ78-basierenden Kompressionsalgorithmen und kommt der Performance der
PPM-Familie statistischer Kompressoren nahe.
Die Befehlszeilenoptionen sind denen von GNU
gzip absichtlich sehr
ähnlich, aber nicht völlig identisch.
bzip2 erwartet eine Liste von Dateinamen, die den Befehlszeilenoptionen
mitgegeben werden. Jede Datei wird durch deren komprimierte Version mit dem
Namen
Originalname.bz2 ersetzt. Dabei werden die ursprünglichen
Änderungszeitstempel, Zugriffsrechte und, wenn möglich, auch die
Eigentumsrechte des zugehörigen Originals übernommen, so dass
diese Eigenschaften bei der Dekomprimierung korrekt wiederhergestellt werden
können. Auf Dateisystemen, denen diese Möglichkeiten der
Erhaltung von originalen Dateinamen, Zugriffsrechten,
Eigentumsverhältnissen und Zeitstempeln fehlen oder die Länge
von Dateinamen eingeschränkt ist, wie beispielsweise MS-DOS, ist diese
Verarbeitung von Dateinamen harmlos.
bzip2 und
bunzip2 überschreiben in der Voreinstellung
existierende Dateien nicht. Wenn Sie dies ermöglichen wollen, verwenden
Sie den Schalter
-f.
Werden keine Dateinamen angegeben, dann liest
bzip2 aus der
Standardeingabe und leitet das Ergebnis der Komprimierung in die
Standardausgabe. In diesem Fall verweigert
bzip2 die komprimierte
Ausgabe in ein Terminal, da die Ausgabe unverständlich und daher
sinnlos wäre.
bunzip2 (oder
bzip2 -d) dekomprimiert alle angegebenen Dateien.
Werden Dateien erkannt, die nicht mit
bzip2 komprimiert sind, werden
diese ignoriert und eine Warnmeldung ausgegeben.
bzip2 versucht die
Namen für die dekomprimierten Dateien folgendermaßen abzuleiten:
Dateiname.bz2 wird zu Dateiname
Dateiname.bz wird zu Dateiname
Dateiname.tbz2 wird zu Dateiname.tar
Dateiname.tbz wird zu Dateiname.tar
anderername wird zu anderername.out
Falls die Datei nicht eine der verarbeitbaren Endungen
.bz2,
.bz,
.tbz2 oder
.tbz hat, reklamiert
bzip2, dass der Name der
Originaldatei nicht ermittelt werden kann, und verwendet den Originalnamen mit
der Endung
.out.
Wie bei der Kompression wird auch bei der Dekompression aus der Standardeingabe
gelesen und das Ergebnis in die Standardausgabe geleitet, wenn keine
Dateinamen angegeben werden.
bunzip2 dekomprimiert eine Datei korrekt, die aus zwei oder mehr
komprimierten Dateien verkettet ist. Das Ergebnis ist eine Verkettung der
entsprechenden unkomprimierten Dateien. Die Integritätsprüfung
verketteter komprimierter Dateien mit
-t wird dabei auch
unterstützt.
Sie können Dateien mit dem Schalter
-c auch in die Standardausgabe
komprimieren oder dekomprimieren. Auf diese Weise können mehrere
Dateien verarbeitet werden. Die Ergebnisse werden nacheinander in die
Standardausgabe geleitet. Die Kompression mehrerer Dateien auf diese Weise
erzeugt einen Datenstrom, der mehrere komprimierte Dateien enthält. Ein
solcher Datenstrom kann nur mit
bzip2 in Version 0.9.0 oder neuer
korrekt dekomprimiert werden. Ältere Versionen von
bzip2 brechen
den Vorgang nach der Dekomprimierung der ersten Datei des Datenstroms ab.
bzcat (oder
bzip2 -dc) dekomprimieren alle angegebenen Dateien in
die Standardausgabe.
bzip2 liest die Argumente nacheinander aus den Umgebungsvariablen
BZIP2 und
BZIP. Diese werden stets vor der Verarbeitung von
Befehlszeilenargumenten ausgewertet. Dadurch erhalten Sie eine bequeme
Möglichkeit, Standardargumente zu übergeben.
Die Kompression wird immer ausgeführt, selbst wenn die komprimierte Datei
etwas größer als das Original ist. Dateien, die kleiner als 100
Bytes sind, tendieren dazu, durch die Kompression größer zu
werden, da der Kompressionsalgorithmus eine konstante Datenmenge von etwa 50
Bytes selbst benötigt. Zufallsdaten (die in der Ausgabe der meisten
Dateikompressoren enthalten sind) werden mit 8,05 Bit pro Byte kodiert, was
einem Zuwachs von 0,5% entspricht.
Als Selbsttest zu Ihrem Schutz verwendet
bzip2
32-Bit-CRC-Prüfungen, um sicherzustellen, dass die Originaldatei und
deren dekomprimierte Version identisch sind. Dies schützt vor
Beschädigung der komprimierten Daten und auch gegen noch nicht
entdeckte Fehler in
bzip2 (was hoffentlich unwahrscheinlich ist). Die
Möglichkeit, dass die Beschädigung der Daten unentdeckt bleibt,
ist sehr gering, etwa einmal in vier Milliarden verarbeiteten Dateien. Zu
bedenken ist, dass die Prüfung bei der Dekompression ausgeführt
wird und daher nur festgestellt wird, dass ein Problem besteht. Bei der
Wiederherstellung der originalen unkomprimierten Daten hilft dies nicht. Sie
können mit
bzip2recover versuchen, die Daten aus den
beschädigten Dateien wiederherzustellen.
Rückgabewerte sind: 0 für ein normales Beenden, 1 für
umgebungsbedingte Probleme (Datei nicht gefunden, ungültige Argumente,
Ein-/Ausgabefehler usw.), 2 verweist auf eine beschädigte komprimierte
Datei, 3 auf einen internen Konsistenzfehler (beispielsweise ein Bug), der
bzip2 zum Absturz bringt.
- -c --stdout
- komprimiert oder dekomprimiert in die Standardausgabe.
- -d --decompress
- erzwingt die Dekompression. Bei bzip2,
bunzip2 und bzcat handelt es sich tatsächlich um
dasselbe Programm. Die Entscheidung über die vorzunehmenden
Aktionen geschieht auf der Basis des verwendeten Namens. Dieser Schalter
setzt diesen Mechanismus außer Kraft und erzwingt die Dekompression
mit bzip2.
- -z --compress
- erzwingt die Kompression unabhängig vom aufgerufenen
Befehlsnamen (als Ergänzung zu -d).
- -t --test
- überprüft die Integrität der
angegebenen Datei(en), aber dekomprimiert sie nicht. Es wird lediglich ein
Kompressionsversuch ausgeführt und das Ergebnis ausgegeben.
- -f --force
- erzwingt das Überschreiben der Ausgabedateien.
Normalerweise überschreibt bzip2 vorhandene Ausgabedateien
nicht. Außerdem überschreibt bzip2 mit dieser Option
harte Verknüpfungen zu Dateien, was normalerweise nicht geschehen
würde.
bzip2 verweigert normalerweise die Dekomprimierung von Dateien,
denen die korrekten »magischen« Dateikopf-Bytes fehlen.
Falls die Dekomprimierung mit -f erzwungen wird, werden solche
Dateien unverändert übergangen. Dies entspricht dem
Verhalten von GNU gzip.
- -k --keep
- behält (löscht keine) Eingabedateien
während der Komprimierung oder Dekomprimierung.
- -s --small
- verringert den Speicherbedarf für Kompression,
Dekompression und Tests. Dateien werden mit einem modifizierten
Algorithmus dekomprimiert und getestet, der lediglich 2,5 Bytes pro
Block-Byte erfordert. Das bedeutet, dass für die Dekomprimierung
einer Datei nie mehr als 2300 kB Speicher erforderlich sind,
wenngleich dies dann nur mit der Hälfte der normalen
Geschwindigkeit geschieht.
Während der Komprimierung wählt die Option -s eine
Blockgröße von 200 kB, was den Speicherverbrauch auf
etwa diese Größe begrenzt. Das geht allerdings zu Lasten des
Kompressionsverhältnisses. Kurz gesagt, wenn Ihr Rechner
über wenig Speicher verfügt (8 Megabyte oder weniger),
sollten Sie stets die Option -s verwenden. Siehe SPEICHERVERWALTUNG
unten.
- -q --quiet
- unterdrückt Warnmeldungen, sofern diese nicht von
grundlegender Bedeutung sind. Meldungen zu Ein-/Ausgabefehlern sowie
weiteren kritischen Ereignissen werden weiterhin angezeigt.
- -v --verbose
- aktiviert den ausführlichen Modus. Dabei werden die
Kompressionsraten für jede verarbeitete Datei angezeigt. Wird diese
Option mehrmals angegeben, erhöht sich damit die Menge der
ausgegebenen Informationen. Dies ist primär für
Diagnosezwecke gedacht.
- -h --help
- Hilfe ausgeben und beenden.
- -L --license -V --version
- zeigt die Softwareversion und die Lizenzbedingungen
an.
- -1 (oder --fast) bis -9 (oder --best)
- setzt bei der Komprimierung die Blockgröße
auf 100 kB, 200 kB … 900 kB. Dies ist bei der Dekomprimierung
wirkungslos. Siehe SPEICHERVERWALTUNG unten. Die Aliase --fast und
--best dienen nur der Kompatibilität zu GNU gzip.
Insbesondere --fast sorgt nicht wirklich für einen
Geschwindigkeitszuwachs, und --best wählt lediglich das
Standardverhalten.
- --
- fasst alle nachfolgenden Argumente als Dateinamen auf,
selbst dann, wenn sie mit einem Minuszeichen beginnen. Dadurch
können Sie beispielsweise »bzip2 -- -meinedatei«
verarbeiten lassen.
- --repetitive-fast --repetitive-best
- Diese Schalter sind in den Versionen ab 0.9.5
überflüssig. Sie ermöglichten in früheren
Versionen eine grobe Beeinflussung des Verhaltens des Sortieralgorithmus,
was gelegentlich durchaus sinnvoll war. Für den verbesserten
Algorithmus in den Versionen nach 0.9.5 sind diese Schalter irrelevant.
bzip2 komprimiert große Dateien blockweise. Die
Größe der Blöcke beeinflusst sowohl das erreichte
Kompressionsverhältnis als auch den Speicherbedarf für
Kompression und Dekompression. Die Schalter
-1 bis
-9 geben die
Blockgröße von 100000 bis 900000 Bytes an (Letzteres ist die
Voreinstellung). Bei der Dekompression wird die für die Kompression
verwendete Blockgröße aus dem Dateikopf der komprimierten Datei
ermittelt. Aus diesem Wert leitet
bunzip2 selbst den für die
Dekompression erforderlichen Speicherbedarf ab. Da die
Blockgrößen in den komprimierten Dateien selbst gespeichert
werden, sind die Schalter
-1 bis
-9 bei der Dekompression nicht
von Bedeutung und werden daher ignoriert.
Die Erfordernisse zur Kompression und Dekompression können
folgendermaßen abgeschätzt werden (in Bytes):
Kompression: 400 k + ( 8 x Blockgröße )
Dekompression: 100 k + ( 4 x Blockgröße ) oder
100 k + ( 2.5 x Blockgröße )
Größere Blöcke bringen nur geringfügig bessere
Ergebnisse. Die effektivste Kompression ergibt sich aus den ersten 200 bis 300
kB der Blockgröße, dies sollte beachtet werden, wenn
bzip2 auf weniger leistungsfähigen Rechnern verwendet wird.
Ebenfalls beachtet werden sollte, dass der Speicherbedarf für die
Dekompression schon durch die bei der Kompression gewählte
Blockgröße bestimmt wird.
Bei Dateien, die mit den voreingestellten 900 kB großen
Blöcken komprimiert sind, benötigt
bunzip2 etwa 3700 kB
für die Dekompression. Um die Dekompression auch auf Rechnern mit 4 MB
Speicher zu ermöglichen, steht eine Option für
bunzip2
zur Verfügung, die den Speicherbedarf auf 2300 kB nahezu halbiert, was
allerdings auch eine Halbierung der Dekompressionsgeschwindigkeit nach sich
zieht. Sie sollten den dafür zuständigen Schalter
-s
daher nur verwenden, wenn dies wirklich nötig ist.
Generell sollten Sie stets versuchen, die größtmöglichen
Blöcke zu verwenden, die der zur Verfügung stehende Speicher
zulässt. Dadurch wird das maximale Kompressionsverhältnis
erreicht. Die Kompressions- und Dekompressionsgeschwindigkeiten werden durch
die Blockgröße praktisch nicht beeinflusst.
Ein weiterer wichtiger Punkt betrifft Dateien, die in einen einzigen Block
passen – also wohl die meisten Dateien, wenn Sie eine große
Blockgröße wählen. Die Größe des
tatsächlichen Speichers ist proportional zur Dateigröße,
da die Datei kleiner als ein Block ist. Beispielsweise werden durch die
Kompression einer 20000 Byte großen Datei mit dem Schalter
-9
rund 7600 kB Speicher belegt, aber tatsächlich nur 400 k
+ 20000 * 8 = 560 kB davon genutzt. Auf ähnliche Weise belegt die
Dekomprimierung 3700 kB, nutzt aber nur 100 k + 20000 * 4 = 180 kB.
Die folgende Tabelle fasst den maximalen Speicherbedarf für die jeweilige
Blockgröße zusammen. Außerdem wird die komprimierte
Gesamtgröße der 14 Dateien des »Calgary Text Compression
Corpus« angezeigt, die sich auf 3141622 Bytes beläuft. Diese
Spalte vermittelt einen Eindruck, wie die Kompression mit der
Blockgröße variiert. Diese Zahlen verleiten allerdings dazu, den
Vorteil größerer Blöcke für größere
Dateien zu unterschätzen, da der Corpus durch kleinere Dateien
dominiert wird.
Kompres- Dekompres- Decompres- Corpus-
Schalter sion sion sion mit -s Größe
-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642
bzip2 komprimiert Dateien in Blöcken, wobei jeder Block
üblicherweise 900 kB groß ist. Die Blöcke werden
unabhängig voneinander verarbeitet. Falls ein Medien- oder
Übertragungsfehler dazu führt, dass eine aus mehreren
Blöcken bestehende
.bz2-Datei beschädigt wird, kann es
dennoch gelingen, die Daten der unbeschädigten Blöcke
wiederherzustellen.
Der komprimierten Darstellung jedes Blocks ist ein 48-Bit-Muster
überlagert, was die Erkennung der Blockgrenzen mit hinreichender
Sicherheit ermöglicht. Jeder Block enthält außerdem seine
eigene 32-Bit-CRC-Prüfsumme, so dass beschädigte Blöcke
von unbeschädigten Blöcken unterschieden werden können.
Mit
bzip2recover können Sie nach Blöcken in
.bz2-Dateien suchen und jeden Block in einer eigenen
.bz2-Datei
speichern. Dann können Sie mit
bzip2 die Integrität
dieser Dateien prüfen und sie dekomprimieren, sofern sie
unbeschädigt sind.
bzip2recover akzeptiert ein einzelnes Argument, den Namen der
beschädigten Datei, und schreibt eine Reihe von Dateien nach dem
Namensschema
rec00001file.bz2,
rec00002file.bz2 usw., welche die
dekomprimierten Blöcke enthalten. Die Namen der Ausgabedateien sind so
gestaltet, dass durch Verwendung von Platzhaltern bei der Weiterverarbeitung
– zum Beispiel »bzip2 -dc rec*file.bz2 >
reparierte_Daten« – die Dateien in der richtigen Reihenfolge
bearbeitet werden.
bzip2recover wird am häufigsten bei großen
.bz2-Dateien eingesetzt werden, da diese viele Blöcke enthalten.
Es ist sinnlos, es bei beschädigten Ein-Block-Dateien einzusetzen, da
ein einzelner beschädigter Block nicht wiederhergestellt werden kann.
Wenn Sie den potenziellen Datenverlust durch Medien- oder
Übertragungsfehler minimieren wollen, sollten Sie eine Verringerung der
Blockgröße in Erwägung ziehen.
In der Sortierphase der Kompression werden ähnliche Zeichenketten in der
Datei zusammengeführt. Aus diesem Grund werden Dateien, die sehr lange
Reihen sich mehrere Hundert Male wiederholender Symbole enthalten, wie
»aabaabaabaab …«, möglicherweise langsamer
komprimiert als normal. Die Versionen 0.9.5 und neuer arbeiten in dieser
Beziehung weitaus besser. Das Verhältnis zwischen der Kompressionsdauer
im ungünstigsten Fall und dem Durchschnitt bewegt sich im Bereich von
10:1. In früheren Versionen konnte das Verhältnis durchaus 100:1
betragen. Wenn gewünscht, können Sie mit der Option
-vvvv
den Fortschritt sehr detailreich anzeigen lassen.
Die Geschwindigkeit der Dekomprimierung wird durch dieses Phänomen nicht
beeinträchtigt.
bzip2 belegt üblicherweise einige Megabyte Speicher, in denen es
arbeitet, und lädt dann alles nach Bedarf nach dem Zufallsprinzip. Das
heißt, dass sowohl für die Komprimierung als auch die
Dekomprimierung von entscheidender Bedeutung ist, wie schnell Ihr Rechner den
Inhalt des Zwischenspeichers verwirft. Daher können kleine
Änderungen am Code zur Reduzierung der Verwerfungsrate
unverhältnismäßig große Verbesserungen der
Performance bewirken. Es ist vorstellbar, dass die Performance von
bzip2 auf Rechnern mit sehr großen Zwischenspeichern am besten
ist.
Die Meldungen zu Ein-/Ausgabe-Fehlern sind nicht so hilfreich, wie sie
idealerweise sein sollten.
bzip2 versucht, Ein-/Ausgabe-Fehler zu
erkennen und sauber zu beenden, aber die Details des Problems sind manchmal
eher irreführend.
Diese Handbuchseite bezieht sich auf die Version 1.0.8 von
bzip2. Die von
dieser Version erzeugten komprimierten Daten sind vollständig
abwärts- und aufwärtskompatibel zu den früher
veröffentlichten Versionen 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2
und neuer, allerdings mit der folgenden Ausnahme: Die Versionen 0.9.0 und
neuer können mehrere verkettete komprimierte Dateien korrekt
dekomprimieren. In der Version 0.1pl2 ist dies nicht möglich, das
Programm bricht nach der Dekomprimierung der ersten Datei das Datenstroms ab.
Die Versionen von
bzip2recover vor 1.0.2 verwendeten 32-Bit-Ganzzahlen
zum Darstellen der Bit-Positionen in komprimierten Dateien, daher konnte es
nicht mit Dateien umgehen, die größer ale 512 Megabytes sind.
Die Versionen 1.0.2 und neuer verwenden 64-Bit-Ganzzahlen auf jenen
Plattformen, die diese unterstützen (entsprechende GNU-Versionen und
Windows). Wenn Sie
bzip2recover ohne Argumente aufrufen, wird
angezeigt, ob Ihre Version mit einer solchen Einschränkung erstellt
wurde. In jedem Fall können Sie sich selbst eine
uneingeschränkte Version erstellen, wenn Sie das Programm neu
kompilieren und »MaybeUInt64« dabei auf eine vorzeichenlose
64-Bit-Ganzzahl setzen.
Julian Seward
https://sourceware.org/bzip2/
Die in
bzip2 umgesetzten Ideen gehen (mindestens) auf folgende
Mitwirkende zurück: Michael Burrows und David Wheeler (die
blocksortierende Umwandlung), David Wheeler (der Huffman-Encoder), Peter
Fenwick (das strukturierte Benennungsschema im ursprünglichen
bzip sowie zahlreiche Verbesserungen) sowie Alistair Moffat, Radford
Neal und Ian Witten (der arithmetische Encoder im ursprünglichen
bzip). Ich bin ihnen für ihre Hilfe, Unterstützung und
Beratung sehr zu Dank verpflichtet. Im Handbuch der Quelldistribution finden
Sie Hinweise zur Herkunft der Dokumentation. Christian von Roques regte mich
an, nach schnelleren Sortieralgorithmen zu suchen, die die Kompression
beschleunigen. Bela Lubkin ermunterte mich, die im ungünstigsten Fall
erreichbare Performance der Kompression zu verbessern. Donna Robinson hat die
Dokumentation auf das XML-Format migriert. Die
bz*-Skripte wurden aus
jenen von GNU
gzip abgeleitet. Viele Leute schickten Patches, halfen
bei Problemen mit der Portabilität, stellten Hardware leihweise zur
Verfügung, standen beratend zur Seite oder waren ganz allgemein
hilfreich.
Die deutsche Übersetzung dieser Handbuchseite wurde von Mario
Blättermann <
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer