bzip2(1) General Commands Manual bzip2(1) BEZEICHNUNG bzip2, bunzip2 - ein blocksortierender Dateikompressor, Version 1.0.8 bzcat - Dateien dekomprimieren und in die Standardausgabe leiten bzip2recover - Daten aus beschadigten Bzip2-Dateien wiederherstellen UBERSICHT bzip2 [ -cdfkqstvzVL123456789 ] [ Dateinamen ] bunzip2 [ -fkvsVL ] [ Dateinamen ] bzcat [ -s ] [ Dateinamen ] bzip2recover Dateiname BESCHREIBUNG 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 ahnlich, aber nicht vollig 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 ursprunglichen Anderungszeitstempel, Zugriffsrechte und, wenn moglich, auch die Eigentumsrechte des zugehorigen Originals ubernommen, so dass diese Eigenschaften bei der Dekomprimierung korrekt wiederhergestellt werden konnen. Auf Dateisystemen, denen diese Moglichkeiten der Erhaltung von originalen Dateinamen, Zugriffsrechten, Eigentumsverhaltnissen und Zeitstempeln fehlen oder die Lange von Dateinamen eingeschrankt ist, wie beispielsweise MS-DOS, ist diese Verarbeitung von Dateinamen harmlos. bzip2 und bunzip2 uberschreiben in der Voreinstellung existierende Dateien nicht. Wenn Sie dies ermoglichen 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 unverstandlich und daher sinnlos ware. 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 fur die dekomprimierten Dateien folgendermassen 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 Integritatsprufung verketteter komprimierter Dateien mit -t wird dabei auch unterstutzt. Sie konnen Dateien mit dem Schalter -c auch in die Standardausgabe komprimieren oder dekomprimieren. Auf diese Weise konnen 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 enthalt. Ein solcher Datenstrom kann nur mit bzip2 in Version 0.9.0 oder neuer korrekt dekomprimiert werden. Altere 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 Moglichkeit, Standardargumente zu ubergeben. Die Kompression wird immer ausgefuhrt, selbst wenn die komprimierte Datei etwas grosser als das Original ist. Dateien, die kleiner als 100 Bytes sind, tendieren dazu, durch die Kompression grosser zu werden, da der Kompressionsalgorithmus eine konstante Datenmenge von etwa 50 Bytes selbst benotigt. 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-Prufungen, um sicherzustellen, dass die Originaldatei und deren dekomprimierte Version identisch sind. Dies schutzt vor Beschadigung der komprimierten Daten und auch gegen noch nicht entdeckte Fehler in bzip2 (was hoffentlich unwahrscheinlich ist). Die Moglichkeit, dass die Beschadigung der Daten unentdeckt bleibt, ist sehr gering, etwa einmal in vier Milliarden verarbeiteten Dateien. Zu bedenken ist, dass die Prufung bei der Dekompression ausgefuhrt wird und daher nur festgestellt wird, dass ein Problem besteht. Bei der Wiederherstellung der originalen unkomprimierten Daten hilft dies nicht. Sie konnen mit bzip2recover versuchen, die Daten aus den beschadigten Dateien wiederherzustellen. Ruckgabewerte sind: 0 fur ein normales Beenden, 1 fur umgebungsbedingte Probleme (Datei nicht gefunden, ungultige Argumente, Ein-/Ausgabefehler usw.), 2 verweist auf eine beschadigte komprimierte Datei, 3 auf einen internen Konsistenzfehler (beispielsweise ein Bug), der bzip2 zum Absturz bringt. OPTIONEN -c --stdout komprimiert oder dekomprimiert in die Standardausgabe. -d --decompress erzwingt die Dekompression. Bei bzip2, bunzip2 und bzcat handelt es sich tatsachlich um dasselbe Programm. Die Entscheidung uber die vorzunehmenden Aktionen geschieht auf der Basis des verwendeten Namens. Dieser Schalter setzt diesen Mechanismus ausser Kraft und erzwingt die Dekompression mit bzip2. -z --compress erzwingt die Kompression unabhangig vom aufgerufenen Befehlsnamen (als Erganzung zu -d). -t --test uberpruft die Integritat der angegebenen Datei(en), aber dekomprimiert sie nicht. Es wird lediglich ein Kompressionsversuch ausgefuhrt und das Ergebnis ausgegeben. -f --force erzwingt das Uberschreiben der Ausgabedateien. Normalerweise uberschreibt bzip2 vorhandene Ausgabedateien nicht. Ausserdem uberschreibt bzip2 mit dieser Option harte Verknupfungen zu Dateien, was normalerweise nicht geschehen wurde. bzip2 verweigert normalerweise die Dekomprimierung von Dateien, denen die korrekten >>magischen<< Dateikopf-Bytes fehlen. Falls die Dekomprimierung mit -f erzwungen wird, werden solche Dateien unverandert ubergangen. Dies entspricht dem Verhalten von GNU gzip. -k --keep behalt (loscht keine) Eingabedateien wahrend der Komprimierung oder Dekomprimierung. -s --small verringert den Speicherbedarf fur 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 fur die Dekomprimierung einer Datei nie mehr als 2300 kB Speicher erforderlich sind, wenngleich dies dann nur mit der Halfte der normalen Geschwindigkeit geschieht. Wahrend der Komprimierung wahlt die Option -s eine Blockgrosse von 200 kB, was den Speicherverbrauch auf etwa diese Grosse begrenzt. Das geht allerdings zu Lasten des Kompressionsverhaltnisses. Kurz gesagt, wenn Ihr Rechner uber wenig Speicher verfugt (8 Megabyte oder weniger), sollten Sie stets die Option -s verwenden. Siehe SPEICHERVERWALTUNG unten. -q --quiet unterdruckt Warnmeldungen, sofern diese nicht von grundlegender Bedeutung sind. Meldungen zu Ein-/Ausgabefehlern sowie weiteren kritischen Ereignissen werden weiterhin angezeigt. -v --verbose aktiviert den ausfuhrlichen Modus. Dabei werden die Kompressionsraten fur jede verarbeitete Datei angezeigt. Wird diese Option mehrmals angegeben, erhoht sich damit die Menge der ausgegebenen Informationen. Dies ist primar fur Diagnosezwecke gedacht. -L --license -V --version zeigt die Softwareversion und die Lizenzbedingungen an. -1 (oder --fast) bis -9 (oder --best) setzt bei der Komprimierung die Blockgrosse auf 100 kB, 200 kB 900 kB. Dies ist bei der Dekomprimierung wirkungslos. Siehe SPEICHERVERWALTUNG unten. Die Aliase --fast und --best dienen nur der Kompatibilitat zu GNU gzip. Insbesondere --fast sorgt nicht wirklich fur einen Geschwindigkeitszuwachs, und --best wahlt lediglich das Standardverhalten. -- fasst alle nachfolgenden Argumente als Dateinamen auf, selbst dann, wenn sie mit einem Minuszeichen beginnen. Dadurch konnen Sie beispielsweise >>bzip2 -- -meinedatei<< verarbeiten lassen. --repetitive-fast --repetitive-best Diese Schalter sind in den Versionen ab 0.9.5 uberflussig. Sie ermoglichten in fruheren Versionen eine grobe Beeinflussung des Verhaltens des Sortieralgorithmus, was gelegentlich durchaus sinnvoll war. Fur den verbesserten Algorithmus in den Versionen nach 0.9.5 sind diese Schalter irrelevant. SPEICHERVERWALTUNG bzip2 komprimiert grosse Dateien blockweise. Die Grosse der Blocke beeinflusst sowohl das erreichte Kompressionsverhaltnis als auch den Speicherbedarf fur Kompression und Dekompression. Die Schalter -1 bis -9 geben die Blockgrosse von 100000 bis 900000 Bytes an (Letzteres ist die Voreinstellung). Bei der Dekompression wird die fur die Kompression verwendete Blockgrosse aus dem Dateikopf der komprimierten Datei ermittelt. Aus diesem Wert leitet bunzip2 selbst den fur die Dekompression erforderlichen Speicherbedarf ab. Da die Blockgrossen 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 konnen folgendermassen abgeschatzt werden (in Bytes): Kompression: 400k + ( 8 x Blockgrosse ) Dekompression: 100k + ( 4 x Blockgrosse ) oder 100k + ( 2.5 x Blockgrosse ) Grossere Blocke bringen nur geringfugig bessere Ergebnisse. Die effektivste Kompression ergibt sich aus den ersten 200 bis 300 kB der Blockgrosse, dies sollte beachtet werden, wenn bzip2 auf weniger leistungsfahigen Rechnern verwendet wird. Ebenfalls beachtet werden sollte, dass der Speicherbedarf fur die Dekompression schon durch die bei der Kompression gewahlte Blockgrosse bestimmt wird. Bei Dateien, die mit den voreingestellten 900 kB grossen Blocken komprimiert sind, benotigt bunzip2 etwa 3700 kB fur die Dekompression. Um die Dekompression auch auf Rechnern mit 4 MB Speicher zu ermoglichen, steht eine Option fur bunzip2 zur Verfugung, die den Speicherbedarf auf 2300 kB nahezu halbiert, was allerdings auch eine Halbierung der Dekompressionsgeschwindigkeit nach sich zieht. Sie sollten den dafur zustandigen Schalter -s daher nur verwenden, wenn dies wirklich notig ist. Generell sollten Sie stets versuchen, die grosstmoglichen Blocke zu verwenden, die der zur Verfugung stehende Speicher zulasst. Dadurch wird das maximale Kompressionsverhaltnis erreicht. Die Kompressions- und Dekompressionsgeschwindigkeiten werden durch die Blockgrosse praktisch nicht beeinflusst. Ein weiterer wichtiger Punkt betrifft Dateien, die in einen einzigen Block passen - also wohl die meisten Dateien, wenn Sie eine grosse Blockgrosse wahlen. Die Grosse des tatsachlichen Speichers ist proportional zur Dateigrosse, da die Datei kleiner als ein Block ist. Beispielsweise werden durch die Kompression einer 20000 Byte grossen Datei mit dem Schalter -9 rund 7600 kB Speicher belegt, aber tatsachlich nur 400 k + 20000 * 8 = 560 kB davon genutzt. Auf ahnliche Weise belegt die Dekomprimierung 3700 kB, nutzt aber nur 100 kB + 20000 * 4 = 180 kB. Die folgende Tabelle fasst den maximalen Speicherbedarf fur die jeweilige Blockgrosse zusammen. Ausserdem wird die komprimierte Gesamtgrosse der 14 Dateien des >>Calgary Text Compression Corpus<< angezeigt, die sich auf 3141622 Bytes belauft. Diese Spalte vermittelt einen Eindruck, wie die Kompression mit der Blockgrosse variiert. Diese Zahlen verleiten allerdings dazu, den Vorteil grosserer Blocke fur grossere Dateien zu unterschatzen, da der Corpus durch kleinere Dateien dominiert wird. Kompres- Dekompres- Decompres- Corpus- Schalter sion sion sion mit -s Grosse -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 DATEN AUS BESCHADIGTEN DATEIEN WIEDERHERSTELLEN bzip2 komprimiert Dateien in Blocken, wobei jeder Block ublicherweise 900 kB gross ist. Die Blocke werden unabhangig voneinander verarbeitet. Falls ein Medien- oder Ubertragungsfehler dazu fuhrt, dass eine aus mehreren Blocken bestehende .bz2-Datei beschadigt wird, kann es dennoch gelingen, die Daten der unbeschadigten Blocke wiederherzustellen. Der komprimierten Darstellung jedes Blocks ist ein 48-Bit-Muster uberlagert, was die Erkennung der Blockgrenzen mit hinreichender Sicherheit ermoglicht. Jeder Block enthalt ausserdem seine eigene 32-Bit-CRC-Prufsumme, so dass beschadigte Blocke von unbeschadigten Blocken unterschieden werden konnen. Mit bzip2recover konnen Sie nach Blocken in .bz2-Dateien suchen und jeden Block in einer eigenen .bz2-Datei speichern. Dann konnen Sie mit bzip2 die Integritat dieser Dateien prufen und sie dekomprimieren, sofern sie unbeschadigt sind. bzip2recover akzeptiert ein einzelnes Argument, den Namen der beschadigten Datei, und schreibt eine Reihe von Dateien nach dem Namensschema rec00001file.bz2, rec00002file.bz2 usw., welche die dekomprimierten Blocke 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 haufigsten bei grossen .bz2-Dateien eingesetzt werden, da diese viele Blocke enthalten. Es ist sinnlos, es bei beschadigten Ein-Block-Dateien einzusetzen, da ein einzelner beschadigter Block nicht wiederhergestellt werden kann. Wenn Sie den potenziellen Datenverlust durch Medien- oder Ubertragungsfehler minimieren wollen, sollten Sie eine Verringerung der Blockgrosse in Erwagung ziehen. HIWEISE ZUR PERFORMANCE In der Sortierphase der Kompression werden ahnliche Zeichenketten in der Datei zusammengefuhrt. Aus diesem Grund werden Dateien, die sehr lange Reihen sich mehrere Hundert Male wiederholender Symbole enthalten, wie >>aabaabaabaab <<, moglicherweise langsamer komprimiert als normal. Die Versionen 0.9.5 und neuer arbeiten in dieser Beziehung weitaus besser. Das Verhaltnis zwischen der Kompressionsdauer im ungunstigsten Fall und dem Durchschnitt bewegt sich im Bereich von 10:1. In fruheren Versionen konnte das Verhaltnis durchaus 100:1 betragen. Wenn gewunscht, konnen Sie mit der Option -vvvv den Fortschritt sehr detailreich anzeigen lassen. Die Geschwindigkeit der Dekomprimierung wird durch dieses Phanomen nicht beeintrachtigt. bzip2 belegt ublicherweise einige Megabyte Speicher, in denen es arbeitet, und ladt dann alles nach Bedarf nach dem Zufallsprinzip. Das heisst, dass sowohl fur die Komprimierung als auch die Dekomprimierung von entscheidender Bedeutung ist, wie schnell Ihr Rechner den Inhalt des Zwischenspeichers verwirft. Daher konnen kleine Anderungen am Code zur Reduzierung der Verwerfungsrate unverhaltnismassig grosse Verbesserungen der Performance bewirken. Es ist vorstellbar, dass die Performance von bzip2 auf Rechnern mit sehr grossen Zwischenspeichern am besten ist. WARNUNGEN 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 irrefuhrend. Diese Handbuchseite bezieht sich auf die Version 1.0.8 von bzip2. Die von dieser Version erzeugten komprimierten Daten sind vollstandig abwarts- und aufwartskompatibel zu den fruher veroffentlichten 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 konnen mehrere verkettete komprimierte Dateien korrekt dekomprimieren. In der Version 0.1pl2 ist dies nicht moglich, 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 grosser ale 512 Megabytes sind. Die Versionen 1.0.2 und neuer verwenden 64-Bit-Ganzzahlen auf jenen Plattformen, die diese unterstutzen (entsprechende GNU-Versionen und Windows). Wenn Sie bzip2recover ohne Argumente aufrufen, wird angezeigt, ob Ihre Version mit einer solchen Einschrankung erstellt wurde. In jedem Fall konnen Sie sich selbst eine uneingeschrankte Version erstellen, wenn Sie das Programm neu kompilieren und >>MaybeUInt64<< dabei auf eine vorzeichenlose 64-Bit-Ganzzahl setzen. AUTOR Julian Seward Die in bzip2 umgesetzten Ideen gehen (mindestens) auf folgende Mitwirkende zuruck: Michael Burrows und David Wheeler (die blocksortierende Umwandlung), David Wheeler (der Huffman-Encoder), Peter Fenwick (das strukturierte Benennungsschema im ursprunglichen bzip sowie zahlreiche Verbesserungen) sowie Alistair Moffat, Radford Neal und Ian Witten (der arithmetische Encoder im ursprunglichen bzip). Ich bin ihnen fur ihre Hilfe, Unterstutzung 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 ungunstigsten 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 Portabilitat, stellten Hardware leihweise zur Verfugung, standen beratend zur Seite oder waren ganz allgemein hilfreich. UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . bzip2(1)