نظرة عامة
يُعد فحص الفروقات على مستوى البايت بين الملفات مهمة أساسية لمديري الأنظمة ومطوري البرمجيات في بيئات لينكس. نستعرض في هذا الدليل التطبيقي كيفية توظيف الأداة السريعة cmp وخياراتها المتقدمة، سواء للملفات النصية العادية أو الملفات الثنائية (Binary files)، مع توضيح دمجها الفعال داخل الجمل الشرطية في سكربتات باش (Bash scripts).
المقارنة الأولية: تحديد موضع أول تباين (بالبايت ورقم السطر)
نبدأ بتهيئة مجلد مخصص لإجراء التجارب العملية والانتقال الفوري إليه عبر تنفيذ الأمر mkdir -p ~/cmp_test && cd ~/cmp_test.

لإنشاء ملفين متطابقين تماماً في المحتوى هما file1.txt و file2.txt، إلى جانب ملف ثالث مختلف جزئياً باسم file3.txt، نستخدم أمر echo كالتالي:

تعتمد أداة cmp على إجراء فحص بايت مقابل بايت، فإذا تطابقت البيانات بالكامل، تنهي الأداة عملها بهدوء تام دون إخراج أي نص إلى الشاشة.
⚙️ [أهم المعاملات والخيارات التشغيلية]
-b : يعرض الحرف المقابل وقيمته عند اكتشاف أول اختلاف في البايت.-l : يولد تقريراً شاملاً بجميع البايتات المتباينة مع مواقعها وقيمها الثمانية.-n : يحدد الحد الأقصى للبايتات المشمولة في عملية الفحص.-i : يتجاوز عدداً محدداً مسبقاً من البايتات عند بداية الملفين قبل الشروع في التحقق.-s : يعطل المخرجات النصية تماماً ويكتفي بإرجاع رمز حالة الخروج (0 للتطابق و1 للاختلاف).

عند مقارنة ملفين يحتويان على بيانات غير متطابقة عبر الأمر cmp file1.txt file3.txt، يتوقف الفحص فور مصادفة أول بايت غير متطابق، مبيناً رقمه التسلسلي مع رقم السطر المتواجد فيه.

الفحص التفصيلي للتباينات: كشف كافة البايتات المختلفة ورموزها (-l و -b)
لفحص الاختلافات المجهرية بدقة أعلى، نقوم بإنشاء ملفين يحتويان على تسلسل أحرف متباينة باسم f1.txt و f2.txt.

عند تنفيذ الأمر cmp -l f1.txt f2.txt، تسرد الأداة قائمة تفصيلية بجميع مواقع البايتات غير المتوافقة مقرونة بقيمها بالنظام الثماني (Octal).
يتضح هنا وجود خلاف في البايت الثالث، حيث يحمل الملف الأول القيمة 103 المقابلة للحرف (C)، بينما يحتوي الملف الثاني على القيمة 130 المقابلة للحرف (X).

يتيح الخيار cmp -b f1.txt f2.txt قراءة بصرية مباشرة لموقع أول نقطة خلاف، حيث يُظهر الحرف المقروء إلى جانب شفرته بالنظام الثماني، مما يجعل تتبع الاختلاف بين 103 (C) و 130 (X) أكثر سهولة ووضوحاً.

لدمج الميزتين، نطبق الأمر cmp -lb f1.txt f2.txt للحصول على تقرير متكامل يجمع موقع البايت، وشفرته الثمانية، ورمز ASCII الفعلي في سطر واحد لكل تعارض، مما يوفر دقة فائقة في تحليل الفروق.

التكامل البرمجي والأتمتة: الوضع الصامت وفحص أكواد الخروج (-s)
عند استدعاء الأداة مع خيار الكتمان -s لمقارنة ملفين متطابقين، يتم إخفاء أية نصوص وإرجاع كود الخروج التلقائي.
تطابق الملفين بصورة كلية يجعل النظام يعيد القيمة 0، وهي دلالة النجاح والتطابق التام.

وعلى النقيض، ينتج عن استخدام خيار -s مع ملفين متغايرين إرجاع القيمة 1، وهي الإشارة التي تؤكد وجود عدم تطابق بين محتوياتهما دون طباعة تفاصيل على الطرفية.

يمكن الاستفادة من هذه الآلية مباشرة داخل بنية الجمل الشرطية if في سكربتات باش؛ للتحكم في تدفق البرنامج تبعاً لتطابق الملفات من عدمه.
وبما أن الملفين متماثلان في هذا المثال، يتحقق الشرط بنجاح (كود 0) وتُطبع رسالة التأكيد.

ضبط نطاق الفحص: تجاوز بايتات معينة (-i) وتحديد سقف المقارنة (-n)
للتحكم في حدود الفحص الجزئي للملفات، ننشئ الملفين data1.txt و data2.txt، حيث يتشاركان في المقاطع اللاحقة ويختلفان في المقدمة.

عند إجراء المقارنة الافتراضية عبر cmp data1.txt data2.txt، يعترض الفحص مباشرة عند البايت الأول لاختلاف أول حرف في السطر الأول.

بتمرير المعامل -i 7، نتجاوز أول 7 بايتات من مستهل كل ملف.
وبما أن المحتوى المتبقي (Alpha_Data) متماثل في كليهما، يكتمل الأمر بهدوء دون تسجيل أي تباين.

في المقابل، يحصر المعامل -n 6 المقارنة في أول 6 بايتات فقط من الملفات.
وبما أن تلك المساحة الأولى تحوي أحرفاً مختلفة، تشير الأداة مباشرة إلى التعارض القائم في البايت رقم 1.

قدم هذا الدليل استعراضاً شاملاً لتقنيات مقارنة الملفات على مستوى البايت باستخدام أداة cmp في بيئة لينكس.
تعد هذه الأداة الخيار الأمثل والحل فائق السرعة متى ما دعت الحاجة للتأكد من سلامة النسخ وتطابق البيانات الضخمة أو الملفات الثنائية في مهامك اليومية.