侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux hexdump命令教程:如何以不同的进制和格式显示文件的内容(附实例详解和注意事项)

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命令相关的命令,可以用来显示或处理文件的内容:

0

评论区