अवलोकन: कंप्रेस्ड डेटा की त्वरित तुलना
लिनक्स सर्वर प्रशासन के दौरान bzip2 से संपीड़ित (compressed) विशाल लॉग आर्काइव्स या कॉन्फ़िगरेशन बैकअप का विश्लेषण करते समय बार-बार संग्रह को अनपैक करना डिस्क I/O और समय दोनों की बर्बादी है। bzdiff यूटिलिटी बैकग्राउंड में डीकंप्रेशन पाइपलाइन बनाकर दो .bz2 फ़ाइलों अथवा किसी कंप्रेस्ड फ़ाइल और सामान्य टेक्स्ट फ़ाइल के बीच सीधे अंतर को ऑन-द-फ्लाई जांचने की सुविधा देती है। इस ट्यूटोरियल में हम वास्तविक कमांड उपयोग, आवश्यक फ्लैग्स और ऑटोमेशन स्क्रिप्टिंग के लिए एग्जिट कोड हैंडलिंग को विस्तार से समझेंगे।
परिवेश सेटअप और दो .bz2 फ़ाइलों की बुनियादी तुलना
प्रयोग आरंभ करने से पूर्व आवश्यक टूल्स की उपलब्धता जांचें और आवश्यकता पड़ने पर bzip2 तथा diffutils पैकेजों को सिस्टम पर स्थापित करें।

परीक्षण हेतु दो स्वतंत्र कॉन्फ़िगरेशन फ़ाइलें (config_v1.txt, config_v2.txt) तैयार करते हैं, जिनमें पोर्ट मान क्रमशः 80 और 8080 निर्धारित किए गए हैं।

मूल टेक्स्ट फ़ाइलों को डिलीट होने से बचाते हुए आर्काइव बनाने के लिए -k (keep) विकल्प के साथ bzip2 -k config_v1.txt && bzip2 -k config_v2.txt कमांड चलाएं।

अब bzdiff दोनों कंप्रेस्ड फ़ाइलों की आंतरिक सामग्री को सीधे पढ़कर पारंपरिक diff शैली में अंतर प्रदर्शित करता है।
आउटपुट स्पष्ट करता है कि दूसरी पंक्ति में पोर्ट मान port=80 से बदलकर port=8080 हो चुका है।
⚙️ [महत्वपूर्ण विकल्प]
-u : एकीकृत डिफ (Unified diff) प्रारूप में परिणाम देता है, जिसे पढ़ना और पैच बनाना अत्यंत सहज होता है।-c : संदर्भ डिफ (Context diff) आउटपुट प्रस्तुत करता है, जिससे परिवर्तनों के आस-पास की पंक्तियों का संदर्भ मिलता है।-q : विस्तृत पंक्तियों के बजाय केवल यह संक्षेप में बताता है कि फ़ाइलें एक जैसी हैं या अलग।-i : अक्षरों के केस (अपरकेस/लोअरकेस) के अंतर को अनदेखा करके तुलना करता है।-w : रिक्त स्थानों (spaces और tabs) के अंतर की उपेक्षा करता है।-y : दोनों फ़ाइलों की सामग्री को समानांतर (side-by-side) रखकर आमने-सामने तुलना दिखाता है।

आर्काइव (.bz2) और सामान्य टेक्स्ट फ़ाइल के बीच सीधा अंतर देखना
सक्रिय परिवेश का अनुकरण करने हेतु एक नई अनकंप्रेस्ड फ़ाइल (config_live.txt) बनाते हैं, जिसमें पोर्ट 443 तथा स्थिति maintenance रखी गई है।

bzdiff की सबसे बड़ी विशेषता यह है कि यह कंप्रेस्ड फ़ाइल (config_v1.txt.bz2) और सादी टेक्स्ट फ़ाइल (config_live.txt) को बिना किसी मध्यवर्ती रूपांतरण के सीधे मिला सकता है।
परिणाम में साफ दिखता है कि पंक्ति 2 और 3 में पोर्ट (port=80 से port=443) तथा स्टेटस (status=active से status=maintenance) दोनों में बदलाव हुआ है।

-u विकल्प के साथ यूनिफाइड डिफ (Unified Diff) आउटपुट पाना
bzdiff के साथ -u फ्लैग जोड़ने पर दोनों आर्काइव्स (config_v1.txt.bz2, config_v2.txt.bz2) का विश्लेषण यूनिफाइड डिफ प्रारूप में प्राप्त होता है।
इस दृश्य में हटाए गए डेटा को माइनस (-) चिन्ह से और नए जुड़े डेटा को प्लस (+) चिन्ह से चिह्नित किया जाता है, जिससे Git-शैली की स्वच्छ पठनीयता मिलती है।

शेल स्क्रिप्ट ऑटोमेशन: एग्जिट कोड ($?) और क्लीनअप
ऑटोमेटेड बैश स्क्रिप्ट्स में bzdiff का उपयोग करते समय रिटर्न कोड ($?) के आधार पर निर्णय लिए जाते हैं। एक ही फ़ाइल (config_v1.txt.bz2) की स्वयं से तुलना करने पर एग्जिट कोड 0 प्राप्त होता है।
समानता की पुष्टि होने पर 0 रिटर्न होने के कारण && ऑपरेटर के बाद का कमांड ब्लॉक निष्पादित होता है।

परस्पर भिन्न फ़ाइलों (config_v1.txt.bz2, config_v2.txt.bz2) की जांच करने पर कमांड एग्जिट कोड 1 लौटाता है।
यह असमानता || ऑपरेटर को ट्रिगर करती है, जिसका उपयोग स्क्रिप्ट में अलर्ट या वैकल्पिक प्रवाह तय करने के लिए किया जा सकता है।

अभ्यास पूर्ण होने के बाद डिस्क स्पेस मुक्त करने और परिवेश को स्वच्छ रखने के लिए rm -f config_v1.txt config_v2.txt config_live.txt config_v1.txt.bz2 config_v2.txt.bz2 चलाकर अस्थायी फ़ाइलों को हटा दें।

इस प्रकार bzdiff का उपयोग करके आप बिना किसी अतिरिक्त स्टोरेज ओवरहेड के bzip2 आर्काइव्स का तुरंत मिलान कर सकते हैं। बड़े लॉग्स और बैकअप ऑडिटिंग में यह कमांड समय और सिस्टम संसाधनों की उल्लेखनीय बचत करता है।