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 | 限制比较长度 | 大文件抽样比对时使用 |
默认遇到第一处差异就退出,需要完整差异清单时用列表模式,但输出里没有上下文信息。
文本文件末尾换行差异也会被判定为不同,先用文本比较工具确认是否只是行尾问题。
静默模式配合退出码是脚本里最稳的判等方式,不需要解析任何输出。
两个文件长度不同时会在较短文件的末尾附近报出差异,先核对文件大小往往更直观。
大文件做整体校验用哈希更合适,逐字节比较主要用于定位差异所在的位置。