Linux 文件對比黑科技!diff 命令從入門到精通實戰
在寧靜美好的夜晚,當你面對著兩份既相似又各具特色的配置文件時,是否也曾憧憬過,要是有一種工具能夠像聰明的小偵探一樣,迅速而準確地揭示它們之間的差異,那該有多棒啊?沒錯,今天,我想向大家介紹Linux中非常實用的一個小幫手——diff工具。不知道大家有沒有嘗試過使用它呢?它是否也讓你感到驚喜和贊嘆了呢?
一、什么是diff?
簡單來說,diff 是 Linux/Unix 系統中用于逐行對比兩個文件或整個目錄內容差異的強大命令。它能夠精準指出哪些行被添加、刪除或修改,并提供多種格式和選項,幫助你以最直觀的方式發現變化。
二、基本語法
diff [選項] 文件1 文件2
- 文件1:舊版配置/代碼
- 文件2:新版配置/代碼
1. 單文件對比實戰
舉個小栗子:
創建兩個測試文件:
echo -e "apple\nbanana\ncherry\ndate" > fruits1.txt
echo -e "apple\nblueberry\ncherry\nfig" > fruits2.txt
執行基本對比:
diff fruits1.txt fruits2.txt
瞬間告訴你哪行不一樣,是不是很酷?如下所示:
2c2
< banana
---
> blueberry
4c4
< date
---
> fig
輸出解讀指南:
- 2c2 表示第2行被替換(change)
- < 標記左側文件內容
- 標記右側文件內容
- d 表示刪除(delete)
- a 表示添加(append)
2. 目錄對比技巧
diff -r dir1/ dir2/
實用參數組合:
diff -rq dirA/ dirB/ # 僅顯示差異文件名
diff -rw dirX/ dirY/ # 忽略空格差異
三、輸出格式
diff 支持多種輸出格式,常見的有普通格式(默認)、統一格式(unified)、上下文格式(context)和并排格式(side-by-side)。
1. 普通格式
普通格式是 diff 的默認輸出,使用 < 表示文件1中存在但文件2中刪除的行,使用 > 表示文件2中新增加的行。
root@wtrpro:~# diff fruits1.txt fruits2.txt
2c2
< banana
---
> blueberry
4c4
< date
---
> fig
該格式直觀但不易讀,對于大規模差異不夠友好 。
2. 統一格式
統一格式在上下文格式基礎上進行了簡化,將冗余的上下文行合并,只保留變更前后附近的若干行。使用-u或-U行數選項開啟。
root@wtrpro:~# diff -u fruits1.txt fruits2.txt
--- fruits1.txt 2025-05-09 22:48:56.924862820 +0800
+++ fruits2.txt 2025-05-09 22:48:56.924862820 +0800
@@ -1,4 +1,4 @@
apple
-banana
+blueberry
cherry
-date
+fig
該格式是開源社區最常用的補丁格式,便于生成和應用補丁。
3. 上下文格式
上下文格式使用-c選項,其輸出比普通格式更易讀,保留完整的上下下文信息:
root@wtrpro:~# diff -c fruits1.txt fruits2.txt
*** fruits1.txt 2025-05-09 22:48:56.924862820 +0800
--- fruits2.txt 2025-05-09 22:48:56.924862820 +0800
***************
*** 1,4 ****
apple
! banana
cherry
! date
--- 1,4 ----
apple
! blueberry
cherry
! fig
該格式在一些大型補丁中仍有使用價值。
4. 并排格式
并排格式將兩個文件內容以兩列形式并排顯示,使用 -y 選項:
root@wtrpro:~# diff -y fruits1.txt fruits2.txt
apple apple
banana | blueberry
cherry cherry
date | fig
該格式直觀且易于人工查看與對比。
四、常用選項
- -u 或 --unified[=行數]:顯示統一格式,默認上下文為3行。
- -c 或 --context[=行數]:顯示上下文格式。
- -y 或 --side-by-side:并排顯示差異。
- -w 或 --ignore-all-space:忽略所有空白字符。
- -b 或 --ignore-space-change:忽略空白變化(多空格視為單空格)。
- -B 或 --ignore-blank-lines:忽略空行變化。
- -I PATTERN:忽略匹配給定正則模式的行差異。
五、結語
從此告別盲目排查,把繁瑣的差異一網打盡。不管是配置變更、腳本調優,還是代碼審查,diff 都能成為你最得力的“偵探伙伴”。