Bzip2

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 5. toukokuuta 2022 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

bzip2
Tyyppi Tietojen pakkaus
Kehittäjä Seward, Julian
Sisään kirjoitettu Xi
Käyttöjärjestelmä Monialustainen ohjelmisto
Ensimmäinen painos 18. heinäkuuta 1996
uusin versio
Luettavat tiedostomuodot bzip2
Luodut tiedostomuodot bzip2
Lisenssi BSD-lisenssi [1]
Verkkosivusto sourceware.org/bzip2/

bzip2  on ilmainen ja avoimen lähdekoodin komentorivityökalu tietojen pakkaamiseen , Burrows -Wheeler- algoritmin toteutus .

Julian Seward on kehittänyt ja julkaissut ensimmäisen kerran heinäkuussa 1996 (  versio 0.15). Kompressorin vakaus ja suosio kasvoivat vuosien varrella, ja versio 1.0 julkaistiin vuoden 2000 lopulla .

Tehokkuus

UNIX-perinteen mukaisesti se bzip2voi suorittaa vain yhden toiminnon kerrallaan: joko pakata tai purkaa ja vain yhdelle tiedostolle. bzip2Pakattuna lisää tiedostonimeen laajennuksen " .bz2". Jos haluat pakata useita tiedostoja, ne arkistoidaan ensin yhdeksi tiedostoksi apuohjelmalla tarja pakataan sitten bzip2. Tällaisilla arkistoilla on yleensä tunniste " .tar.bz2".

bzip2pakkaa useimmat tiedostot tehokkaammin, mutta hitaammin kuin perinteiset apuohjelmat gziptai zip. Tässä suhteessa se on samanlainen kuin muut nykyaikaiset pakkausalgoritmit.

bzip2suorittaa tietojen pakkaamisen kuormittamalla prosessoria merkittävästi (matemaattisen laitteensa vuoksi). bzip2käytetään, jos pakkausajalla ja prosessorin kuormituksella ei ole rajoituksia, esimerkiksi suuren tietomäärän kertakäyttöön .

Joissakin tapauksissa se on bzip2pakkausteholtaan huonompi kuin arkistointilaitteet ( LZMA7-Zip -pakkausmenetelmä ) ja . Vuoden 2005 ohjelman kirjoittajan mukaan pakkausmenetelmä on kompressioteholtaan 10-15 % huonompi [3] verrattuna parhaisiin tuolloin tunnetuihin menetelmiin ( PPM ) [4] , mutta samalla 2 kertaa nopeampi puristus ja 6 kertaa nopeampi pakkauksesta purettaessa. rarbzip2

Algoritmin kuvaus

Pakkausmenetelmä bzip2toimii näin:

Likimääräinen lohkokoko voidaan valita komentoriviargumenteilla (" -1" 100 kilotavulle, " -2" 200 kt:lle, ..., " -9" 900 kt:lle). Jokainen lohko pakataan itsenäisesti, pakatut lohkot kirjoitetaan peräkkäin peräkkäin, jokaisen alussa käytetään 48-bittistä sekvenssiä - maaginen numero 0x314159265359 (ASCII-koodauksessa, kun se on kohdistettu tavurajaan, se näytetään muodossa " 1AY & SY"), eli luvun π ensimmäisten desimaalilukujen kirjoittaminen BCD -muodossa [5] . Tiedoston loppu on merkitty 48-bittisellä vakiolla 0x177245385090, joka on pi:n neliöjuuri. Bzip2-tiedostojen alussa käytetään seuraavaa otsikkoa: kaksitavuinen allekirjoitus "BZ", sitten osoitus entropian pakkausmenetelmästä - "h" (Huffman) ja lohkon koko (desimaaliluku 0-9).

Käyttämällä yksittäisten lohkojen itsenäistä pakkausta, rinnakkaispakkaus- tai purkumuotototeutukset ovat mahdollisia (pakkauksen purkaminen voi vaatia kullekin lohkolle offset-indeksin) [6] .

Käyttö

Käyttöesimerkkejä bzip2.

# Komento pakata tiedosto "tiedosto" bzip2-tiedosto # tai bzip2 -- pakkaa tiedosto # Komento purkaa tiedosto "file.bz2" bzip2 -d tiedosto.bz2 # tai bzip2 -- pura tiedosto.bz2 # tai bunzip2 tiedosto.bz2 # bunzip2 - kopio bzip2:sta tai linkki bzip2:een

Komentoriviargumentit ovat bzip2periaatteessa samat kuin gzip.

# Komento purkaa bzip2:lla pakatun tar-arkiston bzip2 -cd file.tar.bz2 | tar -xvf - # tai bzip2 --stdout --decompress file.tar.bz2 \ | tar --extract --verbose --file- # Komento luoda tar-arkisto, joka on pakattu bzip2 tar -cvf -tiedostoilla | bzip2 -9 > file.tar.bz2 # tai tar --create --verbose --file - files \ | bzip2 -9 > tiedosto.tar.bz2

GNU - versio tartukee " -j" ( " " ) - lippua , joka mahdollistaa " tar.bz2--bzip2 " - tiedostojen luomisen ja purkamisen ilman I / O - uudelleenohjauksia ( liukuhihna ) . Esimerkki:  

# Tietojen pakkaaminen tar-arkistoon ja bzip2-pakkaus GNU tar:lla tar -cvjf tiedosto.tar.bz2 tiedostojen_luettelo # tai tar --create --verbose --bzip2 --file file.tar.bz2 list_of_fies # Pura bzip2:lla pakattu tar-arkisto GNU tar:lla tar -xvjf tiedosto.tar.bz2 # tai tar --extract --verbose --bzip2 --file file.tar.bz2

GNU:n nykyaikaiset versiot tarvoivat automaattisesti määrittää tietojen pakkausmenetelmän, joten " -j" (" --bzip2") -lippu voidaan jättää pois. Esimerkki:

tar -xvf file.tar.bz2 # tai tar --extract --verbose --file file.tar.bz2

Lisäksi on joukko apuohjelmia tietojen etsimiseen, näyttämiseen, palauttamiseen ja vertailuun muodossa bzip2:

  • bzcat - tietojen purkaminen ja tulostus terminaaliin;
  • bzmore, bzless — tietojen purkaminen ja sivu sivulta tulostus päätteelle;
  • bzcmp - kahden tiedoston purkaminen, sisällön vertaileminen ja tuloksen raportoiminen: "sama" tai "ei yhtä suuri";
  • bzdiff - kahden tiedoston purkaminen, sisällön vertailu ja erojen näyttäminen;
  • bzgrep, bzegrep, bzfgrep — tietojen purkaminen ja etsiminen pakkaamattomasta;
  • bzip2recover - purkaa kaikki lohkot, jotka voidaan vain purkaa.

Tiedostomuoto

bzip2
Laajennus .bz2
Allekirjoitus BZh
Kehittäjä Seward, Julian
Viimeisin julkaisu
Muototyyppi Tietojen pakkaus
avoin muoto ? Kyllä: BSD-lisenssi
Verkkosivusto sourceware.org/bz… ​(  englanti)

Arkisto " .bz2" sisältää virran ( englanninkielinen  stream ) pakattua dataa. Sanaa "virta" käytetään, koska dataa ei voida erottaa loogisesti ja tietolohkot pakataan toisistaan ​​riippumatta. Pakatut tiedot koostuvat seuraavista kentistä:

  • 4 tavun otsikko;
  • nolla tai useampi lohko erikokoista pakattua dataa;
  • markkeri, joka osoittaa pakatun datan loppua ja 32-bittistä tarkistussummaa (CRC), joka on laskettu koko virralle;
  • muutama käyttämätön bitti virran koon täyttämiseksi kokonaislukumääräksi tavuja.
Kenttä nimi Kentän koko bitteinä Kuvaus
.taika 16 BZ — vakio , allekirjoitus , maaginen numero .
.versio kahdeksan Tavu, joka koodaa versionumeron. 0 Versio 1 (bzip1). Vanhentunut, ei käytetty. h Versio 2 (bzip2). "h" englannista.  huffman koodaus .
.hundred_k_blocksize kahdeksan Pakkaamattoman datalohkon koko sadoissa kilotavuissa . 1 Sata kilotavua (100 kt). 2 Kaksisataa kilotavua (200 kt). … Ja niin edelleen 9 900 kt (900 kt).
.compressed_magic 48 0x314159265359 - vakio , luku π kirjoitettuna binäärikoodatulla desimaalikoodilla (BCD).
.crc 32 Nykyiselle lohkolle laskettu tarkistussumma .
.satunnaistettu yksi 0 normaali 1 lisätty satunnaisuus (poistettu käytöstä)
.origPtr 24 aloita osoitin BWT -taulukkoon muuntamisen jälkeen
.huffman_used_map 16 bittimaskialueet 16 tavua, "käytettävissä" / "puuttuu"
.huffman_used_bitmaps 0...256 käytettyjen merkkien bittimaski, "saatavilla"/"puuttuu" (useita 16:sta)
.huffman_groups 3 Numero väliltä 2–6, käytössä olevien Huffman - taulukoiden määrä .
.selectors_used viisitoista Numero, joka ilmaisee kuinka monta kertaa Huffman - taulukkoa on muutettu (50 tavun välein).
*.selector_list 1...6 Nollabitillä (0..62) täytetyt bittisekvenssit Huffman-taulukoille MTF :n jälkeen (*selectors_used)
.start_huffman_length 5 0...20 alkubitin pituutta Huffman-deltoilla
*.delta_bit_length 1...40 0 seuraava hahmo 1 muuta pituutta

{ 1=> pienennä pituutta yhdellä; 0=> lisää pituutta 1} (*(symbolit+2)*ryhmät)

.sisällys 2...∞ Huffman-taulukoilla koodattu tietovirta. Jatkuu lohkon loppuun asti. Enimmäispituus on 7 372 800 bittiä .
.eos_magic 48 0x177245385090 on vakio , π :n neliöjuuri (sqrt(pi)) binäärikoodatussa desimaaliluvussa (BCD).
.crc 32 Koko streamille laskettu tarkistussumma.
.täyte 0...7 Käyttämättömät bitit (0 - 7). Tarkoitus: arkiston koon kasvattaminen yhden tavun (8 bittiä ) kerrannaiseksi ( tietojen kohdistus ).

Klassisen muodon pakkaamattoman lohkon enimmäiskoko on 900 kilotavua . Jos lohko koostuu yhdestä toistuvasta merkistä, lohko vie RLE -koodauksen jälkeen noin 46 megatavua (45 899 236 tavua ), ja kaikkien toimintojen jälkeen tiedostokoko on 46 tavua . Jos toistuva merkkikoodi on 251, tiedoston koko on 40 tavua ja pakkaussuhde 1 147 480,9:1. .bz2.bz2

Muistiinpanot

  1. bzip2 : Etusivu (downlink) . Julian Seward . "Miksi haluaisin käyttää sitä? [..] Koska se on avoimen lähdekoodin (BSD-tyylinen lisenssi) ja tietääkseni patenttivapaa." Käyttöpäivä: 27. syyskuuta 2008. Arkistoitu alkuperäisestä 15. helmikuuta 2012. 
  2. 1 2 https://sourceware.org/pub/bzip2/
  3. bzip2 ja libbzip2 Arkistoitu 25. joulukuuta 2006 Wayback Machinessa , "Se pakkaa tiedostot yleensä 10–15 %:n tarkkuudella parhaista saatavilla olevista tekniikoista (tilastollisten kompressorien PPM-perhe)"
  4. Tällä hetkellä PAQ -menetelmän erilaiset toteutukset pakataan tehokkaimmin . Tämän menetelmän käyttö on kuitenkin erittäin vaikeaa alhaisen suorituskyvyn vuoksi (pakkaus vaatii paljon aikaa).
  5. Hakbeom Jang; Channoh Kim, Jae W. Lee. Muuttuvan pituuden purkamisalgoritmien  käytännön spekulatiivinen rinnastaminen . Konferenssikielet, kääntäjät ja työkalut sulautetuille järjestelmille 2013 (20.–21.6.2013). - "Bzip2-tiedostomuoto määrittelee 48-bittisen mallin nimeltä maaginen otsikko (0x314159265359), joka ilmoittaa uuden pakatun lohkon alkamisesta." Haettu 3. heinäkuuta 2015. Arkistoitu alkuperäisestä 28. tammikuuta 2016.
  6. Dbzip2 - MediaWiki . Haettu 17. elokuuta 2018. Arkistoitu alkuperäisestä 18. elokuuta 2018.

Linkit