od

以八进制数值或其他数据表示形式显示输入文件


语法格式

od [-v] [-A radix] [-j bytes] [-N bytes] [-S bytes] [-t type] [-w [n]] [files]
od [-abcdfilosx] [file] [[+]offset[.][b]]
od [-abcdfilosx] --traditional [file] [[+]offset[.][b] [+][label][.][b]]
od [--help] [--version]

命令简介

od命令用于读取指定的文件,以3位八进制数值表示一个字节(默认),把读入的数据写到标准输出。每行输出数据由一个偏移值和8组16字节的输入文件数据组成。偏移值是每行输出数据第一个字节在输入文件中的偏移位置,以八进制数值表示(默认)。其中,files是一个或多个二进制数据文件。如果同时指定了多个文件,od将会连续地依次显示每一个文件,中间没有任何分隔标志。如果未指定文件,或指定的文件为“-”,则使用标准输入作为输入文件。

在第二种语法格式中,file是一个输入文件,offset是字节数量,如果指定了offset,表示首先要跳过输入文件中的offset个字节,然后再开始显示输入文件中的后续数据。通常,od把offset解释成八进制的数值。如果后面附加一个小数点“.”,则解释为十进制的数值。如果没有指定小数点,且offset以0x或0X开始,说明是一个十六进制的数值。如果offset后面附加一个字符“b”,说明offset的单位是512字节的数据块,意味着首先要跳过输入文件中offset个512字节的数据块。

在第三种语法格式中,label是一个伪地址。用于增加一列伪地址,在第二列输出,地址前后加圆括号。注意,在指定伪地址label时,必须首先指定偏移值参数offset

注意,如果输入的命令兼具第一种和第二种语法格式,且如果最后一个数字参数前面有一个加号“+”前缀,或有两个参数,但最后一个参数是数字,则假定采用的是第二种语法格式。例如,“od +10”和“od foo 10”表示10是一个offset参数,而“od 10”命令中将10解释成文件名,而非offset参数。

命令选项

-A radix, --address-radix=radix  选择文件偏移值的表示方式。其中radix可以是d(表示十进制数值)、o(表示八进制数值,默认)、x(表示十六进制数值)或n(禁止输出偏移值)。

-j bytes, --skip-bytes=bytes  在开始输出之前,首先跳过输入文件中指定字节数量的数据。其中bytes 是一个十进制的整数。如果前面加上“0x”或“0X”前缀,表示是十六进制数值,单加一个数值0,表示为八进制数值。数值后面还可以加各种单位后缀,如b(512字节)、KB(1000字节)、K(1024字节)、MB(10002字节)、M(10242字节)、GB(10003字节)、G(10243字节)以及T、P、E、Z或Y等。

-N bytes, --read-bytes=bytes  最多读取并输出限定字节数量的数据。bytes前后也可以加适当的前缀与后缀,其用法及解释同“-j”选项。

-S bytes, --strings[=bytes]  仅仅显示输入文件中至少包含bytes个连续可打印字符的任何字符串(以NULL为字符串终止符)。如果指定了“--string”选项,但未指定bytes,其默认值为3。这个选项的作用类似于strings命令。

-t type, --format=type  按照指定的类型显示数据。其中type是一个字符串,由一个或多个类型标志字符组成(详见“命令选项(传统的输出格式选项)”一节的说明)。如果type包含多个类型标志字符,或同时指定了多个“-t”选项,od将会针对每个类型标志及指定的顺序,分别采用相应的表示形式,重复输出同一行数据。在任何类型标志字符后面加一个字符“z”,表示在每一行输出数据后面增加一列,显示相应的可打印字符,不可打印的字符以句点“.”表示。

-v, --output-duplicates  当相邻的两行或多行完全相同时也照样输出。默认的做法是仅仅输出第一行,在后续的第二行显示一个星号“*”,表示已省略其他相同的行。

-w [n], --width[=n]  限定每行输出的最大字节数。其中n必须是输出类型字节宽度的倍数。如果未指定“-w”与“--width”选项,n的默认值是16。如果指定了“--width”选项,但未指定nn的默认值是32。

--traditional  接受传统的label参数,参见第三种语法格式及其说明。

命令选项(传统的输出格式选项)

下列选项是传统的显示格式选项,也是“-t”选项的缩写形式,可以组合使用,表示同时采用多种表示形式显示同一数据行。

-a  相当于“-t a”选项,忽略字节的高序位,仅采用最后7位,以英文缩写表示一个字符,如使用“sp”表示空格,“nl”表示换行符,“nul”表示NULL字符等。

-b  相当于“-t o1”,把字节解释成3位八进制的数值。

-c  相当于“-t c”选项,输出ASCII字符,不可打印字符按转义字符或3位八进制数值显示,如使用“\n”表示换行符,“\0”表示NULL字符,“\t”表示制表符,“\b”表示退格符等。

-d  相当于“-t u2”选项,把双字节的字解释成无符号的十进制数。

-f  相当于“-t fF”选项,把4字节的长字解释成浮点数。

-i  相当于“-t dI”选项,按整数解释并显示输入数据。

-l  相当于“-t dL”选项,按长整数解释并显示输入数据。

-o  相当于“-t o2”选项,把双字节的字解释成八进制的数值。

-s  相当于“-t d2”选项,把双字节的字解释成带符号的十进制数。

-x  相当于“-t x2”,把双字节的字解释成十六进制的数值。

在“-t”选项中,type参数由下列一个或多个类型标志组成:

a  忽略字节的高序位,仅采用最后7位,以英文缩写形式表示字符,如使用“sp”表示空格、“nl”表示换行符,“nul”表示NULL字符等。

c  采用ASCII字符、转义字符或3位八进制数值表示字符,如使用“\n”表示换行符,“\0”表示NULL字符等。

d[size]  带符号的十进制整数,每个整数占用size个字节。

f[size]  浮点数,每个浮点数占用size个字节。

o[size]  八进制的整数,每个整数占用size个字节。

u[size]  无符号的十进制整数,每个整数占用size个字节。

x[size]  十六进制的整数,每个整数占用size个字节。

其中,size是一个表示相应数据类型字节数量的十进制整数,或采用C语言的数据类型字符表示字节数量。例如,对于d、o、u和x类型标志,可用C表示一个字符,S表示一个短整数,I表示一个整数,L表示一个长整数,对于f类型标志,可用F表示一个浮点数,D表示一个双精度的浮点数,L表示长的双精度浮点数等。

应用实例

1. 不加任何选项,使用下列od命令直接显示一个二进制数据文件/usr/bin/test,其效果相当于运行“od -A o -t oS -w 16 /usr/bin/test”命令。

$ od /usr/bin/test

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z