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 قائمة بأسماء الملفات لمرافقة علامات سطر الأوامر. يتم استبدال كل ملف بنسخة مضغوطة منه، بالاسم "اسم_الملف_الأصلي.bz2". لكل ملف مضغوط نفس تاريخ التعديل والأذونات، وعند الإمكان، نفس ملكية الملف المقابل، بحيث يمكن استعادة هذه الخصائص بشكل صحيح في وقت فك الضغط. يكون التعامل مع أسماء الملفات بسيطًا بمعنى أنه لا توجد آلية للحفاظ على أسماء الملفات الأصلية أو الأذونات أو الملكيات أو التواريخ في أنظمة الملفات التي تفتقر إلى هذه المفاهيم، أو التي لديها قيود كبيرة على طول اسم الملف، مثل MS-DOS.
افتراضيًا، لن يقوم bzip2 و bunzip2 بالكتابة فوق الملفات الموجودة. إذا كنت تريد حدوث ذلك، فحدد علامة -f.
إذا لم يتم تحديد أي أسماء ملفات، يقوم bzip2 بالضغط من الإدخال القياسي إلى الإخراج القياسي. في هذه الحالة، سيرفض bzip2 كتابة الإخراج المضغوط إلى الجهاز الطرفي، لأن ذلك سيكون غير مفهوم تمامًا وبالتالي لا فائدة منه.
يقوم bunzip2 (أو bzip2 -d) بفك ضغط جميع الملفات المحددة. سيتم اكتشاف الملفات التي لم يتم إنشاؤها بواسطة bzip2 وتجاهلها، وسيتم إصدار تحذير. يحاول bzip2 تخمين اسم الملف الذي تم فك ضغطه من اسم الملف المضغوط على النحو التالي:
اسم_الملف.bz2 يصبح اسم_الملف
اسم_الملف.bz يصبح اسم_الملف
اسم_الملف.tbz2 يصبح اسم_الملف.tar
اسم_الملف.tbz يصبح اسم_الملف.tar
أي_اسم_آخر يصبح أي_اسم_آخر.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` حجم الكتلة ليكون 100000 بايت إلى 900000 بايت (افتراضيًا). في وقت فك الضغط، يتم قراءة حجم الكتلة المستخدمة للضغط من رأس الملف المضغوط، ثم يخصص `bunzip2` لنفسه ذاكرة كافية لفك ضغط الملف. نظرًا لتخزين أحجام الكتل في الملفات المضغوطة، فمن الواضح أن العلامات `-1` إلى `-9` غير ذات صلة وتتم تجاهلها أثناء فك الضغط.
يمكن تقدير متطلبات الضغط وفك الضغط، بالبايت، على النحو التالي:
الضغط: ٤٠٠ كيلو بايت + (٨ × حجم الكتلة)
فك الضغط: ١٠٠ كيلو بايت + (٤ × حجم الكتلة)، أو
١٠٠ كيلو بايت + (٢.٥ × حجم الكتلة)
إن استخدام أحجام كتل أكبر يعطي عوائد متناقصة بسرعة. تأتي معظم عمليات الضغط من أول مئتي إلى ثلاثمائة كيلو بايت من حجم الكتلة، وهي حقيقة يجب أن يؤخذ في الاعتبار عند استخدام bzip2 على الأجهزة الصغيرة. من المهم أيضًا أن ندرك أن متطلبات ذاكرة فك الضغط يتم تحديدها في وقت الضغط عن طريق اختيار حجم الكتلة.
بالنسبة للملفات المضغوطة باستخدام حجم الكتلة الافتراضي ٩٠٠ كيلو بايت، سيتطلب برنامج bunzip2 حوالي ٣٧٠٠ كيلو بايت لفك الضغط. لدعم فك ضغط أي ملف على جهاز بسعة ٤ ميجابايت، يحتوي برنامج bunzip2 على خيار لفك الضغط باستخدام ما يقرب من نصف هذا المقدار من الذاكرة، أي حوالي ٢٣٠٠ كيلو بايت. يتم أيضًا تقليل سرعة فك الضغط إلى النصف، لذلك يجب عليك استخدام هذا الخيار فقط عند الضرورة. العلامة ذات الصلة هي -s.
بشكل عام، حاول استخدام أكبر حجم كتلة تسمح به قيود الذاكرة، حيث يؤدي ذلك إلى زيادة الضغط المحقق. لا يتأثر كل من ضغط الملف وسرعة فك الضغط بشكل كبير بحجم الكتلة.
هناك نقطة مهمة أخرى تنطبق على الملفات التي تتناسب مع كتلة واحدة - وهذا يعني معظم الملفات التي ستواجهها عند استخدام حجم كتلة كبير. كمية الذاكرة الفعلية المستخدمة تتناسب مع حجم الملف، حيث يكون الملف أصغر من الكتلة. على سبيل المثال، سيؤدي ضغط ملف بحجم ٢٠٠٠٠ بايت باستخدام العلامة -٩ إلى قيام برنامج الضغط بتخصيص حوالي ٧٦٠٠ كيلو بايت من الذاكرة، ولكنه سيستخدم فقط ٤٠٠ كيلو بايت + ٢٠٠٠٠ * ٨ = ٥٦٠ كيلو بايت منها. وبالمثل، سيخصص برنامج فك الضغط ٣٧٠٠ كيلو بايت ولكنه سيستخدم فقط ١٠٠ كيلو بايت + ٢٠٠٠٠ * ٤ = ١٨٠ كيلو بايت.
فيما يلي جدول يلخص الحد الأقصى لاستخدام الذاكرة لأحجام الكتل المختلفة. تم تسجيل الحجم المضغوط الإجمالي لـ ١٤ ملفًا من مجموعة Calgary Text Compression Corpus التي يبلغ حجمها الإجمالي ٣,١٤١,٦٢٢ بايت. يعطي هذا العمود فكرة عن كيفية اختلاف الضغط مع حجم الكتلة. تميل هذه الأرقام إلى التقليل من شأن ميزة استخدام أحجام كتل أكبر للملفات الأكبر حجمًا، حيث تهيمن الملفات الأصغر حجمًا على المجموعة.
-١ ١٢٠٠ كيلو بايت ٥٠٠ كيلو بايت ٣٥٠ كيلو بايت ٩١٤٧٠٤
-٢ ٢٠٠٠ كيلو بايت ٩٠٠ كيلو بايت ٦٠٠ كيلو بايت ٨٧٧٧٠٣
-٣ ٢٨٠٠ كيلو بايت ١٣٠٠ كيلو بايت ٨٥٠ كيلو بايت ٨٦٠٣٣٨
-٤ ٣٦٠٠ كيلو بايت ١٧٠٠ كيلو بايت ١١٠٠ كيلو بايت ٨٤٦٨٩٩
-٥ ٤٤٠٠ كيلو بايت ٢١٠٠ كيلو بايت ١٣٥٠ كيلو بايت ٨٤٥١٦٠
-٦ ٥٢٠٠ كيلو بايت ٢٥٠٠ كيلو بايت ١٦٠٠ كيلو بايت ٨٣٨٦٢٦
-٧ ٦١٠٠ كيلو بايت ٢٩٠٠ كيلو بايت ١٨٥٠ كيلو بايت ٨٣٤٠٩٦
-٨ ٦٨٠٠ كيلو بايت ٣٣٠٠ كيلو بايت ٢١٠٠ كيلو بايت ٨٢٨٦٤٢
-٩ ٧٦٠٠ كيلو بايت ٣٧٠٠ كيلو بايت ٢٣٥٠ كيلو بايت ٨٢٨٦٤٢
استعادة البيانات من الملفات التالفة
يقوم برنامج bzip2 بضغط الملفات في كتل، عادةً بحجم ٩٠٠ كيلو بايت. تتم معالجة كل كتلة بشكل مستقل. إذا تسبب خطأ في الوسائط أو النقل في تلف ملف .bz2 متعدد الكتل، فقد يكون من الممكن استعادة البيانات من الكتل غير التالفة في الملف.
يتم تحديد التمثيل المضغوط لكل كتلة بواسطة نمط ٤٨ بت، مما يجعل من الممكن تحديد حدود الكتلة بدرجة معقولة من اليقين. تحمل كل كتلة أيضًا رمز CRC الخاص بها بحجم ٣٢ بت، بحيث يمكن التمييز بين الكتل التالفة وغير التالفة.
^ zip2recover هو برنامج بسيط والغرض منه هو البحث عن الكتل في ملفات .bz2، وكتابة كل كتلة في ملف .bz2 خاص بها. يمكنك بعد ذلك استخدام bzip2 -t لاختبار سلامة الملفات الناتجة، وفك ضغط الملفات غير التالفة.
يأخذ bzip2recover وسيطة واحدة، وهي اسم الملف التالف، ويكتب عددًا من الملفات "rec00001file.bz2" و "rec00002file.bz2" وما إلى ذلك، والتي تحتوي على الكتل المستخرجة. تم تصميم أسماء الملفات الناتجة بحيث يؤدي استخدام أحرف البدل في المعالجة اللاحقة - على سبيل المثال، "bzip2 -dc rec*file.bz2 > recovered_data" - إلى معالجة الملفات بالترتيب الصحيح.
يجب أن يكون bzip2recover مفيدًا بشكل خاص في التعامل مع ملفات .bz2 الكبيرة، حيث ستحتوي هذه الملفات على العديد من الكتل. من الواضح أنه من غير المجدي استخدامه على الملفات التالفة ذات الكتلة الواحدة، حيث لا يمكن استعادة كتلة تالفة. إذا كنت ترغب في تقليل أي فقد محتمل للبيانات بسبب أخطاء الوسائط أو الإرسال، فقد تفكر في الضغط بحجم كتلة أصغر.
ملاحظات حول الأداء
تجمع مرحلة الفرز من الضغط سلاسل متشابهة في الملف. لهذا السبب، قد تضغط الملفات التي تحتوي على سلاسل طويلة جدًا من الرموز المتكررة، مثل "aabaabaabaab..." (تتكرر عدة مئات من المرات)، بشكل أبطأ من المعتاد. الإصدارات ٠٫٩٫٥ وما فوقها أفضل بكثير من الإصدارات السابقة في هذا الصدد. نسبة بين أسوأ حالة وأفضل حالة لوقت الضغط هي في حدود ١٠:١. بالنسبة للإصدارات السابقة، كانت هذه النسبة أقرب إلى ١٠٠:١. يمكنك استخدام الخيار -vvvv لمراقبة التقدم بالتفصيل، إذا أردت.
سرعة فك الضغط لا تتأثر بهذه الظواهر.
عادةً ما يخصص bzip2 عدة ميغابايت من الذاكرة للعمل، ثم يستخدمها بشكل عشوائي إلى حد ما. هذا يعني أن الأداء، سواء للضغط أو فك الضغط، يحدده إلى حد كبير سرعة جهازك في معالجة الأخطاء في الذاكرة المخبأة. لهذا السبب، لوحظ أن التغييرات الصغيرة في التعليمات البرمجية لتقليل معدل الأخطاء في الذاكرة المخبأة أدت إلى تحسينات كبيرة في الأداء. أتخيل أن bzip2 سيؤدي أفضل ما يمكن على الأجهزة ذات الذاكرة المخبأة الكبيرة جدًا.
تحذيرات
رسائل خطأ الإدخال/الإخراج ليست مفيدة كما ينبغي. يحاول bzip2 جاهدًا اكتشاف أخطاء الإدخال/الإخراج والخروج بأمان، ولكن تفاصيل المشكلة تبدو في بعض الأحيان مضللة بعض الشيء.
تنطبق هذه الصفحة الدليل على الإصدار ١٫٠٫٨ من bzip2. البيانات المضغوطة التي تم إنشاؤها بواسطة هذا الإصدار متوافقة تمامًا مع الإصدارات العامة السابقة، الإصدارات ٠٫١pl٢، ٩٫٠، ٠٫٩٫٥، ١٫٠٫٠، ١٫٠٫١، ١٫٠٫٢ وما فوق، ولكن مع الاستثناء التالي: يمكن للإصدارات ٠٫٩٫٠ وما فوقها فك ضغط ملفات مضغوطة متعددة متسلسلة بشكل صحيح. لا يمكن للإصدار ٠٫١pl٢ القيام بذلك؛ سيتوقف بعد فك ضغط الملف الأول فقط في الدفق.
استخدمت الإصدارات القديمة من bzip2recover، التي سبقت الإصدار 1.0.2، أعدادًا صحيحة بحجم 32 بت لتمثيل مواضع البت في الملفات المضغوطة، لذلك لم تتمكن من التعامل مع الملفات المضغوطة التي يزيد حجمها عن 512 ميجابايت. تستخدم الإصدارات 0.2 والإصدارات الأحدث أعدادًا صحيحة بحجم 64 بت على بعض الأنظمة الأساسية التي تدعمها (الأهداف المدعومة من GNU، وWindows). لتحديد ما إذا كان قد تم بناء bzip2recover مع هذا القيد أم لا، قم بتشغيله بدون وسائط. على أي حال، يمكنك إنشاء إصدار غير محدود بنفسك إذا كان بإمكانك إعادة تجميعه مع تعيين MaybeUInt64 ليكون عددًا صحيحًا غير سالب بحجم 64 بت.
المؤلف
جوليان سيوارد، _.
https://sourceware.org/bzip2/
الأفكار التي يتضمنها bzip2 هي من عمل (على الأقل) الأشخاص التاليين: مايكل بيروز وديفيد ويلر (لتحويل فرز الكتلة)، وديفيد ويلر (مرة أخرى، لمُرمز هوفمان)، وبيتر فينوك (لنموذج الترميز المنظم في bzip الأصلي، والعديد من التحسينات)، وآليستير موفات، ورادفورد نيل، وإيان ويتن (لمُرمز الحساب في bzip الأصلي). أنا مدين لهم كثيرًا لمساعدتهم ودعمهم ونصائحهم. انظر إلى الدليل الموجود في توزيعة المصدر للحصول على إشارات إلى مصادر الوثائق. شجع كريستيان فون روكس على البحث عن خوارزميات فرز أسرع، من أجل تسريع الضغط. شجع بيلا لوبكين على تحسين أداء الضغط في أسوأ الحالات. قامت دونا روبنسون بتحويل الوثائق إلى XML. تم اشتقاق البرامج النصية bz* من برامج GNU gzip. أرسل العديد من الأشخاص التصحيحات، وساعدوا في مشاكل قابلية النقل، وأعارت الآلات، وقدموا المشورة وكانوا بشكل عام مفيدين.