概述
diff 比較兩個檔案或目錄的變更點,顯示哪些行被新增/刪除/修改。輸出格式可選擇統一(unified)、上下文(context)、並排(side-by-side)等,並可調整比較敏感度,例如忽略空格或大小寫。
主要特點
- 提供逐行比較和易於閱讀的格式
- 可在目錄間進行遞歸比較 (-r)
- 多種忽略規則,如忽略空格/大小寫/空行等
- 支援適用於生成補丁(.patch)的統一格式(-u)
- 提供大容量檔案比較效能優化選項
應用場景示例
- 程式碼審查:僅提取變更的檔案作為補丁
- 追蹤配置檔案變更:比較部署前後的配置
- 備份/快照比較:檢查特定時間點之間的差異
- 在文件/資料預處理階段檢測意外變更
- 安全檢查:確認外部部署的二進位檔/腳本是否有可疑變更
diff 輸出格式
diff 的輸出格式表示將第一個檔案更改為第二個檔案的指令。
- `a` (add): 第二個檔案中**新增**了第一個檔案中沒有的行。(例如: `1a2`)
- `c` (change): 兩個檔案中都**變更**了相應的行。(例如: `1c2`)
- `d` (delete): 第二個檔案中**刪除**了第一個檔案中存在的行。(例如: `1d2`)
主要選項
根據目的將常用選項進行了分組。
1) 基本操作與輸出格式
2) 比較範圍/目標指定
3) 輸出控制/忽略規則
4) 幫助/版本
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`diff` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
整理了常用的比較場景作為範例。
以統一格式生成補丁
diff -u old.conf new.conf > change.patch
目錄遞歸比較
diff -ruN ./v1 ./v2
忽略空格差異進行比較
diff -uw src_old.c src_new.c
並排顯示 + 隱藏共同行
diff -y --suppress-common-lines a.txt b.txt
退出碼
在腳本中進行分支處理時請參考。
代碼 | 含義 |
---|---|
0 | 兩個目標相同 |
1 | 存在差異 |
2 | 發生錯誤(用法錯誤/檔案無法訪問等) |
安裝
大多數發行版都預設包含,如果沒有,請安裝 diffutils 套件。
Debian/Ubuntu
sudo apt update && sudo apt install -y diffutils
RHEL/CentOS/Fedora
sudo dnf install -y diffutils
Arch Linux
sudo pacman -S --needed diffutils
openSUSE
sudo zypper install -y diffutils
提示與注意事項
實戰中常被忽略的重點。
- 補丁格式通常以 -u 為標準。git 內部也使用類似的統一格式。
- 濫用空格處理選項(-w, -b, -B)可能會掩蓋實際有意義的變更。
- 通過 --strip-trailing-cr 正規化 Windows/Linux 換行符差異,比較將更容易。
- 在目錄比較時,結合使用 -r 和 -x/-X(排除規則)來過濾掉不必要的檔案。
- 如果只想快速確認是否存在,請使用 -q 選項。它不會輸出詳細內容。