我正在使用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|
$
Run Code Online (Sandbox Code Playgroud)
当我这样做时,令我感到困惑的是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
$
Run Code Online (Sandbox Code Playgroud)
似乎是说字节 17 在 x-6.xz 中具有值 26,在 x-9.xz 中具有值 34。这是错误的:实际上,字节 16(即 0x10)具有值 0x16 和 0x1c(分别为 22 和 28)。此外,cmp 说字节 23 的值为 345。一个字节怎么可能大于 255?我一定误解了输出的含义,但man cmp
似乎没有说明它是什么。
Ste*_*itt 10
17 26 34
Run Code Online (Sandbox Code Playgroud)
表示偏移量 17 处的字节(hexdump
输出中的0x10 ,因为它从 0 开始)在第一个文件中具有八进制值 026,即十进制 22,在第二个文件中具有八进制值034,即十进制 28。