bzip2(1) bzip2(1)
JMENO
bzip2, bunzip2 - komprimuje a dekomprimuje soubory, pouziva metodu
blokoveho trideni v1.0
bzcat - dekomprimuje soubory do standardniho vystupu (stdout)
bzip2recover - ziskava data z poskozenych bzip2 souboru
POUZITI
bzip2 [ -cdfkqstvzVL123456789 ] [ soubory ... ]
bunzip2 [ -fkvsVL ] [ soubory ... ]
bzcat [ -s ] [ soubory ... ]
bzip2recover soubor
POPIS
bzip2 komprimuje /zhusti ci zmensi/ soubory uzitim Burrow-Wheelerova
blokoveho tridiciho textoveho komprimacniho algoritmu a Huffmanova
kodovani. Komprese je vseobecne mnohem lepsi nez dosahuji obvykle kom-
primacni nastroje zalozene na LZ77/LZ78 algoritmech (napr. gzip) a
blizi se vykonu PPM rodiny statistickych kompresoru.
Volby prikazoveho radku jsou zamerne velmi podobne volbam nastroje GNU
gzip, ale nejsou zcela totozne. bzip2 ocekava prikaz doprovazeny sez-
namem jmen souboru na prikazovem radku. Kazdy soubor je nahrazen komp-
rimovanou verzi sebe sama se jmenem "puvodni_jmeno.bz2".
Kazdy komprimovany soubor ma stejne datum zmeny, pristupova prava a je-
li to mozne, take stejne vlastniky odpovidajici puvodnimu souboru,
takze tyto vlastnosti mohou byt spravne obnoveny pri dekomprimaci.
Zachazeni se jmenem souboru je mozno povazovat za hloupe na souborovych
systemech, kterym chybi mechanismus zabezpeceni puvodniho jmena
souboru, pristupovych prav, vlastnictvi nebo datumu ci maji zavazne
omezeni delky souboroveho jmena (napr. DOS).
bzip2 and bunzip2 standardne neprepisuji jiz existujici soubory.
Jestlize toto zadate, uzijte volbu -f.
Pokud neni urceno zadne jmeno, bzip2 komprimuje standardni vstup do
standardniho vystupu.
V tom pripade bzip2 odmitne zapsat komprimovany vystup na terminal, coz
se muze zdat zcela nepochopitelne a tudiz zbytecne. Ale ...
bunzip2 (nebo bzip2 -d) dekomprimuje vsechny oznacene soubory. Soubory,
ktere nebyly vytvoreny bzip2 budou rozeznany, vyrazeny a jejich jmena
obsazena ve varovnem hlaseni.
bzip2 se pokousi vyvodit jmeno dekomprimovaneho souboru z kompri-
movaneho, jak je uvedeno v nasledujicich prikladech.
soubor.bz2 vytvoren soubor
soubor.bz soubor
soubor.tbz2 soubor.tar
soubor.tbz soubor.tar
libeVamjmeno vytvoren libeVamjmeno.out
Jestlize souborove jmeno nekonci jednou z nasledujicich moznosti .bz2,
.bz, .tbz2 nebo .tbz, bzip2 si postezuje, ze nemuze vylustit jmeno
puvodniho souboru a pouzije puvodni jmeno se zakoncenim .out.
Stejne jako pri kompresi, chybejici jmeno zpusobi dekompresi ze
standardniho vstupu do standardniho vystupu.
bunzip2 spravne dekomprimuje soubor ktery je zretezenim dvou ci vice
komprimovanych souboru. Vysledkem je zretezeni odpovidajicich nekompri-
movanych souboru. Testovani celistvosti (-t) zretezenych komprimovanych
souboru je take podporovano.
Muzete take komprimovat a dekomprimovat soubory do standardniho vystupu
volbou -c. Hromadne soubory mohou byt komprimovany a dekomprimovany
take tak. Vysledne vystupy jsou postupne naskladany do standardniho
vystupu (stdout). Komprese hromadnych souboru timto zpusobem vytvari
proud obsahujici hromadne komprimovane soubory. Takovy proud muze byt
spravne dekomprimovan pouze bzip2 version 0.9.0 nebo vyssi. Nizsi
verze bzip2 se zastavi po dekomprimovani prvniho souboru v proudu.
bzcat (or bzip2 -dc) dekomprimuje vsechny uvedene soubory do stan-
dardniho vystupu.
bzip2 precte argumenty z promennych prostredi BZIP2 and BZIP, v tomto
poradi, a zpracuje je jeste pred nactenim argumentu z prikazove radky.
Timto zpusobem mohou byt ziskany obecne argumenty.
Komprese je vzdy provedena, dokonce i tehdy, je-li ziskany komprimovany
soubor nepatrne vetsi nez puvodni. U souboru mensich nez zhruba sto
bajtu je sklon ke zvetseni, nebot komprimacni mechanismus ma stalou
rezii kolem 50 bajtu. Nahodna data (uvazovan vystup vetsiny souborovych
kompresoru) jsou kodovana v 8.05 bitech na bajt pri rozpeti kolem 0.5%.
Jako sebekontrolni mechanismus bzip2 uziva 32-bit CRC k overeni iden-
tity dekomprimovane verze s originalem. To chrani proti deformaci kom-
primovanych dat a proti nerozeznanych chybam v bzip2 (doufejme, ze
velmi nepravdepodobnych). Moznost nerozpoznaneho poskozeni dat je nepa-
trna, v pomeru 1 ku ctyrem bilionum na kazdy zpracovany soubor.
Uvedomme si vsak, ze kontrola pri dekompresi muze pouze oznamit, ze je
neco spatne. Nemuze pomoci ziskat puvodni nekomprimovana data. Pokud se
chcete pokusit ziskat z poskozenych souboru data, pouzijte program
bzip2recover.
Navratove hodnoty: 0 spravny konec, 1 problemy prostredi (soubor nebyl
nalezen, spatne volby, I/O chyby), 2 oznacuje poruseni komprimovaneho
souboru, 3 vnitrni logickou chybu (eg, bug), jenz zpusobuje bzip2
nouzi.
VOLBY
-c --stdout
Komprimuje nebo dekomprimuje do standardniho vystupu
-d --decompress
Vyvola dekompresi. bzip2, bunzip2 and bzcat jsou ve skutecnosti
stejne programy a rozhodnuti jake cinnosti budou provedeny
zavisi na uzitem jmenu. Avsak volba prevysuje na timto mechanis-
mem a vyvola bzip2 pro dekompresi.
-z --compress
Protiklad k -d. Zpusobi kompresi bez ohledu na volane jmeno.
-t --test
Kontroluje celistvost uvedeneho souboru, ale nekomprimuje jej.
Ve skutecnosti provadi zkusebni dekompresi a zahodi vysledek.
-f --force
Prepise vystupni soubory. Normalne bzip2 neprepisuje existujici
vystupni soubory. Take bzip2 prerusi pevne odkazy k souborum,
coz by jinak neprovedl.
-k --keep
Zachova (nemaze) vstupni soubory behem komprese nebo dekomprese.
-s --small
Omezi velikost pouzite pameti pro kompresi, dekompresi i
testovani. Pri dekompresi a testovani je uzivan upraveny algo-
ritmus, jenz vyzaduje pouze 2.5 bajtu pro blok. To znamena, ze
jakykoliv soubor muze byt dekomprimovan pouze s 2300kB dostupne
pameti, avsak polovicni rychlosti.
Behem komprese, znak -s vybere velikost bloku 200kB, cimz
prislusne omezi velikost uzite pameti za cenu nizsiho kom-
presniho pomeru. Tedy, ma-li vas pocitac 8MB ci mene operacni
pameti uzijte volbu -s. Ctete RIZENI PAMETI dale.
-q --quiet
Potlaci nepodstatna varovani. Zpravy tykajici se I/O chyb a
jinych kritickych udalosti nebudou potlaceny.
-v --verbose
Upovidana volba -- ukazuje pro kazdy zpracovany soubor kompresni
pomer. Dale volba -v zvysuje vymluvnost, chrli mnozstvi infor-
maci, ktere jsou zajimave zejmena pro diagnosticke ucely.
-L --license -V --version
Zobrazi verzi, licencni podminky.
-1 to -9
Nastavi velikost bloku na 100kB, 200kB .. 900kB pro komprimaci.
Nema zadny vliv na dekomprimaci. Cti RIZENI PAMETI dale.
-- Povazuje vsechny nasledujici argumenty za souborova jmena, i
pokud zacinaji pomlckou. Takze muzete zachazet take se soubory s
pomlckou napriklad bzip2 -- -meskvelevyspekulovanejmenosouboru.
--repetitive-fast --repetitive-best
Tato volba je zbytecna ve verzi 0.9.5 a vyssich. Poskytovala
urcite surove ovladani chovani tridiciho algoritmu v predchozich
verzich a byla v leccem uzitecna. Verze 0.9.5 a vyssi maji
zdokonaleny algoritmus, ktery cini tuto volbu bezvyznamnou.
RIZENI PAMETI
bzip2 komprimuje velke soubory v blocich. Velikost bloku ma vliv jednak
na dosazeny kompresni pomer a take na mnozstvi potrebne pameti pro kom-
presi a dekompresi. Volby -1 az -9 urcuji velikost bloku od 100kB do
900KB (standard). Pri dekompresi je velikost bloku, uzita pro kompresi,
nactena z hlavicky zkomprimovaneho souboru a bunzip2 jiz sam vyhradi
dostatek pameti pro dekompresi. Protoze velikost bloku je ulozena ve
zkomprimovanem souboru, volby -1 az -9 jsou zbytecne a proto pri dekom-
presi zustanou nepovsimnuty.
Kompresni a dekompresni pametove pozadavky v bajtech mohou byt odhad-
nuty takto:
Komprese: 400k + (8 x velikost bloku)
Dekomprese: 100k + (4 x velikost bloku) nebo
100k + (2.5 x velikost bloku)
Vetsi bloky neprinaseji primereny narust komprese, nebot vetsina komp-
rese je vytvorena v prvnich dvou ci trech stech tisicich bajtu bloku
(coz tesi mysl uzivatele malych stroju). Je take dulezite si uvedomit,
ze dekompresni pametove pozadavky jsou nastaveny v dobe komprese
vyberem velikosti bloku.
Pro soubor komprimovany s prednastavenou velikosti bloku 900kB bunzip2
vyzaduje pri dekompresi 3700kB pameti. Pro umozneni dekomprimovani
libovolneho souboru na pocitaci s pouze 4MB operacni pameti ma bunzip2
volbu pro dekompresi uzivajici priblizne polovicni mnozstvi pameti,
kolem 2300kB. Rychlost je take snizena na polovinu, proto byste tuto
moznost meli uzit pouze, je-li to opravdu nutne. Odpovidajici volba je
-s.
Obecne receno, zkuste a uzijte nejvetsi moznou velikost bloku v zajmu
dosazeni maximalni komprese. Rychlost komprese a dekomprese neni
velikosti bloku ovlivnena.
Dale se podivame na uplatneni bzip2 na soubory, ktere se vejdou do jed-
noho bloku. To je vetsina souboru, se kterymi se setkate, pokud
pouzijete velkou blokovou velikost. Mnozstvi skutecne uzite pameti je
primerena velikosti takoveho souboru, protoze soubor je mensi nez blok.
Napriklad prikaz komprimace souboru velkeho 20kB s volbou -9 zpusobi,
ze kompresor prideli asi 7600kB pameti, ale pouzije pouze 400k + (20000
* 8) = 560kB. Podobne dekompresor prideli 3700kB ale pouzije pouze
100kB + (2000 * 4) = 180KB.
Nasleduje tabulka sestavajici z hodnot maximalniho uziti pameti pro
ruzne velikosti bloku. Obsahuje take vyslednou komprimovanou velikost
baliku 14 souboru Calgary Text Compression Corpus majici puvodni
celkovou velikost 3,141,622 bajtu. Tento udaj dovoli nahlednout vlivu
velikosti bloku na kompresi. Tabulka smeruje k vykladu vyhod uziti
vetsich bloku pro vetsi soubory.
Komprese Dekomprese Dekomprese Corpus
volba pamet pamet -s pamet velikost
-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
ZISKANI DAT Z POSKOZENYCH SOUBORU
bzip2 komprimuje soubory v blocich, obycejne 900kB velkych. S kazdych
blokem je nakladano nezavisle. Jestlize chyba zaznamu ci prenosu se
projevi v nekterem z bloku, .bz2 soubor je poskozen, ale presto je
mozne ziskat data z neposkozenych bloku data.
Komprimovane prohlaseni kazdeho bloku je vymezeno 48-bit predlohou,
ktera umoznuje nalezeni hranic bloku s prijatelnou presnosti. Kazdy
blok take uchovava vlastni 32-bit CRC a tak poskozene bloky mohou byt
rozliseny od neposkozenych.
bzip2recover je jednoduchy program, jehoz ulohou je hledat bloky v .bz2
souborech a zapisovat kazdy blok do vlastniho souboru.is
Muzete uzit bzip2 -t , jenz overuje spojitost vyslednych souboru a
dekomprimuje neposkozene bez zapisu vystupu.
bzip2recover
vyzaduje jednoduse jmeno poskozeneho souboru a vytvari cislovane
soubory "rec0001soubor.bz2", "rec002soubor.bz2" atd., obsahujici
rozbalene bloky. Pojmenovani vystupnich souboru je navrzeno tak, aby
pouziti zolikovych znaku zpusobilo spravnou sestavu souboru. Napr.
"bzip2 -dc rec*file.bz2 > ziskana_data".
Pouziti bzip2recover je spojeno s velkymi .bz2 soubory, prave takove
obsahuji mnoho bloku. Je zrejme marne pokouset se zachranit jed-
noblokovy poskozeny soubor, nebot samotny poskozeny blok nemuze byt
obnoven. Jestlize usilujete o zmenseni rizika ztraty dat zapricinenou
chybou media ci prenosu, uvazujte o kompresi s malou velikosti bloku.
POZNAMKA K VYKONU
Tridici cast komprese shromazduje podobne retezce v souboru. Z toho
duvodu muze byt mnohem pomalejsi komprimace souboru, obsahujiciho velmi
dlouhe nudle opakujicich se znaku, napr. "aabaabaabaab ... ", nez je
obvykle. Verze 0.9.5 a vyssi toto mnohem lepe travi nezli predchozi
verze. Pomer mezi nejhorsim a prumernych casem komprese je kolem 10:1.
Predchozi verze statecne dosahovaly pomeru 100:1. Pokud zadate volbu
-vvvv, muzete sledovat prubeh v detailu. Dekompresni rychlost tim neni
ovlivnena.
bzip2 obvykle obsadi nekolik megabajtu pameti a pak je vyplnuje doslova
nahodne rozmarilym zpusobem. To znamena, ze vykon komprese i dekomprese
je silne ovlivnen rychlosti obsluhy cache. Proto male zmeny v kodu
pristupu cache by mely zpusobit nepomerne velke zlepseni vykonu.
Domnivam se, ze vykon bzip2 bude nejlepsi na strojich s velmi velkymi
cache.
VAROVANI
I/O chybove zpravy nejsou tak uzitecne, jak by mohly byt. bzip2 se
pilne pokousi rozeznat I/O chyby a slusne ukoncit cinnost, ale detailni
zpravy o problemu jsou obcas ponekud matouci.
Tato prirucka nalezi k verzi 1.0 bzip2. Komprimovana data vytvorena
touto verzi jsou zcela oboustranne slucitelna s predchazejicimi
verejnymi vydanimi, verzemi 0.1pl2, 0.9.0 a 0.9.5. Ovsem s nasledujici
vyjimkou: 0.9.0 a vyssi umi spravne dekomprimovat zretezene kompri-
movane soubory. 0.1pl2 to neumi, a zastavi se po dokonceni dekomprese
prvniho souboru v proudu.
bzip2recover pouziva 32-bit cele cislo oznacujici bitovou pozici v kom-
primovanem souboru, proto nemuze zvladnout soubory vetsi 512MB. To vsak
muze byt snadno vyreseno.
AUTOR
Julian Seward, jseward@acm.org.
http://sourceware.cygnus.com/bzip2 http://www.muraroa.demon.co.uk
Myslenky vlozene do bzip2 pochazeji od nasledujicich lidi: Michael Bur-
rows a David Wheeler (bloky radici premena), David Wheeler (opet, Huff-
manovo kodovani), Peter Fenwick (strukturovany model kodovani v
puvodnim bzip, a rada zdokonaleni), Alistair Moffat, Radford Neal a Ian
Witten (aritmeticke kodovani v puvodnim bzip). Mnoho jim vdecim za
jejich pomoc, podporu a rady. Pro odkazy na zdrojovou dokumentaci se
podivejte do prirucky v balicku zdrojoveho kodu. Christian von Roques
me privedl k hledani rychlejsiho tridiciho algoritmu, to pro zvyseni
rychlosti komprese. Bela Lubkin me podporil pri zdokonaleni toho
nejhorsiho pripadu kompresniho vykonu. Mnoho lidi poslalo zaplaty,
pomohli s problemy v prenositelnosti, pujcili stroje, dali rady a byli
obecne napomocni.
PRELOZIL
Karel Dusek (kargee.dusek@seznam.cz).
bzip2(1)