دليل bzdiff: مقارنة ملفات bzip2 في لينكس دون فك ضغطها

نظرة عامة

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

تجهيز البيئة وإجراء المقارنة الأساسية بين أرشيفين مضغوطين

قبل البدء بالجانب التطبيقي، نتحقق من توفر الأدوات المطلوبة على النظام ونقوم بتثبيت حزمتي bzip2 وdiffutils لضمان عمل الأداة بسلاسة.

التحقق من تثبيت bzdiff وتثبيت الحزم اللازمة

لإنشاء بيئة اختبارية واقعية، نقوم بتوليد ملفي إعداد (config_v1.txt وconfig_v2.txt) يحمل كل منهما قيمة منفذ شبكي مختلفة (80 و8080).

توليد ملفات الإعداد النصية للاختبار

نستخدم خيار الحفظ في الأمر bzip2 -k config_v1.txt && bzip2 -k config_v2.txt لضغط الملفين مع الاحتفاظ بالنسخ النصية الأصلية لاستخدامها في تجارب لاحقة.

ضغط ملفات الإعداد التجريبية باستخدام bzip2 مع الإبقاء على الأصل

يقوم أمر bzdiff بفحص البيانات وتمرير محتواها داخلياً إلى محرك المقارنة القياسي دون كتابة الملفات المفكوكة على القرص، مبرزاً الأسطر المعدلة بصيغة diff التقليدية؛ حيث يتضح على الفور تعديل المنفذ في السطر الثاني من port=80 إلى port=8080.
⚙️ [أهم خيارات التشغيل]

-u : عرض التغييرات بنمط المقارنة الموحد (Unified diff) لتسهيل قراءة الاختلافات.
-c : إظهار الأسطر المحيطة بالتعديل لتوفير سياق أشمل للتغيير (Context diff).
-q : التحقق السريع من تطابق الملفين دون طباعة تفاصيل الفروقات.
-i : تجاهل الفروق الناتجة عن حالة الأحرف اللاتينية (كبيرة أو صغيرة).
-w : استبعاد المسافات البيضاء وعلامات التبويب (Tab) من عملية المقارنة.
-y : صف محتويات الملفين جنباً إلى جنب في شاشتين متوازيتين (Side-by-Side).

مقارنة ملفي bzip2 مضغوطين باستخدام bzdiff

مقارنة أرشيف مضغوط (.bz2) بملف نصي غير مضغوط

تتجلى مرونة الأداة في قدرتها على مطابقة أرشيف مضغوط مع ملف نصي اعتيادي؛ ولتجربة ذلك ننشئ ملف تكوين حياً باسم config_live.txt يحمل منفذاً وحالة تشغيلية مغايرة عبر تشغيل echo -e "server=web01\nport=443\nstatus=maintenance" > config_live.txt.

إنشاء ملف تكوين نصي جديد config_live.txt

نوجه أمر bzdiff للمقارنة بين النسخة المؤرشفة config_v1.txt.bz2 والملف المفتوح config_live.txt.
تكشف النتيجة مباشرة عن تبدل المنفذ من port=80 إلى port=443 وانتقال الحالة التشغيلية من status=active إلى status=maintenance في السطرين الثاني والثالث دون الحاجة لأي معالجة مسبقة للأرشيف.

مقارنة ملف bz2 مضغوط مع ملف نصي عادي مباشرة

استعراض الفروقات بصيغة واضحة عبر نمط Unified Diff (-u)

يُفضل مهندسو الأنظمة اعتماد النمط الموحد في فحص ملفات التكوين والسجلات لسهولة متابعته بصرياً؛ ويتحقق ذلك بتمرير الخيار -u للأمر عند فحص config_v1.txt.bz2 وconfig_v2.txt.bz2.
يُظهر المخرج السياق المحيط بالأسطر بوضوح، موضحاً حذف الإعداد السابق port=80 بعلامة السالب (-) وإدراج الإعداد الجديد port=8080 بعلامة الموجب (+).

عرض نتائج المقارنة بصيغة Unified Diff باستخدام الخيار u-

التحكم في السكربتات عبر رموز الخروج (Exit Codes) وإرشادات تشغيلية

ترجع الأداة رمز خروج محدد عبر المتغير الخاص $? يعكس نتيجة المقارنة، وهو ما يتيح دمجها بكفاءة ضمن سكربتات شل التلقائية.
عند فحص ملفين متطابقين تماماً مثل config_v1.txt.bz2 مع نفسه، تُعيد الأداة الرمز 0، مما يؤدي إلى تنفيذ الأمر الموالي للرابط الشرطي &&.

التحقق من رمز الخروج 0 عند تطابق الملفين تماماً

في المقابل، تؤدي مقارنة ملفين يحتويان على تباين في المحتوى كملفي config_v1.txt.bz2 وconfig_v2.txt.bz2 إلى توليد رمز خروج بقيمة 1، وهو ما يتيح توظيف المعامل الشرطي || لتوجيه مسار التنفيذ عند اكتشاف اختلافات.

التحقق من رمز الخروج 1 عند وجود فروقات برمجية

بعد إنهاء التدريب العملي، نقوم بحذف جميع الملفات التجريبية والأرشيفات المضغوطة لتنظيف دليل العمل عبر الأمر rm -f config_v1.txt config_v2.txt config_live.txt config_v1.txt.bz2 config_v2.txt.bz2.

حذف ملفات الاختبار وتنظيف بيئة العمل

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