أمر Linux diff: مقارنة ملفين وتطبيق التعديلات باستخدام patch

دقائق القراءة: 4

مقدمة: لماذا تحتاج إلى diff و patch في Linux؟

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

ولا يتوقف الأمر عند معرفة الفروق فقط، إذ يوفر Linux أيضًا الأمر patch لتطبيق التعديلات الناتجة من ملف إلى آخر دون الحاجة إلى استبدال الملف بالكامل. هذه الآلية مفيدة جدًا عند مشاركة الإصلاحات بين أعضاء الفريق أو عند التعامل مع ملفات الإعدادات والشيفرة البرمجية.

مقارنة الملفات في Linux باستخدام أمر diff وتطبيق التعديلات عبر patch

ما هو أمر diff في Linux؟

أمر diff يُستخدم لمقارنة ملفين سطرًا بسطر، ثم عرض الاختلافات بينهما بصيغة مفهومة. ويُعد هذا الأمر مفيدًا خصوصًا عند مراجعة ملفات الشيفرة أو ملفات الإعدادات التي يصعب تدقيقها يدويًا.

من أبرز مزايا diff:

  • تسريع عملية اكتشاف التعديلات بين نسختين من الملف.
  • تقليل الأخطاء البشرية الناتجة عن المقارنة اليدوية.
  • إمكانية استخدام مخرجاته مع أدوات أخرى مثل patch.
  • الاستفادة منه في بيئات التطوير وإدارة الإصدارات.

صيغة استخدام أمر diff

diff [options] file1 file2

يعرض الأمر عددًا من الرموز التي تعبّر عن نوع التغيير المطلوب بين الملفين:

الرمز المعنى
c CHANGE: يوجد سطر أو محتوى يجب تغييره.
d DELETE: يوجد محتوى ينبغي حذفه.
a ADD: يوجد محتوى ينبغي إضافته.

في مخرجات الأمر:

  • الرمز < يشير إلى الملف الأول.
  • الرمز > يشير إلى الملف الثاني، والذي يُستخدم غالبًا كمرجع للمقارنة.

أمثلة عملية على استخدام أمر diff

التحقق مما إذا كان الملفان متطابقين

إذا أردت أن يوضح لك diff أن الملفين متساويان، فاستخدم الخيار -s. في المثال التالي، الملفان fileA و sameAsfileA يحتويان على المحتوى نفسه.

استخدام الخيار -s في diff للتحقق من تطابق ملفين في Linux

عرض الفروقات بين ملفين مختلفين

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

عرض الاختلافات بين نسختين من ملف JavaScript باستخدام أمر diff

مقارنة الملفات جنبًا إلى جنب

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

diff -y file1 file2

مقارنة ملفين جنبًا إلى جنب في Linux باستخدام diff -y

استخدام المخرجات الموحدة Unified Output

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

المخرجات الموحدة من أمر diff لاستخدامها مع patch في Linux

خيارات مفيدة مع أمر diff

  • -i: لتجاهل اختلاف حالة الأحرف بين الكبير والصغير، لأن diff حساس لحالة الأحرف افتراضيًا.
  • -w: لتجاهل المسافات البيضاء whitespaces، والتي تُعتبر فرقًا افتراضيًا عند المقارنة.

ما هو أمر patch ولماذا يُستخدم؟

في مشاريع البرمجة، تتكرر التعديلات والإصلاحات باستمرار، وليس من العملي إرسال ملف كامل مع كل تعديل بسيط. لهذا يُستخدم patch لتطبيق مجموعة تغييرات فقط على ملف موجود مسبقًا.

تُعد هذه الطريقة مفيدة لأنها:

  • تقلل حجم البيانات المتبادلة بين أعضاء الفريق.
  • تركّز على التغييرات فقط بدل إعادة إرسال الملفات كاملة.
  • توفر أسلوبًا أكثر أمانًا ومنهجية لتوزيع الإصلاحات.
  • تمثل أساسًا مفاهيميًا قريبًا من آلية عمل أنظمة مثل Git وSVN.

صيغة استخدام أمر patch

patch file_to_change < patch_file

شرح عملي: إنشاء Patch وتطبيقه على ملف

لنفترض أن لدينا ملف JavaScript بسيطًا باسم print_in_js.js وظيفته طباعة نص معين.

ملف JavaScript قبل الإصلاح لتوضيح استخدام patch في Linux

لكن توجد مشكلة داخل دالة الطباعة، ونحتاج إلى إصلاحها. يقوم أحد أعضاء الفريق بمراجعة الملف، ويكتشف وجود خطأ كتابي في السطر الثالث، ثم يصحح الملف ويُنشئ Patch بدلًا من إرسال الملف كاملًا.

إنشاء ملف Patch باستخدام diff -u

diff -u print_in_js.js print_in_js_Fixed.js > patched_print_js.diff

بعد ذلك يمكن مراجعة محتوى ملف التصحيح الناتج لمعرفة الأسطر التي تم تعديلها.

محتوى ملف patch الناتج من diff -u في Linux

تطبيق Patch على الملف الأصلي

بعد توفر ملف التصحيح، يمكن تطبيقه على الملف الأصلي باستخدام الأمر التالي:

patch print_in_js.js < patched_print_js.diff

تطبيق patch على ملف JavaScript وإصلاح الشيفرة في Linux

وبهذه الطريقة يتم إصلاح الشيفرة مباشرة، دون الحاجة إلى استبدال الملف أو إدخال التعديلات يدويًا.

متى يكون استخدام diff و patch هو الخيار الأفضل؟

يكون الاعتماد على هاتين الأداتين مناسبًا بشكل خاص في الحالات التالية:

  • عند مقارنة نسختين من ملفات الإعدادات على الخوادم.
  • عند مراجعة تغييرات شيفرة مصدرية صغيرة أو متوسطة الحجم.
  • عند إرسال إصلاحات دقيقة داخل فريق التطوير.
  • عند العمل في بيئات لا تتوفر فيها أدوات إدارة إصدارات متقدمة.
  • عند الرغبة في فهم آلية تتبع التغييرات قبل الانتقال إلى Git أو أنظمة مشابهة.

أفضل ممارسات عند استخدام أوامر المقارنة والتصحيح

  1. احرص على الاحتفاظ بنسخة احتياطية من الملف قبل تطبيق أي patch.
  2. استخدم diff -u عند إنشاء ملفات التصحيح، لأنها أكثر تنظيمًا ووضوحًا.
  3. تأكد من أن الملف المستهدف لم يتغير منذ إنشاء ملف patch، حتى لا تفشل العملية.
  4. استخدم الخيارات مثل -i و-w عند الحاجة لتقليل الفروقات غير الجوهرية.
  5. راجع مخرجات diff جيدًا قبل اعتمادها في بيئة الإنتاج.

الخلاصة التقنية

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *