| XZ(1) | XZ Utils | XZ(1) |
نام (NAME)
xz, unxz, xzcat, lzma, unlzma, lzcat - فشردهسازی یا بازگشایی فایلهای .xz و .lzma
خلاصه دستور (SYNOPSIS)
xz [option...] [file...]
نامهای مستعار دستور (COMMAND ALIASES)
unxz معادل
است با xz --ecompress.
xzcat معادل است
با xz --ecompress --dout.
lzma معادل است
با xz --rmat=lzma.
unlzma معادل
است با xz --rmat=lzma --ecompress.
lzcat معادل است
با xz --rmat=lzma --ecompress --dout.
هنگام نوشتن اسکریپتهایی که نیاز به بازگشایی فایلها دارند، توصیه میشود همیشه از نام xz با آرگومانهای مناسب (xz -d یا xz -dc) به جای نامهای unxz و xzcat استفاده شود.
توضیحات (DESCRIPTION)
دستور xz یک ابزار همهمنظوره برای فشردهسازی دادهها با نحوی در خط فرمان شبیه به gzip(1) و bzip2(1) است. قالب فایل بومی آن قالب .xz است، اما قالب قدیمی .lzma مورد استفاده توسط LZMA Utils و جریانهای خام فشرده بدون سرایندهای قالب ظرف نیز پشتیبانی میشوند. علاوه بر این، بازگشایی فشردهسازی قالب .lz مورد استفاده توسط lzip پشتیبانی میشود.
دستور xz هر file را بر اساس حالت عملیات انتخابشده فشرده یا بازگشایی میکند. اگر هیچ file‐ی مشخص نشود یا اگر file برابر با - باشد، xz از ورودی استاندارد میخواند و دادههای پردازششده را در خروجی استاندارد مینویسد. اگر خروجی استاندارد یک ترمینال باشد، xz از نوشتن دادههای فشردهشده در آن خودداری میکند (یک خطا نمایش میدهد و از file صرفنظر میکند). به همین ترتیب، xz از خواندن دادههای فشردهشده از ورودی استاندارد در صورتی که ترمینال باشد خودداری خواهد کرد.
مگر اینکه --dout مشخص شده باشد، file‐های دیگری غیر از - در فایل جدیدی نوشته میشوند که نام آن از نام file منبع مشتق میشود:
- هنگام فشردهسازی، پسوند قالب فایل مقصد (.xz یا .lzma) به انتهای نام فایل منبع افزوده میشود تا نام فایل مقصد به دست آید.
- هنگام بازگشایی، پسوند .xz، .lzma یا .lz از انتهای نام فایل حذف میشود تا نام فایل مقصد به دست آید. همچنین xz پسوندهای .txz و .tlz را میشناسد و آنها را با پسوند .tar جایگزین میکند.
اگر فایل مقصد از قبل وجود داشته باشد، یک خطا نمایش داده شده و از file صرفنظر میشود.
مگر در صورت نوشتن در خروجی استاندارد، xz یک هشدار نمایش میدهد و در صورت برقراری هر یک از شرایط زیر از file صرفنظر میکند:
- مورد File یک فایل معمولی نباشد. پیوندهای نمادین دنبال نمیشوند، و بنابراین فایل معمولی در نظر گرفته نمیشوند.
- مورد File بیش از یک پیوند سخت داشته باشد.
- مورد File دارای بیتهای setuid، setgid یا sticky تنظیمشده باشد.
- حالت عملیات روی فشردهسازی تنظیم شده باشد و file از قبل پسوند قالب فایل مقصد را داشته باشد (.xz یا .txz هنگام فشردهسازی به قالب .xz، و .lzma یا .tlz هنگام فشردهسازی به قالب .lzma).
- حالت عملیات روی بازگشایی تنظیم شده باشد و file پسوند هیچیک از قالبهای فایل پشتیبانیشده را نداشته باشد (.xz، .txz، .lzma، .tlz یا .lz).
پس از فشردهسازی یا بازگشایی موفقیتآمیز file، دستور xz مالک، گروه، مجوزها، زمان دسترسی و زمان تغییر را از file منبع به فایل مقصد کپی میکند. اگر کپی گروه ناموفق باشد، مجوزها به گونهای اصلاح میشوند که فایل مقصد برای کاربرانی که اجازه دسترسی به file منبع را نداشتند، قابل دسترس نشود. دستور xz هنوز از کپی فرادادههای دیگر مانند فهرستهای کنترل دسترسی (ACL) یا ویژگیهای توسعهیافته پشتیبانی نمیکند.
پس از بسته شدن موفقیتآمیز فایل مقصد، file منبع حذف میشود مگر اینکه --ep مشخص شده باشد. اگر خروجی در خروجی استاندارد نوشته شود یا اگر خطایی رخ دهد، file منبع هرگز حذف نمیشود.
ارسال سیگنال SIGINFO یا SIGUSR1 به فرایند xz باعث میشود اطلاعات پیشرفت کار در خطای استاندارد چاپ شود. این قابلیت کاربرد محدودی دارد زیرا هنگامی که خطای استاندارد یک ترمینال باشد، استفاده از -- یک نشانگر پیشرفت با بهروزرسانی خودکار را نمایش میدهد.
میزان مصرف حافظه (Memory usage)
میزان مصرف حافظه xz بسته به تنظیمات فشردهسازی از چند صد کیلوبایت تا چندین گیگابایت متغیر است. تنظیمات استفادهشده هنگام فشردهسازی یک فایل، نیازمندیهای حافظه بازگشا (decompressor) را تعیین میکند. بهطور معمول بازگشا به ۵ % تا ۲۰ % از مقدار حافظهای که فشردهساز هنگام ایجاد فایل نیاز داشته است، احتیاج دارد. برای مثال، بازگشایی فایلی که با xz -9 ایجاد شده در حال حاضر به ۶۵ MiB حافظه نیاز دارد. با این وجود، ممکن است فایلهای .xz وجود داشته باشند که برای بازگشایی به چندین گیگابایت حافظه نیاز داشته باشند.
بهویژه کاربران سامانههای قدیمیتر ممکن است احتمال مصرف بسیار بالای حافظه را آزاردهنده بدانند. برای جلوگیری از غافلگیریهای ناخوشایند، xz یک محدودکننده توکار مصرف حافظه دارد که بهطور پیشفرض غیرفعال است. اگرچه برخی سیستمعاملها روشهایی برای محدود کردن مصرف حافظه فرایندها ارائه میدهند، اما اتکا به آنها به اندازه کافی انعطافپذیر دانسته نشد (برای مثال، استفاده از ulimit(1) برای محدود کردن حافظه مجازی تمایل دارد کارکرد mmap(2) را مختل کند).
محدودکننده مصرف حافظه را میتوان با گزینه خط فرمان --mlimit=limit فعال کرد. اغلب راحتتر است که این محدودکننده با تنظیم متغیر محیطی XZ_DEFAULTS بهطور پیشفرض فعال شود، برای مثال XZ_DEFAULTS=--mlimit=150MiB. امکان تنظیم جداگانه محدودیتها برای فشردهسازی و بازگشایی با استفاده از --mlimit-compress=limit و --mlimit-decompress=limit وجود دارد. استفاده از این دو گزینه خارج از XZ_DEFAULTS بهندرت مفید است زیرا یک اجرای واحد از xz نمیتواند همزمان هم فشردهسازی و هم بازگشایی را انجام دهد و تایپ --mlimit=limit (یا -M limit) در خط فرمان کوتاهتر است.
اگر سقف مصرف حافظه مشخصشده هنگام بازگشایی رد شود، xz یک خطا نمایش میدهد و بازگشایی فایل با شکست مواجه میشود. اگر سقف مصرف هنگام فشردهسازی رد شود، xz تلاش میکند تنظیمات را کاهش دهد تا محدودیت دیگر رد نشود (مگر هنگام استفاده از --rmat=raw یا --0-adjust). به این ترتیب عملیات با شکست مواجه نخواهد شد مگر اینکه سقف تعیینشده بسیار کوچک باشد. کاهش مقیاس تنظیمات در مراحلی انجام میشود که با سطوح پیشتنظیم فشردهسازی مطابقت ندارند؛ برای مثال، اگر سقف فقط اندکی کمتر از مقدار مورد نیاز برای xz -9 باشد، تنظیمات تنها کمی کاهش مییابند، نه اینکه تا حد xz -8 پایین بیایند.
الحاق و فاصلهگذاری در فایلهای .xz (Concatenation and padding with .xz files)
امکان الحاق فایلهای .xz به همان صورت اصلی وجود دارد. دستور xz چنین فایلهایی را طوری بازگشایی میکند که گویی یک فایل .xz واحد بودهاند.
امکان درج فاصلهگذاری (padding) بین بخشهای الحاقشده یا پس از آخرین بخش وجود دارد. فاصلهگذاری باید شامل بایتهای صفر (null) باشد و اندازه آن باید مضربی از چهار بایت باشد. این ویژگی برای مثال زمانی مفید است که فایل .xz روی رسانهای ذخیره میشود که اندازه فایل را در بلوکهای ۵۱۲ بایتی اندازهگیری میکند.
الحاق و درج فاصلهگذاری برای فایلهای .lzma یا جریانهای خام مجاز نیست.
گزینهها (OPTIONS)
پسوندهای عدد صحیح و مقادیر ویژه (Integer suffixes and special values)
در بیشتر جاهایی که یک آرگومان از نوع عدد صحیح مورد انتظار است، یک پسوند اختیاری برای مشخص کردن آسان اعداد صحیح بزرگ پشتیبانی میشود. نباید هیچ فاصلهای بین عدد صحیح و پسوند وجود داشته باشد.
- KiB
- ضرب عدد صحیح در ۱٬۰۲۴ (2^10). پسوندهای Ki، k، kB، K و KB به عنوان مترادفهای KiB پذیرفته میشوند.
- MiB
- ضرب عدد صحیح در ۱٬۰۴۸٬۵۷۶ (2^20). پسوندهای Mi، m، M و MB به عنوان مترادفهای MiB پذیرفته میشوند.
- GiB
- ضرب عدد صحیح در ۱٬۰۷۳٬۷۴۱٬۸۲۴ (2^30). پسوندهای Gi، g، G و GB به عنوان مترادفهای GiB پذیرفته میشوند.
مقدار ویژه max میتواند برای مشخص کردن حداکثر مقدار عدد صحیح پشتیبانیشده توسط گزینه استفاده شود.
حالت عملیات (Operation mode)
اگر چندین گزینه حالت عملیات مشخص شوند، آخرین گزینه اعمال میشود.
- -z, --ompress
- فشردهسازی. این حالت عملیات پیشفرض است هنگامی که هیچ گزینه حالت عملیاتی مشخص نشده باشد و حالت عملیات دیگری از نام دستور استنباط نشود (برای مثال، unxz حالت --ecompress را تداعی میکند).
- -d, --ecompress, --ncompress
- بازگشایی فشردهسازی.
- -t, -- est
- آزمون یکپارچگی و صحت file‐های فشردهشده. این گزینه معادل با --ecompress --dout است، با این تفاوت که دادههای بازگشاییشده به جای نوشته شدن در خروجی استاندارد، دور ریخته میشوند. هیچ فایلی ایجاد یا حذف نمیشود.
- -l, --
- چاپ اطلاعات درباره file‐های فشردهشده. هیچ خروجی بازگشاییشدهای تولید نمیشود، و هیچ فایلی ایجاد یا حذف نمیگردد. در حالت فهرست، برنامه نمیتواند دادههای فشردهشده را از ورودی استاندارد یا از دیگر منابع فاقد قابلیت جستجو (unseekable) بخواند.
- فهرست پیشفرض اطلاعات پایهای درباره file‐ها را نمایش میدهد، هر فایل در یک سطر. برای دریافت اطلاعات دقیقتر، از گزینه -- نیز استفاده کنید. برای اطلاعات باز هم بیشتر، -- را دو بار به کار ببرید؛ اما توجه داشته باشید که این کار ممکن است کُند باشد، زیرا دریافت تمام اطلاعات اضافی نیازمند پیمایشهای (seek) زیادی است. عرض خروجی پرجزئیات بیش از ۸۰ نویسه است، بنابراین هدایت خروجی به ابزارهایی مانند less -S در صورتی که عرض ترمینال کافی نباشد، میتواند مناسب باشد.
- خروجی دقیق ممکن است بین نسخههای xz و محلیسازیهای (locales) مختلف متفاوت باشد. برای خروجی خوانا توسط ماشین، باید از --obot -- استفاده شود.
اصلاحکنندههای عملیات (Operation modifiers)
- -k, --ep
- عدم حذف فایلهای ورودی.
- از نسخه xz 5.2.6، این گزینه همچنین باعث میشود xz حتی اگر ورودی یک پیوند نمادین به یک فایل معمولی باشد، بیش از یک پیوند سخت داشته باشد، یا دارای بیتهای setuid، setgid یا sticky تنظیمشده باشد، فشردهسازی یا بازگشایی را انجام دهد. بیتهای setuid، setgid و sticky به فایل مقصد کپی نمیشوند. در نسخههای پیشین این کار تنها با گزینه --rce انجام میشد.
- -f, --rce
- این گزینه چندین اثر دارد:
- اگر فایل مقصد از قبل وجود داشته باشد، پیش از فشردهسازی یا بازگشایی آن را حذف میکند.
- حتی اگر ورودی یک پیوند نمادین به یک فایل معمولی باشد، بیش از یک پیوند سخت داشته باشد، یا بیتهای setuid، setgid یا sticky برای آن تنظیم شده باشد، فشردهسازی یا بازگشایی را انجام میدهد. بیتهای setuid، setgid و sticky به فایل مقصد کپی نمیشوند.
- هنگامی که به همراه --ecompress و --dout استفاده شود و xz نتواند نوع فایل منبع را تشخیص دهد، فایل منبع را همانگونه که هست در خروجی استاندارد کپی میکند. این امر اجازه میدهد xzcat --rce مانند cat(1) برای فایلهایی که با xz فشرده نشدهاند استفاده شود. توجه داشته باشید که در آینده، xz ممکن است از قالبهای فشرده جدید پشتیبانی کند، که این امر ممکن است باعث شود xz انواع بیشتری از فایلها را به جای کپی کردن مستقیم در خروجی استاندارد، بازگشایی کند. میتوان از 0format برای محدود کردن xz به بازگشایی تنها یک قالب فایل خاص استفاده کرد.
- -c, --dout, -- o-stdout
- نوشتن دادههای فشرده یا بازگشاییشده در خروجی استاندارد به جای فایل. این گزینه متضمن --ep است.
- --ngle-stream
- تنها اولین جریان .xz را بازگشایی میکند، و دادههای ورودی باقیمانده احتمالی پس از جریان را نادیده میگیرد. معمولاً چنین دادههای زباله پایانی باعث میشود xz یک خطا نمایش دهد.
- دستور xz هرگز بیش از یک جریان را از فایلهای .lzma یا جریانهای خام بازگشایی نمیکند، اما این گزینه همچنان باعث میشود xz دادههای اضافی احتمالی پس از فایل .lzma یا جریان خام را نادیده بگیرد.
- اگر حالت عملیات روی --ecompress یا -- est تنظیم نشده باشد، این گزینه هیچ اثری ندارد.
- --0-sparse
- غیرفعال کردن ایجاد فایلهای خلوت (sparse files). بهطور پیشفرض، هنگام بازگشایی به یک فایل معمولی، xz در صورتی که دادههای بازگشاییشده حاوی دنبالههای طولانی از صفر باینری باشند، تلاش میکند فایل را خلوت بسازد. این کار هنگام نوشتن در خروجی استاندارد نیز تا زمانی که خروجی استاندارد به یک فایل معمولی متصل باشد و شرایط ایمنی معین برقرار باشد، کار میکند. ایجاد فایلهای خلوت ممکن است با کاهش میزان ورودی/خروجی دیسک، در فضای دیسک صرفهجویی کرده و سرعت بازگشایی را افزایش دهد.
- -S .suf, --ffix=.suf
- هنگام فشردهسازی، از .suf به عنوان پسوند فایل مقصد به جای .xz یا .lzma استفاده میکند. اگر در خروجی استاندارد نوشته نشود و فایل منبع از قبل پسوند .suf را داشته باشد، یک هشدار نمایش داده شده و از فایل صرفنظر میشود.
- هنگام بازگشایی، فایلهای دارای پسوند .suf را علاوه بر فایلهای دارای پسوندهای .xz، .txz، .lzma، .tlz یا .lz تشخیص میدهد. اگر فایل منبع پسوند .suf را داشته باشد، این پسوند برای به دست آوردن نام فایل مقصد حذف میشود.
- هنگام فشردهسازی یا بازگشایی جریانهای خام (--rmat=raw)، پسوند باید همیشه مشخص شود مگر اینکه در خروجی استاندارد نوشته شود، زیرا هیچ پسوند پیشفرضی برای جریانهای خام وجود ندارد.
- --les[=file]
- خواندن نام فایلهای مورد پردازش از file؛ اگر file حذف شود، نام فایلها از ورودی استاندارد خوانده میشوند. نام فایلها باید با نویسه خط جدید (newline) خاتمه یابند. یک خط فاصله (-) به عنوان نام یک فایل معمولی در نظر گرفته میشود و به معنی ورودی استاندارد نیست. اگر نام فایلها به عنوان آرگومانهای خط فرمان نیز داده شوند، پیش از نام فایلهای خواندهشده از file پردازش میشوند.
- --les0[=file]
- این گزینه کاملاً شبیه به --les[=file] است جز اینکه هر نام فایل باید با نویسه تهی (null) خاتمه یابد.
قالب پایه فایل و گزینههای فشردهسازی (Basic file format and compression options)
- -F format, --rmat=format
- تعیین format فایل برای فشردهسازی یا بازگشایی:
- auto
- این حالت پیشفرض است. هنگام فشردهسازی، auto معادل با xz است. هنگام بازگشایی، قالب فایل ورودی بهطور خودکار تشخیص داده میشود. توجه داشته باشید که جریانهای خام (ایجادشده با --rmat=raw) نمیتوانند بهطور خودکار تشخیص داده شوند.
- xz
- فشردهسازی به قالب فایل .xz، یا پذیرش تنها فایلهای .xz هنگام بازگشایی.
- lzma, alone
- فشردهسازی به قالب قدیمی فایل .lzma، یا پذیرش تنها فایلهای .lzma هنگام بازگشایی. نام جایگزین alone برای سازگاری با نسخههای پیشین LZMA Utils ارائه شده است.
- lzip
- پذیرش تنها فایلهای .lz هنگام بازگشایی. فشردهسازی به این قالب پشتیبانی نمیشود.
- نسخه 0 و نسخه توسعهنیافته 1 از قالب .lz پشتیبانی میشوند. فایلهای نسخه 0 توسط lzip نسخه 1.3 و قدیمیتر تولید میشدند. چنین فایلهایی رایج نیستند اما ممکن است در آرشیوهای فایل یافت شوند، زیرا چند بسته کد منبع در این قالب منتشر شدند. همچنین ممکن است افراد فایلهای شخصی قدیمی در این قالب داشته باشند. پشتیبانی از بازگشایی نسخه 0 در lzip 1.18 حذف شد.
- دستور lzip 1.4 و بالاتر فایلهایی در نسخه 1 قالب ایجاد میکنند. افزونه نشانگر تخلیه همگام (sync flush marker) به نسخه 1 در lzip 1.6 اضافه شد. این افزونه بهندرت استفاده میشود و توسط xz پشتیبانی نمیشود (به عنوان ورودی خراب تشخیص داده میشود).
- raw
- فشردهسازی یا بازگشایی یک جریان خام (بدون سرایند). این گزینه فقط برای کاربران پیشرفته در نظر گرفته شده است. برای رمزگشایی جریانهای خام، باید از --rmat=raw استفاده کرده و زنجیره پالایهها (filter chain) را به صراحت مشخص کنید؛ اطلاعاتی که در حالت عادی در سرایندهای ظرف ذخیره میشد.
- -C check, --heck=check
- تعیین نوع بررسی یکپارچگی. مقدار بررسی از دادههای فشردهنشده محاسبه شده و در فایل .xz ذخیره میشود. این گزینه تنها هنگام فشردهسازی به قالب .xz اثر دارد؛ قالب .lzma از بررسی یکپارچگی پشتیبانی نمیکند. بررسی یکپارچگی (در صورت وجود) هنگامی که فایل .xz بازگشایی میشود، راستیآزمایی میگردد.
- انواع check پشتیبانیشده:
- 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) است. تنظیمات فشردهسازی انتخابشده میزان حافظه مورد نیاز بازگشا را تعیین میکند، بنابراین استفاده از یک سطح بسیار بالا ممکن است بازگشایی فایل را در سامانههای قدیمی با رم کم دردسرساز کند. بهویژه، ایده خوبی نیست که کورکورانه از -9 برای همهچیز استفاده کنید همانطور که اغلب در مورد gzip(1) و bzip2(1) انجام میشود.
- -0 ... -3
- اینها سطوح نسبتاً سریع هستند. سطح -0 گاهی اوقات سریعتر از gzip -9 است در حالی که بسیار بهتر فشرده میکند. سطوح بالاتر اغلب سرعتی قابل مقایسه با bzip2(1) با نسبت فشردهسازی مشابه یا بهتر دارند، گرچه نتایج بستگی زیادی به نوع دادههای در حال فشردهسازی دارد.
- -4 ... -6
- فشردهسازی خوب تا بسیار خوب در حالی که میزان مصرف حافظه بازگشا حتی برای سامانههای قدیمی در حد معقول حفظ میشود. سطح -6 حالت پیشفرض است، که معمولاً انتخابی عالی برای توزیع فایلهایی است که باید حتی در سامانههایی با تنها ۱۶ MiB رم قابل بازگشایی باشند. (-5e یا -6e نیز ممکن است ارزش بررسی داشته باشند. گزینه --\xtreme را ببینید.)
- -7 ... -9
- اینها شبیه به -6 هستند اما با نیازمندیهای حافظه بالاتر برای فشردهساز و بازگشا. این سطوح تنها هنگام فشردهسازی فایلهای بزرگتر از ۸ MiB، ۱۶ MiB و ۳۲ MiB مفید واقع میشوند.
- روی سختافزار یکسان، سرعت بازگشایی تقریباً برابر با تعداد ثابتی از بایتهای داده فشرده در هر ثانیه است. به عبارت دیگر، هرچه فشردهسازی بهتر باشد، سرعت بازگشایی معمولاً بیشتر خواهد بود. این همچنین بدان معنی است که مقدار خروجی فشردهنشده تولیدشده در ثانیه میتواند بسیار متغیر باشد.
- جدول زیر ویژگیهای سطوح پیشتنظیم را خلاصه میکند:
| Preset | DictSize | CompCPU | CompMem | DecMem |
| -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 |
- توضیحات ستونها:
- ستون DictSize اندازه لغتنامه LZMA2 است. استفاده از لغتنامهای بزرگتر از اندازه فایل فشردهنشده، اتلاف حافظه است. به همین دلیل بهتر است از استفاده از سطوح -7 ... -9 در مواقعی که نیاز واقعی به آنها نیست خودداری شود. در سطح -6 و پایینتر، مقدار حافظه هدررفته معمولاً آنقدر کم است که اهمیتی ندارد.
- ستون CompCPU نمایش سادهشدهای از تنظیمات LZMA2 است که بر سرعت فشردهسازی تأثیر میگذارند. اندازه لغتنامه نیز بر سرعت اثر دارد، بنابراین اگرچه CompCPU برای سطوح -6 ... -9 یکسان است، اما سطوح بالاتر همچنان اندکی کُندتر هستند. برای دستیابی به فشردهسازی حتی کُندتر و احتمالاً بهتر، گزینه --\xtreme را ببینید.
- ستون CompMem شامل نیازمندیهای حافظه فشردهساز در حالت تکرشتهای است. این مقدار ممکن است بین نسخههای xz کمی تفاوت داشته باشد. نیازمندیهای حافظه برخی از حالتهای چندرشتهای آینده ممکن است به مراتب بیشتر از حالت تکرشتهای باشد.
- ستون DecMem شامل نیازمندیهای حافظه بازگشا است. به این معنا که تنظیمات فشردهسازی نیازمندیهای حافظه بازگشا را تعیین میکنند. مصرف دقیق حافظه بازگشا اندکی بیشتر از اندازه لغتنامه LZMA2 است، اما مقادیر موجود در جدول به سمت بالا و به مگابایت کامل بعدی گرد شدهاند.
- -e, --\xtreme
- استفاده از یک نوع کُندتر از سطح پیشتنظیم فشردهسازی انتخابشده (-0 ... -9) تا با خوششانسی نسبت فشردهسازی اندکی بهتر حاصل شود، اما با بدشانسی این کار میتواند آن را بدتر کند. میزان مصرف حافظه بازگشا تحت تأثیر قرار نمیگیرد، اما مصرف حافظه فشردهساز در سطوح -0 ... -3 کمی افزایش مییابد.
- از آنجا که دو پیشتنظیم با اندازههای لغتنامه ۴ MiB و ۸ MiB وجود دارند، پیشتنظیمهای -3e و -5e از تنظیمات اندکی سریعتر (CompCPU پایینتر) نسبت به -4e و -6e استفاده میکنند. به این ترتیب هیچ دو پیشتنظیمی یکسان نیستند.
| Preset | DictSize | CompCPU | CompMem | DecMem |
| -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 |
- برای مثال، در مجموع چهار پیشتنظیم وجود دارند که از لغتنامه ۸ MiB استفاده میکنند و ترتیب آنها از سریعترین به کُندترین عبارت است از -5، -6، -5e و -6e.
- --st
- --
- اینها نامهای مستعار تا حدی گمراهکننده برای -0 و -9 هستند. این گزینهها فقط برای سازگاری با LZMA Utils ارائه شدهاند. از استفاده از آنها خودداری کنید.
- 0size
- هنگام فشردهسازی به قالب .xz، دادههای ورودی را به بلوکهایی به اندازه size بایت تقسیم میکند. بلوکها مستقل از یکدیگر فشرده میشوند، که به چندرشتگی کمک کرده و بازگشایی فشردهسازی با دسترسی تصادفی محدود را امکانپذیر میسازد. این گزینه معمولاً برای لغو اندازه بلوک پیشفرض در حالت چندرشتهای استفاده میشود، اما میتواند در حالت تکرشتهای نیز به کار رود.
- در حالت چندرشتهای حدود سه برابر size بایت در هر رشته برای بافر کردن ورودی و خروجی تخصیص مییابد. اندازه پیشفرض size سه برابر اندازه لغتنامه LZMA2 یا ۱ MiB است، هر کدام که بیشتر باشد. معمولاً یک مقدار خوب ۲–۴ برابر اندازه لغتنامه LZMA2 یا حداقل ۱ MiB است. استفاده از size کمتر از اندازه لغتنامه LZMA2 اتلاف رم است زیرا بافر لغتنامه LZMA2 هرگز بهطور کامل استفاده نخواهد شد. اندازه بلوکها در سرایندهای بلوک ذخیره میشود، که نسخههای آینده xz از آن برای بازگشایی چندرشتهای استفاده خواهند کرد.
- در حالت تکرشتهای بهطور پیشفرض هیچ تقسیمبندی بلوکی انجام نمیشود. تنظیم این گزینه بر مصرف حافظه تأثیری ندارد. هیچ اطلاعات اندازهای در سرایندهای بلوک ذخیره نمیشود، بنابراین فایلهای ایجادشده در حالت تکرشتهای با فایلهای ایجادشده در حالت چندرشتهای یکسان نخواهند بود. فقدان اطلاعات اندازه همچنین بدان معناست که نسخه آینده xz نخواهد توانست این فایلها را در حالت چندرشتهای بازگشایی کند.
- 0sizes
- هنگام فشردهسازی به قالب .xz، پس از فواصل مشخصشده از دادههای فشردهنشده، یک بلوک جدید آغاز شود.
- اندازههای فشردهنشده sizes بلوکها به صورت فهرستی جداشده با کاما مشخص میشوند. حذف یک اندازه (دو یا چند کامای متوالی) روشی کوتاهشده برای استفاده از اندازه بلوک قبلی است.
- اگر فایل ورودی بزرگتر از مجموع sizes باشد، آخرین مقدار در sizes تا انتهای فایل تکرار میشود. مقدار ویژه 0 میتواند به عنوان آخرین مقدار استفاده شود تا نشان دهد باقیمانده فایل باید به عنوان یک تکبلوک کدگذاری شود.
- اگر مقادیری برای sizes مشخص شوند که از اندازه بلوک کدگذار تجاوز کنند (چه مقدار پیشفرض در حالت چندرشتهای یا مقدار مشخصشده با -- sizes را حفظ مینماید. برای مثال، اگر فردی -- --ist=5MiB,10MiB,8MiB,12MiB,24MiB را مشخص کند و فایل ورودی ۸۰ MiB باشد، ۱۱ بلوک حاصل خواهد شد: ۵، ۱۰، ۸، ۱۰، ۲، ۱۰، ۱۰، ۴، ۱۰، ۱۰ و ۱ MiB.
- در حالت چندرشتهای اندازه بلوکها در سرایندهای بلوک ذخیره میشود. این کار در حالت تکرشتهای انجام نمیشود، بنابراین خروجی کدگذاریشده با حالت چندرشتهای یکسان نخواهد بود.
- 0timeout
- هنگام فشردهسازی، اگر بیش از timeout میلیثانیه (یک عدد صحیح مثبت) از تخلیه (flush) قبلی گذشته باشد و خواندن ورودی بیشتر مسدودکننده (block) باشد، تمام دادههای ورودی معلق از کدگذار تخلیه شده و در جریان خروجی در دسترس قرار میگیرند. این گزینه میتواند زمانی مفید باشد که xz برای فشردهسازی دادههایی که از طریق شبکه جریان دارند استفاده میشود. مقادیر کوچک timeout دادهها را با تأخیر کمی در سمت دریافتکننده در دسترس قرار میدهند، اما مقادیر بزرگ timeout نسبت فشردهسازی بهتری به همراه دارند.
- این ویژگی بهطور پیشفرض غیرفعال است. اگر این گزینه بیش از یک بار مشخص شود، آخرین مورد اثر میکند. مقدار ویژه 0 برای timeout میتواند برای غیرفعال کردن صریح این ویژگی استفاده شود.
- این قابلیت در سامانههای غیر POSIX در دسترس نیست.
- این ویژگی هنوز آزمایشی است. در حال حاضر xz به دلیل نحوه بافر کردن، برای بازگشایی جریان در زمان واقعی نامناسب است.
- 0limit
- تنظیم محدودیت مصرف حافظه برای فشردهسازی. اگر این گزینه چند بار مشخص شود، آخرین مورد اعمال میشود.
- اگر تنظیمات فشردهسازی از limit تجاوز کند، xz تلاش میکند تنظیمات را کاهش دهد تا محدودیت دیگر رد نشود و پیامی مبنی بر انجام تنظیم خودکار نمایش میدهد. تعدیلها به این ترتیب انجام میشوند: کاهش تعداد رشتهها، تغییر به حالت تکرشتهای اگر حتی یک رشته در حالت چندرشتهای از limit تجاوز کند، و در نهایت کاهش اندازه لغتنامه LZMA2.
- هنگام فشردهسازی با --rmat=raw یا اگر --0-adjust مشخص شده باشد، تنها تعداد رشتهها ممکن است کاهش یابد زیرا این کار بدون تأثیر بر خروجی فشرده انجامپذیر است.
- اگر limit حتی با تعدیلهای توصیفشده در بالا برآورده نشود، یک خطا نمایش داده میشود و xz با وضعیت خروج 1 خارج خواهد شد.
- مقدار limit میتواند به چندین روش مشخص شود:
- مقدار limit میتواند یک مقدار مطلق به بایت باشد. استفاده از یک پسوند عدد صحیح مانند MiB میتواند مفید باشد. مثال: --mlimit-compress=80MiB
- مقدار limit میتواند به عنوان درصدی از کل حافظه فیزیکی (RAM) مشخص شود. این مورد بهویژه هنگام تنظیم متغیر محیطی XZ_DEFAULTS در یک اسکریپت راهاندازی شل که بین رایانههای مختلف به اشتراک گذاشته میشود، مفید است. به این ترتیب سقف مجاز بهطور خودکار در سامانههای با حافظه بیشتر بزرگتر خواهد بود. مثال: --mlimit-compress=70%
- مقدار limit میتواند با تنظیم روی 0 به مقدار پیشفرض خود بازنشانی شود. این کار در حال حاضر معادل تنظیم limit روی max (بدون محدودیت مصرف حافظه) است.
- برای نسخه ۳۲ بیتی xz یک حالت ویژه وجود دارد: اگر limit بیش از 4020 MiB باشد، مقدار limit روی 4020 MiB تنظیم میشود. در معماری MIPS32 به جای آن از 2000 MiB استفاده میشود. (مقادیر 0 و max تحت تأثیر این موضوع قرار نمیگیرند. ویژگی مشابهی برای بازگشایی وجود ندارد.) این میتواند زمانی مفید باشد که یک فایل اجرایی ۳۲ بیتی به فضای آدرس ۴ GiB (۲ GiB در MIPS32) دسترسی دارد در حالی که امیدواریم در شرایط دیگر آسیبی نرساند.
- همچنین بخش میزان مصرف حافظه (Memory usage) را ببینید.
- 0limit
- تنظیم سقف مصرف حافظه برای بازگشایی فشردهسازی. این گزینه همچنین بر حالت -- اثر میگذارد. اگر عملیات بدون تجاوز از limit امکانپذیر نباشد، xz یک خطا نمایش میدهد و بازگشایی فایل ناموفق خواهد بود. بخش 0limit را برای روشهای ممکن تعیین limit ببینید.
- 0limit
- تنظیم سقف مصرف حافظه برای بازگشایی چندرشتهای. این گزینه تنها میتواند بر تعداد رشتهها تأثیر بگذارد؛ هرگز باعث نمیشود xz از بازگشایی یک فایل خودداری کند. اگر limit برای مجاز دانستن هرگونه چندرشتگی بسیار کم باشد، limit نادیده گرفته شده و xz در حالت تکرشتهای ادامه میدهد. توجه داشته باشید که اگر --mlimit-decompress نیز استفاده شود، همیشه هم بر حالت تکرشتهای و هم چندرشتهای اعمال میشود، و بنابراین limit مؤثر برای چندرشتگی هرگز بیشتر از سقف تعیینشده با --mlimit-decompress نخواهد بود.
- برخلاف سایر گزینههای محدودیت مصرف حافظه، 0limit دارای یک limit پیشفرض وابسته به سامانه است. میتوان از xz --info-memory برای دیدن مقدار فعلی استفاده کرد.
- این گزینه و مقدار پیشفرض آن به این دلیل وجود دارند که بدون هیچ محدودیتی، بازگشای چندرشتهای ممکن است در برخی فایلهای ورودی مقدار جنونآمیزی از حافظه را تخصیص دهد. اگر limit پیشفرض در سامانه شما بسیار کم است، میتوانید limit را افزایش دهید اما هرگز آن را به مقداری بیشتر از حافظه رم قابل استفاده تنظیم نکنید، زیرا با فایلهای ورودی مناسب xz تلاش میکند تا آن مقدار حافظه را حتی با تعداد کمی رشته مصرف کند. تمام شدن حافظه یا انتقال داده به دیسک (swapping) کارایی بازگشایی را بهبود نخواهد بخشید.
- برای روشهای ممکن تعیین limit، گزینه 0limit را ببینید. تنظیم limit روی 0 مقدار limit را به مقدار پیشفرض وابسته به سامانه بازنشانی میکند.
- -M limit, --mlimit=limit, --mory=limit
- این معادل است با مشخص کردن --mlimit-compress=limit --mlimit-decompress=limit --mlimit-mt-decompress=limit.
- --0-adjust
- در صورتی که سقف مصرف حافظه بدون تعدیل تنظیماتی که بر خروجی فشرده تأثیر میگذارند برآورده نشود، یک خطا نمایش داده و خارج شود. به این معنا که این گزینه مانع از تغییر کدگذار از حالت چندرشتهای به تکرشتهای و مانع از کاهش اندازه لغتنامه LZMA2 توسط xz میشود. حتی زمانی که این گزینه استفاده شود، تعداد رشتهها ممکن است برای برآورده کردن سقف حافظه کاهش یابد زیرا این امر تأثیری بر خروجی فشرده نخواهد داشت.
- تعدیل خودکار همیشه هنگام ایجاد جریانهای خام (--rmat=raw) غیرفعال است.
- -T threads, --hreads=threads
- تعیین تعداد رشتههای کاری مورد استفاده. تنظیم threads روی مقدار ویژه 0 باعث میشود xz حداکثر به اندازه تعداد رشتههایی که پردازنده(های) سامانه پشتیبانی میکنند از رشتهها استفاده کند. اگر فایل ورودی برای چندرشتگی با تنظیمات دادهشده به اندازه کافی بزرگ نباشد، یا اگر استفاده از رشتههای بیشتر از سقف مصرف حافظه تجاوز کند، تعداد واقعی رشتهها میتواند کمتر از threads باشد.
- فشردهسازهای تکرشتهای و چندرشتهای خروجی متفاوتی تولید میکنند. فشردهساز تکرشتهای کمترین اندازه فایل را به همراه خواهد داشت، اما تنها خروجی فشردهساز چندرشتهای را میتوان با استفاده از چندین رشته بازگشایی کرد. تنظیم threads روی 1 از حالت تکرشتهای استفاده خواهد کرد. تنظیم threads روی هر مقدار دیگر، از جمله 0، از فشردهساز چندرشتهای استفاده میکند حتی اگر سامانه تنها از یک رشته سختافزاری پشتیبانی کند. (xz نسخه 5.2.x در این شرایط از حالت تکرشتهای استفاده میکرد.)
- برای استفاده از حالت چندرشتهای با تنها یک رشته، threads را روی +1 تنظیم کنید. پیشوند + روی مقادیری غیر از 1 هیچ اثری ندارد. محدودیت مصرف حافظه همچنان میتواند باعث شود xz به حالت تکرشتهای تغییر یابد مگر اینکه از --0-adjust استفاده شود. پشتیبانی از پیشوند + در xz 5.4.0 اضافه شد.
- اگر تعداد خودکار رشتهها درخواست شده باشد و هیچ محدودیتی برای مصرف حافظه مشخص نشده باشد، یک حد ملایم (soft limit) پیشفرض وابسته به سامانه برای محدود کردن احتمالی تعداد رشتهها استفاده خواهد شد. این یک حد ملایم است به این معنا که اگر تعداد رشتهها یک شود نادیده گرفته میشود، بنابراین یک حد ملایم هرگز مانع از فشردهسازی یا بازگشایی توسط xz نخواهد شد. این حد ملایم پیشفرض باعث نخواهد شد که xz از حالت چندرشتهای به حالت تکرشتهای تغییر وضعیت دهد. محدودیتهای فعال را میتوان با xz --info-memory مشاهده کرد.
- در حال حاضر تنها روش چندرشتگی تقسیم ورودی به بلوکها و فشردهسازی آنها بهطور مستقل از یکدیگر است. اندازه بلوک پیشفرض به سطح فشردهسازی بستگی دارد و میتوان آن را با گزینه 0size بازنویسی کرد.
- بازگشایی چندرشتهای تنها روی فایلهایی کار میکند که شامل چندین بلوک با اطلاعات اندازه در سرایندهای بلوک باشند. تمام فایلهای به اندازه کافی بزرگ فشردهشده در حالت چندرشتهای این شرط را برآورده میکنند، اما فایلهای فشردهشده در حالت تکرشتهای حتی اگر از 0size استفاده شده باشد این شرط را برآورده نمیکنند.
زنجیرههای سفارشی پالایه فشردهساز (Custom compressor filter chains)
یک زنجیره پالایه (filter chain) سفارشی اجازه میدهد تنظیمات فشردهسازی با جزئیات دقیق به جای اتکا به تنظیمات مرتبط با سطوح پیشتنظیم مشخص شوند. هنگامی که یک زنجیره پالایه سفارشی مشخص میشود، گزینههای پیشتنظیم (-0 ... -9 و --\xtreme) که پیشتر در خط فرمان آمدهاند فراموش میشوند. اگر یک گزینه پیشتنظیم پس از یک یا چند گزینه زنجیره پالایه سفارشی مشخص شود، پیشتنظیم جدید اعمال شده و گزینههای زنجیره پالایه سفارشی که قبلاً مشخص شده بودند فراموش میشوند.
یک زنجیره پالایه قابل مقایسه با لولهکشی (piping) در خط فرمان است. هنگام فشردهسازی، ورودی فشردهنشده وارد پالایه نخست میشود، که خروجی آن به پالایه بعدی (در صورت وجود) میرود. خروجی آخرین پالایه در فایل فشرده نوشته میشود. حداکثر تعداد پالایهها در زنجیره چهار عدد است، اما معمولاً یک زنجیره پالایه تنها یک یا دو پالایه دارد.
بسیاری از پالایهها محدودیتهایی در مورد جایگاهشان در زنجیره پالایه دارند: برخی پالایهها تنها میتوانند به عنوان آخرین پالایه در زنجیره عمل کنند، برخی تنها به عنوان پالایه غیر آخر، و برخی در هر جایگاهی در زنجیره کار میکنند. بسته به پالایه، این محدودیت یا ناشی از طراحی ذاتی پالایه است یا برای جلوگیری از مشکلات امنیتی وجود دارد.
یک زنجیره پالایه سفارشی با استفاده از یک یا چند گزینه پالایه به ترتیبی که در زنجیره پالایه مورد نظر است مشخص میشود. به این معنا که ترتیب گزینههای پالایه مهم و معنادار است! هنگام رمزگشایی جریانهای خام (--rmat=raw)، زنجیره پالایه به همان ترتیبی مشخص میشود که هنگام فشردهسازی مشخص شده بود.
پالایهها options مخصوص خود را به صورت فهرستی جداشده با کاما دریافت میکنند. کاماهای اضافی در options نادیده گرفته میشوند. هر گزینه دارای یک مقدار پیشفرض است، بنابراین تنها کافی است مواردی را که میخواهید تغییر دهید مشخص نمایید.
برای مشاهده کل زنجیره پالایه و options، از xz -vv (یعنی دو بار استفاده از --) استفاده کنید. این دستور همچنین برای مشاهده گزینههای زنجیره پالایه مورد استفاده توسط پیشتنظیمها کار میکند.
- --
- --
- افزودن پالایه LZMA1 یا LZMA2 به زنجیره پالایه. این پالایهها تنها میتوانند به عنوان آخرین پالایه در زنجیره استفاده شوند.
- پالایه LZMA1 یک پالایه قدیمی است که تقریباً صرفاً به دلیل قالب قدیمی فایل .lzma پشتیبانی میشود، قالبی که تنها از LZMA1 پشتیبانی میکند. پالایه LZMA2 نسخه بهروزشدهای از LZMA1 است تا برخی مشکلات کاربردی LZMA1 را برطرف کند. قالب .xz از LZMA2 استفاده میکند و اصلاً از LZMA1 پشتیبانی نمیکند. سرعت و نسبت فشردهسازی LZMA1 و LZMA2 عملاً یکسان است.
- پالایههای LZMA1 و LZMA2 مجموعه یکسانی از options را به اشتراک میگذارند:
- 0preset
- بازنشانی تمام options پالایه LZMA1 یا LZMA2 به preset. مورد Preset شامل یک عدد صحیح است که ممکن است با اصلاحکنندههای پیشتنظیم تکحرفی دنبال شود. این عدد صحیح میتواند از 0 تا 9 باشد، منطبق با گزینههای خط فرمان -0 ... -9. تنها اصلاحکننده پشتیبانیشده در حال حاضر e است که با --\xtreme مطابقت دارد. اگر هیچ preset مشخص نشود، مقادیر پیشفرض options برای LZMA1 یا LZMA2 از پیشتنظیم 6 گرفته میشود.
- 0size
- اندازه لغتنامه (بافر تاریخچه) size مشخص میکند که چند بایت از دادههای فشردهنشده پردازششده اخیر در حافظه نگهداری شود. الگوریتم تلاش میکند دنبالههای بایت تکراری (تطابقها) را در دادههای فشردهنشده پیدا کرده و آنها را با ارجاعاتی به دادههای موجود در لغتنامه جایگزین کند. هرچه لغتنامه بزرگتر باشد، شانس یافتن تطابق بیشتر است. بنابراین، افزایش size لغتنامه معمولاً نسبت فشردهسازی را بهبود میبخشد، اما لغتنامهای بزرگتر از اندازه فایل فشردهنشده اتلاف حافظه است.
- اندازه معمول لغتنامه size از ۶۴ KiB تا ۶۴ MiB است. حداقل آن ۴ KiB است. حداکثر برای فشردهسازی در حال حاضر ۱٫۵ GiB (۱۵۳۶ MiB) است. بخش بازگشا از لغتنامههایی تا یک بایت کمتر از ۴ GiB پشتیبانی میکند، که حداکثر مجاز برای قالبهای جریان LZMA1 و LZMA2 است.
- اندازه لغتنامه size و تطابقیاب (mf) با یکدیگر مصرف حافظه کدگذار LZMA1 یا LZMA2 را تعیین میکنند. همان اندازه (یا بزرگتر) لغتنامه size برای بازگشایی مورد نیاز است که هنگام فشردهسازی استفاده شده بود، بنابراین میزان مصرف حافظه رمزگشا بر اساس اندازه لغتنامه استفادهشده هنگام فشردهسازی تعیین میشود. سرایندهای .xz اندازه لغتنامه size را به صورت 2^n یا 2^n + 2^(n-1) ذخیره میکنند، بنابراین این sizes تا حدی برای فشردهسازی ترجیح داده میشوند. سایر sizes هنگام ذخیره در سرایندهای .xz به سمت بالا گرد خواهند شد.
- 0lc
- تعیین تعداد بیتهای زمینه لفظی (literal context bits). حداقل ۰ و حداکثر ۴ است؛ مقدار پیشفرض ۳ میباشد. علاوه بر این، مجموع lc و lp نباید از ۴ تجاوز کند.
- تمام بایتهایی که نمیتوانند به عنوان تطابق کدگذاری شوند، به صورت مقادیر لفظی (literals) کدگذاری میشوند. به این معنا که مقادیر لفظی صرفاً بایتهای ۸ بیتی هستند که یکییکی کدگذاری میشوند.
- کدگذاری مقادیر لفظی این فرض را در نظر میگیرد که بالاترین بیتهای lc از بایت فشردهنشده قبلی با بایت بعدی همبستگی دارند. برای مثال، در یک متن انگلیسی معمول، یک حرف بزرگ اغلب با یک حرف کوچک دنبال میشود، و یک حرف کوچک معمولاً با حرف کوچک دیگری همراه است. در مجموعه نویسههای US-ASCII، سه بیت بالاتر برای حروف بزرگ 010 و برای حروف کوچک 011 است. هنگامی که lc حداقل ۳ باشد، کدگذاری مقادیر لفظی میتواند از این ویژگی در دادههای فشردهنشده بهره ببرد.
- مقدار پیشفرض (3) معمولاً مناسب است. اگر خواهان حداکثر فشردهسازی هستید، lc=4 را آزمایش کنید. گاهی این کار اندکی کمک میکند، و گاهی فشردهسازی را بدتر میسازد. اگر آن را بدتر کرد، lc=2 را نیز امتحان کنید.
- 0lp
- تعیین تعداد بیتهای موقعیت لفظی (literal position bits). حداقل ۰ و حداکثر ۴ است؛ مقدار پیشفرض ۰ است.
- مقدار Lp بر نوع تراز فرضی در دادههای فشردهنشده هنگام کدگذاری مقادیر لفظی تأثیر میگذارد. برای اطلاعات بیشتر درباره تراز، pb را در زیر ببینید.
- 0pb
- تعیین تعداد بیتهای موقعیت (position bits). حداقل ۰ و حداکثر ۴ است؛ مقدار پیشفرض ۲ است.
- مقدار Pb بر نوع تراز فرضی در دادههای فشردهنشده بهطور کلی تأثیر میگذارد. مقدار پیشفرض به معنای تراز چهار بایتی است (2^pb=2^2=4)، که معمولاً در صورت نبود حدس بهتر، انتخاب خوبی است.
- هنگامی که تراز مشخص است، تنظیم متناسب pb میتواند اندازه فایل را اندکی کاهش دهد. برای مثال، در فایلهای متنی با تراز یک بایتی (US-ASCII، ISO-8859-*، UTF-8)، تنظیم pb=0 میتواند فشردهسازی را اندکی بهبود بخشد. برای متن UTF-16، تنظیم pb=1 انتخاب مناسبی است. اگر تراز یک عدد فرد مانند ۳ بایت باشد، pb=0 ممکن است بهترین انتخاب باشد.
- اگرچه تراز فرضی را میتوان با pb و lp تنظیم کرد، LZMA1 و LZMA2 همچنان کمی تراز ۱۶ بایتی را ترجیح میدهند. شاید ارزش داشته باشد هنگام طراحی قالبهای فایلی که احتمالاً اغلب با LZMA1 یا LZMA2 فشرده میشوند، این نکته در نظر گرفته شود.
- 0mf
- تطابقیاب (match finder) تأثیر عمدهای بر سرعت کدگذار، مصرف حافظه و نسبت فشردهسازی دارد. معمولاً تطابقیابهای زنجیره هش (Hash Chain) سریعتر از تطابقیابهای درخت دودویی (Binary Tree) هستند. مقدار پیشفرض به preset بستگی دارد: سطح 0 از hc3 استفاده میکند، سطوح ۱–۳ از hc4، و بقیه از bt4 استفاده مینمایند.
- تطابقیابهای زیر پشتیبانی میشوند. فرمولهای مصرف حافظه زیر تقریبهای کلی هستند که در شرایطی که dict توانی از دو باشد بیشترین نزدیکی را به واقعیت دارند.
- hc3
- زنجیره هش
با هشینگ ۲
و ۳ بایتی
حداقل مقدار برای nice: 3
میزان مصرف حافظه:
dict * 7.5 (اگر dict <= 16 MiB باشد)؛
dict * 5.5 + 64 MiB (اگر dict > 16 MiB باشد) - hc4
- زنجیره هش
با هشینگ ۲،
۳ و ۴ بایتی
حداقل مقدار برای nice: 4
میزان مصرف حافظه:
dict * 7.5 (اگر dict <= 32 MiB باشد)؛
dict * 6.5 (اگر dict > 32 MiB باشد) - bt2
- درخت
دودویی با
هشینگ ۲
بایتی
حداقل مقدار برای nice: 2
میزان مصرف حافظه: dict * 9.5 - bt3
- درخت
دودویی با
هشینگ ۲ و ۳
بایتی
حداقل مقدار برای nice: 3
میزان مصرف حافظه:
dict * 11.5 (اگر dict <= 16 MiB باشد)؛
dict * 9.5 + 64 MiB (اگر dict > 16 MiB باشد) - bt4
- درخت
دودویی با
هشینگ ۲، ۳
و ۴ بایتی
حداقل مقدار برای nice: 4
میزان مصرف حافظه:
dict * 11.5 (اگر dict <= 32 MiB باشد)؛
dict * 10.5 (اگر dict > 32 MiB باشد)
- 0mode
- حالت فشردهسازی mode روش تجزیه و تحلیل دادههای تولیدشده توسط تطابقیاب را مشخص میکند. حالتهای modes پشتیبانیشده عبارتند از fast و normal. مقدار پیشفرض fast برای presets ۰–۳ و normal برای presets ۴–۹ است.
- معمولاً fast با تطابقیابهای زنجیره هش و normal با تطابقیابهای درخت دودویی استفاده میشود. این همان کاری است که presets انجام میدهند.
- 0nice
- مشخص میکند چه طولی برای یک تطابق، طول مناسب (nice) در نظر گرفته شود. به محض اینکه تطابقی به اندازه حداقل nice بایت پیدا شود، الگوریتم جستجو برای تطابقهای احتمالاً بهتر را متوقف میکند.
- مقدار Nice میتواند ۲–۲۷۳ بایت باشد. مقادیر بالاتر تمایل دارند نسبت فشردهسازی بهتری را به قیمت کاهش سرعت ارائه دهند. مقدار پیشفرض به preset بستگی دارد.
- 0depth
- تعیین حداکثر عمق جستجو در تطابقیاب. مقدار پیشفرض مقدار ویژه 0 است که باعث میشود فشردهساز یک depth معقول را بر اساس mf و nice تعیین کند.
- مقدار معقول depth برای زنجیرههای هش ۴–۱۰۰ و برای درختهای دودویی ۱۶–۱۰۰۰ است. استفاده از مقادیر بسیار بالا برای depth میتواند کدگذار را در پردازش برخی فایلها فوقالعاده کُند کند. از تنظیم depth بیش از ۱۰۰۰ خودداری کنید مگر اینکه آماده باشید در صورتی که فشردهسازی بیش از حد طول کشید آن را قطع کنید.
- هنگام رمزگشایی جریانهای خام (--rmat=raw)، پالایه LZMA2 تنها به اندازه لغتنامه size نیاز دارد. پالایه LZMA1 همچنین به lc، lp و pb احتیاج دارد.
- --6[=options]
- --rm[=options]
- --rmthumb[=options]
- --rm64[=options]
- --owerpc[=options]
- --ia64[=options]
- --arc[=options]
- افزودن یک پالایه انشعاب/فراخوانی/پرش (BCJ) به زنجیره پالایه. این پالایهها تنها میتوانند به عنوان پالایه غیر آخر در زنجیره پالایه استفاده شوند.
- یک پالایه BCJ آدرسهای نسبی در کد ماشین را به معادلهای مطلق آنها تبدیل میکند. این کار اندازه دادهها را تغییر نمیدهد اما افزونگی (redundancy) را افزایش میدهد، که میتواند به LZMA2 کمک کند تا فایل .xz تولیدی بین ۰ تا ۱۵ % کوچکتر شود. پالایههای BCJ همیشه برگشتپذیر هستند، بنابراین استفاده از پالایه BCJ برای نوع داده نادرست باعث هیچگونه از دست رفتن دادهها نمیشود، اگرچه ممکن است نسبت فشردهسازی را اندکی بدتر کند. پالایههای BCJ بسیار سریع هستند و مقدار ناچیزی از حافظه را مصرف میکنند.
- این پالایههای BCJ مشکلات شناختهشدهای در رابطه با نسبت فشردهسازی دارند:
- برخی انواع فایلهای حاوی کد اجرایی (برای مثال، فایلهای شیء، کتابخانههای ایستا و ماژولهای کرنل لینوکس) آدرسهای موجود در دستورالعملها را با مقادیر پرکننده پر کردهاند. این پالایههای BCJ همچنان تبدیل آدرس را انجام میدهند که باعث بدتر شدن فشردهسازی در این فایلها خواهد شد.
- اگر یک پالایه BCJ روی یک آرشیو اعمال شود، ممکن است نسبت فشردهسازی را نسبت به عدم استفاده از پالایه BCJ بدتر کند. برای مثال، اگر فایلهای اجرایی مشابه یا حتی یکسانی وجود داشته باشند، فیلتر کردن احتمالاً فایلها را کمتر شبیه به یکدیگر میکند و بنابراین فشردهسازی بدتر میشود. محتوای فایلهای غیر اجرایی در همان آرشیو نیز میتواند اهمیت داشته باشد. در عمل فرد باید با و بدون پالایه BCJ آزمایش کند تا ببیند در هر شرایط کدام بهتر است.
- مجموعه دستورالعملهای مختلف ترازهای متفاوتی دارند: فایل اجرایی باید با مضربی از این مقدار در دادههای ورودی تراز شده باشد تا پالایه کار کند.
| Filter | Alignment | Notes |
| x86 | 1 | 32-bit or 64-bit x86 |
| ARM | 4 | |
| ARM-Thumb | 2 | |
| ARM64 | 4 | 4096-byte alignment is best |
| PowerPC | 4 | Big endian only |
| IA-64 | 16 | Itanium |
| SPARC | 4 |
- از آنجا که دادههای پالایششده با BCJ معمولاً با LZMA2 فشرده میشوند، در صورتی که گزینههای LZMA2 طوری تنظیم شوند که با تراز پالایه BCJ انتخابشده مطابقت داشته باشند، ممکن است نسبت فشردهسازی اندکی بهبود یابد. برای مثال، با پالایه IA-64، خوب است که pb=4 یا حتی pb=4,lp=4,lc=0 را در LZMA2 تنظیم کنید (2^4=16). پالایه x86 یک استثنا است؛ هنگام فشردهسازی فایلهای اجرایی x86 معمولاً بهتر است به تراز چهار بایتی پیشفرض LZMA2 پایبند بمانید.
- تمام پالایههای BCJ از گزینههای options یکسانی پشتیبانی میکنند:
- 0offset
- تعیین offset آغازین که هنگام تبدیل بین آدرسهای نسبی و مطلق استفاده میشود. مقدار offset باید مضربی از تراز پالایه باشد (جدول بالا را ببینید). مقدار پیشفرض صفر است. در عمل، مقدار پیشفرض مناسب است؛ تعیین یک offset سفارشی تقریباً هرگز مفید نیست.
- --elta[=options]
- افزودن پالایه دلتا (Delta) به زنجیره پالایه. پالایه دلتا تنها میتواند به عنوان پالایه غیر آخر در زنجیره پالایه استفاده شود.
- در حال حاضر تنها محاسبه دلتای بایتی ساده پشتیبانی میشود. این گزینه میتواند هنگام فشردهسازی مواردی مانند تصاویر بیتمپ فشردهنشده یا صدای PCM فشردهنشده مفید باشد. با این حال، الگوریتمهای با کاربرد خاص ممکن است نتایج بسیار بهتری نسبت به Delta + LZMA2 ارائه دهند. این امر بهویژه در مورد صدا صادق است، که برای مثال با flac(1) سریعتر و بهتر فشرده میشود.
- گزینههای options پشتیبانیشده:
- 0distance
- تعیین distance محاسبه دلتا به بایت. مقدار distance باید ۱–۲۵۶ باشد. مقدار پیشفرض 1 است.
- برای مثال، با dist=2 و ورودی هشت بایتی A1 B1 A2 B3 A3 B5 A4 B7، خروجی برابر با A1 B1 01 02 01 02 01 02 خواهد بود.
سایر گزینهها (Other options)
- -q, --quiet
- فرونشاندن هشدارها و پیامها. این گزینه را دو بار مشخص کنید تا خطاها نیز فرونشانده شوند. این گزینه هیچ تأثیری بر وضعیت خروج ندارد. به این معنا که حتی اگر هشداری فرونشانده شده باشد، همچنان از وضعیت خروج نشاندهنده هشدار استفاده میشود.
- -v, --
- حالت پرجزئیات. اگر خطای استاندارد به یک ترمینال متصل باشد، xz یک نشانگر پیشرفت را نمایش خواهد داد. مشخص کردن دو بار -- خروجی پرجزئیاتتری ارائه میدهد.
- نشانگر پیشرفت اطلاعات زیر را نشان میدهد:
- درصد تکمیل در صورتی که اندازه فایل ورودی مشخص باشد نمایش داده میشود. به این معنا که درصد پیشرفت در لولهها (pipes) قابل نمایش نیست.
- مقدار دادههای فشرده تولیدشده (در فشردهسازی) یا مصرفشده (در بازگشایی).
- مقدار دادههای فشردهنشده مصرفشده (در فشردهسازی) یا تولیدشده (در بازگشایی).
- نسبت فشردهسازی، که از تقسیم مقدار دادههای فشرده پردازششده تاکنون بر مقدار دادههای فشردهنشده پردازششده تاکنون به دست میآید.
- سرعت فشردهسازی یا بازگشایی. این سرعت به عنوان مقدار دادههای فشردهنشده مصرفشده (فشردهسازی) یا تولیدشده (بازگشایی) در ثانیه اندازهگیری میشود. این مقدار پس از گذشت چند ثانیه از شروع پردازش فایل توسط xz نمایش داده میشود.
- زمان سپریشده در قالب M:SS یا H:MM:SS.
- زمان تخمینی باقیمانده تنها زمانی نمایش داده میشود که اندازه فایل ورودی مشخص باشد و چند ثانیه از شروع پردازش فایل توسط xz گذشته باشد. زمان در قالبی با دقت کمتر نمایش داده میشود که هرگز شامل دو نقطه نیست، برای مثال 2 min 30 s.
- هنگامی که خطای استاندارد ترمینال نباشد، -- باعث میشود xz نام فایل، اندازه فشرده، اندازه فشردهنشده، نسبت فشردهسازی و احتمالاً سرعت و زمان سپریشده را پس از فشردهسازی یا بازگشایی فایل در یک خط در خطای استاندارد چاپ کند. سرعت و زمان سپریشده تنها در صورتی گنجانده میشوند که عملیات حداقل چند ثانیه طول کشیده باشد. اگر عملیات کامل نشود، برای مثال به دلیل وقفه توسط کاربر، درصد تکمیل نیز در صورت مشخص بودن اندازه فایل ورودی چاپ میشود.
- -Q, --0-warn
- وضعیت خروج را روی 2 تنظیم نکن حتی اگر شرایطی مستحق هشدار شناسایی شده باشد. این گزینه بر سطح پرجزئیاتی تأثیری ندارد، بنابراین هر دو گزینه --quiet و --0-warn باید استفاده شوند تا هشدارها نمایش داده نشوند و وضعیت خروج تغییر نکند.
- --obot
- چاپ پیامها در قالبی خوانا برای ماشین. این گزینه برای سهولت در نوشتن رابطهایی که میخواهند از xz به جای liblzma استفاده کنند در نظر گرفته شده است، که ممکن است در اسکریپتهای مختلف کاربرد داشته باشد. خروجی با فعال بودن این گزینه طوری طراحی شده که در نسخههای مختلف xz پایدار بماند. برای جزئیات بیشتر به بخش حالت ربات (ROBOT MODE) مراجعه کنید.
- --info-memory
- نمایش مقدار حافظه فیزیکی (RAM) و تعداد رشتههای پردازندهای که xz فکر میکند سامانه در اختیار دارد و محدودیتهای مصرف حافظه برای فشردهسازی و بازگشایی در قالبی خوانا برای انسان، و خروج موفقیتآمیز.
- -h, --
- نمایش پیام کمکی توصیفکننده گزینههای پرکاربردتر، و خروج موفقیتآمیز.
- -H, --
- نمایش پیام کمکی توصیفکننده تمام ویژگیهای xz، و خروج موفقیتآمیز.
- -V, --
- نمایش شماره نسخه xz و liblzma در قالبی خوانا برای انسان. برای دریافت خروجی قابل تجزیه توسط ماشین، --obot را قبل از -- مشخص کنید.
حالت ربات (ROBOT MODE)
حالت ربات با گزینه --obot فعال میشود. این حالت خروجی xz را برای تجزیه توسط برنامههای دیگر آسانتر میکند. در حال حاضر --obot تنها همراه با گزینههای --، --info-memory و -- پشتیبانی میشود. این قابلیت در آینده برای فشردهسازی و بازگشایی نیز پشتیبانی خواهد شد.
نسخه (Version)
دستور xz --obot -- شماره نسخه xz و liblzma را در قالب زیر چاپ میکند:
0ON=XYYYZZZS
0BLZMA_VERSION=XYYYZZZS
- X
- نسخه اصلی (Major).
- YYY
- نسخه فرعی (Minor). اعداد زوج پایدار هستند. اعداد فرد نسخههای آلفا یا بتا میباشند.
- ZZZ
- سطح وصله (patch level) برای انتشارهای پایدار یا صرفاً یک شمارنده برای نسخههای توسعه.
- S
- پایداری. 0 نشاندهنده آلفا، 1 بتا و 2 پایدار است. مقدار S زمانی که YYY زوج باشد همیشه باید ۲ باشد.
اگر xz و liblzma از یک انتشار واحد XZ Utils باشند، مقادیر XYYYZZZS در هر دو خط یکسان هستند.
مثالها: نسخه 4.999.9beta برابر با 49990091 و نسخه 5.0.0 برابر با 50000002 است.
اطلاعات محدودیت حافظه (Memory limit information)
دستور xz --obot --info-memory یک سطر منفرد با ستونهایی جداشده با تب چاپ میکند:
- 1.
- کل حافظه فیزیکی (RAM) به بایت.
- 2.
- سقف مصرف حافظه برای فشردهسازی به بایت (--mlimit-compress). مقدار ویژه 0 نشاندهنده تنظیم پیشفرض است که برای حالت تکرشتهای همان بدون محدودیت است.
- 3.
- سقف مصرف حافظه برای بازگشایی به بایت (--mlimit-decompress). مقدار ویژه 0 نشاندهنده تنظیم پیشفرض است که برای حالت تکرشتهای همان بدون محدودیت است.
- 4.
- از xz 5.3.4alpha: میزان مصرف حافظه برای بازگشایی چندرشتهای به بایت (--mlimit-mt-decompress). این مقدار هرگز صفر نیست زیرا در صورتی که هیچ محدودیتی به صراحت مشخص نشده باشد از مقدار پیشفرض وابسته به سامانه که در ستون ۵ نشان داده شده استفاده میشود. این مقدار همچنین هرگز بزرگتر از مقدار ستون ۳ نیست حتی اگر مقدار بزرگتری با --mlimit-mt-decompress مشخص شده باشد.
- 5.
- از xz 5.3.4alpha: یک سقف مصرف حافظه پیشفرض وابسته به سامانه که برای محدود کردن تعداد رشتهها هنگام فشردهسازی با تعداد رشته خودکار (-- hreads=0) و بدون محدودیت مشخصشده برای مصرف حافظه (--mlimit-compress) استفاده میشود. این مقدار همچنین به عنوان مقدار پیشفرض برای --mlimit-mt-decompress استفاده میشود.
- 6.
- از xz 5.3.4alpha: تعداد رشتههای پردازنده در دسترس.
در آینده، خروجی xz --obot --info-memory ممکن است ستونهای بیشتری داشته باشد، اما هرگز بیش از یک خط نخواهد بود.
حالت فهرست (List mode)
دستور xz --obot -- از خروجی جداشده با تب استفاده میکند. ستون اول هر سطر دارای رشتهای است که نوع اطلاعات موجود در آن سطر را مشخص میکند:
- name
- این همیشه اولین سطر هنگام شروع فهرست کردن یک فایل است. ستون دوم در این سطر، نام فایل است.
- file
- این سطر حاوی اطلاعات کلی درباره فایل .xz است. این سطر همیشه پس از سطر name چاپ میشود.
- stream
- این نوع سطر تنها زمانی استفاده میشود که -- مشخص شده باشد. به تعداد جریانهای موجود در فایل .xz سطرهای stream وجود دارد.
- block
- این نوع سطر تنها زمانی استفاده میشود که -- مشخص شده باشد. به تعداد بلوکهای موجود در فایل .xz سطرهای block وجود دارد. سطرهای block پس از تمام سطرهای stream نمایش داده میشوند؛ انواع مختلف سطرها با یکدیگر در هم نمیآمیزند.
- summary
- این نوع سطر تنها زمانی استفاده میشود که -- دو بار مشخص شده باشد. این سطر پس از تمام سطرهای block چاپ میشود. همانند سطر file، سطر summary شامل اطلاعات کلی درباره فایل .xz است.
- totals
- این سطر همیشه آخرین سطر خروجی فهرست است. این سطر تعداد و اندازههای کلی را نشان میدهد.
ستونهای سطرهای file:
- 2.
- تعداد جریانها در فایل
- 3.
- تعداد کل بلوکها در جریان(ها)
- 4.
- اندازه فشرده فایل
- 5.
- اندازه فشردهنشده فایل
- 6.
- نسبت فشردهسازی، برای مثال 0.123. اگر نسبت بیش از ۹٫۹۹۹ باشد، سه خط تیره (----) به جای نسبت نمایش داده میشود.
- 7.
- فهرست جداشده با کاما از نامهای بررسی یکپارچگی. رشتههای زیر برای انواع بررسی شناختهشده استفاده میشوند: None، CRC32، CRC64 و SHA-256. برای انواع بررسی ناشناخته، 0N استفاده میشود، که در آن N شناسه بررسی به صورت یک عدد دهدهی (یک یا دو رقم) است.
- 8.
- اندازه کل فاصلهگذاری جریان (stream padding) در فایل
ستونهای سطرهای stream:
- 2.
- شماره جریان (جریان اول ۱ است)
- 3.
- تعداد بلوکها در جریان
- 4.
- آفست آغازین فشرده
- 5.
- آفست آغازین فشردهنشده
- 6.
- اندازه فشرده (شامل فاصلهگذاری جریان نمیشود)
- 7.
- اندازه فشردهنشده
- 8.
- نسبت فشردهسازی
- 9.
- نام بررسی یکپارچگی
- 10.
- اندازه فاصلهگذاری جریان
ستونهای سطرهای block:
- 2.
- شماره جریان حاوی این بلوک
- 3.
- شماره بلوک نسبت به ابتدای جریان (بلوک اول ۱ است)
- 4.
- شماره بلوک نسبت به ابتدای فایل
- 5.
- آفست آغازین فشرده نسبت به ابتدای فایل
- 6.
- آفست آغازین فشردهنشده نسبت به ابتدای فایل
- 7.
- اندازه کل فشرده بلوک (شامل سرایندها)
- 8.
- اندازه فشردهنشده
- 9.
- نسبت فشردهسازی
- 10.
- نام بررسی یکپارچگی
اگر -- دو بار مشخص شده باشد، ستونهای اضافی در سطرهای block گنجانده میشوند. این موارد با یک بار -- نمایش داده نمیشوند، زیرا دریافت این اطلاعات نیازمند جستجوهای فراوان روی دیسک است و میتواند کُند باشد:
- 11.
- مقدار بررسی یکپارچگی در مبنای شانزده (هگزادسیمال)
- 12.
- اندازه سرایند بلوک
- 13.
- پرچمهای بلوک: c نشان میدهد که اندازه فشرده وجود دارد، و u نشان میدهد که اندازه فشردهنشده وجود دارد. اگر پرچم تنظیم نشده باشد، یک خط تیره (-) به جای آن نشان داده میشود تا طول رشته ثابت بماند. پرچمهای جدید ممکن است در آینده به انتهای رشته اضافه شوند.
- 14.
- اندازه دادههای فشرده واقعی در بلوک (این مقدار شامل سرایند بلوک، فاصلهگذاری بلوک و فیلدهای بررسی نمیشود)
- 15.
- مقدار حافظه (به بایت) مورد نیاز برای بازگشایی این بلوک با این نسخه از xz
- 16.
- زنجیره پالایه. توجه داشته باشید که بیشتر گزینههای استفادهشده در زمان فشردهسازی قابل بازیابی نیستند، زیرا تنها گزینههایی که برای بازگشایی مورد نیاز هستند در سرایندهای .xz ذخیره میشوند.
ستونهای سطرهای summary:
- 2.
- مقدار حافظه (به بایت) مورد نیاز برای بازگشایی این فایل با این نسخه از xz
- 3.
- yes یا no که نشان میدهد آیا در تمام سرایندهای بلوک هر دو اندازه فشرده و فشردهنشده ذخیره شدهاند یا خیر
از xz 5.1.2alpha:
- 4.
- حداقل نسخه xz مورد نیاز برای بازگشایی فایل
ستونهای سطر totals:
- 2.
- تعداد جریانها
- 3.
- تعداد بلوکها
- 4.
- اندازه فشرده
- 5.
- اندازه فشردهنشده
- 6.
- میانگین نسبت فشردهسازی
- 7.
- فهرست جداشده با کاما از نامهای بررسی یکپارچگی که در فایلها وجود داشتند
- 8.
- اندازه فاصلهگذاری جریان
- 9.
- تعداد فایلها. این مورد برای حفظ ترتیب ستونهای پیشین همانند سطرهای file در اینجا قرار گرفته است.
اگر -- دو بار مشخص شده باشد، ستونهای اضافی در سطر totals گنجانده میشوند:
- 10.
- حداکثر مقدار حافظه (به بایت) مورد نیاز برای بازگشایی فایلها با این نسخه از xz
- 11.
- yes یا no که نشان میدهد آیا در تمام سرایندهای بلوک هر دو اندازه فشرده و فشردهنشده ذخیره شدهاند یا خیر
از xz 5.1.2alpha:
- 12.
- حداقل نسخه xz مورد نیاز برای بازگشایی فایل
نسخههای آینده ممکن است انواع سطرهای جدیدی اضافه کنند و ستونهای جدیدی میتوانند به انواع سطرهای موجود اضافه شوند، اما ستونهای موجود تغییر نخواهند کرد.
- 0
- همهچیز مرتب است و عملیات با موفقیت انجام شد.
- 1
- خطایی رخ داد.
- 2
- موردی شایسته هشدار رخ داد، اما هیچ خطای واقعی اتفاق نیفتاد.
پیامهای اطلاعرسانی (که هشدار یا خطا نیستند) چاپشده در خطای استاندارد بر وضعیت خروج تأثیری ندارند.
متغیرهای محیطی (ENVIRONMENT)
دستور xz فهرستهای جداشده با فاصله از گزینهها را از متغیرهای محیطی XZ_DEFAULTS و XZ_OPT، به همین ترتیب، پیش از تجزیه گزینهها از خط فرمان تجزیه میکند. توجه داشته باشید که تنها گزینهها از متغیرهای محیطی استخراج میشوند؛ تمام موارد غیر گزینه بی کموکاست نادیده گرفته میشوند. تجزیه با استفاده از getopt_long(3) انجام میشود که برای آرگومانهای خط فرمان نیز به کار میرود.
- XZ_DEFAULTS
- گزینههای پیشفرض کاربر یا سامانه. معمولاً این متغیر در اسکریپت راهاندازی شل تنظیم میشود تا محدودکننده مصرف حافظه xz بهطور پیشفرض فعال شود. به جز اسکریپتهای راهاندازی شل و موارد خاص مشابه، اسکریپتها هرگز نباید XZ_DEFAULTS را مقداردهی یا پاک کنند.
- XZ_OPT
- این متغیر برای ارسال گزینهها به xz است در زمانی که امکان تعیین مستقیم گزینهها در خط فرمان xz وجود ندارد. این حالت زمانی است که xz توسط یک اسکریپت یا ابزار دیگر، مانند GNU 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 (LZMA UTILS COMPATIBILITY)
نحو خط فرمان xz عملاً یک ابرمجموعه از lzma، unlzma و lzcat در نسخه 4.32.x از LZMA Utils است. در بیشتر موارد، امکان جایگزینی LZMA Utils با XZ Utils بدون شکستن اسکریپتهای موجود وجود دارد. با این حال، برخی ناسازگاریها وجود دارند که ممکن است گاهی مشکلساز شوند.
سطوح پیشتنظیم فشردهسازی (Compression preset levels)
شمارهگذاری سطوح پیشتنظیم فشردهسازی در xz و LZMA Utils یکسان نیست. مهمترین تفاوت نحوه نگاشت اندازههای لغتنامه به پیشتنظیمهای مختلف است. اندازه لغتنامه تقریباً برابر با میزان مصرف حافظه بازگشا است.
| Level | xz | LZMA Utils |
| -0 | 256 KiB | N/A |
| -1 | 1 MiB | 64 KiB |
| -2 | 2 MiB | 1 MiB |
| -3 | 4 MiB | 512 KiB |
| -4 | 4 MiB | 1 MiB |
| -5 | 8 MiB | 2 MiB |
| -6 | 8 MiB | 4 MiB |
| -7 | 16 MiB | 8 MiB |
| -8 | 32 MiB | 16 MiB |
| -9 | 64 MiB | 32 MiB |
تفاوتهای اندازه لغتنامه بر میزان مصرف حافظه فشردهساز نیز تأثیر میگذارد، اما تفاوتهای دیگری نیز میان LZMA Utils و XZ Utils وجود دارد که این اختلاف را باز هم بیشتر میکند:
| Level | xz | LZMA Utils 4.32.x |
| -0 | 3 MiB | N/A |
| -1 | 9 MiB | 2 MiB |
| -2 | 17 MiB | 12 MiB |
| -3 | 32 MiB | 12 MiB |
| -4 | 48 MiB | 16 MiB |
| -5 | 94 MiB | 26 MiB |
| -6 | 94 MiB | 45 MiB |
| -7 | 186 MiB | 83 MiB |
| -8 | 370 MiB | 159 MiB |
| -9 | 674 MiB | 311 MiB |
سطح پیشتنظیم پیشفرض در LZMA Utils برابر با -7 است در حالی که در XZ Utils برابر با -6 میباشد، بنابراین هر دو بهطور پیشفرض از یک لغتنامه ۸ MiB استفاده میکنند.
فایلهای .lzma جریانی در برابر غیرجریانی (Streamed vs. non-streamed .lzma files)
اندازه فشردهنشده فایل میتواند در سرایند .lzma ذخیره شود. مجموعه LZMA Utils هنگام فشردهسازی فایلهای معمولی این کار را انجام میدهد. روش جایگزین این است که اندازه فشردهنشده ناشناخته علامتگذاری شود و از نشانگر پایان بار داده (end-of-payload marker) برای تعیین جایی که بازگشا باید متوقف شود استفاده گردد. مجموعه LZMA Utils زمانی که اندازه فشردهنشده مشخص نباشد از این روش استفاده میکند، که برای مثال در لولهها (pipes) صادق است.
دستور xz از بازگشایی فایلهای .lzma با نشانگر یا بدون نشانگر پایان بار داده پشتیبانی میکند، اما تمام فایلهای .lzma ایجادشده توسط xz از نشانگر پایان بار داده استفاده خواهند کرد و اندازه فشردهنشده در سرایند .lzma ناشناخته علامتگذاری خواهد شد. این امر ممکن است در برخی شرایط نادر مشکلساز شود. برای مثال، یک بازگشای .lzma در یک دستگاه تعبیهشده ممکن است تنها با فایلهایی کار کند که اندازه فشردهنشده آنها مشخص باشد. اگر با این مشکل مواجه شدید، باید از LZMA Utils یا LZMA SDK برای ایجاد فایلهای .lzma با اندازه فشردهنشده مشخص استفاده کنید.
فایلهای .lzma پشتیبانینشده (Unsupported .lzma files)
قالب .lzma مقادیر lc را تا ۸ و مقادیر lp را تا ۴ مجاز میداند. مجموعه LZMA Utils میتواند فایلهایی با هر مقدار lc و lp را بازگشایی کند، اما همیشه فایلهایی با lc=3 و lp=0 ایجاد مینماید. ایجاد فایلهایی با سایر مقادیر lc و lp با xz و LZMA SDK امکانپذیر است.
پیادهسازی پالایه LZMA1 در liblzma نیازمند آن است که مجموع lc و lp نباید از ۴ تجاوز کند. بنابراین فایلهای .lzma که از این محدودیت تجاوز میکنند نمیتوانند با xz بازگشایی شوند.
مجموعه LZMA Utils تنها فایلهای .lzma را ایجاد میکند که اندازه لغتنامه آنها 2^n (توانی از ۲) باشد، اما فایلهایی با هر اندازه لغتنامه را میپذیرد. کتابخانه liblzma تنها فایلهای .lzma را میپذیرد که اندازه لغتنامه آنها 2^n یا 2^n + 2^(n-1) باشد. این کار برای کاهش موارد مثبت کاذب هنگام تشخیص فایلهای .lzma است.
این محدودیتها در عمل نباید مشکلی ایجاد کنند، چرا که عملاً تمام فایلهای .lzma با تنظیماتی فشرده شدهاند که liblzma آنها را میپذیرد.
زباله پایانی (Trailing garbage)
هنگام بازگشایی، LZMA Utils بدون هیچ پیامی تمام دادههای بعد از نخستین جریان .lzma را نادیده میگیرد. در بیشتر شرایط، این یک باگ است. این همچنین بدان معنی است که LZMA Utils از بازگشایی فایلهای الحاقشده .lzma پشتیبانی نمیکند.
اگر دادهای پس از نخستین جریان .lzma باقی بماند، xz فایل را خراب تلقی میکند مگر اینکه از --ngle-stream استفاده شده باشد. این رفتار ممکن است اسکریپتهای قدیمی و نادری را که فرض کرده بودند زباله پایانی نادیده گرفته میشود، دچار اختلال کند.
نکات (NOTES)
خروجی فشردهشده ممکن است متفاوت باشد (Compressed output may vary)
خروجی فشرده دقیق تولیدشده از یک فایل ورودی فشردهنشده یکسان ممکن است بین نسخههای مختلف XZ Utils حتی با وجود یکسان بودن گزینههای فشردهسازی متفاوت باشد. دلیل این امر آن است که کدگذار میتواند بدون تأثیر بر قالب فایل بهبود یابد (فشردهسازی سریعتر یا بهتر). خروجی حتی میتواند بین ساختهای (builds) مختلف از یک نسخه واحد XZ Utils، در صورت استفاده از گزینههای ساخت متفاوت، متغیر باشد.
مطلب فوق بدان معناست که پس از پیادهسازی گزینه --syncable، فایلهای حاصل لزوماً قابلیت rsync نخواهند داشت مگر اینکه هر دو فایل قدیمی و جدید با نسخه یکسانی از xz فشرده شده باشند. این مشکل در صورتی قابل حل است که بخشی از پیادهسازی کدگذار ثابت (freeze) نگه داشته شود تا خروجی سازگار با rsync در نسخههای مختلف xz پایدار بماند.
بازگشاهای تعبیهشده .xz (Embedded .xz decompressors)
پیادهسازیهای بازگشای تعبیهشده .xz مانند XZ Embedded لزوماً از فایلهای ایجادشده با انواع بررسی یکپارچگی check دیگری غیر از none و crc32 پشتیبانی نمیکنند. از آنجا که مقدار پیشفرض --heck=crc64 است، هنگام ایجاد فایل برای سامانههای تعبیهشده (embedded) باید از --heck=none یا --heck=crc32 استفاده کنید.
خارج از سامانههای تعبیهشده، تمام بازگشاهای قالب .xz از تمام انواع check پشتیبانی میکنند، یا دستکم قادرند فایل را بدون راستیآزمایی بررسی یکپارچگی در صورتی که آن نوع خاص check پشتیبانی نشود، بازگشایی کنند.
مجموعه XZ Embedded از پالایههای BCJ پشتیبانی میکند، اما تنها با آفست آغازین پیشفرض.
مثالها (EXAMPLES)
پایهای (Basics)
فشردهسازی فایل 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
فشردهسازی موازی چندین فایل (Parallel compression of many files)
در سامانههای 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) برای کنترل میزان موازیسازی استفاده میشود.
حالت ربات (Robot mode)
محاسبه مجموع بایتهای ذخیرهشده پس از فشردهسازی چندین فایل:
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 "Your xz is too old." 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
زنجیرههای پالایه سفارشی فشردهساز (Custom compressor filter chains)
سادهترین کاربرد زنجیرههای پالایه سفارشی، شخصیسازی یک پیشتنظیم LZMA2 است. این امر میتواند مفید باشد، زیرا پیشتنظیمها تنها زیرمجموعهای از ترکیبات بالقوه مفید تنظیمات فشردهسازی را پوشش میدهند.
ستونهای CompCPU در جدولهای موجود در توضیحات گزینههای -0 ... -9 و --extreme هنگام سفارشیسازی پیشتنظیمهای LZMA2 مفید هستند. در اینجا بخشهای مربوطه گردآوریشده از آن دو جدول آمده است:
| Preset | CompCPU |
| -0 | 0 |
| -1 | 1 |
| -2 | 2 |
| -3 | 3 |
| -4 | 4 |
| -5 | 5 |
| -6 | 6 |
| -5e | 7 |
| -6e | 8 |
اگر میدانید که فایلی برای فشردهسازی خوب به لغتنامه تا حدی بزرگ (به عنوان مثال، 32 MiB) نیاز دارد، اما میخواهید آن را سریعتر از xz -8 فشرده کنید، میتوان یک پیشتنظیم با مقدار CompCPU پایین (برای مثال 1) را طوری تغییر داد که از لغتنامه بزرگتری استفاده کند:
xz --lzma2=preset=1,dict=32MiB foo.tar
برای فایلهای خاص، دستور بالا ممکن است سریعتر از xz -6 باشد در حالی که فشردهسازی به مراتب بهتری ارائه میدهد. با این حال، باید تأکید شود که تنها برخی فایلها از یک لغتنامه بزرگ با حفظ مقدار CompCPU پایین بهرهمند میشوند. واضحترین وضعیتی که یک لغتنامه بزرگ میتواند کمک شایانی کند، آرشیوی شامل فایلهای بسیار مشابه است که هر کدام دستکم چند مگابایت حجم دارند. اندازه لغتنامه باید به مراتب بزرگتر از هر تکفایل باشد تا به 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 با استفاده از پالایه BCJ مربوط به x86:
xz --x86 --lzma2 libfoo.so
توجه داشته باشید که ترتیب گزینههای پالایه اهمیت دارد. اگر --x86 پس از --lzma2 مشخص شود، xz خطا خواهد داد، زیرا هیچ پالایهای نمیتواند پس از LZMA2 قرار گیرد، و همچنین به این دلیل که پالایه BCJ برای x86 نمیتواند به عنوان آخرین پالایه در زنجیره استفاده شود.
پالایه دلتا (Delta) به همراه LZMA2 میتواند نتایج خوبی در تصاویر بیتی (bitmap) به همراه داشته باشد. این ترکیب معمولاً باید عملکردی بهتر از PNG داشته باشد، که از چند پالایه پیشرفتهتر از دلتای ساده استفاده میکند اما از Deflate برای فشردهسازی واقعی بهره میبرد.
تصویر باید در یک قالب فشردهنشده، مثلاً به صورت TIFF فشردهنشده ذخیره شده باشد. پارامتر فاصله (distance) در پالایه دلتا طوری تنظیم میشود که با تعداد بایتهای هر پیکسل در تصویر مطابقت داشته باشد. به عنوان مثال، تصویر بیتی 24-بیتی RGB به dist=3 نیاز دارد، و همچنین مناسب است که pb=0 به LZMA2 ارسال شود تا همترازی سهبایتی رعایت گردد:
xz --delta=dist=3 --lzma2=pb=0 foo.tiff
اگر چندین تصویر در یک آرشیو واحد قرار گرفته باشند (به عنوان مثال .tar)، پالایه دلتا روی آن نیز کار خواهد کرد مشروط بر اینکه همه تصاویر تعداد بایت در پیکسل یکسانی داشته باشند.
همچنین ببینید (SEE ALSO)
xzdec(1)، xzdiff(1)، xzgrep(1)، xzless(1)، xzmore(1)، gzip(1)، bzip2(1)، 7z(1)
مجموعه XZ Utils:
https://tukaani.org/xz
مجموعه XZ Embedded:
https://tukaani.org/xz/embedded.html
مجموعه
کدهای
توسعه LZMA SDK:
http://7-zip.org/sdk.html
نویسنده (AUTHOR)
Lasse Collin
گزارش باگها (REPORTING BUGS)
گزارش
باگها به:
<lasse.collin@tukaani.org> (به
زبان
انگلیسی یا
فنلاندی).
همچنین
فهرست پستی
پروژه XZ Utils و
سامانه
رهگیری باگ
در GitHub:
https://github.com/tukaani-project/xz/issues
حق نشر (COPYRIGHT)
حق نشر © 2009-2022 Lasse
Collin و
پدیدآورندگان
XZ Utils.
این فایل و
کد منبع
مرتبط در
مالکیت
عمومی (Public Domain)
قرار دارند.
شما
میتوانید
هر کاری
میخواهید
با این فایل
انجام
دهید.
| 2022-12-01 | Tukaani |