> Linux Reviews > man >

bzip2


  1. bzip2.1.man


1. bzip2.1.man

Manpage of bzip2

bzip2

Section: User Commands (1)
Index Return to Main Contents
 

JMÉNO

bzip2, bunzip2 - komprimuje a dekomprimuje soubory, používá metodu blokového třídění v1.0
bzcat - dekomprimuje soubory do standardního výstupu (stdout)
bzip2recover - získává data z poškozených bzip2 souborů

 

POUŽITÍ

bzip2 [ -cdfkqstvzVL123456789 ] [ soubory ... ]
bunzip2 [ -fkvsVL ] [ soubory ... ]
bzcat [ -s ] [ soubory ... ]
bzip2recover soubor

 

POPIS

bzip2 komprimuje /zhustí či zmenší/ soubory užitím Burrow-Wheelerova blokového třídícího textového komprimačního algoritmu a Huffmanova kódování. Komprese je všeobecně mnohem lepší než dosahují obvyklé komprimační nástroje založené na LZ77/LZ78 algoritmech (např. gzip) a blíží se výkonu PPM rodiny statistických kompresorů.

Volby příkazového řádku jsou záměrně velmi podobné volbám nástroje GNU gzip, ale nejsou zcela totožné. bzip2 očekává příkaz doprovázený seznamem jmen souborů na příkazovém řádku. Každý soubor je nahrazen komprimovanou verzí sebe sama se jménem "původní_jméno.bz2".

Každý komprimovaný soubor má stejné datum změny, přístupová práva a je-li to možné, také stejné vlastníky odpovídající původnímu souboru, takže tyto vlastnosti mohou být správně obnoveny při dekomprimaci. Zacházení se jménem souboru je možno považovat za hloupé na souborových systémech, kterým chybí mechanismus zabezpečení původního jména souboru, přístupových práv, vlastnictví nebo datumů či mají závažné omezení délky souborového jména (např. DOS).

bzip2 and bunzip2 standardně nepřepisují již existující soubory. Jestliže toto žádáte, užijte volbu -f.

Pokud není určeno žádné jméno, bzip2 komprimuje standardní vstup do standardního výstupu.

V tom případě bzip2 odmítne zapsat komprimovaný výstup na terminál, což se může zdát zcela nepochopitelné a tudíž zbytečné. Ale ...

bunzip2 (nebo bzip2 -d) dekomprimuje všechny označené soubory. Soubory, které nebyly vytvořeny bzip2 budou rozeznány, vyřazeny a jejich jména obsažena ve varovném hlášení.

bzip2 se pokouší vyvodit jméno dekomprimovaného souboru z komprimovaného, jak je uvedeno v následujících příkladech.


       soubor.bz2    vytvořen    soubor
       soubor.bz                 soubor
       soubor.tbz2               soubor.tar
       soubor.tbz                soubor.tar
       libéVámjméno  vytvořen    libéVámjméno.out

Jestliže souborové jméno nekončí jednou z následujících možností .bz2, .bz, .tbz2 nebo .tbz, bzip2 si postěžuje, že nemůže vyluštit jméno původního souboru a použije původní jméno se zakončením .out.

Stejně jako při kompresi, chybějící jméno způsobí dekompresi ze standardního vstupu do standardního výstupu.

bunzip2 správně dekomprimuje soubor který je zřetězením dvou či více komprimovaných souborů. Výsledkem je zřetězení odpovídajících nekomprimovaných souborů. Testovaní celistvosti (-t) zřetězených komprimovaných souborů je také podporováno.

Můžete také komprimovat a dekomprimovat soubory do standardního výstupu volbou -c. Hromadné soubory mohou být komprimovány a dekomprimovány také tak. Výsledné výstupy jsou postupně naskládány do standardního výstupu (stdout). Komprese hromadných souborů tímto způsobem vytváří proud obsahující hromadné komprimované soubory. Takový proud může být správně dekomprimován pouze bzip2 version 0.9.0 nebo vyšší. Nižší verze bzip2 se zastaví po dekomprimování prvního souboru v proudu.

bzcat (or bzip2 -dc) dekomprimuje všechny uvedené soubory do standardního výstupu.

bzip2 přečte argumenty z proměnných prostředí BZIP2 and BZIP, v tomto pořadí, a zpracuje je ještě před načtením argumentů z příkazové řádky. Tímto způsobem mohou být získány obecné argumenty.

Komprese je vždy provedena, dokonce i tehdy, je-li získaný komprimovaný soubor nepatrně větší než původní. U souborů menších než zhruba sto bajtů je sklon ke zvětšení, neboť komprimační mechanismus má stálou režii kolem 50 bajtů. Náhodná data (uvažován výstup většiny souborových kompresorů) jsou kódována v 8.05 bitech na bajt při rozpětí kolem 0.5%.

Jako sebekontrolní mechanismus bzip2 užívá 32-bit CRC k ověření identity dekomprimované verze s originálem. To chrání proti deformaci komprimovaných dat a proti nerozeznaných chybám v bzip2 (doufejme, že velmi nepravděpodobných). Možnost nerozpoznaného poškození dat je nepatrná, v poměru 1 ku čtyřem biliónům na každý zpracovaný soubor. Uvědomme si však, že kontrola při dekompresi může pouze oznámit, že je něco špatně. Nemůže pomoci získat původní nekomprimovaná data. Pokud se chcete pokusit získat z poškozených souborů data, použijte program bzip2recover.

Návratové hodnoty: 0 správný konec, 1 problémy prostředí (soubor nebyl nalezen, špatné volby, I/O chyby), 2 označuje porušení komprimovaného souboru, 3 vnitřní logickou chybu (eg, bug), jenž způsobuje bzip2 nouzi.

 

VOLBY

-c --stdout
Komprimuje nebo dekomprimuje do standardního výstupu
-d --decompress
Vyvolá dekompresi. bzip2, bunzip2 and bzcat jsou ve skutečnosti stejné programy a rozhodnutí jaké činnosti budou provedeny závisí na užitém jménu. Avšak volba převyšuje na tímto mechanismem a vyvolá bzip2 pro dekompresi.
-z --compress
Protiklad k -d. Způsobí kompresi bez ohledu na volané jméno.
-t --test
Kontroluje celistvost uvedeného souboru, ale nekomprimuje jej. Ve skutečnosti provádí zkušební dekompresi a zahodí výsledek.
-f --force
Přepíše výstupní soubory. Normálně bzip2 nepřepisuje existující výstupní soubory. Také bzip2 přeruší pevné odkazy k souborům, což by jinak neprovedl.
-k --keep
Zachová (nemaže) vstupní soubory během komprese nebo dekomprese.
-s --small
Omezí velikost použité paměti pro kompresi, dekompresi i testování. Při dekompresi a testování je užíván upravený algoritmus, jenž vyžaduje pouze 2.5 bajtů pro blok. To znamená, že jakýkoliv soubor může být dekomprimován pouze s 2300kB dostupné paměti, avšak poloviční rychlostí.

Během komprese, znak -s vybere velikost bloku 200kB, čímž příslušně omezí velikost užité paměti za cenu nižšího kompresního poměru. Tedy, má-li váš počítač 8MB či méně operační paměti užijte volbu -s. Čtete ŘÍZENÍ PAMĚTI dále.

-q --quiet
Potlačí nepodstatná varování. Zprávy týkající se I/O chyb a jiných kritických událostí nebudou potlačeny.
-v --verbose
Upovídaná volba -- ukazuje pro každý zpracovaný soubor kompresní poměr. Dále volba -v zvyšuje výmluvnost, chrlí množství informací, které jsou zajímavé zejména pro diagnostické účely.
-L --license -V --version
Zobrazí verzi, licenční podmínky.
-1 to -9
Nastaví velikost bloku na 100kB, 200kB .. 900kB pro komprimaci. Nemá žádný vliv na dekomprimaci. Čti ŘÍZENÍ PAMĚTI dále.
--
Považuje všechny následující argumenty za souborová jména, i pokud začínají pomlčkou. Takže můžete zacházet také se soubory s pomlčkou například bzip2 -- -méskvělévyspekulovanéjménosouboru.
--repetitive-fast --repetitive-best
Tato volba je zbytečná ve verzi 0.9.5 a vyšších. Poskytovala určité surové ovládání chování třídícího algoritmu v předchozích verzích a byla v lecčem užitečná. Verze 0.9.5 a vyšší mají zdokonalený algoritmus, který činí tuto volbu bezvýznamnou.

 

ŘÍZENÍ PAMĚTI

bzip2 komprimuje velké soubory v blocích. Velikost bloku má vliv jednak na dosažený kompresní poměr a také na množství potřebné paměti pro kompresi a dekompresi. Volby -1 až -9 určují velikost bloku od 100kB do 900KB (standard). Při dekompresi je velikost bloku, užitá pro kompresi, načtena z hlavičky zkomprimovaného souboru a bunzip2 již sám vyhradí dostatek paměti pro dekompresi. Protože velikost bloku je uložena ve zkomprimovaném souboru, volby -1 až -9 jsou zbytečné a proto při dekompresi zůstanou nepovšimnuty.

Kompresní a dekompresní paměťové požadavky v bajtech mohou být odhadnuty takto:

        Komprese: 400k + (8 x velikost bloku)

       Dekomprese: 100k + (4 x velikost bloku) nebo

                100k + (2.5 x velikost bloku)   

Větší bloky nepřinášejí přiměřený nárůst komprese, neboť většina komprese je vytvořena v prvních dvou či třech stech tisících bajtů bloku (což těší mysl uživatele malých strojů). Je také důležité si uvědomit, že dekompresní paměťové požadavky jsou nastaveny v době komprese výběrem velikosti bloku.

Pro soubor komprimovaný s přednastavenou velikostí bloku 900kB bunzip2 vyžaduje při dekompresi 3700kB paměti. Pro umožnění dekomprimování libovolného souboru na počítači s pouze 4MB operační paměti má bunzip2 volbu pro dekompresi užívající přibližně poloviční množství paměti, kolem 2300kB. Rychlost je také snížena na polovinu, proto byste tuto možnost měli užít pouze, je-li to opravdu nutné. Odpovídající volba je -s.
  Obecně řečeno, zkuste a užijte největší možnou velikost bloku v zájmu dosažení maximální komprese. Rychlost komprese a dekomprese není velikostí bloku ovlivněna.

Dále se podíváme na uplatnění bzip2 na soubory, které se vejdou do jednoho bloku. To je většina souborů, se kterými se setkáte, pokud použijete velkou blokovou velikost. Množství skutečně užité paměti je přiměřená velikosti takového souboru, protože soubor je menší než blok. Například příkaz komprimace souboru velkého 20kB s volbou -9 způsobí, že kompresor přidělí asi 7600kB paměti, ale použije pouze 400k + (20000 * 8) = 560kB. Podobně dekompresor přidělí 3700kB ale použije pouze 100kB + (2000 * 4) = 180KB.

Následuje tabulka sestávající z hodnot maximálního užití paměti pro různé velikosti bloku. Obsahuje také výslednou komprimovanou velikost balíku 14 souborů Calgary Text Compression Corpus mající původní celkovou velikost 3,141,622 bajtů. Tento údaj dovolí nahlédnout vlivu velikosti bloku na kompresi. Tabulka směřuje k výkladu výhod užití větších bloků pro větší soubory.


           Komprese   Dekomprese   Dekomprese   Corpus
    volba   paměť       paměť       -s paměť   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

 

ZÍSKÁNÍ DAT Z POŠKOZENÝCH SOUBORŮ

bzip2 komprimuje soubory v blocích, obyčejně 900kB velkých. S každých blokem je nakládáno nezávisle. Jestliže chyba záznamu či přenosu se projeví v některém z bloků, .bz2 soubor je poškozen, ale přesto je možné získat data z nepoškozených bloků data.

Komprimované prohlášení každého bloku je vymezeno 48-bit předlohou, která umožňuje nalezení hranic bloku s přijatelnou přesností. Každý blok také uchovává vlastní 32-bit CRC a tak poškozené bloky mohou být rozlišeny od nepoškozených.

bzip2recover je jednoduchý program, jehož úlohou je hledat bloky v .bz2 souborech a zapisovat každý blok do vlastního souboru.is

Můžete užít bzip2 -t , jenž ověřuje spojitost výsledných souborů a dekomprimuje nepoškozené bez zápisu výstupu.

bzip2recover

vyžaduje jednoduše jméno poškozeného souboru a vytváří číslované soubory "rec0001soubor.bz2", "rec002soubor.bz2" atd., obsahující rozbalené bloky. Pojmenování výstupních souborů je navrženo tak, aby použití žolíkových znaků způsobilo správnou sestavu souborů. Např. "bzip2 -dc rec*file.bz2 > získaná_data".

Použití bzip2recover je spojeno s velkými .bz2 soubory, právě takové obsahují mnoho bloků. Je zřejmě marné pokoušet se zachránit jednoblokový poškozený soubor, neboť samotný poškozený blok nemůže být obnoven. Jestliže usilujete o zmenšení rizika ztráty dat zapříčiněnou chybou média či přenosu, uvažujte o kompresi s malou velikostí bloku.

 

POZNÁMKA K VÝKONU

Třídící část komprese shromažďuje podobné řetězce v souboru. Z toho důvodu může být mnohem pomalejší komprimace souboru, obsahujícího velmi dlouhé nudle opakujících se znaků, např. "aabaabaabaab ... ", než je obvyklé. Verze 0.9.5 a vyšší toto mnohem lépe tráví nežli předchozí verze. Poměr mezi nejhorším a průměrných časem komprese je kolem 10:1. Předchozí verze statečně dosahovaly poměru 100:1. Pokud zadáte volbu -vvvv, můžete sledovat průběh v detailu. Dekompresní rychlost tím není ovlivněna.

bzip2 obvykle obsadí několik megabajtů paměti a pak je vyplňuje doslova náhodně rozmařilým způsobem. To znamená, že výkon komprese i dekomprese je silně ovlivněn rychlostí obsluhy cache. Proto malé změny v kódu přístupu cache by měly způsobit nepoměrně velké zlepšení výkonu. Domnívám se, že výkon bzip2 bude nejlepší na strojích s velmi velkými cache.

 

VAROVÁNÍ

I/O chybové zprávy nejsou tak užitečné, jak by mohly být. bzip2 se pilně pokouší rozeznat I/O chyby a slušně ukončit činnost, ale detailní zprávy o problému jsou občas poněkud matoucí.

Tato příručka náleží k verzi 1.0 bzip2. Komprimovaná data vytvořená touto verzí jsou zcela oboustranně slučitelná s předcházejícími veřejnými vydáními, verzemi 0.1pl2, 0.9.0 a 0.9.5. Ovšem s následující výjimkou: 0.9.0 a vyšší umí správně dekomprimovat zřetězené komprimované soubory. 0.1pl2 to neumí, a zastaví se po dokončení dekomprese prvního souboru v proudu.

bzip2recover používá 32-bit celé číslo označující bitovou pozici v komprimovaném souboru, proto nemůže zvládnout soubory větší 512MB. To však může být snadno vyřešeno.

 

AUTOR

Julian Seward, jseward@acm.org.

http://sourceware.cygnus.com/bzip2 http://www.muraroa.demon.co.uk

Myšlenky vložené do bzip2 pocházejí od následujících lidí: Michael Burrows a David Wheeler (bloky řadící přeměna), David Wheeler (opět, Huffmanovo kodóvání), Peter Fenwick (strukturovaný model kódování v původním bzip, a řada zdokonalení), Alistair Moffat, Radford Neal a Ian Witten (aritmetické kódovaní v původním bzip). Mnoho jim vděčím za jejich pomoc, podporu a rady. Pro odkazy na zdrojovou dokumentaci se podívejte do příručky v balíčku zdrojového kódu. Christian von Roques mě přivedl k hledání rychlejšího třídícího algoritmu, to pro zvýšení rychlosti komprese. Bela Lubkin mě podpořil při zdokonalení toho nejhoršího případu kompresního výkonu. Mnoho lidí poslalo záplaty, pomohli s problémy v přenositelnosti, půjčili stroje, dali rady a byli obecně nápomocni.

 

PŘELOŽIL

Karel Dušek (kargee.dusek@seznam.cz).


 

Index

JMÉNO
POUŽITÍ
POPIS
VOLBY
ŘÍZENÍ PAMĚTI
ZÍSKÁNÍ DAT Z POŠKOZENÝCH SOUBORŮ
POZNÁMKA K VÝKONU
VAROVÁNÍ
AUTOR
PŘELOŽIL

This document was created by man2html using the manual pages.
Time: 17:33:54 GMT, October 23, 2013

SVENSKA - SVENSKA - SVENSKA - ja - pl