Linux常用命令学习笔记:diff

1. 命令概述

  • 命令名称diff (英文全拼:difference)
  • 核心功能:逐行比较两个文件或目录的差异
  • 主要用途:文本文件差异对比、代码版本比较、配置文件变更检查

2. 语法格式

# 比较两个文件
diff [选项] 文件1 文件2

# 比较两个目录
diff [选项] 目录1 目录2

3. 常用选项

选项说明
-c上下文模式,显示差异前后的若干行
-u统一模式(unified),显示差异的上下文,最常用
-i忽略大小写差异
-w忽略所有空白字符(空格、制表符等)
-b忽略行尾的空白字符
-B忽略空白行的差异
-r递归比较目录
-q静默模式,只显示文件是否不同,不显示具体差异
-s显示两个文件相同的消息
-y并排显示差异
-W设置并排显示的宽度
--help显示帮助信息
--version显示版本信息

4. 输出格式说明

(1) 默认输出格式

N1,N2cN3,N4
< 文件1的内容
---
> 文件2的内容
  • N1,N2cN3,N4:表示文件1的 N1 到 N2 行需要修改为文件2的 N3 到 N4 行
  • a:添加(append)
  • d:删除(delete)
  • c:修改(change)

(2) 统一模式(-u)输出格式

--- 文件1 时间戳
+++ 文件2 时间戳
@@ -N1,N2 +N3,N4 @@
- 文件1被删除的行
+ 文件2新增的行
 两个文件共有的行
  • -N1,N2:文件1的起始行和行数
  • +N3,N4:文件2的起始行和行数
  • -:文件1有但文件2没有的行
  • +:文件2有但文件1没有的行
  • 没有符号:两个文件共有的行

5. 常用实例详解

(1) 基本文件比较

# 比较两个文件
diff file1.txt file2.txt

(2) 统一模式(最常用)

# 使用统一模式显示差异
diff -u file1.txt file2.txt

(3) 上下文模式

# 显示差异前后的3行上下文
diff -c file1.txt file2.txt

(4) 并排显示差异

# 并排显示差异,设置宽度为80字符
diff -y -W 80 file1.txt file2.txt

(5) 忽略空白差异

# 忽略所有空白字符差异
diff -w file1.txt file2.txt

# 忽略行尾空白
diff -b file1.txt file2.txt

(6) 比较目录

# 比较两个目录
diff dir1 dir2

# 递归比较目录
diff -r dir1 dir2

(7) 静默模式(脚本中使用)

# 只判断文件是否不同,不显示具体差异
diff -q file1.txt file2.txt
if [ $? -eq 0 ]; then
    echo "文件相同"
else
    echo "文件不同"
fi

6. 实际应用场景

场景一:代码版本比较

# 比较两个版本的代码文件
diff -u old_version.py new_version.py

# 生成补丁文件
diff -u old_version.py new_version.py > patch.diff

# 应用补丁
patch old_version.py < patch.diff

场景二:配置文件变更检查

# 比较当前配置和备份配置
diff -u /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

# 忽略空白差异
diff -w /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

场景三:目录同步检查

# 检查两个目录是否同步
diff -r /backup/source/ /backup/destination/

# 只显示不同文件,不显示具体差异
diff -rq /backup/source/ /backup/destination/

场景四:生成补丁文件

# 生成补丁文件
diff -Naur old_dir/ new_dir/ > mypatch.patch

# 应用补丁
patch -p1 < mypatch.patch

7. 与其他比较命令的区别

命令比较方式输出格式适用场景
diff逐行比较差异上下文文本文件、代码比较
cmp逐字节比较字节位置二进制文件、精确比较
comm逐行比较三列输出找出共同行和独有行

8. 注意事项

  1. 输出重定向diff 的输出可以重定向到文件生成补丁
  2. 退出状态码:0(相同)、1(不同)、2(错误)
  3. 大文件:对于非常大的文件,diff 可能会比较慢
  4. 二进制文件diff 不适合比较二进制文件,应使用 cmp
  5. 补丁应用:使用 patch 命令应用 diff 生成的补丁文件

核心要点总结

  • diff 用于逐行比较文本文件的差异
  • -u 选项(统一模式)是最常用的输出格式
  • -r 选项用于递归比较目录
  • 输出可以重定向生成补丁文件,使用 patch 命令应用
  • 退出状态码:0(相同)、1(不同)、2(错误)
  • 适合代码版本比较、配置文件变更检查等场景


作 者:南烛
链 接:https://www.itnotes.top/archives/215
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇