bzip2(1)

الاسم
bzip2, bunzip2 - ضاغط ملفات بفرز الكتل، الإصدارة 1.0.8
bzcat - يفك ضغط الملفات إلى الخرج القياسي
bzip2recover - يستعيد البيانات من ملفات bzip2 المعطوبة

موجز
bzip2 [ -cdfkqstvzVL123456789 ] [ أسماء_الملفات ... ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ أسماء_الملفات ... ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ أسماء_الملفات ... ]
bzcat [ -h|--help ]
bzip2recover اسم_الملف

الوصف
يضغط bzip2 الملفات باستخدام خوارزمية Burrows-Wheeler لفرز الكتل، وترميز Huffman. يعد الضغط عمومًا أفضل بكثير مما تحققه الضواغط التقليدية القائمة على LZ77/LZ78، ويقترب من أداء عائلة PPM من الضواغط الإحصائية.

خيارات سطر الأوامر تشبه عمدًا خيارات GNU gzip، لكنها ليست متطابقة.

يتوقع bzip2 قائمة بأسماء الملفات لتصاحب أعلام سطر الأوامر. يُستبدل كل ملف بنسخة مضغوطة منه، بالاسم "original_name.bz2". يمتلك كل ملف مضغوط نفس تاريخ التعديل، والأذونات، والملكية (إن أمكن) مثل الملف الأصلي المقابل، بحيث يمكن استعادة هذه الخصائص بشكل صحيح عند فك الضغط. معالجة أسماء الملفات بدائية بمعنى أنه لا توجد آلية للحفاظ على أسماء الملفات الأصلية أو الأذونات أو الملكيات أو التواريخ في أنظمة الملفات التي تفتقر إلى هذه المفاهيم، أو التي لديها قيود شديدة على طول اسم الملف، مثل MS-DOS.

لن يقوم bzip2 و bunzip2 مبدئيًا بالكتابة فوق الملفات الموجودة. إذا كنت تريد حدوث ذلك، فحدد العلم -f.

إذا لم تُحدد أسماء ملفات، يضغط bzip2 من الدخل القياسي إلى الخرج القياسي. في هذه الحالة، سيرفض bzip2 كتابة الخرج المضغوط إلى الطرفية، لأن هذا سيكون غير مفهوم تمامًا وبالتالي عديم الفائدة.

يفك bunzip2 (أو bzip2 -d) ضغط جميع الملفات المحددة. تكتشف الملفات التي لم تُنشأ بواسطة bzip2 وتُتجاهل، ويُصدر تحذير. يحاول bzip2 تخمين اسم الملف للملف المفكوك من اسم الملف المضغوط كالتالي:

       filename.bz2 يصبح filename
       filename.bz يصبح filename
       filename.tbz2 يصبح filename.tar
       filename.tbz يصبح filename.tar
       anyothername يصبح anyothername.out

إذا لم ينتهِ الملف بإحدى النهايات المعروفة، وهي .bz2، .bz، .tbz2 أو .tbz، سيشتكي bzip2 من أنه لا يستطيع تخمين اسم الملف الأصلي، ويستخدم الاسم الأصلي مع إلحاق .out به.

كما هو الحال مع الضغط، فإن عدم تقديم أسماء ملفات يؤدي إلى فك الضغط من الدخل القياسي إلى الخرج القياسي.

سيفك bunzip2 ضغط ملف ناتج عن دمج ملفين مضغوطين أو أكثر بشكل صحيح. تكون النتيجة هي دمج الملفات غير المضغوطة المقابلة. يُدعم أيضًا اختبار السلامة (-t) للملفات المضغوطة المدمجة.

يمكنك أيضًا ضغط أو فك ضغط الملفات إلى الخرج القياسي باستخدام العلم -c. يمكن ضغط وفك ضغط عدة ملفات بهذه الطريقة. تُغذى المخرجات الناتجة بالتتابع إلى stdout. يؤدي ضغط عدة ملفات بهذه الطريقة إلى إنشاء دفق يحتوي على تمثيلات متعددة للملفات المضغوطة. لا يمكن فك ضغط هذا الدفق بشكل صحيح إلا بواسطة bzip2 الإصدارة 0.9.0 أو أحدث. ستتوقف الإصدارات الأقدم من bzip2 بعد فك ضغط أول ملف في الدفق.

يفك bzcat (أو bzip2 -dc) ضغط جميع الملفات المحددة إلى الخرج القياسي.

سيقرأ bzip2 المعاملات من متغيرات البيئة BZIP2 و BZIP، بهذا الترتيب، وسيعالجها قبل أي معاملات تُقرأ من سطر الأوامر. يوفر هذا طريقة مريحة لتقديم المعاملات المبدئية.

يُجرى الضغط دائمًا، حتى لو كان الملف المضغوط أكبر قليلاً من الأصلي. تميل الملفات التي يقل حجمها عن مائة بايت تقريبًا إلى أن تصبح أكبر، حيث أن آلية الضغط لها حمل إضافي ثابت في حدود 50 بايت. تُرمز البيانات العشوائية (بما في ذلك مخرجات معظم ضواغط الملفات) بحوالي 8.05 بت لكل بايت، مما يعطي توسعًا بنسبة 0.5% تقريبًا.

كفحص ذاتي لحمايتك، يستخدم bzip2 رموز CRC بطول 32 بت للتأكد من أن النسخة المفكوك ضغطها من الملف مطابقة للأصل. هذا يحمي من تلف البيانات المضغوطة، ومن العلل غير المكتشفة في bzip2 (وهو أمر مستبعد جدًا نرجو ذلك). إن فرص عدم اكتشاف تلف البيانات مجهرية، حوالي فرصة واحدة من أصل أربعة مليارات لكل ملف تتم معالجته. انتبه، مع ذلك، إلى أن الفحص يحدث عند فك الضغط، لذا لا يمكنه إخبارك إلا بوجود خطأ ما. لا يمكنه مساعدتك في استعادة البيانات الأصلية غير المضغوطة. يمكنك استخدام bzip2recover لمحاولة استعادة البيانات من الملفات المعطوبة.

قيم الإرجاع: 0 للخروج العادي، 1 لمشاكل البيئة (ملف غير موجود، أعلام غير صالحة، أخطاء دخل/خرج، إلخ)، 2 للإشارة إلى ملف مضغوط فاسد، 3 لخطأ داخلي في الاتساق (مثل علة) تسبب في ذعر bzip2.

الخيارات

-c --stdout
    ضغط أو فك ضغط إلى الخرج القياسي.

-d --decompress
    فرض فك الضغط. إن bzip2، و bunzip2 و bzcat هي في الواقع نفس البرنامج، ويُتخذ القرار بشأن الإجراءات التي يجب اتخاذها بناءً على الاسم المستخدم. يتجاوز هذا العلم تلك الآلية، ويجبر bzip2 على فك الضغط.

-z --compress
    المكمل لـ -d: يفرض الضغط، بغض النظر عن اسم الاستدعاء.

-t --test
    فحص سلامة الملف (الملفات) المحددة، ولكن دون فك ضغطها. يؤدي هذا فعليًا عملية فك ضغط تجريبية ويتخلص من النتيجة.

-f --force
    فرض الكتابة فوق ملفات الخرج. عادةً، لن يقوم bzip2 بالكتابة فوق ملفات الخرج الموجودة. كما يجبر bzip2 على كسر الروابط الصلبة للملفات، وهو ما لن يفعله بخلاف ذلك.

    يرفض bzip2 عادةً فك ضغط الملفات التي لا تحتوي على بايتات الترويسة السحرية الصحيحة. ومع ذلك، إذا فُرض عليه ذلك (-f)، فإنه سيمرر هذه الملفات دون تعديل. هذا هو سلوك GNU gzip.

-k --keep
    الاحتفاظ بملفات الدخل (عدم حذفها) أثناء الضغط أو فك الضغط.

-s --small
    تقليل استخدام الذاكرة، للضغط وفك الضغط والاختبار. تُفك ضغط الملفات وتُختبر باستخدام خوارزمية معدلة تتطلب فقط 2.5 بايت لكل بايت من الكتلة. وهذا يعني أنه يمكن فك ضغط أي ملف في 2300 كيلو بايت من الذاكرة، وإن كان ذلك بنصف السرعة العادية تقريبًا.

    أثناء الضغط، يختار -s حجم كتلة يبلغ 200 كيلو بايت، مما يحد من استخدام الذاكرة إلى نفس الرقم تقريبًا، على حساب نسبة الضغط الخاصة بك. باختصار، إذا كان حاسوبك يفتقر إلى الذاكرة (8 ميجابايت أو أقل)، فاستخدم -s لكل شيء. راجع إدارة الذاكرة أدناه.

-q --quiet
    كتم رسائل التحذير غير الضرورية. لن تُكتم الرسائل المتعلقة بأخطاء الدخل/الخرج والأحداث الحرجة الأخرى.

-v --verbose
    الوضع المسهب -- إظهار نسبة الضغط لكل ملف جرت معالجته. تزيد أعلام -v الإضافية من مستوى الإسهاب، مما يخرج الكثير من المعلومات التي تهم أغراض التشخيص بشكل رئيس.

-h --help
    اطبع رسالة مساعدة ثم اخرج.

-L --license -V --version
    عرض إصدارة البرنامج، وشروط وأحكام الترخيص.

-1 (أو --fast) إلى -9 (أو --best)
    ضبط حجم الكتلة على 100 كيلو، 200 كيلو ... 900 كيلو بايت عند الضغط. ليس له تأثير عند فك الضغط. راجع إدارة الذاكرة أدناه. إن الأسماء المستعارة --fast و --best هي في الأساس من أجل التوافق مع GNU gzip. على وجه الخصوص، لا تجعل --fast الأشياء أسرع بشكل ملحوظ. كما تختار --best السلوك المبدئي فحسب.

--  يعامل جميع المعاملات اللاحقة كأسماء ملفات، حتى لو كانت تبدأ بشرطة. هذا يتيح لك التعامل مع الملفات التي تبدأ أسماؤها بشرطة، على سبيل المثال: bzip2 -- -myfilename.

--repetitive-fast --repetitive-best
    هذه الأعلام زائدة عن الحاجة في الإصدارات 0.9.5 وما فوق. لقد وفرت بعض التحكم التقريبي في سلوك خوارزمية الفرز في الإصدارات السابقة، وهو ما كان مفيدًا أحيانًا. تمتلك الإصدارات 0.9.5 وما فوق خوارزمية محسنة تجعل هذه الأعلام غير ذات صلة.

إدارة الذاكرة
يضغط bzip2 الملفات الكبيرة في كتل. يؤثر حجم الكتلة على كل من نسبة الضغط المحققة، ومقدار الذاكرة المطلوبة للضغط وفك الضغط. تحدد الأعلام من -1 إلى -9 حجم الكتلة ليكون من 100,000 بايت إلى 900,000 بايت (المبدئي) على التوالي. في وقت فك الضغط، يُقرأ حجم الكتلة المستخدم للضغط من ترويسة الملف المضغوط، ثم يخصص bunzip2 لنفسه ذاكرة كافية فقط لفك ضغط الملف. بما أن أحجام الكتل تُخزن في الملفات المضغوطة، يترتب على ذلك أن الأعلام من -1 إلى -9 غير صالحة وبالتالي تُتجاهل أثناء فك الضغط.

يمكن تقدير متطلبات الضغط وفك الضغط، بالبايت، كالتالي:

       الضغط: 400 كيلو + ( 8 × حجم_الكتلة )

       فك الضغط: 100 كيلو + ( 4 × حجم_الكتلة )، أو
                      100 كيلو + ( 2.5 × حجم_الكتلة )

تعطي أحجام الكتل الأكبر عوائد هامشية تتناقص بسرعة. يأتي معظم الضغط من أول مائتين أو ثلاثمائة كيلو بايت من حجم الكتلة، وهي حقيقة تستحق وضعها في الاعتبار عند استخدام bzip2 على حواسيب صغيرة. من المهم أيضًا إدراك أن متطلبات ذاكرة فك الضغط تُحدد في وقت الضغط من خلال اختيار حجم الكتلة.

بالنسبة للملفات المضغوطة بحجم الكتلة المبدئي البالغ 900 كيلو بايت، سيتطلب bunzip2 حوالي 3700 كيلو بايت لفك الضغط. لدعم فك ضغط أي ملف على حاسوب بذاكرة 4 ميجابايت، يتوفر لـ bunzip2 خيار لفك الضغط باستخدام نصف هذا المقدار تقريبًا من الذاكرة، حوالي 2300 كيلو بايت. تتقلص سرعة فك الضغط أيضًا إلى النصف، لذا يجب استخدام هذا الخيار عند الضرورة فقط. العلم ذو الصلة هو -s.

بشكل عام، حاول استخدام أكبر حجم كتلة تسمح به قيود الذاكرة، لأن ذلك يزيد من الضغط المحقق. سرعة الضغط وفك الضغط لا تتأثر تقريبًا بحجم الكتلة.

نقطة هامة أخرى تنطبق على الملفات التي تتسع في كتلة واحدة -- وهذا يعني معظم الملفات التي قد تواجهها باستخدام حجم كتلة كبير. يتناسب مقدار الذاكرة الحقيقية المستخدمة مع حجم الملف، لأن الملف أصغر من الكتلة. على سبيل المثال، سيؤدي ضغط ملف طوله 20,000 بايت بالعلم -9 إلى قيام الضاغط بتخصيص حوالي 7600 كيلو بايت من الذاكرة، ولكنه لن يستخدم سوى 400 كيلو + 20,000 * 8 = 560 كيلو بايت منها. وبالمثل، سيخصص فك الضغط 3700 كيلو بايت ولكنه سيستخدم 100 كيلو + 20,000 * 4 = 180 كيلو بايت فقط.

إليك جدول يلخص الحد الأقصى لاستخدام الذاكرة لأحجام الكتل المختلفة. سُجل أيضًا إجمالي الحجم المضغوط لـ 14 ملفًا من Calgary Text Compression Corpus بإجمالي 3,141,622 بايت. يعطي هذا العمود فكرة عن كيفية تفاوت الضغط مع حجم الكتلة. تميل هذه الأرقام إلى التقليل من ميزة أحجام الكتل الأكبر للملفات الأكبر، لأن المجموعة تهيمن عليها الملفات الأصغر.

           استخدام استخدام استخدام حجم
    العلم الضغط فك الضغط فك الضغط -s المجموعة

     -1 1200k 500k 350k 914704
     -2 2000k 900k 600k 877703
     -3 2800k 1300k 850k 860338
     -4 3600k 1700k 1100k 846899
     -5 4400k 2100k 1350k 845160
     -6 5200k 2500k 1600k 838626
     -7 6100k 2900k 1850k 834096
     -8 6800k 3300k 2100k 828642
     -9 7600k 3700k 2350k 828642

استعادة البيانات من الملفات المعطوبة
يضغط bzip2 الملفات في كتل، يبلغ طولها عادةً 900 كيلو بايت. تُعالج كل كتلة بشكل مستقل. إذا تسبب خطأ في الوسائط أو الإرسال في تلف ملف .bz2 متعدد الكتل، فقد يكون من الممكن استعادة البيانات من الكتل غير التالفة في الملف.

يُفصل التمثيل المضغوط لكل كتلة بنمط 48 بت، مما يجعل من الممكن العثور على حدود الكتلة بيقين معقول. تحمل كل كتلة أيضًا رمز CRC الخاص بها بطول 32 بت، لذا يمكن تمييز الكتل التالفة عن غير التالفة.

إن bzip2recover برنامج بسيط الغرض منه هو البحث عن الكتل في ملفات .bz2، وكتابة كل كتلة في ملف .bz2 الخاص بها. يمكنك بعد ذلك استخدام bzip2 -t لاختبار سلامة الملفات الناتجة، وفك ضغط تلك غير التالفة.

يأخذ bzip2recover معاملًا واحدًا، وهو اسم الملف المعطوب، ويكتب عددًا من الملفات "rec00001file.bz2"، "rec00002file.bz2"، إلخ، تحتوي على الكتل المستخرجة. صُممت أسماء ملفات الخرج بحيث يؤدي استخدام المحارف البديلة في المعالجة اللاحقة -- على سبيل المثال، "bzip2 -dc rec*file.bz2 > recovered_data" -- إلى معالجة الملفات بالترتيب الصحيح.

يجب أن يكون bzip2recover أكثر فائدة عند التعامل مع ملفات .bz2 الكبيرة، لأنها ستحتوي على العديد من الكتل. من الواضح أنه من غير المجدي استخدامه على الملفات التالفة ذات الكتلة الواحدة، حيث لا يمكن استعادة الكتلة التالفة. إذا كنت ترغب في تقليل أي فقدان محتمل للبيانات بسبب أخطاء الوسائط أو الإرسال، فقد تفكر في الضغط بحجم كتلة أصغر.

ملاحظات الأداء
تجمع مرحلة فرز الضغط السلاسل المتشابهة في الملف معًا. وبسبب هذا، فإن الملفات التي تحتوي على سلاسل طويلة جدًا من الرموز المتكررة، مثل "aabaabaabaab ..." (متكررة عدة مئات من المرات) قد تُضغط بشكل أبطأ من المعتاد. كان أداء الإصدارات 0.9.5 وما فوق أفضل بكثير من الإصدارات السابقة في هذا الصدد. النسبة بين وقت الضغط في أسوأ الحالات ومتوسط الحالات هي في حدود 10:1. بالنسبة للإصدارات السابقة، كان هذا الرقم يقارب 100:1. يمكنك استخدام الخيار -vvvv لمراقبة التقدم بتفصيل كبير، إذا أردت.

سرعة فك الضغط لا تتأثر بهذه الظواهر.

يخصص bzip2 عادةً عدة ميجابايت من الذاكرة ليعمل فيها، ثم ينتشر عبرها بشكل عشوائي إلى حد ما. وهذا يعني أن الأداء، لكل من الضغط وفك الضغط، يتحدد إلى حد كبير بالسرعة التي يمكن بها لحاسوبك خدمة إخفاقات الخبيئة. وبسبب هذا، لوحظ أن التغييرات الصغيرة في الشيفرة لتقليل معدل الإخفاق تعطي تحسينات كبيرة في الأداء بشكل غير متناسب. أتخيل أن bzip2 سيعمل بشكل أفضل على الحواسيب التي تحتوي على خبيئات كبيرة جدًا.

تحذيرات
رسائل خطأ الدخل/الخرج ليست مفيدة كما ينبغي. يحاول bzip2 جاهدًا اكتشاف أخطاء الدخل/الخرج والخروج بشكل نظيف، لكن تفاصيل المشكلة تبدو أحيانًا مضللة نوعًا ما.

تتعلق صفحة الدليل هذه بالإصدارة 1.0.8 من bzip2. البيانات المضغوطة التي أنشأتها هذه الإصدارة متوافقة تمامًا للأمام وللخلف مع الإصدارات العامة السابقة، الإصدارات 0.1pl2، 0.9.0، 0.9.5، 1.0.0، 1.0.1، 1.0.2 وما فوق، ولكن مع الاستثناء التالي: يمكن لـ 0.9.0 وما فوق فك ضغط عدة ملفات مضغوطة مدمجة بشكل صحيح. لا يمكن لـ 0.1pl2 فعل ذلك؛ حيث سيتوقف بعد فك ضغط الملف الأول فقط في الدفق.

استخدمت إصدارات bzip2recover السابقة لـ 1.0.2 أعدادًا صحيحة بطول 32 بت لتمثيل مواضع البت في الملفات المضغوطة، لذا لم يكن بمقدورها التعامل مع ملفات مضغوطة يزيد طولها عن 512 ميجابايت. تستخدم الإصدارات 1.0.2 وما فوق أعدادًا صحيحة بطول 64 بت على بعض المنصات التي تدعمها (أهداف GNU المدعومة، وويندوز). لمعرفة ما إذا كان قد بُني bzip2recover بمثل هذا القيد أم لا، شغله دون معاملات. في أي حال، يمكنك بناء نسخة غير محدودة لنفسك إذا كان بإمكانك إعادة تجميعه مع ضبط MaybeUInt64 ليكون عددًا صحيحًا غير موقع بطول 64 بت.

المؤلف
Julian Seward, jseward@acm.org.

https://sourceware.org/bzip2/

ترجع الأفكار المتجسدة في bzip2 إلى الأشخاص التاليين (على الأقل): Michael Burrows و David Wheeler (لتحويل فرز الكتل)، و David Wheeler (مرة أخرى، لمرمز Huffman)، و Peter Fenwick (لنموذج الترميز المهيكل في bzip الأصلي، والعديد من التحسينات)، و Alistair Moffat و Radford Neal و Ian Witten (للمرمز الحسابي في bzip الأصلي). أنا مدين كثيرًا لمساعدتهم ودعمهم ونصائحهم. راجع الدليل في توزيعة المصدر للحصول على إشارات إلى مصادر التوثيق. شجعني Christian von Roques على البحث عن خوارزميات فرز أسرع، من أجل تسريع الضغط. شجعني Bela Lubkin على تحسين أداء الضغط في أسوأ الحالات. قامت Donna Robinson بتحويل التوثيق إلى تنسيق XML. سكريبتات bz* مستمدة من سكريبتات GNU gzip. أرسل العديد من الأشخاص رقعًا، وساعدوا في مشاكل النقل، وأعاروا حواسيب، وقدموا النصائح وكانوا متعاونين بشكل عام.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.