كيفية تطبيق تصحيح على ملف (وإنشاء تصحيحات) في Linux

patchيتيح لك أمر Linux نقل التغييرات من مجموعة واحدة من الملفات إلى مجموعة أخرى من الملفات بسرعة وأمان. تعلم كيفية استخدام patchالطريقة البسيطة.

أوامر التصحيح والفرق

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

و diffيتناول قيادة إصدارين مختلفين من ملف ويسرد الخلافات بينهما. يمكن تخزين الاختلافات في ملف يسمى ملف التصحيح.

و  patch القيادة يمكن قراءة ملف التصحيح واستخدام محتويات كمجموعة من التعليمات. باتباع هذه التعليمات ، يتم نسخ التغييرات في الملف المعدل في الملف الأصلي.

تخيل الآن أن هذه العملية تحدث لدليل كامل من الملفات النصية. الكل دفعة واحدة. هذه هي قوة patch.

في بعض الأحيان لا يتم إرسال الملفات المعدلة إليك. كل ما يتم إرساله هو ملف التصحيح. لماذا ترسل عشرات الملفات بشكل دائري بينما يمكنك إرسال ملف واحد أو نشر ملف واحد للتنزيل بسهولة؟

ماذا تفعل بملف التصحيح لتصحيح ملفاتك بالفعل؟ بصرف النظر عن كونه مجرد لسان ، فهذا أيضًا سؤال جيد. سنرشدك خلال هذا المقال.

patchغالبًا ما يستخدم هذا الأمر الأشخاص الذين يعملون مع ملفات التعليمات البرمجية المصدر للبرنامج ، ولكنه يعمل بشكل جيد مع أي مجموعة من الملفات النصية مهما كان الغرض منها ، أو كود المصدر أم لا.

ذات صلة: كيفية مقارنة ملفين نصيين في Linux Terminal

سيناريو المثال لدينا

في هذا السيناريو ، نحن في دليل يسمى work والذي يحتوي على دليلين آخرين. أحدهما يسمى العمل ، والآخر يسمى الأحدث . يحتوي دليل العمل على مجموعة من ملفات التعليمات البرمجية المصدر. يحتوي أحدث دليل على أحدث إصدار من ملفات التعليمات البرمجية المصدر هذه ، والتي تم تعديل بعضها.

لكي تكون بأمان ، فإن دليل العمل هو نسخة من الإصدار الحالي من الملفات النصية. إنها ليست النسخة الوحيدة منهم.

البحث عن الاختلافات بين نسختين من الملف

و diffيجد الأمر الاختلافات بين الملفين. الإجراء الافتراضي الخاص به هو سرد الأسطر المعدلة في نافذة المحطة الطرفية.

ملف واحد يسمى slang.c. سنقارن الإصدار الموجود في دليل العمل بالإصدار الموجود في أحدث دليل.

و -u يقول خيار (موحدة) diffلإدراج أيضا بعض خطوط النص المعدل للامم المتحدة من قبل وبعد كل الأقسام تغييرها. تسمى هذه الخطوط بخطوط السياق. فهي تساعد  patch الأمر في تحديد مكان التغيير بدقة في الملف الأصلي.

نقدم أسماء الملفات حتى diffنعرف الملفات المطلوب مقارنتها. يتم سرد الملف الأصلي أولاً ، ثم الملف المعدل. هذا هو الأمر الذي نصدره إلى diff:

فرق -u العمل / slang.c الأحدث / slang.c

diffينتج قائمة إخراج توضح الفروق بين الملفات. إذا كانت الملفات متطابقة ، فلن يكون هناك أي إخراج مدرج على الإطلاق. diffتؤكد رؤية هذا النوع من المخرجات من وجود اختلافات بين إصداري الملف وأن الملف الأصلي يحتاج إلى تصحيح.

صنع ملف التصحيح

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

فرق -u العمل / slang.c latest / slang.c> slang.patch

اسم ملف التصحيح عشوائي. يمكنك تسميتها أي شيء تريده. إن إعطائها امتداد ".patch" فكرة جيدة ؛ ومع ذلك ، لأنه يوضح نوع الملف.

لجعل  patchالعمل على ملف التصحيح وتعديل ملف العمل / slang.c، استخدم الأمر التالي. و -uيتيح الخيار (الموحدة) patch تعرف أن الملف التصحيح يحتوي على خطوط السياق موحدة. بمعنى آخر ، استخدمنا الخيار -u مع فرق ، لذلك نستخدم -uالخيار مع patch.

التصحيح -u working.slang.c -i slang.patch

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

عمل نسخة احتياطية من الملف الأصلي

يمكننا إصدار تعليمات patchلعمل نسخة احتياطية من الملفات المصححة قبل تغييرها باستخدام  -bخيار (النسخ الاحتياطي). و -iيقول الخيار (المدخلات) تصحيح اسم الملف التصحيح الاستخدام:

 التصحيح -u -b working.slang.c -i slang.patch 

تم تصحيح الملف كما كان من قبل ، مع عدم وجود فرق واضح في الإخراج. ومع ذلك ، إذا نظرت إلى مجلد العمل ، فسترى أن الملف المسمى slang.c.orig قد تم إنشاؤه. تُظهر طوابع التاريخ والوقت للملفات أن slang.c.orig هو الملف الأصلي وأن slang.c هو ملف جديد تم إنشاؤه بواسطة patch.

استخدام فرق مع الدلائل

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

الخيارات التي سنستخدمها diffهي خيار -u(السياق الموحد) الذي استخدمناه سابقًا ، الخيار -r(العودي) diffللنظر في أي أدلة فرعية -Nوخيار (ملف جديد).

و -Nيقول خيار diff كيفية التعامل مع الملفات في أحدث دليل ليست في دليل العمل. يفرض diffوضع التعليمات في ملف التصحيح بحيث يتم إنشاء patch الملفات الموجودة في أحدث دليل ولكنها مفقودة من دليل العمل.

يمكنك تجميع الخيارات معًا بحيث تستخدم واصلة واحدة ( -).

لاحظ أننا نقدم أسماء الدلائل فقط ، ولا نطلب diffالنظر في ملفات معينة:

فرق - العمل / أحدث /> عامية

نظرة خاطفة داخل ملف التصحيح

دعونا نلقي نظرة سريعة على ملف التصحيح. سوف نستخدمها lessلإلقاء نظرة على محتوياتها.

يظهر الجزء العلوي من الملف الاختلافات بين نسختين من slang.c.

بالتمرير لأسفل خلال ملف التصحيح ، نرى أنه يصف التغييرات في ملف آخر يسمى Structs.h. هذا يتحقق من أن ملف التصحيح يحتوي بالتأكيد على الاختلافات بين الإصدارات المختلفة لملفات متعددة.

فكر قبل أن تثب

قد يكون تصحيح مجموعة كبيرة من الملفات مثيراً للقلق بعض الشيء ، لذلك سنستخدم --dry-run الخيار للتحقق من أن كل شيء على ما يرام قبل أن نتحرك ونلتزم بإجراء التغييرات.

و --dry-runيقول خيار patchأن تفعل كل شيء وبصرف النظر عن تعديل في الواقع الملفات. patchستقوم بإجراء جميع عمليات الفحص قبل الرحلة على الملفات وإذا واجهت أي مشاكل ، فإنها تقوم بالإبلاغ عنها. في كلتا الحالتين ، لا يتم تعديل أي ملفات.

إذا لم يتم الإبلاغ عن أي مشاكل ، فيمكننا تكرار الأمر بدون --dry-runالخيار وتصحيح ملفاتنا بثقة.

و -dالخيار (دليل) اقول patchالتي الدليل إلى العمل على.

لاحظ أننا لا نستخدم -iخيار (الإدخال) لتحديد patchملف التصحيح الذي يحتوي على التعليمات من diff. بدلا من ذلك، نحن إعادة توجيه ملف التصحيح في patchو <.

تصحيح - تشغيل جاف - RUN - عمل <slang.patch

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

فحوصات ما قبل الرحلة جيدة ؛ نحن جاهزون للإقلاع.

ترقيع الدليل

لتطبيق التصحيحات بشكل حقيقي على الملفات ، نستخدم الأمر السابق بدون --dry-runالخيار.

التصحيح -RUN -d العمل <slang.patch

هذه المرة لا يبدأ كل سطر من الإخراج بـ "التحقق" ، كل سطر يبدأ بـ "patching".

ولم يتم الإبلاغ عن أي مشاكل. يمكننا تجميع شفرة المصدر الخاصة بنا ، وسنكون على أحدث إصدار من البرنامج.

تسوية خلافاتك

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