跟我一起写Shell脚本之二十一--常用命令(od)

1、介绍

    od是Octal Dump的简写,用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。

    其语法如下:

od [<选项><参数>] [<文件名>]

    详细命令选项介绍:

-A:指定地址(文件offset)用什么基数显示,包括:
    d 十进制
    o 八进制(系统默认值)
    x 十六进制
    n 不输出位移值

-j,--skip-bytes=BYTES:跳过指定数目的字节;

-N,--read-bytes=BYTES:输出指定字节数;

-S, --strings[=BYTES]:输出长度不小于指定字节数的字符串;

-v,--output-duplicates:输出时不省略重复的数据; 

-w,--width=:
  设置每行显示的字节数,od默认每行显示16字节。如果选项--width不跟数字,默认显示32字节;

-t,--format=TYPE:指定输出格式,格式包括a、c、d、f、o、u和x,各含义如下:
  a:具名字符;
  c:ASCII字符或者反斜杠;
  d[SIZE]:十进制,正负数都包含,SIZE字节组成一个十进制整数;
  f[SIZE]:浮点,SIZE字节组成一个浮点数;
  o[SIZE]:八进制,SIZE字节组成一个八进制数;
  u[SIZE]:无符号十进制,只包含正数,SIZE字节组成一个无符号十进制整数;
  x[SIZE]:十六进制,SIZE字节为单位以十六进制输出,即输出时一列包含SIZE字节。

-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,选择两个字节单元,并作十六进制解释

 2、例子

    还是废话少说,直接上例子。我们创建两个文件用来作为我们例子使用的文件,一个写入十六进制036_test1_hex.txt,一个写入字符036_test2_char.txt.

$ echo -e "\x61\x62\x63\x64\x65\x88" > 036_test1_hex.txt

$ echo "hello" > 036_test2_char.txt

$ cat 036_test1_hex.txt

abcde�

$ cat 036_test2_char.txt 
hello

2.1 以十六进制显示

$ od -x 036_test1_hex.txt
0000000 6261 6463 8865 000a
0000007

多了一个0a是怎么回事?这个0a就是换行符,因为echo会自动加上这个换行符,如果想没有0a,那么我们需要加一个-n参数:

echo -ne "\x61\x62\x63\x64\x65\x88" > 036_test1_hex.txt

这时候,我们再用od看结果:

$ od -x 036_test1_hex.txt
0000000 6261 6463 8865
0000006

$ od -t x2 036_test1_hex.txt 
0000000 6261 6463 8865
0000006

$ od -t x1 036_test1_hex.txt 
0000000 61 62 63 64 65 88
0000006

2.2 以ASCII显示

$ od -c 036_test1_hex.txt
0000000   a   b   c   d   e 210
0000006

2.3 以八进制显示

$ od -b 036_test1_hex.txt 
0000000 141 142 143 144 145 210
0000006

$ od -t o1 036_test1_hex.txt 
0000000 141 142 143 144 145 210
0000006
 

2.4 地址以16进制显示

$ od -A x -t x1 036_test1_hex.txt 
000000 61 62 63 64 65 88
000006

似乎看不出来,我们输入更多内容到一个文件,然后用od查看:

$ od -A x -t x1 036_test3_hex.txt 
000000 61 62 63 64 65 66 67 68 69 7a 7b 7c 5c 37 64 5c
000010 37 65 5c 37 66 70 71 72 73 74
00001a


$ od -A x -t d1 036_test3_hex.txt 
000000   97   98   99  100  101  102  103  104  105  122  123  124   92   55  100   92
000010   55  101   92   55  102  112  113  114  115  116
00001a

2.5 每行显示4个字节

每行显示内容太多,影响观看,可以考虑减少每行显示字节数。

$ od -A x -t d1 -w4 036_test3_hex.txt 
000000   97   98   99  100
000004  101  102  103  104
000008  105  122  123  124
00000c   92   55  100   92
000010   55  101   92   55
000014  102  112  113  114
000018  115  116
00001a

$ od -A x -t x1 -w4 036_test3_hex.txt 
000000 61 62 63 64
000004 65 66 67 68
000008 69 7a 7b 7c
00000c 5c 37 64 5c
000010 37 65 5c 37
000014 66 70 71 72
000018 73 74
00001a
 

好了,今天的部分就到这里了,接下来的Shell脚本之旅会更久精彩!

===================================================================================

注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载请注明出处。

===================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值