diff用于逐行比较文本文件差异,适合查看配置或代码修改;cmp用于逐字节比较任意文件,常用于校验二进制文件一致性。

在Linux系统中,diff 和 cmp 是两个常用的文件比较工具,虽然功能相似,但用途和输出方式有明显区别。理解它们的使用场景和基本语法,有助于快速定位文件差异或验证文件一致性。
diff命令:逐行比较文本文件
diff 主要用于比较两个文本文件的内容差异,按行输出不同之处,适合查看源代码、配置文件等可读文本的变化。
基本语法:
diff file1 file2
常用选项:
- -b 忽略空格数量的差异
- -B 忽略空白行
- -i 忽略大小写
- -r 递归比较目录中的文件
- -u 输出统一格式(常用于生成补丁)
示例:
diff -u config.old config.new
该命令会输出类似版本控制系统的差异内容,可用于生成patch文件。
cmp命令:逐字节比较任意文件
cmp 按字节对比两个文件,适合判断二进制文件是否完全相同,或者查找第一个不同字节的位置。
基本语法:
cmp file1 file2
常用选项:
- -l 显示所有不同字节的位置和值(十进制)
- -s 静默模式,仅通过退出状态判断是否相同
- -n 数量 最多比较指定字节数
示例:
cmp -l image1.jpg image2.jpg
如果文件不同,会列出每个不一致字节的位置和对应的ASCII码值。
使用场景建议
选择哪个命令取决于你的需求:
- 想看文本文件哪里修改了,比如脚本或文档,用 diff
- 检查两个二进制文件是否完全一致,比如下载的镜像或压缩包,用 cmp
- 需要生成补丁或合并代码,优先使用 diff -u
- 脚本中做文件一致性校验,可用 cmp -s 配合 if 判断
基本上就这些。掌握这两个命令的核心区别和常用参数,能更高效地处理文件对比任务。


