Answers:
hd
是一个同义词hexdump -C
上的FreeBSD和一些Linux发行。hexdump
是从BSD时代开始的 ; od
是时间的黎明。只有od
是通过POSIX规范。该单UNIX理由讨论为什么od
被选为优先于hd
或xd
。
这些命令的作用非常相似:使用八进制,十进制或十六进制表示法显示二进制文件的文本表示形式。两者之间没有根本区别。
它们具有许多控制输出格式的选项,并且某些格式只能使用一个或另一个命令来实现。特别是,要看一看二进制文件中的内容,我喜欢使用hd
的输出格式,在右边的一栏显示了可打印字符。od
无法做到这一点。
$ od /bin/sh | head -n 2 # od default: octal, 2-byte words
0000000 042577 043114 000402 000001 000000 000000 000000 000000
0000020 000002 000076 000001 000000 170020 000101 000000 000000
$ od -Ax -t x1 /bin/sh | head -n 2 # od showing bytes in hexadecimal
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
000010 02 00 3e 00 01 00 00 00 10 f0 41 00 00 00 00 00
$ hd /bin/sh | head -n 2 # hd default output: nice
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 10 f0 41 00 00 00 00 00 |..>.......A.....|
042577
18位,即9/4字节?
123
是以底数10(十进制)0123
表示的数字,而表示以底数8(八进制)表示的数字,即0123
83。0x123
将以底数16(十六进制)表示的即291。与od
输出格式无关。
实际上od
可以同时显示十六进制/八进制/十进制和可打印字符:
$ od -Ax -tx1z /bin/sh | head -n2
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 >.ELF............<
000010 03 00 3e 00 01 00 00 00 32 4e 00 00 00 00 00 00 >..>.....2N......<
我想主要区别只是历史性的。此外,某些版本hd
还可以输出颜色。
od
不支持z
后缀-tx1z
hd
。尽管如此,还是有用的,谢谢:)
xxd
!:D