od 读取文件内容,以八进制显示

作用

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 参数获取帮助信息

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号