Ubuntu में bzcmp से bzip2 फाइलें बिना अनपैक किए जांचें

कार्यप्रणाली और परिचय

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

परिवेश तैयार करना: पैकेज इंस्टॉलेशन एवं टेस्ट फाइलों का निर्माण

सिस्टम में bzcmp बाइनरी की उपलब्धता सुनिश्चित करने हेतु सबसे पहले संबंधित टूलकिट को APT रिपॉजिटरी से कॉन्फ़िगर करते हैं।

apt-get update -qq && apt-get install -y bzip2

परीक्षण के लिए तीन बुनियादी टेक्स्ट फाइलें तैयार करते हैं, जिनमें से दो की लाइनें समान होंगी और तीसरी में भिन्न डेटा दर्ज किया जाएगा।

echo ‘Linux bzcmp test line 1’ > sample1.txt && echo ‘Linux bzcmp test line 1’ > sample2.txt && echo ‘Linux bzcmp test line 2’ > sample3.txt

डिफ़ॉल्ट रूप से कंप्रेशन के बाद मूल स्रोत हट जाता है; अतः -k (keep) फ्लैग लगाकर तीनों फाइलों को संपीड़ित करते हैं और तैयार हुए .bz2 आर्काइव की पुष्टि डायरेक्टरी लिस्टिंग से करते हैं।

bzip2 -k sample1.txt sample2.txt sample3.txt && ls -l sample*.bz2

समान आर्काइव्स का सत्यापन और रिटर्न स्टेटस ($?) विश्लेषण

जब दो संपीड़ित फाइलों की आंतरिक सामग्री शत-प्रतिशत समान हो, तो तुलना करने पर टर्मिनल कोई आउटपुट प्रदर्शित नहीं करता:

bzcmp sample1.txt.bz2 sample2.txt.bz2

शेल स्क्रिप्टिंग और ऑटोमेशन में शांत निष्पादन (silent execution) की सत्यता जांचने के लिए हम शेल के विशेष चर $? की सहायता से रिटर्न कोड पढ़ते हैं। यहां प्राप्त मान 0 यह प्रमाणित करता है कि दोनों फाइलों के डेटा ब्लॉक पूरी तरह समान हैं।

echo “Exit Code: $?”

विसंगतियों की पहचान और बाइट-दर-बाइट ऑफसेट मैपिंग

अब दो असमान आर्काइव्स को इनपुट देकर देखते हैं कि टूल किस प्रकार डेटा के अंतर को रिपोर्ट करता है:

bzcmp sample1.txt.bz2 sample3.txt.bz2

यहाँ आउटपुट स्पष्ट रूप से वह सटीक पंक्ति और पहला बाइट ऑफसेट इंगित करता है जहां विसंगति पाई गई। इसके पश्चात कमांड स्टेटस कोड पुनः जांचते हैं:

echo “Exit Code: $?”

गैर-शून्य रिटर्न कोड यह संकेत देता है कि प्रक्रिया बिना क्रैश हुए पूर्ण हुई, लेकिन फाइलों के बीच डेटा मेल नहीं खाया।

यदि हमें केवल पहली भिन्नता नहीं, बल्कि सभी बेमेल बाइट्स की पूरी फेहरिस्त देखनी हो, तो -l विकल्प का उपयोग किया जाता है। यह आंतरिक स्तर पर cmp -l कार्यप्रणाली को सक्रिय कर प्रत्येक बेमेल ऑफसेट (दशमलव में) और दोनों फाइलों के संबंधित बाइट मान (ऑक्टल प्रारूप में) सूचीबद्ध कर देता है:

bzcmp -l sample1.txt.bz2 sample3.txt.bz2

क्रॉस-कंपैरिजन: संपीड़ित बनाम असंपीड़ित फाइल एवं वातावरण सफाई

bzcmp की एक उत्कृष्ट विशेषता यह है कि यह एक संपीड़ित आर्काइव की तुलना सीधे किसी साधारण अनकंप्रेस्ड फाइल से भी कर सकता है। पहले उसी डेटा वाली मूल टेक्स्ट फाइल के साथ इसे परखते हैं:

bzcmp sample1.txt.bz2 sample1.txt

दोनों का आंतरिक टेक्स्ट समरूप होने के कारण कोई त्रुटि या संदेश नहीं आता। अब एक भिन्न स्ट्रिंग वाली नई टेक्स्ट फाइल बनाकर क्रॉस-वेरिफिकेशन करते हैं:

echo ‘Different text’ > sample_diff.txt && bzcmp sample1.txt.bz2 sample_diff.txt

अपेक्षित परिणाम के अनुसार, सिस्टम ने तत्काल पहले ही बाइट पर असंगति दर्ज कर दी।

अभ्यास समाप्त होने के बाद परीक्षण के लिए बनाई गई सभी डमी फाइलों और आर्काइव्स को हटाकर डायरेक्टरी को स्वच्छ स्थिति में लाते हैं:

rm -f sample1.txt sample2.txt sample3.txt sample*.bz2 sample_diff.txt

बैकअप सत्यापन या लॉग ऑडिटिंग जैसे कार्यों में bzcmp स्टोरेज और समय की भारी बचत करता है। नियमित लिनक्स एडमिनिस्ट्रेशन वर्कफ़्लो में इस उपयोगिता को शामिल करने से सिस्टम में अतिरिक्त लोड डाले बिना आर्काइव इंटीग्रिटी की त्वरित जांच संभव हो जाती है।