Linux diff命令使用
1. 命令概述
diff(difference缩写)是Linux/Unix系统中逐行比较两个文本文件/目录内容差异的核心命令,适用于代码审查、配置文件对比、版本控制和补丁生成等场景。
- 核心功能:比较两个文件/目录,输出差异位置与修改建议
- 适用范围:仅支持文本文件,二进制文件提示"Binary files differ"
- 退出状态:
- 0:无差异
- 1:存在差异
- 2:执行错误(如文件不存在)
2. 基本语法
bash
diff [选项] 源文件/目录 目标文件/目录
- 源文件:作为对比基准的文件/目录
- 目标文件:待对比的文件/目录
- 选项:控制输出格式与比较规则
3. 常用选项
| 选项 | 全称 | 功能描述 |
|---|---|---|
| -u | --unified[=NUM] | 统一格式输出(默认3行上下文),推荐用于补丁生成 |
| -r | --recursive | 递归比较目录及子目录内容 |
| -q | --brief | 仅显示文件是否不同,不输出具体差异 |
| -i | --ignore-case | 忽略大小写差异 |
| -w | --ignore-all-space | 忽略所有空白字符差异 |
| -y | --side-by-side | 左右并排显示文件差异 |
| -N | --new-file | 将不存在的文件视为空文件(目录比较常用) |
4. 输出格式解析
4.1 默认格式(ed脚本格式)
输出修改指令,说明如何修改源文件匹配目标文件:
bash
# 示例:对比file1.txt和file2.txt
diff file1.txt file2.txt
# 输出格式:
行号范围 操作符 行号范围
< 源文件内容行
---
> 目标文件内容行
- 操作符:
- a(add):源文件需添加内容
- d(delete):源文件需删除内容
- c(change):源文件需修改内容
4.2 统一格式(-u,推荐)
清晰简洁,含上下文与文件信息:
bash
diff -u file1.txt file2.txt
# 输出示例:
--- file1.txt 2026-02-13 10:00:00
+++ file2.txt 2026-02-13 10:01:00
@@ -1,3 +1,4 @@
-1. Apple
+1. apple
2. Banana
-3. Cherry
+3. Orange
+4. Mango
- ---:源文件标识
- +++:目标文件标识
- -:源文件删除行
- +:目标文件添加行
4.3 并排格式(-y)
左右对比显示差异:
bash
diff -y file1.txt file2.txt
# 输出示例:
1. Apple | 1. apple
2. Banana 2. Banana
3. Cherry | 3. Orange
> 4. Mango
5. 实用示例
5.1 文件比较
bash
# 基础对比
diff file1.txt file2.txt
# 忽略大小写和空白
diff -iw file1.txt file2.txt
# 仅显示是否不同
diff -q file1.txt file2.txt
5.2 目录比较
bash
# 递归比较目录
diff -r dir1 dir2
# 简洁模式递归比较
diff -rq dir1 dir2
# 处理新文件的递归比较
diff -rN dir1 dir2
5.3 补丁生成与应用
bash
# 生成统一格式补丁
diff -u file1.txt file2.txt > changes.patch
# 应用补丁
patch file1.txt < changes.patch
# 反向恢复补丁
patch -R file1.txt < changes.patch
6. 注意事项
- diff对二进制文件仅提示差异,无具体内容
- 文件顺序影响输出(输出为"修改源文件匹配目标文件"的指令)
- 大文件对比建议结合其他工具(如sdiff)
- 确保对比文件编码一致,避免乱码或误判