XZ(1) | XZ Utils | XZ(1) |
НАЗИВ¶
xz, unxz, xzcat, lzma, unlzma, lzcat – Запакује или распакује „.xz“ и „.lzma датотеке
САЖЕТАК¶
xz [опција...] [датотека...]
АЛИЈАСИ НАРЕДБЕ¶
unxz је исто
као и xz --decompress.
xzcat је исто
као и xz --decompress --stdout.
lzma је исто
као и xz --format=lzma.
unlzma је исто
као и xz --format=lzma --decompress.
lzcat је исто
као и xz --format=lzma --decompress
--stdout.
Приликом писања скрипти које треба да распакују датотеке, препоручује се да се увек користи назив xz са одговарајућим аргументима (xz -d или xz -dc) уместо назива unxz и xzcat.
ОПИС¶
xz је алат опште употребе за запакивање података са синтаксом линије наредби сличан као gzip(1) и bzip2(1). Изворни формат датотеке је .xz формат, али стари .lzma формат који користи LZMA Utils и сирови запаковани токови без заглавља формата су такође подржани. Уз то, распакивање .lz формата који користи lzip је подржано.
xz запакује или распакује сваку датотеку у складу са изабраним режимом рада. Ако није дата ни једна датотека или је датотека file -, xz чита са стандардног улаза и записује обрађене податке на стандардни излаз. xz ће одбити (приказаће грешку и прескочити датотеку) да пише запаковане податке на стандардни излаз ако је то терминал. Слично, xz ће одбити да чита запаковане податке са стандардног улаза ако је то терминал.
Осим ако није наведено --stdout, датотеке које нису - се пишу у нову датотеку чији назив је проистекао из назива изворне датотеке:
- Приликом запакивања, суфикс формата циљне датотеке (.xz или .lzma) се додаје на назив изворне датотеке да би се добио назив циљне датотеке.
- Приликом распакивања, суфикс .xz, .lzma или .lz се уклања из назива датотеке да би се добио назив циљне датотеке. xz такође препознаје суфиксе .txz и .tlz и замењује их суфиксом .tar.
Ако циљна датотека већ пстоји, приказује се грешка а датотека се прескаче.
Осим ако не пише на стандардни излаз, xz ће приказати упозорење и прескочити датотеку ако се нешто од следећег примењује:
- Датотека није обична датотека. Симболичке везе се не прате, и стога се не сматра да су обичне датотеке.
- Датотека има више од једне чврсте везе.
- Датотека има постављен „setuid, setgid“ или лепљиви бит.
- Режим рада је постављен на запакивање а датотека већ има суфикс формата циљне датотеке (.xz или .txz приликом запакивања у .xz формат, а .lzma или .tlz приликом запакивања у .lzma формат).
- Режим радње је постављен за распакивање а датотека нема суфикс ни једног од подржаних формата датотеке (.xz, .txz, .lzma, .tlz или .lz).
Након успешног сажимања или распакивања датотеке, xz умножава власника, групу, дозволе, време приступа и време измене из изворне датотеке у циљну датотеку. Ако умножавање групе не успе, дозволе су измењене тако да циљна датотека не постане доступна корисницима који нису имали дозволу за приступ изворној датотеци. xz не подржава умножавање других метаподатака попут списка контрола приступа или проширених атрибута.
Једном када је циљна датотека успешно затворена, изворна датотека се уклања осим ако се -keep не наведе. Изворна датотека се никада не уклања ако се излаз пише на стандардни излаз или ако дође до грешке.
Слање SIGINFO или SIGUSR1 ка xz процесу чини да испише информације напредовања на стандардну грешку. Ово има ограничено коришћење све док стандардна грешка јесте терминал, коришћење --verbose приказаће аутоматски указивач напретка освежавања.
Коришћење меморије¶
Коришћење меморије xz се мења од неколико стотина килобајта до неколико гигабајта у зависности од поставки запакивања. Поставке коришћене приликом запакивања датотеке одређују захтеве меморије распакивача. Обично распакивачу треба 5 % до 20 % количине меморије која је потребна запакивачу приликом прављења датотеке. На пример, распакивање датотеке направљене са xz -9 тренутно захтева 65 MiB меморије. Још увек, могуће је имати .xz датотеке које захтевају неколико гигабајта меморије за распакивање.
Нарочито корисници старијих система могу наћи досадном могућност коришћења врло велике меморије. Да би се спречила нежељена изненађења, xz има уграђен ограничавач коришћења меморије, који је искључен по основи. Док неки оперативни системи пружају начин за ограничавање коришћење меморије за процесе, ослањање на то сматра се да није довољно прилагодљиво (на пример, коришћење ulimit(1) за ограничавање виртуелне меморије тежи да обогаљи mmap(2)).
Ограничавач коришћења меморије се може укључити опцијом линије наредби --memlimit=ограничење. Често је најпогодније укључити ограничавач по основи постављањем променљиве окружења XZ_DEFAULTS, на пример, XZ_DEFAULTS=--memlimit=150MiB. Могуће је поставити ограничења засебно за запакивање и распакивање коришћењем --memlimit-compress=ограничење и --memlimit-decompress=ограничење. Коришћење ове две опције ван XZ_DEFAULTS је ретко корисно јер једно покретање xz не може да ради и запакивање и распакивање а --memlimit=ограничење (или -M ограничење) је краће за куцање на линији наредби.
Ако је прекорачено наведено ограничење коришћења меморије, xz ће приказати грешку а распакивање датотеке неће успети. Ако је ограничење прекорачено приликом запакивања, xz ће покушати да умањи поставке тако да се ограничење више не прекорачује (оси када се користи --format=raw или --no-adjust). На тај начин радња неће бити неуспешна осим ако је ограничење врло мало. Смањење поставке се ради у корацима који се не подударају са предподешеностима нивоа запакивања, на пример, ако је ограничење само незнатно мање од износа потребног за xz -9, поставке ће бити смањене само мало, а не све до xz -8.
Надовезивање и попуњавање са „.xz“ датотекама¶
Могуће је додати .xz датотеке као то. xz ће распаковати такве датотеке као да су биле једна .xz датотека.
Могуће је уметнути попуњавање између придодатих делова или након последњег дела. Попуњавање мора да се састоји од празних бајтова а величина попуњавања мора бити умножак четири бајта. Ово може бити корисно, на пример, ако је .xz датотека смештена на медијуму који мери величине датотека у блоковима од 512 бајтова.
Надовезивање и попуњавање нису дозвољени са .lzma датотекама или сировим токовима.
ОПЦИЈЕ¶
Суфикси целог броја и специјалне вредности¶
На већини места где се очекује аргумент целог броја, опционални суфикс је подржан да би се лако назначили велики цели бројеви. Не сме бити размака између целог броја и суфикса.
- KiB
- Множи цео број са 1.024 (2^10). Ki, k, kB, K, и KB се прихватају као синоними за KiB.
- MiB
- Множи цео број са 1.048.576 (2^20). Mi, m, M, и MB се прихватају као синоними за MiB.
- GiB
- Множи цео број са 1.073.741.824 (2^30). Gi, g, G, и GB се прихватају као синоними за GiB.
Посебна вредност max се може користити да укаже на највећу вредност целог броја подржану опцијом.
Режим рада¶
Ако је дато више опција режима рада, последња има дејства.
- -z, --compress
- Запакује. Ово је основни режим радње када није наведена опција режима радње и ниједан други режим радње се не подразумева са линије радње (на пример, unxz подразумева --decompress).
- Након успешног запакивања, изворна датотека се уклања осим ако се не пише на стандардни излаз или је наведено --keep.
- -d, --decompress, --uncompress
- Распакује. Након успешног распакивања, изворна датотека се уклања осим ако се не пише на стандардни излаз или је наведено --keep.
- -t, --test
- Тестира целовитост запакованих датотека. Ова опција је исто што и --decompress --stdout осим тога што се распаковани подаци одбацују уместо да се пишу на стандардни излаз. Датотеке се не праве нити уклањају.
- -l, --list
- Исписује информације о запакованим датотекама. Никакав незапакован излаз се не добија, а ниједна датотека није направљена или уклоњена. У режиму списка, програм не може читати запаковане податке са стандардног улаза или из других нетраживих извора.
- Основни списак приказује основне информације о датотекама, једна датотека у једном реду. Да добијете подробније информације, користите такође опцију --verbose. За чак и више информација, користите --verbose два пуа, али знајте да то може бити споро, јер да би се добиле све додатне информације потребно је много тражења. Ширина опширног излаза премашује 80 знакова, тако да преспајање излаза на, на пример, less -S може бити прикладно ако терминал није довољно широк.
- Тачан излаз може варирати између xz издања и различитих језика. За излаз читљив машинама треба да користите --robot --list.
Измењивачи рада¶
- -k, --keep
- Не брише улазне датотеке.
- Од xz 5.2.6, ова опција такође чини да xz запакује или распакује чак и ако је улаз симболичка веза ка обичној датотеци, има више од једне чврсте везе или има постављен „setuid“, „setgid“ или лепљиви бит. „setuid“, „setgid“ и лепљиви битови се не умножавају у циљну датотеку. У ранијим издањима ово се могло урадити само са --force.
- -f, --force
- Ова опција има неколико дејстава:
- Ако циљна датотека већ постоји, брише је пре запакивања или распакивања.
- Запакује или распакује чак и ако је улаз симболичка веза ка обичној датотеци, има више од једне чврсте везе или има постављен „setgid“, „setgid“ или лепљиви бит. „setgid“, „setgid“ или лепљиви бит се не умножавају у циљну датотеку.
- Када се користи са --decompress --stdout и xz не може да препозна врсту изворне датотеке, умножава изворну датотеку као такву на стандардни излаз. Ово омогућава да се xzcat --force користи као cat(1) за датотекекоје нису запаковане са xz. Знајте да ће у будућности, xz моћи да подржава нове формате запаковане датотеке, који могу учинити да xz распакује још врста датотека уместо да их умножи какве јесу на стандардни излаз. --format=формат се може користити да ограничи xz да распакује само формат једне датотеке.
- -c, --stdout, --to-stdout
- Пише запаковане или распаковане податке на стандардни излаз уместо у датотеку, Ово подразумева --keep.
- --single-stream
- Распакује само први .xz ток, и тихо занемарује могуће преостале улазне податке који следе ток. Нормално такво пратеће смеће чини да xz прикаже грешку.
- xz никада не распакује више од једног тока из .lzma датотека или сирових токова, али ова опција чини да xz још увек занемари могуће пратеће податке након .lzma датотеке или сировог тока.
- Ова опција нема дејства ако режим рада није --decompress или --test.
- Од xz 5.7.1alpha, --single-stream подразумева --keep.
- --no-sparse
- Искључује стварање развучених датотека. По основи, ако распакује у обичну датотеку, xz покушава да учини датотеку развученом ако распаковани подаци садрже дуге низове бинарних нула. Такође ради приликом писања на стандардни излаз све док је стандардни излаз повезан са обичном датотеком а одређени додатни услови су испуњени да је учине безбедном. Стварање развучених датотека може уштедети простор на диску и убрзати распакивање смањењем количине У/И диска.
- -S .suf, --suffix=.suf
- Приликом запакивања, користите .suf као суфикс за циљну датотеку уместо .xz или .lzma. Ако се не пише на стандардни излаз а изворна датотека већ има суфикс .suf, приказује се упозорење и датотека се прескаче.
- Приликом распакивања, препознаје датотеке са суфиксом .suf поред датотека са суфиксом .xz, .txz, .lzma, .tlz, or .lz. Ако изворна датотека има суфикс .suf, суфикс се уклања да би се добио назив циљне датотеке.
- Приликом запакивања или распакивања сирових токова (--format=raw), суфикс мора увек бити наведен осим ако се не пише на стандардни излаз, јер не постоји основни суфикс за сирове токове.
- --files[=датотека]
- Чита називе датотека за обраду из датотеке; ако се датотека изостави, називи датотека се читају са стандардног улаза. Називи датотека се морају завршавати знаком новог реда. Цртица (-) се узима као редован назив датотеке; а не стандардни улаз. Ако су називи датотека дати такође као аргументи линије наредби, обрађују се пре него што се називи датотека прочитају из датотеке.
- --files0[=датотека]
- Ово је исто као и --files[=датотека] изузев тога што сваки назив датотеке мора да се завршава „null“ знаком.
Основни формат датотеке и опције запакивања¶
- -F формат, --format=формат
- Наводи формат датотеке за запакивање или распакивање:
- auto
- Ово је основно. Приликом запакивања, auto је исто што и xz. Приликом распакивања, формат улазне датотеке се аутоматски препознаје. Знајте да сирови токови (направљени са --format=raw) не могу бити аутоматски препознати.
- xz
- Пакује у .xz формат датотеке, или прихвата само .xz датотеке приликом распакивања.
- lzma, alone
- Пакује у стари .lzma формат датотеке, или прихвата само .lzma датотеке приликом распакивања. Алтернативни назив alone се доставља зарад повратне сагласности са LZMA помагалима.
- lzip
- Прихвата само .lz датотеке приликом распакивања. Запакивање није подржано.
- Формат .lz издање 0 и непроширено издање 1 су подржани. Датотеке издања 0 су настале са lzip 1.3 и старијим. Такве датотеке нису уобичајене али се могу наћи у архивама датотека јер је неколико пакета извора издато у овом формату. Такође можда неко има старе личне датотеке у овом формату. Подршка распакивања за формат издања 0 је уклоњена у lzip 1.18.
- lzip 1.4 и новији праве датотеке у формату издања 1. Проширење означавача испирања усклађивања за формат издања 1 додато је у lzip 1.6. Ово проширење се ретко користи и не подржава га xz (препознаје се као оштећени улаз).
- raw
- Запакује или распакује сирови ток (без заглавља). Ово је замишљено само за напредне кориснике. Да дешифрујете сирове токове, треба да користите --format=raw и да изричито наведете ланац филтера, што би обично требало да буде смештено у заглављима контејнера.
- -C провера, --check=провера
- Наводи врсту провере целовитости. Провера се израчунава из незапакованих података и смештених у .xz датотеци. Ова опција има дејства само приликом запакивања у .xz формат; .lzma формат не подржава провере целовитости. Провера целовитости (ако је има) се проверава када је .xz датотека распакована.
- Подржане врсте провере:
- none
- Уопште не израчунава проверу целовитости. Ово је обично лоша идеја. Ово може бити корисно када се целовитост података ипак проверава на друге начине.
- crc32
- Израчунава CRC32 користећи полином из IEEE-802.3 (Етернет).
- crc64
- Израчунава CRC64 користећи полином из ECMA-182. Ово је основно, јер је незнатно боље од CRC32 у откривању оштећених датотека а разлика брзине је занемарљива.
- sha256
- Израчунава SHA-256. Ово је нешто спорије од CRC32 и CRC64.
- Целовитост .xz заглавља се увек проверава са CRC32. Не може се изменити нити искључити.
- --ignore-check
- Не проверава проверу целовитости запакованих података приликом распакивања. CRC32 вредности у .xz заглављима биће још увек нормално проверене.
- Немојте користити ову опцију осим ако стварно знате шта радите. Могући разлози за коришћење ове опције:
- Покушава да опорави податке из оштећене „.xz“ датотеке.
- Убрзава распакивање. Ово има значаја углавном са SHA-256 или са датотекама које су запаковане стварно добро. Препоручује се да не користите ову опцију за ову сврху осим ако је целовитост датотеке проверена споља на неки други начин.
- -0 ... -9
- Бира ниво преподешености запакивања. Подразумевано је -6. Ако је наведено више нивоа преподешености, последња има дејства. Ако је произвољни ланац филтера већ наведен, постављање нивоа преподешености запакивања уклања произвољни ланац филтера.
- Разлике између предподешености су још значајније него са gzip(1) и bzip2(1). Изабране поставке запакивања одређују захтеве меморије распакивача, стога коришћење превисоког нивоа предподешености може отежати распакивање датотеле на старом систему са мало RAM-а. Нарочито, није добра замисао слепо користити -9 за било шта као што је често са gzip(1) и bzip2(1).
- -0 ... -3
- Ово су некако брзе предподешености. -0 је понекад брже од gzip -9 док запакује много боље. Оне више често имају брзину упоредиву са bzip2(1) са упоредивом или бољом стопом запакивања, иако резултати зависе много од врсте података који се запакују.
- -4 ... -6
- Добро до врло добро запакивање које одржава коришћење меморије распакивача разумним чак и за старе системе. -6 је основно, што је обично добар избор за расподелу датотека које треба да могу да се распакују чак и на системима са само 16 MiB RAM-а. (-5e или -6e може бити вредно узимања у обзир. Видите --extreme.)
- -7 ... -9
- Као -6 али са већим захтевима меморије запакивача и распакивача. Корисне су само приликом запакивања датотека већих од 8 MiB, 16 MiB и 32 MiB.
- На истом хардверу, брзина распакивања је приближно сталан број бајтова запакованих података у секунди. Другим речима, биће боље запакивање, брже распакивање. То такође значи да количина незапакованог излаза произведеног у секунди може много да се разликује.
- Следећа табела резимира функције предподешености:
Преподешеност | ВлчРчнка | ЗапакЦПЈ | ЗапакМем | РаспМем |
-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 |
- Описи колона:
- ВлчРчнка је величина LZMA2 речника. Коришћење речника већег од величине незапаковане датотеке је губитак меморије. Зато је добро избегавати коришћење предподешености -7 ... -9 када за њима нема стварне потребе. Са -6 и нижим, количина изгубљене меморије је обично довољно ниска да нема значаја.
- ЗапакЦПЈ је поједностављено представљање LZMA2 поставки које утичу на брзину запакивања. Величина речника такође утиче на брзину, тако док је ЗапакЦПЈ исто за нивое -6 ... -9, виши нивои још увек теже да буду спорији. Да добијете још спорије и самим тим можда боље запакивање, видите --extreme.
- ЗапакМем садржи захтеве меморије запакивача у режиму једне нити. Може незнатно да се разликује између xz издања.
- РаспМем садржи захтеве меморије распакивача. Тако је, поставке запакивања одређују захтеве меморије распакивача. Тачно коришћење меморије распакивача је незнатно веће од величине LZMA2 речника, али су вредности у табели заокружене на следећи цео MiB.
- Захтеви меморије режима са више нити су значајно већи него ли режима једне нити. Са основном вредношћу --block-size, свакој нити треба 3*3*ВлчРчнка плус ЗапакМем или РаспМем. На пример, за четири нити са предподешавањем -6 потребно је 660–670 MiB меморије.
- -e, --extreme
- Користите спорију варијанту изабраног нивоа предподешености запакивања (-0 ... -9) у нади да ћете добити мало бољу стопу запакивања, али уз лошу срећу ово је може учинити гором. Не утиче на коришћење меморије распакивача, али се коришћење меморије запакивача мало повећава на нивоима предподешености -0 ... -3.
- Како постоје две предподешености са величинама речника од 4 MiB и 8 MiB, предподешености -3e и -5e користе незнатно брже поставке (ниже CompCPU) него -4e и -6e. На тај начин нема две истоветне предподешености.
Преподешеност | ВлчРчнка | ЗапакЦПЈ | ЗапакМем | РаспМем |
-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 |
- На пример, има укупно четири предподешавања која користе 8 MiB речник, чији поредак од најбржег до најспоријег је -5, -6, -5e и -6e.
- --fast
- --best
- Ово су помало погрешни алијаси за -0 и -9. Достављени су само зарад повратне сагласности са LZMA Utils-ом. Избегавајте коришћење ових опција.
- --block-size=величина
- Приликом запакивања у .xz формат, дели улазне податке на блокове величина бајта. Блокови се запакују независно један од другог, што помаже у раду са више нити и чини ограничено распакивање насумичног приступа могућим. Ова опција се обично користи да се препише основна величина блока у режиму са више нити, али се ова опција може такође користити и у режиму једне нити.
- У режиму више нити око три пута величина бајтова биће додељено у свакој нити за међумеморисање улаза и излаза. Основна величина је три пута величине LZMA2 речника или 1 MiB, шта год да је више. Обично добра вредност је 2–4 пута величина LZMA2 речника или барем 1 MiB. Коришћење величине мање од величине LZMA2 речника је трошење RAM-а јер тада међумеморија LZMA2 речника никада неће бити потпуно коришћена. У режиму више нити, величине блокова се чувају у заглављима блока. Ова информација величине је потребна за распакивање са више нити.
- У режиму једне нити никаква подела блока се не ради по основи. Постављање ове опције не утиче на коришћење меморије. Никакве информације о величини се не чувају у заглављима блока, стога датотеке направљене у режиму једне нити неће бити исте као датотеке направљене у режиму више нити. Недостатак информација о величини такође значи да xz неће моћи да распакује датотеке у режиму више нити.
- --block-list=ставке
- Приликом запакивања у .xz формат, почиње нови блок са изборним произвољним ланцем филтера након датих интервала незапакованих података.
- Ставке су списак одвојен зарезом. Свака ставка се састоји од изборног броја ланца филтера између 0 и 9 за којим следи двотачка (:) и захтевана величина незапакованих података . Изостављање неке ставке (два или више узастопна зареза) је пречица за коришћење величине и филтера претходне ставке.
- Ако је улазна датотека већа од збира величина у ставкама, последња ставка се понавља све до краја датотеке. Специјална вредност 0 може се користити као последња величина да назначи да остатак датотеке треба да буде шифрован као један блок.
- Алтернативни ланац филтера за сваки блок се може навести у комбинацији са опцијама --filters1=филтера ... --filters9=филтери. Ове опције дефинишу ланце филтера са одредником између 1–9. Ланац филтера 0 се може користити да упућује на основно ланац филтера, који је исти јер се ланац филтера не наводи. Одредник ланца филтера се може користити пре незапаковане величине, за којим следи двотачка (:). На пример, ако наведемо --block-list=1:2MiB,3:2MiB,2:4MiB,,2MiB,0:4MiB тада ће се за прављење блокова користити:
- Ланац филтера наведен са --filters1 и 2 MiB улазом
- Ланац филтера наведен са --filters3 и 2 MiB улазом
- Ланац филтера наведен са --filters2 и 4 MiB улазом
- Ланац филтера наведен са --filters2 и 4 MiB улазом
- Основни ланац филтера и 2 MiB улаз
- Основни ланац филтера и 4 MiB улаз за сваки блок до краја улаза.
- Ако наведемо величину која премашује величину блока шифрера (било основну вредност у режиму нити или вредност наведену са --block-size=величина), шифрер ће направити додатне блокове док ће задржати границе наведене у ставкама. На пример, ако наведемо --block-size=10MiB --block-list=5MiB,10MiB,8MiB,12MiB,24MiB а улазна датотека је 80 MiB, добићемо 11 блокова: 5, 10, 8, 10, 2, 10, 10, 4, 10, 10 и 1 MiB.
- У режиму са више нити величине блокова се чувају у заглављима блока. Ово се не ради у режиму једне нити, тако да шифровани излаз неће бити истоветан ономе у режиму са више нити.
- --flush-timeout=истек_времена
- Приликом запакивања, ако је више од време_истека милисекунди (позитиван цео број) прошло од претходног испирања и читање више улаза ће блокирати, сви заказани улазни подаци се испирају из шифрера и чине доступним у излазном току. Ово може бити корисно ако је xz коришћен за запакивање података који су слати преко мреже. Мала вредност временског_истека чини податке доступним на пријемни крај са малим закашњењем, али велика вредност времена_истека даје бољу стопу запакивања.
- Ова функција је искључена по основи. Ако је ова опција наведена више пута, последња има дејства. Нарочита вредност временског истека 0 може се користити за изричито искључивање ове функције.
- Ова функција је доступна само на POSIX системима.
- Ова функција је још увек експериментална. Тренутно xz није погодан за распакивање тока у реалном времену због начина на који xz ради међумеморисање.
- --no-sync
- Не усклађује циљну датотеку и њену фасциклу на смештајном уређају пре уклањања изворне датотеке. Ово може побољшати учинковитост ако се запакује или распакује много малих датотека. Међутим, ако се систем уруши одмах након брисања, може бити да циљна датотека не буде уписана на смештајном уређају али радња брисања јесте. У том случају неће бити доступна ни оригинална изворна ни циљна датотека.
- Ова опција има дејство само када се xz спрема да уклони изворну датотеку. У осталим случајевима усклађивање се не ради никада.
- Синхронизација и --no-sync су додате у xz 5.7.1alpha.
- --memlimit-compress=ограничење
- Поставља ограничење коришћења меморије запакивања. Ако је ова опција наведена више пута, последња ступа у дејство.
- Ако поставке запакивања премаше ограничење, xz ће покушати да врати назад поставке тако да ограничење више није прекорачено и приказаће обавештење да је урађено аутоматско дотеривање. Дотеривања се раде следећим редом: смањење броја нити, пребацивање на режим једне нити ако чак и једна нит у режиму више нити премаши ограничење и на крају смањење величине LZMA2 речника.
- Приликом запакивања са --format=raw или ако је наведено --no-adjust, само број нити може бити умањен јер може да се уради а да се не делује на излаз запакованог.
- Ако ограничење не може бити задовољено чак и са поравнањима описаним изнад, приказује се грешка и xz ће изаћи са излазним стањем 1.
- Ограничење се може навести на више начина:
- Ограничење може бити апсолутна величина у бајтима. Коришћење суфикса целог броја као MiB може бити корисно. Пример: --memlimit-compress=80MiB
- Ограничење се може навести као проценат укупне физичке меморије (RAM). Ово може бити корисно нарочито приликом постављања променљиве окружења XZ_DEFAULTS у скрпти покретања конзоле која се дели између различитих рачунара. На тај начин ограничење је аутоматски веће на системима са више меморије. Пример: --memlimit-compress=70%
- Ограничење се може вратити на своју основну вредност његовим постављањем на 0. Ово је тренутно исто што и постављање ограничења на max (без ограничења коришћења меморије).
- За xz 32-бита имамо посебан случај: ако ограничење треба да буде преко 4020 MiB, ограничење се поставља на 4020 MiB. Али на MIPS32 користи се 2000 MiB. (На вредности 0 и max ово не утиче. Слична функција не постоји за распакивање.) Ово може бити од помоћи када извршна од 32-бита има приступ адресном простору од 4 GiB (2 GiB на MIPS32) док срећом не чини ништа лоше у осталим приликама.
- Видите такође одељак Коришћење меморије.
- --memlimit-decompress=ограничење
- Поставља ограничење коришћења меморије за распакивање. Ово такође утиче на --list режим. Ако радња није могућа а да се не премаши ограничење, xz ће приказати грешку а распакивање датотеке неће успети. Видите --memlimit-compress=ограничење за могуће начине о навођењу ограничења.
- --memlimit-mt-decompress=ограничење
- Поставља ограничење коришћења меморије за распакивање са више нити. Ово може утицати само на број нити; ово никада неће учинити да xz одбије да распакује датотеке. Ако је ограничење превише ниско да омогући било који рад са више нити, ограничење се занемарује а xz ће наставити у режиму једне нити. Знајте да ако се такође користи --memlimit-decompress, увек ће се применити и на режим једне и на режим више нити, и тако да стварно ограничење за више нити никада неће бити више од ограничења постављеног са --memlimit-decompress.
- У супротности са другим опцијама ограничења коришћења меморије, --memlimit-mt-decompress=ограничење има систему специфично основно ограничење. xz --info-memory се може користити да видите тренутну вредност.
- Ова опција и њена основна вредност постоје јер без икаквог ограничења нитни распакивач ће завршити са додељивањем неразумног износа меморије са неким улазним датотекама. Ако је основно ограничење превише ниско на вашем систему, слободно повећајте ограничење али га никада не постављајте на вредност већу од износа употребљивог RAM-а јер са одговарајућим улазним датотекама xz ће покушати да користи тај износ меморије чак и са малим бројем нити. Остајући без меморије или разменом неће се побољшати учинковитост распакивања.
- Видите --memlimit-compress=ограничење за могуће начине за навођење ограничења. Постављање ограничења на 0 враћа ограничење на систему специфичну основну вредност.
- -M ограничење, --memlimit=ограничење, --memory=ограничење
- Ово је исто као и навођење --memlimit-compress=ограничење --memlimit-decompress=ограничење --memlimit-mt-decompress=ограничење.
- --no-adjust
- Приказује грешку и излази ако ограничење коришћења меморије не може бити задовољено без дотеривања поставки које утичу на запаковани излаз. Тако је, ово спречава xz да промени шифрера из режима више нити у режим једне нити и да смањи величину LZMA2 речника. Чак и када се ова опција користи број нити се може смањити да задовољи ограничење коришћења меморије јер то неће утицати на запаковани излаз.
- Аутоматско дотеривање је увек искључено приликом стварања сирових токова (--format=raw).
- -T нити, --threads=нити
- Наводи број нити радника за коришћење. Постављање нити на посебну вредност 0 чини да xz користи онолико нити колико процесор на систему подржава. Стварни број нити може бити мањи од нити ако улазна датотека није довољно велика за нитисање са датим поставкама или ако ће коришћење више нити премашити ограничење коришћења меморије.
- Запакивачи једне нити и више нити дају различите излазе. запакивач једне нити даће мању величину датотеке али само излаз из запакивача више нити може бити распакован коришћењем више нити. Постављање нити на 1 користиће режим једне нити. Постављање нити на неку другу вредност, укључујући 0, користиће запакивач више нити чак и ако систем подржава само једну нит хардвера. (xz 5.2.x је користио режим једне нити у овој прилици.)
- Да користите вишенитни режим са само једном нити, поставите нити на +1. Префикс + нема дејства са вредностима које нису 1. Ограничење коришћења меморије може још увек учинити да се xz пребаци на режим једне нити осим ако се не користи --no-adjust. Подршка за префикс + је додата у xz 5.4.0.
- Ако је
затражен
аутоматски
број нити и
није
наведено
ограничење
коришћења
меморије,
тада ће се
користити
основно
меко
ограничење
специфично
за систем
за могуће
ограничење
броја нити.
То је меко
ограничење
у смислу да
се
занемарује
ако број
нити
постане
један,
дакле меко
ограничење
никада
неће
зауставити
xz од
запакивања
или
распакивања.
Ово
основно
меко
ограничење
неће
учинити да
се xz
пребаци из
режима
више нити у
режим
једне нити.
Активно
ограничење
се може
видети са
xz --info-memory. - Тренутно једина метода нитисања је да се подели улаз на блокове и да се запакују независно један од другог. Основна величина блока зависи од нивоа запакивања и може се преписати опцијом --block-size=величина.
- Нитно распакивање ради само на датотекама које садрже више блокова са информацијом величине у заглављима блока. Све довољно велике датотеке запаковане у вишенитном режиму задовољавају овај услов, али датотеке запаковане у једнонитном режиму не чак и ако је коришћено --block-size=величина.
- Основна вредност за нити је 0. У xz 5.4.x и старијим основно је 1.
Произвољни ланци филтера запакивача¶
Произвољни ланац филтера омогућава детаљно одређивање подешавања сажимања уместо да се ослања на подешавања повезана са предподешавањима. Када је произвољни ланац филтера наведен, опције предподешавања (-0 ... -9 и -extreme) раније на линији наредби се заборављају. Ако је опција предподешавања наведена након једне или више опција произвољног ланца филтера, ново предподешавање ступа на снагу а раније наведене опције произвољног ланца филтера се заборављају.
Ланац филтера је упоредив са спојкама на линији наредби. Приликом сажимања, несажети улаз иде на први филтер, чији излаз иде на следећи филтер (ако фа има). Излаз последњег филтера бива записан у сажету датотеку. Највећи број филтера у ланцу је четири, али обично ланац филтера има само један или два филтера.
Многи филтери имају ограничења о томе где могу бити у ланцу филтера: неки филтери могу радити само као последњи филтер у ланцу, неки само као не-последњи филтер, а неки раде на било ком месту у ланцу. Овисно о филтеру, ово ограничење је или својствено дизајну филтера или постоји како би се спречили проблеми безбедности.
Произвољни ланац филтера се може навести на два различита начина. Опције --filters=филтери и --filters1=филтери ... --filters9=филтери омогућавају навођење читавог ланца опција у једној опцији коришћењем синтаксу ниске „liblzma“ филтера. Другачије, ланац филтера се може навести коришћењем једне или више појединачних опција филтера редом како се траже у ланцу филтера. То је то, редослед појединачних опција филтера је важан! Приликом дешифровања сирових токова (--format=raw), ланац филтера мора бити наведен истим редом као када је био наведен приликом сажимања. Било који појединачни филтер или опције предподешавања наведене пре опције читавог ланца (--filters=филтери) биће заборављене. Појединачни филтери наведени после опције читавог ланца ће поништити поставку ланца филтера.
Обе опције и пуног и појединачног филтера узимају филтеру специфичне опције као зарезом раздвојен списак. Додатни зарези у опцијама се занемарују. Свака опција има основну вредност, тако да треба да наведете оне које желите да измените.
Да видите читав ланац филтера и опције, користите xz -vv (тако је, користите --verbose два пута). Ово ради такође за преглед опција ланца филтера коришћених од стране предподешености.
- --filters=филтери
- Наводи цео ланац филтера или предподешеност у једној опцији. Сваки филтер се може одвојити размацима или са две цртице (--). Филтери можда треба да буду под наводницима на линији наредби конзоле тако да се прослеђују као једна опција. Да означите опције, користите : или =. Предподешености се може додати префикс - и може га пратити нула или још заставица. Једина подржана заставица је e за примену истих опција као --extreme.
- --filters1=филтери ... --filters9=филтери
- Наводи до девет додатних ланаца филтера који се могу користити са --block-list.
- На пример, приликом запакивања архиве са извршним датотекама за којима следе текстуалне датотеке, извршни део треба да користи ланац филтера са BCJ филтером а текстуални део само LZMA2 филтер.
- --filters-help
- Приказује поруку помоћи описујући како се наводе предподешавања и произвољни ланци филтера у опцијама --filters и --filters1=филтери ... --filters9=филтери, и успешно излази.
- --lzma1[=опције]
- --lzma2[=опције]
- Додаје LZMA1 или LZMA2 филтер у ланац филтера. Ови филтери се могу користити само као последњи филтер у ланцу.
- LZMA1 је стари филтер, који је подржан углавном само због старог формата .lzma датотеке, који подржава само LZMA1. LZMA2 је освежено издање LZMA1 које поправља неке практичне проблеме LZMA1. .xz формат користи LZMA2 и не подржава LZMA1 уопште. Брзина запакивања и односи LZMA1 и LZMA2 су практично исти.
- LZMA1 и LZMA2 деле исти скуп опција:
- preset=предподешавање
- Враћа све LZMA1 или LZMA2 опције на предподешеност. Предпдешеност се састоји од целог броја, за којим може да следи једнословни измењивач предподешености. Цео број може бити од 0 до 9, поклапајући опције линије наредби -0 ... -9. Једини тренутно подржани измењивач је e, који се поклапа са --extreme. Ако предподешеност није наведена, основне вредности LZMA1 или LZMA2 опција се узимају из предподешености 6.
- dict=величина
- Величина речника (међумеморија историјата) указује на то колико је бајтова недавно обрађених нераспакованих података задржано у меморији. Алгоритам покушава да нађе понављајуће низове бајтова (поклапања) у нераспакованим подацима, и да их замени са упутама ка подацима који су тренутно у речнику. Што је већи речник, већа је вероватноћа за налажење поклапања. Стога, повећање величине речника обично побољшава стопу запакивања, али речник већи од незапаковане датотеке јесте утрошак меморије.
- Уобичајена величина речника је од 64 KiB до 64 MiB. Најмање је 4 KiB. Највише за запакивање тренутно је 1.5 GiB (1536 MiB). Распакивач већ подржава речнике до једног бајта мање од 4 GiB, што је максимум за формате LZMA1 и LZMA2 тока.
- Величина речника и налазач поклапања (mf) заједно одређују коришћење меморије за LZMA1 или LZMA2 шифрере. Иста (или већа) величина речника је потребна за распакивање као она која је коришћена за запаквање, стога се коришћење меморије дешифрера одређује према величини речника коришћеног за запакивање. .xz заглавља чувају величину речника или као 2^n или 2^n + 2^(n-1), тако да су те величине некако пожељније за запакивање. Друге величине биће заокружене приликом чувања у .xz заглављима.
- lc=lc
- Наводи број битова контекста литерала. Најмање је 0 а највише је 4; основно је 3. Као додатак, збир lc и lp не сме да премаши 4.
- Сви бајтови који се не могу шифровати јер су поклапања шифрована као литерали. То је то, литерали су једноставно 8-битни бајтови који су шифровани један по један.
- Кодирање литерала врши претпоставку да највећи lc битови претходног незапакованог бајта су у узајамној вези са следећим бајтом. На пример, у уобичајеном енглеском тексту, за великим словом често следи мало слово, а за малим словом обично следи још једно мало слово. У скупу US-ASCII знакова, највиша три бита су 010 за велика слова и 011 за мала слова. Када је lc барем 3, кодирање литерала може имати предност овог својства у незапакованим подацима.
- Основна вредност (3) је обично добра. Ако желите највеће запакивање, испробајте lc=4. Некад то мало помогне а некад чини запакивање горим. Ако га учини горим, испробајте такође lc=2.
- lp=lp
- Наводи број битова положаја литерала. Најмање је 0 а највише је 4; основно је 0.
- Lp утиче на то која врста поравнања у незапакованим подацима се подразумева приликом шифровања литерала. Видите pb испод за више информација о поравнању.
- pb=pb
- Наводи број битова положаја. Најмање је 0 а највише је 4; основно је 2.
- Pb утиче на то која врста поравнања у незапакованим подацима се подразумева у опште. Основно значи четворобајтно поравнање (2^pb=2^2=4), што је често добар избор када нема бољег решења.
- Када је поравнање познато, постављање одговарајућег pb може мало да смањи величину датотеке. На пример, са датотекама текста које имају поравнање једног бајта (US-ASCII, ISO-8859-*, UTF-8), постављање pb=0 може незнатно да побољша запакивање. За UTF-16 текст, pb=1 је добар избор. Ако је поравнање непаран број као 3 бајта, pb=0 може бити најбољи избор.
- Иако се претпостављено поравнање може подесити са pb и lp, LZMA1 и LZMA2 и даље незнатно фаворизују 16-бајтно поравнање. То би могло бити вредно узети у обзир приликом дизајнирања формата датотека које ће вероватно бити често запаковане са LZMA1 или LZMA2.
- mf=mf
- Налазач поклапања има главни утицај на брзину шифрера, коришћење меморије и стопу запакивања. Обично Hash Chain налазачи поклапања су бржи од Binary Tree налазача поклапања. Основност зависи од предподешености: 0 користи hc3, 1–3 користи hc4, а остало користи bt4.
- Следећи налазачи поклапања су подржани. Формуле коришћења меморије испод су грубе апроксимације које су ближе стварности када је речник степен двојке.
- hc3
- Ланац хеша
са
хеширањем
2- и 3-бајта
Најмања вредност за фино: 3
Коришћење меморије:
речник * 7.5 (ако је речник <= 16 MiB);
речник * 5.5 + 64 MiB (if речник > 16 MiB) - hc4
- Ланац хеша
са
хеширањем
2-, 3- и 4-бајта
Најмања вредност за фино: 4
Коришћење меморије:
речник * 7.5 (ако је речник <= 32 MiB);
речник * 6.5 (ако је речник > 32 MiB) - bt2
- Бинарно
стабло са
2-бајта
хеширања
Најмања вредност за фино: 2
Коришћење меморије: речник * 9.5 - bt3
- Бинарно
стабло са 2-
и 3-бајта
хеширања
Најмања вредност за фино: 3
Коришћење меморије:
речник * 11.5 (if речник <= 16 MiB);
речник * 9.5 + 64 MiB (ако је речник > 16 MiB) - bt4
- Бинарно
стабло са 2-, 3-,
и 4-бајта
хеширања
Најмања вредност за фино: 4
Коришћење меморије:
речник * 11.5 (if речник <= 32 MiB);
речник * 10.5 (if речник > 32 MiB)
- mode=режим
- Режим запакивања наводи методу за анализу података које произведе налазач поклапања. Подржани режими су fast и normal. Подразумева се fast за предподешавања 0–3 и normal за предподешавања 4–9.
- Обично се fast користи са налазачима Hash Chain поклапања а normal са налазачима Binary Tree поклапања. Ово је исто што раде и предподешености.
- nice=фино
- Наводи оно што се сматра да је фина дужина за поклапање. Када се поклапање од барем nice бајтова нађе, алгоритам зауставља тражење могућих бољих поклапања.
- Фино може бити 2–273 бајта. Веће вредности теже да дају бољу стопу запакивања на уштрб брзине. Основно зависи од предподешавања.
- depth=дубина
- Наводи највећу дубину претраге у налазачу поклапања. Основно је посебна вредност 0, која чини да запакивач одреди разумљиву дубину из mf и nice.
- Разумљива дубина за ланце хеша је 4–100 и 16–1000 за стабло извршних. Коришћење врло великих вредности за дубину може учинити шифрер врло спорим са неким датотекама. Избегавајте постављање дубине преко 1000 осим ако нисте спремни да прекинете запакивање у случају да потраје превише дуго.
- Приликом дешифровања сирових токова (--format=raw), LZMA2 треба само величина речника. LZMA1 треба такође lc, lp и pb.
- --x86[=опције]
- --arm[=опције]
- --armthumb[=опције]
- --arm64[=опције]
- --powerpc[=опције]
- --ia64[=опције]
- --sparc[=опције]
- --riscv[=опције]
- Додаје „branch/call/jump“ (BCJ) филтер ланцу филтера. Ови филтери могу се користити само ако нису последњи филтер у ланцу филтера.
- BCJ филтер претвара релативне адресе у машинском коду на њихове апсолутне двојнике. Ово не мења величину података, али повећава сувишност, што може помоћи LZMA2 да произведе 0–15 мању .xz датотеку. BCJ филтери су увек реверзибилни, стога коришћење BCJ филтера за погрешну врсту података не доводи ни до каквог губитка података, мада може да учини степен сажимања нешто лошијим. BCJ филтери су врло брзи и користе безначајну количину меморије.
- Ови BCJ филтери имају познате проблеме везане за стопу запакивања:
- Неке врсте датотека које садрже извршни код (на пример, објектне датотеке, статичке библиотеке и модули Линукс кернела) имају адресе у упутствима испуњеним вредностима попуњавача. Ови BCJ филтери и даље ће радити претварање адресе, што ће запакивање учинити горим са овим датотекама.
- Ако се BCJ филтер примени на архиву, могуће је да ће учинити стопу запакивања лошијим него кад се не би користио. На пример, ако постоје сличне или чак истоветне извршне тада ће филтрирање вероватно учинити датотеке мање сличним и стога је запакивање лошије. Садржај не-извршних датотека у истој архиви је такође важан. У пракси се мора покушати са и без BCJ филтера да би се видело шта је боље у којој прилици.
- Различити скупови упутстава имају различита поравнања: извршна датотека мора бити поравната на множилац ове вредности у улазним подацима како би филтер радио.
Филтер | Поравнање | Напомене |
x86 | 1 | 32-бита или 64-бита x86 |
ARM | 4 | |
ARM-Thumb | 2 | |
ARM64 | 4 | 4096-бита поравнање је најбоље |
PowerPC | 4 | Само велика крајност |
IA-64 | 16 | Itanium |
SPARC | 4 | |
RISC-V | 2 |
- Како су BCJ-филтрирани подаци обично запаковани са LZMA2, стопа запакивања може бити незнатно побољшана ако су LZMA2 опције постављене да поклопе поравнање изабраног BCJ филтера. Примери:
- IA-64 филтер има поравнање 16-бајта тако да је pb=4,lp=4,lc=0 добро са LZMA2 (2^4=16).
- RISC-V код има поравнање од 2 или 4 бајта у зависности од тога да ли датотека садржи запаковане инструкције од 16 бита (проширење C). Када се користе инструкције од 16 бита, pb=2,lp=1,lc=3 или pb=1,lp=1,lc=3 је добро. Када нема инструкција од 16 бита, pb=2,lp=2,lc=2 је најбоље. readelf -h се може користити да се провери да ли се „RVC“ јавља у реду „Заставице“.
- ARM64 је увек 4-бајта поравнат тако да је pb=2,lp=2,lc=2 најбоље.
- Филтер x86 је изузетак. Обично је добро придржавати се LZMA2 основности (pb=2,lp=0,lc=3) приликом запакивања x86 извршних.
- Сви BCJ филтери подржавају исте опције:
- start=померај
- Наводи померај почетка који се користи приликом претварања између релативних и апсолутних адреса. Померај мора бити производ поравнања филтера (видите табелу изнад). Основно је нула. У пракси, основност је добра; навођење произвољног помераја скоро никада није од користи.
- --delta[=опције]
- Додаје Delta филтер у ланац филтера. Делта филтер може се користити само ако није последњи филтер у ланцу филтера.
- Тренутно је подржан само једноставан делта прорачун једног по једног бита. Може бити користан приликом запакивања, на пример, незапакованих битмап слика или незапакованог PCM звука. Међутим, алгоритми посебне намене могу дати знатно боље резултате него Delta + LZMA2. Ово је тачно, посебно са звуком, који се запакује брже и боље, на пример, са flac(1).
- Подржане опције:
- dist=растојање
- Наводи растојање делта прорачуна у бајтима. Растојање мора бити 1–256. Основно је 1.
- На пример, са dist=2 и осмобајтним улазом A1 B1 A2 B3 A3 B5 A4 B7, излаз ће бити A1 B1 01 02 01 02 01 02.
Остале опције¶
- -q, --quiet
- Потискује упозорења и обавештења. Наведите ово два пута да потиснете и грешке. Ова опција нема утицаја на стање излаза. Тако је, чак и ако је упозорење потиснуто, стање излаза које указује на упозорење се и даље користи.
- -v, --verbose
- Бива опширан. Ако је стандардна грешка повезана са терминалом, xz ће приказати указивач напретка. Навођењем --verbose два пута добија се још опширнији излаз.
- Указивач напредовања показује следеће информације:
- Проценат довршености се показује ако је величина улазне датотеке позната. Тако је, проценат се не може приказати у спојкама.
- Количина запакованих података проистеклих (запакивање) или утрошених (распакивање).
- Количина распакованих података утрошених (запакивање) или проистеклих (распакивање).
- Размера паковања, која се израчунава дељењем количине запакованих података обрађених до сада количином незапакованих података до сада обрађених.
- Брзина запакивања или распакивања. Ово се мери као количина незапакованих података утрошених (запакивање) или добијених (распакивање) у секунди. Приказује се након неколико секунде након што xz започне обраду датотеке.
- Протекло време у формату М:СС или Ч:ММ:СС.
- Процењено преостало време се приказује само када је величина улазне датотеке позната и неколико секунди је већ протекло од кад је xz започео обраду датотеке. Време се приказује у мање тачном формату које никада нема двотачке, на пример, 2 мин 30 сек.
- Када стандардна грешка није терминал, --verbose ће учинити да xz испише назив датотеке, запаковану величину, незапаковану величину, стопу запакивања и по могућству такође брзину и протекло време на једном реду на стандардну грешку након запакивања или распакивања датотеке. Брзина и протекло време су укључени само када радња потраје барем неколико секунде. Ако се радња не заврши, на пример, услед што корисник прекине, такође се исписује проценат завршености ако је величина улазне датотеке позната.
- -Q, --no-warn
- Не поставља стање излаза на 2 чак и ако је услов вредан упозорења откривен. Ова опција не утиче на ниво опширности, стога и --quiet и --no-warn треба да се користе да се не приказују упозорења и да се не измени стање излаза.
- --robot
- Исписује поруке у формату обрадивом машинама. Ово је замишљено да олакша писање челника који желе да користе xz уместо „liblzma“, што може бити случај са разним скриптама. Излаз са овом опцијом укљученом је замишљен да буде стабилан кроз xz издања. Видите одељак РЕЖИМ РОБОТА за више о томе.
- --info-memory
- Приказује, у формату читљивом људима, колико физичке меморије (RAM) и колико нити процесора xz мисли да систем има и ограничења коришћења меморије за запакивање и распакивање и излази успешно.
- -h, --help
- Приказује поруку помоћи описујући најчешће коришћених опција, и успешно излази.
- -H, --long-help
- Приказује поруку помоћи описујући све функције xz, и успешно излази
- -V, --version
- Приказује број издања за xz и „liblzma“ у формату читљивом људима. Да добијете излаз машинама обрадив, наведите --robot пре --version.
РЕЖИМ РОБОТА¶
Режим робота се покреће опцијом --robot. Чини да излаз xz буде лакши за обраду другим програмима. Тренутно --robot је подржано само заједно са --list, --filters-help, --info-memory, и --version. Биће подржан за запакивање и распакивање у будућности.
Режим списка¶
xz --robot --list користи излаз раздвојен табулатором. Прва колона сваког реда садржи ниску која указује на врсту информације која се налази у том реду:
- name (назив)
- Ово је увек први ред приликом почетка листања датотеке. Друга колона у реду је назив датотеке.
- file (датотека)
- Овај ред садржи свеукупне информације о .xz датотеци. Овај ред се увек исписује после реда назив.
- stream (ток)
- Ова врста реда се користи само када је --verbose наведено. Има толико редова тока колико има токова у .xz даатотеци.
- block (блок)
- Ова врста реда се користи само када је --verbose наведено. Има онолико редова блока колико има блокова у .xz датотеци. Редови блока се приказују након свих редова тока; различите врсте реда се не преплићу.
- summary (сажетак)
- Ова врста реда се користи само када је --verbose наведено два пута. Овај ред се исписује након свих редова блока. Као ред датотека, ред сажетка садржи преглед информација о .xz датотеци.
- totals (укупност)
- Овај ред је увек последњи ред на списку излаза. Показује укупне збирове и величине.
Колоне редова датотеке:
- 2.
- Број токова у датотеци
- 3.
- Укупан број блокова у току(овима)
- 4.
- Величина запаковане датотеке
- 5.
- Величина незапаковане датотеке
- 6.
- Размера паковања, на пример, 0.123. Ако је размера преко 9.999, три цртице (---) се приказују уместо размере.
- 7.
- Зарезом раздвојен списак назива провера целовитости. Следеће ниске се користе за познате врсте провера: None, CRC32, CRC64 и SHA-256. За непознате врсте провера, користи се Unknown-N, где је N ИД провере као децимални број (једна или две цифре).
- 8.
- Укупна величина попуњавања тока у датотеци
Колоне редова тока:
- 2.
- Број тока (први ток је 1)
- 3.
- Број блокова у току
- 4.
- Померај почетка запакованог
- 5.
- Померај почетка незапаковане
- 6.
- Величина запакованог (не укључује попуну тока)
- 7.
- Величина незапаковане
- 8.
- Размера паковања
- 9.
- Назив провере целовитости
- 10.
- Величина попуне тока
Колоне редова блока:
- 2.
- Број тока који садржи овај блок
- 3.
- Број блока релативан на почетак тока (први блок је 1)
- 4.
- Број блока релативан на почетак датотеке
- 5.
- Померај почетка запакованог односан на почетак датотеке
- 6.
- Померај почетка незапаковане односан на почетак датотеке
- 7.
- Укупна запакована величина блока (заједно са заглављима)
- 8.
- Величина незапаковане
- 9.
- Размера паковања
- 10.
- Назив провере целовитости
Ако је --verbose наведено два пута, додатне колоне су укључене у редовима блока. Они се не приказују са једним --verbose, јер добијање ове информације захтева много тражења и стога може бити споро:
- 11.
- Вредност провере целовитости у хексадецималном облику
- 12.
- Величина заглавља блока
- 13.
- Заставице блока: c указује да је величина запакованог присутна, а u указује да је величина нераспакованог присутна. Ако заставица није постављена, цртица (-) се приказује уместо да се настави са поправком дужине ниске. У будућности нове заставице могу бити додате на крај ниске.
- 14.
- Величина стварних запакованих података у блоку (ово искључује заглавље блока, попуњавање блока и поља провере)
- 15.
- Количина меморије (у бајтовима) потребна за распакивање овог блока са овим xz издањем
- 16.
- Ланац филтера. Знајте да већина опција коришћених за време запакивања не може бити познато, јер се само опције које су потребне за распакивање чувају у .xz заглављима.
Колоне редова сажетка:
- 2.
- Количина меморије (у бајтовима) потребна за распакивање ове датотеке са овим xz издањем
- 3.
- yes или no указује да ли сва заглавља блока имају и величину запакованог и величину незапакованог сачуване у њима
Од xz 5.1.2alpha:
- 4.
- Потребно је најмање xz издање за распакивање датотеке
Колоне редова укупности:
- 2.
- Број токова
- 3.
- Број блокова
- 4.
- Величина запакованог
- 5.
- Величина незапаковане
- 6.
- Просечан степен запакивања
- 7.
- Списак зарезом раздвојених назива провере целовитости која су била присутна у датотекама
- 8.
- Величина попуњавања тока
- 9.
- Број датотека. Ту се држи поредак ранијих колона исто као у редовима датотеке.
Ако је --verbose наведено два пута, додатне колоне су укључене у реду укупности:
- 10.
- Највећа количина меморије (у бајтима) потребна за распакивање датотеке са овим xz издањем
- 11.
- yes или no указује да ли сва заглавља блока имају и величину запакованог и величину незапакованог сачуване у њима
Од xz 5.1.2alpha:
- 12.
- Потребно је најмање xz издање за распакивање датотеке
Будућа издања могу додати нове врсте реда и нове колоне се могу додати постојећим врстама реда, али постојеће колоне се неће променити.
Помоћ филтера¶
xz --robot --filters-help исписује подржане филтере у следећем формату:
филтер:опција=<вредност>,опција=<вредност>...
- филтер
- Назив филтера
- опција
- Назив филтера специфичне опције
- вредност
- Опсези бројевних вредности се јављају као <min-max>. Вредност ниске избора се приказују унутар < > и раздвојене су знаком |.
Сваки филтер се исписује на свом сопственом реду.
Информације о ограничењу меморије¶
xz --robot --info-memory исписује један ред са више колона раздвојених табулатором:
- 1.
- Укупна количина физичке меморије (RAM) у бајтима.
- 2.
- Ограничење коришћења меморије за запакивање у бајтима (--memlimit-compress). Специјална вредност 0 означава основно подешавање које је за режим једне нити исто као без ограничења.
- 3.
- Ограничење коришћења меморије за распакивање у бајтима (--memlimit-decompress). Специјална вредност 0 означава основно подешавање које је за режим једне нити исто као без ограничења.
- 4.
- Од xz 5.3.4alpha: Коришћење меморије за распакивање са више нити у бајтима (--memlimit-mt-decompress). Ово никада није нула јер систему специфична основна вредност приказана у колони 5 се користи ако ограничење није изричито наведено. Такође никада није веће од вредности у колони 3 чак и ако је наведена већа вредност са --memlimit-mt-decompress.
- 5.
- Од xz 5.3.4alpha: Систему специфично основно ограничење коришћења меморије које се користи за ограничавање броја нити приликом запакивања са аутоматским бројем нити (--threads=0) и без наведеног ограничења коришћења меморије (--memlimit-compress). Ово се такође користи као основна вредност за --memlimit-mt-decompress.
- 6.
- Од xz 5.3.4alpha: Број доступних нити обрађивача.
У будуће, излаз xz --robot --info-memory може имати више колона, али никада више од једног реда.
Издање¶
xz --robot --version исписује број издања за xz и „liblzma“ у следећем формату:
XZ_VERSION=XYYYZZZS
LIBLZMA_VERSION=XYYYZZZS
- X
- Главно издање.
- YYY
- Споредно издање. Парни бројеви су стабилна а непарни су алфа или бета издања.
- ZZZ
- Ниво закрпе за стабилна издања или само бројач за развојна издања.
- S
- Стабилност. 0 је алфа, 1 је бета, а 2 је стабилно. S треба увек да буде 2 када је YYY парно.
XYYYZZZS су исти у оба реда ако су xz и „liblzma“ из истог издања XZ Utils-а.
Примери: 4.999.9beta је 49990091 и 5.0.0 је 50000002.
СТАЊЕ ИЗЛАЗА¶
- 0
- Све је у реду.
- 1
- Дошло је до грешке.
- 2
- Десило се нешто вредно упозорења, али није дошло до стварних грешака.
Обавештења (без упозорења или грешака) исписано на стандардној грешци не утичу на стање излаза.
ОКРУЖЕЊЕ¶
xz обрађује размаком одвојени списак опција из променљивих окружења XZ_DEFAULTS и XZ_OPT, тим редом, пре обраде опција са линије наредби. Знајте да се обрађују само опције из променљивих окружења; све што нису опције се тихо занемарује. Обрада се ради са getopt_long(3) која се користи такође за аргументе линије наредби.
Warning: By setting these environment variables, one is effectively modifying programs and scripts that run xz. Most of the time it is safe to set memory usage limits, number of threads, and compression options via the environment variables. However, some options can break scripts. An obvious example is --help which makes xz show the help text instead of compressing or decompressing a file. More subtle examples are --quiet and --verbose. In many cases it works well to enable the progress indicator using --verbose, but in some situations the extra messages create problems. The verbosity level also affects the behavior of --list.
- XZ_DEFAULTS
- User-specific or system-wide default options. Typically this is set in a shell initialization script to enable xz's memory usage limiter by default or set the default number of threads. Excluding shell initialization scripts and similar special cases, scripts should never set or unset XZ_DEFAULTS.
- XZ_OPT
- Ово је за прослеђивање опција ка xz када није могуће поставити опције директно на xz линији наредби. Ово је случај када је xz покренут скриптом или алатом, на пример, са Гну tar(1):
XZ_OPT=-2v tar caf foo.tar.xz foo
- Скрипте могу да користе XZ_OPT, на пример, за постављање основних опција запакивања специфичних скрипти. Још увек се препоручује омогућавање корисницима да пишу преко XZ_OPT ако је то разумљиво. На пример, у sh(1) скриптама неко може користити нешто као ово:
XZ_OPT=${XZ_OPT-"-7e"} export XZ_OPT
LZMA UTILS САДЕЈСТВЕНОСТ¶
Синтакса линије наредби xz је практично супер скуп lzma, unlzma и lzcat као што се налази у LZMA Utils 4.32.x. У већини случајева, могуће је заменити LZMA Utils са XZ Utils без оштећења постојећих скрипти. Има неких несагласности такође, које понекад могу довести до проблема.
Нивои предподешавања запакивања¶
Набрајање предподешености нивоа запакивања није исто у xz и LZMA Utils. Најважнија разлика је у томе како се величине речника мапирају у различитим предподешеностима. Величина речника је отприлике иста као и коришћење меморије распакивача.
Ниво | xz | LZMA Utils |
-0 | 256 KiB | Н/Д |
-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 |
Разлике величине речника делују такође на коришћење меморије запакивање, али постоје још неке разлике између LZMA Utils и XZ Utils, што чини разлике још већим:
Ниво | xz | LZMA Utils 4.32.x |
-0 | 3 MiB | Н/Д |
-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 |
Основни ниво предподешености у LZMA Utils је -7 док у XZ Utils је -6, тако да оба користе 8 MiB речник по основи.
Токовне наспрам не-токовних „.lzma“ датотеке¶
Незапакована величина датотеке се може чувати у .lzma заглављу. LZMA Utils то ради приликом запакивања обичних датотека. Алтернатива је да се означи та незапакована величина као непозната и да се користи означавач краја утовара да назначи где распакивач треба да стане. LZMA Utils користи ову методу када незапакована величина није позната, што је случај, на пример, у спојкама.
xz подржава распакивање .lzma датотека са или без означавача краја утовара, али ће све .lzma датотеке направљене са xz користити означавач краја утовара и означити незапаковану величину непознатом у .lzma заглављу. Ово може бити проблем у неким неуобичајеним ситуацијама. На пример, .lzma распакивач у угнежденом уређају може радити само са датотекама које имају незапаковану величину. Ако наиђете на тај проблем, треба да користите LZMA Utils или LZMA SDK да направите .lzma датотеке са познатом незапакованом величином.
Неподржане „.lzma“ датотеке¶
Формат .lzma омогућава lc вредности све до 8, а lp вредности све до 4. LZMA Utils може да распакује датотеке са било којим lc и lp, али увек прави датотеке са lc=3 и lp=0. Прављење датотека са другим lc и lp је мгуће са xz и са LZMA SDK.
Примена филтера LZMA1 у „liblzma“ захтева да збир lc и lp не сме да премаши 4. Стога, .lzma датотеке, које премаше ово ограничење, не могу да се распакују са xz.
LZMA Utils прави само .lzma датотеке које имају величину речника од 2^n (степен 2) али прихвата датотеке са било којом величином речника. „liblzma“ прихвата само .lzma датотеке које имају величину речника од 2^n или 2^n + 2^(n-1). Ово је да се смање лажни позитивни резултати приликом откривања .lzma датотека.
Ова ограничења не би требало да буду проблем у пракси, јер су практично све .lzma датотеке запаковане са поставкама које ће „liblzma“ прихватити.
Пратеће смеће¶
Приликом распакивања, LZMA Utils тихо занемарује све после првог .lzma тока. У већини прилика, ово је грешка. Ово такође значи да LZMA Utils не подржава распакивање надовезаних .lzma датотека.
Ако су остали подаци након првог .lzma тока, xz сматра да је датотека оштећена осим ако је коришћено --single-stream. Ово може прекинути нејасне скрипте које су претпоставиле да је пратеће смеће занемарено.
НАПОМЕНЕ¶
Излаз запакованог може бити променљив¶
Тачан запаковани излаз добијен из исте незапаковане улазне датотеке може се разликовати између XZ Utils издања чак и ако су опције запакивања истоветне. Ово је због тога што шифрер може бити побољшан (брже и боље запакивање) а да не утиче на формат датотеке. Излаз се може разликовати између различитих изградњи истог XZ Utils издања, ако су коришћене другачије опције изградње.
Ово изнад значи да када се --rsyncable једном примени, резултирајућа датотека неће неопходно бити r-ускладива осим ако и стара и нова датотека нису запаковане истим xz издањем. Овај проблем може бити поправљен ако је део примене шифрера замрзнут да држи r-ускладив излаз стабилним кроз xz издања.
Угнеждени „.xz“ распакивачи¶
Примена угнежденог .xz распакивача као што је XZ Embedded неопходно не подржава датотеке направљене врстама провере целовитости осим none и crc32. Како је основно --check=crc64, морате да користите --check=none или --check=crc32 када правите датотеке за угнеждене системе.
Споља уграђени системи, сви распакивачи .xz формата подржавају све врсте провере, или барем могу да распакују датотеку без испитивања провере целовитости ако одређена провера није подржана.
XZ Embedded подржава BCJ филтере, али само са основним померајем почетка.
ПРИМЕРИ¶
Основно¶
Запакује датотеку foo у foo.xz користећи основни ниво запакивања (-6), и уклања foo ако је запакивање успешно:
xz foo
Распакује bar.xz у bar и не уклања bar.xz чак и када је распакивање успешно:
xz -dk bar.xz
Ствара baz.tar.xz са предподешавањем -4e (-4 --extreme), које је спорије него основно -6, али захтева мање меморије за запакивање и распакивање (48 MiB и 5 MiB):
tar cf - baz | xz -4e > baz.tar.xz
Мешавина сажетих и несажетих датотека се може распаковати на стандардни излаз једном наредбом:
xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt
Паралелно запакивање више датотека¶
На GNU и *BSD, find(1) и xargs(1) се могу користити за паралелно запакивање више датотека:
find . -type f \! -name '*.xz' -print0 \
| xargs -0r -P4 -n16 xz -T1
Опција -P за xargs(1) поставља број паралелних xz процеса. Најбоља вредност за опцију -n зависи од тога колико датотека има за запакивање. Ако има само неколико датотека, вредност би вероватно требала да буде 1; са више хиљада датотека, 100 или чак и више може бити одговарајуће за смањење броја xz процеса које би xargs(1) евентуално направио.
Опција -T1 за xz је ту да га примора на једнонитни режим, јер се xargs(1) користи за контролу количине паралелизације.
Режим робота¶
Израчунава колико је бајтова укупно сачувано након запакивања више датотека:
xz --robot --list *.xz | awk '/^totals/{print $5-$4}'
Скрипта може желети да зна да користи најновији xz. Следећа скрипта sh(1) проверава да ли је број издања xz алата барем 5.0.0. Ова метода је сагласна са старим бета издањима која не подржавају --robot опцију:
if ! eval "$(xz --robot --version 2> /dev/null)" ||
[ "$XZ_VERSION" -lt 50000002 ]; then
echo "Ваш „xz“ је превише стар." fi unset XZ_VERSION LIBLZMA_VERSION
Поставља ограничење коришћења меморије за распакивање коришћењем XZ_OPT, али ако је ограничење већ постављено, не повећава је:
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
Произвољни ланци филтера запакивача¶
Најједноставнија употреба за произвољне ланце филтера прилагођава LZMA2 предподешеност. Ово може бити корисно, јер предподешености покривају само подскуп потенцијално корисних комбинација поставки запакивања.
Колоне ЗапакЦПЈ у табелама из описа опција -0 ... -9 и --extreme су корисне приликом прилагођавања LZMA2 предподешености. Овде су значајни делови прикупљени из те две табеле:
Преподешеност | ЗапакЦПЈ |
-0 | 0 |
-1 | 1 |
-2 | 2 |
-3 | 3 |
-4 | 4 |
-5 | 5 |
-6 | 6 |
-5e | 7 |
-6e | 8 |
Ако знате да датотека захтева нешто велики речник (на пример, 32 MiB) за добро запакивање, али желите да је запакујете брже него што би то xz -8 урадио, предподешеност са ниском вредношћу ЗапакМем (на пример, 1) може се изменити да користи већи речник:
xz --lzma2=preset=1,dict=32MiB foo.tar
Са одређеним датотекама, горња наредба може бити бржа од xz -6 а запакивање значајно боље. Међутим, мора бити наглашено да само неке датотеке имају корист од великог речника док одржавају вредност ЗапакЦПЈ ниском. Најочигледнија ситуација, у којој велики речник може доста помоћи, јесте архива која садржи врло сличне датотеке где свака има најмање неколико мегабајта. Величина речника треба да буде значајно већа од сваке засебне датотеке да би се омогућило да LZMA2 има потпуну предност од сличности између узастопних датотека.
Ако је веома велико коришћење меморије запакивача и распакивача у реду, а датотека која се запакује је барем неколико стотина мегабајта, може бити корисно користити још већи речник од 64 MiB који ће xz -9 користити:
xz -vv --lzma2=dict=192MiB big_foo.tar
Коришћење -vv (--verbose --verbose) као у горњем примеру може бити корисно да се виде захтеви за меморијом запакивача и распакивача. Знајте да је коришћење речника већег од величине незапаковане датотеке губитак меморије, тако да горња наредба није корисна за мале датотеке.
Понекад време запакивања није важно, али коришћење меморије распакивача треба да се одржава ниским, на пример, да би се учинило могућим распакивање датотеке на угнежденом систему, Следеће наредбе користе -6e (-6 --extreme) као основу и постављају речник на само 64 KiB. Резултујућа датотека се може распаковати са XZ Embedded (због тога је ту --check=crc32) користећи око 100 KiB меморије.
xz --check=crc32 --lzma2=preset=6e,dict=64KiB foo
Ако желите да исцедите што је више могуће бајтова, дотеривање броја битова контекста литерала (lc) и броја битова положаја (pb) може понекад да помогне. Дотеривање броја битова положаја литерала (lp) може такође да помогне, али обично lc и pb су важнији. На пример, архива извора кода садржи углавном US-ASCII текст, тако да нешто као следеће може да да незнатно (око 0.1 %) мању датотеку него xz -6e (пробајте такође без lc=4):
xz --lzma2=preset=6e,pb=0,lc=4 source_code.tar
Коришћење још једног филтера заједно са LZMA2 може побољшати запакивање са одређеним врстама датотека. На пример, за запакивање x86-32 или x86-64 дељене библиотеке коришћењем x86 BCJ филтера:
xz --x86 --lzma2 libfoo.so
Знајте да поредак опција филтера има значај. Ако је --x86 наведено након --lzma2, xz ће дати грешку, јер не сме бити никаквог филтера после LZMA2, и такође зато што се x86 BCJ филтер не може користити као последњи филтер у ланцу.
Delta филтер заједно са LZMA2 може дати добре резултате са битмап сликама. Требало би обично да надјача PNG, који има нешто више напредних филтера него једноставни делта али користи Deflate за стварно запакивање.
Слика треба да се сачува у незапакованом формату, на пример, као незапакована TIFF. Параметар растојања Delta филтера је постављен да се подудари са бројем бајтова по пикселу у слици. На пример, RGB битмапа од 24 бита захтева dist=3, а такође је добро проследити pb=0 за LZMA2 да се прилагоди поравнање од три бајта:
xz --delta=dist=3 --lzma2=pb=0 foo.tiff
Ако је више слика стављено у једну архиву (на пример, .tar), Delta филтер ће радити на томе такође све док све слике не буду имале исти број бајтова по пикселу.
ВИДИТЕ ТАКОЂЕ¶
xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1)
XZ Utils: <https://tukaani.org/xz/>
XZ Embedded: <https://tukaani.org/xz/embedded.html>
LZMA SDK: <https://7-zip.org/sdk.html>
2025-03-08 | Tukaani |