xz-utils (5.4.5)

(root)/
share/
man/
ro/
man1/
xz.1
XZ(1) Utilități XZ XZ(1)

NUME
xz, unxz, xzcat, lzma, unlzma, lzcat - Comprimă sau decomprimă fișiere .xz și .lzma

REZUMAT
xz [opțiune...] [fișier...]

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.

Când scrieți scripturi care trebuie să decomprime fișiere, este recomandat să folosiți întotdeauna comanda xz cu
argumentele adecvate (xz -d sau xz -dc) în loc de comenzile unxz și xzcat.

DESCRIERE
xz este un instrument de comprimare a datelor de uz general cu sintaxă de linie de comandă similară cu gzip(1) și
bzip2(1). Formatul de fișier nativ este formatul .xz, dar formatul vechi .lzma folosit de LZMA Utils și fluxu‐
rile comprimate brute fără anteturi de format container sunt de asemenea acceptate. În plus, este acceptată de‐
comprimarea formatului .lz folosit de lzip.

xz comprimă sau decomprimă fiecare fișier în funcție de modul de operare selectat. Dacă nu sunt date fișiere sau
fișier este -, xz citește de la intrarea standard și scrie datele procesate la ieșirea standard. xz va refuza
(afișează o eroare și omite fișier) să scrie date comprimate la ieșirea standard dacă este un terminal. În mod
similar, xz va refuza să citească datele comprimate de la intrarea standard dacă este un terminal.

Cu excepția cazului în care este specificată opțiunea --stdout, fișierele altele decât - sunt scrise într-un
fișier nou al cărui nume este derivat din numele fișierului sursă:

• La comprimare, sufixul formatului de fișier țintă (.xz sau .lzma) este atașat la numele fișierului sursă pen‐
tru a se obține numele fișierului țintă.

• La decomprimare, sufixul .xz, .lzma sau .lz este eliminat din numele fișierului pentru a se obține numele
fișierului țintă. xz recunoaște și sufixele .txz și .tlz și le înlocuiește cu sufixul .tar.

Dacă fișierul țintă există deja, este afișată o eroare și fișier este omis.

Cu excepția cazului în care scrie la ieșirea standard, xz va afișa un avertisment și va omite fișierul dacă se
aplică oricare dintre următoarele:

Fișierul nu este un fișier obișnuit. Legăturile simbolice nu sunt urmate și, prin urmare, nu sunt considerate
fișiere obișnuite.

Fișierul are mai mult de o legătură dură.

Fișierul are activat bitul «setuid», «setgid» sau cel lipicios(sticky).

• Modul de operare este stabilit la comprimare și fișier are deja un sufix al formatului de fișier țintă (.xz
sau .txz când se comprimă în formatul .xz și .lzma sau .tlz când se comprimă în formatul .lzma).

• Modul de operare este stabilit la decomprimare și fișierul nu are un sufix al niciunui format de fișier accep‐
tat (.xz, .txz, .lzma, .tlz, sau .lz).

După comprimarea sau decomprimarea cu succes a fișierului, xz copiază proprietarul, grupul, permisiunile, timpul
de acces și timpul de modificare din fișierul sursă în fișierul țintă. Dacă copierea grupului eșuează, permisiu‐
nile sunt modificate astfel încât fișierul țintă să nu devină accesibil utilizatorilor care nu aveau permisiunea
de a accesa fișierul sursă. xz nu acceptă încă copierea altor metadate, cum ar fi listele de control al accesu‐
lui sau atributele extinse.

Odată ce fișierul țintă a fost închis cu succes, fișierul sursă este eliminat dacă nu a fost specificată opțiunea
--keep. Fișierul sursă nu este niciodată eliminat dacă rezultatul este scris la ieșirea standard sau dacă apare
o eroare.

Trimiterea unui semnal SIGINFO sau SIGUSR1 către procesul xz face ca acesta să imprime informații despre progres
la ieșirea de eroare standard. Acest lucru are o utilizare limitată, deoarece atunci când ieșirea de eroare
standard este un terminal, folosind opțiunea --verbose va afișa un indicator de progres de actualizare automată.

Utilizarea memoriei
Cantitatea de memorie utilizată de xz variază de la câteva sute de kiloocteți la câțiva gigaocteți, în funcție de
opțiunile de comprimare. Opțiunile utilizate la comprimarea unui fișier determină cerințele de memorie ale in‐
strumentului de decomprimare. De obicei, instrumentul de decomprimare are nevoie de 5% până la 20% din canti‐
tatea de memorie de care a avut nevoie instrumentul de comprimare la crearea fișierului. De exemplu, decompri‐
marea unui fișier creat cu xz -9 necesită în prezent 65Mio de memorie. Totuși, este posibil să aveți fișiere .xz
care necesită câțiva gigaocteți de memorie pentru decomprimare.

În special utilizatorii de sisteme mai vechi pot considera deranjantă posibilitatea unei utilizări foarte mari a
memoriei. Pentru a preveni surprizele neplăcute, xz are încorporat un limitator de utilizare a memoriei, care
este dezactivat implicit. În timp ce unele sisteme de operare oferă modalități de a limita utilizarea memoriei
proceselor, bazarea pe aceasta nu a fost considerată a fi suficient de flexibilă (de exemplu, utilizarea
ulimit(1) pentru a limita memoria virtuală tinde să paralizeze mmap(2)).

Limitatorul de utilizare a memoriei poate fi activat cu opțiunea din linia de comandă --memlimit=limita. Adesea
este mai convenabil să activați limitatorul în mod implicit prin definirea variabilei de mediu XZ_DEFAULTS, de
exemplu, XZ_DEFAULTS=--memlimit=150MiB. Este posibil să stabiliți limitele separat pentru comprimare și decom‐
primare folosind --memlimit-compress=limita și --memlimit-decompress=limita. Utilizarea acestor două opțiuni în
afara XZ_DEFAULTS este foarte rar utilă, deoarece o singură rulare a xz nu poate face atât comprimarea, cât și
decomprimarea și --memlimit=limita (sau -M limita ) este mai scurt de tastat pe linia de comandă.

Dacă limita de utilizare a memoriei specificată este depășită la decomprimare, xz va afișa o eroare și decompri‐
marea fișierului va eșua. Dacă limita este depășită la comprimare, xz va încerca să reducă valorile stabilite
astfel încât limita să nu mai fie depășită (cu excepția cazului în care se utilizează opțiunea --format=raw sau
--no-adjust). În acest fel, operațiunea nu va eșua decât dacă limita stabilită este foarte mică. Scalarea valo‐
rilor stabilite se face în pași care nu se potrivesc cu valorile prestabilite ale nivelului de comprimare, de ex‐
emplu, dacă limita este doar puțin mai mică decât cantitatea necesară pentru xz -9, valorile stabilite vor fi re‐
duse doar puțin , nu până la valoarea prestabilită a lui xz -8.

Concatenare și completare (prin umplere cu octeți nuli) cu fișiere .xz
Este posibil să concatenați fișierele .xz așa cum sunt. xz va decomprima astfel de fișiere ca și cum ar fi un
singur fișier .xz.

Este posibil să se introducă umplutură între părțile concatenate sau după ultima parte. Umplutura trebuie să fie
compusă din octeți nuli, iar dimensiunea umpluturii trebuie să fie un multiplu de patru octeți. Acest lucru
poate fi util, de exemplu, dacă fișierul .xz este stocat pe un mediu care măsoară dimensiunile fișierelor în
blocuri de 512 de octeți.

Concatenarea și completarea nu sunt permise cu fișierele .lzma sau fluxurile brute.

OPȚIUNI
Sufixe de numere întregi și valori speciale
În majoritatea locurilor în care este de așteptat un număr întreg ca argument, un sufix opțional este acceptat
pentru a indica cu ușurință numerele întregi mari. Nu trebuie să existe spațiu între numărul întreg și sufix.

KiB Înmulțește numărul întreg cu 1.024 (2^10). Ki, k, kB, K și KB sunt acceptate ca sinonime pentru KiB.

MiB Înmulțește numărul întreg cu 1,048,576 (2^20). Mi, m, M, și MB sunt acceptate ca sinonime pentru MiB.

GiB Înmulțește numărul întreg cu 1,073,741,824 (2^30). Gi, g, G, și GB sunt acceptate ca sinonime pentru GiB.

Valoarea specială max poate fi utilizată pentru a indica valoarea maximă întreagă suportată de opțiune.

Mod de operare
Dacă sunt date mai multe opțiuni de mod de funcționare, ultima dintre ele, este cea care va avea efect.

-z, --compress
Comprimare. Acesta este modul de operare implicit atunci când nu este specificată nicio opțiune de mod de
funcționare și nici un alt mod de operare nu este implicat din numele comenzii (de exemplu, unxz implică
--decompress).

-d, --decompress, --uncompress
Decomprimare.

-t, --test
Testează integritatea fișierelor comprimate. Această opțiune este echivalentă cu --decompress --stdout cu
excepția faptului că datele decomprimate sunt înlăturate în loc să fie scrise la ieșirea standard. Nu
sunt create sau eliminate fișiere.

-l, --list
Afișează informații despre fișiere comprimate. Nu are loc nicio decomprimare la ieșire și nu sunt create
sau eliminate fișiere. În modul listă, programul nu poate citi datele comprimate din intrarea standard
sau din alte surse care nu pot fi căutate.

Listarea implicită arată informații de bază despre fișiere, câte un fișier pe linie. Pentru a obține in‐
formații mai detaliate, utilizați și opțiunea --verbose. Pentru și mai multe informații, utilizați
opțiunea --verbose de două ori, dar rețineți că acest lucru poate fi lent, deoarece obținerea tuturor in‐
formațiilor suplimentare necesită multe căutări. Lățimea ieșirii detaliate depășește 80 de caractere,
deci canalizarea ieșirii către, de exemplu, less -S poate fi convenabilă dacă terminalul nu este suficient
de lat.

Ieșirea exactă poate varia între versiunile xz și diferitele localizări(configurările regionale). Pentru
ieșiri care pot fi citite de mașină, ar trebui utilizată opțiunea --robot --list.

Modificatori de operare
-k, --keep
Nu șterge fișierele de intrare.

Începând cu xz 5.2.6, această opțiune face ca xz să comprime sau să decomprime, chiar dacă intrarea este o
legătură simbolică către un fișier obișnuit, are mai mult de-o legătură dură sau are marcați biții setuid,
setgid sau bitul lipicios. Biții setuid, setgid și bitul lipicios nu sunt copiați în fișierul țintă. În
versiunile anterioare acest lucru se făcea numai cu ajutorul opțiunii --force.

-f, --force
Această opțiune are mai multe efecte:

• Dacă fișierul țintă există deja, îl șterge înainte de comprimare sau decomprimare.

• Comprimă sau decomprimă chiar dacă intrarea este o legătură simbolică către un fișier obișnuit, are mai
mult de-o legătură dură sau are marcați biții setuid, setgid sau bitul lipicios. Biții setuid, setgid
și bitul lipicios nu sunt copiați în fișierul țintă.

• Când este utilizată cu opțiunile --decompress și --stdout, comanda xz nu poate recunoaște tipul
fișierului sursă, și copiază fișierul sursă așa cum este la ieșirea standard. Acest lucru permite
comenzii xzcat --force să fie folosită drept comanda cat(1) pentru fișierele care nu au fost comprimate
cu xz. Rețineți că, în viitor, xz ar putea să accepte noi formate de fișiere comprimate, ceea ce poate
face ca xz să decomprime mai multe tipuri de fișiere în loc să le copieze așa cum sunt la ieșirea stan‐
dard. Opțiunea --format=format poate fi folosită pentru a restricționa xz să decomprime doar un singur
format de fișier.

-c, --stdout, --to-stdout
Scrie datele comprimate sau decomprimate la ieșirea standard în loc de într-un fișier. Aceasta implică
--keep.

--single-stream
Decomprimă numai primul flux .xz și ignoră în tăcere posibilele date de intrare rămase în urma fluxului.
În mod normal, astfel de resturi rămase face ca xz să afișeze o eroare.

xz nu decomprimă niciodată mai mult de un flux din fișierele .lzma sau din fluxurile brute, dar această
opțiune face ca xz să ignore posibilele resturi de date rămase după fișierul .lzma sau fluxul brut.

Această opțiune nu are efect dacă modul de funcționare nu este --decompress sau --test.

--no-sparse
Dezactivează crearea de fișiere dispersate. În mod implicit, dacă decomprimă într-un fișier obișnuit, xz
încearcă să facă fișierul dispersat dacă datele decomprimate conțin secvențe lungi de zerouri binare. De
asemenea, funcționează atunci când scrie la ieșirea standard, atâta timp cât ieșirea standard este conec‐
tată la un fișier obișnuit și sunt îndeplinite anumite condiții suplimentare pentru a o face în siguranță.
Crearea de fișiere dispersate poate economisi spațiu pe disc și poate accelera decomprimarea prin reduc‐
erea cantității de date de In/Ieș pe disc.

-S .suf, --suffix=.suf
Când comprimă, utilizează .suf ca sufix pentru fișierul țintă în loc de .xz sau .lzma. Dacă nu scrie la
ieșirea standard și fișierul sursă are deja sufixul .suf, este afișat un avertisment și fișierul este
omis.

Când decomprimă, recunoaște fișierele cu sufixul .suf în plus față de fișierele cu sufixul .xz, .txz,
.lzma, .tlz sau .lz. Dacă fișierul sursă are sufixul .suf, sufixul este eliminat pentru a obține numele
fișierului țintă.

La comprimarea sau decomprimarea fluxurilor brute (--format=raw), sufixul trebuie să fie întotdeauna spec‐
ificat, cu excepția cazului în care se scrie la ieșirea standard, deoarece nu există un sufix implicit
pentru fluxurile brute.

--files[=fișier]
Citește numele fișierelor de procesat din fișier; dacă fișierul este omis, numele fișierelor sunt citite
de la intrarea standard. Numele de fișiere trebuie să fie terminate cu caracterul de linie nouă. O
liniuță (-) este luată ca nume de fișier obișnuit; nu înseamnă intrarea standard. Dacă numele de fișiere
sunt date și ca argumente în linia de comandă, ele sunt procesate înainte ca numele fișierelor să fie
citite din fișier.

--files0[=fișier]
Această opțiune este identică cu --files[=fișier], cu excepția faptului că fiecare nume de fișier trebuie
să fie terminat cu caracterul nul.

Formatul de bază al fișierului și opțiunile de comprimare
-F format, --format=format
Specifică formatul fișierului pentru comprimare sau decomprimare:

auto Aceasta este valoarea implicită. La comprimare, auto este echivalent cu xz. La decomprimare, for‐
matul fișierului de intrare este detectat automat. Rețineți că fluxurile brute (create cu --for‐
mat=raw) nu pot fi detectate automat.

xz Comprimă în formatul de fișier .xz sau acceptă numai fișierele .xz când decomprimă.

lzma, alone
Comprimă în formatul de fișier .lzma vechi sau acceptă numai fișierele .lzma când decomprimă. Nu‐
mele alternativ alone este furnizat pentru compatibilitatea cu versiunile mai vechi de LZMA Utils.

lzip Acceptă numai fișierele .lz când decomprimă. Comprimarea nu este acceptată.

Formatul .lz versiunea 0 și versiunea neextinsă 1 sunt acceptate. Fișierele versiunea 0 au fost
produse de lzip cu versiunea 1.3 sau mai veche. Astfel de fișiere nu sunt obișnuite, dar pot fi
găsite în arhivele de fișiere, deoarece câteva pachete sursă au fost lansate în acest format. Oa‐
menii ar putea avea și fișiere personale vechi în acest format. Suportul de decomprimare pentru
versiunea de format 0 a fost eliminat în lzip 1.18.

lzip 1.4 și versiunile ulterioare creează fișiere în formatul versiunea 1. Extensia „sync flush
marker” pentru versiunea 1 de format a fost adăugată în lzip 1.6. Această extensie este folosită
rar și nu este acceptată de xz (diagnosticată ca intrare coruptă).

raw Comprimă sau decomprimă un flux brut (fără anteturi). Acest lucru este destinat doar utilizato‐
rilor avansați. Pentru a decodifica fluxurile brute, trebuie să utilizați opțiunea --format=raw și
să specificați în mod explicit lanțul de filtre, care în mod normal ar fi fost stocat în anteturile
containerului.

-C verificarea, --check=verificarea
Specifică tipul verificării integrității. Verificarea este calculată din datele necomprimate și stocată
în fișierul .xz. Această opțiune are efect numai la comprimarea în format .xz; formatul .lzma nu acceptă
verificări de integritate. Verificarea integrității (dacă există) este efectuată atunci când fișierul .xz
este decomprimat.

Tipuri de verificare acceptate:

none Nu calculează deloc o verificare a integrității. Aceasta este de obicei o idee proastă. Acest lu‐
cru poate fi util atunci când integritatea datelor este oricum verificată prin alte mijloace.

crc32 Calculează CRC32 folosind polinomul din IEEE-802.3 (Ethernet).

crc64 Calculează CRC64 folosind polinomul din ECMA-182. Aceasta este valoarea implicită, deoarece este
ceva mai bună decât CRC32 la detectarea fișierelor deteriorate, iar diferența de viteză este negli‐
jabilă.

sha256 Calculează SHA-256. Acest lucru este oarecum mai lent decât CRC32 și CRC64.

Integritatea antetelor .xz este întotdeauna verificată cu CRC32. Nu este posibilă modificarea sau dezac‐
tivarea acesteia.

--ignore-check
Nu efectuează verificarea integrității datelor comprimate la decomprimare. Valorile CRC32 din antetele
.xz vor fi însă verificate normal.

Nu utilizați această opțiune decât dacă știți ce faceți. Motive posibile pentru a utiliza această opțiune:

• Încercarea de a recupera datele dintr-un fișier .xz corupt.

• Accelerarea decomprimării. Acest lucru contează mai ales cu SHA-256 sau cu fișierele care s-au compri‐
mat extrem de bine. Este recomandat să nu utilizați această opțiune în acest scop decât dacă integri‐
tatea fișierului este verificată extern într-un alt mod.

-0 ... -9
Selectează un nivel prestabilit de comprimare. Valoarea implicită este -6. Dacă sunt specificate mai
multe niveluri prestabilite, ultimul are efect. Dacă a fost deja specificat un lanț de filtre personal‐
izat, specificarea unui nivel prestabilit de comprimare șterge lanțul de filtre personalizat.

Diferențele dintre valorile prestabilite sunt mai semnificative decât cu gzip(1) și bzip2(1). Valorile de
comprimare selectate determină cerințele de memorie ale instrumentului de decomprimare, astfel încât uti‐
lizarea unui nivel prea mare prestabilit ar putea face „dureroasă” decomprimarea fișierului pe un sistem
vechi cu puțină memorie RAM. Mai exact, nu este o idee bună să folosiți orbește -9 pentru tot așa cum se
întâmplă adesea cu gzip(1) și bzip2(1).

-0 ... -3
Acestea sunt valorile prestabilite oarecum rapide. -0 este uneori mai rapid decât gzip -9 în timp
ce comprimă mult mai bine. Cele mai ridicate au adesea viteza comparabilă cu bzip2(1) cu un raport
de comprimare comparabil sau mai bun, deși rezultatele depind foarte mult de tipul de date care
sunt comprimate.

-4 ... -6
Comprimare bună spre foarte bună, păstrând în același timp utilizarea memoriei de către instrumen‐
tul de decomprimare la un nivel rezonabil chiar și pentru sistemele vechi. -6 este valoarea im‐
plicită, care este de obicei o alegere bună pentru distribuirea fișierelor care trebuie să poată fi
decomprimate chiar și pe sisteme cu doar 16Mio de memorie RAM. Opțiunile (-5e sau -6e ar putea fi
demne de luat în considerare. A se vedea opțiunea --extreme.)

-7 ... -9
Acestea sunt precum -6, dar cu cerințe mai mari de memorie pentru comprimare și decomprimare.
Acestea sunt utile numai atunci când comprimați fișiere mai mari de 8Mio, 16Mio și, respectiv,
32Mio.

Pe același hardware, viteza de decomprimare este aproximativ un număr constant de octeți de date compri‐
mate pe secundă. Cu alte cuvinte, cu cât comprimarea este mai bună, cu atât decomprimarea va fi de obicei
mai rapidă. Aceasta înseamnă, de asemenea, că valoarea de la ieșire a cantității de date necomprimate
produsă pe secundă poate varia foarte mult.

Următorul tabel rezumă 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:

• DimDict este dimensiunea dicționarului LZMA2. Este o risipă de memorie să folosești un dicționar mai
mare decât dimensiunea fișierului necomprimat. De aceea este bine să evitați utilizarea valorilor
prestabilite -7 ... -9 atunci când nu este nevoie cu adevărat de ele. Pentru valoarea prestabilită -6
sau alta mai mică, cantitatea de memorie irosită este de obicei suficient de mică pentru a nu conta.

• CPUComp este o reprezentare simplificată a configurărilor LZMA2 care afectează viteza de comprimare.
Dimensiunea dicționarului afectează și viteza, așa că, în timp ce CPUComp este aceeași pentru
nivelurile -6 ... -9, nivelurile mai mari tind să fie puțin mai lente. Pentru a obține o comprimare și
mai lentă și, astfel, posibil mai bună, consultați opțiunea --extreme.

• MemComp conține cerințele de memorie ale comprimării în modul cu un singur fir de execuție. Poate
varia ușor între versiunile xz. Cerințele de memorie ale unora dintre viitoarele moduri cu mai multe
fire de execuție pot să fie din nefericire cu mult mai mari decât cele ale modului cu un singur fir.

• MemDec conține cerințele de memorie pentru decomprimare. Adică, configurările de comprimare determină
cerințele de memorie ale decomprimării. Cantitatea exactă a memoriei utilizate la decomprimare este
puțin mai mare decât dimensiunea dicționarului LZMA2, dar valorile din tabel au fost rotunjite la
următorul Mio.

-e, --extreme
Utilizează o variantă mai lentă a nivelului prestabilit de comprimare selectat (-0 ... -9) pentru a obține
un raport de comprimare puțin mai bun, dar din nefericire, acest lucru îl poate înrăutăți. Utilizarea
memoriei pentru decomprimare nu este afectată, dar utilizarea memoriei la comprimare crește puțin la
nivelurile prestabilite -0 ... -3.

Deoarece există două valori prestabilite cu dimensiuni ale dicționarului de 4Mio și 8Mio, valorile presta‐
bilite -3e și -5e folosesc configurări puțin mai rapide (CPUComp mai mic) decât -4e și -6e, respectiv. În
acest fel, nu există două 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, există un total de patru nivele prestabilite care folosesc dicționarul 8Mio, a căror ordine de
la cel mai rapid la cel mai lent este -5, -6, -5e și -6e .

--fast
--best Acestea sunt alias de opțiuni, oarecum înșelătoare pentru -0 și, respectiv, -9. Acestea sunt furnizate
numai pentru compatibilitatea cu LZMA Utils. Evitați utilizarea acestor opțiuni.

--block-size=dimensiunea
Când comprimă în formatul .xz, împarte datele de intrare în blocuri de dimensiunea octeți. Blocurile sunt
comprimate independent unul de celălalt, ceea ce ajută în modul cu mai multe fire de execuție și face
posibilă decomprimarea cu acces aleatoriu limitat. Această opțiune este de obicei folosită pentru a
suprascrie dimensiunea implicită a blocului în modul cu mai multe fire de execuție, dar această opțiune
poate fi folosită și în modul cu un singur fir de execuție.

În modul cu mai multe fire de execuție, aproximativ de trei ori dimensiunea de octeți vor fi alocați în
fiecare fir pentru stocarea intrării și ieșirii. Dimensiunea implicită este de trei ori dimensiunea
dicționarului LZMA2 sau 1Mio, oricare dintre acestea este mai mare. În mod obișnuit, o valoare bună este
de două la patru ori dimensiunea dicționarului LZMA2 sau de cel puțin 1Mio. Utilizarea unei dimensiuni
mai mici decât dimensiunea dicționarului LZMA2 este o risipă de memorie RAM, deoarece atunci memoria tam‐
pon a dicționarului LZMA2 nu va fi niciodată utilizată pe deplin. Dimensiunile blocurilor sunt stocate în
antetele blocurilor, pe care o versiune viitoare a xz le va folosi pentru decomprimarea cu mai multe fire
de execuție.

În modul cu un singur fir de execuție, nicio divizare a blocurilor nu se face în mod implicit. Folosirea
acestei opțiuni nu afectează utilizarea memoriei. Nu sunt stocate informații despre dimensiune în an‐
tetele blocurilor, astfel încât fișierele create în modul cu un singur fir de execuție nu vor fi identice
cu fișierele create în modul cu mai multe fire de execuție. Lipsa informațiilor despre dimensiune
înseamnă, de asemenea, că o versiune viitoare de xz nu va putea decomprima fișierele în modul cu mai multe
fire de execuție.

--block-list=dimensiuni
Atunci când comprimă în formatul .xz, începe un nou bloc după intervalele specificate, de date necompri‐
mate.

Dimensiunile necomprimate ale blocurilor sunt specificate ca o listă separată prin virgule. Omiterea unei
dimensiuni (două sau mai multe virgule consecutive) este o prescurtare pentru a folosi dimensiunea blocu‐
lui anterior.

Dacă fișierul de intrare este mai mare decât suma dimensiunilor, ultima valoare din dimensiuni se repetă
până la sfârșitul fișierului. O valoare specială de 0 poate fi utilizată ca ultima valoare pentru a in‐
dica faptul că restul fișierului ar trebui să fie codificat ca un singur bloc.

Dacă se specifică dimensiuni care depășesc dimensiunea blocului codificatorului (fie valoarea implicită în
modul fire de execuție, fie valoarea specificată cu opțiunea --block-size=dimensiune), codificatorul va
crea blocuri suplimentare păstrând în același timp limitele specificate în dimensiuni. De exemplu, dacă
se specifică --block-size=10MiB --block-list=5MiB,10MiB,8MiB,12MiB,24MiB iar fișierul de intrare este de
80Mio, se vor obține 11 blocuri de: 5, 10, 8, 10, 2, 10, 10, 4, 10, 10 și 1Mio.

În modul cu mai multe fire de execuție, dimensiunile blocurilor sunt stocate în antetele blocurilor.
Acest lucru nu se face în modul cu un singur fir de execuție, astfel încât ieșirea codificată nu va fi
identică cu cea a modului cu mai multe fire de execuție.

--flush-timeout=timp_limită
La comprimare, dacă au trecut mai mult de timp_limită milisecunde (un întreg pozitiv) de la curățarea an‐
terioară și citirea mai multor intrări s-ar bloca, toate datele de intrare în așteptare sunt eliminate din
codificator și puse la dispoziție în fluxul de ieșire. Acest lucru poate să fie util dacă xz este uti‐
lizat pentru a comprima datele care sunt transmise în flux printr-o rețea. Valorile mici de timp_limită
fac datele disponibile la capătul de recepție cu o mică întârziere, dar valorile mari de timp_limită oferă
un raport de comprimare mai bun.

Această caracteristică este dezactivată în mod implicit. Dacă această opțiune este specificată de mai
multe ori, ultima este cea care se ia în considerare. Valoarea specială a lui timp_limită de 0, poate fi
utilizată pentru a dezactiva în mod explicit această caracteristică.

Această caracteristică nu este disponibilă în sistemele non-POSIX.

Această caracteristică este încă experimentală. În prezent, xz este nepotrivit pentru decomprimarea fluxu‐
lui în timp real datorită modului în care xz utilizează memoria tampon.

--memlimit-compress=limita
Stabilește o limită de utilizare a memoriei pentru comprimare. Dacă această opțiune este specificată de
mai multe ori, ultima va avea efect.

Dacă parametrii de comprimare depășesc limita, xz va încerca să ajusteze parametrii scăzând valorile aces‐
tora, astfel încât limita să nu mai fie depășită și va afișa o notificare că ajustarea automată a fost
efectuată. Ajustările se fac în această ordine: reducerea numărului de fire, trecerea la modul un singur
fir de execuție dacă chiar și un singur fir în modul cu mai multe fire de execuție depășește limita și, în
final, reducerea dimensiunii dicționarului LZMA2.

Când comprimă cu opțiunea --format=raw sau dacă a fost specificată opțiunea --no-adjust, numai numărul de
fire poate fi redus, deoarece se poate face fără a afecta rezultatul comprimării.

Dacă limita nu poate fi îndeplinită chiar și cu ajustările descrise mai sus, este afișată o eroare și xz
va ieși cu starea de ieșire 1.

Limita poate fi specificata în mai multe moduri:

Limita poate fi o valoare absolută în octeți. Utilizarea unui sufix întreg precum MiB poate fi utilă.
De exemplu: --memlimit-compress=80MiB

Limita poate fi specificată ca procent din memoria fizică totală (RAM). Acest lucru poate fi util mai
ales atunci când definiți variabila de mediu XZ_DEFAULTS într-un script de inițializare shell care este
partajat între diferite calculatoare. În acest fel, limita este automat mai mare pe sistemele cu mai
multă memorie. De exemplu: --memlimit-compress=70%

Limita poate fi restabilită la valoarea implicită dându-i valoarea 0. În prezent, aceasta este echiva‐
lentă cu stabilirea limitei la max (fără limită de utilizare a memoriei).

Pentru xz pe 32 de biți există un caz special: dacă limita ar fi peste 4020MiB, limita este stabilită la
4020MiB. Pe MIPS32 este stabilită în schimb la 2000MiB. (Valorile 0 și max nu sunt afectate de acest lu‐
cru. O caracteristică similară nu există pentru decomprimare.) Acest lucru poate fi util atunci când un
executabil pe 32 de biți are acces la un spațiu de adrese de 4Gio (2Gio pe MIPS32), se speră că nu produce
daune în alte situații.

Consultați și secțiunea Utilizarea memoriei.

--memlimit-decompress=limita
Stabilește o limită de utilizare a memoriei pentru decomprimare. Acest lucru afectează și modul --list.
Dacă operațiunea nu este posibilă fără a depăși limita, xz va afișa o eroare și decomprimarea fișierului
va eșua. Consultați --memlimit-compress=limita pentru modalitățile posibile de a specifica limita.

--memlimit-mt-decompress=limita
Stabilește o limită de utilizare a memoriei pentru decomprimarea cu mai multe fire de execuție. Acest lu‐
cru poate afecta doar numărul de fire de execuție; acest lucru nu îl va face niciodată pe xz să refuze de‐
comprimarea unui fișier. Dacă limita este prea scăzută pentru a permite orice mod cu mai multe fire de
execuție, limita este ignorată și xz va continua în modul cu un singur fir de execuție. Rețineți că, dacă
se folosește și opțiunea --memlimit-decompress, se va aplica întotdeauna atât modurilor cu un singur fir
de execuție, cât și modurilor cu mai multe fire de execuție și astfel limita efectivă pentru modul cu mai
multe fire de execuție nu va fi niciodată mai mare decât limita stabilită cu opțiunea --memlimit-decom‐
press.

Spre deosebire de celelalte opțiuni de limită de utilizare a memoriei, opțiunea --memlimit-mt-decom‐
press=limita are o limită implicită specifică sistemului. Comanda xz --info-memory poate fi folosită pen‐
tru a vedea valoarea curentă.

Această opțiune și valoarea ei implicită există deoarece, fără nicio limită, decomprimarea cu (mai multe)
fire de execuție ar putea ajunge să aloce o cantitate „nebună” de memorie cu unele fișiere de intrare.
Dacă limita implicită este prea scăzută pe sistemul dumneavoastră, nu ezitați să creșteți limita, dar
niciodată să nu o stabiliți la o valoare mai mare decât cantitatea de memorie RAM utilizabilă și cu niște
fișiere de intrare adecvate, xz va încerca să utilizeze acea cantitate de memorie chiar și cu un număr re‐
dus de fire de execuție. Rularea lui xz cu depășirea cantității de memorie fizice(RAM) sau a celei de in‐
terschimb(swap) nu va îmbunătăți performanța de decomprimare.

Consultați opțiunea --memlimit-compress=limita pentru modalități posibile de a specifica limita. Sta‐
bilirea limitei la 0 restabilește limita la valoarea implicită specifică sistemului.

-M limita, --memlimit=limita, --memory=limita
Aceasta este echivalentă cu specificarea opțiunilor: --memlimit-compress=limita --memlimit-decom‐
press=limita --memlimit-mt-decompress=limita.

--no-adjust
Afișează o eroare și iese dacă limita de utilizare a memoriei nu poate fi îndeplinită fără ajustarea para‐
metrilor care afectează ieșirea comprimată. Adică, acest lucru împiedică xz să comute codificatorul din
modul cu mai multe fire de execuție în modul cu un singur fir de execuție și să reducă dimensiunea
dicționarului LZMA2. Chiar și atunci când această opțiune este utilizată, numărul de fire de execuție
poate fi redus pentru a îndeplini limita de utilizare a memoriei, deoarece aceasta nu va afecta compri‐
marea.

Ajustarea automată este întotdeauna dezactivată la crearea fluxurilor brute (--format=raw).

-T număr, --threads=număr
Specifică numărul de fire de execuție de utilizat. Stabilirea numărului la valoarea specială 0, face ca
xz să utilizeze până la atâtea fire de execuție câte procesoare sunt în sistem. Numărul real de fire de
execuție poate fi mai mic decât număr dacă fișierul de intrare nu este suficient de mare pentru a trece la
modul cu mai multe fire de execuție cu parametrii dați, sau dacă folosirea mai multor fire de execuție ar
depăși limita de utilizare a memoriei.

Operațiile de comprimare cu un singur fir de execuție și cele cu mai multe fire de execuție produc ieșiri
diferite. Comprimarea cu un singur fir de execuție va oferi cea mai mică dimensiune a fișierului, dar nu‐
mai ieșirea de la comprimarea cu mai multe fire de execuție poate fi decomprimată folosind mai multe fire.
Stabilirea numărului la 1 va determina ca xz să folosească modul cu un singur fir de execuție. Stabilirea
numărului la orice altă valoare, inclusiv 0, va determina ca xz să folosească comprimarea cu mai multe
fire de execuție chiar dacă sistemul acceptă doar un fir hardware. (xz 5.2.x folosește modul cu un singur
fir de execuție în această situație.)

Pentru a utiliza modul cu mai multe fire de execuție cu un singur fir, stabiliți numărul la +1. Prefixul
+ nu are efect cu alte valori decât 1. O limită de utilizare a memoriei poate face în continuare xz
treacă în modul cu un singur fir, cu excepția cazului în care este utilizată opțiunea --no-adjust. Supor‐
tul pentru prefixul + a fost adăugat în xz 5.4.0.

Dacă a fost solicitat un număr automat de fire și nu a fost specificată nicio limită de utilizare a memo‐
riei, atunci o limită „maleabilă” implicită specifică sistemului va fi utilizată pentru a limita eventual
numărul de fire de execuție. Este o limită „maleabilă” în sensul că este ignorată dacă numărul de fire
devine unul, astfel o limită „maleabilă” nu va opri niciodată xz să comprime sau să decomprime. Această
limită „maleabilă” implicită nu va face xz să treacă de la modul cu mai multe fire de execuție la modul cu
un singur fir de execuție. Limitele active pot fi văzute rulând comanda xz --info-memory.

În prezent, singura metodă de procesare cu fire de execuție este împărțirea intrării în blocuri și compri‐
marea lor independent unul de celălalt. Dimensiunea implicită a blocului depinde de nivelul de comprimare
și poate fi înlocuită cu opțiunea --block-size=dimensiune.

Decomprimarea cu fire de execuție funcționează numai pe fișierele care conțin mai multe blocuri cu in‐
formații despre dimensiune în antetele blocurilor. Toate fișierele suficient de mari comprimate în modul
cu mai multe fire de execuție îndeplinesc această condiție, dar fișierele comprimate în modul cu un singur
fir de execuție nu o îndeplinesc chiar dacă a fost folosită opțiunea --block-size=dimensiune.

Lanțuri de filtrare personalizate pentru instrumentul de comprimare
Un lanț de filtrare personalizat permite specificarea parametrilor de comprimare în detaliu, în loc să se bazeze
pe cei asociați opțiunilor prestabilite. Când este specificat un lanț de filtrare personalizat, opțiunile
prestabilite (-0 ... -9 și --extreme) de mai devreme din linia de comandă sunt uitate. Dacă o opțiune presta‐
bilită este specificată după una sau mai multe opțiuni de lanț de filtrare personalizat, noua prestabilire intră
în vigoare și opțiunile lanțului de filtrare personalizat, specificate mai devreme sunt uitate.

Un lanț de filtrare este comparabil cu conductele din linia de comandă. La comprimare, intrarea necomprimată
merge la primul filtru, a cărui ieșire merge la următorul filtru (dacă există). Ieșirea ultimului filtru este
scrisă în fișierul comprimat. Numărul maxim de filtre din lanț este de patru, dar de obicei un lanț de filtrare
are doar unul sau două filtre.

Multe filtre au limitări în ceea ce privește locul în care se pot afla în lanțul de filtrare: unele filtre pot
funcționa doar ca ultimul filtru din lanț, altele doar ca non-ultim filtru și unele funcționează în orice poziție
din lanț. În funcție de filtru, această limitare este fie inerentă proiectării filtrului, fie există pentru a
preveni problemele de securitate.

Un lanț de filtrare personalizat este specificat utilizând una sau mai multe opțiuni de filtrare în ordinea în
care sunt cerute în lanțul de filtrare. Adică, ordinea opțiunilor de filtrare este semnificativă! La decodifi‐
carea fluxurilor brute (--format=raw), lanțul de filtrare este specificat în aceeași ordine în care a fost speci‐
ficat la comprimare.

Filtrele iau opțiuni specifice filtrului ca o listă separată prin virgule. Virgulele suplimentare din opțiuni
sunt ignorate. Fiecare opțiune are o valoare implicită, așa că trebuie să specificați numai cele pe care doriți
să le modificați.

Pentru a vedea întregul lanț de filtre și opțiuni, utilizați xz -vv (adică folosiți --verbose de două ori).
Acest lucru funcționează și pentru vizualizarea opțiunilor lanțului de filtre utilizate de valorile prestabilite.

--lzma1[=opțiuni]
--lzma2[=opțiuni]
Adaugă filtrul LZMA1 sau LZMA2 la lanțul de filtre. Aceste filtre pot fi folosite doar ca ultimul filtru
din lanț.

LZMA1 este un filtru vechi, care este acceptat aproape exclusiv datorită formatului de fișier vechi .lzma,
care acceptă numai LZMA1. LZMA2 este o versiune actualizată a LZMA1 pentru a rezolva unele probleme prac‐
tice ale LZMA1. Formatul .xz folosește LZMA2 și nu acceptă deloc LZMA1. Viteza de comprimare și
rapoartele LZMA1 și LZMA2 sunt practic aceleași.

LZMA1 și LZMA2 au același set de opțiuni:

preset=prestabilit
Reconfigurează toate opțiunile LZMA1 sau LZMA2 la prestabilit. Prestabilit constă dintr-un număr
întreg, care poate fi urmat de modificatori prestabiliți cu o singură literă. Numărul întreg poate
fi de la 0 la 9, potrivindu-se cu opțiunile liniei de comandă -0 ... -9. Singurul modificator ac‐
ceptat în prezent este e, care se potrivește cu --extreme. Dacă nu este specificat prestabilit,
valorile implicite ale opțiunilor LZMA1 sau LZMA2 sunt preluate din prestabilirea 6.

dict=dimensiunea
Dimensiunea dicționarului (istoricul memoriei tampon) indică câți octeți din datele necomprimate
recent procesate sunt păstrați în memorie. Algoritmul încearcă să găsească secvențe de octeți care
se repetă (potriviri) în datele necomprimate și să le înlocuiască cu referințe la datele aflate în
prezent în dicționar. Cu cât dicționarul este mai mare, cu atât este mai mare șansa de a găsi o
potrivire. Astfel, creșterea dimensiunii dicționarului îmbunătățește de obicei raportul de compri‐
mare, dar un dicționar mai mare decât fișierul necomprimat este risipă de memorie.

Dimensiuneatipică a dicționarului este de la 64Kio până la 64Mio. Minimul este de 4Kio. Maximul
pentru compresie este în prezent de 1,5Gio (1536Mio). Decomprimarea acceptă deja dicționare cu
până la un octet mai puțin de 4Gio, care este maximul pentru formatele de flux LZMA1 și LZMA2.

Dimensiunea dicționarului și găsitorul de potriviri (match finder) → (mf) determină împreună uti‐
lizarea memoriei de către codificatorul LZMA1 sau LZMA2. Aceeași dimensiune a dicționarului (sau
mai mare) care a fost utilizată la comprimare, este necesară pentru decomprimare, astfel încât uti‐
lizarea memoriei de către decodificator este determinată de dimensiunea dicționarului utilizată la
comprimare. Antetele .xz stochează dimensiunea dicționarului 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 când sunt stocate în anteturile .xz.

lc=lc Specifică numărul de biți de context literal. Minimul este 0 și maximul este 4; implicit este 3.
În plus, suma lc și lp nu trebuie să depășească 4.

Toți octeții care nu pot fi codificați ca potriviri sunt codificați ca literali. Adică, literalii
sunt pur și simplu octeți de 8 biți care sunt codificați unul câte unul.

Codificarea literală presupune că cei mai mari biți lc ai octetului anterior necomprimat se core‐
lează cu octetul următor. De exemplu, în textul tipic englezesc, o literă mare este adesea urmată
de o literă mică, iar o literă mică este urmată de obicei de o altă literă mică. În setul de car‐
actere US-ASCII, cei mai mari trei biți sunt 010 pentru literele mari și 011 pentru literele mici.
Când lc este cel puțin 3, codificarea literală poate profita de această proprietate în datele
necomprimate.

Valoarea implicită (3) este de obicei bună. Dacă doriți o comprimare maximă, testați lc=4. Uneori
ajută puțin, iar uneori înrăutățește comprimarea . Dacă o agravează, încercați de-asemeni cu lc=2.

lp=lp Specifică numărul de biți de poziție literală. Minimul este 0 și maximul este 4; implicit este 0.

Lp afectează ce fel de aliniere în datele necomprimate este presupusă la codificarea literalelor.
Consultați argumentul pb de mai jos pentru mai multe informații despre aliniere.

pb=pb Specifică numărul de biți de poziție. Minimul este 0 și maximul este 4; implicit este 2.

Pb afectează ce fel de aliniere în datele necomprimate este presupusă în general. Valoarea im‐
plicită înseamnă alinierea pe patru octeți (2^pb=2^2=4), care este adesea o alegere bună atunci
când nu există o ipoteză mai bună.

Când alinierea este cunoscută, definirea lui pb în mod corespunzător poate reduce puțin dimensiunea
fișierului. De exemplu, cu fișierele text cu aliniere pe un octet (US-ASCII, ISO-8859-*, UTF-8),
definirea pb=0 poate îmbunătăți ușor comprimarea. Pentru textul UTF-16, pb=1 este o alegere bună.
Dacă alinierea este un număr impar, cum ar fi 3 octeți, pb=0 ar putea fi cea mai bună alegere.

Chiar dacă alinierea presupusă poate fi ajustată cu pb și lp, LZMA1 și LZMA2 încă favorizează ușor
alinierea pe 16 octeți. Ar putea fi demn de luat în considerare atunci când proiectați formate de
fișiere care pot fi adesea comprimate cu LZMA1 sau LZMA2.

mf=mf Căutarea potrivirilor are un efect major asupra vitezei codificatorului, utilizării memoriei și ra‐
portului de comprimare. De obicei, găsitorii de potriviri din lanțul sumelor de control sunt mai
rapizi decât găsitorii de potriviri din arborele binar. Valoarea implicită depinde de prestabilit:
0 folosește hc3, 1–3 folosește hc4, iar restul folosește bt4.

Sunt acceptate următoarele opțiuni de căutare de potriviri. Formulele de utilizare a memoriei de
mai jos sunt aproximări estimative, care se apropie cel mai mult de realitate atunci când dict este
o putere a lui doi.

hc3 Lanț de sumă de control, cu suma de control de 2 și 3 octeți
Valoarea minimă pentru nice: 3
Utilizarea memoriei:
dict * 7.5 (dacă dict <= 16 Mio);
dict * 5.5 + 64 MiB (dacă dict > 16 Mio)

hc4 Lanț de sumă de control, cu suma de control de 2, 3 și 4 octeți
Valoarea minimă pentru nice: 4
Utilizarea memoriei:
dict * 7.5 (dacă dict <= 32 Mio);
dict * 6.5 (dacă dict > 32 Mio)

bt2 Arbore binar cu suma de control de 2 octeți
Valoarea minimă pentru nice: 2
Utilizarea memoriei: dict * 9.5

bt3 Arbore binar cu suma de control de 2 și 3 octeți
Valoarea minimă pentru nice: 3
Utilizarea memoriei:
dict * 11.5 (dacă dict <= 16 Mio);
dict * 9.5 + 64 MiB (dacă dict > 16 Mio)

bt4 Arbore binar cu suma de control de 2, 3 și 4 octeți
Valoarea minimă pentru nice: 4
Utilizarea memoriei:
dict * 11.5 (dacă dict <= 32 Mio);
dict * 10.5 (dacă dict > 32 Mio)

mode=mod
Comprimarea mod specifică metoda de analiză a datelor produse de găsitorul de potriviri. Modurile
acceptate sunt fast(rapid) și normal. Valoarea implicită este fast pentru prestabiliri 0–3 și nor‐
mal pentru prestabiliri 4–9.

De obicei, fast este folosit cu instrumentele de căutare de potriviri ale lanțului de sume de con‐
trol, și normal cu instrumentele de căutare de potriviri din arborele binar. Aceasta este și ceea
ce fac prestabiririle.

nice=nice
Specifică ceea ce este considerat a fi o lungime bună(nice) pentru o potrivire. Odată ce este
găsită o potrivire de cel puțin nice octeți, algoritmul nu mai caută după potriviri posibile mai
bune.

Nice poate fi de 2–273 octeți. Valorile mai mari tind să ofere un raport de comprimare mai bun în
detrimentul vitezei. Valoarea implicită depinde de prestabilit.

depth=adâncimea
Specifică adâncimea maximă de căutare în găsitorul de potriviri. Valoarea implicită este valoarea
specială de 0, ceea ce face ca instrumentul de comprimare să determine o adâncime rezonabilă
pornind de la valorile mf și nice.

Adâncimea rezonabilă pentru lanțuri de sumă de control este 4–100 și 16–1000 pentru arbori binari.
Folosirea unor valori foarte mari pentru adâncime poate face codificatorul extrem de lent cu unele
fișiere. Evitați să stabiliți adâncimea la valori peste 1000, cu excepția cazului în care sunteți
pregătit să întrerupeți comprimarea în cazul în care durează prea mult.

La decodificarea fluxurilor brute (--format=raw), LZMA2 are nevoie doar de dimensiunea dicționarului.
LZMA1 are nevoie de asemenea de lc, lp și pb.

--x86[=opțiuni]
--arm[=opțiuni]
--armthumb[=opțiuni]
--arm64[=opțiuni]
--powerpc[=opțiuni]
--ia64[=opțiuni]
--sparc[=opțiuni]
Adaugă un filtru de ramură/apel/salt (branch/call/jump ⟶ „BCJ”) la lanțul de filtre. Aceste filtre pot fi
utilizate numai ca un filtru care nu este ultimul din lanțul de filtrare.

Un filtru BCJ convertește adresele relative din codul mașinii în omoloagele lor absolute. Acest lucru nu
modifică dimensiunea datelor, dar crește redundanța, ceea ce poate ajuta LZMA2 să producă fișier .xz cu
0–15 % mai mic. Filtrele BCJ sunt întotdeauna reversibile, deci folosind un filtru BCJ pentru tipul
greșit de date nu provoacă nicio pierdere de date, deși poate înrăutăți puțin raportul de comprimare.
Filtrele BCJ sunt foarte rapide și folosesc o cantitate nesemnificativă de memorie.

Aceste filtre BCJ au probleme cunoscute legate de raportul de comprimare:

• Unele tipuri de fișiere care conțin cod executabil (de exemplu, fișiere obiect, biblioteci statice și
module de kernel Linux) au adresele din instrucțiuni completate cu valori de umplere. Aceste filtre
BCJ vor face în continuare conversia adresei, ceea ce va înrăutăți comprimarea cu aceste fișiere.

• Dacă pe o arhivă este aplicat un filtru BCJ, este posibil ca raportul de comprimare să fie mai rău
decât la neutilizarea unui filtru BCJ. De exemplu, dacă există executabile similare sau chiar iden‐
tice, filtrarea va face probabil fișierele mai puțin asemănătoare și astfel comprimarea este mai
proastă. Conținutul fișierelor neexecutabile din aceeași arhivă poate conta și el. În practică, tre‐
buie să încercați cu și fără filtru BCJ pentru a vedea care rezultat este mai bun în fiecare situație.

Seturi de instrucțiuni diferite au o aliniere diferită: fișierul executabil trebuie aliniat la un multiplu
al acestei valori în datele de intrare pentru ca filtrul să funcționeze.

Filtru Aliniere Note
x86 1 x86 pe 32 de biți
sau 64 de biți
ARM 4
ARM-Thumb 2
ARM64 4 alinierea pe 4096-octeți
este cea mai bună
PowerPC 4 Doar big endian
IA-64 16 Itanium
SPARC 4

Deoarece datele filtrate prin BCJ sunt de obicei comprimate cu LZMA2, raportul de comprimare poate fi ușor
îmbunătățit dacă opțiunile LZMA2 sunt definite pentru a se potrivi cu alinierea filtrului BCJ selectat.
De exemplu, cu filtrul IA-64, este bine să stabiliți pb=4 sau chiar pb=4,lp=4,lc=0 cu LZMA2 (2^4=16).
Filtrul x86 este o excepție; de obicei, este bine să rămână la alinierea implicită de patru octeți a LZMA2
atunci când se comprimă executabile x86.

Toate filtrele BCJ acceptă același opțiuni:

start=poziție
Specifică poziția de pornire care este utilizată la conversia între adresele relative și absolute.
Poziția trebuie să fie un multiplu al alinierii filtrului (consultați tabelul de mai sus). Val‐
oarea implicită este zero. În practică, valoarea implicită este bună; specificarea unei poziții
personalizate nu este aproape niciodată utilă.

--delta[=opțiuni]
Adaugă filtrul Delta în lanțul de filtrare. Filtrul Delta poate fi folosit doar ca un filtru care nu este
ultimul în lanțul de filtrare.

În prezent, este acceptat doar calculul delta simplu de octeți. 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 decât Delta + LZMA2. Acest lucru este valabil mai ales în
cazul audio, care se comprimă mai repede și mai bine, de exemplu, cu flac(1).

Opțiuni acceptate:

dist=distanța
Specifică distanța calculului delta în octeți. Distanța trebuie să fie 1–256. Valoarea implicită
este 1.

De exemplu, cu dist=2 și intrare de opt octeți: A1 B1 A2 B3 A3 B5 A4 B7, ieșirea va fi: A1 B1 01 02
01 02 01 02.

Alte opțiuni
-q, --quiet
Suprimă avertismentele și notificările. Specificați acest lucru de două ori pentru a suprima și erorile.
Această opțiune nu are niciun efect asupra stării de ieșire. Adică, chiar dacă o avertizare a fost supri‐
mată, starea de ieșire pentru a indica o avertizare este încă utilizată.

-v, --verbose
Oferă informații detaliate. Dacă ieșirea de eroare standard este conectată la un terminal, xz va afișa un
indicator de progres. Specificarea opțiunii --verbose de două ori, va avea ca rezultat oferirea de in‐
formații și mai detaliate.

Indicatorul de progres afișează următoarele informații:

• Procentul de completare este afișat dacă se cunoaște dimensiunea fișierului de intrare. Adică, procen‐
tul nu poate fi afișat la procesarea fișierului prin conducte(pipe).

• Cantitatea de date comprimate produse (comprimare) sau consumate (decomprimare).

• Cantitatea de date necomprimate consumate (comprimare) sau produse (decomprimare).

• Raportul de comprimare, care se calculează împărțind cantitatea de date comprimate procesate până acum
la cantitatea de date necomprimate procesate până acum.

• Viteza de comprimare sau decomprimare. Aceasta este măsurată drept cantitatea de date necomprimate
consumate (comprimare) sau produse (decomprimare) pe secundă. Este afișată după ce au trecut câteva
secunde de când xz a început procesarea fișierului.

• Timpul scurs în format M:SS sau H:MM:SS.

• Timpul rămas estimat este afișat numai atunci când dimensiunea fișierului de intrare este cunoscută și
au trecut deja câteva secunde de când xz a început procesarea fișierului. Ora este afișată într-un
format mai puțin precis, care nu are niciodată două puncte, de exemplu, 2 min 30 s.

Când ieșirea de eroare standard nu este un terminal, --verbose va face xz să imprime numele fișierului,
dimensiunea comprimată, dimensiunea necomprimată, raportul de comprimare și, eventual, de asemenea, viteza
și timpul scurs pe o singură linie la ieșirea de eroare standard după comprimarea sau decomprimarea
fișierului. Viteza și timpul scurs sunt incluse numai atunci când operațiunea a durat cel puțin câteva
secunde. Dacă operațiunea nu s-a încheiat, de exemplu, din cauza întreruperii din partea utilizatorului,
se imprimă și procentul de completare dacă se cunoaște dimensiunea fișierului de intrare.

-Q, --no-warn
Nu comută starea de ieșire la 2 chiar dacă a fost detectată o condiție care merită avertizată. Această
opțiune nu afectează nivelul de detaliere al informațiilor, astfel încât atât --quiet cât și --no-warn
trebuie folosite pentru a nu afișa avertismente și pentru a nu modifica starea de ieșire.

--robot
Afișează mesajele într-un format care poate fi analizat de mașină. Acest lucru are scopul de a ușura
scrierea interfețelor în care se dorește să se folosească xz în loc de liblzma, ceea ce poate fi cazul cu
diferite scripturi. Ieșirea cu această opțiune activată este menită să fie stabilă în toate versiunile
xz. Consultați secțiunea MOD ROBOT pentru detalii.

--info-memory
Afișează, într-un format care poate fi citit de om, câtă memorie fizică (RAM) și câte fire de execuție de
procesor xz crede că are sistemul și limitele de utilizare a memoriei pentru comprimare și decomprimare și
iese cu succes.

-h, --help
Afișează un mesaj de ajutor care descrie opțiunile cele mai frecvent utilizate și iese cu succes.

-H, --long-help
Afișează un mesaj de ajutor care descrie toate caracteristicile xz și iese cu succes

-V, --version
Afișează numărul versiunii xz și liblzma într-un format care poate fi citit de om. Pentru a obține rezul‐
tate analizabile de mașină, specificați --robot înainte de --version.

MOD ROBOT
Modul robot este activat cu opțiunea --robot. Face ieșirea lui xz mai ușor de analizat de către alte programe.
În prezent, opțiunea --robot este acceptată numai împreună cu opțiunile --version, --info-memory și --list. Va
fi acceptată pentru comprimare și decomprimare în viitor.

Versiunea
xz --robot --version va afișa numărul versiunii xz și liblzma în următorul format:

XZ_VERSION=XYYYZZZS
LIBLZMA_VERSION=XYYYZZZS

X Versiunea majoră.

YYY Versiunea minoră. Numerele pare sunt prezente în versiunile stabile. Numerele impare sunt prezente în
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 să fie întotdeauna 2 atunci când AAA
este par.

XYYYZZZS sunt aceleași pe ambele linii dacă xz și liblzma sunt din aceeași versiune XZ Utils.

Exemple: 4.999.9beta este 49990091 și 5.0.0 este 50000002.

Informații privind limita memoriei
xz --robot --info-memory afișează o singură linie cu multiple coloane separate prin tabulatoare:

1. Cantitatea totală de memorie fizică (RAM) în octeți.

2. Limita de utilizare a memoriei pentru comprimare în octeți (--memlimit-compress). O valoare specială de 0
indică configurarea implicită, care pentru modul cu un singur fir este la fel ca fără limită.

3. Limita de utilizare a memoriei pentru decomprimare în octeți (--memlimit-decompress). O valoare specială de
0 indică configurarea implicită, care pentru modul cu un singur fir este la fel ca fără limită.

4. Începând cu xz 5.3.4alpha: Utilizarea memoriei pentru decomprimarea cu mai multe fire în octeți (--mem‐
limit-mt-decompress). Acesta nu este niciodată zero, deoarece o valoare implicită specifică sistemului
afișată în coloana 5 este utilizată dacă nu a fost specificată în mod explicit nicio limită. De asemenea,
aceasta nu este niciodată mai mare decât valoarea din coloana 3, chiar dacă a fost specificată o valoare mai
mare cu --memlimit-mt-decompress.

5. Începând cu xz 5.3.4alpha: o limită implicită de utilizare a memoriei specifică sistemului, care este uti‐
lizată pentru a limita numărul de fire de execuție atunci când se comprimă cu un număr automat de fire de ex‐
ecuție (--threads=0) și nicio limită de utilizare a memoriei nu fost specificată cu (--memlimit-compress).
Aceasta este, de asemenea, utilizată ca valoare implicită pentru --memlimit-mt-decompress.

6. Începând cu xz 5.3.4alpha: numărul de fire de execuție de procesor disponibile.

În viitor, rezultatul xz --robot --info-memory poate avea mai multe coloane, dar niciodată mai mult de o singură
linie.

Modul listă
xz --robot --list utilizează o ieșire separată de tabulatori. Prima coloană a fiecărei linii are un șir care in‐
dică tipul de informații găsite pe acea linie:

name Aceasta este întotdeauna prima linie când începe să se listeze un fișier. A doua coloană de pe linie este
numele fișierului.

file Această linie conține informații generale despre fișierul .xz. Această linie este întotdeauna tipărită
după linia name.

stream Acest tip de linie este utilizat numai atunci când a fost specificată opțiunea --verbose. Există tot
atâtea linii stream câte fluxuri există în fișierul .xz.

block Acest tip de linie este utilizat numai atunci când a fost specificată opțiunea --verbose. Există tot
atâtea linii block câte blocuri există în fișierul .xz. Liniile block sunt afișate după toate liniile
stream; tipurile diferite de linii nu sunt intercalate.

summary
Acest tip de linie este folosit numai atunci când opțiunea --verbose a fost specificată de două ori.
Această linie este afișată după toate liniile block. Ca și linia file, linia summary conține informații
generale despre fișierul .xz.

totals Această linie este întotdeauna ultima linie din lista afișată la ieșire. Aceasta arată numărul total și
dimensiunile.

Coloanele din liniile file:
2. Numărul de fluxuri din fișier
3. Numărul total de blocuri din fluxuri
4. Dimensiunea comprimată a fișierului
5. Dimensiunea necomprimată a fișierului
6. Raportul de comprimare, de exemplu, 0,123. Dacă raportul este peste 9,999, în locul raportului sunt
afișate trei liniuțe (---).
7. Lista de nume de verificare a integrității, separate prin virgule. Următoarele șiruri sunt utilizate
pentru tipurile de verificare cunoscute: None, CRC32, CRC64 și SHA-256. Pentru tipurile de verificări
necunoscute, se utilizează None-N, unde N este ID-ul de verificare ca număr zecimal (una sau două
cifre).
8. Dimensiunea totală a umpluturii fluxului din fișier

Coloanele din liniile stream:
2. Numărul fluxului (primul flux este 1)
3. Numărul de blocuri din flux
4. Poziția de pornire a comprimării
5. Poziția de pornire a decomprimării
6. Dimensiune comprimată (nu include umplutura fluxului)
7. Dimensiune necomprimată
8. Raport de comprimare
9. Numele verificării de integritate
10. Dimensiunea umpluturii fluxului

Coloanele din liniile block:
2. Numărul fluxului care conține acest bloc
3. Numărul blocului în raport cu începutul fluxului (primul bloc este 1)
4. Numărul blocului în raport cu începutul fișierului
5. Poziția de pornire a comprimării în raport cu începutul fișierului
6. Poziția de pornire necomprimată în raport cu începutul fișierului
7. Dimensiunea totală comprimată a blocului (include antetele)
8. Dimensiune necomprimată
9. Raport de comprimare
10. Numele verificării de integritate

Dacă opțiunea --verbose a fost specificată de două ori, coloane suplimentare sunt incluse pe liniile block.
Acestea nu sunt afișate cu o singură specificare a opțiunii --verbose, deoarece obținerea acestor informații
necesită multe căutări și, prin urmare, poate fi lentă:
11. Valoarea verificării integrității în hexazecimal
12. Dimensiunea antetului blocului
13. Indicatori de bloc: c indică faptul că este prezentă dimensiunea comprimată, iar u indică faptul că
este prezentă dimensiunea necomprimată. Dacă indicatorul nu este determinat, este afișată o liniuță
(-) pentru a menține lungimea șirului fixă. Pot fi adăugate noi indicatoare la sfârșitul șirului, în
viitor.
14. Dimensiunea datelor comprimate reale din bloc (acest lucru exclude antetul blocului, umplutura blocu‐
lui și câmpurile de verificare)
15. Cantitatea de memorie (în octeți) necesară pentru a decomprima acest bloc cu această versiune xz
16. Lanț de filtrare. Rețineți că majoritatea opțiunilor utilizate în timpul comprimării nu pot fi cunos‐
cute, deoarece doar opțiunile necesare pentru decomprimare sunt stocate în anteturile .xz.

Coloanele din liniile summary:
2. Cantitatea de memorie (în octeți) necesară pentru a decomprima acest fișier cu această versiune xz
3. yes sau no indicând dacă toate antetele blocurilor au atât dimensiunea comprimată, cât și dimensiunea
necomprimată stocate în ele
Începând cu xz 5.1.2alpha:
4. Versiunea xz minimă necesară pentru a decomprima fișierul

Coloanele din linia totals:
2. Numărul de fluxuri
3. Numărul de blocuri
4. Dimensiunea comprimată
5. Dimensiune necomprimată
6. Raportul mediu de comprimare
7. Lista de nume de verificare a integrității, separate prin virgule, care au fost prezente în fișiere
8. Dimensiunea umpluturii fluxului
9. Numărul de fișiere. Aceasta este aici pentru a păstra ordinea coloanelor anterioare la fel ca pe
liniile file.

Dacă opțiunea --verbose a fost specificată de două ori, pe linia totals sunt incluse coloane suplimentare:
10. Cantitatea maximă de memorie (în octeți) necesară pentru a decomprima fișierele cu această versiune xz
11. yes sau no indicând dacă toate antetele blocurilor au atât dimensiunea comprimată, cât și dimensiunea
necomprimată stocate în ele
Începând cu xz 5.1.2alpha:
12. Versiunea xz minimă necesară pentru a decomprima fișierul

Versiunile viitoare pot adăuga noi tipuri de linii și pot fi adăugate coloane noi la tipurile de linii existente,
dar coloanele existente nu vor fi modificate.

STARE DE IEȘIRE
0 Totul este bine.

1 A apărut o eroare.

2 A apărut ceva care merită să fie avertizat, dar nu au apărut erori reale.

Notificările (nu avertismentele sau erorile) afișate la ieșirea de eroare standard nu afectează starea de ieșire.

VARIABILE DE MEDIU
xz analizează liste de opțiuni separate prin spații din variabilele de mediu XZ_DEFAULTS și XZ_OPT, în această
ordine, înainte de a analiza opțiunile din linia de comandă. Rețineți că numai opțiunile sunt analizate din
variabilele de mediu; toate non-opțiunile sunt ignorate în tăcere. Analiza se face cu funcția getopt_long(3)
care este folosită și pentru argumentele liniei de comandă.

XZ_DEFAULTS
Opțiuni implicite specifice utilizatorului sau la nivelul întregului sistem. De obicei, acest lucru este
specificat într-un script de inițializare shell pentru a activa limitatorul de utilizare a memoriei lui xz
implicit. Excluzând scripturile de inițializare shell și cazurile speciale similare, scripturile nu tre‐
buie niciodată să modifice sau să dezactiveze XZ_DEFAULTS.

XZ_OPT Acest lucru este pentru transmiterea opțiunilor către xz atunci când nu este posibil să definiți opțiunile
direct în linia de comandă a xz. Acesta este cazul când 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 opțiunile implicite de comprimare specifice
scriptului. Se recomandă totuși să se permită utilizatorilor să înlocuiască XZ_OPT dacă acest lucru este
rezonabil. De exemplu, în 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 comandă a lui xz este practic o super-colecție de lzma, unlzma și lzcat așa cum se găsește în
LZMA Utils 4.32.x. În cele mai multe cazuri, este posibil să înlocuiți LZMA Utils cu XZ Utils fără a întrerupe
scripturile existente. Există totuși unele incompatibilități, care uneori pot cauza probleme.

Niveluri de comprimare prestabilite
Numerotarea nivelurilor de comprimare prestabilite nu este identică în xz și LZMA Utils. Cea mai importantă
diferență este modul în care dimensiunile dicționarului sunt atribuite diferitelor niveluri prestabilite. Dimen‐
siunea dicționarului este aproximativ egală cu memoria utilizată 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

Diferențele de dimensiune a dicționarului afectează deasemenea cantitatea de memorie utilizată la comprimare dar
există și alte diferențe între LZMA Utils și XZ Utils, care fac diferența ș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 în LZMA Utils este -7, în timp ce în XZ Utils este -6, deci ambele folosesc un
dicționar de 8Mio în mod implicit.

Fișiere .lzma transmise în flux vs. netransmise în flux
Dimensiunea necomprimată a fișierului poate fi stocată în antetul .lzma. LZMA Utils face asta atunci când com‐
primă fișiere obișnuite. Alternativa este să marcați că dimensiunea necomprimată este necunoscută și să folosiți
marcajul de sfârșit de încărcare pentru a indica unde ar trebui să se oprească decomprimarea. LZMA Utils
folosește această metodă atunci când dimensiunea necomprimată nu este cunoscută, ceea ce este cazul, de exemplu,
când se folosesc conducte.

xz acceptă decomprimarea fișierelor .lzma cu sau fără marcaj de sfârșit de încărcare, dar toate fișierele .lzma
create de xz vor folosi marcajul de sfârșit de încărcare și vor avea dimensiunea necomprimată marcată ca necunos‐
cută în antetul .lzma. Aceasta poate fi o problemă în unele situații mai puțin frecvente. De exemplu, un in‐
strument de decomprimare .lzma încorporat într-un dispozitiv poate funcționa numai cu fișiere care au dimensiunea
necomprimată cunoscută. Dacă întâmpinați această problemă, trebuie să utilizați LZMA Utils sau LZMA SDK pentru a
crea fișiere .lzma cu dimensiunea necomprimată cunoscută.

Fișiere .lzma neacceptate
Formatul .lzma permite valori lc de până la 8 și valori lp de până la 4. LZMA Utils poate decomprima fișiere cu
orice lc și lp, dar creează întotdeauna fișiere cu lc=3 și lp=0. Crearea de fișiere cu alte lc și lp este posi‐
bilă cu xz și cu LZMA SDK.

Implementarea filtrului LZMA1 în liblzma necesită ca suma lc și lp să nu depășească 4. Altfel, fișierele .lzma,
care depășesc această limitare, nu pot fi decomprimate cu xz.

LZMA Utils creează numai fișiere .lzma care au o dimensiune de dicționar de 2^n (o putere de 2), dar acceptă
fișiere cu orice dimensiune de dicționar. liblzma acceptă numai fișierele .lzma care au dimensiunea de dicționar
de 2^n sau 2^n + 2^(n-1). Acest lucru este pentru a reduce numărul de „fals pozitiv” atunci când se detectează
fișiere .lzma.

Aceste limitări nu ar trebui să fie o problemă în practică, deoarece practic toate fișierele .lzma au fost com‐
primate cu opțiuni pe care liblzma le va accepta.

Resturi rămase
Când decomprimă, LZMA Utils ignoră în tăcere totul după primul flux .lzma. În majoritatea situațiilor, aceasta
este o eroare. Aceasta înseamnă, de asemenea, că LZMA Utils nu acceptă decomprimarea fișierelor .lzma concate‐
nate.

Dacă au rămas date după primul flux .lzma, xz consideră că fișierul este corupt, cu excepția cazului în care a
fost utilizată opțiunea --single-stream. Acest lucru poate rupe scripturile obscure(scrise deficitar) care pre‐
supun că resturile rămase sunt ignorate.

NOTE
Rezultatul comprimării poate varia
Ieșirea exactă comprimată produsă din același fișier de intrare necomprimat poate varia între versiunile XZ
Utils, chiar dacă opțiunile de comprimare sunt identice. Acest lucru se datorează faptului că instrumentul codi‐
ficator poate fi îmbunătățit (comprimare mai rapidă sau mai bună) fără a afecta formatul fișierului. Ieșirea
poate varia chiar și între compilările diferite ale aceleiași versiuni XZ Utils, dacă sunt utilizate opțiuni
diferite de compilare.

Cele de mai sus înseamnă că odată ce opțiunea --rsyncable a fost utilizată, fișierele rezultate nu vor fi
neapărat sincronizate cu rsync decât dacă atât fișierele vechi, cât și cele noi au fost comprimate cu aceeași
versiune xz. Această problemă poate fi remediată dacă o parte a implementării codificatorului este înghețată
pentru a menține stabilă ieșirea „rsyncabilă” între versiunile xz.

Instrumente de decomprimare .xz încorporate
Implementările instrumentului de decomprimare .xz încorporat, cum ar fi XZ Embedded, nu acceptă neapărat fișiere
create cu tipuri de verificare a integrității, altele decât none și crc32. Deoarece valoarea implicită este
--check=crc64, trebuie să utilizați --check=none sau --check=crc32 atunci când creați fișiere pentru sistemele
încorporate.

În afara sistemelor încorporate, toate instrumentele de decomprimare în format .xz acceptă toate tipurile de ver‐
ificare sau cel puțin pot decomprima fișierul fără a efectua verificarea integrității dacă acel tip de verificare
nu este acceptat.

XZ Embedded acceptă filtre BCJ, dar numai cu poziție de pornire implicită.

EXEMPLE
Bazice
Comprimă fișierul foo în foo.xz folosind nivelul de comprimare implicit (-6) și elimină fișierul foo dacă compri‐
marea are succes:

xz foo

Decomprimă bar.xz în bar și nu elimină bar.xz chiar dacă decomprimarea este efectuată cu succes:

xz -dk bar.xz

Creează baz.tar.xz cu nivelul prestabilit -4e (-4 --extreme), care este mai lent decât nivelul prestabilit im‐
plicit -6, dar necesită mai puțină memorie pentru comprimare și decomprimare (48Mio și, respectiv, 5Mio):

tar cf - baz | xz -4e > baz.tar.xz

Un amestec de fișiere comprimate și necomprimate poate fi decomprimat la ieșirea standard cu o singură comandă:

xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt

Comprimarea în paralel a mai multor fișiere
În sisteme GNU și *BSD, find(1) și xargs(1) pot fi utilizate pentru a paraleliza comprimarea mai multor fișiere:

find . -type f \! -name '*.xz' -print0 \ | xargs -0r -P4 -n16 xz -T1

Opțiunea -P pentru comanda xargs(1) stabilește numărul de procese paralele xz. Cea mai bună valoare pentru
opțiunea -n depinde de câte fișiere trebuie să fie comprimate. Dacă există doar câteva fișiere, valoarea ar tre‐
bui probabil să fie 1; cu zeci de mii de fișiere, 100 sau chiar mai mult poate să fie valoarea potrivită pentru a
reduce numărul de procese xz pe care xargs(1) le va crea în final.

Opțiunea -T1 pentru xz este acolo pentru a-l forța să ruleze în modul cu un singur fir de execuție, deoarece
xargs(1) este folosit pentru a controla cantitatea de paralelizare.

Modul robot
Calculează câți octeți au fost salvați în total după comprimarea mai multor fișiere:

xz --robot --list *.xz | awk '/^totals/{print $5-$4}'

Un script poate dori să afle dacă folosește o versiune xz suficient de nouă. Următorul script sh(1) verifică
dacă numărul versiunii instrumentului xz este cel puțin 5.0.0. Această metodă este compatibilă cu versiunile
beta vechi, care nu acceptau opțiunea --robot:

if ! eval "$(xz --robot --version 2> /dev/null)" || [ "$XZ_VERSION" -lt 50000002 ]; then echo "Versiunea dumneavoastră de „xz” este prea veche!" fi unset XZ_VERSION LIBLZMA_VERSION

Stabilește o limită de utilizare a memoriei pentru decomprimare folosind variabila de mediu XZ_OPT, dar dacă o
limită a fost deja stabilită, nu o mărește:

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

Lanțuri de filtrare personalizate pentru instrumentul de comprimare
Cea mai simplă utilizare a lanțurilor de filtrare personalizate este personalizarea unei opțiuni prestabilite
LZMA2. Acest lucru poate fi util, deoarece opțiunile prestabilite acoperă doar un subset al combinațiilor
potențial utile de opțiuni de comprimare.

Coloanele CPUComp din tabelele de descriere a opțiunilor -0 ... -9 și --extreme sunt utile atunci când personal‐
izați opțiunilor prestabilite LZMA2. Iată părțile relevante colectate din aceste două tabele:

ValPrestab CPUComp
-0 0
-1 1
-2 2
-3 3
-4 4
-5 5
-6 6
-5e 7
-6e 8

Dacă știți că un fișier necesită un dicționar oarecum mare (de exemplu, 32Mio) pentru a se comprima bine, dar
doriți să-l comprimați mai repede decât ar face xz -8, o opțiune prestabilită cu o valoare CPUComp scăzută (de
exemplu, 1) poate fi modificată pentru a utiliza un dicționar mai mare:

xz --lzma2=preset=1,dict=32MiB foo.tar

Cu anumite fișiere, comanda de mai sus poate fi mai rapidă decât xz -6 în timp ce comprimă semnificativ mai bine.
Cu toate acestea, trebuie subliniat că doar unele fișiere se beneficiază de un dicționar mare, păstrând în
același timp valoarea CPUComp scăzută. Cea mai evidentă situație, în care un dicționar mare poate ajuta foarte
mult, este o arhivă care conține fișiere foarte asemănătoare de cel puțin câțiva megaocteți fiecare. Dimensiunea
dicționarului trebuie să fie semnificativ mai mare decât orice fișier individual pentru a permite LZMA2 să prof‐
ite din plin de asemănările dintre fișierele consecutive.

Dacă utilizarea unei mari cantități de memorie pentru comprimare și decomprimare este în regulă, iar fișierul
comprimat are cel puțin câteva sute de megaocteți, poate fi util să folosiți un dicționar și mai mare decât cei
64Mio pe care i-ar folosi xz -9:

xz -vv --lzma2=dict=192MiB big_foo.tar

Utilizarea opțiunii -vv (--verbose --verbose) ca în exemplul de mai sus, poate fi utilă pentru a vedea cerințele
de memorie la comprimare și decomprimare. Amintiți-vă că utilizarea unui dicționar mai mare decât dimensiunea
fișierului necomprimat este risipă de memorie, de aceea, comanda de mai sus nu este utilă pentru fișiere mici.

Uneori, timpul de comprimare nu contează, dar utilizarea memoriei la decomprimare trebuie menținută la un nivel
scăzut, de exemplu, pentru a face posibilă decomprimarea fișierului pe un sistem încorporat. Următoarea comandă
folosește -6e (-6 --extreme) ca bază și fixează dimensiunea dicționarului la doar 64Kio. Fișierul rezultat poate
fi decomprimat cu XZ Embedded (de aceea există --check=crc32) folosind aproximativ 100Kio de memorie.

xz --check=crc32 --lzma2=preset=6e,dict=64KiB foo

Dacă doriți să stoarceți cât mai mulți octeți posibil, ajustarea numărului de biți de context literal (lc) și a
numărului de biți de poziție (pb) poate ajuta uneori. Ajustarea numărului de biți de poziție literală (lp) ar
putea ajuta, de asemenea, dar de obicei lc și pb sunt mai importante. De exemplu, o arhivă de cod sursă conține
în mare parte text US-ASCII, așa că ceva precum comanda următoare, ar putea oferi un fișier „mai slăbuț” (aproxi‐
mativ cu 0,1%) mai mic decât cu xz -6e (încercați și fără lc=4):

xz --lzma2=preset=6e,pb=0,lc=4 fișierul_sursă.tar

Utilizarea unui alt filtru împreună cu LZMA2 poate îmbunătăți comprimarea cu anumite tipuri de fișiere. De exem‐
plu, pentru a comprima o bibliotecă partajată x86 pe 32 de biți sau x86 pe 64 de biți folosind filtrul BCJ x86:

xz --x86 --lzma2 libfoo.so

Rețineți că ordinea opțiunilor de filtrare este semnificativă. Dacă --x86 este specificată după --lzma2, xz va
da o eroare, deoarece nu poate exista niciun filtru după LZMA2 și, de asemenea, pentru că filtrul x86 BCJ nu
poate fi utilizat ca ultimul filtru din lanțul de filtrare.

Filtrul Delta împreună cu LZMA2 pot da rezultate bune cu imagini bitmap. De obicei, ar trebui să întreacă com‐
primarea PNG, care are câteva filtre mai avansate decât delta simplă, dar utilizează Deflate pentru comprimarea
reală.

Imaginea trebuie să fie salvată în format necomprimat, de exemplu, ca TIFF necomprimat. Parametrul de distanță
al filtrului Delta este fixat să se potrivească cu numărul de octeți per pixel din imagine. De exemplu,
bitmap-ul RGB pe 24 de biți necesită dist=3 și este, de asemenea, bine să pasați pb=0 la LZMA2 pentru a se adapta
alinierii pe trei octeți:

xz --delta=dist=3 --lzma2=pb=0 foo.tiff

Dacă mai multe imagini au fost introduse într-o singură arhivă (de exemplu, .tar), filtrul Delta va funcționa și
pe aceasta atâta timp cât toate imaginile au același număr de octeți per pixel.

CONSULTAȚI ȘI
xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1)

XZ Utils: <https://tukaani.org/xz/>
XZ Embedded: <https://tukaani.org/xz/embedded.html>
LZMA SDK: <https://7-zip.org/sdk.html>

Tukaani 17.07.2023 XZ(1)