cmp -l 如何显示差异?

cmp -l 如何显示差异?

我正在使用,但我对(“输出字节数和不同字节值”)cmp (GNU diffutils) 3.7的输出感到困惑。cmp -l/--verbose

我有两个几乎相同的文件,除了开头的几个字节之外:

$ ls -n x*
-rw-rw-r-- 1 1000 1000 345776 Jun 16 10:41 x-6.xz
-rw-rw-r-- 1 1000 1000 345776 Jun 16 10:04 x-9.xz
$ hexdump -C x-6.xz | head -3
00000000  fd 37 7a 58 5a 00 00 04  e6 d6 b4 46 02 00 21 01  |.7zXZ......F..!.|
00000010  16 00 00 00 74 2f e5 a3  e2 1c bb ef ff 5d 00 39  |....t/.......].9|
00000020  18 4a a7 22 04 94 b3 4a  c8 bc d2 00 4b 8c be aa  |.J."...J....K...|
$ hexdump -C x-9.xz | head -3
00000000  fd 37 7a 58 5a 00 00 04  e6 d6 b4 46 02 00 21 01  |.7zXZ......F..!.|
00000010  1c 00 00 00 10 cf 58 cc  e2 1c bb ef ff 5d 00 39  |......X......].9|
00000020  18 4a a7 22 04 94 b3 4a  c8 bc d2 00 4b 8c be aa  |.J."...J....K...|
$ diff <(hexdump -C x-6.xz) <(hexdump -C x-9.xz)
2c2
< 00000010  16 00 00 00 74 2f e5 a3  e2 1c bb ef ff 5d 00 39  |....t/.......].9|
---
> 00000010  1c 00 00 00 10 cf 58 cc  e2 1c bb ef ff 5d 00 39  |......X......].9|
$ 

让我困惑的是,当我这样做时cmp -l

$ cmp -l x-6.xz x-9.xz 
    17  26  34
    21 164  20
    22  57 317
    23 345 130
    24 243 314
$ 

似乎是说字节 17 在 x-6.xz 中的值为 26,在 x-9.xz 中的值为 34。这是错误的:事实上,字节 16(即 0x10)的值为 0x16 和 0x1c(分别为 22 和 28)。此外,cmp 表示字节 23 的值为 345。一个字节怎么可能大于 255?我一定是误解了输出的含义,但man cmp似乎没有说明它是什么。

答案1

cmp 从 1 开始计算偏移量并以八进制显示字节值:

17  26  34

意味着偏移量 17 处的字节(输出中的 0x10 hexdump,因为它从 0 开始)的值为八进制 026,IE十进制 22,在第一个文件中,八进制 034,IE十进制 28,在第二个文件中。

相关内容