xz, unxz, xzcat, lzma, unlzma, lzcat - Comprimă sau decomprimă
fișiere .xz și .lzma
xz [
opțiune...] [
fișier...]
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.
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ă.
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.
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.
Î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.
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.
-
-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.
-
-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.
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.
-
-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.
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.
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.
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.
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.
- 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.
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
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.
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.
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ă.
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.
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.
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.
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ă.
Comprimă fișierul
foo în
foo.xz folosind
nivelul de comprimare implicit (
-6) și elimină
fișierul
foo dacă comprimarea are succes:
Decomprimă
bar.xz în
bar și nu elimină
bar.xz chiar dacă decomprimarea este efectuată cu succes:
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
Î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.
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
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.
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>