linux命令系列 - od、xxd

2018-07-03 17:01:26

od 指令可以按照不同进制格式打印文件,主要是为了查看二进制文件。

-A  d(十进制)/o(八进制)/x(十六进制)/n(不显示)---地址
-t  c(字符)/d[size](十进制)/f[size](浮点)/o[size](八进制)/ \
u[size](无符号十进制)/x[size](十六进制)/z结尾打印字符(z只能放在类型结尾)

-j  bytes    	跳过bytes
-S  bytes    	输出至少 Bytes 的图形字符串
-w  bytes    	指定每行的输出字节数目
-N  bytes      	指定显示的输入限定为 Bytes 字节

-v 不用*来压缩显示行
#显示前16个字节,地址以16进制显示
#格式为 字符,无符号(1字节),16进制(1字节)
[root@192 tmp]# od -N 16  -Ax  -t cu1x1 1.jpg
000000 377 330 377 340  \0 020   J   F   I   F  \0 001 001 001  \0   `
       255 216 255 224   0  16  74  70  73  70   0   1   1   1   0  96
        ff  d8  ff  e0  00  10  4a  46  49  46  00  01  01  01  00  60
000010
#在结尾显示可打印字符,一般用来显示利用tcpdump抓取的http包
[root@192 tmp]# od -N 16  -Ax  -t cx1z 1.jpg
000000 377 330 377 340  \0 020   J   F   I   F  \0 001 001 001  \0   `
        ff  d8  ff  e0  00  10  4a  46  49  46  00  01  01  01  00  60  >......JFIF.....`<
000010
#字符转ascii码值(以数字编号显示字符)
[root@192 tmp]# echo -n 'A' | od -An -t d1
  65

[root@192 tmp]# printf %d "'A"
65
ascii码值转字符
[root@192 tmp]# printf \\x`printf %x 65`
A

[root@192 tmp]# echo -n 65 | awk '{printf("%c", $1)}'
A


xxd 指令可以16进制显示二进制文件或标准输入,当然也可以以二进制显示16进制字符。也就是既可以从16进制转2进制,也可以从二进制转十六进制。

-l  显示字节数
-p  文本16进制形式
-b  16进制转2进制
-u  大写16进制(默认为小写)
-i  可以生成c语言头文件定义

-c  指定一行显示多少字节,默认为16


下面我们把 http://www.freecls.com 22个字节生成c语言的定义。

[root@izj6cfw9yi1iqoik31tqbgz tmp]# cat src
http://www.freecls.com

[root@izj6cfw9yi1iqoik31tqbgz tmp]# xxd -i -u -l 22 src
unsigned char src[] = {
  0X68, 0X74, 0X74, 0X70, 0X3A, 0X2F, 0X2F, 0X77, 0X77, 0X77, 0X2E, 0X66,
  0X72, 0X65, 0X65, 0X63, 0X6C, 0X73, 0X2E, 0X63, 0X6F, 0X6D
};
unsigned int src_len = 22;
#打印16个字符
[root@192 tmp]# xxd -l 16 1.jpg
0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0060  ......JFIF.....`

#以16进制文本显示
[root@192 tmp]# xxd -p -l 16 1.jpg
ffd8ffe000104a464946000101010060
#16进制显示为2进制
#十六进制转二进制
[root@192 tmp]# echo -n 'ffd8ff' | xxd -b
0000000: 01100110 01100110 01100100 00111000 01100110 01100110  ffd8ff

如果对以上显示的格式有特殊要求,可以参照 linux文件流编辑-sed、(g)awk 来进行截取。


备注:
1.本系列命令都在centos7里测试,其他发行版如ubuntu、debian、fedora、opensuse等可能略微不同
2.本文只讲解常用用法,详细用法请自行利用 man 命令查看
3.原文地址http://www.freecls.com/a/2712/7a

 

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。