首頁 > 文字處理與搜尋 > diff

diff: 檔案/目錄差異比較指南

逐行比較兩個目標的差異,並以易於閱讀的格式(統一/上下文/並排視圖)輸出。廣泛用於創建補丁、程式碼審查和比較配置變更。

概述

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

退出碼

在腳本中進行分支處理時請參考。

diff 退出狀態碼
代碼 含義
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 選項。它不會輸出詳細內容。

相關命令

功能上相似或經常一起使用的命令。


相同類別命令