xz(1)
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
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.