הבדל
כמו comm תָכְנִית, הבדל משמש לזיהוי ההבדלים בין קבצים. עם זאת, הבדל הוא כלי מורכב הרבה יותר, התומך בפורמטים רבים של פלט ויכולת לעבד אוספים גדולים של קבצי טקסט בבת אחת. הבדל משמש לעתים קרובות על ידי מפתחי תוכנה לבחינת שינויים בין גרסאות שונות של קוד מקור של תוכניות, וכך יש לו את היכולת לבחון באופן רקורסיבי ספריות של קוד מקור, המכונות לעתים קרובות עצי מקורשימוש נפוץ אחד עבור הבדל הוא יצירתו של קבצי diff or טלאים אשר משמשות תוכנות כגון תיקון (שנדון על כך בקרוב) כדי להמיר גרסה אחת של קובץ (או קבצים) לגרסה אחרת.
אם נשתמש הבדל כדי להסתכל על קבצי הדוגמה הקודמים שלנו:
[me@linuxbox ~]$ קובץ הבדל1.txt קובץ2.txt
1d0
< א 4א4
> ה
[me@linuxbox ~]$ קובץ הבדל1.txt קובץ2.txt
1d0
< א 4א4
> ה
אנו רואים את סגנון הפלט המוגדר כברירת מחדל: תיאור תמציתי של ההבדלים בין שני הקבצים. בפורמט המוגדר כברירת מחדל, כל קבוצת שינויים קודמת ל- שינוי פקודה בצורה של טווח פעולה כדי לתאר את המיקומים וסוגי השינויים הנדרשים להמרת הקובץ הראשון לקובץ השני:
טבלה 20-4: פקודות שינוי שונות
שינוי תיאור
שינוי תיאור
r1ar2 הוסף את השורות במיקום r2 בקובץ השני למיקום
r1 בקובץ הראשון.
r1cr2 שנה (החלף) את השורות במיקום r1 עם הקווים במיקום r2 בקובץ השני.
r1dr2 מחק את השורות בקובץ הראשון במיקום r1, אשר היה מופיע מטווח r2 בקובץ השני
בפורמט זה, טווח הוא רשימה מופרדת בפסיקים של שורת ההתחלה ושורת הסיום. בעוד שפורמט זה הוא ברירת המחדל (בעיקר לצורך תאימות POSIX ותאימות לאחור עם גרסאות יוניקס מסורתיות של הבדל), הוא אינו בשימוש נרחב כמו פורמטים אופציונליים אחרים. שניים מהפורמטים הפופולריים יותר הם ה- פורמט הקשר ו פורמט מאוחד.
כאשר מוצגים באמצעות פורמט ההקשר (ה- -c אפשרות), נראה את זה:
[me@linuxbox ~]$ diff -c קובץ1.txt קובץ2.txt
*** קובץ1.txt 2008-12-23 06:40:13.000000000 -0500
--- קובץ2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ ה
[me@linuxbox ~]$ diff -c קובץ1.txt קובץ2.txt
*** קובץ1.txt 2008-12-23 06:40:13.000000000 -0500
--- קובץ2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ ה
הפלט מתחיל בשמות שני הקבצים ובחותמות הזמן שלהם. הקובץ הראשון מסומן בכוכביות והקובץ השני מסומן במקפים. לאורך שאר הרשימה, סמנים אלה יציינו את הקבצים המתאימים. לאחר מכן, אנו רואים קבוצות של שינויים, כולל מספר ברירת המחדל של שורות ההקשר המקיפות. בקבוצה הראשונה, אנו רואים:
*** 1,4***
אשר מציין את שורות 1 עד 4 בקובץ הראשון. בהמשך נראה:
--- 1,4 ---
אשר מציין את שורות 1 עד 4 בקובץ השני. בתוך קבוצת שינויים, שורות מתחילות באחד מארבעה אינדיקטורים:
טבלה 20-5: אינדיקטורים לשינוי פורמט הקשר שונים
משמעות המחוון
משמעות המחוון
שורה ריקה המוצגת לצורך הקשר. היא אינה מציינת הבדל בין שני הקבצים.
שורה נמחקה. שורה זו תופיע בקובץ הראשון אך לא בקובץ השני.
+ שורה נוספת. שורה זו תופיע בקובץ השני אך לא בקובץ הראשון.
שורה שונתה. שתי הגרסאות של השורה יוצגו, כל אחת במקטע המתאים לה בקבוצת השינויים.
הפורמט המאוחד דומה לפורמט ההקשר אך תמציתי יותר. הוא מצוין באמצעות -u אפשרות:
[me@linuxbox ~]$ diff -u קובץ1.txt קובץ2.txt
--- קובץ1.txt 2008-12-23 06:40:13.000000000 -0500
+++ קובץ2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 + 1,4 @@
-abcd
+e
[me@linuxbox ~]$ diff -u קובץ1.txt קובץ2.txt
--- קובץ1.txt 2008-12-23 06:40:13.000000000 -0500
+++ קובץ2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 + 1,4 @@
-abcd
+e
ההבדל הבולט ביותר בין פורמט ההקשר לפורמט המאוחד הוא ביטול שורות ההקשר הכפולות, מה שהופך את תוצאות הפורמט המאוחד לקצרות יותר מאלה של פורמט ההקשר. בדוגמה שלנו לעיל, אנו רואים חותמות זמן של קבצים כמו אלו של פורמט ההקשר, ואחריהן המחרוזת @@ -1,4 + 1,4 @@. זה מציין את השורות בקובץ הראשון ואת השורות בקובץ השני המתוארות בקבוצת השינויים. לאחר מכן נמצאות השורות עצמן, עם שלוש שורות ההקשר המוגדרות כברירת מחדל. כל שורה מתחילה באחד משלושה תווים אפשריים:
טבלה 20-6: אינדיקטורים שונים של שינוי פורמט מאוחד
משמעות הדמות
משמעות הדמות
ריק שורה זו משותפת לשני הקבצים.
שורה זו הוסרה מהקובץ הראשון.
+ שורה זו נוספה לקובץ הראשון.