# Linux diff命令使用

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)
  • 确保对比文件编码一致,避免乱码或误判
相关推荐
晚风叙码6 分钟前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
Z21-X16 分钟前
云原生运维笔记:硬核拆解OpenStack计算与存储——从主机聚合到Cinder挂载全流程
运维·笔记·学习·云原生·openstack
邪修king20 分钟前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
开开心心就好21 分钟前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
坤坤子吖21 分钟前
Linux网络编程基础:从 MAC 到 IP,理解网络数据是怎么传输的
linux·网络·笔记·学习
波力海苔夹心脆67530 分钟前
C# 固高 GTS 运动控制卡入门:伺服上下电、Jog 点动与二维插补(WinForms 实战)
服务器·开发语言·c#·运动控制·伺服电机·winforms·固高
一只鹿鹿鹿37 分钟前
医院绩效管理体系方案
大数据·运维·安全·web安全·制造
java_logo40 分钟前
Docker 部署 Portainer CE 中文版:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer ce
山东孙燕姿43 分钟前
前端框架升级:不敢动的组件怎么办
大数据·运维·服务器·网络·人工智能·前端框架
古法老登瞎折腾9 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp