Linux 命令(142)—— hexdump 命令

Posted 恋喵大鲤鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 命令(142)—— hexdump 命令相关的知识,希望对你有一定的参考价值。

文章目录

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)),但以下情况除外:

  • 星号(*)不能用作字段宽度或精度。
  • 每个 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 的字符显示为十六进制字符串。

控制字符如下:

码值名称全称
0x00nulnull
0x01sohstart of headline
0x02stxstart of text
0x03etxend of text
0x04eotend of transmission
0x05enqenquiry
0x06ackacknowledge
0x07belbell
0x08bsbackspace
0x09hthorizontal
0x0Alfline feed
0x0Bvtvertical tab
0x0Cffform feed
0x0Dcrcarriage return
0x0Esoshift out
0x0Fsishift in
0x10dledata link escape
0x11dc1device control 1
0x12dc2device control 2
0x13dc3device control 3
0x14dc4device control 3
0x15naknegative acknowledgement
0x16synsynchronous idle
0x17etbend of transmission block
0x18cancancel
0x19emend of medium
0x1Asubsubstitute
0x1bescescape
0x1Cfsfile separator
0x1Dgsgroup separator
0x1Ersrecord separator
0x1Fusunit separator
0x7Fdeldelete

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

以上是关于Linux 命令(142)—— hexdump 命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux命令:hexdump

Linux hexdump命令

Linux中hexdump命令的使用

Linux-hexdump命令调试event驱动—详解(13)

hexdump命令

hexdump