כיצד להחיל תיקון על קובץ (וליצור תיקונים) בלינוקס

patchפקודת לינוקס מאפשרת לך להעביר את השינויים ממערכת קבצים אחת למערכת קבצים אחרת במהירות ובבטחה. למד כיצד להשתמש patchבדרך הפשוטה.

פקודות התיקון וההבדל

דמיין שיש לך קובץ טקסט במחשב שלך. אתה מקבל גרסה שונה של קובץ הטקסט הזה ממישהו אחר. איך מעבירים במהירות את כל השינויים מהקובץ שהשתנה לקובץ המקורי? זה המקום שבו patchו diffנכנסים לשחק. patchו diffנמצאים לינוקס ומערכות הפעלה דמויות יוניקס אחרות, כגון MacOS.

diffהפקודה בוחן שתי גרסאות שונות של קובץ המפרט את ההבדלים ביניהם. ניתן לאחסן את ההבדלים בקובץ הנקרא קובץ תיקון.

patch הפקודה יכול לקרוא קובץ תיקון ולהשתמש בתוכן כמערכת של הוראות. על ידי ביצוע הוראות אלה, השינויים בקובץ שהשתנה משוכפלים בקובץ המקורי.

עכשיו דמיין את התהליך שקורה בספרייה שלמה של קבצי טקסט. הכל במכה אחת. זה הכוח של patch.

לפעמים אתה לא מקבל את הקבצים שהשתנו. כל מה שאתה שולח הוא קובץ התיקון. מדוע לשלוח עשרות קבצים מסביב כשאתה יכול לשלוח קובץ אחד, או לפרסם קובץ אחד להורדה קלה?

מה אתה עושה עם קובץ התיקון כדי לתקן את הקבצים שלך בפועל? מלבד היותו כמעט מעוות לשון, זו גם שאלה טובה. נדריך אותך במאמר זה.

patchפקוד משמשת לרוב על ידי אנשים שעובדים עם קבצי קוד מקור של תוכנה, אבל זה עובד באותה מידה עם כל סט של קבצי טקסט מה קוד המטרה, המקור שלהם או לא.

קשורים: כיצד להשוות שני קבצי טקסט במסוף לינוקס

תרחיש הדוגמה שלנו

בתרחיש זה אנו נמצאים בספריה הנקראת עבודה המכילה שני ספריות נוספות. אחד נקרא עובד, והשני נקרא אחרון . בספריית העבודה יש ​​קבוצה של קבצי קוד מקור. בספרייה האחרונה יש את הגרסה העדכנית ביותר של קבצי קוד המקור הללו, שחלקם שונו.

כדי להיות בטוחים, מדריך העבודה הוא עותק של הגרסה הנוכחית של קבצי הטקסט. זה לא העותק היחיד שלהם.

מציאת ההבדלים בין שתי גרסאות של קובץ

diffהפקודה מוצאת את ההבדלים בין שני קבצים. פעולת ברירת המחדל שלה היא רשימת השורות שהשתנו בחלון המסוף.

קובץ אחד נקרא slang.c. נשווה את הגרסה בספריית העבודה לזו שבספרייה האחרונה.

האפשרות -u (המאוחדת) מורה diffלרשום גם כמה משורות הטקסט שלא השתנו מלפני כל אחד מהסעיפים שהשתנו. שורות אלה נקראות קווי הקשר. הם עוזרים  patch לפקודה לאתר בדיוק היכן יש לבצע שינוי בקובץ המקורי.

אנו מספקים את שמות הקבצים כך diffשיידע אילו קבצים להשוות. הקובץ המקורי מופיע תחילה, ואז הקובץ ששונה. זו הפקודה שאנו מוציאים diff:

diff -u working / slang.c האחרונה / slang.c

diffמייצר רישום פלט המציג את ההבדלים בין הקבצים. אם הקבצים היו זהים, לא היה מופיע פלט כלל. ראיית פלט מסוג זה diffמאשרת כי ישנם הבדלים בין שתי גרסאות הקבצים וכי הקובץ המקורי זקוק לתיקון.

הכנת תיקון

כדי לתפוס את ההבדלים בקובץ תיקון, השתמש בפקודה הבאה. זו אותה פקודה כמו לעיל, כאשר הפלט diffמנותב לקובץ שנקרא slang.patch.

diff -u working / slang.c latest / slang.c> slang.patch

שמו של קובץ התיקון הוא שרירותי. אתה יכול לקרוא לזה כל דבר שאתה אוהב. לתת לו סיומת ".patch" זה רעיון טוב; עם זאת, מכיוון שהוא מבהיר איזה סוג קובץ מדובר.

כדי לבצע  patchמעשה על קובץ התיקון ולשנות את הקובץ working / slang.c, השתמש בפקודה הבאה. האפשרות -u(מאוחדת) patch מודיעה שקובץ התיקון מכיל שורות הקשר מאוחדות. במילים אחרות, השתמשנו באפשרות -u עם diff, ולכן אנו משתמשים -uבאפשרות עם patch.

תיקון -u working.slang.c -i slang.patch

אם הכל מסתדר כשורה, יש שורה אחת של פלט שמספרת שאתה patchמתקן את הקובץ.

גיבוי של ה- FIle המקורי

אנו יכולים להורות patchליצור עותק גיבוי של קבצים מתוקנים לפני שינוים באמצעות  -bאפשרות (גיבוי). האפשרות -i(קלט) מספרת לתיקון את שם קובץ התיקון לשימוש:

 תיקון-u -b working.slang.c -i slang.patch 

הקובץ מתוקן כבעבר, ללא הבדל גלוי בפלט. עם זאת, אם אתה מסתכל בתיקיית העבודה, תראה שהקובץ שנקרא slang.c.orig נוצר. בולי התאריך והשעה של הקבצים מראים ש- slang.c.orig הוא הקובץ המקורי ו- slang.c הוא קובץ חדש שנוצר על ידי patch.

שימוש ב- diff עם ספריות

נוכל diffליצור קובץ תיקון המכיל את כל ההבדלים בין הקבצים בשני ספריות. לאחר מכן נוכל להשתמש בקובץ התיקון הזה patchכדי להחיל את ההבדלים על הקבצים בתיקיית העבודה עם פקודה אחת.

האפשרויות בהן נשתמש diffהן האפשרות -u(הקשר מאוחד) שהשתמשנו בו קודם, האפשרות -r(רקורסיבית) diffלבדוק את כל ספריות המשנה ואת האפשרות -N(קובץ חדש).

-Nאפשרות מספרת diff כיצד להתמודד עם הקבצים בספרייה האחרונה שאינם בספריית העבודה. זה מכריח diffלהכניס הוראות לקובץ התיקון כך patch שיוצר קבצים שנמצאים בספריה האחרונה אך חסרים בספריית העבודה.

אתה יכול לצרף את האפשרויות יחד כך שישתמשו במקף יחיד ( -).

שים לב שאנחנו מספקים רק את שמות הספריות, אנחנו לא אומרים diffלהסתכל על קבצים ספציפיים:

diff -ruN עובד / אחרון /> slang.patch

מציץ בתוך קובץ התיקון

בואו נסתכל במהירות על קובץ התיקון. נשתמש lessלהסתכל על תוכנו.

החלק העליון של הקובץ מציג את ההבדלים בין שתי הגרסאות של slang.c.

גוללים למטה דרך קובץ התיקון, אנו רואים כי לאחר מכן הוא מתאר את השינויים בקובץ אחר הנקרא structs.h. זה מאמת שקובץ התיקון בהחלט מכיל את ההבדלים בין גרסאות שונות של מספר קבצים.

הסתכל לפני שאתה קופץ

תיקון אוסף גדול של קבצים יכול להיות מעט מרתיע, ולכן אנו נשתמש --dry-run באפשרות לבדוק שהכל בסדר לפני שאנחנו מתקדמים ומתחייבים לבצע את השינויים.

--dry-runאפשרות מספרת patchלעשות הכל מלבד בעצם שינוי קבצים. patchיבצע את כל הבדיקות שקדמו לטיסה בקבצים ואם הוא נתקל בבעיות כלשהן, הוא מדווח עליהם. כך או כך, אין שינוי בקבצים.

אם לא מדווחים על בעיות, אנו יכולים לחזור על הפקודה ללא --dry-runאפשרות ולתקן בבטחה את הקבצים שלנו.

האפשרות -d(מדריך) מספרת patchבאיזו ספריה לעבוד.

שים לב שאנחנו לא משתמשים באפשרות -i(קלט) כדי לדעת patchאיזה קובץ תיקון מכיל את ההוראות diff. במקום, אנחנו הפניית לטלאים לתוך patchעם <.

תיקון --dry-run -ruN -d עובד <slang.patch

מתוך הספריה כולה, diffמצא שני קבצים לתיקון. ההוראות לגבי השינויים בשני הקבצים נבדקו על ידי patch ולא דווח על בעיות.

בדיקות לפני טיסה הן בסדר; אנחנו מוכנים להמראה.

תיקון מדריך

כדי להחיל את התיקונים האמיתיים על הקבצים אנו משתמשים בפקודה הקודמת ללא --dry-runאפשרות.

תיקון -ruN -d עובד <slang.patch

הפעם כל שורת פלט לא מתחילה ב"בדוק ", כל שורה מתחילה ב"טלאים".

ולא מדווחים על בעיות. אנו יכולים לאסוף את קוד המקור שלנו, ונמצא על הגרסה האחרונה של התוכנה.

קבע את ההבדלים שלך

זו ללא ספק הדרך הקלה והבטוחה ביותר לשימוש patch. העתק את קבצי היעד שלך לתיקיה ותיקון תיקייה זו. העתק אותם בחזרה כשאתה שמח שתהליך התיקון הסתיים ללא שגיאות.