Linux diff 命令教程:轻松学会用diff 命令比较文件的差别(附巨量语法参数

[复制链接]
发表于 2026-10-3 22:04:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

diff 是 Linux 里最基础也最常用的比对工具:逐行比较两个文本文件的异同,拿两个目录时则比对目录里同名文件(不递归进子目录)。本文整理它的常用参数,并用一个小例子把输出格式拆解清楚。

基本语法

diff [选项] 文件或目录1 文件或目录2

常用选项按用途分类记:

  • 忽略差异类:-a/--text 按文本逐行比;-b 忽略空格变化;-B 忽略空白行;-w 忽略全部空格;-i 忽略大小写;-I 只忽略包含指定字符串的行。
  • 输出格式类:-c 显示全部内文并标出不同;-u/-U/--unified 用合并方式显示;-y/--side-by-side 并列显示;-q/--brief 只报有没有差异;-s 即使相同也报告。
  • 目录比较类:-r 递归比较子目录;-N 把只存在于一侧的文件当作空文件比较;-S 从指定文件开始比;-x/-X 排除指定文件或按文件排除。
  • 其他:-n 用 RCS 格式输出;-e/-f 输出适合 ed 脚本;-p 比较 C 代码时显示所在函数名;-H 大文件加速;-t 展开 tab;-T 首行对齐加 tab;-v 看版本;--help 看帮助。

实际例子

假设有两个文件,file1 内容依次是 Hi、Hello、How are you?、I am fine,、Thank you.;file2 是 Hello、Hi、How are you?、I am fine.。跑一下:

$ diff file1 file2
1d0
< Hi,
2a2
> Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.

下面把 file1 当作旧文件、file2 当作新文件来解码:

1d0
< Hi,
# 意即旧文件第 1 行需要被删除(d),两文件才能对齐。旧文件中要删掉的行以 < 标记。

4,5c4
< I am fine,
< Thank you.
---
> I am fine.

其中 4,5c4 表示旧文件的第 4 到 5 行已被修改,需要用新文件第 4 行替换。添加的行以 > 标记,删除的行以 < 标记,--- 分隔新旧两侧。

几个好用的组合

  • 只想看结论:diff -q a.conf b.conf,有差异才输出一行提示。
  • 看改动上下文:diff -u old.conf new.conf,比默认输出友好得多。
  • 并排看差异:diff -y --width 120 a b。
  • 比两个目录:diff -rq dir1 dir2,一眼看出哪些文件不同、哪些只在一侧。
  • 配置改动核对:diff -u /etc/old/nginx.conf /etc/new/nginx.conf。

小结

diff 的输出是给机器看的,所以初看有点难读,记住三个符号就够了:< 是旧文件那侧、> 是新文件那侧、--- 分隔两侧。配上 -u 看上下文、-q 给结论、-r 比目录,日常排障基本够用。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表