hd和od可以互相替换吗?


Answers:


19

hd是一个同义词hexdump -C的FreeBSD和一些Linux发行。hexdump是从BSD时代开始的 ; od时间黎明。只有od通过POSIX规范。该单UNIX理由讨论为什么od被选为优先于hdxd

这些命令的作用非常相似:使用八进制,十进制或十六进制表示法显示二进制文件的文本表示形式。两者之间没有根本区别。

它们具有许多控制输出格式的选项,并且某些格式只能使用一个或另一个命令来实现。特别是,要看一看二进制文件中的内容,我喜欢使用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.....|

谢谢!在od的八进制输出中,数字是否表示三位?那么例如04257718位,即9/4字节?
蒂姆(Tim)

@Tim是,八进制表示每个数字对应于3 十六进制为 4位)。042577实际上代表16位(2个字节);该格式的块中的第一个数字始终为0或1。八进制(042577)=十六进制(7f45)=十进制(32581)。
吉尔(Gilles)“所以,别再邪恶了”,

谢谢!我从其他资料中得知,八进制数以附加的0开头。当以1开头时,这意味着什么?
蒂姆(Tim)

@Tim在许多编程语言中,123是以底数10(十进制)0123表示的数字,而表示以底数8(八进制)表示的数字,即012383。0x123将以底数16(十六进制)表示的即291。与od输出格式无关。
吉尔(Gilles)“所以,别再邪恶了”,

许多?我会说任何类似于C的派生词-是的,的确如此。还有什么?多少?
poige

5

实际上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还可以输出颜色。


OSX od不支持z后缀-tx1z
三点

实际上,最大的麻烦是要记住那一系列的args而不是一个hd。尽管如此,还是有用的,谢谢:)
poige
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.