Linux cmp कमांड: बाइट स्तर पर फ़ाइल तुलना की पूरी गाइड

परिचय

लिनक्स सिस्टम में दो फ़ाइलों के बीच बाइट स्तर पर विसंगतियों को तुरंत पकड़ने के लिए cmp कमांड सबसे तेज़ और सटीक साधन है। इस ट्यूटोरियल में हम सामान्य टेक्स्ट फ़ाइलों के साथ-साथ बाइनरी डेटा की तुलना, मुख्य विकल्पों के प्रयोग और ऑटोमेशन शेल स्क्रिप्ट्स में इसके व्यावहारिक उपयोग को विस्तार से समझेंगे।

बुनियादी तुलना: पहले अंतर का स्थान (बाइट और लाइन) पहचानना

प्रैक्टिकल अभ्यास को व्यवस्थित रखने के लिए सबसे पहले एक नया टेस्ट फ़ोल्डर तैयार करके उसमें प्रवेश करते हैं। इसके लिए mkdir -p ~/cmp_test && cd ~/cmp_test कमांड चलाएँ।

mkdir -p ~/cmp_test && cd ~/cmp_test

फ़ाइल तुलना का परीक्षण करने के लिए हम echo कमांड की सहायता से दो एकसमान फ़ाइलें (file1.txt, file2.txt) और एक मामूली बदलाव वाली फ़ाइल (file3.txt) निर्मित करते हैं।

echo ‘Hello Linux World’ > file1.txt && echo ‘Hello Linux World’ > file2.txt && echo ‘Hello Linux Earth’ > file3.txt

cmp उपयोगिता फ़ाइलों का बाइट-दर-बाइट विश्लेषण करती है। यदि दोनों फ़ाइलें सामग्री में शत-प्रतिशत समान हों, तो यह स्क्रीन पर कोई आउटपुट दिखाए बिना शांत रूप से प्रोसेस समाप्त कर देती है।
⚙️ [महत्वपूर्ण विकल्प]

-b : भिन्नता वाले स्थान का बाइट मान और संबंधित वर्ण प्रदर्शित करता है।
-l : फ़ाइलों में मौजूद प्रत्येक भिन्न बाइट की स्थिति और उसका ऑक्टल कोड सूचीबद्ध करता है।
-n : केवल तय की गई बाइट संख्या तक ही तुलना को सीमित रखता है।
-i : फ़ाइल के आरंभ से निर्दिष्ट बाइट्स को छोड़कर आगे से विश्लेषण शुरू करता है।
-s : स्क्रीन पर कोई संदेश नहीं दिखाता, केवल एग्जिट स्टेटस कोड (0 या 1) लौटाता है।

cmp file1.txt file2.txt

भिन्न सामग्री वाली फ़ाइलों की जाँच के लिए cmp file1.txt file3.txt निष्पादित करें।
जैसे ही कोई बेमेल डेटा मिलता है, यह कमांड टर्मिनल पर उस पहले बाइट का क्रमांक और पंक्ति (line) संख्या तुरंत रिपोर्ट कर देती है।

cmp file1.txt file3.txt

विस्तृत अंतर विश्लेषण: प्रत्येक भिन्न बाइट और कैरेक्टर देखना (-l, -b)

गहन स्तर पर असमानताओं का अध्ययन करने के लिए हम अलग-अलग अक्षरों वाली दो फ़ाइलें f1.txt और f2.txt तैयार करते हैं।

echo ‘ABCDE’ > f1.txt && echo ‘ABXDE’ > f2.txt

दोनों फ़ाइलों के सभी विसंगत बाइट्स की सूची और उनके 8-आधारित (ऑक्टल) मान देखने के लिए cmp -l f1.txt f2.txt चलाएँ।
यहाँ तीसरे बाइट पर पहली फ़ाइल का मान ऑक्टल 103 (C) और दूसरी फ़ाइल का मान 130 (X) प्रदर्शित होकर अंतर को स्पष्ट करता है।

cmp -l f1.txt f2.txt

cmp -b f1.txt f2.txt कमांड का उपयोग करने पर शुरुआती अंतर वाले स्थान का ऑक्टल मान मिलने के साथ-साथ वास्तविक वर्ण भी दिखाई देता है।
इससे यह तुरंत समझ आ जाता है कि तीसरे बाइट पर 103 (C) की जगह 130 (X) मौजूद है।

cmp -b f1.txt f2.txt

अधिक स्पष्टता के लिए दोनों फ़्लैग मिलाकर cmp -lb f1.txt f2.txt निष्पादित करें।
यह एक ही पंक्ति में बाइट नंबर, दोनों फ़ाइलों का ऑक्टल कोड और संबंधित ASCII वर्ण प्रस्तुत करता है, जिससे विश्लेषण बेहद आसान हो जाता है।

cmp -lb f1.txt f2.txt

ऑटोमेशन और शेल स्क्रिप्टिंग: साइलेंट मोड व एग्जिट कोड (-s)

स्क्रिप्ट में आउटपुट छिपाकर केवल स्टेटस कोड जाँचने के लिए -s विकल्प का प्रयोग किया जाता है।
समान डेटा वाली फ़ाइलों पर इसे चलाने से स्क्रीन मूक रहती है और सफल मिलान के प्रतीक के रूप में एग्जिट कोड 0 प्राप्त होता है।

cmp -s file1.txt file2.txt; echo “종료 코드: $?”

भिन्न सामग्री वाली फ़ाइलों पर -s विकल्प लागू करने पर भी टर्मिनल शांत रहता है।
किंतु फ़ाइलों में अंतर होने के कारण यह परिणाम स्वरूप रिटर्न कोड 1 प्रदान करता है।

cmp -s file1.txt file3.txt; echo “종료 코드: $?”

बैश स्क्रिप्ट के अंदर if स्टेटमेंट में cmp -s को शामिल करके फ़ाइलों की समानता के आधार पर निष्पादन प्रवाह को नियंत्रित किया जा सकता है।
फ़ाइलें पूरी तरह एक जैसी होने पर स्थिति सत्य (कोड 0) सिद्ध होती है और सहमति का संदेश प्रिंट हो जाता है।

if cmp -s file1.txt file2.txt; then echo ‘두 파일이 일치합니다.’; else echo ‘두 파일이 다릅니다.’; fi

तुलना का दायरा नियंत्रित करना: बाइट स्किप (-i) और सीमा तय करना (-n)

जाँच का क्षेत्र सीमित करने के अभ्यास हेतु हम ऐसे दो सैम्पल data1.txt और data2.txt बनाते हैं जिनके प्रीफ़िक्स अलग हैं किंतु अंतिम हिस्सा एक जैसा है।

echo ‘Prefix_Alpha_Data’ > data1.txt && echo ‘DiffId_Alpha_Data’ > data2.txt

cmp data1.txt data2.txt कमांड से सामान्य परीक्षण करने पर विश्लेषण पहले अक्षर से ही आरंभ होता है।
शुरुआत में ही असमानता मिलने के कारण यह तुरंत पहले बाइट और पहली पंक्ति पर बेमेल होने की चेतावनी देता है।

cmp data1.txt data2.txt

यदि शुरुआती हेडर या प्रीफ़िक्स की अनदेखी करनी हो, तो -i 7 विकल्प लगाकर पहले 7 बाइट्स को छोड़ा जा सकता है।
स्किप किए गए हिस्से के बाद का टेक्स्ट (Alpha_Data) दोनों में हूबहू समान होने के कारण यह बिना कोई त्रुटि दिए शांति से समाप्त होता है।

cmp -i 7 data1.txt data2.txt

इसके विपरीत, यदि केवल शुरुआत के एक निश्चित हिस्से तक ही जाँच सीमित रखनी हो, तो -n 6 का उपयोग करें।
तय किए गए 6 बाइट्स के दायरे में पहला कैरेक्टर ही असमान होने से यह प्रथम बाइट पर अंतर की घोषणा करता है।

cmp -n 6 data1.txt data2.txt

इस गाइड में हमने लिनक्स की शक्तिशाली cmp उपयोगिता, बाइट स्तर पर फ़ाइल सत्यापन और इसके महत्वपूर्ण विकल्पों के व्यावहारिक उपयोग को समझा।
विशाल डेटासेट, बाइनरी पैकेज या बैकअप फ़ाइलों की सत्यता की त्वरित पुष्टि के लिए यह टूल बेहद प्रभावी समाधान है।