أمر Linux diff: مقارنة ملفين وتطبيق التعديلات باستخدام patch
مقدمة: لماذا تحتاج إلى diff و patch في Linux؟
تخيّل أن نظام الإنتاج لديك توقف فجأة بسبب خطأ لم يُحدَّد سببه بعد، وفي الوقت نفسه أنت مطالب بمقارنة نسختين من الشيفرة بسرعة لاستعادة الخدمة. في مثل هذه الحالات، يصبح الاعتماد على المقارنة اليدوية مرهقًا وعرضة للأخطاء. هنا يبرز دور أمر diff في Linux، وهو أداة قوية ومضمّنة تُستخدم لاكتشاف الفروقات بين ملفين بدقة وسرعة.
ولا يتوقف الأمر عند معرفة الفروق فقط، إذ يوفر Linux أيضًا الأمر patch لتطبيق التعديلات الناتجة من ملف إلى آخر دون الحاجة إلى استبدال الملف بالكامل. هذه الآلية مفيدة جدًا عند مشاركة الإصلاحات بين أعضاء الفريق أو عند التعامل مع ملفات الإعدادات والشيفرة البرمجية.

ما هو أمر diff في Linux؟
أمر diff يُستخدم لمقارنة ملفين سطرًا بسطر، ثم عرض الاختلافات بينهما بصيغة مفهومة. ويُعد هذا الأمر مفيدًا خصوصًا عند مراجعة ملفات الشيفرة أو ملفات الإعدادات التي يصعب تدقيقها يدويًا.
من أبرز مزايا diff:
- تسريع عملية اكتشاف التعديلات بين نسختين من الملف.
- تقليل الأخطاء البشرية الناتجة عن المقارنة اليدوية.
- إمكانية استخدام مخرجاته مع أدوات أخرى مثل
patch. - الاستفادة منه في بيئات التطوير وإدارة الإصدارات.
صيغة استخدام أمر diff
diff [options] file1 file2
يعرض الأمر عددًا من الرموز التي تعبّر عن نوع التغيير المطلوب بين الملفين:
| الرمز | المعنى |
|---|---|
| c | CHANGE: يوجد سطر أو محتوى يجب تغييره. |
| d | DELETE: يوجد محتوى ينبغي حذفه. |
| a | ADD: يوجد محتوى ينبغي إضافته. |
في مخرجات الأمر:
- الرمز
<يشير إلى الملف الأول. - الرمز
>يشير إلى الملف الثاني، والذي يُستخدم غالبًا كمرجع للمقارنة.
أمثلة عملية على استخدام أمر diff
التحقق مما إذا كان الملفان متطابقين
إذا أردت أن يوضح لك diff أن الملفين متساويان، فاستخدم الخيار -s. في المثال التالي، الملفان fileA و sameAsfileA يحتويان على المحتوى نفسه.

عرض الفروقات بين ملفين مختلفين
عندما يختلف محتوى الملفين، يعرض diff الأسطر التي تحتاج إلى تعديل. في المثال التالي، يوضّح الإخراج أن الأسطر 11 و14 في الملف showList_v2.js يجب أن تتغير لتتوافق مع الأسطر 11 و13 في الملف showList_v1.js.

مقارنة الملفات جنبًا إلى جنب
من أكثر الطرق وضوحًا في عرض الفروق استخدام الخيار -y، إذ يتيح لك رؤية الملفين بمحاذاة أفقية مباشرة.
diff -y file1 file2

استخدام المخرجات الموحدة Unified Output
صيغة Unified Output من أكثر الصيغ استخدامًا، لأنها مناسبة جدًا لإنشاء ملفات تصحيح يمكن تمريرها لاحقًا إلى الأمر patch.

خيارات مفيدة مع أمر diff
-i: لتجاهل اختلاف حالة الأحرف بين الكبير والصغير، لأنdiffحساس لحالة الأحرف افتراضيًا.-w: لتجاهل المسافات البيضاءwhitespaces، والتي تُعتبر فرقًا افتراضيًا عند المقارنة.
ما هو أمر patch ولماذا يُستخدم؟
في مشاريع البرمجة، تتكرر التعديلات والإصلاحات باستمرار، وليس من العملي إرسال ملف كامل مع كل تعديل بسيط. لهذا يُستخدم patch لتطبيق مجموعة تغييرات فقط على ملف موجود مسبقًا.
تُعد هذه الطريقة مفيدة لأنها:
- تقلل حجم البيانات المتبادلة بين أعضاء الفريق.
- تركّز على التغييرات فقط بدل إعادة إرسال الملفات كاملة.
- توفر أسلوبًا أكثر أمانًا ومنهجية لتوزيع الإصلاحات.
- تمثل أساسًا مفاهيميًا قريبًا من آلية عمل أنظمة مثل Git وSVN.
صيغة استخدام أمر patch
patch file_to_change < patch_file
شرح عملي: إنشاء Patch وتطبيقه على ملف
لنفترض أن لدينا ملف JavaScript بسيطًا باسم print_in_js.js وظيفته طباعة نص معين.

لكن توجد مشكلة داخل دالة الطباعة، ونحتاج إلى إصلاحها. يقوم أحد أعضاء الفريق بمراجعة الملف، ويكتشف وجود خطأ كتابي في السطر الثالث، ثم يصحح الملف ويُنشئ Patch بدلًا من إرسال الملف كاملًا.
إنشاء ملف Patch باستخدام diff -u
diff -u print_in_js.js print_in_js_Fixed.js > patched_print_js.diff
بعد ذلك يمكن مراجعة محتوى ملف التصحيح الناتج لمعرفة الأسطر التي تم تعديلها.

تطبيق Patch على الملف الأصلي
بعد توفر ملف التصحيح، يمكن تطبيقه على الملف الأصلي باستخدام الأمر التالي:
patch print_in_js.js < patched_print_js.diff

وبهذه الطريقة يتم إصلاح الشيفرة مباشرة، دون الحاجة إلى استبدال الملف أو إدخال التعديلات يدويًا.
متى يكون استخدام diff و patch هو الخيار الأفضل؟
يكون الاعتماد على هاتين الأداتين مناسبًا بشكل خاص في الحالات التالية:
- عند مقارنة نسختين من ملفات الإعدادات على الخوادم.
- عند مراجعة تغييرات شيفرة مصدرية صغيرة أو متوسطة الحجم.
- عند إرسال إصلاحات دقيقة داخل فريق التطوير.
- عند العمل في بيئات لا تتوفر فيها أدوات إدارة إصدارات متقدمة.
- عند الرغبة في فهم آلية تتبع التغييرات قبل الانتقال إلى Git أو أنظمة مشابهة.
أفضل ممارسات عند استخدام أوامر المقارنة والتصحيح
- احرص على الاحتفاظ بنسخة احتياطية من الملف قبل تطبيق أي
patch. - استخدم
diff -uعند إنشاء ملفات التصحيح، لأنها أكثر تنظيمًا ووضوحًا. - تأكد من أن الملف المستهدف لم يتغير منذ إنشاء ملف
patch، حتى لا تفشل العملية. - استخدم الخيارات مثل
-iو-wعند الحاجة لتقليل الفروقات غير الجوهرية. - راجع مخرجات
diffجيدًا قبل اعتمادها في بيئة الإنتاج.
الخلاصة التقنية
يوفر الأمران diff وpatch طريقة فعالة وبسيطة لإدارة الفروقات بين الملفات وتطبيق التعديلات بدقة. وعلى الرغم من أن أدوات إدارة الإصدارات الحديثة مثل Git تقدم إمكانات أوسع، فإن فهم هذين الأمرين يمنحك أساسًا تقنيًا مهمًا لفهم كيفية تتبع التغييرات وتوزيع الإصلاحات داخل المشاريع البرمجية. إذا كنت تعمل على Linux أو تدير ملفات شيفرة وإعدادات بانتظام، فإتقان diff وpatch سيمنحك مرونة أكبر وكفاءة أعلى في التعامل مع التعديلات.