Linux 文件对比黑科技!diff 命令从入门到精通实战

在宁静美好的夜晚,当你面对着两份既相似又各具特色的配置文件时,是否也曾憧憬过,要是有一种工具能够像聪明的小侦探一样,迅速而准确地揭示它们之间的差异,那该有多棒啊?没错,今天,我想向大家介绍Linux中非常实用的一个小帮手——diff工具。不知道大家有没有尝试过使用它呢?它是否也让你感到惊喜和赞叹了呢?

一、什么是diff?

简单来说,diff 是 Linux/Unix 系统中用于逐行对比两个文件或整个目录内容差异的强大命令。它能够精准指出哪些行被添加、删除或修改,并提供多种格式和选项,帮助你以最直观的方式发现变化。

二、基本语法

复制
diff [选项] 文件1 文件21.
文件1:旧版配置/代码文件2:新版配置/代码1. 单文件对比实战

举个小栗子:

创建两个测试文件:

复制
echo -e "apple\nbanana\ncherry\ndate" > fruits1.txt echo -e "apple\nblueberry\ncherry\nfig" > fruits2.txt1.2.

执行基本对比:

复制
diff fruits1.txt fruits2.txt1.

瞬间告诉你哪行不一样,是不是很酷?如下所示:

复制
2c2 < banana --- > blueberry 4c4 < date --- > fig1.2.3.4.5.6.7.8.

输出解读指南:

2c2 表示第2行被替换(change)< 标记左侧文件内容标记右侧文件内容d 表示删除(delete)a 表示添加(append)2. 目录对比技巧
复制
diff -r dir1/ dir2/1.

实用参数组合:

复制
diff -rq dirA/ dirB/ # 仅显示差异文件名 diff -rw dirX/ dirY/ # 忽略空格差异1.2.

三、输出格式

diff 支持多种输出格式,常见的有普通格式(默认)、统一格式(unified)、上下文格式(context)和并排格式(side-by-side)。

1. 普通格式

普通格式是 diff 的默认输出,使用 < 表示文件1中存在但文件2中删除的行,使用 > 表示文件2中新增加的行。

复制
root@wtrpro:~# diff fruits1.txt fruits2.txt 2c2 < banana --- > blueberry 4c4 < date --- > fig1.2.3.4.5.6.7.8.9.

该格式直观但不易读,对于大规模差异不够友好 。

2. 统一格式

统一格式在上下文格式基础上进行了简化,将冗余的上下文行合并,只保留变更前后附近的若干行。使用-u或-U行数选项开启。

复制
root@wtrpro:~# diff -u fruits1.txt fruits2.txt --- fruits1.txt 2025-05-09 22:48:56.924862820 +0800 +++ fruits2.txt 2025-05-09 22:48:56.924862820 +0800 @@ -1,4 +1,4 @@ apple -banana +blueberry cherry -date +fig1.2.3.4.5.6.7.8.9.10.

该格式是开源社区最常用的补丁格式,便于生成和应用补丁。

3. 上下文格式

上下文格式使用-c选项,其输出比普通格式更易读,保留完整的上下下文信息:

复制
root@wtrpro:~# diff -c fruits1.txt fruits2.txt *** fruits1.txt 2025-05-09 22:48:56.924862820 +0800 --- fruits2.txt 2025-05-09 22:48:56.924862820 +0800 *************** *** 1,4 **** apple ! banana cherry ! date --- 1,4 ---- apple ! blueberry cherry ! fig1.2.3.4.5.6.7.8.9.10.11.12.13.14.

该格式在一些大型补丁中仍有使用价值。

4. 并排格式

并排格式将两个文件内容以两列形式并排显示,使用 -y 选项:

复制
root@wtrpro:~# diff -y fruits1.txt fruits2.txt apple apple banana | blueberry cherry cherry date | fig1.2.3.4.5.

该格式直观且易于人工查看与对比。

四、常用选项

-u 或 --unified[=行数]:显示统一格式,默认上下文为3行。-c 或 --context[=行数]:显示上下文格式。-y 或 --side-by-side:并排显示差异。-w 或 --ignore-all-space:忽略所有空白字符。-b 或 --ignore-space-change:忽略空白变化(多空格视为单空格)。-B 或 --ignore-blank-lines:忽略空行变化。-I PATTERN:忽略匹配给定正则模式的行差异。

五、结语

从此告别盲目排查,把繁琐的差异一网打尽。不管是配置变更、脚本调优,还是代码审查,diff 都能成为你最得力的“侦探伙伴”。

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器