概述
diff 比较两个文件或目录的更改,显示哪些行被添加/删除/修改。输出格式可以选择统一(unified)、上下文(context)、并排(side-by-side)等,并且可以调整比较敏感度,例如忽略空格或大小写。
主要特点
- 提供逐行比较和易于阅读的格式
- 支持目录间递归比较 (-r)
- 多种忽略规则,如空格/大小写/空行
- 支持适合生成补丁(.patch)的统一格式(-u)
- 提供大文件比较性能优化选项
应用场景示例
- 代码审查:仅提取更改的文件作为补丁
- 跟踪配置文件更改:比较部署前后的配置
- 比较备份/快照:查看特定时间点之间的差异
- 在文档/数据预处理阶段检测意外更改
- 安全检查:确认外部部署的二进制文件/脚本的可疑更改
diff 输出格式
diff 的输出格式表示将第一个文件更改为第二个文件的指令。
- `a` (add): 第一个文件中没有的行在第二个文件中**添加**了。(例如: `1a2`)
- `c` (change): 两个文件中相应的行都**更改**了。(例如: `1c2`)
- `d` (delete): 第一个文件中的行在第二个文件中**删除**了。(例如: `1d2`)
主要选项
根据目的将常用选项进行了分组。
1) 基本操作与输出格式
2) 指定比较范围/目标
3) 输出控制/忽略规则
4) 帮助/版本
生成的命令:
请尝试组合命令。
描述:
`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 选项。它不会输出详细内容。