xz(1)

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Namn

xz, unxz, xzcat, lzma, unlzma, lzcat – komprimera eller dekomprimera .xz- och .lzma-filer

Synopsis

xz [flagga]... [fil]...

unxz    ≡  xz --decompress
xzcat   ≡  xz --decompress --stdout
lzma    ≡  xz --format=lzma
unlzma  ≡  xz --format=lzma --decompress
lzcat   ≡  xz --format=lzma --decompress --stdout

Anmärkning: I skript som ska dekomprimera, använd alltid kommandot xz med lämpliga flaggor (xz -d eller xz -dc) istället för namnen unxz och xzcat.

Beskrivning

xz är ett allmänt kommandoradsverktyg för datakomprimering med syntax liknande gzip(1) och bzip2(1). Standardformatet är .xz, men även äldre .lzma samt råströmmar utan containerhuvuden stöds. xz komprimerar eller dekomprimerar varje fil enligt vald lägesflagga. Utan filnamn eller med filnamn - läses från standard in och skrivs till standard ut. xz vägrar skriva komprimerad data till en terminal samt vägrar läsa komprimerad data från en terminal, om inte flaggor tvingar detta. Utan --stdout skapas ny målfil enligt källfilens namn: vid komprimering läggs suffixet .xz eller .lzma till; vid dekomprimering tas .xz eller .lzma bort. Suffixen .txz och .tlz känns också igen och ersätts med .tar. Om målfil redan finns skrivs ett fel och filen hoppas över. Om inte --stdout används hoppas dessutom filen över med varning om den inte är en vanlig fil, om den har fler än en hårdlänk, om setuid/setgid/sticky är satt, om man försöker komprimera en fil som redan har målsuffixet, eller om man försöker dekomprimera en fil utan känt suffix (.xz, .txz, .lzma, .tlz). Efter lyckad operation kopieras ägare, grupp, rättigheter och tidsstämplar från källfilen. Om gruppkopiering misslyckas justeras rättigheter för att inte läcka åtkomst. Övrig metadata (ACL, xattr) kopieras inte. Källfilen tas bort när målfilen stängts, om inte --keep använts eller om utdata skrivs till standard ut. SIGINFO eller SIGUSR1 gör att xz skriver progress till stderr; med --verbose på en terminal visas en automatisk progressindikator.

Minnesanvändning

Minnesanvändningen varierar från hundratals kilobyte till flera gigabyte beroende på komprimeringsinställningar. Dekompressorn behöver typiskt 5–20 % av kompressorns RAM, men värsta fall kan vara flera GB. xz har inbyggd minnesgräns; standard är 40 % av fysiskt RAM. Vid komprimering justeras inställningarna ned automatiskt om gränsen överskrids (utom för --format=raw, där det blir fel och exit 1). Vid dekomprimering hoppas filen över om den inte kan dekomprimeras inom gränsen; fel kan uppstå sent om ett senare block kräver mer minne. Aktiv gräns visas längst ned i --long-help och kan ändras med --memory=gräns.

Flaggor

Heltalssuffix och specialvärden

I heltalsargument kan suffix användas utan mellanrum:

Suffix Multiplikator
k eller kB 1000
Ki eller KiB 1024
M eller MB 1 000 000
Mi eller MiB 1 048 576
G eller GB 1 000 000 000
Gi eller GiB 1 073 741 824

Specialvärdet max betyder största möjliga värde som flaggan stöder.

Lägen (operation mode)

Endast sista av flera lägesflaggor gäller.

Flagga Beskrivning
-z, --compress Komprimera. Standardläge om inget annat anges (utom när kommandonamnet antyder dekomprimering, t.ex. unxz).
-d, --decompress, --uncompress Dekomprimera.
-t, --test Testa integriteten på komprimerade filer. Skapar inte filer; motsvarar --decompress --stdout men kastar utdata.
-l, --list Visa metadata om komprimerade filer; ingen utdata skapas. Kan inte läsa från stdin eller andra icke-sökbara källor. (Funktionen kan vara ofullständig i vissa byggen.)

Modifierare (operation modifiers)

Flagga Beskrivning
-k, --keep Behåll indatafiler (ta inte bort efter lyckad operation).
-f, --force Flera effekter: skriv över målfil om den finns; tillåt icke-vanliga filer, flera hårdlänkar eller setuid/setgid/sticky (bitarna kopieras inte); i kombination med --decompress --stdout kopieras okända filtyper rått till stdout, vilket gör xzcat --force likt cat(1); tillåt I/O mot terminal.
-c, --stdout, --to-stdout Skriv komprimerad/dekomprimerad data till standard ut. Implicerar --keep.
-S .suf, --suffix=.suf Vid komprimering: använd .suf som suffix istället för .xz/.lzma; vid dekomprimering: känn igen även .suf och ta bort det i målnamnet. För --format=raw måste suffix alltid anges om inte --stdout används.
--files[=fil] Läs filnamn att behandla från fil (eller från stdin om fil utelämnas), ett per rad.
--files0[=fil] Som --files men namn avslutas med NUL (0-bytes).

Format- och komprimeringsval (grundläggande)

Flagga Beskrivning
-F format, --format=format Välj filformat: auto (standard), xz, lzma eller raw (rå ström utan headers; kräver att filterkedja anges vid dekomprimering).
-C check, --check=check Dataintegritetskontroll för .xz: none, crc32, crc64 (standard), sha256. .lzma saknar checks. .xz-huvuden verifieras alltid med CRC32.
-0 ... -9 Förinställda komprimeringsnivåer. Den sista angivna gäller.
--fast, --best Alias för -0 respektive -9. Behålls för kompatibilitet; användning avråds.
-e, --extreme Förbättra vald preset något utan att öka dekompressorns minneskrav (komprimering blir mycket långsammare).
-M gräns, --memory=gräns Sätt minnesgräns: absolut värde (t.ex. 80MiB), procent (t.ex. 70%), 0 återställer standard (40 %), max inaktiverar praktiskt (avråds). Aktuellt värde visas i --long-help.
-T trådar, --threads=trådar Maximalt antal arbetstrådar. Standard är antalet CPU-kärnor. Kan begränsas av minnesgräns. I vissa byggen kan flertrådad (de)komprimering saknas.

Grova minnesgränser per preset (indikativa)

Preset Komprimering (max) Dekomprimering (max)
-0 6 MiB 1 MiB
-1 6 MiB 1 MiB
-2 10 MiB 1 MiB
-3 20 MiB 2 MiB
-4 30 MiB 3 MiB
-5 60 MiB 6 MiB
-6 100 MiB 10 MiB
-7 200 MiB 20 MiB
-8 400 MiB 40 MiB
-9 800 MiB 80 MiB

Anpassade filterkedjor (avanserat)

Man kan specificera en kedja av filter istället för presets. Ordningen på flaggorna motsvarar kedjans ordning. Max fyra filter; ofta ett eller två. Vissa filter får bara vara sist, andra får inte vara sist.

Filter anges som flagga med ev. filter-specifika options i form av kommaseparerad lista. Onödiga kommatecken ignoreras; alla optioner har default.

LZMA1/LZMA2 (slutfilter)

Flagga Beskrivning
--lzma1[=options], --lzma2[=options] Lägg till LZMA1 eller LZMA2 sist i kedjan. LZMA1 är legacy (.lzma), LZMA2 används i .xz. Hastighet/ratio likvärdiga.

Options för LZMA1/LZMA2:

Option Värde/standard Kommentar
preset=p 0–9 med ev. e (extreme). Standard 6. Återställer övriga options till p:s default.
dict=storlek 4 KiB – 1.5 GiB vid komprimering (dekompressor stöder upp till nästan 4 GiB) Störst effekt på ratio och minne; samma dict krävs för dekomprimering.
lc=n 0–4, standard 3 lc+lp ≤ 4
lp=n 0–4, standard 0
pb=n 0–4, standard 2
normal preset 0–2 ⇒ fast, 3–9 ⇒ normal Analysnivå
hc4|bt2|bt3|bt4 Väljer match-sökare Hash Chain oftast snabbare; BT bättre ratio. Minnesformler är ungefärliga.
nice=n 2–273 byte Slutar söka vid funnen match ≥ n; högre ger bättre ratio men långsammare.
depth=n 0 (auto) eller maxdjup Höga värden kan bli extremt långsamma; undvik >1000.

Vid --format=raw kräver LZMA2 bara dict, LZMA1 kräver även lc, lp, pb.

BCJ-filter (inte sist)

Flagga Arkitektur
--x86 x86 32/64-bit
--powerpc PowerPC (big endian)
--ia64 Itanium (endian-oberoende)
--arm ARM (little endian)
--armthumb ARM-Thumb (little endian)
--sparc SPARC (big/little)

BCJ gör relativa adresser absoluta för bättre redundans inför LZMA2. Fel filter ger ingen dataskada men kan försämra ratio.

Justering efter instruktionsjustering (alignment):

Filter Alignment Kommentar
x86 1 Håll ofta LZMA2:s standard pb=2
PowerPC 4
ARM 4
ARM-Thumb 2
IA-64 16 Sätt gärna pb=4 (2^4=16)
SPARC 4

Gemensam option: start=offset (multipel av alignment). Standard 0 och nästan alltid bäst.

Delta-filter (inte sist)

Flagga Option Beskrivning
--delta[=options] dist=n Bytevis delta; dist 1–256, standard 1. Bra för okomprimerade bitmaps eller PCM, men specialalgoritmer (t.ex. FLAC) är ofta bättre för ljud.

Övriga flaggor (informativa, hjälp)

Flagga Beskrivning
-q, --quiet Tysta varningar och notiser; två gånger även fel. Påverkar inte exit-koder.
-v, --verbose Pratsam; på terminal visas progress. Två gånger ger ännu mer detalj (debug).
-Q, --no-warn Använd inte exit-kod 2 vid varningssituationer. Kombinera med --quiet för att både tysta och undvika varningskod.
-h, --help Kort hjälptext över vanligaste flaggor.
-H, --long-help Fullständig hjälptext (visar bl.a. aktiva gränser och trådantal).
-V, --version Versionsinfo för xz och liblzma.

Returvärden

1 – fel inträffade 2 – varning inträffade men inga faktiska fel 0 – allt OK Notiser på stderr påverkar inte exit-koden.

Miljö

XZ_OPT kan innehålla blankstegsseparerade flaggor som tolkas före kommandoradsflaggor. Endast flaggor tolkas; icke-flaggor ignoreras tyst. Parsning sker via getopt_long(3).

Kompatibilitet med LZMA Utils

xz:s kommandosyntax är i praktiken en strikt övermängd av lzma, unlzma och lzcat (LZMA Utils 4.32.x). Ofta kan man byta utan att bryta skript, men skillnader finns.

Preset-nivåer och dictionarystorlek

Dictionarystorlek (ungefär lika med dekompressorns RAM) skiljer mellan projekten:

Nivå xz dict LZMA Utils dict
-1 64 KiB 64 KiB
-2 512 KiB 1 MiB
-3 1 MiB 512 KiB
-4 2 MiB 1 MiB
-5 4 MiB 2 MiB
-6 8 MiB 4 MiB
-7 16 MiB 8 MiB
-8 32 MiB 16 MiB
-9 64 MiB 32 MiB

Kompressorns RAM skiljer också p.g.a. andra implementationdetaljer:

Nivå xz comp-RAM LZMA Utils 4.32.x
-1 2 MiB 2 MiB
-2 5 MiB 12 MiB
-3 13 MiB 12 MiB
-4 25 MiB 16 MiB
-5 48 MiB 26 MiB
-6 94 MiB 45 MiB
-7 186 MiB 83 MiB
-8 370 MiB 159 MiB
-9 674 MiB 311 MiB

Standardnivå: LZMA Utils -7, xz -6 (båda ≈ 8 MiB dict).

Strömmade vs icke-strömmade .lzma-filer

.lzma-huvudet kan innehålla okomprimerad storlek. LZMA Utils gör det för vanliga filer; annars markeras okänd storlek och payload-end-markör används (t.ex. i pipes). xz dekomprimerar båda men skapar alltid .lzma med okänd storlek och end-markör. En del inbyggda dekompressorer kan kräva känd storlek; använd i så fall LZMA Utils eller LZMA SDK.

Icke-stödda .lzma-varianter

liblzma:s LZMA1 kräver lc+lp ≤ 4; .lzma med högre summa kan inte dekomprimeras av xz. liblzma accepterar endast dict-storlekar 2^n eller 2^n + 2^(n-1) för att minska felaktig autodetektering; LZMA Utils accepterar fler. I praktiken sällan ett problem.

Data efter ström (trailing garbage)

LZMA Utils ignorerar tyst allt efter första .lzma-strömmen och stödjer inte konkatenerade .lzma. xz betraktar data efter första strömmen som korruption, vilket kan påverka äldre skript som förlitat sig på ignorering.

Notiser

Komprimerad utdata kan variera

Utdata kan skilja mellan versioner/byggen trots identiska flaggor, p.g.a. förbättringar i encoder som inte ändrar filformatet. Detta gör att ett stabilt --rsyncable-läge inte tillhandahålls.

Inbyggda .xz-dekompressorer

Inbyggda implementationer (t.ex. XZ Embedded) kanske bara stöder none eller crc32 som check. Eftersom standard i xz är --check=crc64 måste man använda --check=none eller --check=crc32 när filer skapas för sådana system. Utanför embedded stöds alla checks eller så kan filen dekomprimeras utan verifikation. XZ Embedded stöder BCJ-filter men endast med standardoffset.

Se även

xzdec(1), gzip(1), bzip2(1)

Projekt: http://tukaani.org/xz/

XZ Embedded: http://tukaani.org/xz/embedded.html

LZMA SDK: http://7-zip.org/sdk.html

Sidslut

Orginalhemsidan på Engelska : https://linux.die.net/man/1/xz

Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på

https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.