תוכן עניינים:
diff
הוא כלי שורת פקודה המאפשר לך להשוות בין שני קבצים שורה אחר שורה. זה יכול גם להשוות את התוכן של ספריות.
פקודת ה-
diff
משמשת בדרך כלל ליצירת תיקון המכיל את ההבדלים בין קובץ אחד או יותר שניתן ליישם באמצעות הפקודה
patch
.
כיצד להשתמש
diff
התחביר לפקודה
diff
הוא כדלקמן:
diff… FILES
פקודת ה-
diff
יכולה להציג את הפלט במספר פורמטים כאשר הפורמט הרגיל, ההקשר והמאוחד הוא הנפוץ ביותר. הפלט כולל מידע על אילו שורות בקבצים חייבים לשנות כך שיהיו זהים. אם הקבצים תואמים, לא נוצר פלט.
כדי לשמור את פלט הפקודה בקובץ, השתמש במפעיל ההפניה מחדש:
diff file1 file2 > patch
, נשתמש בשני הקבצים הבאים כדי להסביר כיצד פועלת הפקודה
diff
:
Ubuntu Arch Linux Debian CentOS Fedora
קובץ 2
Kubuntu Ubuntu Debian Arch Linux Centos Fedora
פורמט רגיל
בצורתו הפשוטה ביותר כאשר פקודת ה-
diff
מופעלת על שני קבצי טקסט ללא אפשרות, היא מפיקה פלט בפורמט הרגיל:
diff file1 file2
הפלט ייראה כך:
0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos
פורמט הפלט הרגיל מורכב ממקטע אחד או יותר המתאר את ההבדלים. כל קטע נראה כך:
change-command < from-file-line… --- > to-file-line…
0a1
,
2d2
ו-
4c4, 5
הן פקודות שינוי. כל פקודת שינוי מכילה את הדברים הבאים משמאל לימין:
- מספר השורה או טווח השורות בקובץ הראשון. תו שינוי מיוחד. מספר השורה או טווח השורות בקובץ השני.
אופי השינוי יכול להיות אחד מהבאים:
-
a
- הוסף את השורות.c
- שנה את הקווים.d
- מחק את השורות.
אחרי פקודת השינוי אחריהם שורות השלמות שהוסרו (
<
) ונוספות לקובץ (
>
).
בואו נסביר את הפלט:
-
0a1
- הוסף שורה1
של הקובץ השני בתחילת הקובץ1
(אחרי שורה0
).-
> Kubuntu
- הקו מהשורה השנייה שמתווסף לקובץ הראשון כמתואר לעיל.
2d2
- מחק שורה2
בקובץ הראשון. הסמל2
אחרי סמלd
פירושו שאם הקו לא יימחק הוא יופיע בשורה2
בקובץ השני.-
< Arch Linux
- השורה שנמחקה.
4c4, 5
- החלף (שנה) קו5
בקובץ הראשון בשורות4-5
מהקובץ השני.-
< CentOS
- השורה בקובץ הראשון שיש להחליף.---
- מפריד.> Arch Linux
ו-> Centos
- קווים מהקובץ השני המחליף את הקו בקובץ הראשון.
-
פורמט הקשר
כאשר משתמשים בתבנית פלט ההקשר, פקודת ה-
diff
מציגה מספר שורות של הקשר סביב השורות הנבדלות בין הקבצים.
האפשרות
-c
אומרת
diff
להפיק פלט בתבנית ההקשר:
diff -c file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
הפלט מתחיל בשמות ובחותמות הזמן אם הקבצים שמשווים, וקטע אחד או יותר המתארים את ההבדלים. כל קטע נראה כך:
*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…
-
from-file-line-numbers
to-file-line-numbers
השורות או טווח השורות המופרד בפסיקים בקובץ הראשון והשני, בהתאמה.from-file-line
to-file-line
- הקווים השונים וקווי ההקשר:- קווים המתחילים בשני רווחים הם קווי הקשר, הקווים זהים בשני הקבצים. קווים המתחילים בסמל מינוס (
-
) הם הקווים שאינם קשורים לשום דבר בקובץ השני. קווים חסרים בקובץ השני. קווים שמתחילים בסמל הפלוס (+
) הם הקווים שאינם מתאימים לשום דבר בקובץ הראשון. קווים חסרים בקובץ הראשון. קווים המתחילים בסימן הקריאה (!
) הם הקווים שמשתנים בין שני קבצים. כל קבוצת שורות מתחילה!
מהקובץ הראשון יש התאמה מקבילה בקובץ השני.
- קווים המתחילים בשני רווחים הם קווי הקשר, הקווים זהים בשני הקבצים. קווים המתחילים בסמל מינוס (
בואו נסביר את החלקים החשובים ביותר בתפוקה:
- בדוגמה זו יש לנו רק פרק אחד המתאר את ההבדלים.
*** 1, 6 ****
ו---- 1, 7 ----
מספרים לנו את טווח השורות מהקבצים הראשון והשני הכלולים בסעיף זה. קוUbuntu
,Debian
,Fedora
, השורה הריקה האחרונה זהה בשני הקבצים. קווים אלו מתחילים עם שטח כפול. קו- Arch Linux
מהקובץ הראשון לא תואמת שום דבר בקובץ השני. למרות ששורה זו קיימת גם בקובץ השני, המיקומים שונים. קו+ Kubuntu
מהקובץ השני אינו תואם דבר בקובץ הראשון. קו! CentOS
! CentOS
מהקובץ והשורות הראשונות! Arch Linux
! Arch Linux
ו-! CentOS
! CentOS
מהקובץ השני משתנים בין הקבצים.
כברירת מחדל, מספר שורות ההקשר מוגדר כברירת מחדל לשלושה. כדי לציין מספר אחר השתמש באפשרות
-C
(-
--contexts
):
diff -C 1 file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
פורמט מאוחד
פורמט הפלט המאוחד הוא גרסה משופרת של תבנית ההקשר ומפיק פלט קטן יותר.
השתמש באפשרות
-u
כדי להגיד
diff
להדפיס את הפלט בפורמט המאוחד:
diff -u file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora
הפלט מתחיל בשמות ובחותמות הזמן של הקבצים ובקטע אחד או יותר המתארים את ההבדלים. כל קטע לובש את הטופס הבא:
*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…
-
@@ from-file-line-numbers to-file-line-numbers @@
- מספר השורה או טווח השורות מהקבצים הראשון והשני הכלולים בסעיף זה.line-from-files
- הקווים השונים וקווי ההקשר:- קווים המתחילים בשני רווחים הם קווי הקשר, הקווים שהם זהים בשני הקבצים. קווים המתחילים בסמל מינוס (
-
) הם הקווים שמוסרים מהקובץ הראשון. הקווים המתחילים בסמל הפלוס (+
) הם השורות שנוספות מהקובץ הראשון.
- קווים המתחילים בשני רווחים הם קווי הקשר, הקווים שהם זהים בשני הקבצים. קווים המתחילים בסמל מינוס (
התעלם מהמקרה
כפי שתבחין בדוגמאות שלעיל, פקודת ה-
diff
היא רגישה לרישיות.
השתמש באפשרות
-i
כדי לספר את
diff
להתעלמות מהתיק:
diff -ui file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora
סיכום
השוואה בין קבצי טקסט להבדלים היא אחת המשימות הנפוצות ביותר עבור מנהלי מערכות לינוקס.
פקודת ה-
diff
משווה קבצים שורה אחר שורה. לקבלת מידע נוסף, הקלד
man diff
בטרמינל שלך.
סקירה: כלי שורת פקודה 14 פקודה קלה יותר לשימוש מאשר PowerShell
עבור עבודה רצינית במסוף, כמה כלי עזר (אם בכלל) יכול להתאים את היכולת של פיקוד קח. אם אתה משתמש בשורת הפקודה באופן קבוע, זה השקעה טובה.
פקודה Dmesg בלינוקס
כלי שירות שורת הפקודה dmesg מדפיס ושולט במאגר טבעת הגרעינים. זה שימושי לבחינת הודעות אתחול גרעינים ולבעיות באגים הקשורים לחומרה.
פקודה Du בלינוקס
הפקודה du, קיצור לשימוש בדיסק מדווחת על הכמות המשוערת של שטח הדיסק המשמש קבצים או ספריות נתונים. זה שימושי למעשה למציאת קבצים וספריות שגוזלים כמויות גדולות של שטח דיסק.