Linux 文件對比黑科技!diff 命令從入門到精通實戰(zhàn)
在寧靜美好的夜晚,當(dāng)你面對著兩份既相似又各具特色的配置文件時,是否也曾憧憬過,要是有一種工具能夠像聰明的小偵探一樣,迅速而準(zhǔn)確地揭示它們之間的差異,那該有多棒???沒錯,今天,我想向大家介紹Linux中非常實用的一個小幫手——diff工具。不知道大家有沒有嘗試過使用它呢?它是否也讓你感到驚喜和贊嘆了呢?

一、什么是diff?
簡單來說,diff 是 Linux/Unix 系統(tǒng)中用于逐行對比兩個文件或整個目錄內(nèi)容差異的強(qiáng)大命令。它能夠精準(zhǔn)指出哪些行被添加、刪除或修改,并提供多種格式和選項,幫助你以最直觀的方式發(fā)現(xiàn)變化。
二、基本語法
diff [選項] 文件1 文件2- 文件1:舊版配置/代碼
 - 文件2:新版配置/代碼
 
1. 單文件對比實戰(zhàn)
舉個小栗子:
創(chuàng)建兩個測試文件:
echo -e "apple\nbanana\ncherry\ndate" > fruits1.txt
echo -e "apple\nblueberry\ncherry\nfig" > fruits2.txt執(zhí)行基本對比:
diff fruits1.txt fruits2.txt瞬間告訴你哪行不一樣,是不是很酷?如下所示:
2c2
< banana
---
> blueberry
4c4
< date
---
> fig輸出解讀指南:
- 2c2 表示第2行被替換(change)
 - < 標(biāo)記左側(cè)文件內(nèi)容
 - 標(biāo)記右側(cè)文件內(nèi)容
 - d 表示刪除(delete)
 - a 表示添加(append)
 
2. 目錄對比技巧
diff -r dir1/ dir2/實用參數(shù)組合:
diff -rq dirA/ dirB/  # 僅顯示差異文件名
diff -rw dirX/ dirY/  # 忽略空格差異三、輸出格式
diff 支持多種輸出格式,常見的有普通格式(默認(rèn))、統(tǒng)一格式(unified)、上下文格式(context)和并排格式(side-by-side)。
1. 普通格式
普通格式是 diff 的默認(rèn)輸出,使用 < 表示文件1中存在但文件2中刪除的行,使用 > 表示文件2中新增加的行。
root@wtrpro:~# diff  fruits1.txt fruits2.txt
2c2
< banana
---
> blueberry
4c4
< date
---
> fig該格式直觀但不易讀,對于大規(guī)模差異不夠友好 。
2. 統(tǒng)一格式
統(tǒng)一格式在上下文格式基礎(chǔ)上進(jìn)行了簡化,將冗余的上下文行合并,只保留變更前后附近的若干行。使用-u或-U行數(shù)選項開啟。
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該格式是開源社區(qū)最常用的補(bǔ)丁格式,便于生成和應(yīng)用補(bǔ)丁。
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該格式在一些大型補(bǔ)丁中仍有使用價值。
4. 并排格式
并排格式將兩個文件內(nèi)容以兩列形式并排顯示,使用 -y 選項:
root@wtrpro:~# diff  -y  fruits1.txt fruits2.txt
apple                                                           apple
banana                                                        | blueberry
cherry                                                          cherry
date                                                          | fig該格式直觀且易于人工查看與對比。
四、常用選項
- -u 或 --unified[=行數(shù)]:顯示統(tǒng)一格式,默認(rèn)上下文為3行。
 - -c 或 --context[=行數(shù)]:顯示上下文格式。
 - -y 或 --side-by-side:并排顯示差異。
 - -w 或 --ignore-all-space:忽略所有空白字符。
 - -b 或 --ignore-space-change:忽略空白變化(多空格視為單空格)。
 - -B 或 --ignore-blank-lines:忽略空行變化。
 - -I PATTERN:忽略匹配給定正則模式的行差異。
 
五、結(jié)語
從此告別盲目排查,把繁瑣的差異一網(wǎng)打盡。不管是配置變更、腳本調(diào)優(yōu),還是代碼審查,diff 都能成為你最得力的“偵探伙伴”。















 
 
 











 
 
 
 