在日常开发和维护中,尤其是在处理多版本文件、目录对比或者文档生成时,我们常常需要分析不同版本之间的区别。diff 命令(即 differences)是一个非常有用的工具,它可以逐行比较文件或目录,并显示差异。
diff 命令简介
diff 命令是 Linux 系统中内置的工具,可以帮助我们快速发现两个文件或目录的不同。如果文件相同,则不会有任何输出;如果有差异,则会以特定格式展示修改细节。diff 不仅适用于文件比较,还可以递归比较目录中的文件差异,非常灵活和实用。
适用的 Linux 版本
diff 命令在大部分 Linux 发行版中都已预装,例如 Ubuntu、Debian、Fedora 和 CentOS 等。
如果未安装,可以使用包管理器安装:
基于 Debian 的系统(如 Ubuntu):
sudo apt-get install diffutils
基于 Red Hat 的系统(如 CentOS):CentOS 7:
sudo yum install diffutils
CentOS 8:
sudo dnf install diffutils
diff 命令基本语法
diff [选项] 文件1 文件2
常用选项及功能说明
选项 | 描述 |
-i | 忽略大小写差异 |
-w | 忽略所有空格差异 |
-B | 忽略空白行差异 |
-c | 以 C 语言风格显示上下文信息 |
-u | 以统一格式显示上下文信息(类似 Git 的输出风格) |
-y | 并排比较文件内容 |
-r | 递归比较目录 |
-q | 仅显示文件是否存在差异,不输出具体差异内容 |
-b | 忽略行尾的多余空白和制表符 |
-n | 以 RCS 格式输出差异(适用于版本控制场景) |
diff 命令应用实例
1. 比较两个文件
diff file1.txt file2.txt
输出文件 file1.txt 和 file2.txt 的差异内容。
2. 忽略大小写比较
diff -i file1.txt file2.txt
忽略大小写差异,只比较内容。
3. 忽略行内空格
diff -w file1.txt file2.txt
适用于行内空格差异不重要的场景。
4. 显示上下文信息
diff -c file1.txt file2.txt
用 C 语言风格显示差异及其上下文信息。
5. 使用 Git 风格的输出
diff -u file1.txt file2.txt
生成类似 Git 中的差异格式,清晰地标记修改、删除或新增行。
6. 并排显示差异
diff -y file1.txt file2.txt
两文件的内容并排显示,直观对比差异。
7. 比较两个目录
diff -r dir1/ dir2/
递归比较两个目录,包括子目录和文件。
8. 仅显示差异文件名
diff -q dir1/ dir2/
不输出具体差异内容,只显示有差异的文件名。
9. 生成 Patch 文件
diff -Naur olddir newdir > update.patch
通过比较旧版本和新版本目录,生成差异补丁文件 update.patch。
10. 使用 Diffstat 查看统计信息
diff -uN dir1/ dir2/ | diffstat
以图表形式显示新增、修改或删除的行数。