Linux 中的 diff 和 patch 命令完全指南
什么是 diff 和 patch?
diff 和 patch 是一对相辅相成的命令行工具,主要用于比较文件差异并应用补丁。简单来说:
- diff:比较两个文件或目录的差异,生成描述变更内容的补丁文件。
- patch:读取补丁文件,将其应用到原始文件中以更新内容。
基本流程如下:原文件经过 diff 生成补丁,再通过 patch 还原或更新为新文件。
diff 命令详解
基本语法
diff [选项] 原文件 新文件
输出格式对比
| 格式类型 | 命令选项 | 特点 | 适用场景 |
|---|---|---|---|
| 正常格式 | diff (默认) | 显示需要修改的行,基础格式 | 简单文件比较 |
| 上下文格式 | diff -c | 显示修改前后的上下文内容 | 代码审查,需了解上下文 |
| 统一格式 | diff -u | 紧凑显示,包含上下文,最常用 | 生成补丁文件,版本控制 |
实战示例
假设我们有两个版本的配置文件:
config-v1.txt
# 服务器配置
port=8080
host=localhost
debug=false
max_connections=100
config-v2.txt
# 服务器配置
port=9090
host=0.0.0.0
debug=true
max_connections=200
timeout=30
1. 正常格式输出
$ diff config-v1.txt config-v2.txt
2,4c2,5
<port=8080
<host=localhost
<debug=false
<max_connections=100
---
>port=9090
>host=0.0.0.0
>debug=true
>max_connections=200
>timeout=30
输出说明:2,4c2,5 表示原文件第 2 到 4 行被修改为第 2 到 5 行。
2. 上下文格式输出
$ diff -c config-v1.txt config-v2.txt
*** config-v1.txt 2024-01-01 10:00:00
--- config-v2.txt 2024-01-01 11:00:00
***************
*** 1,6 ****
# 服务器配置
! port=8080
! host=localhost
! debug=false
! max_connections=100
--- 1,7 ----
# 服务器配置
! port=9090
! host=0.0.0.0
! debug=
! max_connections=200
+ =30


