| XZ(1) | أدوات XZ | 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 أو يفك ضغط كل ملف وفقاً لوضع التشغيل المحدد. إذا لم تُعطَ ملفات أو كان الملف هو -، يقرأ xz من الدخل القياسي ويكتب البيانات المعالجة إلى الخرج القياسي. يرفض xz (يعرض خطأ ويتخطى الملف) كتابة البيانات المضغوطة إلى الخرج القياسي إذا كان طرفية. وبالمثل، يرفض xz قراءة البيانات المضغوطة من الدخل القياسي إذا كان طرفية.
ما لم يحدد الخيار --stdout، تُكتب الملفات بخلاف - في ملف جديد يُشتق اسمه من اسم ملف المصدر:
- عند الضغط، يُلحق ملحق تنسيق الملف الهدف (.xz أو .lzma) باسم ملف المصدر للحصول على اسم الملف الهدف.
- عند فك الضغط، يُزال الملحق .xz أو .lzma أو .lz من اسم الملف للحصول على اسم الملف الهدف. يتعرف xz أيضاً على الملحقات .txz و .tlz، ويستبدلها بالملحق .tar.
إذا كان الملف الهدف موجوداً بالفعل، يُعرض خطأ ويتخطى الملف.
ما لم يكتب إلى المخرج القياسي، يعرض xz تحذيراً ويتخطى الملف في حال انطباق أي مما يلي:
- الملف ليس ملفاً عادياً. لا تُتبع الوصلات الرمزية، وبالتالي لا تُعتبر ملفات عادية.
- الملف له أكثر من وصلة صلبة واحدة.
- الملف عُينت له بتات setuid أو setgid أو sticky.
- وضع التشغيل مضبوط على الضغط و الملف يمتلك بالفعل ملحقاً لتنسيق الملف الهدف (.xz أو .txz عند الضغط بتنسيق .xz، و .lzma أو .tlz عند الضغط بتنسيق .lzma).
- وضع التشغيل مضبوط على فك الضغط و الملف لا يمتلك ملحقاً لأي من تنسيقات الملفات المدعومة (.xz أو .txz أو .lzma أو .tlz أو .lz).
بعد ضغط الملف أو فك ضغطه بنجاح، ينسخ xz المالك والمجموعة والأذونات ووقت الوصول ووقت التعديل من ملف المصدر إلى الملف الهدف. إذا فشل نسخ المجموعة، تُعدل الأذونات حتى لا يصبح الملف الهدف متاحاً للمستخدمين الذين لم يمتلكوا إذناً للوصول إلى ملف المصدر. لا يدعم xz نسخ البيانات الوصفية الأخرى مثل قوائم التحكم في الوصول أو السمات الممتدة بعد.
بمجرد إغلاق الملف الهدف بنجاح، يُحذف ملف المصدر ما لم يُحدد الخيار --keep. لا يُحذف ملف المصدر أبداً إذا كُتب المخرج إلى المخرج القياسي أو عند حدوث خطأ.
إرسال SIGINFO أو SIGUSR1 إلى عملية xz يجعلها تطبع معلومات التقدم إلى الخطأ القياسي. هذا له استخدام محدود لأنه عندما يكون الخطأ القياسي هو الطرفية، فإن استخدام --verbose يعرض مؤشر تقدم يحدث آلياً.
استخدام الذاكرة
يختلف استخدام الذاكرة لـ xz من بضع مئات الكيلوبايتات إلى عدة جيجابايتات اعتماداً على إعدادات الضغط. تحدد الإعدادات المستخدمة عند ضغط الملف متطلبات الذاكرة لبرنامج فك الضغط. عادةً يحتاج برنامج فك الضغط من 5% إلى 20% من كمية الذاكرة التي احتاج إليها الضاغط عند إنشاء الملف. على سبيل المثال، يتطلب فك ضغط ملف أُنشئ باستخدام xz -9 حالياً 65 ميجابايت من الذاكرة. ومع ذلك، من الممكن وجود ملفات .xz تتطلب عدة جيجابايتات من الذاكرة لفك ضغطها.
قد يجد مستخدمو الأنظمة القديمة خصوصاً احتمال استهلاك الذاكرة بشكل كبير جداً أمراً مزعجاً. لمنع المفاجآت غير المريحة، يمتلك xz محدد استهلاك ذاكرة مدمجاً، وهو معطل بشكل مبدئي. في حين توفر بعض أنظمة التشغيل طرقاً للحد من استهلاك الذاكرة للعمليات، لم يُعتبر الاعتماد عليها مرناً بما يكفي (على سبيل المثال، استخدام ulimit(1) للحد من الذاكرة الافتراضية يؤدي إلى إضعاف mmap(2)).
يمكن تفعيل محدد استهلاك الذاكرة عبر خيار سطر الأوامر --memlimit=limit. غالباً ما يكون من الأنسب تفعيل المحدد بشكل مبدئي عن طريق ضبط متغير البيئة XZ_DEFAULTS، مثلاً: XZ_DEFAULTS=--memlimit=150MiB. يمكن ضبط الحدود بشكل منفصل للضغط وفك الضغط باستخدام --memlimit-compress=limit و --memlimit-decompress=limit. نادراً ما يكون استخدام هذين الخيارين خارج XZ_DEFAULTS مفيداً لأن تشغيلاً واحداً لبرنامج xz لا يمكنه القيام بالضغط وفك الضغط معاً، كما أن الخيار --memlimit=limit (أو -M limit) أسهل في الكتابة.
إذا تم تجاوز حد استهلاك الذاكرة المحدد عند فك الضغط، يعرض 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
- يطبع معلومات حول الملفات المضغوطة. لا يُنتج أي خرج مفكوك ضغطه، ولا تُنشأ ولا تُزال أي ملفات. في وضع القائمة، لا يستطيع البرنامج قراءة البيانات المضغوطة من الدخل القياسي أو من المصادر الأخرى التي لا تدعم البحث (unseekable).
- تُظهر القائمة المبدئية معلومات أساسية حول الملفات، بمعدل ملف واحد لكل سطر. للحصول على معلومات أكثر تفصيلاً، استخدم أيضاً الخيار --verbose. لمزيد من المعلومات، استخدم --verbose مرتين، لكن لاحظ أن هذا قد يكون بطيئاً لأن الحصول على كل المعلومات الإضافية يتطلب العديد من عمليات البحث. يتجاوز عرض المخرج التفصيلي 80 حرفاً، لذا قد يكون من المناسب تمرير المخرج إلى less -S مثلاً إذا لم تكن الطرفية عريضة بما يكفي.
- قد يختلف المخرج الدقيق بين إصدارات xz والإعدادات المحلية المختلفة. للمخرج القابل للقراءة آلياً، يجب استخدام --robot --list.
معدلات العمليات
- -k, --keep
- عدم حذف ملفات المدخلات.
- منذ xz 5.2.6، يجعل هذا الخيار xz يضغط أو يفك الضغط حتى لو كان المدخل وصلاً رمزياً لملف عادي، أو يمتلك أكثر من وصلة صلبة، أو عُينت له بتات setuid أو setgid أو sticky. لا تُنسخ بتات setuid و setgid و sticky إلى الملف الهدف. في الإصدارات الأقدم، كان هذا يتم فقط مع الخيار --force.
- -f, --force
- هذا الخيار له عدة تأثيرات:
- إذا كان الملف الهدف موجوداً بالفعل، يُحذف قبل الضغط أو فك الضغط.
- الضغط أو فك الضغط حتى لو كان المدخل وصلاً رمزياً لملف عادي، أو يمتلك أكثر من وصلة صلبة، أو عُينت له بتات setuid أو setgid أو sticky. لا تُنسخ بتات setuid و setgid و sticky إلى الملف الهدف.
- عند استخدامه مع --decompress و --stdout وتعذر على xz التعرف على نوع ملف المصدر، ينسخ ملف المصدر كما هو إلى المخرج القياسي. هذا يسمح باستخدام xzcat --force مثل cat(1) للملفات التي لم تُضغط باستخدام xz. لاحظ أنه مستقبلاً، قد يدعم xz تنسيقات ملفات مضغوطة جديدة، مما قد يجعل xz يفك ضغط أنواع أكثر من الملفات بدلاً من نسخها كما هي إلى المخرج القياسي. يمكن استخدام --format=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 أو .lz. إذا كان لملف المصدر الملحق .suf، يُزال الملحق للحصول على اسم الملف الهدف.
- عند ضغط أو فك ضغط التدفقات الخام (--format=raw)، يجب دائماً تحديد الملحق ما لم تكن الكتابة إلى المخرج القياسي، لأنه لا يوجد ملحق مبدئي للتدفقات الخام.
- --files[=file]
- قراءة أسماء الملفات المطلوب معالجتها من ملف؛ إذا حُذف ملف، تُقرأ أسماء الملفات من المدخل القياسي. يجب إنهاء أسماء الملفات بحرف سطر جديد. تُعامل الشَرطة (-) كاسم ملف عادي؛ ولا تعني المدخل القياسي. إذا أُعطيت أسماء ملفات أيضاً كمعاملات لسطر الأوامر، فستتم معالجتها قبل أسماء الملفات المقروءة من ملف.
- --files0[=file]
- هذا مطابق للخيار --files[=file] باستثناء أنه يجب إنهاء كل اسم ملف بالحرف الصفري (null).
تنسيق الملف الأساسي وخيارات الضغط
- -F format, --format=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.
- raw
- ضغط أو فك ضغط تدفق خام (بدون ترويسات). هذا مخصص للمستخدمين المتقدمين فقط. لفك ترميز التدفقات الخام، تحتاج لاستخدام --format=raw وتحديد سلسلة المرشحات صراحة، والتي كان من المفترض تخزينها في ترويسات الحاوية بشكل طبيعي.
- -C check, --check=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). تحدد إعدادات الضغط المختارة متطلبات الذاكرة لفك الضغط، لذا فإن استخدام مستوى مرتفع جداً قد يجعل فك ضغط الملف مؤلماً على نظام قديم بذاكرة وصول عشوائي قليلة. تحديداً، ليست فكرة جيدة استخدام -9 بشكل أعمى لكل شيء كما هو الحال غالباً مع gzip(1) و bzip2(1).
- -0 ... -3
- تُعد هذه عمليات ضبط مسبق سريعة نوعاً ما. يكون المستوى -0 أحياناً أسرع من gzip -9 مع توفير ضغط أفضل بكثير. وغالباً ما تملك المستويات الأعلى سرعة تُضاهي bzip2(1) مع نسبة ضغط مماثلة أو أفضل، رغم أن النتائج تعتمد كثيراً على نوع البيانات الجاري ضغطها.
- -4 ... -6
- ضغط جيد إلى جيد جداً مع الحفاظ على استهلاك ذاكرة فك الضغط معقولاً حتى للأنظمة القديمة. -6 هو المبدئي، وهو عادة خيار جيد لتوزيع الملفات التي يجب أن تكون قابلة لفك الضغط حتى على أنظمة بذاكرة 16 ميجابايت فقط. (قد يكون من الجدير بالذكر التفكير في -5e أو -6e أيضاً. انظر --extreme.)
- -7 ... -9
- هذه تشبه -6 ولكن مع متطلبات ذاكرة أعلى للضغط وفك الضغط. هذه مفيدة فقط عند ضغط ملفات أكبر من 8 ميجابايت، و 16 ميجابايت، و 32 ميجابايت على التوالي.
- على نفس العتاد، سرعة فك الضغط هي تقريباً عدد ثابت من بايتات البيانات المضغوطة في الثانية. بمعنى آخر، كلما كان الضغط أفضل، كان فك الضغط أسرع عادة. يعني هذا أيضاً أن كمية المخرج غير المضغوط المنتج في الثانية يمكن أن تختلف كثيراً.
- يلخص الجدول التالي مميزات الإعدادات المسبقة:
| المستوى | حجم القاموس | معالج الضغط | ذاكرة الضغط | ذاكرة فك الضغط |
| -0 | 256 كيلوبايت | 0 | 3 ميجابايت | 1 ميجابايت |
| -1 | 1 ميجابايت | 1 | 9 ميجابايت | 2 ميجابايت |
| -2 | 2 ميجابايت | 2 | 17 ميجابايت | 3 ميجابايت |
| -3 | 4 ميجابايت | 3 | 32 ميجابايت | 5 ميجابايت |
| -4 | 4 ميجابايت | 4 | 48 ميجابايت | 5 ميجابايت |
| -5 | 8 ميجابايت | 5 | 94 ميجابايت | 9 ميجابايت |
| -6 | 8 ميجابايت | 6 | 94 ميجابايت | 9 ميجابايت |
| -7 | 16 ميجابايت | 6 | 186 ميجابايت | 17 ميجابايت |
| -8 | 32 ميجابايت | 6 | 370 ميجابايت | 33 ميجابايت |
| -9 | 64 ميجابايت | 6 | 674 ميجابايت | 65 ميجابايت |
- وصف الأعمدة:
- DictSize هو حجم قاموس LZMA2. من هدر الذاكرة استخدام قاموس أكبر من حجم الملف غير المضغوط. لهذا السبب من الجيد تجنب استخدام الإعدادات المسبقة -7 ... -9 عندما لا تكون هناك حاجة حقيقية لها. في المستوى -6 وما دونه، تكون كمية الذاكرة المهدرة عادة منخفضة بما يكفي بحيث لا تهم.
- CompCPU هو تمثيل مبسط لإعدادات LZMA2 التي تؤثر على سرعة الضغط. يؤثر حجم القاموس على السرعة أيضاً، لذا بينما CompCPU هو نفسه للمستويات -6 ... -9، فإن المستويات الأعلى لا تزال تميل إلى أن تكون أبطأ قليلاً. للحصول على ضغط أبطأ وبالتالي ربما أفضل، انظر --extreme.
- CompMem يحتوي على متطلبات ذاكرة الضغط في وضع الخيط الواحد. قد يختلف قليلاً بين إصدارات xz.
- DecMem يحتوي على متطلبات ذاكرة فك الضغط. أي أن إعدادات الضغط تحدد متطلبات الذاكرة لفك الضغط. استهلاك ذاكرة فك الضغط الفعلي هو أكثر بقليل من حجم قاموس LZMA2، ولكن تم تقريب القيم في الجدول إلى أقرب ميجابايت كاملة.
- متطلبات الذاكرة لوضع الخيوط المتعددة أعلى بكثير من وضع الخيط الواحد. مع القيمة المبدئية لـ --block-size، يحتاج كل خيط إلى 3*3*DictSize بالإضافة إلى CompMem أو DecMem. على سبيل المثال، أربعة خيوط مع المستوى -6 تحتاج من 660 إلى 670 ميجابايت من الذاكرة.
- -e, --extreme
- استخدم نوعاً أبطأ من مستوى الضغط المختار (-0 ... -9) على أمل الحصول على نسبة ضغط أفضل قليلاً، ولكن مع سوء الحظ قد يجعل هذا الأمر أسوأ. لا يتأثر استهلاك ذاكرة فك الضغط، ولكن استهلاك ذاكرة الضغط يزداد قليلاً في المستويات -0 ... -3.
- بما أن هناك مستويين بحجم قاموس 4 ميجابايت و 8 ميجابايت، فإن المستويين -3e و -5e يستخدمان إعدادات أسرع قليلاً (CompCPU أقل) من -4e و -6e على التوالي. بهذه الطريقة لا توجد مستويات متطابقة.
| المستوى | حجم القاموس | معالج الضغط | ذاكرة الضغط | ذاكرة فك الضغط |
| -0e | 256 كيلوبايت | 8 | 4 ميجابايت | 1 ميجابايت |
| -1e | 1 ميجابايت | 8 | 13 ميجابايت | 2 ميجابايت |
| -2e | 2 ميجابايت | 8 | 25 ميجابايت | 3 ميجابايت |
| -3e | 4 ميجابايت | 7 | 48 ميجابايت | 5 ميجابايت |
| -4e | 4 ميجابايت | 8 | 48 ميجابايت | 5 ميجابايت |
| -5e | 8 ميجابايت | 7 | 94 ميجابايت | 9 ميجابايت |
| -6e | 8 ميجابايت | 8 | 94 ميجابايت | 9 ميجابايت |
| -7e | 16 ميجابايت | 8 | 186 ميجابايت | 17 ميجابايت |
| -8e | 32 ميجابايت | 8 | 370 ميجابايت | 33 ميجابايت |
| -9e | 64 ميجابايت | 8 | 674 ميجابايت | 65 ميجابايت |
- على سبيل المثال، هناك إجمالي أربعة إعدادات مسبقة تستخدم قاموساً بحجم 8 ميجابايت، وترتيبها من الأسرع إلى الأبطأ هو -5 و -6 و -5e و -6e.
- --fast
- --best
- هذه أسماء بديلة مضللة نوعاً ما لـ -0 و -9 على التوالي. تم توفيرها فقط للتوافق مع الإصدارات السابقة من أدوات LZMA. تجنب استخدام هذه الخيارات.
- --block-size=size
- عند الضغط بتنسيق .xz، قم بتقسيم بيانات المدخلات إلى كتل بحجم size بايت. تُضغط الكتل بشكل مستقل عن بعضها البعض، مما يساعد في تعدد الخيوط ويجعل فك الضغط العشوائي المحدود ممكناً. يستخدم هذا الخيار عادةً لتجاوز حجم الكتلة المبدئي في وضع تعدد الخيوط، ولكن يمكن استخدامه في وضع الخيط الواحد أيضاً.
- في وضع تعدد الخيوط، يتم تخصيص حوالي ثلاثة أضعاف size بايت في كل خيط لتخزين المدخلات والمخرجات مؤقتاً. الحجم size المبدئي هو ثلاثة أضعاف حجم قاموس LZMA2 أو 1 ميجابايت، أيهما أكثر. عادة ما تكون القيمة الجيدة من 2 إلى 4 أضعاف حجم قاموس LZMA2 أو على الأقل 1 ميجابايت. استخدام حجم size أقل من حجم قاموس LZMA2 هو هدر لذاكرة الوصول العشوائي لأن ذاكرة قاموس LZMA2 المؤقتة لن تُستخدم بالكامل أبداً. في وضع تعدد الخيوط، تُخزن أحجام الكتل في ترويسات الكتل. معلومات الحجم هذه مطلوبة لفك الضغط المتعدد الخيوط.
- في وضع الخيط الواحد لا يتم تقسيم الكتل بشكل مبدئي. ضبط هذا الخيار لا يؤثر على استهلاك الذاكرة. لا تُخزن معلومات الحجم في ترويسات الكتل، وبالتالي فإن الملفات المنشأة في وضع الخيط الواحد لن تكون متطابقة مع الملفات المنشأة في وضع تعدد الخيوط. نقص معلومات الحجم يعني أيضاً أن xz لن يتمكن من فك ضغط الملفات في وضع تعدد الخيوط.
- --block-list=items
- عند الضغط بتنسيق .xz، ابدأ كتلة جديدة مع سلسلة مرشحات مخصصة اختيارية بعد فواصل زمنية معينة من البيانات غير المضغوطة.
- العناصر هي قائمة مفصولة بفاصلة. يتكون كل عنصر من رقم سلسلة مرشحات اختياري بين 0 و 9 تليها نقطتان (:) وحجم مطلوب للبيانات غير المضغوطة. حذف عنصر (فاصلتان متتاليتان أو أكثر) هو اختصار لاستخدام حجم ومرشحات العنصر السابق.
- إذا كان ملف المدخلات أكبر من مجموع الأحجام في العناصر، فسيتم تكرار العنصر الأخير حتى نهاية الملف. يمكن استخدام القيمة الخاصة 0 كآخر حجم للإشارة إلى وجوب ترميز بقية الملف ككتلة واحدة.
- يمكن تحديد سلسلة مرشحات بديلة لكل كتلة بالاشتراك مع الخيارات --filters1=filters ... --filters9=filters. تعرف هذه الخيارات سلاسل المرشحات بمعرف بين 1 و 9. يمكن استخدام سلسلة المرشحات 0 للإشارة إلى سلسلة المرشحات المبدئية، وهو ما يماثل عدم تحديد سلسلة مرشحات. يمكن استخدام معرف سلسلة المرشحات قبل الحجم غير المضغوط، متبوعاً بنقطتين (:). على سبيل المثال، إذا حدد أحدهم --block-list=1:2MiB,3:2MiB,2:4MiB,,2MiB,0:4MiB فسيتم إنشاء الكتل باستخدام:
- سلسلة المرشحات المحددة بواسطة --filters1 و 2 ميجابايت من المدخلات
- سلسلة المرشحات المحددة بواسطة --filters3 و 2 ميجابايت من المدخلات
- سلسلة المرشحات المحددة بواسطة --filters2 و 4 ميجابايت من المدخلات
- سلسلة المرشحات المحددة بواسطة --filters2 و 4 ميجابايت من المدخلات
- سلسلة المرشحات المبدئية و 2 ميجابايت من المدخلات
- سلسلة المرشحات المبدئية و 4 ميجابايت من المدخلات لكل كتلة حتى نهاية المدخلات.
- إذا حدد أحدهم حجماً يتجاوز حجم كتلة المرمّز (سواء القيمة المبدئية في وضع تعدد الخيوط أو القيمة المحددة باستخدام --block-size=size)، فسيقوم المرمّز بإنشاء كتل إضافية مع الحفاظ على الحدود المحددة في العناصر. على سبيل المثال، إذا حدد أحدهم --block-size=10MiB و --block-list=5MiB,10MiB,8MiB,12MiB,24MiB وكان ملف المدخلات 80 ميجابايت، فسيحصل على 11 كتلة: 5، 10، 8، 10، 2، 10، 10، 4، 10، 10، و 1 ميجابايت.
- في وضع تعدد الخيوط تُخزن أحجام الكتل في ترويسات الكتل. لا يتم ذلك في وضع الخيط الواحد، لذا لن يكون المخرج المرمّز مطابقاً لمخرج وضع تعدد الخيوط.
- --flush-timeout=timeout
- عند الضغط، إذا مر أكثر من timeout ميلي ثانية (عدد صحيح موجب) منذ التفريغ السابق وكان قراءة المزيد من المدخلات سيؤدي إلى التوقف، فسيتم تفريغ جميع بيانات المدخلات المعلقة من المرمّز وجعلها متاحة في تدفق المخرجات. يمكن أن يكون هذا مفيداً إذا استخدم xz لضغط البيانات التي تتدفق عبر الشبكة. تجعل قيم timeout الصغيرة البيانات متاحة في طرف الاستلام بتأخير بسيط، لكن قيم timeout الكبيرة تعطي نسبة ضغط أفضل.
- هذه الميزة معطلة بشكل مبدئي. إذا حُدد هذا الخيار أكثر من مرة، فإن الأخير هو الذي يسري مفعوله. يمكن استخدام قيمة timeout الخاصة 0 لتعطيل هذه الميزة صراحة.
- هذه الميزة غير متوفرة في الأنظمة غير المتوافقة مع POSIX.
- هذه الميزة لا تزال تجريبية. حالياً يعد xz غير مناسب لفك ضغط التدفق في الوقت الفعلي نظراً لكيفية قيام xz بالتخزين المؤقت.
- --no-sync
- عدم مزامنة الملف الهدف ودليله مع جهاز التخزين قبل حذف ملف المصدر. يمكن لهذا أن يحسن الأداء عند ضغط أو فك ضغط العديد من الملفات الصغيرة. ومع ذلك، إذا تعطل النظام بعد الحذف بفترة وجيزة، فمن المحتمل ألا يكون الملف الهدف قد كُتب على جهاز التخزين رغم تنفيذ عملية الحذف. في هذه الحالة، لن يتوفر ملف المصدر الأصلي ولا الملف الهدف.
- هذا الخيار له تأثير فقط عندما يهم xz بحذف ملف المصدر. في الحالات الأخرى لا تتم المزامنة أبداً.
- أضيفت المزامنة و --no-sync في xz 5.7.1alpha.
- --memlimit-compress=limit
- تعيين حد استهلاك الذاكرة للضغط. إذا حُدد هذا الخيار عدة مرات، فإن الأخير هو الذي يسري مفعوله.
- إذا تجاوزت إعدادات الضغط الحد، فسيحاول 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 جيجابايت (2 جيجابايت في MIPS32) مع الأمل في عدم إلحاق ضرر في الحالات الأخرى.
- انظر أيضاً قسم استهلاك الذاكرة.
- --memlimit-decompress=limit
- تعيين حد استهلاك الذاكرة لفك الضغط. يؤثر هذا أيضاً على وضع --list. إذا كانت العملية غير ممكنة دون تجاوز الحد، فسيقوم xz بعرض خطأ ويفشل فك ضغط الملف. انظر --memlimit-compress=limit للتعرف على الطرق الممكنة لتحديد الحد.
- --memlimit-mt-decompress=limit
- تعيين حد استهلاك الذاكرة لفك الضغط المتعدد الخيوط. يمكن أن يؤثر هذا فقط على عدد الخيوط؛ لن يجعل هذا xz يرفض فك ضغط ملف أبداً. إذا كان الحد منخفضاً جداً بحيث لا يسمح بتعدد الخيوط، فسيتم تجاهل الحد وسيقوم xz بالاستمرار في وضع الخيط الواحد. لاحظ أنه في حال استخدام --memlimit-decompress أيضاً، فسيتم تطبيقه دائماً على وضعي الخيط الواحد وتعدد الخيوط، وبالتالي لن يكون الحد الفعلي لتعدد الخيوط أعلى من الحد المحدد بواسطة --memlimit-decompress.
- على عكس خيارات حدود استهلاك الذاكرة الأخرى، يمتلك --memlimit-mt-decompress=limit حداً مبدئياً خاصاً بالنظام. يمكن استخدام xz --info-memory لرؤية القيمة الحالية.
- يوجد هذا الخيار وقيمته المبدئية لأنه بدون أي حد يمكن أن ينتهي الأمر ببرنامج فك الضغط المتعدد الخيوط بتخصيص كمية جنونية من الذاكرة مع بعض ملفات المدخلات. إذا كان الحد المبدئي منخفضاً جداً على نظامك، فلا تتردد في زيادة الحد ولكن لا تضبطه أبداً على قيمة أكبر من كمية ذاكرة الوصول العشوائي القابلة للاستخدام، حيث سيحاول xz مع ملفات المدخلات المناسبة استخدام تلك الكمية من الذاكرة حتى مع وجود عدد قليل من الخيوط. نفاذ الذاكرة أو استخدام مساحة التبادل لن يحسن أداء فك الضغط.
- انظر --memlimit-compress=limit للتعرف على الطرق الممكنة لتحديد الحد. ضبط الحد على 0 يعيد الحد إلى القيمة المبدئية الخاصة بالنظام.
- -M limit, --memlimit=limit, --memory=limit
- هذا يعادل تحديد --memlimit-compress=limit و --memlimit-decompress=limit و --memlimit-mt-decompress=limit.
- --no-adjust
- عرض خطأ والخروج إذا تعذر الالتزام بحد استهلاك الذاكرة دون ضبط الإعدادات التي تؤثر على المخرج المضغوط. أي أن هذا يمنع xz من تحويل المرمّز من وضع تعدد الخيوط إلى وضع الخيط الواحد ومن تقليل حجم قاموس LZMA2. حتى عند استخدام هذا الخيار، قد يتم تقليل عدد الخيوط للالتزام بحد استهلاك الذاكرة لأن ذلك لن يؤثر على المخرج المضغوط.
- الضبط الآلي معطل دائماً عند إنشاء تدفقات خام (--format=raw).
- -T threads, --threads=threads
- حدد عدد خيوط العمل المراد استخدامها. ضبط threads على القيمة الخاصة 0 يجعل xz يستخدم عدداً من الخيوط يصل إلى ما يدعمه المعالج (أو المعالجات) في النظام. قد يكون عدد الخيوط الفعلي أقل من threads إذا لم يكن ملف المدخلات كبيراً بما يكفي لتعدد الخيوط مع الإعدادات المعطاة أو إذا كان استخدام المزيد من الخيوط سيتجاوز حد استهلاك الذاكرة.
- ينتج ضاغط الخيط الواحد وضاغط تعدد الخيوط مخرجات مختلفة. سيعطي ضاغط الخيط الواحد أصغر حجم ملف ولكن فقط مخرجات ضاغط تعدد الخيوط يمكن فك ضغطها باستخدام عدة خيوط. ضبط threads على 1 سيستخدم وضع الخيط الواحد. ضبط threads على أي قيمة أخرى، بما في ذلك 0، سيستخدم ضاغط تعدد الخيوط حتى لو كان النظام يدعم خيطاً عتادياً واحداً فقط. (كان xz 5.2.x يستخدم وضع الخيط الواحد في هذه الحالة).
- لاستخدام وضع تعدد الخيوط مع خيط واحد فقط، اضبط threads على +1. السابقة + ليس لها تأثير مع قيم أخرى غير 1. لا يزال بإمكان حد استهلاك الذاكرة أن يجعل xz يتحول إلى وضع الخيط الواحد ما لم يتم استخدام --no-adjust. أُضيف دعم السابقة + في xz 5.4.0.
- إذا تم طلب عدد آلي من الخيوط ولم يتم تحديد حد لاستهلاك الذاكرة، فسيتم استخدام حد مرن مبدئي خاص بالنظام لاحتمال تقليل عدد الخيوط. هو حد مرن بمعنى أنه يتم تجاهله إذا أصبح عدد الخيوط واحداً، وبالتالي فإن الحد المرن لن يمنع xz أبداً من الضغط أو فك الضغط. هذا الحد المرن المبدئي لن يجعل xz يتحول من وضع تعدد الخيوط إلى وضع الخيط الواحد. يمكن رؤية الحدود النشطة باستخدام xz --info-memory.
- حالياً الطريقة الوحيدة لتعدد الخيوط هي تقسيم المدخلات إلى كتل وضغطها بشكل مستقل عن بعضها البعض. يعتمد حجم الكتلة المبدئي على مستوى الضغط ويمكن تجاوزه باستخدام الخيار --block-size=size.
- يعمل فك الضغط المتعدد الخيوط فقط على الملفات التي تحتوي على كتل متعددة مع معلومات الحجم في ترويسات الكتل. جميع الملفات الكبيرة بما يكفي والمضغوطة في وضع تعدد الخيوط تفي بهذا الشرط، لكن الملفات المضغوطة في وضع الخيط الواحد لا تفي به حتى لو تم استخدام --block-size=size.
- القيمة المبدئية لـ threads هي 0. في xz 5.4.x والإصدارات الأقدم كانت القيمة المبدئية هي 1.
سلاسل مرشحات ضاغط مخصصة
تسمح سلسلة المرشحات المخصصة بتحديد إعدادات الضغط بالتفصيل بدلاً من الاعتماد على الإعدادات المرتبطة بالمستويات المعدة مسبقاً. عند تحديد سلسلة مرشحات مخصصة، يتم نسيان خيارات المستويات المسبقة (-0 ... -9 و --extreme) المذكورة سابقاً في سطر الأوامر. إذا تم تحديد خيار مستوى مسبق بعد واحد أو أكثر من خيارات سلسلة المرشحات المخصصة، فإن المستوى المسبق الجديد يسري مفعوله ويتم نسيان خيارات سلسلة المرشحات المخصصة المحددة سابقاً.
سلسلة المرشحات تشبه الأنابيب (piping) في سطر الأوامر. عند الضغط، تذهب المدخلات غير المضغوطة إلى المرشح الأول، والذي يذهب مخرجه إلى المرشح التالي (إن وجد). يُكتب مخرج المرشح الأخير في الملف المضغوط. الحد الأقصى لعدد المرشحات في السلسلة هو أربعة، ولكن عادةً ما تحتوي سلسلة المرشحات على مرشح واحد أو اثنين فقط.
تمتلك العديد من المرشحات قيوداً على مكان وجودها في سلسلة المرشحات: بعض المرشحات يمكن أن تعمل فقط كآخر مرشح في السلسلة، وبعضها فقط كمرشح غير أخير، وبعضها يعمل في أي موضع في السلسلة. اعتماداً على المرشح، يكون هذا القيد إما متأصلاً في تصميم المرشح أو موجوداً لمنع المشكلات الأمنية.
يمكن تحديد سلسلة مرشحات مخصصة بطريقتين مختلفتين. تسمح الخيارات --filters=filters و --filters1=filters ... --filters9=filters بتحديد سلسلة مرشحات كاملة في خيار واحد باستخدام صيغة نص مرشح liblzma. بدلاً من ذلك، يمكن تحديد سلسلة مرشحات باستخدام خيار مرشح فردي واحد أو أكثر بالترتيب المطلوب في سلسلة المرشحات. أي أن ترتيب خيارات المرشحات الفردية مهم! عند فك ترميز التدفقات الخام (--format=raw)، يجب تحديد سلسلة المرشحات بنفس الترتيب الذي حُددت به عند الضغط. سيتم نسيان أي مرشح فردي أو خيارات مستوى مسبق محددة قبل خيار السلسلة الكاملة (--filters=filters). المرشحات الفردية المحددة بعد خيار السلسلة الكاملة ستعيد ضبط سلسلة المرشحات.
تأخذ كل من خيارات المرشح الكاملة والفردية خيارات خاصة بالمرشح كقائمة مفصولة بفاصلة. الفواصل الزائدة في الخيارات يتم تجاهلها. كل خيار له قيمة مبدئية، لذا حدد فقط تلك التي تريد تغييرها.
لرؤية سلسلة المرشحات بالكامل و الخيارات، استخدم xz -vv (أي استخدم --verbose مرتين). يعمل هذا أيضاً لعرض خيارات سلسلة المرشحات المستخدمة بواسطة المستويات المسبقة.
- --filters=filters
- حدد سلسلة المرشحات الكاملة أو مستوى مسبقاً في خيار واحد. يمكن فصل كل مرشح بمسافات أو شرطتين (--). قد تحتاج المرشحات لوضعها بين علامتي اقتباس في سطر أوامر الصدفة ليتم تحليلها كخيار واحد. للإشارة إلى الخيارات، استخدم : أو =. يمكن أن يسبق المستوى المسبق - ويتبعه صفر أو أكثر من الأعلام. العلم الوحيد المدعوم هو e لتطبيق نفس خيارات --extreme.
- --filters1=filters ... --filters9=filters
- حدد ما يصل إلى تسع سلاسل مرشحات إضافية يمكن استخدامها مع --block-list.
- على سبيل المثال، عند ضغط أرشيف يحتوي على ملفات تنفيذية تليها ملفات نصية، يمكن للجزء التنفيذي استخدام سلسلة مرشحات مع مرشح BCJ والجزء النصي يستخدم مرشح LZMA2 فقط.
- --filters-help
- عرض رسالة مساعدة تصف كيفية تحديد المستويات المسبقة وسلاسل المرشحات المخصصة في الخيارات --filters و --filters1=filters ... --filters9=filters، والخروج بنجاح.
- --lzma1[=options]
- --lzma2[=options]
- إضافة مرشح LZMA1 أو LZMA2 إلى سلسلة المرشحات. يمكن استخدام هذه المرشحات فقط كآخر مرشح في السلسلة.
- LZMA1 هو مرشح قديم، ومدعوم تقريباً فقط بسبب تنسيق ملف .lzma القديم، الذي يدعم LZMA1 فقط. LZMA2 هو نسخة محدثة من LZMA1 لإصلاح بعض المشكلات العملية في LZMA1. يستخدم تنسيق .xz مرشح LZMA2 ولا يدعم LZMA1 على الإطلاق. سرعة ونسب ضغط LZMA1 و LZMA2 متماثلة تقريباً.
- يشترك LZMA1 و LZMA2 في نفس مجموعة الخيارات:
- preset=preset
- إعادة ضبط جميع خيارات LZMA1 أو LZMA2 إلى preset. يتكون preset من عدد صحيح، قد يتبعه معدلات مستوى مسبق من حرف واحد. يمكن أن يكون العدد الصحيح من 0 إلى 9، بما يطابق خيارات سطر الأوامر -0 ... -9. المعدل الوحيد المدعوم حالياً هو e، الذي يطابق --extreme. إذا لم يتم تحديد preset، فسيتم أخذ القيم المبدئية لـ خيارات LZMA1 أو LZMA2 من المستوى المسبق 6.
- dict=size
- يشير حجم القاموس (مخزن التاريخ المؤقت) إلى عدد بايتات البيانات غير المضغوطة التي تمت معالجتها مؤخراً والمحفوظة في الذاكرة. تحاول الخوارزمية العثور على تسلسلات بايت متكررة (تطابقات) في البيانات غير المضغوطة، واستبدالها بمراجع للبيانات الموجودة حالياً في القاموس. كلما كبر القاموس، زادت فرصة العثور على تطابق. وبالتالي، فإن زيادة حجم القاموس يحسن عادةً نسبة الضغط، ولكن القاموس الأكبر من الملف غير المضغوط هو هدر للذاكرة.
- حجم القاموس النموذجي يتراوح من 64 كيلوبايت إلى 64 ميجابايت. الحد الأدنى هو 4 كيلوبايت. الحد الأقصى للضغط حالياً هو 1.5 جيجابايت (1536 ميجابايت). يدعم برنامج فك الضغط بالفعل قواميس تصل إلى أقل من 4 جيجابايت ببايب واحد، وهو الحد الأقصى لتنسيقات تدفق LZMA1 و LZMA2.
- يحدد حجم القاموس وباحث التطابق (mf) معاً مقدار استهلاك الذاكرة لمشفر LZMA1 أو LZMA2. يتطلب فك الضغط نفس حجم القاموس (أو أكبر) الذي استُخدم عند الضغط، وبالتالي فإن استهلاك الذاكرة لفك الترميز يحدده حجم القاموس المستخدم أثناء الضغط. تخزن ترويسات .xz حجم القاموس إما كـ 2^n أو 2^n + 2^(n-1)، لذا تُفضل هذه الأحجام نوعاً ما للضغط. الأحجام الأخرى تُقرب للأعلى عند تخزينها في ترويسات .xz.
- lc=lc
- حدد عدد بتات سياق الحروف (literal context bits). الحد الأدنى 0 والأقصى 4؛ الإعداد المبدئي هو 3. بالإضافة إلى ذلك، يجب ألا يتجاوز مجموع lc و lp العدد 4.
- كل البايتات التي لا يمكن تشفيرها كتطابقات تُشفر كحروف (literals). أي أن الحروف هي ببساطة بايتات من 8 بت تُشفر كل واحدة على حدة.
- يفترض ترميز الحروف أن أعلى بتات lc من البايت السابق غير المضغوط ترتبط بالبايت التالي. على سبيل المثال، في النص الإنجليزي المعتاد، غالباً ما يتبع الحرف الكبير حرف صغير، والحرف الصغير يتبعه عادةً حرف صغير آخر. في مجموعة محارف US-ASCII، أعلى ثلاثة بتات هي 010 للحروف الكبيرة و 011 للحروف الصغيرة. عندما تكون lc على الأقل 3، يستفيد ترميز الحروف من هذه الخاصية في البيانات غير المضغوطة.
- القيمة المبدئية (3) جيدة عادةً. إذا أردت أقصى ضغط، اختبر lc=4. أحياناً تساعد قليلاً، وأحياناً تجعل الضغط أسوأ. إذا جعلته أسوأ، اختبر lc=2 أيضاً.
- lp=lp
- حدد عدد بتات موضع الحروف (literal position bits). الحد الأدنى 0 والأقصى 4؛ الإعداد المبدئي هو 0.
- تؤثر Lp على نوع المحاذاة المفترضة في البيانات غير المضغوطة عند تشفير الحروف. انظر pb أدناه لمزيد من المعلومات حول المحاذاة.
- pb=pb
- حدد عدد بتات الموضع (position bits). الحد الأدنى 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). يعتمد الإعداد المبدئي على الإعداد المسبق (preset): 0 يستخدم hc3، ومن 1 إلى 3 تستخدم hc4، والبقية تستخدم bt4.
- باحثات التطابق التالية مدعومة. صيغ استهلاك الذاكرة أدناه هي تقريبات خشنة، تكون أقرب للواقع عندما يكون dict أسّاً للعدد اثنين.
- hc3
- سلسلة هاش
مع هاش 2 و 3
بايت
أقل قيمة لـ nice: 3
استهلاك الذاكرة:
dict * 7.5 (إذا كان dict <= 16 ميجابايت)؛
dict * 5.5 + 64 ميجابايت (إذا كان dict > 16 ميجابايت) - hc4
- سلسلة هاش
مع هاش 2 و 3 و 4
بايت
أقل قيمة لـ nice: 4
استهلاك الذاكرة:
dict * 7.5 (إذا كان dict <= 32 ميجابايت)؛
dict * 6.5 (إذا كان dict > 32 ميجابايت) - bt2
- شجرة
ثنائية مع
هاش 2 بايت
أقل قيمة لـ nice: 2
استهلاك الذاكرة: dict * 9.5 - bt3
- شجرة
ثنائية مع
هاش 2 و 3 بايت
أقل قيمة لـ nice: 3
استهلاك الذاكرة:
dict * 11.5 (إذا كان dict <= 16 ميجابايت)؛
dict * 9.5 + 64 ميجابايت (إذا كان dict > 16 ميجابايت) - bt4
- شجرة
ثنائية مع
هاش 2 و 3 و 4
بايت
أقل قيمة لـ nice: 4
استهلاك الذاكرة:
dict * 11.5 (إذا كان dict <= 32 ميجابايت)؛
dict * 10.5 (إذا كان dict > 32 ميجابايت)
- mode=mode
- يحدد نمط الضغط طريقة تحليل البيانات الناتجة عن باحث التطابق. الأنماط المدعومة هي fast و normal. النمط المبدئي هو fast للإعدادات المسبقة 0-3 و normal للإعدادات المسبقة 4-9.
- عادةً ما يُستخدم fast مع باحثات سلسلة الهاش و normal مع باحثات الشجرة الثنائية. وهذا ما تفعله الإعدادات المسبقة أيضاً.
- nice=nice
- حدد ما يُعتبر طولاً جيداً (nice) للتطابق. بمجرد العثور على تطابق بطول nice بايت على الأقل، تتوقف الخوارزمية عن البحث عن تطابقات أفضل محتملة.
- يمكن أن يتراوح Nice بين 2-273 بايت. تميل القيم الأعلى لإعطاء نسبة ضغط أفضل على حساب السرعة. يعتمد الإعداد المبدئي على الإعداد المسبق.
- depth=depth
- حدد أقصى عمق للبحث في باحث التطابق. القيمة المبدئية هي القيمة الخاصة 0، التي تجعل الضاغط يحدد عمقاً (depth) معقولاً بناءً على mf و nice.
- العمق (depth) المعقول لسلاسل الهاش هو 4-100 وللأشجار الثنائية هو 16-1000. استخدام قيم عالية جداً لـ depth قد يجعل المشفر بطيئاً للغاية مع بعض الملفات. تجنب ضبط depth فوق 1000 إلا إذا كنت مستعداً لمقاطعة عملية الضغط في حال استغرقت وقتاً طويلاً جداً.
- عند فك ترميز التدفقات الخام (--format=raw)، يحتاج LZMA2 فقط إلى حجم القاموس. يحتاج LZMA1 أيضاً إلى lc و lp و pb.
- --x86[=خيارات]
- --arm[=خيارات]
- --armthumb[=خيارات]
- --arm64[=خيارات]
- --powerpc[=خيارات]
- --ia64[=خيارات]
- --sparc[=خيارات]
- --riscv[=خيارات]
- أضف مرشح فرع/استدعاء/قفز (BCJ) إلى تسلسل المرشحات. يمكن استخدام هذه المرشحات فقط كمرشح غير أخير في تسلسل المرشحات.
- يقوم مرشح BCJ بتحويل العناوين النسبية في كود الآلة إلى نظرائها المطلقة. هذا لا يغير حجم البيانات ولكنه يزيد التكرار، مما يساعد LZMA2 على إنتاج ملف .xz أصغر بنسبة 0-15%. مرشحات BCJ دائماً قابلة للعكس، لذا فإن استخدام مرشح BCJ لنوع خاطئ من البيانات لا يسبب أي فقدان للبيانات، رغم أنه قد يجعل نسبة الضغط أسوأ قليلاً. مرشحات BCJ سريعة جداً وتستهلك كمية ضئيلة من الذاكرة.
- هناك مشاكل معروفة لمرشحات BCJ تتعلق بنسبة الضغط:
- بعض أنواع الملفات التي تحتوي على كود قابل للتنفيذ (مثل ملفات الكائنات، والمكتبات الساكنة، ووحدات نواة Linux) تحتوي على عناوين في التعليمات مملوءة بقيم حشو. ستستمر مرشحات BCJ هذه في إجراء تحويل العناوين، مما يجعل الضغط أسوأ مع هذه الملفات.
- إذا طُبق مرشح BCJ على أرشيف، فمن المحتمل أن يجعل نسبة الضغط أسوأ مما لو لم يُستخدم. على سبيل المثال، إذا كانت هناك ملفات تنفيذية متشابهة أو حتى متطابقة، فإن الترشيح سيجعل الملفات أقل تشابهاً وبالتالي يكون الضغط أسوأ. محتويات الملفات غير القابلة للتنفيذ في نفس الأرشيف قد تؤثر أيضاً. في الممارسة العملية، يجب التجربة مع وبدون مرشح BCJ لمعرفة أيهما أفضل في كل حالة.
- مجموعات التعليمات المختلفة لها محاذاة مختلفة: يجب محاذاة الملف القابل للتنفيذ إلى مضاعف لهذه القيمة في بيانات الإدخال ليعمل المرشح.
| المرشح | المحاذاة | ملاحظات |
| x86 | 1 | 32-بت أو 64-بت x86 |
| ARM | 4 | |
| ARM-Thumb | 2 | |
| ARM64 | 4 | محاذاة 4096 بايت هي الأفضل |
| PowerPC | 4 | Big endian فقط |
| 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" تظهر في سطر "Flags".
- ARM64 دائماً محاذى لـ 4 بايت لذا pb=2,lp=2,lc=2 هو الأفضل.
- مرشح x86 استثناء. من الجيد عادةً الالتزام بإعدادات LZMA2 المبدئية (pb=2,lp=0,lc=3) عند ضغط ملفات x86 التنفيذية.
- كل مرشحات BCJ تدعم نفس الـ خيارات:
- start=إزاحة
- حدد إزاحة البداية المستخدمة عند التحويل بين العناوين النسبية والمطلقة. يجب أن تكون الـ إزاحة مضاعفاً لمحاذاة المرشح (انظر الجدول أعلاه). القيمة المبدئية هي صفر. عملياً، القيمة المبدئية جيدة؛ تحديد إزاحة مخصصة ليس مفيداً تقريباً.
- --delta[=خيارات]
- أضف مرشح دلتا إلى تسلسل المرشحات. يمكن استخدام مرشح دلتا فقط كمرشح غير أخير في تسلسل المرشحات.
- حالياً، الحساب البسيط للدلتا لكل بايت هو المدعوم فقط. يمكن أن يكون مفيداً عند ضغط صور bitmap غير المضغوطة أو صوت PCM غير المضغوط مثلاً. ومع ذلك، قد تعطي خوارزميات مخصصة نتائج أفضل بكثير من دلتا + 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 مرتين سيعطي مخرجات أكثر إسهاباً.
- يعرض مؤشر التقدم المعلومات التالية:
- تظهر نسبة الإكمال إذا كان حجم ملف الإدخال معروفاً. أي أن النسبة لا يمكن عرضها في الأنابيب (pipes).
- كمية البيانات المضغوطة المنتجة (عند الضغط) أو المستهلكة (عند فك الضغط).
- كمية البيانات غير المضغوطة المستهلكة (عند الضغط) أو المنتجة (عند فك الضغط).
- نسبة الضغط، وتُحسب بقسمة كمية البيانات المضغوطة المعالجة حتى الآن على كمية البيانات غير المضغوطة المعالجة حتى الآن.
- سرعة الضغط أو فك الضغط. تُقاس بكمية البيانات غير المضغوطة المستهلكة (ضغط) أو المنتجة (فك ضغط) في الثانية. تظهر بعد مرور بضع ثوانٍ على بدء xz في معالجة الملف.
- الوقت المنقضي بتنسيق M:SS أو H:MM:SS.
- يظهر الوقت المتبقي المقدر فقط عندما يكون حجم ملف الإدخال معروفاً وبعد مرور ثانيتين على بدء xz في معالجة الملف. يظهر الوقت بتنسيق أقل دقة لا يحتوي أبداً على نقطتين رأسيتين، مثلاً، 2 min 30 s.
- عندما لا يكون الخطأ القياسي طرفية، سيجعل --verbose أداة xz تطبع اسم الملف، والحجم المضغوط، والحجم غير المضغوط، ونسبة الضغط، وربما أيضاً السرعة والوقت المنقضي في سطر واحد إلى الخطأ القياسي بعد ضغط أو فك ضغط الملف. تُدرج السرعة والوقت المنقضي فقط عندما تستغرق العملية بضع ثوانٍ على الأقل. إذا لم تنتهِ العملية، بسبب مقاطعة المستخدم مثلاً، تُطبع أيضاً نسبة الإكمال إذا كان حجم ملف الإدخال معروفاً.
- -Q, --no-warn
- لا تضبط حالة الخروج على 2 حتى لو اكتُشفت حالة تستحق التحذير. لا يؤثر هذا الخيار على مستوى الإسهاب، لذا يجب استخدام كل من --quiet و --no-warn معاً لعدم عرض التحذيرات وعدم تغيير حالة الخروج.
- --robot
- اطبع الرسائل بتنسيق قابل للتحليل آلياً. الهدف من ذلك هو تسهيل كتابة واجهات تريد استخدام xz بدلاً من liblzma، كما قد يكون الحال مع السكربتات المختلفة. المخرجات مع تمكين هذا الخيار يُفترض أن تكون مستقرة عبر إصدارات xz. انظر قسم ROBOT MODE للتفاصيل.
- --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 مخرجات مفصولة بعلامات جدولة (tabs). يحتوي العمود الأول من كل سطر على سلسلة نصية تشير إلى نوع المعلومات الموجودة في ذلك السطر:
- name (الاسم)
- هذا دائماً هو السطر الأول عند البدء في سرد ملف. العمود الثاني في السطر هو اسم الملف.
- file (الملف)
- يحتوي هذا السطر على معلومات عامة حول ملف .xz. يُطبع هذا السطر دائماً بعد سطر name.
- stream (التدفق)
- يُستخدم نوع السطر هذا فقط عند تحديد --verbose. يوجد من أسطر stream بعدد التدفقات الموجودة في ملف .xz.
- block (الكتلة)
- يُستخدم نوع السطر هذا فقط عند تحديد --verbose. يوجد من أسطر block بعدد الكتل الموجودة في ملف .xz. تظهر أسطر block بعد كل أسطر stream؛ ولا تتداخل أنواع الأسطر المختلفة.
- summary (الملخص)
- يُستخدم نوع السطر هذا فقط عند تحديد --verbose مرتين. يُطبع هذا السطر بعد كل أسطر block. مثل سطر file، يحتوي سطر summary على معلومات عامة حول ملف .xz.
- totals (الإجماليات)
- هذا السطر هو دائماً السطر الأخير تماماً في مخرجات القائمة. يعرض الأعداد والأحجام الإجمالية.
أعمدة أسطر file:
- 2.
- عدد التدفقات في الملف
- 3.
- إجمالي عدد الكتل في التدفق (التدفقات)
- 4.
- الحجم المضغوط للملف
- 5.
- الحجم غير المضغوط للملف
- 6.
- نسبة الضغط، مثلاً 0.123. إذا كانت النسبة فوق 9.999، تُعرض ثلاث شرطات (---) بدلاً من النسبة.
- 7.
- قائمة مفصولة بفواصل لأسماء فحوصات السلامة. تُستخدم السلاسل التالية لأنواع الفحص المعروفة: None، CRC32، CRC64، و SHA-256. لأنواع الفحص غير المعروفة، يُستخدم Unknown-N، حيث N هو معرّف الفحص كرقم عشري (رقم واحد أو رقمان).
- 8.
- إجمالي حجم حشو التدفق في الملف
أعمدة أسطر stream:
- 2.
- رقم التدفق (التدفق الأول هو 1)
- 3.
- عدد الكتل في التدفق
- 4.
- إزاحة البداية المضغوطة
- 5.
- إزاحة البداية غير المضغوطة
- 6.
- الحجم المضغوط (لا يشمل حشو التدفق)
- 7.
- الحجم غير المضغوط
- 8.
- نسبة الضغط
- 9.
- اسم فحص السلامة
- 10.
- حجم حشو التدفق
أعمدة أسطر block:
- 2.
- رقم التدفق الذي يحتوي على هذه الكتلة
- 3.
- رقم الكتلة بالنسبة لبداية التدفق (الكتلة الأولى هي 1)
- 4.
- رقم الكتلة بالنسبة لبداية الملف
- 5.
- إزاحة البداية المضغوطة بالنسبة لبداية الملف
- 6.
- إزاحة البداية غير المضغوطة بالنسبة لبداية الملف
- 7.
- إجمالي الحجم المضغوط للكتلة (يشمل الترويسات)
- 8.
- الحجم غير المضغوط
- 9.
- نسبة الضغط
- 10.
- اسم فحص السلامة
إذا حُدد --verbose مرتين، تضاف أعمدة إضافية في أسطر block. لا تُعرض هذه الأعمدة مع --verbose واحدة، لأن الحصول عليها يتطلب عمليات بحث (seeks) كثيرة وبالتالي قد يكون بطيئاً:
- 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.
إذا حُدد --verbose مرتين، تضاف أعمدة إضافية في سطر totals:
- 10.
- أقصى مقدار للذاكرة (بالبايت) المطلوبة لفك ضغط الملفات باستخدام إصدار xz هذا
- 11.
- yes أو no للإشارة إلى ما إذا كانت كل ترويسات الكتل تحتوي على الحجم المضغوط وغير المضغوط مخزنين فيها
منذ xz 5.1.2alpha:
- 12.
- أقل إصدار xz مطلوب لفك ضغط الملف
قد تضيف الإصدارات المستقبلية أنواع أسطر جديدة وأعمدة جديدة للأنواع الحالية، لكن الأعمدة الحالية لن تتغير.
مساعدة المرشحات
تطبع xz --robot --filters-help المرشحات المدعومة بالتنسيق التالي:
المرشح:الخيار=<القيمة>,الخيار=<القيمة>...
- filter (المرشح)
- اسم المرشح
- option (الخيار)
- اسم خيار خاص بالمرشح
- value (القيمة)
- تظهر نطاقات الـ القيمة الرقمية كـ <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) المستخدم أيضاً لوسائط سطر الأوامر.
تحذير: بضبط متغيرات البيئة هذه، فإنك تقوم فعلياً بتعديل البرامج والسكربتات التي تشغل xz. في معظم الأوقات يكون من الآمن ضبط حدود استهلاك الذاكرة، وعدد الخيوط، وخيارات الضغط عبر متغيرات البيئة. ومع ذلك، يمكن لبعض الخيارات أن تعطل السكربتات. مثال واضح هو --help الذي يجعل xz يعرض نص المساعدة بدلاً من ضغط أو فك ضغط الملف. أمثلة أكثر دقة هي --quiet و --verbose. في كثير من الحالات يعمل تمكين مؤشر التقدم باستخدام --verbose بشكل جيد، ولكن في بعض المواقف تسبب الرسائل الإضافية مشاكل. كما يؤثر مستوى الإسهاب على سلوك --list.
- 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
تُعد صيغة سطر أوامر xz عملياً مجموعة فوقية لكل من lzma، وunlzma، وlzcat كما هي موجودة في أدوات LZMA إصدار 4.32.x. في معظم الحالات، يمكن استبدال أدوات LZMA بأدوات XZ دون كسر البرامج النصية الموجودة. ومع ذلك، توجد بعض أوجه عدم التوافق التي قد تسبب مشاكل أحياناً.
مستويات الضبط المسبق للضغط
ترقيم مستويات الضبط المسبق للضغط ليس متطابقاً في xz وأدوات LZMA. الاختلاف الأهم هو كيفية تعيين أحجام القواميس لمختلف مستويات الضبط. حجم القاموس يساوي تقريباً استهلاك الذاكرة عند فك الضغط.
| المستوى | xz | أدوات LZMA |
| -0 | 256 كيلوبايت | غير متاح |
| -1 | 1 ميجابايت | 64 ك.بايت |
| -2 | 2 ميجابايت | 1 ميجابايت |
| -3 | 4 ميجابايت | 512 ك.بايت |
| -4 | 4 ميجابايت | 1 ميجابايت |
| -5 | 8 ميجابايت | 2 ميجابايت |
| -6 | 8 ميجابايت | 4 ميجابايت |
| -7 | 16 ميجابايت | 8 ميجابايت |
| -8 | 32 ميجابايت | 16 ميجابايت |
| -9 | 64 ميجابايت | 32 ميجابايت |
تؤثر اختلافات حجم القاموس على استهلاك ذاكرة الضاغط أيضاً، ولكن توجد اختلافات أخرى بين أدوات LZMA وأدوات XZ تجعل الفارق أكبر:
| المستوى | xz | أدوات LZMA إصدار 4.32.x |
| -0 | 3 ميجابايت | غير متاح |
| -1 | 9 ميجابايت | 2 ميجابايت |
| -2 | 17 ميجابايت | 12 م.بايت |
| -3 | 32 ميجابايت | 12 م.بايت |
| -4 | 48 ميجابايت | 16 ميجابايت |
| -5 | 94 ميجابايت | 26 م.بايت |
| -6 | 94 ميجابايت | 45 م.بايت |
| -7 | 186 ميجابايت | 83 م.بايت |
| -8 | 370 ميجابايت | 159 م.بايت |
| -9 | 674 ميجابايت | 311 م.بايت |
مستوى الضبط المبدئي في أدوات LZMA هو -7 بينما في أدوات XZ هو -6، لذا كلاهما يستخدم قاموساً بحجم 8 م.بايت بشكل مبدئي.
ملفات lzma. المتدفقة مقابل غير المتدفقة
يمكن تخزين الحجم غير المضغوط للملف في ترويسة .lzma. تقوم أدوات LZMA بذلك عند ضغط الملفات العادية. البديل هو وسم الحجم غير المضغوط بأنه غير معروف واستخدام علامة نهاية الحمولة للإشارة إلى المكان الذي يجب أن يتوقف عنده فك الضغط. تستخدم أدوات LZMA هذه الطريقة عندما يكون الحجم غير المضغوط غير معروف، كما هو الحال مثلاً في الأنابيب.
يدعم xz فك ضغط ملفات .lzma بوجود علامة نهاية الحمولة أو بدونها، لكن جميع ملفات .lzma التي ينشئها xz تستخدم علامة نهاية الحمولة ويكون الحجم غير المضغوط فيها موسوماً بأنه غير معروف في الترويسة. قد يسبب هذا مشكلة في بعض الحالات غير الشائعة. مثلاً، قد يعمل مفكك ضغط .lzma في جهاز مدمج فقط مع الملفات ذات الحجم غير المضغوط المعروف. إذا واجهت هذه المشكلة، تحتاج لاستخدام أدوات LZMA أو LZMA SDK لإنشاء ملفات .lzma بحجم غير مضغوط معروف.
ملفات lzma. غير المدعومة
تسمح صيغة .lzma بقيم lc تصل إلى 8، وقيم lp تصل إلى 4. يمكن لأدوات LZMA فك ضغط الملفات بأي قيم lc وlp، لكنها تنشئ دائماً ملفات بـ lc=3 وlp=0. إنشاء ملفات بقيم lc وlp أخرى متاح عبر xz وعبر LZMA SDK.
يتطلب تنفيذ مرشح LZMA1 في liblzma ألا يتجاوز مجموع lc وlp القيمة 4. لذا، لا يمكن فك ضغط ملفات .lzma التي تتجاوز هذا القيد باستخدام xz.
تنشئ أدوات LZMA ملفات .lzma فقط بأحجام قواميس هي 2^n (قوة للعدد 2) لكنها تقبل الملفات بأي حجم قاموس. تقبل liblzma فقط ملفات .lzma التي يكون حجم قاموسها 2^n أو 2^n + 2^(n-1). الهدف من ذلك هو تقليل الإيجابيات الخاطئة عند الكشف عن ملفات .lzma.
يُفترض ألا تمثل هذه القيود مشكلة من الناحية العملية، حيث أن جميع ملفات .lzma تقريباً ضُغطت بإعدادات تقبلها liblzma.
مخلفات لاحقة
عند فك الضغط، تتجاهل أدوات LZMA بصمت كل شيء بعد تدفق .lzma الأول. في معظم الحالات، يُعد هذا خطأ برمجياً. يعني هذا أيضاً أن أدوات LZMA لا تدعم فك ضغط ملفات .lzma المتسلسلة.
إذا تبقى بيانات بعد تدفق .lzma الأول، يعتبر xz الملف تالفاً إلا إذا استخدم خيار --single-stream. قد يؤدي هذا لكسر البرامج النصية الغامضة التي افترضت تجاهل المخلفات اللاحقة.
ملاحظات
قد يختلف المخرج المضغوط
قد يختلف المخرج المضغوط بدقة والناتج عن نفس ملف المدخلات غير المضغوط بين إصدارات أدوات XZ حتى لو كانت خيارات الضغط متطابقة. يرجع ذلك إلى إمكانية تحسين المرمز (ضغط أسرع أو أفضل) دون التأثير على صيغة الملف. يمكن أن يختلف المخرج حتى بين البناءات المختلفة لنفس إصدار أدوات XZ، في حال استخدام خيارات بناء مختلفة.
ما سبق يعني أنه بمجرد تنفيذ --rsyncable، لن تكون الملفات الناتجة بالضرورة قابلة لـ rsync ما لم تُضغط الملفات القديمة والجديدة بنفس إصدار xz. يمكن حل هذه المشكلة إذا جُمد جزء من تنفيذ المرمز للحفاظ على استقرار مخرج rsync عبر إصدارات xz.
مفكات ضغط xz. المدمجة
تنفيذات مفكك ضغط .xz المدمجة مثل XZ Embedded لا تدعم بالضرورة الملفات المنشأة بأنواع فحص سلامة (check) غير 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 م.بايت و5 م.بايت على التوالي):
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 "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
سلاسل مرشحات ضاغط مخصصة
أبسط استخدام لسلاسل المرشحات المخصصة هو تخصيص ضبط LZMA2 مسبق. يمكن أن يكون هذا مفيداً لأن عمليات الضبط المسبق تغطي فقط مجموعة فرعية من مجموعات إعدادات الضغط المفيدة المحتملة.
تُعد أعمدة CompCPU في الجداول الموجودة في أوصاف الخيارات -0 ... -9 و--extreme مفيدة عند تخصيص إعدادات LZMA2 المسبقة. إليك الأجزاء ذات الصلة المجموعة من هذين الجدولين:
| المستوى | معالج الضغط |
| -0 | 0 |
| -1 | 1 |
| -2 | 2 |
| -3 | 3 |
| -4 | 4 |
| -5 | 5 |
| -6 | 6 |
| -5e | 7 |
| -6e | 8 |
إذا كنت تعرف أن ملفاً يتطلب قاموساً كبيراً نوعاً ما (مثلاً 32 م.بايت) ليُضغط جيداً، ولكنك تريد ضغطه بشكل أسرع مما يفعله xz -8، يمكن تعديل ضبط مسبق بقيمة CompCPU منخفضة (مثلاً 1) لاستخدام قاموس أكبر:
xz --lzma2=preset=1,dict=32MiB foo.tar
مع ملفات معينة، قد يكون الأمر أعلاه أسرع من xz -6 مع ضغط أفضل بكثير. ومع ذلك، يجب التأكيد على أن بعض الملفات فقط تستفيد من قاموس كبير مع إبقاء قيمة CompCPU منخفضة. الحالة الأكثر وضوحاً التي يمكن أن يساعد فيها قاموس كبير هي أرشيف يحتوي ملفات متشابهة جداً حجم كل منها بضعة ميجابايتات على الأقل. يجب أن يكون حجم القاموس أكبر بكثير من أي ملف فردي للسماح لـ LZMA2 بالاستفادة الكاملة من أوجه التشابه بين الملفات المتتالية.
إذا كان استهلاك الذاكرة العالي جداً للضاغط ومفكك الضغط مقبولاً، وكان الملف المضغوط لا يقل عن عدة مئات من الميجابايتات، فقد يكون من المفيد استخدام قاموس أكبر حتى من 64 م.بايت التي يستخدمها xz -9:
xz -vv --lzma2=dict=192MiB big_foo.tar
يمكن أن يكون استخدام -vv (أي --verbose --verbose) كما في المثال أعلاه مفيداً لرؤية متطلبات الذاكرة للضاغط ومفكك الضغط. تذكر أن استخدام قاموس أكبر من حجم الملف غير المضغوط هو هدر للذاكرة، لذا فإن الأمر أعلاه ليس مفيداً للملفات الصغيرة.
أحياناً لا يهم وقت الضغط، ولكن يجب الحفاظ على انخفاض استهلاك ذاكرة مفكك الضغط، مثلاً لجعل فك ضغط الملف ممكناً على نظام مدمج. يستخدم الأمر التالي -6e (أي -6 --extreme) كقاعدة ويضبط القاموس على 64 ك.بايت فقط. يمكن فك ضغط الملف الناتج باستخدام XZ Embedded (لهذا السبب يوجد --check=crc32) باستخدام حوالي 100 ك.بايت من الذاكرة.
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 لا يمكن استخدامه كآخر مرشح في السلسلة.
يمكن لمرشح دلتا مع LZMA2 إعطاء نتائج جيدة مع الصور النقطية. يُفترض أن يتفوق عادةً على PNG، التي تملك مرشحات أكثر تقدماً من دلتا البسيط ولكنها تستخدم Deflate للضغط الفعلي.
يجب حفظ الصورة بصيغة غير مضغوطة، مثلاً كـ TIFF غير مضغوط. تُضبط معلمة المسافة (distance) لمرشح دلتا لتطابق عدد البايتات لكل بكسل في الصورة. مثلاً، تحتاج الصورة النقطية RGB بـ 24 بتة إلى dist=3، ومن الجيد أيضاً تمرير pb=0 لـ LZMA2 لمواءمة محاذاة الثلاثة بايتات:
xz --delta=dist=3 --lzma2=pb=0 foo.tiff
إذا وضعت صور متعددة في أرشيف واحد (مثلاً tar.)، سيعمل مرشح دلتا على ذلك أيضاً طالما أن جميع الصور لها نفس عدد البايتات لكل بكسل.
انظر أيضاً
xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1)
أدوات XZ:
https://tukaani.org/xz/
XZ Embedded: https://tukaani.org/xz/embedded.html
LZMA SDK: https://7-zip.org/sdk.html
| 2025-03-08 | توكاني |