bzip2(1) General Commands Manual bzip2(1) NUME bzip2, bunzip2 - un program de comprimare a fiierelor cu sortare a blocurilor, v1.0.8 bzcat - decomprima fiierele la ieirea standard bzip2recover - recupereaza date din fiiere bzip2 deteriorate REZUMAT bzip2 [ -cdfkqstvzVL123456789 ] [ nume-fiiere ... ] bunzip2 [ -fkvsVL ] [ nume-fiiere ... ] bzcat [ -s ] [ nume-fiiere ... ] bzip2recover nume-fiiere DESCRIERE bzip2 comprima fiierele folosind algoritmul de comprimare a textului cu sortarea blocurilor Burrows-Wheeler i codificarea Huffman. Comprimarea este, in general, considerabil mai buna decat cea realizata de programele de comprimare mai convenionale bazate pe LZ77/LZ78 i se apropie de performanele familiei PPM de programe de comprimare statistice. Opiunile din linia de comanda sunt in mod deliberat foarte asemanatoare cu cele din GNU gzip, dar nu sunt identice. bzip2 ateapta o lista de nume de fiiere care sa insoeasca opiunile din linia de comanda. Fiecare fiier este inlocuit de o versiune comprimata a sa, cu numele ,,nume_original.bz2". Fiecare fiier comprimat are aceeai data de modificare, aceleai permisiuni i, daca este posibil, acelai proprietar ca i originalul corespunzator, astfel incat aceste proprietai sa poata fi restaurate corect in momentul decomprimarii. Gestionarea numelor de fiiere este superficiala, in sensul ca nu exista niciun mecanism de pastrare a numelor de fiiere originale, a permisiunilor, a proprietailor sau a datelor in sistemele de fiiere care nu au aceste concepte sau care au restricii serioase privind lungimea numelor de fiiere, cum ar fi MS-DOS. bzip2 i bunzip2 nu vor suprascrie in mod implicit fiierele existente. Daca dorii ca acest lucru sa se intample, specificai opiunea ,,-f". Daca nu se specifica niciun nume de fiier, bzip2 comprima de la intrarea standard la ieirea standard. In acest caz, bzip2 va refuza sa scrie ieirea comprimata pe un terminal, deoarece acest lucru ar fi complet incomprehensibil i, prin urmare, inutil. bunzip2 (sau bzip2 -d) decomprima toate fiierele specificate. Fiierele care nu au fost create de bzip2 vor fi detectate i ignorate, iar un avertisment va fi emis. bzip2 incearca sa ghiceasca numele de fiier pentru fiierul decomprimat din cel al fiierului comprimat, dupa cum urmeaza: nume-fiier.bz2 devine nume-fiier nume-fiier.bz devine nume-fiier nume-fiier.tbz2 devine nume-fiier.tar nume-fiier.tbz devine nume-fiier.tar un_alt-nume-fiier devine un_alt-nume-fiier.out Daca fiierul nu se termina cu una dintre terminaiile recunoscute, .bz2, .bz, .tbz2 sau .tbz, bzip2 se plange ca nu poate ghici numele fiierului original i folosete numele original cu .out ataat. Ca i in cazul comprimarii, daca nu se furnizeaza niciun nume de fiier, se produce decomprimarea de la intrarea standard la ieirea standard. bunzip2 va decomprima corect un fiier care este concatenarea a doua sau mai multe fiiere comprimate. Rezultatul este concatenarea fiierelor necomprimate corespunzatoare. De asemenea, este acceptata testarea integritaii (-t) fiierelor comprimate concatenate. De asemenea, putei comprima sau decomprima fiierele la ieirea standard prin utilizarea opiunii ,,-c". Mai multe fiiere pot fi comprimate i decomprimate astfel. Ieirile rezultate sunt introduse secvenial la ieirea standard (stdout). Comprimarea mai multor fiiere in acest mod genereaza un flux care conine mai multe reprezentari de fiiere comprimate. Un astfel de flux poate fi decomprimat corect numai de bzip2 versiunea 0.9.0 sau o versiune ulterioara. Versiunile anterioare ale bzip2 se vor opri dupa decomprimarea primului fiier din flux. bzcat (sau <>) decomprima toate fiierele specificate la ieirea standard. bzip2 va citi argumentele din variabilele de mediu BZIP2 i BZIP, in aceasta ordine i le va procesa inaintea oricaror argumente citite din linia de comanda. Acest lucru ofera o modalitate convenabila de a furniza argumente implicite. Comprimarea este intotdeauna efectuata, chiar daca fiierul comprimat este puin mai mare decat originalul. Fiierele cu mai puin de o suta de octei au tendina de a deveni mai mari, deoarece mecanismul de comprimare are un cost suplimentar constant de aproximativ 50 de octei. Datele aleatorii (inclusiv ieirea celor mai multor programe de comprimare a fiierelor) sunt codificate la aproximativ 8,05 bii pe octet, ceea ce ofera o expansiune de aproximativ 0,5%. Ca o autoverificare pentru protecia dumneavoastra, bzip2 utilizeaza CRC-uri pe 32 de bii pentru a se asigura ca versiunea decomprimata a unui fiier este identica cu originalul. Acest lucru protejeaza impotriva corupiei datelor comprimate i impotriva unor erori nedetectate in bzip2 (speram ca foarte puin probabil). ansele ca o corupie a datelor sa nu fie detectata sunt microscopice, aproximativ o ansa la patru miliarde pentru fiecare fiier procesat. Reinei, totui, ca verificarea are loc la decomprimare, deci va poate spune doar ca ceva nu este in regula. Nu va poate ajuta sa recuperai datele originale necomprimate. Putei utiliza bzip2recover pentru a incerca sa recuperai datele din fiierele deteriorate. Valori de returnare: 0 pentru o ieire normala, 1 pentru probleme de mediu (fiier nedescoperit, opiuni nevalide, erori de In/Ie, etc.), 2 pentru a indica un fiier comprimat corupt, 3 pentru o eroare de consistena interna (de exemplu, o eroare de programare) care a facut ca bzip2 sa intre in panica. OPIUNI -c --stdout Comprima sau decomprima la ieirea standard. -d --decompress Decomprimare forata. bzip2, bunzip2 i bzcat sunt de fapt acelai program, iar decizia cu privire la aciunile care trebuie intreprinse se ia in funcie de numele folosit. Aceasta opiune anuleaza acest mecanism i foreaza bzip2 sa decomprime. -z --compress Opiunea complementara a lui ,,-d": foreaza comprimarea, indiferent de numele invocarii. -t --test Verifica integritatea fiierului (fiierelor) specificat(e), dar nu le decomprima. Acest lucru efectueaza o decomprimare de proba i afieaza rezultatul. -f --force Foreaza suprascrierea fiierelor de ieire. In mod normal, bzip2 nu va suprascrie fiierele de ieire existente. De asemenea, foreaza bzip2 sa elimine legaturile dure catre fiiere, ceea ce altfel nu ar face. <> refuza in mod normal sa decomprime fiierele care nu au octeii de antet magic coreci. Cu toate acestea, daca este forat (-f), va trece astfel de fiiere nemodificate. Acesta este modul in care se comporta GNU gzip. -k --keep Pastreaza (nu terge) fiierele de intrare in timpul comprimarii sau decomprimarii. -s --small Reduce utilizarea memoriei, pentru comprimare, decomprimare i testare. Fiierele sunt decomprimate i testate utilizand un algoritm modificat care necesita doar 2,5 octei pentru fiecare octet de bloc. Acest lucru inseamna ca orice fiier poate fi decomprimat in 2300ko de memorie, dei la aproximativ jumatate din viteza normala. In timpul comprimarii, ,,-s" selecteaza o dimensiune a blocului de 200ko, ceea ce limiteaza utilizarea memoriei la aproximativ aceeai cifra, in detrimentul ratei de comprimare. Pe scurt, daca maina dvs. are puina memorie (8 megaoctei sau mai puin), utilizai ,,-s" pentru orice. Consultai seciunea GESTIONAREA MEMORIEI de mai jos. -q --quiet Suprima mesajele de avertizare neeseniale. Mesajele referitoare la erori de In/Ie i alte evenimente critice nu vor fi suprimate. -v --verbose Modul descriptiv -- afieaza raportul de comprimare pentru fiecare fiier procesat. Mai multe opiuni ,,-v" maresc nivelul de detaliere, generand o mulime de informaii care prezinta interes in primul rand in scopuri de diagnosticare. -L --license -V --version Afieaza versiunea software, termenii i condiiile de licena. -1 (sau --fast) to -9 (sau --best) Stabilete dimensiunea blocului la 100ko, 200ko ... 900ko la comprimare. Nu are niciun efect la decomprimare. Consultai seciunea GESTIONAREA MEMORIEI de mai jos. Opiunile alias ,,--fast" i ,,--best" sunt in primul rand pentru compatibilitatea cu GNU gzip. In special, ,,--fast" nu face ca lucrurile sa fie semnificativ mai rapide. Iar ,,--best" selecteaza pur i simplu comportamentul implicit. -- Trateaza toate argumentele ulterioare ca nume de fiiere, chiar daca acestea incep cu o liniua. Acest lucru se face pentru a putea trata fiiere cu nume care incep cu o liniua, de exemplu: bzip2 -- -numelefiierului-meu. --repetitive-fast --repetitive-best Aceste opiuni sunt redundante in versiunile 0.9.5 i superioare. In 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 imbunatait care face ca aceste opiuni sa devina irelevante. GESTIONAREA MEMORIEI bzip2 comprima fiierele mari in blocuri. Dimensiunea blocului afecteaza atat raportul de comprimare obinut, cat i cantitatea de memorie necesara pentru comprimare i decomprimare. Fanioanele de la -1 la -9 specifica dimensiunea blocului ca fiind de la 100.000 de octei la 900.000 de octei (valoarea implicita), respectiv. In momentul decomprimarii, dimensiunea blocului utilizat pentru comprimare este citita din antetul fiierului comprimat, iar bunzip2 ii aloca apoi suficienta memorie pentru a decomprima fiierul. Deoarece dimensiunile blocurilor sunt stocate in fiierele comprimate, rezulta ca fanioanele de la -1 la -9 sunt irelevante pentru decomprimare i, prin urmare, ignorate in timpul decomprimarii. Cerinele de comprimare i decomprimare, in octei, 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 comprimarii provine din primele doua sau trei sute de k de dimensiune a blocului, un fapt de care merita sa se ina cont atunci cand se utilizeaza bzip2 pe maini mici. De asemenea, este important de apreciat faptul ca necesarul de memorie pentru decomprimare este stabilit in momentul comprimarii prin alegerea dimensiunii blocului. Pentru fiierele comprimate cu dimensiunea implicita a blocurilor de 900ko, bunzip2 va avea nevoie de aproximativ 3700 koctei pentru a le decomprima. Pentru a permite decomprimarea oricarui fiier pe o maina de 4 megaoctei, bunzip2 are o opiune care permite decomprimarea folosind aproximativ jumatate din aceasta cantitate de memorie, adica aproximativ 2300 koctei. Viteza de decomprimare este, de asemenea, injumataita, aa ca ar trebui sa folosii aceasta opiune numai atunci cand este necesar. Opiunea relevanta este ,,-s". In general, incercai sa utilizai cea mai mare dimensiune a blocului pe care o permit constrangerile de memorie, deoarece astfel se maximizeaza comprimarea obinuta. Viteza de comprimare i decomprimare nu este practic afectata de dimensiunea blocului. Un alt aspect important se aplica fiierelor care incap intr-un singur bloc - ceea ce inseamna ca majoritatea fiierelor pe care le vei intalni utilizeaza o dimensiune mare a blocului. Cantitatea de memorie reala atinsa este proporionala cu dimensiunea fiierului, deoarece fiierul este mai mic decat un bloc. De exemplu, comprimarea unui fiier cu o lungime de 20 000 de octei cu fanionul ,,-9" va determina ca programul sa aloce aproximativ 7600k de memorie, dar va atinge doar 400k + 20000 * 8 = 560 koctei din aceasta. In mod similar, la decomprimare programul va aloca 3700k, dar va atinge doar 100k + 20000 * 4 = 180 koctei. Iata un tabel care rezuma utilizarea maxima a memoriei pentru diferite dimensiuni ale blocurilor. De asemenea, este inregistrata dimensiunea totala comprimata pentru 14 fiiere din Corpusul de comprimare a textului din Calgary, care totalizeaza 3 141 622 de octei. Aceasta coloana ofera o idee despre modul in care variaza comprimarea in funcie de dimensiunea blocului. Aceste cifre tind sa subestimeze avantajul dimensiunilor mai mari ale blocurilor pentru fiierele mari, deoarece Corpusul este dominat de fiiere 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 FIIERE DETERIORATE bzip2 comprima fiierele in blocuri, de obicei cu o lungime de 900koctei. Fiecare bloc este tratat independent. Daca o eroare de suport de date sau de transmisie cauzeaza deteriorarea unui fiier .bz2 cu mai multe blocuri, este posibil sa se recupereze datele din blocurile nedeteriorate din fiier. Reprezentarea comprimata a fiecarui bloc este delimitata de un model pe 48 de bii, ceea ce face posibila gasirea limitelor blocurilor cu o certitudine rezonabila. De asemenea, fiecare bloc poarta propriul CRC pe 32 de bii, astfel incat blocurile deteriorate pot fi distinse de cele nedeteriorate. bzip2recover este un program simplu al carui scop este de a cauta blocuri in fiierele .bz2 i de a scrie fiecare bloc in propriul sau fiier .bz2. Putei utiliza apoi bzip2 -t pentru a testa integritatea fiierelor rezultate i pentru a le decomprima pe cele care nu sunt deteriorate. bzip2recover primete un singur argument, numele fiierului deteriorat, i scrie un numar de fiiere ,,rec00001fiier.bz2", ,,rec00002fiier.bz2", etc., care conin blocurile extrase. Numele fiierelor de ieire sunt concepute astfel incat utilizarea caracterelor joker in procesarea ulterioara - de exemplu, < date_recuperate>> -- sa proceseze fiierele in ordinea corecta. bzip2recover ar trebui sa fie cel mai util in cazul fiierelor .bz2 de mari dimensiuni, deoarece acestea vor conine multe blocuri. In mod evident, este inutil sa il utilizai pentru fiierele deteriorate cu un singur bloc, deoarece un bloc deteriorat nu poate fi recuperat. Daca dorii sa reducei la minimum orice pierdere poteniala de date din cauza erorilor de suport de date sau de transmisie, putei lua in considerare comprimarea cu o dimensiune mai mica a blocurilor. NOTE PRIVIND PERFORMANTA Faza de sortare a comprimarii reunete irurile similare din fiier. Din acest motiv, fiierele care conin iruri foarte lungi de simboluri repetate, cum ar fi ,,aabaabaabaabaab ..." (care se repeta de cateva sute de ori) pot fi comprimate mai lent decat in mod normal. In aceasta privina, versiunile 0.9.5 i versiunile ulterioare se descurca mult mai bine decat versiunile anterioare. Raportul dintre timpul de compresie in cel mai rau caz i cel mediu este de aproximativ 10:1. Pentru versiunile anterioare, aceasta cifra era mai degraba de 100:1. Daca dorii, putei utiliza opiunea ,,-vvvvvv" pentru a monitoriza progresul in detaliu. Viteza de decomprimare nu este afectata de aceste fenomene. bzip2 aloca, de obicei, mai muli megaoctei de memorie in care sa opereze i apoi incarca peste tot intr-un mod destul de aleatoriu. Acest lucru inseamna ca performana, atat pentru comprimare, cat i pentru decomprimare, este determinata in mare masura de viteza cu care maina dumneavoastra poate sa deserveasca ratarile de cache. Din aceasta cauza, s-a observat ca mici modificari ale codului pentru a reduce rata de ratare a memoriei au adus imbunatairi disproporionat de mari ale performanei. Imi imaginez ca bzip2 va avea cele mai bune performane pe mainile cu memorii cache foarte mari. AVERTISMENTE Mesajele de eroare de In/Ie nu sunt atat de utile pe cat ar putea fi. bzip2 se straduiete sa detecteze erorile de In/Ie i sa iasa curat, dar detaliile despre care este problema par uneori destul de inelatoare. Aceasta pagina de manual se refera la versiunea 1.0.8 a bzip2. Datele comprimate create de aceasta versiune sunt in intregime 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 urmatoarea excepie: 0.9.0 i versiunile ulterioare pot decomprima corect mai multe fiiere comprimate concatenate. 0.1pl2 nu poate face acest lucru; se va opri dupa ce a decomprimat doar primul fiier din flux. Versiunile bzip2recover anterioare versiunii 1.0.2 foloseau numere intregi pe 32 de bii pentru a reprezenta poziii de bii in fiierele comprimate, astfel incat nu puteau gestiona fiiere comprimate cu o lungime mai mare de 512 megaoctei. Versiunile 1.0.2 i versiunile ulterioare utilizeaza numere intregi pe 64 de bii pe unele platforme care le accepta (obiective suportate de GNU i Windows). Pentru a stabili daca <> a fost construit sau nu cu o astfel de limitare, rulai-l fara argumente. In orice caz, va putei construi o versiune nelimitata daca o putei recompila cu fanionul MaybeUInt64 definit ca fiind un intreg fara semn pe 64 de bii. AUTOR Julian Seward, jseward@acm.org. https://sourceware.org/bzip2/ Ideile incorporate in bzip2 se datoreaza (cel puin) urmatoarelor 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 structurata din bzip, original i pentru numeroasele imbunatairi), precum i Alistair Moffat, Radford Neal i Ian Witten (pentru codificatorul aritmetic din bzip). Le sunt foarte indatorat pentru ajutorul, sprijinul i sfaturile lor. Consultai manualul din distribuia sursei pentru indicatoare catre sursele de documentaie. Christian von Roques m-a incurajat sa caut algoritmi de sortare mai rapizi, astfel incat sa accelerez comprimarea. Bela Lubkin m-a incurajat sa imbunataesc performana de comprimare in cel mai rau caz. Donna Robinson a ,,XMLizat" documentaia. Scripturile bz* sunt derivate din cele ale GNU gzip. Muli oameni au trimis plasturi (corecii i imbunatairi), au ajutat cu probleme de portabilitate, au imprumutat maini, au dat sfaturi i au fost, in general, de ajutor. TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . bzip2(1)