Scroll to navigation

bzip2(1) General Commands Manual bzip2(1)

NUME

bzip2, bunzip2 - un program de comprimare a fișierelor cu sortare a blocurilor, v1.0.8
bzcat - decomprimă fișierele la ieșirea standard
bzip2recover - recuperează date din fișiere bzip2 deteriorate

SINOPSIS

bzip2 [ -cdfkqstvzVL123456789 ] [ nume-fișiere ... ]
bunzip2 [ -fkvsVL ] [ nume-fișiere ... ]
bzcat [ -s ] [ nume-fișiere ... ]
bzip2recover nume-fișiere

DESCRIERE

bzip2 comprimă fișierele folosind algoritmul de comprimare a textului cu sortarea blocurilor Burrows-Wheeler și codificarea Huffman. Comprimarea este, în general, considerabil mai bună decât cea realizată de programele de comprimare mai convenționale bazate pe LZ77/LZ78 și se apropie de performanțele familiei PPM de programe de comprimare statistice.

Opțiunile din linia de comandă sunt în mod deliberat foarte asemănătoare cu cele din GNU gzip, dar nu sunt identice.

bzip2 așteaptă o listă de nume de fișiere care să însoțească opțiunile din linia de comandă. Fiecare fișier este înlocuit de o versiune comprimată a sa, cu numele „nume_original.bz2”. Fiecare fișier comprimat are aceeași dată de modificare, aceleași permisiuni și, dacă este posibil, același proprietar ca și originalul corespunzător, astfel încât aceste proprietăți să poată fi restaurate corect în momentul decomprimării. Gestionarea numelor de fișiere este superficială, în sensul că nu există niciun mecanism de păstrare a numelor de fișiere originale, a permisiunilor, a proprietăților sau a datelor în sistemele de fișiere care nu au aceste concepte sau care au restricții serioase privind lungimea numelor de fișiere, cum ar fi MS-DOS.

bzip2 și bunzip2 nu vor suprascrie în mod implicit fișierele existente. Dacă doriți ca acest lucru să se întâmple, specificați opțiunea „-f”.

Dacă nu se specifică niciun nume de fișier, bzip2 comprimă de la intrarea standard la ieșirea standard. În acest caz, bzip2 va refuza să scrie ieșirea comprimată pe un terminal, deoarece acest lucru ar fi complet incomprehensibil și, prin urmare, inutil.

bunzip2 (sau bzip2 -d) decomprimă toate fișierele specificate. Fișierele care nu au fost create de bzip2 vor fi detectate și ignorate, iar un avertisment va fi emis. bzip2 încearcă să ghicească numele de fișier pentru fișierul decomprimat din cel al fișierului comprimat, după cum urmează:


nume-fișier.bz2 devine nume-fișier
nume-fișier.bz devine nume-fișier
nume-fișier.tbz2 devine nume-fișier.tar
nume-fișier.tbz devine nume-fișier.tar
un_alt-nume-fișier devine un_alt-nume-fișier.out

Dacă fișierul nu se termină cu una dintre terminațiile recunoscute, .bz2, .bz, .tbz2 sau .tbz, bzip2 se plânge că nu poate ghici numele fișierului original și folosește numele original cu .out atașat.

Ca și în cazul comprimării, dacă nu se furnizează niciun nume de fișier, se produce decomprimarea de la intrarea standard la ieșirea standard.

bunzip2 va decomprima corect un fișier care este concatenarea a două sau mai multe fișiere comprimate. Rezultatul este concatenarea fișierelor necomprimate corespunzătoare. De asemenea, este acceptată testarea integrității (-t) fișierelor comprimate concatenate.

De asemenea, puteți comprima sau decomprima fișierele la ieșirea standard prin utilizarea opțiunii „-c”. Mai multe fișiere pot fi comprimate și decomprimate astfel. Ieșirile rezultate sunt introduse secvențial la ieșirea standard (stdout). Comprimarea mai multor fișiere în acest mod generează un flux care conține mai multe reprezentări de fișiere comprimate. Un astfel de flux poate fi decomprimat corect numai de bzip2 versiunea 0.9.0 sau o versiune ulterioară. Versiunile anterioare ale bzip2 se vor opri după decomprimarea primului fișier din flux.

bzcat (sau «bzip2 -dc») decomprimă toate fișierele specificate la ieșirea standard.

bzip2 va citi argumentele din variabilele de mediu BZIP2 și BZIP, în această ordine și le va procesa înaintea oricăror argumente citite din linia de comandă. Acest lucru oferă o modalitate convenabilă de a furniza argumente implicite.

Comprimarea este întotdeauna efectuată, chiar dacă fișierul comprimat este puțin mai mare decât originalul. Fișierele cu mai puțin de o sută de octeți au tendința de a deveni mai mari, deoarece mecanismul de comprimare are un cost suplimentar constant de aproximativ 50 de octeți. Datele aleatorii (inclusiv ieșirea celor mai multor programe de comprimare a fișierelor) sunt codificate la aproximativ 8,05 biți pe octet, ceea ce oferă o expansiune de aproximativ 0,5%.

Ca o autoverificare pentru protecția dumneavoastră, bzip2 utilizează CRC-uri pe 32 de biți pentru a se asigura că versiunea decomprimată a unui fișier este identică cu originalul. Acest lucru protejează împotriva corupției datelor comprimate și împotriva unor erori nedetectate în bzip2 (sperăm că foarte puțin probabil). Șansele ca o corupție a datelor să nu fie detectată sunt microscopice, aproximativ o șansă la patru miliarde pentru fiecare fișier procesat. Rețineți, totuși, că verificarea are loc la decomprimare, deci vă poate spune doar că ceva nu este în regulă. Nu vă poate ajuta să recuperați datele originale necomprimate. Puteți utiliza bzip2recover pentru a încerca să recuperați datele din fișierele deteriorate.

Valori de returnare: 0 pentru o ieșire normală, 1 pentru probleme de mediu (fișier nedescoperit, opțiuni nevalide, erori de In/Ieș, etc.), 2 pentru a indica un fișier comprimat corupt, 3 pentru o eroare de consistență internă (de exemplu, o eroare de programare) care a făcut ca bzip2 să intre în panică.

OPȚIUNI

Comprimă sau decomprimă la ieșirea standard.
Decomprimare forțată. bzip2, bunzip2 și bzcat sunt de fapt același program, iar decizia cu privire la acțiunile care trebuie întreprinse se ia în funcție de numele folosit. Această opțiune anulează acest mecanism și forțează bzip2 să decomprime.
Opțiunea complementară a lui „-d”: forțează comprimarea, indiferent de numele invocării.
Verifică integritatea fișierului (fișierelor) specificat(e), dar nu le decomprimă. Acest lucru efectuează o decomprimare de probă și afișează rezultatul.
Forțează suprascrierea fișierelor de ieșire. În mod normal, bzip2 nu va suprascrie fișierele de ieșire existente. De asemenea, forțează bzip2 să elimine legăturile dure către fișiere, ceea ce altfel nu ar face.

«bzip2» refuză în mod normal să decomprime fișierele care nu au octeții de antet magic corecți. Cu toate acestea, dacă este forțat (-f), va trece astfel de fișiere nemodificate. Acesta este modul în care se comportă GNU gzip.

Păstrează (nu șterge) fișierele de intrare în timpul comprimării sau decomprimării.
Reduce utilizarea memoriei, pentru comprimare, decomprimare și testare. Fișierele sunt decomprimate și testate utilizând un algoritm modificat care necesită doar 2,5 octeți pentru fiecare octet de bloc. Acest lucru înseamnă că orice fișier poate fi decomprimat în 2300ko de memorie, deși la aproximativ jumătate din viteza normală.

În timpul comprimării, „-s” selectează o dimensiune a blocului de 200ko, ceea ce limitează utilizarea memoriei la aproximativ aceeași cifră, în detrimentul ratei de comprimare. Pe scurt, dacă mașina dvs. are puțină memorie (8 megaocteți sau mai puțin), utilizați „-s” pentru orice. Consultați secțiunea GESTIONAREA MEMORIEI de mai jos.

Suprimă mesajele de avertizare neesențiale. Mesajele referitoare la erori de In/Ieș și alte evenimente critice nu vor fi suprimate.
Modul descriptiv -- afișează raportul de comprimare pentru fiecare fișier procesat. Mai multe opțiuni „-v” măresc nivelul de detaliere, generând o mulțime de informații care prezintă interes în primul rând în scopuri de diagnosticare.
Afișează versiunea software, termenii și condițiile de licență.
-1 (sau --fast) to -9 (sau --best)
Stabilește dimensiunea blocului la 100ko, 200ko ... 900ko la comprimare. Nu are niciun efect la decomprimare. Consultați secțiunea GESTIONAREA MEMORIEI de mai jos. Opțiunile alias „--fast” și „--best” sunt în primul rând pentru compatibilitatea cu GNU gzip. În special, „--fast” nu face ca lucrurile să fie semnificativ mai rapide. Iar „--best” selectează pur și simplu comportamentul implicit.
--
Tratează toate argumentele ulterioare ca nume de fișiere, chiar dacă acestea încep cu o liniuță. Acest lucru se face pentru a putea trata fișiere cu nume care încep cu o liniuță, de exemplu: bzip2 -- -numelefișierului-meu.
Aceste opțiuni sunt redundante în versiunile 0.9.5 și superioare. În versiunile anterioare, acestea ofereau un control aproximativ asupra comportamentului algoritmului de sortare, ceea ce era uneori util. Versiunile 0.9.5 și ulterioare dispun de un algoritm îmbunătățit care face ca aceste opțiuni să devină irelevante.

GESTIONAREA MEMORIEI

bzip2 comprimă fișierele mari în blocuri. Dimensiunea blocului afectează atât raportul de comprimare obținut, cât și cantitatea de memorie necesară pentru comprimare și decomprimare. Fanioanele de la -1 la -9 specifică dimensiunea blocului ca fiind de la 100.000 de octeți la 900.000 de octeți (valoarea implicită), respectiv. În momentul decomprimării, dimensiunea blocului utilizat pentru comprimare este citită din antetul fișierului comprimat, iar bunzip2 își alocă apoi suficientă memorie pentru a decomprima fișierul. Deoarece dimensiunile blocurilor sunt stocate în fișierele comprimate, rezultă că fanioanele de la -1 la -9 sunt irelevante pentru decomprimare și, prin urmare, ignorate în timpul decomprimării.

Cerințele de comprimare și decomprimare, în octeți, pot fi estimate astfel:


Comprimare: 400k + ( 8 x dimensiunea blocului )


Decomprimare: 100k + ( 4 x dimensiunea blocului ), sau
100k + ( 2,5 x dimensiunea blocului )

Dimensiunile mai mari ale blocurilor dau randamente marginale care scad rapid. Cea mai mare parte a comprimării provine din primele două sau trei sute de k de dimensiune a blocului, un fapt de care merită să se țină cont atunci când se utilizează bzip2 pe mașini mici. De asemenea, este important de apreciat faptul că necesarul de memorie pentru decomprimare este stabilit în momentul comprimării prin alegerea dimensiunii blocului.

Pentru fișierele comprimate cu dimensiunea implicită a blocurilor de 900ko, bunzip2 va avea nevoie de aproximativ 3700 kocteți pentru a le decomprima. Pentru a permite decomprimarea oricărui fișier pe o mașină de 4 megaocteți, bunzip2 are o opțiune care permite decomprimarea folosind aproximativ jumătate din această cantitate de memorie, adică aproximativ 2300 kocteți. Viteza de decomprimare este, de asemenea, înjumătățită, așa că ar trebui să folosiți această opțiune numai atunci când este necesar. Opțiunea relevantă este „-s”.

În general, încercați să utilizați cea mai mare dimensiune a blocului pe care o permit constrângerile de memorie, deoarece astfel se maximizează comprimarea obținută. Viteza de comprimare și decomprimare nu este practic afectată de dimensiunea blocului.

Un alt aspect important se aplică fișierelor care încap într-un singur bloc - ceea ce înseamnă că majoritatea fișierelor pe care le veți întâlni utilizează o dimensiune mare a blocului. Cantitatea de memorie reală atinsă este proporțională cu dimensiunea fișierului, deoarece fișierul este mai mic decât un bloc. De exemplu, comprimarea unui fișier cu o lungime de 20 000 de octeți cu fanionul „-9” va determina ca programul să aloce aproximativ 7600k de memorie, dar va atinge doar 400k + 20000 * 8 = 560 kocteți din aceasta. În mod similar, la decomprimare programul va aloca 3700k, dar va atinge doar 100k + 20000 * 4 = 180 kocteți.

Iată un tabel care rezumă utilizarea maximă a memoriei pentru diferite dimensiuni ale blocurilor. De asemenea, este înregistrată dimensiunea totală comprimată pentru 14 fișiere din Corpusul de comprimare a textului din Calgary, care totalizează 3 141 622 de octeți. Această coloană oferă o idee despre modul în care variază comprimarea în funcție de dimensiunea blocului. Aceste cifre tind să subestimeze avantajul dimensiunilor mai mari ale blocurilor pentru fișierele mari, deoarece Corpusul este dominat de fișiere mai mici.


Utilizare Utilizare Utilizare Corpus
Fanion comprimare decomprimare -s decomprimare Dim.


-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

RECUPERAREA DATELOR DIN FIȘIERE DETERIORATE

bzip2 comprimă fișierele în blocuri, de obicei cu o lungime de 900kocteți. Fiecare bloc este tratat independent. Dacă o eroare de suport de date sau de transmisie cauzează deteriorarea unui fișier .bz2 cu mai multe blocuri, este posibil să se recupereze datele din blocurile nedeteriorate din fișier.

Reprezentarea comprimată a fiecărui bloc este delimitată de un model pe 48 de biți, ceea ce face posibilă găsirea limitelor blocurilor cu o certitudine rezonabilă. De asemenea, fiecare bloc poartă propriul CRC pe 32 de biți, astfel încât blocurile deteriorate pot fi distinse de cele nedeteriorate.

bzip2recover este un program simplu al cărui scop este de a căuta blocuri în fișierele .bz2 și de a scrie fiecare bloc în propriul său fișier .bz2. Puteți utiliza apoi bzip2 -t pentru a testa integritatea fișierelor rezultate și pentru a le decomprima pe cele care nu sunt deteriorate.

bzip2recover primește un singur argument, numele fișierului deteriorat, și scrie un număr de fișiere „rec00001fișier.bz2”, „rec00002fișier.bz2”, etc., care conțin blocurile extrase. Numele fișierelor de ieșire sunt concepute astfel încât utilizarea caracterelor joker în procesarea ulterioară - de exemplu, «bzip2 -dc rec*file.bz2 > date_recuperate» -- să proceseze fișierele în ordinea corectă.

bzip2recover ar trebui să fie cel mai util în cazul fișierelor .bz2 de mari dimensiuni, deoarece acestea vor conține multe blocuri. În mod evident, este inutil să îl utilizați pentru fișierele deteriorate cu un singur bloc, deoarece un bloc deteriorat nu poate fi recuperat. Dacă doriți să reduceți la minimum orice pierdere potențială de date din cauza erorilor de suport de date sau de transmisie, puteți lua în considerare comprimarea cu o dimensiune mai mică a blocurilor.

NOTE PRIVIND PERFORMANTA

Faza de sortare a comprimării reunește șirurile similare din fișier. Din acest motiv, fișierele care conțin șiruri foarte lungi de simboluri repetate, cum ar fi „aabaabaabaabaab ...” (care se repetă de câteva sute de ori) pot fi comprimate mai lent decât în mod normal. În această privință, versiunile 0.9.5 și versiunile ulterioare se descurcă mult mai bine decât versiunile anterioare. Raportul dintre timpul de compresie în cel mai rău caz și cel mediu este de aproximativ 10:1. Pentru versiunile anterioare, această cifră era mai degrabă de 100:1. Dacă doriți, puteți utiliza opțiunea „-vvvvvv” pentru a monitoriza progresul în detaliu.

Viteza de decomprimare nu este afectată de aceste fenomene.

bzip2 alocă, de obicei, mai mulți megaocteți de memorie în care să opereze și apoi încarcă peste tot într-un mod destul de aleatoriu. Acest lucru înseamnă că performanța, atât pentru comprimare, cât și pentru decomprimare, este determinată în mare măsură de viteza cu care mașina dumneavoastră poate să deservească ratările de cache. Din această cauză, s-a observat că mici modificări ale codului pentru a reduce rata de ratare a memoriei au adus îmbunătățiri disproporționat de mari ale performanței. Îmi imaginez că bzip2 va avea cele mai bune performanțe pe mașinile cu memorii cache foarte mari.

AVERTISMENTE

Mesajele de eroare de In/Ieș nu sunt atât de utile pe cât ar putea fi. bzip2 se străduiește să detecteze erorile de In/Ieș și să iasă curat, dar detaliile despre care este problema par uneori destul de înșelătoare.

Această pagină de manual se referă la versiunea 1.0.8 a bzip2. Datele comprimate create de această versiune sunt în întregime compatibile cu versiunile publice anterioare, versiunile 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.1, 1.0.2 și mai sus, dar cu următoarea excepție: 0.9.0 și versiunile ulterioare pot decomprima corect mai multe fișiere comprimate concatenate. 0.1pl2 nu poate face acest lucru; se va opri după ce a decomprimat doar primul fișier din flux.

Versiunile bzip2recover anterioare versiunii 1.0.2 foloseau numere întregi pe 32 de biți pentru a reprezenta poziții de biți în fișierele comprimate, astfel încât nu puteau gestiona fișiere comprimate cu o lungime mai mare de 512 megaocteți. Versiunile 1.0.2 și versiunile ulterioare utilizează numere întregi pe 64 de biți pe unele platforme care le acceptă (obiective suportate de GNU și Windows). Pentru a stabili dacă «bzip2recover» a fost construit sau nu cu o astfel de limitare, rulați-l fără argumente. În orice caz, vă puteți construi o versiune nelimitată dacă o puteți recompila cu fanionul MaybeUInt64 definit ca fiind un întreg fără semn pe 64 de biți.

AUTOR

Julian Seward, jseward@acm.org.

https://sourceware.org/bzip2/

Ideile încorporate în bzip2 se datorează (cel puțin) următoarelor persoane: Michael Burrows și David Wheeler (pentru transformarea de sortare a blocurilor), David Wheeler (din nou, pentru codificatorul Huffman), Peter Fenwick (pentru modelul de codificare structurată din bzip, original și pentru numeroasele îmbunătățiri), precum și Alistair Moffat, Radford Neal și Ian Witten (pentru codificatorul aritmetic din bzip). Le sunt foarte îndatorat pentru ajutorul, sprijinul și sfaturile lor. Consultați manualul din distribuția sursei pentru indicatoare către sursele de documentație. Christian von Roques m-a încurajat să caut algoritmi de sortare mai rapizi, astfel încât să accelerez comprimarea. Bela Lubkin m-a încurajat să îmbunătățesc performanța de comprimare în cel mai rău caz. Donna Robinson a „XMLizat” documentația. Scripturile bz* sunt derivate din cele ale GNU gzip. Mulți oameni au trimis plasturi (corecții și îmbunătățiri), au ajutat cu probleme de portabilitate, au împrumutat mașini, au dat sfaturi și au fost, în general, de ajutor.

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.