XZ
Section: Utilități XZ (1)
Updated: 01.12.2022
Index
Return to Main Contents
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 tipărește o singură linie cu trei coloane
separate prin tabulatori:
- 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: <http://7-zip.org/sdk.html>
Index
- NUME
-
- REZUMAT
-
- ALIAS COMENZI
-
- DESCRIERE
-
- Utilizarea memoriei
-
- Concatenare și completare (prin umplere cu octeți nuli) cu fișiere .xz
-
- OPȚIUNI
-
- Sufixe de numere întregi și valori speciale
-
- Mod de operare
-
- Modificatori de operare
-
- Formatul de bază al fișierului și opțiunile de comprimare
-
- Lanțuri de filtrare personalizate pentru instrumentul de comprimare
-
- Alte opțiuni
-
- MOD ROBOT
-
- Versiunea
-
- Informații privind limita memoriei
-
- Modul listă
-
- STARE DE IEȘIRE
-
- VARIABILE DE MEDIU
-
- COMPATIBILITATE CU LZMA-UTILS
-
- Niveluri de comprimare prestabilite
-
- Fișiere .lzma transmise în flux vs. netransmise în flux
-
- Fișiere .lzma neacceptate
-
- Resturi rămase
-
- NOTE
-
- Rezultatul comprimării poate varia
-
- Instrumente de decomprimare .xz încorporate
-
- EXEMPLE
-
- Bazice
-
- Comprimarea în paralel a mai multor fișiere
-
- Modul robot
-
- Lanțuri de filtrare personalizate pentru instrumentul de comprimare
-
- CONSULTAȚI ȘI
-
This document was created by
man2html,
using the manual pages.
Time: 09:00:04 GMT, May 18, 2024