Provided by: xz-utils_5.6.1+really5.4.5-1ubuntu0.2_amd64 

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 fluxurile comprimate brute fără anteturi de format container sunt de asemenea acceptate.
În plus, este acceptată decomprimarea 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ă pentru 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 acceptat (.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ă, permisiunile 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 accesului 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 instrumentului de decomprimare. De obicei, instrumentul de decomprimare are nevoie de 5%
până la 20% din cantitatea de memorie de care a avut nevoie instrumentul de comprimare la crearea
fișierului. De exemplu, decomprimarea 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 decomprimare 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
decomprimarea 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 valorilor stabilite se face în pași care nu se potrivesc cu valorile
prestabilite ale nivelului de comprimare, de exemplu, dacă limita este doar puțin mai mică decât
cantitatea necesară pentru xz -9, valorile stabilite vor fi reduse 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 informaț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 informaț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 standard. 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 conectată 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 reducerea 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 specificat, 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, formatul fișierului de intrare este detectat automat. Rețineți că fluxurile
brute (create cu --format=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ă. Numele 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. Oamenii 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
utilizatorilor 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 lucru 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 neglijabilă.
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
dezactivarea 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
comprimat extrem de bine. Este recomandat să nu utilizați această opțiune în acest scop decât
dacă integritatea 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
personalizat, 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 utilizarea 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
instrumentul de decomprimare la un nivel rezonabil chiar și pentru sistemele vechi. -6
este valoarea implicită, 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
comprimate 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
prestabilite -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 tampon 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 antetele 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
necomprimate.
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 blocului 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 indica 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 anterioară ș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 utilizat 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 fluxului î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 acestora, 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
echivalentă 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 lucru. 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 lucru poate afecta doar numărul de fire de execuție; acest lucru nu îl va face niciodată pe
xz să refuze decomprimarea 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-decompress.
Spre deosebire de celelalte opțiuni de limită de utilizare a memoriei, opțiunea
--memlimit-mt-decompress=limita are o limită implicită specifică sistemului. Comanda xz
--info-memory poate fi folosită pentru 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 redus de fire de execuție. Rularea lui xz cu depășirea cantității
de memorie fizice(RAM) sau a celei de interschimb(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.
Stabilirea 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-decompress=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 parametrilor 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 comprimarea.
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 numai 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 să treacă în modul cu un singur fir, cu excepția cazului în care este utilizată
opțiunea --no-adjust. Suportul 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 memoriei, 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
comprimarea 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
informaț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 prestabilită 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 decodificarea fluxurilor brute (--format=raw), lanțul de filtrare este specificat în
aceeași ordine în care a fost specificat 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 practice 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 acceptat î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 comprimare, 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ă utilizarea 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 utilizarea 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
corelează 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 caractere 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
implicită î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 raportului 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 normal pentru prestabiliri 4–9.
De obicei, fast este folosit cu instrumentele de căutare de potriviri ale lanțului de sume
de control, ș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 identice, 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ă, trebuie 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). Valoarea 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 suprimată, 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 informaț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ă,
procentul 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 rezultate 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
(--memlimit-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
utilizată pentru a limita numărul de fire de execuție atunci când se comprimă cu un număr automat de
fire de execuț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 indică 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
blocului ș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 cunoscute, 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 trebuie 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. Dimensiunea 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 comprimă 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 necunoscută în antetul .lzma. Aceasta poate fi o problemă în unele situații mai puțin
frecvente. De exemplu, un instrument 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 posibilă 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 comprimate 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 concatenate.
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 presupun 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 codificator 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 verificare 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ă
comprimarea 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 implicit -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 trebui 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
personalizaț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ă profite 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ț” (aproximativ 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 exemplu, 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ă comprimarea 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)