首页/系统/Linux 运维命令速查/cmp 字节级文件比较
文本处理77 条

cmp 字节级文件比较

按字节比较两个文件:默认报出第一处差异的位置与内容,-s 静默只靠退出码判断相同与否,是脚本校验的常用手段。

Linux 运维命令速查系统更新于 2026-10-13

cmp 是什么

按字节比较两个文件时用它:默认报出第一处差异的位置与内容,静默模式只靠退出码判断是否相同。它在脚本里比文本比较工具更适合做校验,因为不会对行尾与编码做任何解释。

基本信息

用途逐字节比较,二进制与文本都适用
语法cmp [选项] 文件1 文件2
退出码0 相同,1 有差异,2 出错
常用静默模式、列出差异字节、跳过前若干字节

典型使用场景

  • 校验拷贝结果:确认备份文件与源文件完全一致
  • 脚本判断:用退出码决定后续分支,不产生任何输出
  • 定位差异:找出第一处不同字节的偏移
  • 设备比对:跳过引导区域后比较两块盘的有效数据
  • 镜像校验:对比镜像与原始文件

常用示例

常用示例
cmp firmware.bin firmware.bin.bak
cmp -l a.bin b.bin | head            # 列出差异字节(偏移与八进制值)
cmp -s a b && echo SAME || echo DIFF
cmp -i 512:512 disk1.img disk2.img   # 跳过前 512 字节再比较
cmp -n 1048576 big1.img big2.img     # 只比较前 1MiB

参数对照

参数作用注意
无参数报出首处差异默认遇到差异即退出
-l列出全部差异字节输出为偏移与八进制值
-s静默,只看退出码脚本判断的首选
-i跳过前若干字节可分别为两个文件指定偏移
-n限制比较长度大文件抽样比对时使用
默认遇到第一处差异就退出,需要完整差异清单时用列表模式,但输出里没有上下文信息。
文本文件末尾换行差异也会被判定为不同,先用文本比较工具确认是否只是行尾问题。
静默模式配合退出码是脚本里最稳的判等方式,不需要解析任何输出。
两个文件长度不同时会在较短文件的末尾附近报出差异,先核对文件大小往往更直观。
大文件做整体校验用哈希更合适,逐字节比较主要用于定位差异所在的位置。

易错点

  • 默认遇到首处差异即退出,容易误以为文件只有一处不同
  • 把行尾或编码差异当成内容差异,应先用文本比较工具确认
  • 忘记区分退出码语义,把执行出错与内容不同混为一谈
  • 对超大文件直接全量比较耗时长,可先限定长度或抽样比对

数据来源与参考

  • man 1 cmp(GNU diffutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌