Linux hexdump命令介绍
hexdump命令是一个用来显示文件或标准输入的十六进制、八进制、十进制或ASCII码的工具。它可以通过指定不同的格式和选项来控制输出的样式和内容。hexdump命令的全称是hexadecimal dump,意思是十六进制的转储。它可以用来查看二进制文件的内容,或者分析文件的结构和编码。
Linux hexdump命令适用的Linux版本
hexdump命令是一个标准的Linux命令,它适用于大多数的Linux发行版,如Ubuntu、Debian、Fedora、CentOS等。如果某些Linux系统没有安装hexdump命令,可以通过以下命令来安装:
- 对于使用apt-get的系统,如Ubuntu、Debian等,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install bsdmainutils
- 对于使用yum的系统,如CentOS、Fedora等,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum install util-linux
- 对于使用dnf的系统,如CentOS 8、Fedora等,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install util-linux
Linux hexdump命令的基本语法
hexdump命令的基本语法格式如下:
hexdump [选项]... [文件]...
如果没有指定文件,或者文件为-,则从标准输入读取数据。如果指定了多个文件,则依次显示每个文件的内容。
Linux hexdump命令的常用选项或参数说明
hexdump命令有很多选项和参数,可以用来控制输出的格式和内容。以下是一些常用的选项和参数的说明:
选项 | 参数 | 说明 |
---|---|---|
-b | 无 | 以每个字节为单位,以八进制显示每个字节的值,以ASCII码显示每个字节的字符。相当于指定了-fmt="%03o %c\n"的格式。 |
-C | 无 | 以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。相当于指定了-fmt="%08.8_ax " -fmt="%02x " -fmt="%_p\n"的格式。 |
-c | 无 | 以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。相当于指定了-fmt="%02x %c\n"的格式。 |
-d | 无 | 以每两个字节为单位,以十进制显示每两个字节的值,以ASCII码显示每两个字节的字符。相当于指定了-fmt="%05u %c\n"的格式。 |
-e | 格式 | 指定输出的格式,格式可以包含以下元素: |
%a:显示当前的偏移量,以十六进制表示。 | ||
%A:显示当前的偏移量,以八进制表示。 | ||
%_a:显示当前的偏移量,以十六进制表示,但是不显示前导的0x。 | ||
%_A:显示当前的偏移量,以八进制表示,但是不显示前导的0。 | ||
%b:显示一个字节的值,以八进制表示。 | ||
%B:显示两个字节的值,以八进制表示。 | ||
%c:显示一个字节的字符,如果不是可打印的字符,则显示一个点。 | ||
%d:显示一个字节的值,以十进制表示。 | ||
%D:显示两个字节的值,以十进制表示。 | ||
%f:显示四个字节的值,以浮点数表示。 | ||
%F:显示八个字节的值,以浮点数表示。 | ||
%o:显示一个字节的值,以八进制表示。 | ||
%O:显示两个字节的值,以八进制表示。 | ||
%p:显示一个字节的字符,如果不是可打印的字符,则显示转义序列。 | ||
%s:显示两个字节的值,以十六进制表示。 | ||
%u:显示一个字节的值,以无符号十进制表示。 | ||
%U:显示两个字节的值,以无符号十进制表示。 | ||
%x:显示一个字节的值,以十六进制表示。 | ||
%X:显示两个字节的值,以十六进制表示。 | ||
%z:显示四个字节的值,以十六进制表示。 | ||
%Z:显示八个字节的值,以十六进制表示。 | ||
%%:显示一个百分号。 | ||
\n:换行。 | ||
\t:制表符。 | ||
\v:垂直制表符。 | ||
\f:换页。 | ||
\b:退格。 | ||
\r:回车。 | ||
\a:响铃。 | ||
\:反斜杠。 | ||
":双引号。 | ||
':单引号。 | ||
\ddd:八进制数,表示一个字符。 | ||
\xhh:十六进制数,表示一个字符。 | ||
/:表示一个格式的结束。 | ||
*:表示重复前面的格式,直到当前的输入单元结束。 | ||
n:表示一个整数,表示前面的格式的重复次数,或者后面的格式的字节数。 | ||
.:表示一个小数点,用来分隔格式的字节数和重复次数。 | ||
":表示一个字符串,用来包含格式中的字符。 | ||
-f | 文件 | 指定一个文件,从中读取输出的格式。 |
-n | 长度 | 指定要显示的数据的长度,单位是字节。 |
-o | 无 | 以每两个字节为单位,以八进制显示每两个字节的值,以ASCII码显示每两个字节的字符。相当于指定了-fmt="%06o %c\n"的格式。 |
-s | 偏移量 | 指定要跳过的数据的偏移量,单位是字节。 |
-v | 无 | 显示所有的数据,不省略重复的行。 |
-x | 无 | 以每两个字节为单位,以十六进制显示每两个字节的值,以ASCII码显示每两个字节的字符。相当于指定了-fmt="%04x %c\n"的格式。 |
Linux hexdump命令的实例
以下是一些使用hexdump命令的实例。
实例1:显示文件的十六进制和ASCII码
可以使用-C选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -C file.txt
00000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a |Hello, world!.|
0000000e
这个命令会以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列到第九列是每个字节的十六进制值,每两个字节之间有一个空格。输出的第十列是每个字节的ASCII码,如果不是可打印的字符,则显示一个点。输出的最后一列是换行符。
实例2:显示文件的八进制和ASCII码
可以使用-b选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -b file.txt
0000000 110 145 154 154 157 054 040 167 157 162 154 144 041 012
H e l l o , w o r l d ! \n
0000016
这个命令会以每个字节为单位,以八进制显示每个字节的值,以ASCII码显示每个字节的字符。输出的第一列是当前的偏移量,以八进制表示。输出的第二列到第十七列是每个字节的八进制值,每个字节之间没有空格。输出的第十八列是每个字节的ASCII码,如果不是可打印的字符,则显示一个点。输出的最后一列是换行符。
实例3:显示文件的十进制和ASCII码
可以使用-d选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -d file.txt
0000000 07248 07276 07276 07279 00260 07167 07279 07162
H e l l o , w o r l d !
0000010 00241 00012
! \n
0000012
这个命令会以每两个字节为单位,以十进制显示每两个字节的值,以ASCII码显示每两个字节的字符。输出的第一列是当前的偏移量,以八进制表示。输出的第二列到第九列是每两个字节的十进制值,每两个字节之间有一个空格。输出的第十列是每两个字节的ASCII码,如果不是可打印的字符,则显示一个点。输出的最后一列是换行符。
实例4:显示文件的十六进制和转义序列
可以使用-e选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -e '"%08.8_ax " 16/1 "%02x " "\t" 16/1 "%_p" "\n"' file.txt
00000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a |Hello, world!\n|
0000000e
这个命令会以每个字节为单位,以十六进制显示每个字节的值,以转义序列显示每个字节的字符。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列到第九列是每个字节的十六进制值,每两个字节之间有一个空格。输出的第十列是一个制表符。输出的第十一列到第十八列是每个字节的转义序列,如果是可打印的字符,则显示该字符,如果不是可打印的字符,则显示对应的转义序列,如\n表示换行符。输出的最后一列是换行符。
实例5:显示文件的浮点数
可以使用-e选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -e '"%08.8_ax " 2/4 "%f " "\n"' file.bin
00000000 3.141593 2.718282
00000008 1.414214 1.618034
00000010
这个命令会以每四个字节为单位,以浮点数显示每四个字节的值。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列和第三列是每四个字节的浮点数值,每个值之间有一个空格。输出的最后一列是换行符。
实例6:显示文件的十六进制和ASCII码,跳过前面的数据
可以使用-s选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -C -s 4 file.txt
00000004 6f 2c 20 77 6f 72 6c 64 21 0a |o, world!.|
0000000e
这个命令会跳过文件的前四个字节,然后以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列到第九列是每个字节的十六进制值,每两个字节之间有一个空格。输出的第十列是每个字节的ASCII码,如果不是可打印的字符,则显示一个点。输出的最后一列是换行符。
实例7:显示文件的十六进制和ASCII码,限制显示的长度
可以使用-n选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -C -n 8 file.txt
00000000 48 65 6c 6c 6f 2c 20 77 |Hello, w|
00000008
这个命令会限制显示文件的前八个字节,然后以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列到第九列是每个字节的十六进制值,每两个字节之间有一个空格。输出的第十列是每个字节的ASCII码,如果不是可打印的字符,则显示一个点。输出的最后一列是换行符。
实例8:显示文件的十六进制和ASCII码,不省略重复的行
可以使用-v选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ hexdump -C -v file.bin
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 |................|
00000090 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... |
000000a0
这个命令会显示文件的所有数据,不省略重复的行,然后以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列到第九列是每个字节的十六进制值,每两个字节之间有一个空格。输出的第十列是每个字节的ASCII码,如果不是可打印的字符,则显示一个点。输出的最后一列是换行符。如果有连续的重复的行,hexdump命令会默认用一个星号来代替,以节省空间。使用-v选项可以取消这个功能,显示所有的行。
实例9:显示文件的十六进制和ASCII码,从一个文件读取输出的格式
可以使用-f选项,或者指定相应的格式,如下:
[linux@bashcommandnotfound.cn ~]$ cat format.txt
"%08.8_ax " 8/1 "%02x " "\n"
[linux@bashcommandnotfound.cn ~]$ hexdump -f format.txt file.txt
00000000 48 65 6c 6c 6f 2c 20 77
00000008 6f 72 6c 64 21 0a
这个命令会从一个文件中读取输出的格式,然后以每个字节为单位,以十六进制显示每个字节的值,以ASCII码显示每个字节的字符。输出的第一列是当前的偏移量,以十六进制表示。输出的第二列到第九列是每个字节的十六进制值,每个字节之间有一个空格。输出的最后一列是换行符。这个命令的效果和使用-e选项指定相同的格式是一样的。
Linux hexdump命令的注意事项
以下是一些使用hexdump命令的注意事项:
- hexdump命令默认会按照系统的字节序来显示数据,如果要显示不同的字节序,可以使用-e选项来指定。例如,如果要显示大端字节序的数据,可以使用-e '"%08.8_ax " 4/4 "%08X\n"'的格式。
- hexdump命令默认会省略连续的重复的行,如果要显示所有的行,可以使用-v选项。
- hexdump命令默认会显示文件的所有数据,如果要限制显示的长度,可以使用-n选项,如果要跳过前面的数据,可以使用-s选项。
- hexdump命令可以显示不同的进制和格式的数据,可以使用-e选项或-f选项来指定输出的格式,格式中可以包含不同的元素和符号,具体的说明可以参考上面的选项或参数说明。
- 如果系统没有安装hexdump命令,可能会出现bash: hexdump: command not found的错误,可以通过使用apt-get、yum或dnf等命令来安装。
Linux hexdump相关命令
以下是一些和hexdump命令相关的命令,可以用来显示或处理文件的内容:
评论区