od 命令用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候 od 命令就派上用场了。在我看来,od 命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是 IEEE754 格式的浮点数还是 ASCII 码,od 命令都能按照需求输出它们的值。
od [OPTION]... [FILE]... od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]] od --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]
-a 此参数的效果和同时指定"-ta"参数相同。
-A<字码基数> 选择要以何种基数计算字码。
-b 此参数的效果和同时指定"-toC"参数相同。
-c 此参数的效果和同时指定"-tC"参数相同。
-d 此参数的效果和同时指定"-tu2"参数相同。
-f 此参数的效果和同时指定"-tfF"参数相同。
-h 此参数的效果和同时指定"-tx2"参数相同。
-i 此参数的效果和同时指定"-td2"参数相同。
-j<字符数目>或--skip-bytes=<字符数目> 略过设置的字符数目。
-l 此参数的效果和同时指定"-td4"参数相同。
-N<字符数目>或--read-bytes=<字符数目> 到设置的字符数目为止。
-o 此参数的效果和同时指定"-to2"参数相同。
-s<字符串字符数>或--strings=<字符串字符数> 只显示符合指定的字符数目的字符串。
-t<输出格式>或--format=<输出格式> 设置输出格式。输出格式取值如下:
a 命名字符,忽略高位
c 可打印字符或反斜杠转义符
d[SIZE] 有符号十进制,每个整数的 SIZE 字节数
f[SIZE] 浮点数,每个浮点数的 SIZE 字节数
o[SIZE] 八进制,每个整数的 SIZE 字节数
u[SIZE] 无符号十进制,每个整数的 SIZE 字节数
x[SIZE] 十六进制,每个整数的 SIZE 字节数
注意:SIZE 是一个数字。 对于 [doux] 中的 TYPE,SIZE 也可以是 C 表示 sizeof(char), S 表示 sizeof(short), I 表示 sizeof(int), L 表示 sizeof(long)。如果 TYPE 为 f,则 SIZE 也可以是 F 表示 sizeof(float),D 表示 sizeof(double),L 表示 sizeof(long double)。
-v或--output-duplicates 输出时不省略重复的数据。
-w<每列字符数>或--width=<每列字符数> 设置每列的最大字符数。注意,字节数是带有 0x 或 0X 前缀的十六进制,并且可以有单位后缀:
b 512
KB 1000
K 1024
MB 1000*1000
M 1024*1024
以此类推 G、T、P、E、Z、Y。
-x 此参数的效果和同时指定"-h"参数相同。
--help 在线帮助。
--version 显示版本信息。
(1)使用 od 命令以八进制显示文件内容,如下:
# 将字符串 hello world 写入 tmp 文件 hxstrive@localhost:~$ echo hello world > tmp # 查看 tmp 文件内容 hxstrive@localhost:~$ cat tmp hello world # 以八进制显示 tmp 文件内容 hxstrive@localhost:~$ od -b tmp 0000000 150 145 154 154 157 040 167 157 162 154 144 012 0000014
(2)使用 ASCII 码进行输出,注意其中包括转义字符,如下:
hxstrive@localhost:~$ od -c tmp 0000000 h e l l o w o r l d \n 0000014
(3)使用单字节十进制进行解释,如下:
hxstrive@localhost:~$ od -t d1 tmp 0000000 104 101 108 108 111 32 119 111 114 108 100 10 0000014
注意,对照 ASCII 表查看 “hello world” 对应的十进制,https://www.hxstrive.com/article/1071.htm。
(4)跳过开始的两个字节,如下:
hxstrive@localhost:~$ od -j 2 -c tmp 0000002 l l o w o r l d \n 0000014
(5)设置地址格式为十六进制,如下:
hxstrive@localhost:~$ od -A x -c tmp 000000 h e l l o w o r l d \n 00000c
(6)设置地址格式为十进制,如下:
hxstrive@localhost:~$ od -A d -c tmp 0000000 h e l l o w o r l d \n 0000012
(7)跳过开始的两个字节,并且仅输出两个字节,如下:
hxstrive@localhost:~$ od -N 2 -j 2 -c tmp 0000002 l l 0000004
(8)每行仅输出1个字节,如下:
hxstrive@localhost:~$ od -w1 -c tmp 0000000 h 0000001 e 0000002 l * 0000004 o 0000005 0000006 w 0000007 o 0000010 r 0000011 l 0000012 d 0000013 \n 0000014
(9)每行输出两个字节,如下:
hxstrive@localhost:~$ od -w2 -c tmp 0000000 h e 0000002 l l 0000004 o 0000006 w o 0000010 r l 0000012 d \n 0000014
(10)每行输出3个字节,并使用八进制单字节进行解释,如下:
hxstrive@localhost:~$ od -w3 -b tmp 0000000 150 145 154 0000003 154 157 040 0000006 167 157 162 0000011 154 144 012 0000014
更多关于命令详细参考手册,请使用 man 命令或者 --help 参数获取帮助信息