bunzip2 - kézikönyv, opciók, parancspéldák


NÉV

bunzip2 - blokkrendező fájltömörítő, v1.0.8

SZINOPSZIS

bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]


bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename

LEÍRÁS

bzip2, bunzip2

blokkrendező fájltömörítő

bzcat

kitömöríti a fájlokat stdout-ba

bzip2recover

visszaállítja az adatokat a sérült bzip2 fájlokból

A bzip2 a Burrows-Wheeler blokkrendező szövegtömörítési algoritmus és Huffman-kódolás segítségével tömöríti a fájlokat. A tömörítés általában lényegesen jobb, mint a hagyományosabb LZ77/LZ78-alapú kompresszorok, és megközelíti a statisztikai kompresszorok PPM családjának teljesítményét.

A parancssori beállítások szándékosan nagyon hasonlítanak a GNU gzip beállításaihoz, de nem azonosak.

A bzip2 a fájlnevek listáját várja a parancssori jelzők mellett. Minden egyes fájlt saját tömörített változata vált fel, „eredeti_név.bz2” néven. Minden tömörített fájl ugyanazzal a módosítási dátummal, jogosultságokkal és, ha lehetséges, tulajdonjoggal rendelkezik, mint a megfelelő eredetinek, így ezek a tulajdonságok a kibontáskor helyesen visszaállíthatók. A fájlnévkezelés naiv abban az értelemben, hogy nincs olyan mechanizmus, amely megőrizné az eredeti fájlneveket, engedélyeket, tulajdonjogokat vagy dátumokat azokban a fájlrendszerekben, amelyekben hiányoznak ezek a fogalmak, vagy komoly fájlnév-hosszkorlátozások vannak, mint például az MS-DOS.

A bzip2 és a bunzip2 alapértelmezés szerint nem írja felül a meglévő fájlokat. Ha ezt szeretné, adja meg az -f jelzőt.

Ha nincs megadva fájlnév, a bzip2 szabványos bemenetről szabványos kimenetre tömöríti. Ebben az esetben a bzip2 megtagadja a tömörített kimenet terminálra való írását, mivel ez teljesen érthetetlen, és ezért értelmetlen lenne.

A bunzip2 (vagy a bzip2 -d) kicsomagolja az összes megadott fájlt. A nem a bzip2 által létrehozott fájlokat a rendszer észleli és figyelmen kívül hagyja, és figyelmeztetést küld. A bzip2 a következőképpen próbálja kitalálni a kicsomagolt fájl nevét a tömörített fájl nevéből:

fájlnév.bz2 fájlnévből fájlnév.bz fájlnévből fájlnév.tbz2 fájlnévből fájlnévből fájlnévből fájlnév.tbzből fájlnév.tar fájlnév.tbz fájlnévből fájlnév.tar bármely más névből bármilyen másnév.out lesz

Ha a fájl nem a felismert végződések egyikére végződik, .bz2, .bz, .tbz2 vagy .tbz, A bzip2 kifogásolja, hogy nem tudja kitalálni az eredeti fájl nevét, és az eredeti nevet használja a .out hozzáfűzéssel.

A tömörítéshez hasonlóan a fájlnevek hiánya a szabványos bemenetről a szabványos kimenetre történő kicsomagolást okoz.

A bunzip2 megfelelően kicsomagolja azt a fájlt, amely két vagy több tömörített fájl összefűzése. Az eredmény a megfelelő tömörítetlen fájlok összefűzése. Az összefűzött tömörített fájlok integritástesztelése (-t) szintén támogatott.

A -c kapcsoló megadásával a fájlokat a szabványos kimenetre is tömörítheti vagy kibonthatja. Több fájl is tömöríthető és kicsomagolható így. Az eredményül kapott kimenetek sorban az stdout-ba kerülnek. Több fájl ilyen módon történő tömörítése több tömörített fájl reprezentációt tartalmazó adatfolyamot generál. Egy ilyen adatfolyamot csak a bzip2 0.9.0-s vagy újabb verziója tudja megfelelően kicsomagolni. A bzip2 korábbi verziói leállnak az adatfolyam első fájljának kicsomagolása után.

A bzcat (vagy bzip2 -dc) kitömöríti az összes megadott fájlt a szabványos kimenetre.

A bzip2 a BZIP2 és a BZIP környezeti változók argumentumait ebben a sorrendben olvassa be, és a parancssorból kiolvasott argumentumok előtt feldolgozza azokat. Ez kényelmes módot biztosít az alapértelmezett argumentumok megadására.

A tömörítés mindig megtörténik, még akkor is, ha a tömörített fájl valamivel nagyobb, mint az eredeti. A körülbelül száz bájtnál kisebb fájlok általában nagyobbak lesznek, mivel a tömörítési mechanizmus állandó többletterhelése körülbelül 50 bájt. A véletlenszerű adatok (beleértve a legtöbb fájltömörítő kimenetét is) körülbelül 8,05 bit/byte kódolásúak, ami körülbelül 0,5%-os bővülést jelent.

Önellenőrzésként a bzip2 32 bites CRC-ket használ, hogy megbizonyosodjon arról, hogy a fájl kicsomagolt verziója megegyezik az eredetivel. Ez megóv a tömörített adatok megsérülésétől és a bzip2 fel nem észlelt hibáitól (remélhetőleg nagyon valószínűtlen). Annak az esélye, hogy az adatsérülés észrevétlen marad, mikroszkopikus, minden feldolgozott fájl esetében körülbelül egy a négymilliárdhoz. Ügyeljen azonban arra, hogy az ellenőrzés dekompressziókor történik, így csak azt jelzi, hogy valami nincs rendben. Nem tud segíteni az eredeti tömörítetlen adatok visszaállításában. A bzip2recover segítségével megpróbálhatja helyreállítani az adatokat a sérült fájlokból.

Visszatérési értékek: 0 a normál kilépéshez, 1 a környezeti problémákhoz (a fájl nem található, érvénytelen jelzők, I/O hibák stb.), 2 a sérült tömörített fájl jelzésére, 3 a belső konzisztencia hibára (pl. hiba) bzip2 pánikba.

LEHETŐSÉGEK

-c --stdout

Tömörítés vagy kibontás szabványos kimenetre.

-d --decompress

Dekompresszió kényszerítése. A bzip2, bunzip2 és a bzcat valójában ugyanaz a program, és a teendők eldöntése a használt név alapján történik. . Ez a jelző felülírja ezt a mechanizmust, és a bzip2 kibontására kényszeríti.

-z --compress

A -d: kiegészítése kényszeríti a tömörítést, függetlenül a meghívás nevétől.

-t --test

Ellenőrizze a megadott fájl(ok) integritását, de ne bontsa ki őket. Ez valóban próbadekompressziót hajt végre, és eldobja az eredményt.

-f --force

A kimeneti fájlok felülírásának kényszerítése. Általában a bzip2 nem írja felül a meglévő kimeneti fájlokat. Arra is kényszeríti a bzip2-t, hogy megszakítsa a fájlokra mutató hivatkozásokat, amit egyébként nem tenne meg.

A bzip2 általában nem hajlandó kicsomagolni azokat a fájlokat, amelyek nem rendelkeznek a megfelelő mágikus fejlécbájtokkal. Ha azonban kényszerített (-f), akkor az ilyen fájlokat módosítatlanul továbbítja. A GNU gzip így viselkedik.

-k --keep

Tartsa meg (ne törölje) a bemeneti fájlokat a tömörítés vagy a kicsomagolás során.

-s --small

Csökkentse a memóriahasználatot a tömörítéshez, kibontáshoz és teszteléshez. A fájlok kicsomagolása és tesztelése egy módosított algoritmussal történik, amely blokkbájtonként csak 2,5 bájtot igényel. Ez azt jelenti, hogy bármely fájl kicsomagolható 2300 KB memóriában, bár a normál sebesség körülbelül felével.

A tömörítés során az -s 200 KB-os blokkméretet választ, ami a memóriahasználatot körülbelül ugyanerre korlátozza, a tömörítési arány rovására. Röviden, ha a gépedben kevés a memória (8 megabájt vagy kevesebb), használd a -s-t mindenre. Lásd alább a MEMÓRIAKEZELÉS részt.

-q --quiet

Tiltsa le a nem alapvető figyelmeztető üzeneteket. Az I/O hibákkal és más kritikus eseményekkel kapcsolatos üzenetek nem kerülnek elnyomásra.

-v --verbose

Bőbeszédű mód – minden feldolgozott fájl tömörítési arányának megjelenítése. A -v-k további növelik a bőbeszédűséget, sok olyan információt kidobva, amelyek elsősorban diagnosztikai célokra érdekesek.

-L --license -V --version

Jelenítse meg a szoftver verzióját, a licencfeltételeket és feltételeket.

-1 (or --fast) to -9 (or --best)

Tömörítéskor állítsa be a blokkméretet 100 k, 200 k ... 900 k értékre. Dekompressziónál nincs hatása. Lásd alább a MEMÓRIAKEZELÉS részt. A --fast és --best álnevek elsősorban a GNU gzip kompatibilitást szolgálják. Különösen a --fast nem teszi lényegesen gyorsabbá a dolgokat. És a --best egyszerűen kiválasztja az alapértelmezett viselkedést.

--

Minden további argumentumot fájlnévként kezel, még akkor is, ha kötőjellel kezdődik. Így kezelheti a kötőjellel kezdődő nevű fájlokat, például: bzip2 -- -sajátfájlnév.

--repetitive-fast --repetitive-best

Ezek a jelzők redundánsak a 0.9.5-ös és újabb verziókban. Némi durva szabályozást biztosítottak a rendezési algoritmus viselkedése felett a korábbi verziókban, ami néha hasznos volt. A 0.9.5 és újabb verziók továbbfejlesztett algoritmussal rendelkeznek, amely irrelevánssá teszi ezeket a jelzőket.

MEMÓRIAKEZELÉS

A bzip2 a nagy fájlokat blokkokban tömöríti. A blokk mérete egyaránt befolyásolja az elért tömörítési arányt, valamint a tömörítéshez és a kibontáshoz szükséges memória mennyiségét. A -1 és -9 közötti jelzők a blokkméretet 100 000 és 900 000 bájt között határozzák meg (alapértelmezett). A kicsomagoláskor a tömörítéshez használt blokkméretet a rendszer a tömörített fájl fejlécéből olvassa be, és a bunzip2 csak annyi memóriát foglal le magának, hogy kicsomagolja a fájlt. Mivel a blokkméretek tömörített fájlokban vannak tárolva, ebből az következik, hogy a -1 és -9 jelzők irrelevánsak a kitömörítés során, ezért figyelmen kívül hagyják őket.

A tömörítési és kitömörítési követelmények bájtban a következőképpen becsülhetők meg:

Tömörítés: 400k + (8 x blokkméret)

Dekompresszió: 100k + (4x blokkméret) vagy 100k + (2,5x blokkméret)

A nagyobb blokkméretek gyorsan csökkenő határhozamot adnak. A tömörítés nagy része az első két-háromszáz k blokkméretből származik, ezt a tényt érdemes szem előtt tartani, ha a bzip2-et kis gépeken használjuk. Azt is fontos megérteni, hogy a dekompressziós memóriaigényt a tömörítési időben a blokkméret megválasztása határozza meg.

Az alapértelmezett 900 KB-os blokkmérettel tömörített fájlok esetén a bunzip2 körülbelül 3700 kbyte-ot igényel a kicsomagoláshoz. A 4 megabájtos gépen lévő bármely fájl kitömörítésének támogatásához a bunzip2 lehetőséget kínál a kicsomagolásra körülbelül ennek a memóriamennyiségnek a felével, körülbelül 2300 kbájttal. A dekompressziós sebesség is felére csökken, ezért ezt az opciót csak szükség esetén használja. A vonatkozó zászló -s.

Általában próbálja meg a legnagyobb blokkméretű memóriakorlátot használni, mivel ez maximalizálja az elért tömörítést. A tömörítési és dekompressziós sebességet gyakorlatilag nem befolyásolja a blokk mérete.

Egy másik fontos pont az egyetlen blokkban elférő fájlokra vonatkozik – ez azt jelenti, hogy a legtöbb fájl nagy blokkméretet használ. A megérintett valós memória mennyisége arányos a fájl méretével, mivel a fájl kisebb, mint egy blokk. Például, ha egy 20 000 bájt hosszú fájlt a -9 jelzővel tömörít, a tömörítő körülbelül 7600 KB memóriát foglal le, de ebből csak 400 000 + 20 000 * 8=560 kbyte-ot érint. Hasonlóképpen, a dekompresszor 3700 KB-ot foglal le, de csak 100 000 + 20 000 * 4=180 kbyte-ot érint.

Itt van egy táblázat, amely összefoglalja a maximális memóriahasználatot különböző blokkméretekhez. A Calgary Text Compression Corpus 14 fájljának teljes tömörített mérete is rögzítésre kerül, összesen 3 141 622 bájt. Ez az oszlop némi képet ad arról, hogy a tömörítés hogyan változik a blokk méretével. Ezek a számok általában alábecsülik a nagyobb fájlok nagyobb blokkméretének előnyeit, mivel a korpuszt a kisebb fájlok uralják.

Tömörítés Kitömörítés Kitömörítés Corpus Flag használat használat -s használati méret

-1 1200k 500k 350k 914704 -2 2000k 900k 600k 877703 -3 2800k 1300k 850k 860338 -4 3600k 1700k 1700k 1700k 11089k -854409k k 845160 -6 5200k 2500k 1600k 838626 -7 6100k 2900k 1850k 834096 -8 6800k 3300k 2100k 828642 -9 7600k 3700k 2350k 828642

ADATOK HELYREÁLLÍTÁSA SÉRÜLT FÁJLOKBÓL

A bzip2 blokkokban tömöríti a fájlokat, általában 900 kbájt hosszúságban. Minden blokk önállóan kezelhető. Ha egy adathordozó vagy átviteli hiba miatt egy többblokkos .bz2 fájl megsérül, lehetséges, hogy a fájl sértetlen blokkjaiból vissza lehet állítani az adatokat.

Az egyes blokkok tömörített reprezentációját egy 48 bites minta határolja, amely lehetővé teszi a blokkhatárok ésszerű biztonsággal történő megtalálását. Minden blokk saját 32 bites CRC-t is hordoz, így a sérült blokkok megkülönböztethetők a sértetlenektől.

A bzip2recover egy egyszerű program, amelynek célja, hogy blokkokat keressen a .bz2 fájlokban, és minden blokkot kiírjon a saját .bz2 fájljába. Ezután a bzip2 -t segítségével tesztelheti az eredményül kapott fájlok integritását, és kicsomagolhatja a sértetlen fájlokat.

A bzip2recover egyetlen argumentumot vesz fel, a sérült fájl nevét, és számos fájlt ír: „rec00001file.bz2”, „rec00002file.bz2” stb., amelyek a kicsomagolt blokkokat tartalmazzák. A kimeneti fájlnevek úgy vannak kialakítva, hogy a helyettesítő karakterek használata a későbbi feldolgozás során – például „bzip2 -dc rec*file.bz2 > recovery_data” – a megfelelő sorrendben dolgozza fel a fájlokat.

A bzip2recover a leginkább használható nagy .bz2 fájlok kezelésére, mivel ezek sok blokkot tartalmaznak. Nyilvánvalóan hiábavaló használni sérült egyblokkos fájlokon, mivel a sérült blokkot nem lehet visszaállítani. Ha minimalizálni szeretné az adathordozók vagy átviteli hibák miatti esetleges adatvesztést, érdemes lehet kisebb blokkmérettel tömöríteni.

TELJESÍTMÉNY MEGJEGYZÉSEK

A tömörítés rendezési fázisa hasonló karakterláncokat gyűjt össze a fájlban. Emiatt a nagyon hosszú ismétlődő szimbólumokat, például "aabaabaabaab..." (több százszor ismétlődő) tartalmazó fájlok tömörítését lassabban tömöríthetik, mint általában. A 0.9.5-ös és újabb verziók e tekintetben sokkal jobban teljesítenek, mint a korábbi verziók. A legrosszabb eset és az átlagos tömörítési idő közötti arány 10:1 körül van. A korábbi verzióknál ez a szám inkább 100:1 volt. Ha akarja, használhatja a -vvvv kapcsolót a folyamat nagyon részletes nyomon követésére.

A dekompressziós sebességet ezek a jelenségek nem befolyásolják.

A bzip2 általában több megabájt memóriát foglal le a működéshez, majd meglehetősen véletlenszerűen tölti fel az egészet. Ez azt jelenti, hogy a teljesítményt mind a tömörítésnél, mind a kicsomagolásnál nagymértékben meghatározza az a sebesség, amellyel a gép képes kijavítani a gyorsítótár hiányosságait. Emiatt megfigyelték, hogy a kód kis változtatásai a kihagyási arány csökkentése érdekében aránytalanul nagy teljesítménynövekedést eredményeznek. Úgy gondolom, hogy a bzip2 a nagyon nagy gyorsítótárral rendelkező gépeken teljesít a legjobban.

FIGYELMEZTETÉSEK

Az I/O hibaüzenetek nem annyira hasznosak, mint lehetne. A bzip2 keményen igyekszik észlelni az I/O hibákat és tisztán kilépni, de a probléma részletei néha meglehetősen félrevezetőnek tűnnek.

Ez a kézikönyvoldal a bzip2 1.0.8-as verziójára vonatkozik. Az ezzel a verzióval létrehozott tömörített adatok teljes mértékben előre és visszafelé kompatibilisek a korábbi nyilvános kiadásokkal, a 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.0, 1.0.1, 1.0.0, 1.0.1, 1.0.0, 1.0.1, 1.0.0, 1.0.2 és fenti kivételekkel. tömörített fájlokat. 0.1pl2 ezt nem tudja megtenni; az adatfolyam első fájljának kicsomagolása után leáll.

Az 1.0.2 előtti bzip2recover verziók 32 bites egész számokat használtak a tömörített fájlok bitpozícióinak megjelenítésére, így nem tudták kezelni az 512 megabájtnál hosszabb tömörített fájlokat. Az 1.0.2-es és újabb verziók 64 bites int-et használnak bizonyos platformokon, amelyek támogatják ezeket (GNU által támogatott célok és Windows). Annak megállapításához, hogy a bzip2recover létrejött-e ilyen korlátozással, futtassa argumentumok nélkül. Mindenesetre elkészíthet magának egy korlátlan verziót, ha a MaybeUInt64 előjel nélküli 64 bites egész számra állítva újra le tudja fordítani.

SZERZŐ

Julian Seward, jseward@acm.org.

https://sourceware.org/bzip2/

A bzip2ben megtestesült ötletek (legalább) a következő személyeknek köszönhetők: Michael Burrows és David Wheeler (a blokkrendezési átalakításért), David Wheeler (ismét a Huffman kódolóért), Peter Fenwick ( az eredeti bzip strukturált kódolási modelljéhez és számos finomításhoz), valamint Alistair Moffat, Radford Neal és Ian Witten (az eredeti bzip aritmetikai kódolójához). nagyon hálás vagyok a segítségükért, támogatásukért és tanácsukért. A dokumentáció forrásaira mutató hivatkozásokért tekintse meg a forrásmegosztás kézikönyvét. Christian von Roques arra biztatott, hogy keressek gyorsabb rendezési algoritmusokat a tömörítés felgyorsítása érdekében. Lubkin Béla arra biztatott, hogy javítsam a legrosszabb esetek tömörítési teljesítményét. Donna Robinson XMLelezte a dokumentációt. A bz* szkriptek a GNU gzip parancsfájljaiból származnak. Sokan küldtek javításokat, segítettek hordozhatósági problémákban, gépeket adtak kölcsön, tanácsokat adtak és általában segítőkészek voltak.