Linux 文件對(duì)比黑科技!diff 命令從入門到精通實(shí)戰(zhàn)
在寧?kù)o美好的夜晚,當(dāng)你面對(duì)著兩份既相似又各具特色的配置文件時(shí),是否也曾憧憬過,要是有一種工具能夠像聰明的小偵探一樣,迅速而準(zhǔn)確地揭示它們之間的差異,那該有多棒?。繘]錯(cuò),今天,我想向大家介紹Linux中非常實(shí)用的一個(gè)小幫手——diff工具。不知道大家有沒有嘗試過使用它呢?它是否也讓你感到驚喜和贊嘆了呢?
一、什么是diff?
簡(jiǎn)單來說,diff 是 Linux/Unix 系統(tǒng)中用于逐行對(duì)比兩個(gè)文件或整個(gè)目錄內(nèi)容差異的強(qiáng)大命令。它能夠精準(zhǔn)指出哪些行被添加、刪除或修改,并提供多種格式和選項(xiàng),幫助你以最直觀的方式發(fā)現(xiàn)變化。
二、基本語法
diff [選項(xiàng)] 文件1 文件2
- 文件1:舊版配置/代碼
- 文件2:新版配置/代碼
1. 單文件對(duì)比實(shí)戰(zhàn)
舉個(gè)小栗子:
創(chuàng)建兩個(gè)測(cè)試文件:
echo -e "apple\nbanana\ncherry\ndate" > fruits1.txt
echo -e "apple\nblueberry\ncherry\nfig" > fruits2.txt
執(zhí)行基本對(duì)比:
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. 目錄對(duì)比技巧
diff -r dir1/ dir2/
實(shí)用參數(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
該格式直觀但不易讀,對(duì)于大規(guī)模差異不夠友好 。
2. 統(tǒng)一格式
統(tǒng)一格式在上下文格式基礎(chǔ)上進(jìn)行了簡(jiǎn)化,將冗余的上下文行合并,只保留變更前后附近的若干行。使用-u或-U行數(shù)選項(xiàng)開啟。
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選項(xiàng),其輸出比普通格式更易讀,保留完整的上下下文信息:
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ǔ)丁中仍有使用價(jià)值。
4. 并排格式
并排格式將兩個(gè)文件內(nèi)容以兩列形式并排顯示,使用 -y 選項(xiàng):
root@wtrpro:~# diff -y fruits1.txt fruits2.txt
apple apple
banana | blueberry
cherry cherry
date | fig
該格式直觀且易于人工查看與對(duì)比。
四、常用選項(xiàng)
- -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 都能成為你最得力的“偵探伙伴”。