XZ(1) Utilitai XZ XZ(1) NUME xz, unxz, xzcat, lzma, unlzma, lzcat - Comprima sau decomprima fiiere .xz i .lzma REZUMAT xz [opiune...] [fiier...] ALIAS COMENZI unxz este echivalent cu xz --decompress. xzcat este echivalent cu xz --decompress --stdout. lzma este echivalent cu xz --format=lzma. unlzma este echivalent cu xz --format=lzma --decompress. lzcat este echivalent cu xz --format=lzma --decompress --stdout. Cand scriei scripturi care trebuie sa decomprime fiiere, este recomandat sa folosii intotdeauna comanda xz cu argumentele adecvate (xz -d sau xz -dc) in loc de comenzile unxz i xzcat. DESCRIERE xz este un instrument de comprimare a datelor de uz general cu sintaxa de linie de comanda similara cu gzip(1) i bzip2(1). Formatul de fiier nativ este formatul .xz, dar formatul vechi .lzma folosit de LZMA Utils i fluxurile comprimate brute fara anteturi de format container sunt de asemenea acceptate. In plus, este acceptata decomprimarea formatului .lz folosit de lzip. xz comprima sau decomprima fiecare fiier in funcie de modul de operare selectat. Daca nu sunt date fiiere sau fiier este -, xz citete de la intrarea standard i scrie datele procesate la ieirea standard. xz va refuza (afieaza o eroare i omite fiier) sa scrie date comprimate la ieirea standard daca este un terminal. In mod similar, xz va refuza sa citeasca datele comprimate de la intrarea standard daca este un terminal. Cu excepia cazului in care este specificata opiunea --stdout, fiierele altele decat - sunt scrise intr-un fiier nou al carui nume este derivat din numele fiierului sursa: o La comprimare, sufixul formatului de fiier inta (.xz sau .lzma) este ataat la numele fiierului sursa pentru a se obine numele fiierului inta. o La decomprimare, sufixul .xz, .lzma sau .lz este eliminat din numele fiierului pentru a se obine numele fiierului inta. xz recunoate i sufixele .txz i .tlz i le inlocuiete cu sufixul .tar. Daca fiierul inta exista deja, este afiata o eroare i fiier este omis. Cu excepia cazului in care scrie la ieirea standard, xz va afia un avertisment i va omite fiierul daca se aplica oricare dintre urmatoarele: o Fiierul nu este un fiier obinuit. Legaturile simbolice nu sunt urmate i, prin urmare, nu sunt considerate fiiere obinuite. o Fiierul are mai mult de o legatura dura. o Fiierul are activat bitul <>, <> sau cel lipicios(sticky). o Modul de operare este stabilit la comprimare i fiier are deja un sufix al formatului de fiier inta (.xz sau .txz cand se comprima in formatul .xz i .lzma sau .tlz cand se comprima in formatul .lzma). o Modul de operare este stabilit la decomprimare i fiierul nu are un sufix al niciunui format de fiier acceptat (.xz, .txz, .lzma, .tlz, sau .lz). Dupa comprimarea sau decomprimarea cu succes a fiierului, xz copiaza proprietarul, grupul, permisiunile, timpul de acces i timpul de modificare din fiierul sursa in fiierul inta. Daca copierea grupului eueaza, permisiunile sunt modificate astfel incat fiierul inta sa nu devina accesibil utilizatorilor care nu aveau permisiunea de a accesa fiierul sursa. xz nu accepta inca copierea altor metadate, cum ar fi listele de control al accesului sau atributele extinse. Odata ce fiierul inta a fost inchis cu succes, fiierul sursa este eliminat daca nu a fost specificata opiunea --keep. Fiierul sursa nu este niciodata eliminat daca rezultatul este scris la ieirea standard sau daca apare o eroare. Trimiterea unui semnal SIGINFO sau SIGUSR1 catre procesul xz face ca acesta sa imprime informaii despre progres la ieirea de eroare standard. Acest lucru are o utilizare limitata, deoarece atunci cand ieirea de eroare standard este un terminal, folosind opiunea --verbose va afia un indicator de progres de actualizare automata. Utilizarea memoriei Cantitatea de memorie utilizata de xz variaza de la cateva sute de kilooctei la caiva gigaoctei, in funcie de opiunile de comprimare. Opiunile utilizate la comprimarea unui fiier determina cerinele de memorie ale instrumentului de decomprimare. De obicei, instrumentul de decomprimare are nevoie de 5% pana la 20% din cantitatea de memorie de care a avut nevoie instrumentul de comprimare la crearea fiierului. De exemplu, decomprimarea unui fiier creat cu xz -9 necesita in prezent 65Mio de memorie. Totui, este posibil sa avei fiiere .xz care necesita caiva gigaoctei de memorie pentru decomprimare. In special utilizatorii de sisteme mai vechi pot considera deranjanta posibilitatea unei utilizari foarte mari a memoriei. Pentru a preveni surprizele neplacute, xz are incorporat un limitator de utilizare a memoriei, care este dezactivat implicit. In timp ce unele sisteme de operare ofera modalitai de a limita utilizarea memoriei proceselor, bazarea pe aceasta nu a fost considerata a fi suficient de flexibila (de exemplu, utilizarea ulimit(1) pentru a limita memoria virtuala tinde sa paralizeze mmap(2)). Limitatorul de utilizare a memoriei poate fi activat cu opiunea din linia de comanda --memlimit=limita. Adesea este mai convenabil sa activai limitatorul in mod implicit prin definirea variabilei de mediu XZ_DEFAULTS, de exemplu, XZ_DEFAULTS=--memlimit=150MiB. Este posibil sa stabilii limitele separat pentru comprimare i decomprimare folosind --memlimit-compress=limita i --memlimit-decompress=limita. Utilizarea acestor doua opiuni in afara XZ_DEFAULTS este foarte rar utila, deoarece o singura rulare a xz nu poate face atat comprimarea, cat i decomprimarea i --memlimit=limita (sau -M limita ) este mai scurt de tastat pe linia de comanda. Daca limita de utilizare a memoriei specificata este depaita la decomprimare, xz va afia o eroare i decomprimarea fiierului va eua. Daca limita este depaita la comprimare, xz va incerca sa reduca valorile stabilite astfel incat limita sa nu mai fie depaita (cu excepia cazului in care se utilizeaza opiunea --format=raw sau --no-adjust). In acest fel, operaiunea nu va eua decat daca limita stabilita este foarte mica. Scalarea valorilor stabilite se face in pai care nu se potrivesc cu valorile prestabilite ale nivelului de comprimare, de exemplu, daca limita este doar puin mai mica decat cantitatea necesara pentru xz -9, valorile stabilite vor fi reduse doar puin , nu pana la valoarea prestabilita a lui xz -8. Concatenare i completare (prin umplere cu octei nuli) cu fiiere .xz Este posibil sa concatenai fiierele .xz aa cum sunt. xz va decomprima astfel de fiiere ca i cum ar fi un singur fiier .xz. Este posibil sa se introduca umplutura intre parile concatenate sau dupa ultima parte. Umplutura trebuie sa fie compusa din octei nuli, iar dimensiunea umpluturii trebuie sa fie un multiplu de patru octei. Acest lucru poate fi util, de exemplu, daca fiierul .xz este stocat pe un mediu care masoara dimensiunile fiierelor in blocuri de 512 de octei. Concatenarea i completarea nu sunt permise cu fiierele .lzma sau fluxurile brute. OPIUNI Sufixe de numere intregi i valori speciale In majoritatea locurilor in care este de ateptat un numar intreg ca argument, un sufix opional este acceptat pentru a indica cu uurina numerele intregi mari. Nu trebuie sa existe spaiu intre numarul intreg i sufix. KiB Inmulete numarul intreg cu 1.024 (2^10). Ki, k, kB, K i KB sunt acceptate ca sinonime pentru KiB. MiB Inmulete numarul intreg cu 1,048,576 (2^20). Mi, m, M, i MB sunt acceptate ca sinonime pentru MiB. GiB Inmulete numarul intreg cu 1,073,741,824 (2^30). Gi, g, G, i GB sunt acceptate ca sinonime pentru GiB. Valoarea speciala max poate fi utilizata pentru a indica valoarea maxima intreaga suportata de opiune. Mod de operare Daca sunt date mai multe opiuni de mod de funcionare, ultima dintre ele, este cea care va avea efect. -z, --compress Comprimare. Acesta este modul de operare implicit atunci cand nu este specificata nicio opiune de mod de funcionare i nici un alt mod de operare nu este implicat din numele comenzii (de exemplu, unxz implica --decompress). -d, --decompress, --uncompress Decomprimare. -t, --test Testeaza integritatea fiierelor comprimate. Aceasta opiune este echivalenta cu --decompress --stdout cu excepia faptului ca datele decomprimate sunt inlaturate in loc sa fie scrise la ieirea standard. Nu sunt create sau eliminate fiiere. -l, --list Afieaza informaii despre fiiere comprimate. Nu are loc nicio decomprimare la ieire i nu sunt create sau eliminate fiiere. In modul lista, programul nu poate citi datele comprimate din intrarea standard sau din alte surse care nu pot fi cautate. Listarea implicita arata informaii de baza despre fiiere, cate un fiier pe linie. Pentru a obine informaii mai detaliate, utilizai i opiunea --verbose. Pentru i mai multe informaii, utilizai opiunea --verbose de doua ori, dar reinei ca acest lucru poate fi lent, deoarece obinerea tuturor informaiilor suplimentare necesita multe cautari. Laimea ieirii detaliate depaete 80 de caractere, deci canalizarea ieirii catre, de exemplu, less -S poate fi convenabila daca terminalul nu este suficient de lat. Ieirea exacta poate varia intre versiunile xz i diferitele localizari(configurarile regionale). Pentru ieiri care pot fi citite de maina, ar trebui utilizata opiunea --robot --list. Modificatori de operare -k, --keep Nu terge fiierele de intrare. Incepand cu xz 5.2.6, aceasta opiune face ca xz sa comprime sau sa decomprime, chiar daca intrarea este o legatura simbolica catre un fiier obinuit, are mai mult de-o legatura dura sau are marcai biii setuid, setgid sau bitul lipicios. Biii setuid, setgid i bitul lipicios nu sunt copiai in fiierul inta. In versiunile anterioare acest lucru se facea numai cu ajutorul opiunii --force. -f, --force Aceasta opiune are mai multe efecte: o Daca fiierul inta exista deja, il terge inainte de comprimare sau decomprimare. o Comprima sau decomprima chiar daca intrarea este o legatura simbolica catre un fiier obinuit, are mai mult de-o legatura dura sau are marcai biii setuid, setgid sau bitul lipicios. Biii setuid, setgid i bitul lipicios nu sunt copiai in fiierul inta. o Cand este utilizata cu opiunile --decompress i --stdout, comanda xz nu poate recunoate tipul fiierului sursa, i copiaza fiierul sursa aa cum este la ieirea standard. Acest lucru permite comenzii xzcat --force sa fie folosita drept comanda cat(1) pentru fiierele care nu au fost comprimate cu xz. Reinei ca, in viitor, xz ar putea sa accepte noi formate de fiiere comprimate, ceea ce poate face ca xz sa decomprime mai multe tipuri de fiiere in loc sa le copieze aa cum sunt la ieirea standard. Opiunea --format=format poate fi folosita pentru a restriciona xz sa decomprime doar un singur format de fiier. -c, --stdout, --to-stdout Scrie datele comprimate sau decomprimate la ieirea standard in loc de intr-un fiier. Aceasta implica --keep. --single-stream Decomprima numai primul flux .xz i ignora in tacere posibilele date de intrare ramase in urma fluxului. In mod normal, astfel de resturi ramase face ca xz sa afieze o eroare. xz nu decomprima niciodata mai mult de un flux din fiierele .lzma sau din fluxurile brute, dar aceasta opiune face ca xz sa ignore posibilele resturi de date ramase dupa fiierul .lzma sau fluxul brut. Aceasta opiune nu are efect daca modul de funcionare nu este --decompress sau --test. --no-sparse Dezactiveaza crearea de fiiere dispersate. In mod implicit, daca decomprima intr-un fiier obinuit, xz incearca sa faca fiierul dispersat daca datele decomprimate conin secvene lungi de zerouri binare. De asemenea, funcioneaza atunci cand scrie la ieirea standard, atata timp cat ieirea standard este conectata la un fiier obinuit i sunt indeplinite anumite condiii suplimentare pentru a o face in sigurana. Crearea de fiiere dispersate poate economisi spaiu pe disc i poate accelera decomprimarea prin reducerea cantitaii de date de In/Ie pe disc. -S .suf, --suffix=.suf Cand comprima, utilizeaza .suf ca sufix pentru fiierul inta in loc de .xz sau .lzma. Daca nu scrie la ieirea standard i fiierul sursa are deja sufixul .suf, este afiat un avertisment i fiierul este omis. Cand decomprima, recunoate fiierele cu sufixul .suf in plus faa de fiierele cu sufixul .xz, .txz, .lzma, .tlz sau .lz. Daca fiierul sursa are sufixul .suf, sufixul este eliminat pentru a obine numele fiierului inta. La comprimarea sau decomprimarea fluxurilor brute (--format=raw), sufixul trebuie sa fie intotdeauna specificat, cu excepia cazului in care se scrie la ieirea standard, deoarece nu exista un sufix implicit pentru fluxurile brute. --files[=fiier] Citete numele fiierelor de procesat din fiier; daca fiierul este omis, numele fiierelor sunt citite de la intrarea standard. Numele de fiiere trebuie sa fie terminate cu caracterul de linie noua. O liniua (-) este luata ca nume de fiier obinuit; nu inseamna intrarea standard. Daca numele de fiiere sunt date i ca argumente in linia de comanda, ele sunt procesate inainte ca numele fiierelor sa fie citite din fiier. --files0[=fiier] Aceasta opiune este identica cu --files[=fiier], cu excepia faptului ca fiecare nume de fiier trebuie sa fie terminat cu caracterul nul. Formatul de baza al fiierului i opiunile de comprimare -F format, --format=format Specifica formatul fiierului pentru comprimare sau decomprimare: auto Aceasta este valoarea implicita. La comprimare, auto este echivalent cu xz. La decomprimare, formatul fiierului de intrare este detectat automat. Reinei ca fluxurile brute (create cu --format=raw) nu pot fi detectate automat. xz Comprima in formatul de fiier .xz sau accepta numai fiierele .xz cand decomprima. lzma, alone Comprima in formatul de fiier .lzma vechi sau accepta numai fiierele .lzma cand decomprima. Numele alternativ alone este furnizat pentru compatibilitatea cu versiunile mai vechi de LZMA Utils. lzip Accepta numai fiierele .lz cand decomprima. Comprimarea nu este acceptata. Formatul .lz versiunea 0 i versiunea neextinsa 1 sunt acceptate. Fiierele versiunea 0 au fost produse de lzip cu versiunea 1.3 sau mai veche. Astfel de fiiere nu sunt obinuite, dar pot fi gasite in arhivele de fiiere, deoarece cateva pachete sursa au fost lansate in acest format. Oamenii ar putea avea i fiiere personale vechi in acest format. Suportul de decomprimare pentru versiunea de format 0 a fost eliminat in lzip 1.18. lzip 1.4 i versiunile ulterioare creeaza fiiere in formatul versiunea 1. Extensia ,,sync flush marker" pentru versiunea 1 de format a fost adaugata in lzip 1.6. Aceasta extensie este folosita rar i nu este acceptata de xz (diagnosticata ca intrare corupta). raw Comprima sau decomprima un flux brut (fara anteturi). Acest lucru este destinat doar utilizatorilor avansai. Pentru a decodifica fluxurile brute, trebuie sa utilizai opiunea --format=raw i sa specificai in mod explicit lanul de filtre, care in mod normal ar fi fost stocat in anteturile containerului. -C verificarea, --check=verificarea Specifica tipul verificarii integritaii. Verificarea este calculata din datele necomprimate i stocata in fiierul .xz. Aceasta opiune are efect numai la comprimarea in format .xz; formatul .lzma nu accepta verificari de integritate. Verificarea integritaii (daca exista) este efectuata atunci cand fiierul .xz este decomprimat. Tipuri de verificare acceptate: none Nu calculeaza deloc o verificare a integritaii. Aceasta este de obicei o idee proasta. Acest lucru poate fi util atunci cand integritatea datelor este oricum verificata prin alte mijloace. crc32 Calculeaza CRC32 folosind polinomul din IEEE-802.3 (Ethernet). crc64 Calculeaza CRC64 folosind polinomul din ECMA-182. Aceasta este valoarea implicita, deoarece este ceva mai buna decat CRC32 la detectarea fiierelor deteriorate, iar diferena de viteza este neglijabila. sha256 Calculeaza SHA-256. Acest lucru este oarecum mai lent decat CRC32 i CRC64. Integritatea antetelor .xz este intotdeauna verificata cu CRC32. Nu este posibila modificarea sau dezactivarea acesteia. --ignore-check Nu efectueaza verificarea integritaii datelor comprimate la decomprimare. Valorile CRC32 din antetele .xz vor fi insa verificate normal. Nu utilizai aceasta opiune decat daca tii ce facei. Motive posibile pentru a utiliza aceasta opiune: o Incercarea de a recupera datele dintr-un fiier .xz corupt. o Accelerarea decomprimarii. Acest lucru conteaza mai ales cu SHA-256 sau cu fiierele care s-au comprimat extrem de bine. Este recomandat sa nu utilizai aceasta opiune in acest scop decat daca integritatea fiierului este verificata extern intr-un alt mod. -0 ... -9 Selecteaza un nivel prestabilit de comprimare. Valoarea implicita este -6. Daca sunt specificate mai multe niveluri prestabilite, ultimul are efect. Daca a fost deja specificat un lan de filtre personalizat, specificarea unui nivel prestabilit de comprimare terge lanul de filtre personalizat. Diferenele dintre valorile prestabilite sunt mai semnificative decat cu gzip(1) i bzip2(1). Valorile de comprimare selectate determina cerinele de memorie ale instrumentului de decomprimare, astfel incat utilizarea unui nivel prea mare prestabilit ar putea face ,,dureroasa" decomprimarea fiierului pe un sistem vechi cu puina memorie RAM. Mai exact, nu este o idee buna sa folosii orbete -9 pentru tot aa cum se intampla adesea cu gzip(1) i bzip2(1). -0 ... -3 Acestea sunt valorile prestabilite oarecum rapide. -0 este uneori mai rapid decat gzip -9 in timp ce comprima mult mai bine. Cele mai ridicate au adesea viteza comparabila cu bzip2(1) cu un raport de comprimare comparabil sau mai bun, dei rezultatele depind foarte mult de tipul de date care sunt comprimate. -4 ... -6 Comprimare buna spre foarte buna, pastrand in acelai timp utilizarea memoriei de catre instrumentul de decomprimare la un nivel rezonabil chiar i pentru sistemele vechi. -6 este valoarea implicita, care este de obicei o alegere buna pentru distribuirea fiierelor care trebuie sa poata fi decomprimate chiar i pe sisteme cu doar 16Mio de memorie RAM. Opiunile (-5e sau -6e ar putea fi demne de luat in considerare. A se vedea opiunea --extreme.) -7 ... -9 Acestea sunt precum -6, dar cu cerine mai mari de memorie pentru comprimare i decomprimare. Acestea sunt utile numai atunci cand comprimai fiiere mai mari de 8Mio, 16Mio i, respectiv, 32Mio. Pe acelai hardware, viteza de decomprimare este aproximativ un numar constant de octei de date comprimate pe secunda. Cu alte cuvinte, cu cat comprimarea este mai buna, cu atat decomprimarea va fi de obicei mai rapida. Aceasta inseamna, de asemenea, ca valoarea de la ieire a cantitaii de date necomprimate produsa pe secunda poate varia foarte mult. Urmatorul tabel rezuma caracteristicile valorilor prestabilite: ValPrestab DimDict CPUComp MemComp MemDec -0 256 KiB 0 3 MiB 1 MiB -1 1 MiB 1 9 MiB 2 MiB -2 2 MiB 2 17 MiB 3 MiB -3 4 MiB 3 32 MiB 5 MiB -4 4 MiB 4 48 MiB 5 MiB -5 8 MiB 5 94 MiB 9 MiB -6 8 MiB 6 94 MiB 9 MiB -7 16 MiB 6 186 MiB 17 MiB -8 32 MiB 6 370 MiB 33 MiB -9 64 MiB 6 674 MiB 65 MiB Descrieri coloane: o DimDict este dimensiunea dicionarului LZMA2. Este o risipa de memorie sa foloseti un dicionar mai mare decat dimensiunea fiierului necomprimat. De aceea este bine sa evitai utilizarea valorilor prestabilite -7 ... -9 atunci cand nu este nevoie cu adevarat de ele. Pentru valoarea prestabilita -6 sau alta mai mica, cantitatea de memorie irosita este de obicei suficient de mica pentru a nu conta. o CPUComp este o reprezentare simplificata a configurarilor LZMA2 care afecteaza viteza de comprimare. Dimensiunea dicionarului afecteaza i viteza, aa ca, in timp ce CPUComp este aceeai pentru nivelurile -6 ... -9, nivelurile mai mari tind sa fie puin mai lente. Pentru a obine o comprimare i mai lenta i, astfel, posibil mai buna, consultai opiunea --extreme. o MemComp conine cerinele de memorie ale comprimarii in modul cu un singur fir de execuie. Poate varia uor intre versiunile xz. o MemDec conine cerinele de memorie pentru decomprimare. Adica, configurarile de comprimare determina cerinele de memorie ale decomprimarii. Cantitatea exacta a memoriei utilizate la decomprimare este puin mai mare decat dimensiunea dicionarului LZMA2, dar valorile din tabel au fost rotunjite la urmatorul Mio. Cerinele de memorie ale modului cu mai multe fire de execuie sunt semnificativ mai mari decat cele ale modului cu un singur fir de execuie. Cu valoarea implicita a lui --block-size, fiecare fir are nevoie de 3*3*DictSize plus MemComp sau MemDec. De exemplu, patru fire de execuie cu valoarea prestabilita -6 au nevoie de 660-670 Mio de memorie. -e, --extreme Utilizeaza o varianta mai lenta a nivelului prestabilit de comprimare selectat (-0 ... -9) pentru a obine un raport de comprimare puin mai bun, dar din nefericire, acest lucru il poate inrautai. Utilizarea memoriei pentru decomprimare nu este afectata, dar utilizarea memoriei la comprimare crete puin la nivelurile prestabilite -0 ... -3. Deoarece exista doua valori prestabilite cu dimensiuni ale dicionarului de 4Mio i 8Mio, valorile prestabilite -3e i -5e folosesc configurari puin mai rapide (CPUComp mai mic) decat -4e i -6e, respectiv. In acest fel, nu exista doua nivele prestabilite identice. ValPrestab DimDict CPUComp MemComp MemDec -0e 256 KiB 8 4 MiB 1 MiB -1e 1 MiB 8 13 MiB 2 MiB -2e 2 MiB 8 25 MiB 3 MiB -3e 4 MiB 7 48 MiB 5 MiB -4e 4 MiB 8 48 MiB 5 MiB -5e 8 MiB 7 94 MiB 9 MiB -6e 8 MiB 8 94 MiB 9 MiB -7e 16 MiB 8 186 MiB 17 MiB -8e 32 MiB 8 370 MiB 33 MiB -9e 64 MiB 8 674 MiB 65 MiB De exemplu, exista un total de patru nivele prestabilite care folosesc dicionarul 8Mio, a caror ordine de la cel mai rapid la cel mai lent este -5, -6, -5e i -6e . --fast --best Acestea sunt alias de opiuni, oarecum inelatoare pentru -0 i, respectiv, -9. Acestea sunt furnizate numai pentru compatibilitatea cu LZMA Utils. Evitai utilizarea acestor opiuni. --block-size=dimensiunea Cand comprima in formatul .xz, imparte datele de intrare in blocuri de dimensiunea octei. Blocurile sunt comprimate independent unul de celalalt, ceea ce ajuta in modul cu mai multe fire de execuie i face posibila decomprimarea cu acces aleatoriu limitat. Aceasta opiune este de obicei folosita pentru a suprascrie dimensiunea implicita a blocului in modul cu mai multe fire de execuie, dar aceasta opiune poate fi folosita i in modul cu un singur fir de execuie. In modul cu mai multe fire de execuie, aproximativ de trei ori dimensiunea de octei vor fi alocai in fiecare fir pentru stocarea intrarii i ieirii. Dimensiunea implicita este de trei ori dimensiunea dicionarului LZMA2 sau 1Mio, oricare dintre acestea este mai mare. In mod obinuit, o valoare buna este de doua la patru ori dimensiunea dicionarului LZMA2 sau de cel puin 1Mio. Utilizarea unei dimensiuni mai mici decat dimensiunea dicionarului LZMA2 este o risipa de memorie RAM, deoarece atunci memoria tampon a dicionarului LZMA2 nu va fi niciodata utilizata pe deplin. In modul cu mai multe fire de execuie, dimensiunile blocurilor sunt stocate in anteturile blocurilor. Aceste informaii privind dimensiunea sunt necesare pentru decomprimarea cu mai multe fire. In modul cu un singur fir de execuie, nicio divizare a blocurilor nu se face in mod implicit. Folosirea acestei opiuni nu afecteaza utilizarea memoriei. Nu sunt stocate informaii despre dimensiune in antetele blocurilor, astfel incat fiierele create in modul cu un singur fir de execuie nu vor fi identice cu fiierele create in modul cu mai multe fire de execuie. Lipsa informaiilor privind dimensiunea inseamna, de asemenea, ca xz nu va putea decomprima fiierele in modul cu mai multe fire. de execuie. --block-list=elemente Cand comprima in formatul .xz, incepe un nou bloc cu un lan de filtre personalizat opional dupa intervalele specificate de date necomprimate. elementele sunt o lista separata prin virgule. Fiecare element este format dintr-un numar opional de lan de filtrare intre 0 i 9, urmat de doua puncte (:) i de o dimensiune ceruta a datelor necomprimate. Omiterea unui element (doua sau mai multe virgule consecutive) este o prescurtare pentru a utiliza dimensiunea i filtrele din elementul anterior. In cazul in care fiierul de intrare este mai mare decat suma dimensiunilor din elemente, ultimul element se repeta pana la sfaritul fiierului. O valoare speciala de 0 poate fi utilizata ca ultima dimensiune pentru a indica faptul ca restul fiierului trebuie sa fie codificat ca un singur bloc. Un lan de filtre alternativ pentru fiecare bloc poate fi specificat in combinaie cu opiunile --filters1=filtre ... --filters9=filtre. Aceste opiuni definesc lanuri de filtre cu un identificator cuprins intre 1-9. Lanul de filtre 0 poate fi utilizat pentru a se referi la lanul de filtre implicit, ceea ce este acelai lucru cu a nu specifica un lan de filtre. Identificatorul lanului de filtre poate fi utilizat inaintea dimensiunii necomprimate, urmat de doua puncte (:). De exemplu, daca se specifica --block-list=1:2MiB,3:2MiB,2:4MiB,,2MiB,0:4MiB, atunci blocurile vor fi create folosind: o Lanul de filtre specificat de --filters1 i 2 Mio de intrare o Lanul de filtre specificat de --filters3 i 2 Mio de intrare o Lanul de filtre specificat de --filters2 i 4 Mio de intrare o Lanul de filtre specificat de --filters2 i 4 Mio de intrare o Lanul de filtre implicit i 2 MiB de intrare o Lanul de filtre implicit i 4 MiB de intrare pentru fiecare bloc pana la sfaritul intrarii. Daca se specifica o dimensiune care depaete dimensiunea blocului codificatorului (fie valoarea implicita in modul cu fire de execuie, fie valoarea specificata cu --block-size=dimensiune), codificatorul va crea blocuri suplimentare, pastrand limitele specificate in elemente. De exemplu, daca se specifica --block-size=10MiB --block-list=5MiB,10MiB,8MiB,12MiB,24MiB i fiierul de intrare este de 80 MiB, se vor obine 11 blocuri: 5, 10, 8, 10, 10, 2, 10, 10, 10, 4, 10, 10, 10 i 1 Mio. In modul cu mai multe fire de execuie, dimensiunile blocurilor sunt stocate in antetele blocurilor. Acest lucru nu se face in modul cu un singur fir de execuie, astfel incat ieirea codificata nu va fi identica cu cea a modului cu mai multe fire de execuie. --flush-timeout=timp_limita La comprimare, daca au trecut mai mult de timp_limita milisecunde (un intreg pozitiv) de la curaarea anterioara i citirea mai multor intrari s-ar bloca, toate datele de intrare in ateptare sunt eliminate din codificator i puse la dispoziie in fluxul de ieire. Acest lucru poate sa fie util daca xz este utilizat pentru a comprima datele care sunt transmise in flux printr-o reea. Valorile mici de timp_limita fac datele disponibile la capatul de recepie cu o mica intarziere, dar valorile mari de timp_limita ofera un raport de comprimare mai bun. Aceasta caracteristica este dezactivata in mod implicit. Daca aceasta opiune este specificata de mai multe ori, ultima este cea care se ia in considerare. Valoarea speciala a lui timp_limita de 0, poate fi utilizata pentru a dezactiva in mod explicit aceasta caracteristica. Aceasta caracteristica nu este disponibila in sistemele non-POSIX. Aceasta caracteristica este inca experimentala. In prezent, xz este nepotrivit pentru decomprimarea fluxului in timp real datorita modului in care xz utilizeaza memoria tampon. --memlimit-compress=limita Stabilete o limita de utilizare a memoriei pentru comprimare. Daca aceasta opiune este specificata de mai multe ori, ultima va avea efect. Daca parametrii de comprimare depaesc limita, xz va incerca sa ajusteze parametrii scazand valorile acestora, astfel incat limita sa nu mai fie depaita i va afia o notificare ca ajustarea automata a fost efectuata. Ajustarile se fac in aceasta ordine: reducerea numarului de fire, trecerea la modul un singur fir de execuie daca chiar i un singur fir in modul cu mai multe fire de execuie depaete limita i, in final, reducerea dimensiunii dicionarului LZMA2. Cand comprima cu opiunea --format=raw sau daca a fost specificata opiunea --no-adjust, numai numarul de fire poate fi redus, deoarece se poate face fara a afecta rezultatul comprimarii. Daca limita nu poate fi indeplinita chiar i cu ajustarile descrise mai sus, este afiata o eroare i xz va iei cu starea de ieire 1. Limita poate fi specificata in mai multe moduri: o Limita poate fi o valoare absoluta in octei. Utilizarea unui sufix intreg precum MiB poate fi utila. De exemplu: --memlimit-compress=80MiB o Limita poate fi specificata ca procent din memoria fizica totala (RAM). Acest lucru poate fi util mai ales atunci cand definii variabila de mediu XZ_DEFAULTS intr-un script de iniializare shell care este partajat intre diferite calculatoare. In acest fel, limita este automat mai mare pe sistemele cu mai multa memorie. De exemplu: --memlimit-compress=70% o Limita poate fi restabilita la valoarea implicita dandu-i valoarea 0. In prezent, aceasta este echivalenta cu stabilirea limitei la max (fara limita de utilizare a memoriei). Pentru xz pe 32 de bii exista un caz special: daca limita ar fi peste 4020MiB, limita este stabilita la 4020MiB. Pe MIPS32 este stabilita in schimb la 2000MiB; (valorile 0 i max nu sunt afectate de acest lucru -- o caracteristica similara nu exista pentru decomprimare). Acest lucru poate fi util atunci cand un executabil pe 32 de bii are acces la un spaiu de adrese de 4Gio (2Gio pe MIPS32), se spera ca nu produce daune in alte situaii. Consultai i seciunea Utilizarea memoriei. --memlimit-decompress=limita Stabilete o limita de utilizare a memoriei pentru decomprimare. Acest lucru afecteaza i modul --list. Daca operaiunea nu este posibila fara a depai limita, xz va afia o eroare i decomprimarea fiierului va eua. Consultai --memlimit-compress=limita pentru modalitaile posibile de a specifica limita. --memlimit-mt-decompress=limita Stabilete o limita de utilizare a memoriei pentru decomprimarea cu mai multe fire de execuie. Acest lucru poate afecta doar numarul de fire de execuie; acest lucru nu il va face niciodata pe xz sa refuze decomprimarea unui fiier. Daca limita este prea scazuta pentru a permite orice mod cu mai multe fire de execuie, limita este ignorata i xz va continua in modul cu un singur fir de execuie. Reinei ca, daca se folosete i opiunea --memlimit-decompress, se va aplica intotdeauna atat modurilor cu un singur fir de execuie, cat i modurilor cu mai multe fire de execuie i astfel limita efectiva pentru modul cu mai multe fire de execuie nu va fi niciodata mai mare decat limita stabilita cu opiunea --memlimit-decompress. Spre deosebire de celelalte opiuni de limita de utilizare a memoriei, opiunea --memlimit-mt-decompress=limita are o limita implicita specifica sistemului. Comanda xz --info-memory poate fi folosita pentru a vedea valoarea curenta. Aceasta opiune i valoarea ei implicita exista deoarece, fara nicio limita, decomprimarea cu (mai multe) fire de execuie ar putea ajunge sa aloce o cantitate ,,nebuna" de memorie cu unele fiiere de intrare. Daca limita implicita este prea scazuta pe sistemul dumneavoastra, nu ezitai sa cretei limita, dar niciodata sa nu o stabilii la o valoare mai mare decat cantitatea de memorie RAM utilizabila i cu nite fiiere de intrare adecvate, xz va incerca sa utilizeze acea cantitate de memorie chiar i cu un numar redus de fire de execuie. Rularea lui xz cu depairea cantitaii de memorie fizice(RAM) sau a celei de interschimb(swap) nu va imbunatai performana de decomprimare. Consultai opiunea --memlimit-compress=limita pentru modalitai posibile de a specifica limita. Stabilirea limitei la 0 restabilete limita la valoarea implicita specifica sistemului. -M limita, --memlimit=limita, --memory=limita Aceasta este echivalenta cu specificarea opiunilor: --memlimit-compress=limita --memlimit-decompress=limita --memlimit-mt-decompress=limita. --no-adjust Afieaza o eroare i iese daca limita de utilizare a memoriei nu poate fi indeplinita fara ajustarea parametrilor care afecteaza ieirea comprimata. Adica, acest lucru impiedica xz sa comute codificatorul din modul cu mai multe fire de execuie in modul cu un singur fir de execuie i sa reduca dimensiunea dicionarului LZMA2. Chiar i atunci cand aceasta opiune este utilizata, numarul de fire de execuie poate fi redus pentru a indeplini limita de utilizare a memoriei, deoarece aceasta nu va afecta comprimarea. Ajustarea automata este intotdeauna dezactivata la crearea fluxurilor brute (--format=raw). -T numar, --threads=numar Specifica numarul de fire de execuie de utilizat. Stabilirea numarului la valoarea speciala 0, face ca xz sa utilizeze pana la atatea fire de execuie cate procesoare sunt in sistem. Numarul real de fire de execuie poate fi mai mic decat numar daca fiierul de intrare nu este suficient de mare pentru a trece la modul cu mai multe fire de execuie cu parametrii dai, sau daca folosirea mai multor fire de execuie ar depai limita de utilizare a memoriei. Operaiile de comprimare cu un singur fir de execuie i cele cu mai multe fire de execuie produc ieiri diferite. Comprimarea cu un singur fir de execuie va oferi cea mai mica dimensiune a fiierului, dar numai ieirea de la comprimarea cu mai multe fire de execuie poate fi decomprimata folosind mai multe fire. Stabilirea numarului la 1 va determina ca xz sa foloseasca modul cu un singur fir de execuie. Stabilirea numarului la orice alta valoare, inclusiv 0, va determina ca xz sa foloseasca comprimarea cu mai multe fire de execuie chiar daca sistemul accepta doar un fir hardware; (xz 5.2.x folosete modul cu un singur fir de execuie in aceasta situaie). Pentru a utiliza modul cu mai multe fire de execuie cu un singur fir, stabilii numarul la +1. Prefixul + nu are efect cu alte valori decat 1. O limita de utilizare a memoriei poate face in continuare xz sa treaca in modul cu un singur fir, cu excepia cazului in care este utilizata opiunea --no-adjust. Suportul pentru prefixul + a fost adaugat in xz 5.4.0. Daca a fost solicitat un numar automat de fire i nu a fost specificata nicio limita de utilizare a memoriei, atunci o limita ,,maleabila" implicita specifica sistemului va fi utilizata pentru a limita eventual numarul de fire de execuie. Este o limita ,,maleabila" in sensul ca este ignorata daca numarul de fire devine unul, astfel o limita ,,maleabila" nu va opri niciodata xz sa comprime sau sa decomprime. Aceasta limita ,,maleabila" implicita nu va face xz sa treaca de la modul cu mai multe fire de execuie la modul cu un singur fir de execuie. Limitele active pot fi vazute ruland comanda xz --info-memory. In prezent, singura metoda de procesare cu fire de execuie este imparirea intrarii in blocuri i comprimarea lor independent unul de celalalt. Dimensiunea implicita a blocului depinde de nivelul de comprimare i poate fi inlocuita cu opiunea --block-size=dimensiune. Decomprimarea cu fire de execuie funcioneaza numai pe fiierele care conin mai multe blocuri cu informaii despre dimensiune in antetele blocurilor. Toate fiierele suficient de mari comprimate in modul cu mai multe fire de execuie indeplinesc aceasta condiie, dar fiierele comprimate in modul cu un singur fir de execuie nu o indeplinesc chiar daca a fost folosita opiunea --block-size=dimensiune. Valoarea implicita pentru fire de execuie este 0. In xz 5.4.x i mai vechi, valoarea implicita este 1. Lanuri de filtrare personalizate pentru instrumentul de comprimare Un lan de filtrare personalizat permite specificarea parametrilor de comprimare in detaliu, in loc sa se bazeze pe cei asociai opiunilor prestabilite. Cand este specificat un lan de filtrare personalizat, opiunile prestabilite (-0 ... -9 i --extreme) de mai devreme din linia de comanda sunt uitate. Daca o opiune prestabilita este specificata dupa una sau mai multe opiuni de lan de filtrare personalizat, noua prestabilire intra in vigoare i opiunile lanului de filtrare personalizat, specificate mai devreme sunt uitate. Un lan de filtrare este comparabil cu conductele din linia de comanda. La comprimare, intrarea necomprimata merge la primul filtru, a carui ieire merge la urmatorul filtru (daca exista). Ieirea ultimului filtru este scrisa in fiierul comprimat. Numarul maxim de filtre din lan este de patru, dar de obicei un lan de filtrare are doar unul sau doua filtre. Multe filtre au limitari in ceea ce privete locul in care se pot afla in lanul de filtrare: unele filtre pot funciona doar ca ultimul filtru din lan, altele doar ca non-ultim filtru i unele funcioneaza in orice poziie din lan. In funcie de filtru, aceasta limitare este fie inerenta proiectarii filtrului, fie exista pentru a preveni problemele de securitate. Un lan de filtre personalizat poate fi specificat in doua moduri diferite. Opiunile --filters=filtre i --filters1=filtre ... --filters9=filtre permit specificarea unui intreg lan de filtre intr-o singura opiune, folosind sintaxa irului de filtre liblzma. Alternativ, un lan de filtre poate fi specificat prin utilizarea uneia sau mai multor opiuni de filtrare individuale in ordinea in care sunt dorite in lanul de filtre. Adica, ordinea opiunilor de filtrare individuale este semnificativa! La decodificarea fluxurilor brute (--format=raw), lanul de filtre trebuie sa fie specificat in aceeai ordine in care a fost specificat la comprimare. Orice filtru individual sau opiuni presetate specificate inainte de opiunea de lan complet (--filters=filtre) vor fi uitate. Filtrele individuale specificate dupa opiunea ,,lan complet" vor reiniializa lanul de filtre. Atat opiunile de filtrare completa, cat i cele de filtrare individuala accepta opiuni specifice filtrului sub forma unei liste separate prin virgule. Se ignora virgulele suplimentare din opiuni. Fiecare opiune are o valoare implicita, deci specificai-le pe cele pe care dorii sa le modificai. Pentru a vedea intregul lan de filtre i opiuni, utilizai xz -vv (adica folosii --verbose de doua ori). Acest lucru funcioneaza i pentru vizualizarea opiunilor lanului de filtre utilizate de valorile prestabilite. --filters=filtre Specificai intregul lan de filtre sau o presetare intr-o singura opiune. Fiecare filtru poate fi separat prin spaii sau doua liniue (--). Este posibil sa fie necesar ca filtrele sa fie puse intre ghilimele in linia de comanda a shell-ului pentru a fi analizate ca o singura opiune. Pentru a indica opiuni, utilizai : sau =. O presetare poate fi prefixata cu un - i urmata de zero sau mai multe indicatoare. Singurul indicator suportat este e pentru a aplica aceleai opiuni ca i --extreme. --filters1=filtre ... --filters9=filtre Specifica pana la noua lanuri de filtre suplimentare care pot fi utilizate cu --block-list. De exemplu, atunci cand se comprima o arhiva cu fiiere executabile urmate de fiiere text, partea executabila ar putea utiliza un lan de filtre cu un filtru BCJ, iar partea de text doar filtrul LZMA2. --filters-help Afieaza un mesaj de ajutor care descrie modul de specificare a presetarilor i a lanurilor de filtre personalizate in opiunile --filters i --filters1=filtre ... --filters9=filtre i iese. --lzma1[=opiuni] --lzma2[=opiuni] Adauga filtrul LZMA1 sau LZMA2 la lanul de filtre. Aceste filtre pot fi folosite doar ca ultimul filtru din lan. LZMA1 este un filtru vechi, care este acceptat aproape exclusiv datorita formatului de fiier vechi .lzma, care accepta numai LZMA1. LZMA2 este o versiune actualizata a LZMA1 pentru a rezolva unele probleme practice ale LZMA1. Formatul .xz folosete LZMA2 i nu accepta deloc LZMA1. Viteza de comprimare i rapoartele LZMA1 i LZMA2 sunt practic aceleai. LZMA1 i LZMA2 au acelai set de opiuni: preset=prestabilit Reconfigureaza toate opiunile LZMA1 sau LZMA2 la prestabilit. prestabilit consta dintr-un numar intreg, care poate fi urmat de modificatori prestabilii cu o singura litera. Numarul intreg poate fi de la 0 la 9, potrivindu-se cu opiunile liniei de comanda -0 ... -9. Singurul modificator acceptat in prezent este e, care se potrivete cu --extreme. Daca nu este specificat prestabilit, valorile implicite ale opiunilor LZMA1 sau LZMA2 sunt preluate din prestabilirea 6. dict=dimensiunea Dimensiunea dicionarului (istoricul memoriei tampon) indica cai octei din datele necomprimate recent procesate sunt pastrai in memorie. Algoritmul incearca sa gaseasca secvene de octei care se repeta (potriviri) in datele necomprimate i sa le inlocuiasca cu referine la datele aflate in prezent in dicionar. Cu cat dicionarul este mai mare, cu atat este mai mare ansa de a gasi o potrivire. Astfel, creterea dimensiunii dicionarului imbunataete de obicei raportul de comprimare, dar un dicionar mai mare decat fiierul necomprimat este risipa de memorie. Dimensiuneatipica a dicionarului este de la 64Kio pana la 64Mio. Minimul este de 4Kio. Maximul pentru compresie este in prezent de 1,5Gio (1536Mio). Decomprimarea accepta deja dicionare cu pana la un octet mai puin de 4Gio, care este maximul pentru formatele de flux LZMA1 i LZMA2. Dimensiunea dicionarului i gasitorul de potriviri (match finder) -> (mf) determina impreuna utilizarea memoriei de catre codificatorul LZMA1 sau LZMA2. Aceeai dimensiune a dicionarului (sau mai mare) care a fost utilizata la comprimare, este necesara pentru decomprimare, astfel incat utilizarea memoriei de catre decodificator este determinata de dimensiunea dicionarului utilizata la comprimare. Antetele .xz stocheaza dimensiunea dicionarului fie ca 2^n, fie ca 2^n + 2^(n-1), deci aceste dimensiuni sunt oarecum preferate pentru comprimare. Alte dimensiuni vor fi rotunjite atunci cand sunt stocate in anteturile .xz. lc=lc Specifica numarul de bii de context literal. Minimul este 0 i maximul este 4; implicit este 3. In plus, suma lc i lp nu trebuie sa depaeasca 4. Toi octeii care nu pot fi codificai ca potriviri sunt codificai ca literali. Adica, literalii sunt pur i simplu octei de 8 bii care sunt codificai unul cate unul. Codificarea literala presupune ca cei mai mari bii lc ai octetului anterior necomprimat se coreleaza cu octetul urmator. De exemplu, in textul tipic englezesc, o litera mare este adesea urmata de o litera mica, iar o litera mica este urmata de obicei de o alta litera mica. In setul de caractere US-ASCII, cei mai mari trei bii sunt 010 pentru literele mari i 011 pentru literele mici. Cand lc este cel puin 3, codificarea literala poate profita de aceasta proprietate in datele necomprimate. Valoarea implicita (3) este de obicei buna. Daca dorii o comprimare maxima, testai lc=4. Uneori ajuta puin, iar uneori inrautaete comprimarea . Daca o agraveaza, incercai de-asemeni cu lc=2. lp=lp Specifica numarul de bii de poziie literala. Minimul este 0 i maximul este 4; implicit este 0. Lp afecteaza ce fel de aliniere in datele necomprimate este presupusa la codificarea literalelor. Consultai argumentul pb de mai jos pentru mai multe informaii despre aliniere. pb=pb Specifica numarul de bii de poziie. Minimul este 0 i maximul este 4; implicit este 2. Pb afecteaza ce fel de aliniere in datele necomprimate este presupusa in general. Valoarea implicita inseamna alinierea pe patru octei (2^pb=2^2=4), care este adesea o alegere buna atunci cand nu exista o ipoteza mai buna. Cand alinierea este cunoscuta, definirea lui pb in mod corespunzator poate reduce puin dimensiunea fiierului. De exemplu, cu fiierele text cu aliniere pe un octet (US-ASCII, ISO-8859-*, UTF-8), definirea pb=0 poate imbunatai uor comprimarea. Pentru textul UTF-16, pb=1 este o alegere buna. Daca alinierea este un numar impar, cum ar fi 3 octei, pb=0 ar putea fi cea mai buna alegere. Chiar daca alinierea presupusa poate fi ajustata cu pb i lp, LZMA1 i LZMA2 inca favorizeaza uor alinierea pe 16 octei. Ar putea fi demn de luat in considerare atunci cand proiectai formate de fiiere care pot fi adesea comprimate cu LZMA1 sau LZMA2. mf=mf Cautarea potrivirilor are un efect major asupra vitezei codificatorului, utilizarii memoriei i raportului de comprimare. De obicei, gasitorii de potriviri din lanul sumelor de control sunt mai rapizi decat gasitorii de potriviri din arborele binar. Valoarea implicita depinde de prestabilit: 0 folosete hc3, 1-3 folosete hc4, iar restul folosete bt4. Sunt acceptate urmatoarele opiuni de cautare de potriviri. Formulele de utilizare a memoriei de mai jos sunt aproximari estimative, care se apropie cel mai mult de realitate atunci cand dict este o putere a lui doi. hc3 Lan de suma de control, cu suma de control de 2 i 3 octei Valoarea minima pentru nice: 3 Utilizarea memoriei: dict * 7.5 (daca dict <= 16 Mio); dict * 5.5 + 64 MiB (daca dict > 16 Mio) hc4 Lan de suma de control, cu suma de control de 2, 3 i 4 octei Valoarea minima pentru nice: 4 Utilizarea memoriei: dict * 7.5 (daca dict <= 32 Mio); dict * 6.5 (daca dict > 32 Mio) bt2 Arbore binar cu suma de control de 2 octei Valoarea minima pentru nice: 2 Utilizarea memoriei: dict * 9.5 bt3 Arbore binar cu suma de control de 2 i 3 octei Valoarea minima pentru nice: 3 Utilizarea memoriei: dict * 11.5 (daca dict <= 16 Mio); dict * 9.5 + 64 MiB (daca dict > 16 Mio) bt4 Arbore binar cu suma de control de 2, 3 i 4 octei Valoarea minima pentru nice: 4 Utilizarea memoriei: dict * 11.5 (daca dict <= 32 Mio); dict * 10.5 (daca dict > 32 Mio) mode=mod Comprimarea mod specifica metoda de analiza a datelor produse de gasitorul de potriviri. Modurile acceptate sunt fast(rapid) i normal. Valoarea implicita este fast pentru prestabiliri 0-3 i normal pentru prestabiliri 4-9. De obicei, fast este folosit cu instrumentele de cautare de potriviri ale lanului de sume de control, i normal cu instrumentele de cautare de potriviri din arborele binar. Aceasta este i ceea ce fac prestabiririle. nice=nice Specifica ceea ce este considerat a fi o lungime buna(nice) pentru o potrivire. Odata ce este gasita o potrivire de cel puin nice octei, algoritmul nu mai cauta dupa potriviri posibile mai bune. Nice poate fi de 2-273 octei. Valorile mai mari tind sa ofere un raport de comprimare mai bun in detrimentul vitezei. Valoarea implicita depinde de prestabilit. depth=adancimea Specifica adancimea maxima de cautare in gasitorul de potriviri. Valoarea implicita este valoarea speciala de 0, ceea ce face ca instrumentul de comprimare sa determine o adancime rezonabila pornind de la valorile mf i nice. Adancimea rezonabila pentru lanuri de suma de control este 4-100 i 16-1000 pentru arbori binari. Folosirea unor valori foarte mari pentru adancime poate face codificatorul extrem de lent cu unele fiiere. Evitai sa stabilii adancimea la valori peste 1000, cu excepia cazului in care suntei pregatit sa intrerupei comprimarea in cazul in care dureaza prea mult. La decodificarea fluxurilor brute (--format=raw), LZMA2 are nevoie doar de dimensiunea dicionarului. LZMA1 are nevoie de asemenea de lc, lp i pb. --x86[=opiuni] --arm[=opiuni] --armthumb[=opiuni] --arm64[=opiuni] --powerpc[=opiuni] --ia64[=opiuni] --sparc[=opiuni] --riscv[=opiuni] Adauga un filtru de ramura/apel/salt (branch/call/jump ,,BCJ") la lanul de filtre. Aceste filtre pot fi utilizate numai ca un filtru care nu este ultimul din lanul de filtrare. Un filtru BCJ convertete adresele relative din codul mainii in omoloagele lor absolute. Acest lucru nu modifica dimensiunea datelor, dar crete redundana, ceea ce poate ajuta LZMA2 sa produca fiier .xz cu 0-15 % mai mic. Filtrele BCJ sunt intotdeauna reversibile, deci folosind un filtru BCJ pentru tipul greit de date nu provoaca nicio pierdere de date, dei poate inrautai puin raportul de comprimare. Filtrele BCJ sunt foarte rapide i folosesc o cantitate nesemnificativa de memorie. Aceste filtre BCJ au probleme cunoscute legate de raportul de comprimare: o Unele tipuri de fiiere care conin cod executabil (de exemplu, fiiere obiect, biblioteci statice i module de kernel Linux) au adresele din instruciuni completate cu valori de umplere. Aceste filtre BCJ vor face in continuare conversia adresei, ceea ce va inrautai comprimarea cu aceste fiiere. o Daca pe o arhiva este aplicat un filtru BCJ, este posibil ca raportul de comprimare sa fie mai rau decat la neutilizarea unui filtru BCJ. De exemplu, daca exista executabile similare sau chiar identice, filtrarea va face probabil fiierele mai puin asemanatoare i astfel comprimarea este mai proasta. Coninutul fiierelor neexecutabile din aceeai arhiva poate conta i el. In practica, trebuie sa incercai cu i fara filtru BCJ pentru a vedea care rezultat este mai bun in fiecare situaie. Seturi de instruciuni diferite au o aliniere diferita: fiierul executabil trebuie aliniat la un multiplu al acestei valori in datele de intrare pentru ca filtrul sa funcioneze. Filtru Aliniere Note x86 1 x86 pe 32 de bii sau 64 de bii ARM 4 ARM-Thumb 2 ARM64 4 alinierea pe 4096-octei este cea mai buna PowerPC 4 Doar big endian IA-64 16 Itanium SPARC 4 RISC-V 2 Deoarece datele filtrate prin BCJ sunt de obicei comprimate cu LZMA2, raportul de comprimare poate fi uor imbunatait daca opiunile LZMA2 sunt definite pentru a se potrivi cu alinierea filtrului BCJ selectat. Exemple: o Filtrul IA-64 are o aliniere de 16 octei, astfel incat pb=4,lp=4,lc=0 este alegere adecvata cu LZMA2 (2^4=16). o Codul RISC-V are o aliniere pe 2 sau 4 octei, depinzand de faptul ca fiierul conine instruciuni comprimate pe 16 bii (extensia C) sau nu. Atunci cand se utilizeaza instruciuni pe 16 bii, pb=2,lp=1,lc=3 sau pb=1,lp=1,lc=3 este o alegere buna. Atunci cand nu sunt prezente instruciuni pe 16 bii, pb=2,lp=2,lc=2 este cea mai buna alegere. readelf -h poate fi utilizata pentru a verifica daca ,,RVC" apare in linia ,,Indicatori". o ARM64 este intotdeauna aliniat pe 4 octei, astfel incat pb=2,lp=2,lc=2 este cea mai buna alegere. o Filtrul x86 este o excepie. De obicei, este bine sa ramanei la valorile implicite ale LZMA2 (pb=2,lp=0,lc=3) atunci cand comprimai executabile x86. Toate filtrele BCJ accepta acelai opiuni: start=poziie Specifica poziia de pornire care este utilizata la conversia intre adresele relative i absolute. Poziia trebuie sa fie un multiplu al alinierii filtrului (consultai tabelul de mai sus). Valoarea implicita este zero. In practica, valoarea implicita este buna; specificarea unei poziii personalizate nu este aproape niciodata utila. --delta[=opiuni] Adauga filtrul Delta in lanul de filtrare. Filtrul Delta poate fi folosit doar ca un filtru care nu este ultimul in lanul de filtrare. In prezent, este acceptat doar calculul delta simplu de octei. Poate fi util la comprimarea, de exemplu, a imaginilor bitmap necomprimate sau a sunetului PCM necomprimat. Cu toate acestea, algoritmii cu scop special pot da rezultate semnificativ mai bune decat Delta + LZMA2. Acest lucru este valabil mai ales in cazul audio, care se comprima mai repede i mai bine, de exemplu, cu flac(1). Opiuni acceptate: dist=distana Specifica distana calculului delta in octei. Distana trebuie sa fie 1-256. Valoarea implicita este 1. De exemplu, cu dist=2 i intrare de opt octei: A1 B1 A2 B3 A3 B5 A4 B7, ieirea va fi: A1 B1 01 02 01 02 01 02. Alte opiuni -q, --quiet Suprima avertismentele i notificarile. Specificai acest lucru de doua ori pentru a suprima i erorile. Aceasta opiune nu are niciun efect asupra starii de ieire. Adica, chiar daca o avertizare a fost suprimata, starea de ieire pentru a indica o avertizare este inca utilizata. -v, --verbose Ofera informaii detaliate. Daca ieirea de eroare standard este conectata la un terminal, xz va afia un indicator de progres. Specificarea opiunii --verbose de doua ori, va avea ca rezultat oferirea de informaii i mai detaliate. Indicatorul de progres afieaza urmatoarele informaii: o Procentul de completare este afiat daca se cunoate dimensiunea fiierului de intrare. Adica, procentul nu poate fi afiat la procesarea fiierului prin conducte(pipe). o Cantitatea de date comprimate produse (comprimare) sau consumate (decomprimare). o Cantitatea de date necomprimate consumate (comprimare) sau produse (decomprimare). o Raportul de comprimare, care se calculeaza imparind cantitatea de date comprimate procesate pana acum la cantitatea de date necomprimate procesate pana acum. o Viteza de comprimare sau decomprimare. Aceasta este masurata drept cantitatea de date necomprimate consumate (comprimare) sau produse (decomprimare) pe secunda. Este afiata dupa ce au trecut cateva secunde de cand xz a inceput procesarea fiierului. o Timpul scurs in format M:SS sau H:MM:SS. o Timpul ramas estimat este afiat numai atunci cand dimensiunea fiierului de intrare este cunoscuta i au trecut deja cateva secunde de cand xz a inceput procesarea fiierului. Ora este afiata intr-un format mai puin precis, care nu are niciodata doua puncte, de exemplu, 2 min 30 s. Cand ieirea de eroare standard nu este un terminal, --verbose va face xz sa imprime numele fiierului, dimensiunea comprimata, dimensiunea necomprimata, raportul de comprimare i, eventual, de asemenea, viteza i timpul scurs pe o singura linie la ieirea de eroare standard dupa comprimarea sau decomprimarea fiierului. Viteza i timpul scurs sunt incluse numai atunci cand operaiunea a durat cel puin cateva secunde. Daca operaiunea nu s-a incheiat, de exemplu, din cauza intreruperii din partea utilizatorului, se imprima i procentul de completare daca se cunoate dimensiunea fiierului de intrare. -Q, --no-warn Nu comuta starea de ieire la 2 chiar daca a fost detectata o condiie care merita avertizata. Aceasta opiune nu afecteaza nivelul de detaliere al informaiilor, astfel incat atat --quiet cat i --no-warn trebuie folosite pentru a nu afia avertismente i pentru a nu modifica starea de ieire. --robot Afieaza mesajele intr-un format care poate fi analizat de maina. Acest lucru are scopul de a uura scrierea interfeelor in care se dorete sa se foloseasca xz in loc de liblzma, ceea ce poate fi cazul cu diferite scripturi. Ieirea cu aceasta opiune activata este menita sa fie stabila in toate versiunile xz. Consultai seciunea MOD ROBOT pentru detalii. --info-memory Afieaza, intr-un format care poate fi citit de om, cata memorie fizica (RAM) i cate fire de execuie de procesor xz crede ca are sistemul i limitele de utilizare a memoriei pentru comprimare i decomprimare i iese cu succes. -h, --help Afieaza un mesaj de ajutor care descrie opiunile cele mai frecvent utilizate i iese cu succes. -H, --long-help Afieaza un mesaj de ajutor care descrie toate caracteristicile xz i iese cu succes -V, --version Afieaza numarul versiunii xz i liblzma intr-un format care poate fi citit de om. Pentru a obine rezultate analizabile de maina, specificai --robot inainte de --version. MOD ROBOT Modul robot este activat cu opiunea --robot. Face ieirea lui xz mai uor de analizat de catre alte programe. In prezent, opiunea --robot este acceptata numai impreuna cu opiunile --list, --filters-help, --info-memory, i --version. Va fi acceptata pentru comprimare i decomprimare in viitor. Modul lista xz --robot --list utilizeaza o ieire separata de tabulatori. Prima coloana a fiecarei linii are un ir care indica tipul de informaii gasite pe acea linie: name Aceasta este intotdeauna prima linie cand incepe sa se listeze un fiier. A doua coloana de pe linie este numele fiierului. file Aceasta linie conine informaii generale despre fiierul .xz. Aceasta linie este intotdeauna tiparita dupa linia name. stream Acest tip de linie este utilizat numai atunci cand a fost specificata opiunea --verbose. Exista tot atatea linii stream cate fluxuri exista in fiierul .xz. block Acest tip de linie este utilizat numai atunci cand a fost specificata opiunea --verbose. Exista tot atatea linii block cate blocuri exista in fiierul .xz. Liniile block sunt afiate dupa toate liniile stream; tipurile diferite de linii nu sunt intercalate. summary Acest tip de linie este folosit numai atunci cand opiunea --verbose a fost specificata de doua ori. Aceasta linie este afiata dupa toate liniile block. Ca i linia file, linia summary conine informaii generale despre fiierul .xz. totals Aceasta linie este intotdeauna ultima linie din lista afiata la ieire. Aceasta arata numarul total i dimensiunile. Coloanele din liniile file: 2. Numarul de fluxuri din fiier 3. Numarul total de blocuri din fluxuri 4. Dimensiunea comprimata a fiierului 5. Dimensiunea necomprimata a fiierului 6. Raportul de comprimare, de exemplu, 0,123. Daca raportul este peste 9,999, in locul raportului sunt afiate trei liniue (---). 7. Lista de nume de verificare a integritaii, separate prin virgule. Urmatoarele iruri sunt utilizate pentru tipurile de verificare cunoscute: None, CRC32, CRC64 i SHA-256. Pentru tipurile de verificari necunoscute, se utilizeaza None-N, unde N este ID-ul de verificare ca numar zecimal (una sau doua cifre). 8. Dimensiunea totala a umpluturii fluxului din fiier Coloanele din liniile stream: 2. Numarul fluxului (primul flux este 1) 3. Numarul de blocuri din flux 4. Poziia de pornire a comprimarii 5. Poziia de pornire a decomprimarii 6. Dimensiune comprimata (nu include umplutura fluxului) 7. Dimensiune necomprimata 8. Raport de comprimare 9. Numele verificarii de integritate 10. Dimensiunea umpluturii fluxului Coloanele din liniile block: 2. Numarul fluxului care conine acest bloc 3. Numarul blocului in raport cu inceputul fluxului (primul bloc este 1) 4. Numarul blocului in raport cu inceputul fiierului 5. Poziia de pornire a comprimarii in raport cu inceputul fiierului 6. Poziia de pornire necomprimata in raport cu inceputul fiierului 7. Dimensiunea totala comprimata a blocului (include antetele) 8. Dimensiune necomprimata 9. Raport de comprimare 10. Numele verificarii de integritate Daca opiunea --verbose a fost specificata de doua ori, coloane suplimentare sunt incluse pe liniile block. Acestea nu sunt afiate cu o singura specificare a opiunii --verbose, deoarece obinerea acestor informaii necesita multe cautari i, prin urmare, poate fi lenta: 11. Valoarea verificarii integritaii in hexazecimal 12. Dimensiunea antetului blocului 13. Indicatori de bloc: c indica faptul ca este prezenta dimensiunea comprimata, iar u indica faptul ca este prezenta dimensiunea necomprimata. Daca indicatorul nu este determinat, este afiata o liniua (-) pentru a menine lungimea irului fixa. Pot fi adaugate noi indicatoare la sfaritul irului, in viitor. 14. Dimensiunea datelor comprimate reale din bloc (acest lucru exclude antetul blocului, umplutura blocului i campurile de verificare) 15. Cantitatea de memorie (in octei) necesara pentru a decomprima acest bloc cu aceasta versiune xz 16. Lan de filtrare. Reinei ca majoritatea opiunilor utilizate in timpul comprimarii nu pot fi cunoscute, deoarece doar opiunile necesare pentru decomprimare sunt stocate in anteturile .xz. Coloanele din liniile summary: 2. Cantitatea de memorie (in octei) necesara pentru a decomprima acest fiier cu aceasta versiune xz 3. yes sau no indicand daca toate antetele blocurilor au atat dimensiunea comprimata, cat i dimensiunea necomprimata stocate in ele Incepand cu xz 5.1.2alpha: 4. Versiunea xz minima necesara pentru a decomprima fiierul Coloanele din linia totals: 2. Numarul de fluxuri 3. Numarul de blocuri 4. Dimensiunea comprimata 5. Dimensiune necomprimata 6. Raportul mediu de comprimare 7. Lista de nume de verificare a integritaii, separate prin virgule, care au fost prezente in fiiere 8. Dimensiunea umpluturii fluxului 9. Numarul de fiiere. Aceasta este aici pentru a pastra ordinea coloanelor anterioare la fel ca pe liniile file. Daca opiunea --verbose a fost specificata de doua ori, pe linia totals sunt incluse coloane suplimentare: 10. Cantitatea maxima de memorie (in octei) necesara pentru a decomprima fiierele cu aceasta versiune xz 11. yes sau no indicand daca toate antetele blocurilor au atat dimensiunea comprimata, cat i dimensiunea necomprimata stocate in ele Incepand cu xz 5.1.2alpha: 12. Versiunea xz minima necesara pentru a decomprima fiierul Versiunile viitoare pot adauga noi tipuri de linii i pot fi adaugate coloane noi la tipurile de linii existente, dar coloanele existente nu vor fi modificate. Ajutor pentru filtrare xz --robot --filters-help afieaza filtrele acceptate in urmatorul format: filtru:opiune=,opiune=... filtru Numele filtrului opiune Numele unei opiuni specifice unui filtru valoare Intervalele numerice valoare apar ca . Alegerile valoare de tip ir de caractere sunt afiate in cadrul < > i separate de un caracter |. Fiecare filtru este afiat pe propria linie. Informaii privind limita memoriei xz --robot --info-memory afieaza o singura linie cu multiple coloane separate prin tabulatoare: 1. Cantitatea totala de memorie fizica (RAM) in octei. 2. Limita de utilizare a memoriei pentru comprimare in octei (--memlimit-compress). O valoare speciala de 0 indica configurarea implicita, care pentru modul cu un singur fir este la fel ca fara limita. 3. Limita de utilizare a memoriei pentru decomprimare in octei (--memlimit-decompress). O valoare speciala de 0 indica configurarea implicita, care pentru modul cu un singur fir este la fel ca fara limita. 4. Incepand cu xz 5.3.4alpha: Utilizarea memoriei pentru decomprimarea cu mai multe fire in octei (--memlimit-mt-decompress). Acesta nu este niciodata zero, deoarece o valoare implicita specifica sistemului afiata in coloana 5 este utilizata daca nu a fost specificata in mod explicit nicio limita. De asemenea, aceasta nu este niciodata mai mare decat valoarea din coloana 3, chiar daca a fost specificata o valoare mai mare cu --memlimit-mt-decompress. 5. Incepand cu xz 5.3.4alpha: o limita implicita de utilizare a memoriei specifica sistemului, care este utilizata pentru a limita numarul de fire de execuie atunci cand se comprima cu un numar automat de fire de execuie (--threads=0) i nicio limita de utilizare a memoriei nu fost specificata cu (--memlimit-compress). Aceasta este, de asemenea, utilizata ca valoare implicita pentru --memlimit-mt-decompress. 6. Incepand cu xz 5.3.4alpha: numarul de fire de execuie de procesor disponibile. In viitor, rezultatul xz --robot --info-memory poate avea mai multe coloane, dar niciodata mai mult de o singura linie. Versiunea xz --robot --version va afia numarul versiunii xz i liblzma in urmatorul format: XZ_VERSION=XYYYZZZS LIBLZMA_VERSION=XYYYZZZS X Versiunea majora. YYY Versiunea minora. Numerele pare sunt prezente in versiunile stabile. Numerele impare sunt prezente in versiunile alfa sau beta. ZZZ Nivelul de plasture(patch) pentru versiunile stabile sau doar un contor pentru versiunile de dezvoltare. S Stabilitate. 0 este alfa, 1 este beta i 2 este stabil. S trebuie sa fie intotdeauna 2 atunci cand AAA este par. XYYYZZZS sunt aceleai pe ambele linii daca xz i liblzma sunt din aceeai versiune XZ Utils. Exemple: 4.999.9beta este 49990091 i 5.0.0 este 50000002. STARE DE IEIRE 0 Totul este bine. 1 A aparut o eroare. 2 A aparut ceva care merita sa fie avertizat, dar nu au aparut erori reale. Notificarile (nu avertismentele sau erorile) afiate la ieirea de eroare standard nu afecteaza starea de ieire. VARIABILE DE MEDIU xz analizeaza liste de opiuni separate prin spaii din variabilele de mediu XZ_DEFAULTS i XZ_OPT, in aceasta ordine, inainte de a analiza opiunile din linia de comanda. Reinei ca numai opiunile sunt analizate din variabilele de mediu; toate non-opiunile sunt ignorate in tacere. Analiza se face cu funcia getopt_long(3) care este folosita i pentru argumentele liniei de comanda. XZ_DEFAULTS Opiuni implicite specifice utilizatorului sau la nivelul intregului sistem. De obicei, acest lucru este specificat intr-un script de iniializare shell pentru a activa limitatorul de utilizare a memoriei lui xz implicit. Excluzand scripturile de iniializare shell i cazurile speciale similare, scripturile nu trebuie niciodata sa modifice sau sa dezactiveze XZ_DEFAULTS. XZ_OPT Acest lucru este pentru transmiterea opiunilor catre xz atunci cand nu este posibil sa definii opiunile direct in linia de comanda a xz. Acesta este cazul cand xz este rulat de un script sau de un instrument, de exemplu, GNU tar(1): XZ_OPT=-2v tar caf foo.tar.xz foo Scripturile pot folosi XZ_OPT, de exemplu, pentru a configura opiunile implicite de comprimare specifice scriptului. Se recomanda totui sa se permita utilizatorilor sa inlocuiasca XZ_OPT daca acest lucru este rezonabil. De exemplu, in scripturile sh(1) se poate folosi ceva de genul acesta: XZ_OPT=${XZ_OPT-"-7e"} export XZ_OPT COMPATIBILITATE CU LZMA-UTILS Sintaxa liniei de comanda a lui xz este practic o super-colecie de lzma, unlzma i lzcat aa cum se gasete in LZMA Utils 4.32.x. In cele mai multe cazuri, este posibil sa inlocuii LZMA Utils cu XZ Utils fara a intrerupe scripturile existente. Exista totui unele incompatibilitai, care uneori pot cauza probleme. Niveluri de comprimare prestabilite Numerotarea nivelurilor de comprimare prestabilite nu este identica in xz i LZMA Utils. Cea mai importanta diferena este modul in care dimensiunile dicionarului sunt atribuite diferitelor niveluri prestabilite. Dimensiunea dicionarului este aproximativ egala cu memoria utilizata la decomprimare. Nivel xz LZMA Utils -0 256 KiB N/A -1 1 MiB 64 KiB -2 2 MiB 1 MiB -3 4 MiB 512 KiB -4 4 MiB 1 MiB -5 8 MiB 2 MiB -6 8 MiB 4 MiB -7 16 MiB 8 MiB -8 32 MiB 16 MiB -9 64 MiB 32 MiB Diferenele de dimensiune a dicionarului afecteaza deasemenea cantitatea de memorie utilizata la comprimare dar exista i alte diferene intre LZMA Utils i XZ Utils, care fac diferena i mai mare: Nivel xz LZMA Utils 4.32.x -0 3 MiB N/A -1 9 MiB 2 MiB -2 17 MiB 12 MiB -3 32 MiB 12 MiB -4 48 MiB 16 MiB -5 94 MiB 26 MiB -6 94 MiB 45 MiB -7 186 MiB 83 MiB -8 370 MiB 159 MiB -9 674 MiB 311 MiB Nivelul prestabilit implicit in LZMA Utils este -7, in timp ce in XZ Utils este -6, deci ambele folosesc un dicionar de 8Mio in mod implicit. Fiiere .lzma transmise in flux vs. netransmise in flux Dimensiunea necomprimata a fiierului poate fi stocata in antetul .lzma. LZMA Utils face asta atunci cand comprima fiiere obinuite. Alternativa este sa marcai ca dimensiunea necomprimata este necunoscuta i sa folosii marcajul de sfarit de incarcare pentru a indica unde ar trebui sa se opreasca decomprimarea. LZMA Utils folosete aceasta metoda atunci cand dimensiunea necomprimata nu este cunoscuta, ceea ce este cazul, de exemplu, cand se folosesc conducte. xz accepta decomprimarea fiierelor .lzma cu sau fara marcaj de sfarit de incarcare, dar toate fiierele .lzma create de xz vor folosi marcajul de sfarit de incarcare i vor avea dimensiunea necomprimata marcata ca necunoscuta in antetul .lzma. Aceasta poate fi o problema in unele situaii mai puin frecvente. De exemplu, un instrument de decomprimare .lzma incorporat intr-un dispozitiv poate funciona numai cu fiiere care au dimensiunea necomprimata cunoscuta. Daca intampinai aceasta problema, trebuie sa utilizai LZMA Utils sau LZMA SDK pentru a crea fiiere .lzma cu dimensiunea necomprimata cunoscuta. Fiiere .lzma neacceptate Formatul .lzma permite valori lc de pana la 8 i valori lp de pana la 4. LZMA Utils poate decomprima fiiere cu orice lc i lp, dar creeaza intotdeauna fiiere cu lc=3 i lp=0. Crearea de fiiere cu alte lc i lp este posibila cu xz i cu LZMA SDK. Implementarea filtrului LZMA1 in liblzma necesita ca suma lc i lp sa nu depaeasca 4. Altfel, fiierele .lzma, care depaesc aceasta limitare, nu pot fi decomprimate cu xz. LZMA Utils creeaza numai fiiere .lzma care au o dimensiune de dicionar de 2^n (o putere de 2), dar accepta fiiere cu orice dimensiune de dicionar. liblzma accepta numai fiierele .lzma care au dimensiunea de dicionar de 2^n sau 2^n + 2^(n-1). Acest lucru este pentru a reduce numarul de ,,fals pozitiv" atunci cand se detecteaza fiiere .lzma. Aceste limitari nu ar trebui sa fie o problema in practica, deoarece practic toate fiierele .lzma au fost comprimate cu opiuni pe care liblzma le va accepta. Resturi ramase Cand decomprima, LZMA Utils ignora in tacere totul dupa primul flux .lzma. In majoritatea situaiilor, aceasta este o eroare. Aceasta inseamna, de asemenea, ca LZMA Utils nu accepta decomprimarea fiierelor .lzma concatenate. Daca au ramas date dupa primul flux .lzma, xz considera ca fiierul este corupt, cu excepia cazului in care a fost utilizata opiunea --single-stream. Acest lucru poate rupe scripturile obscure(scrise deficitar) care presupun ca resturile ramase sunt ignorate. NOTE Rezultatul comprimarii poate varia Ieirea exacta comprimata produsa din acelai fiier de intrare necomprimat poate varia intre versiunile XZ Utils, chiar daca opiunile de comprimare sunt identice. Acest lucru se datoreaza faptului ca instrumentul codificator poate fi imbunatait (comprimare mai rapida sau mai buna) fara a afecta formatul fiierului. Ieirea poate varia chiar i intre compilarile diferite ale aceleiai versiuni XZ Utils, daca sunt utilizate opiuni diferite de compilare. Cele de mai sus inseamna ca odata ce opiunea --rsyncable a fost utilizata, fiierele rezultate nu vor fi neaparat sincronizate cu rsync decat daca atat fiierele vechi, cat i cele noi au fost comprimate cu aceeai versiune xz. Aceasta problema poate fi remediata daca o parte a implementarii codificatorului este ingheata pentru a menine stabila ieirea ,,rsyncabila" intre versiunile xz. Instrumente de decomprimare .xz incorporate Implementarile instrumentului de decomprimare .xz incorporat, cum ar fi XZ Embedded, nu accepta neaparat fiiere create cu tipuri de verificare a integritaii, altele decat none i crc32. Deoarece valoarea implicita este --check=crc64, trebuie sa utilizai --check=none sau --check=crc32 atunci cand creai fiiere pentru sistemele incorporate. In afara sistemelor incorporate, toate instrumentele de decomprimare in format .xz accepta toate tipurile de verificare sau cel puin pot decomprima fiierul fara a efectua verificarea integritaii daca acel tip de verificare nu este acceptat. XZ Embedded accepta filtre BCJ, dar numai cu poziie de pornire implicita. EXEMPLE Bazice Comprima fiierul foo in foo.xz folosind nivelul de comprimare implicit (-6) i elimina fiierul foo daca comprimarea are succes: xz foo Decomprima bar.xz in bar i nu elimina bar.xz chiar daca decomprimarea este efectuata cu succes: xz -dk bar.xz Creeaza baz.tar.xz cu nivelul prestabilit -4e (-4 --extreme), care este mai lent decat nivelul prestabilit implicit -6, dar necesita mai puina memorie pentru comprimare i decomprimare (48Mio i, respectiv, 5Mio): tar cf - baz | xz -4e > baz.tar.xz Un amestec de fiiere comprimate i necomprimate poate fi decomprimat la ieirea standard cu o singura comanda: xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt Comprimarea in paralel a mai multor fiiere In sisteme GNU i *BSD, find(1) i xargs(1) pot fi utilizate pentru a paraleliza comprimarea mai multor fiiere: find . -type f \! -name '*.xz' -print0 \ | xargs -0r -P4 -n16 xz -T1 Opiunea -P pentru comanda xargs(1) stabilete numarul de procese paralele xz. Cea mai buna valoare pentru opiunea -n depinde de cate fiiere trebuie sa fie comprimate. Daca exista doar cateva fiiere, valoarea ar trebui probabil sa fie 1; cu zeci de mii de fiiere, 100 sau chiar mai mult poate sa fie valoarea potrivita pentru a reduce numarul de procese xz pe care xargs(1) le va crea in final. Opiunea -T1 pentru xz este acolo pentru a-l fora sa ruleze in modul cu un singur fir de execuie, deoarece xargs(1) este folosit pentru a controla cantitatea de paralelizare. Modul robot Calculeaza cai octei au fost salvai in total dupa comprimarea mai multor fiiere: xz --robot --list *.xz | awk '/^totals/{print $5-$4}' Un script poate dori sa afle daca folosete o versiune xz suficient de noua. Urmatorul script sh(1) verifica daca numarul versiunii instrumentului xz este cel puin 5.0.0. Aceasta metoda este compatibila cu versiunile beta vechi, care nu acceptau opiunea --robot: if ! eval "$(xz --robot --version 2> /dev/null)" || [ "$XZ_VERSION" -lt 50000002 ]; then echo "Versiunea dumneavoastra de ,,xz" este prea veche!" fi unset XZ_VERSION LIBLZMA_VERSION Stabilete o limita de utilizare a memoriei pentru decomprimare folosind variabila de mediu XZ_OPT, dar daca o limita a fost deja stabilita, nu o marete: NEWLIM=$((123 << 20)) # 123 MiB OLDLIM=$(xz --robot --info-memory | cut -f3) if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then XZ_OPT="$XZ_OPT --memlimit-decompress=$NEWLIM" export XZ_OPT fi Lanuri de filtrare personalizate pentru instrumentul de comprimare Cea mai simpla utilizare a lanurilor de filtrare personalizate este personalizarea unei opiuni prestabilite LZMA2. Acest lucru poate fi util, deoarece opiunile prestabilite acopera doar un subset al combinaiilor potenial utile de opiuni de comprimare. Coloanele CPUComp din tabelele de descriere a opiunilor -0 ... -9 i --extreme sunt utile atunci cand personalizai opiunilor prestabilite LZMA2. Iata parile relevante colectate din aceste doua tabele: ValPrestab CPUComp -0 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -5e 7 -6e 8 Daca tii ca un fiier necesita un dicionar oarecum mare (de exemplu, 32Mio) pentru a se comprima bine, dar dorii sa-l comprimai mai repede decat ar face xz -8, o opiune prestabilita cu o valoare CPUComp scazuta (de exemplu, 1) poate fi modificata pentru a utiliza un dicionar mai mare: xz --lzma2=preset=1,dict=32MiB foo.tar Cu anumite fiiere, comanda de mai sus poate fi mai rapida decat xz -6 in timp ce comprima semnificativ mai bine. Cu toate acestea, trebuie subliniat ca doar unele fiiere se beneficiaza de un dicionar mare, pastrand in acelai timp valoarea CPUComp scazuta. Cea mai evidenta situaie, in care un dicionar mare poate ajuta foarte mult, este o arhiva care conine fiiere foarte asemanatoare de cel puin caiva megaoctei fiecare. Dimensiunea dicionarului trebuie sa fie semnificativ mai mare decat orice fiier individual pentru a permite LZMA2 sa profite din plin de asemanarile dintre fiierele consecutive. Daca utilizarea unei mari cantitai de memorie pentru comprimare i decomprimare este in regula, iar fiierul comprimat are cel puin cateva sute de megaoctei, poate fi util sa folosii un dicionar i mai mare decat cei 64Mio pe care i-ar folosi xz -9: xz -vv --lzma2=dict=192MiB big_foo.tar Utilizarea opiunii -vv (--verbose --verbose) ca in exemplul de mai sus, poate fi utila pentru a vedea cerinele de memorie la comprimare i decomprimare. Amintii-va ca utilizarea unui dicionar mai mare decat dimensiunea fiierului necomprimat este risipa de memorie, de aceea, comanda de mai sus nu este utila pentru fiiere mici. Uneori, timpul de comprimare nu conteaza, dar utilizarea memoriei la decomprimare trebuie meninuta la un nivel scazut, de exemplu, pentru a face posibila decomprimarea fiierului pe un sistem incorporat. Urmatoarea comanda folosete -6e (-6 --extreme) ca baza i fixeaza dimensiunea dicionarului la doar 64Kio. Fiierul rezultat poate fi decomprimat cu XZ Embedded (de aceea exista --check=crc32) folosind aproximativ 100Kio de memorie. xz --check=crc32 --lzma2=preset=6e,dict=64KiB foo Daca dorii sa stoarcei cat mai muli octei posibil, ajustarea numarului de bii de context literal (lc) i a numarului de bii de poziie (pb) poate ajuta uneori. Ajustarea numarului de bii de poziie literala (lp) ar putea ajuta, de asemenea, dar de obicei lc i pb sunt mai importante. De exemplu, o arhiva de cod sursa conine in mare parte text US-ASCII, aa ca ceva precum comanda urmatoare, ar putea oferi un fiier ,,mai slabu" (aproximativ cu 0,1%) mai mic decat cu xz -6e (incercai i fara lc=4): xz --lzma2=preset=6e,pb=0,lc=4 fiierul_sursa.tar Utilizarea unui alt filtru impreuna cu LZMA2 poate imbunatai comprimarea cu anumite tipuri de fiiere. De exemplu, pentru a comprima o biblioteca partajata x86 pe 32 de bii sau x86 pe 64 de bii folosind filtrul BCJ x86: xz --x86 --lzma2 libfoo.so Reinei ca ordinea opiunilor de filtrare este semnificativa. Daca --x86 este specificata dupa --lzma2, xz va da o eroare, deoarece nu poate exista niciun filtru dupa LZMA2 i, de asemenea, pentru ca filtrul x86 BCJ nu poate fi utilizat ca ultimul filtru din lanul de filtrare. Filtrul Delta impreuna cu LZMA2 pot da rezultate bune cu imagini bitmap. De obicei, ar trebui sa intreaca comprimarea PNG, care are cateva filtre mai avansate decat delta simpla, dar utilizeaza Deflate pentru comprimarea reala. Imaginea trebuie sa fie salvata in format necomprimat, de exemplu, ca TIFF necomprimat. Parametrul de distana al filtrului Delta este fixat sa se potriveasca cu numarul de octei per pixel din imagine. De exemplu, bitmap-ul RGB pe 24 de bii necesita dist=3 i este, de asemenea, bine sa pasai pb=0 la LZMA2 pentru a se adapta alinierii pe trei octei: xz --delta=dist=3 --lzma2=pb=0 foo.tiff Daca mai multe imagini au fost introduse intr-o singura arhiva (de exemplu, .tar), filtrul Delta va funciona i pe aceasta atata timp cat toate imaginile au acelai numar de octei per pixel. CONSULTAI I xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1) XZ Utils: XZ Embedded: LZMA SDK: Tukaani 25 februarie 2024 XZ(1)