od命令-阿里云开发者社区

开发者社区> 科技小能手> 正文

od命令

简介:
+关注继续查看

名称:od

作用:格式化输出文件中的数据

提要:

         od [OPTION]... [FILE]...

         od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]

     od --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]

说明:

常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出他们的值。

如果没有指定文件名,或者文件名为“-”,则从标准输入读入数据

 

-A:指定地址基数,od命令的输出最左侧的1列为偏移量。默认的偏移量使用8进制,可以使用-A进行修改。

格式为:-A 参数.可以使用的参数有:d:十进制;o:八进制;x:十六进制;n不显示偏移量这一列。

 

-j:文件打开时,跳过的字节数量。

格式为:-j BYTES.BYTES是一个数值,用0开头表示8进制,用0x开头表示16进制,用b作为后缀表示1个字节,用k作为后缀表示1024个字节,用m作为后缀表示1048576个字节。

 

-N:用于限制输出的字节的数量

格式为:-N BYTES.BYTES的格式同上。

 

-S:用于指定输出的串占多少个图形字符的位置

格式为:-S BYTES.

 

-t:选择输出格式。

格式为:-t [acdfoux][size].

a:每个ASCII码对应的名字。

b:用八进制字节表示的字符对应的ASCII码值

d:有符号数值,SIZE个字节

f:浮点数,SIZE个字节

o:八进制数,SIZE个字节

u:无符号数值,SIZE个字节

x:十六进制数,size个字节

注意:这里的SIZE是一个数值或者是一个字母。字母的范围为:[CSILFD]。对于非f类型的,一般选择CSIL.其中C表示sizeof(char),S表示sizeof(short),I表示sizeof(int)L表示sizeof(long).如果类型为fsizeof可以是F或者是D,分别表示sizeof(float)或者sizeof(double).

可以使用传统的格式:分别为:

-a:等价于 -t a.表示ASCII码的名字

-b:等价于-t o1,选择单字节,并且按照3个数值位的八进制数进行解释

-c:等价于-t c,选择ASCII码字符或者是转义字符

-d:等价于-t u2:选择无符号2字节单位

-f:等价于-t fF,选择单精度浮点数

-i:等价于-t dI,选择十进制整型

-l:等价于-t dL,选择十进制长整型

-o:等价于-t o2,选择两个字节的单元并按照八进制进行解释

-s:等价于-t d2,选择两字节单元并按照十进制解释

-x:等价于-t x2,选择两个字节单元,并作十六进制解释

 

-v:不用*代替重复的输出

 

-w:用于设置每行的宽度,即每行上输出的字节数

格式为:-w BYTES

 

举例说明如下:

[lichao@sg01 ~]$ echo abcdef g > tmp

[lichao@sg01 ~]$ cat tmp

abcdef g

说明:先准备一个tmp文件

 

[lichao@sg01 ~]$ od -b tmp

0000000 141 142 143 144 145 146 040 147 012

0000011

说明:使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节

 

[lichao@sg01 ~]$ od -c tmp

0000000   a   b   c   d   e   f       g  \n

0000011

说明:使用ASCII码进行输出,注意其中包括转义字符

 

[lichao@sg01 ~]$ od -t d1 tmp

0000000   97   98   99  100  101  102   32  103   10

0000011

说明:使用单字节十进制进行解释

 

[lichao@sg01 ~]$ od -A d -c tmp

0000000   a   b   c   d   e   f       g  \n

0000009

说明:设置地址格式为十进制。

 

[lichao@sg01 ~]$ od -A x -c tmp

000000   a   b   c   d   e   f       g  \n

000009

说明:设置地址格式为十六进制

 

[lichao@sg01 ~]$ od -j 2 -c tmp

0000002   c   d   e   f       g  \n

0000011

说明:跳过开始的两个字节

 

[lichao@sg01 ~]$ od -N 2 -j 2 -c tmp

0000002   c   d

0000004

说明:跳过开始的两个字节,并且仅输出两个字节

 

[lichao@sg01 ~]$ od -w1 -c tmp

0000000   a

0000001   b

0000002   c

0000003   d

0000004   e

0000005   f

0000006   

0000007   g

0000010  \n

0000011

说明:每行仅输出1个字节

 

[lichao@sg01 ~]$ od -w2 -c tmp

0000000   a   b

0000002   c   d

0000004   e   f

0000006       g

0000010  \n

0000011

说明:每行输出两个字节

 

[lichao@sg01 ~]$ od -w3 -b tmp

0000000 141 142 143

0000003 144 145 146

0000006 040 147 012

0000011

说明:每行输出3个字节,并使用八进制单字节进行解释

 

下面是一个单精度浮点数的实验,其余的类型与之类似:

先写一段C语言的代码:


  1. #include<stdio.h> 
  2.  
  3. #include<stdlib.h> 
  4.  
  5. #include<time.h> 
  6.  
  7. #define N 100 
  8.  
  9. #define PI 3.1415 
  10.  
  11. int main() 
  12.  
  13.  
  14.         FILE * fp; 
  15.  
  16.         int i=0; 
  17.  
  18.         float fNum=0.0; 
  19.  
  20.         if( NULL == (fp = fopen("tmp","wb+"))) 
  21.  
  22.         { 
  23.  
  24.                 printf("file open error."); 
  25.  
  26.                 exit(-1); 
  27.  
  28.         } 
  29.  
  30.         srand((unsigned int)time(NULL)); 
  31.  
  32.         for(i=0;i<N;i++) 
  33.  
  34.         { 
  35.  
  36.                 fNum = rand() % N; 
  37.  
  38.                 fNum = PI * fNum / N; 
  39.  
  40.                 fwrite(&fNum,sizeof(float),1,fp); 
  41.  
  42.         } 
  43.  
  44.         fclose(fp); 
  45.  

执行之后,将生成一个tmp文件,文件中有100个大小在0~PI之间的浮点数。

[lichao@sg01 random]$ od -t fF tmp

0000000   5.654700e-01   2.387540e+00   2.199050e+00   1.633580e+00

0000020   2.199050e-01   2.481785e+00   8.167900e-01   2.576030e+00

0000040   2.827350e-01   9.424500e-01   8.796200e-01   1.130940e+00

0000060   2.638860e+00   1.193770e+00   2.733105e+00   1.162355e+00

0000100   2.167635e+00   2.670275e+00   5.654700e-01   2.261880e+00

0000120   1.507920e+00   2.450370e+00   2.607445e+00   6.597150e-01

0000140   1.350845e+00   7.853750e-01   2.010560e+00   2.858765e+00

0000160   1.916315e+00   2.387540e+00   7.225450e-01   9.738650e-01

0000200   1.256600e-01   1.445090e+00   2.638860e+00   3.455650e-01

0000220   7.853750e-01   1.947730e+00   1.413675e+00   2.701690e+00

0000240   2.890180e+00   7.853750e-01   2.356125e+00   2.387540e+00

0000260   5.026400e-01   4.398100e-01   2.073390e+00   2.670275e+00

0000300   3.110085e+00   1.130940e+00   2.827350e-01   1.507920e+00

0000320   2.104805e+00   2.890180e+00   6.597150e-01   3.141500e-01

0000340   2.199050e+00   1.193770e+00   3.141500e-02   9.738650e-01

0000360   4.398100e-01   2.387540e+00   1.979145e+00   2.199050e+00

0000400   2.324710e+00   1.476505e+00   2.544615e+00   1.633580e+00

0000420   1.916315e+00   2.450370e+00   2.827350e+00   1.664995e+00

0000440   1.256600e-01   2.041975e+00   2.544615e+00   6.283000e-01

0000460   2.481785e+00   1.476505e+00   1.570750e-01   9.738650e-01

0000500   2.638860e+00   2.073390e+00   2.481785e+00   1.602165e+00

0000520   1.853485e+00   1.633580e+00   4.083950e-01   2.544615e+00

0000540   2.827350e+00   2.073390e+00   3.769800e-01   1.759240e+00

0000560   1.319430e+00   2.356125e+00   8.167900e-01   2.167635e+00

0000600   2.324710e+00   1.853485e+00   6.597150e-01   1.099525e+00

说明:使用-f选项输出浮点数。

 


本文转自hipercomer 51CTO博客,原文链接:http://blog.51cto.com/hipercomer/824774


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6935 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2876 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4504 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7772 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5466 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9435 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2147 0
14491
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载