Linux hexdump 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux hexdump 命令。

1、命令简介

hexdump:用于显示文件内容的十六进制表示形式以及ASCII字符。它还可以用于转换二进制文件或者查看文件的内容。

2、命令语法

hexdump [-bcCdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file ...
hd [-bcdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file ...

3、命令描述

hexdump实用程序是一个过滤器,它以用户指定的格式显示指定的文件。如果没有指定文件,它将从标准输入读取输入。

4、命令选项

选项

描述

-b

以一字节的八进制显示。

显示数据的输入偏移(地址)

以十六进制格式显示。

每行显示十六个以空格分隔的

、三列的、填充为零的八进制的输入数据字节。

-c

以一字节的字符显示。

以十六进制显示数据的输入偏移,

后面是十六个以空格分隔的

、三列的、以空格填充的字符输入数据。

-C

规范的十六进制+ASCII显示。

以十六进制格式显示数据的输入偏移,

后面是十六个以空格分隔的、

两列的十六进制字节,后跟用``

-d

以两字节的十进制显示。

以十六进制显示数据的输入偏移,

后面是以空格分隔的、五列的、填充为零的两字节输入数据单位,以无符号十进制格式。

-e format_string

指定用于显示数据的格式字符串。

-f format_file

指定包含一个或多个以换行分隔的格式字符串的文件。忽略空行和以井号(#)开头的行。

-n length

解释输入的长度字节。

-o

以两字节的八进制显示。

以十六进制显示数据的输入偏移,

后面是以空格分隔的、六列的、填充为零的两字节输入数据量。

-s offset

从输入开头跳过偏移字节。默认情况下

,偏移被解释为十进制数。

以0x或0X开头时,

偏移被解释为十六进制数。

否则,以0开头时,

偏移被解释为八进制数。

在偏移后附加字符b、k或m,

将其解释为512、1024或1048576的倍数。

-v

使

hexdump

显示所有输入数据。

不使用 -v 选项时,

任何一组输出行,

其与前一组输出行完全相同(除了输入偏移),

将被替换为由单个星号组成的行。

-x

以两字节的十六进制显示。

以十六进制显示数据的输入偏移,

后面是以空格分隔的、四列的、填充为零的两字节输入数据量。

5、使用示例

1)使用-b选项将以十六进制格式显示输入偏移量。这种输出格式也称为一字节八进制显示格式。输入偏移量后面是十六个以空格分隔的、三列、用八进制表示的输入数据字节,每行一组。

$ hexdump -b test.txt
0000000 163 160 145 143 151 146 171 040 141 040 146 151 154 145 040 164
0000010 150 141 164 040 143 157 156 164 141 151 156 163 040 157 156 145
0000020 040 157 162 040 155 157 162 145 040 156 145 167 154 151 156 145
0000030 012 163 145 160 141 162 141 164 145 144 040 142 171 040 157 156
0000040 145 040 157 162 040 155 157 162 145 040 156 145 167 040 154 151
0000050 156 145 163 056 012 154 151 156 145 163 040 167 150 157 163 145
0000060 040 146 151 162 163 164 040 156 157 156 055 142 154 141 156 153
0000070 040 143 150 141 162 141 143 164 145 162 040 151 163 040 141 040
0000080 150 141 163 150 040 155 141 162 153 040 050 043 051 040 141 162
0000090 145 040 151 147 156 157 162 145 144 056 012 012
000009c

2)使用-c选项将以字符ASCII格式显示数据。输入偏移量将以十六进制格式显示。这种输出格式也称为一字节字符显示格式。输入偏移量后面是十六个以空格分隔的、三列、以空格填充的字符,每行一组。

$ hexdump -c test.txt
0000000 s p e c i f y a f i l e t
0000010 h a t c o n t a i n s o n e
0000020 o r m o r e n e w l i n e
0000030 \n s e p a r a t e d b y o n
0000040 e o r m o r e n e w l i
0000050 n e s . \n l i n e s w h o s e
0000060 f i r s t n o n - b l a n k
0000070 c h a r a c t e r i s a
0000080 h a s h m a r k ( # ) a r
0000090 e i g n o r e d . \n \n
000009c

3)使用-C选项将以ASCII+十六进制格式显示数据,也称为标准十六进制+ASCII显示。这将以十六进制格式显示输入偏移量。输入偏移量后面是十六个以空格分隔的、两列、十六进制字节,以及用``|''字符括起的相同十六字节的%_p格式。以下是此命令选项的工作示例。

$ hexdump -C test.txt
00000000 73 70 65 63 69 66 79 20 61 20 66 69 6C 65 20 74 |specify a file t|
00000010 68 61 74 20 63 6F 6E 74 61 69 6E 73 20 6F 6E 65 |hat contains one|
00000020 20 6F 72 20 6D 6F 72 65 20 6E 65 77 6C 69 6E 65 | or more newline|
00000030 0A 73 65 70 61 72 61 74 65 64 20 62 79 20 6F 6E |.separated by on|
00000040 65 20 6F 72 20 6D 6F 72 65 20 6E 65 77 20 6C 69 |e or more new li|
00000050 6E 65 73 2E 0A 6C 69 6E 65 73 20 77 68 6F 73 65 |nes..lines whose|
00000060 20 66 69 72 73 74 20 6E 6F 6E 2D 62 6C 61 6E 6B | first non-blank|
00000070 20 63 68 61 72 61 63 74 65 72 20 69 73 20 61 20 | character is a |
00000080 68 61 73 68 20 6D 61 72 6B 20 28 23 29 20 61 72 |hash mark (#) ar|
00000090 65 20 69 67 6E 6F 72 65 64 2E 0A 0A |e ignored...|
0000009C
$

4)使用-o选项将以十六进制格式显示输入偏移量,然后是八个以空格分隔的、六列、用八进制表示的两字节输入数据,每行一组。这种格式也称为双字节八进制显示。

$ hexdump -o test.txt
0000000 070163 061545 063151 020171 020141 064546 062554 072040
0000010 060550 020164 067543 072156 064541 071556 067440 062556
0000020 067440 020162 067555 062562 067040 073545 064554 062556
0000030 071412 070145 071141 072141 062145 061040 020171 067157
0000040 020145 071157 066440 071157 020145 062556 020167 064554
0000050 062556 027163 066012 067151 071545 073440 067550 062563
0000060 063040 071151 072163 067040 067157 061055 060554 065556
0000070 061440 060550 060562 072143 071145 064440 020163 020141
0000080 060550 064163 066440 071141 020153 021450 020051 071141
0000090 020145 063551 067556 062562 027144 005012
000009c
$

5)使用-n选项将仅显示输入的'n'个字节长度。以下使用-n选项的命令仅显示输入数据的前30个字节。

$ hexdump -n 30 -C test.txt
00000000 73 70 65 63 69 66 79 20 61 20 66 69 6C 65 20 74 |specify a file t|
00000010 68 61 74 20 63 6F 6E 74 61 69 6E 73 20 6F |hat contains o|
0000001E
$

6)使用-s选项将跳过输入的前'n'个字节,并显示其余的数据。

$ hexdump -s 30 -C test.txt
0000001E 6E 65 20 6F 72 20 6D 6F 72 65 20 6E 65 77 6C 69 |ne or more newli|
0000002E 6E 65 0A 73 65 70 61 72 61 74 65 64 20 62 79 20 |ne.separated by |
0000003E 6F 6E 65 20 6F 72 20 6D 6F 72 65 20 6E 65 77 20 |one or more new |
0000004E 6C 69 6E 65 73 2E 0A 6C 69 6E 65 73 20 77 68 6F |lines..lines who|
0000005E 73 65 20 66 69 72 73 74 20 6E 6F 6E 2D 62 6C 61 |se first non-bla|
0000006E 6E 6B 20 63 68 61 72 61 63 74 65 72 20 69 73 20 |nk character is |
0000007E 61 20 68 61 73 68 20 6D 61 72 6B 20 28 23 29 20 |a hash mark (#) |
0000008E 61 72 65 20 69 67 6E 6F 72 65 64 2E 0A 0A |are ignored...|
0000009C
$

7)使用-e选项指定用于显示数据的格式字符串。例如,每行显示一个十六进制字节。

$ echo hello |hexdump -v -e '/1 "%02X \n"'
68
65
6C
6C
6F
0A
$

推荐阅读
cjavapy编程之路首页