# 1.命令简介

hexdump 以 ASCII、十进制、十六进制或八进制显示文件内容。

# 2.命令格式

hexdump [options] FILE [...]

# 3.选项说明

-b
	单字节八进制显示。
 -c
 	单字节字符显示。
 -C
 	规范化“十六进制+ASCII”显示。
 -d
 	两字节十进制显示。
 -e <format_string>
	以指定的格式字符串显示数据。
 -f <format_file>
	指定包含一个或多个换行分隔格式字符串的文件。内容使用 # 号开头表示注释。
-n <length>
	只解释输入的指定长度个字节。
 -o
	两字节八进制显示。
 -s <offset>
 	跳过开头指定长度个字节。
 -v
 	显示时不压缩相似的行。-v 选项使 hextump 显示所有输入数据。没有 -v 选项,任何数量的输出行组,如果与前一组相同,将被替换为由一个星号构成的行。
 -x
 	两字节十六进制显示。

# 4.格式

# 4.1 格式字符串

格式字符串可以包含任意数量的格式单元,由空格分隔。格式单元最多包含三项:迭代计数、字节计数和格式。

迭代计数是可选的正整数,缺省为1,表示每种格式应用的次数。

字节计数是可选的正整数,表示每次按照指定格式迭代要解释的字节数。

如果指定了迭代计数和/或字节计数,则必须使用单斜杠放在迭代计数之后和/或字节计数之前消除歧义。斜杠前后的任何空格都将被忽略。

格式是必需的,必须用双引号括起来。它被解释为 fprintf 样式的格式字符串(参见 fprintf(3) (opens new window)),但以下情况除外:

  • 星号(*)不能用作字段宽度或精度。
  • 每个 s 转换字符都需要字节计数或字段精度(不同于 fprintf(3) 默认值,如果精度未指定,则打印整个字符串)。
  • 不支持转换字符 h、l、n、p 和 q。
  • 支持 C 标准中描述的单字符转义序列。
字符 转义
NULL \0
<alert character> \a
<backspace> \b
<form-feed> \f
<newline> \n
<carriage return> \r
<tab> \t
<vertical tab> \v

# 4.2 转换字符串

hexdump 还支持以下额外的转换字符串用于格式字符串中。

_a[dox]
	标记下一个输出字节的偏移量,在输入文件中累积。d、o、x 分别以十进制、八进制和十六进制显示。
_A[dox]
	与 _a 转换字符串相同,只是在处理所有输入数据后只执行一次。
_c
	在默认字符集中输出字符。非打印字符以三个字符、零填充八进制显示,但可通过标准转义符号(见上文)表示的字符除外。
_p
	默认字符集中输出字符。非打印字符显示为单个点号 “.”。
_u
	输出美国 ASCII 字符,控制字符使用以下小写名称显示除外。大于 0xff 的字符显示为十六进制字符串。

控制字符如下:

码值 名称 全称
0x00 nul null
0x01 soh start of headline
0x02 stx start of text
0x03 etx end of text
0x04 eot end of transmission
0x05 enq enquiry
0x06 ack acknowledge
0x07 bel bell
0x08 bs backspace
0x09 ht horizontal
0x0A lf line feed
0x0B vt vertical tab
0x0C ff form feed
0x0D cr carriage return
0x0E so shift out
0x0F si shift in
0x10 dle data link escape
0x11 dc1 device control 1
0x12 dc2 device control 2
0x13 dc3 device control 3
0x14 dc4 device control 3
0x15 nak negative acknowledgement
0x16 syn synchronous idle
0x17 etb end of transmission block
0x18 can cancel
0x19 em end of medium
0x1A sub substitute
0x1b esc escape
0x1C fs file separator
0x1D gs group separator
0x1E rs record separator
0x1F us unit separator
0x7F del delete

# 5.常用示例

假设有一个名为 txt 内容为 lvlv 的文本内容。

(1)不指定选项缺省以十六进制显示指定文件的内容。

hexdump txt
0000000 766c 766c 000a                         
0000005

其中第一列为偏移量。

(2)单字节字符展示。

hexdump -c txt
0000000   l   v   l   v  \n                                            
0000005

(3)输出十六进制和对应字符。

hexdump -C txt
00000000  6c 76 6c 76 0a                                    |lvlv.|
00000005

(4)从指定偏移量开始输出。

比如偏移两个字节,跳过第一个 lv。

hexdump -s2 -C txt
00000002  6c 76 0a                                          |lv.|
00000005

(5)格式化输出并标记每个字节的偏移量。

hexdump -e'/1 "%_ad %02X\n"' txt
0 6C
1 76
2 6C
3 76
4 0A

# 参考文献

hexdump(1) - Linux manual page - man7.org (opens new window)

Last Updated: 5/17/2024, 1:47:36 AM