2020年12月6日 / 15次阅读
Linux命令
xxd命令跟hexdump比较相似,都是用来查看二进制文件的内容,不过用起来,xxd命令似乎更顺手一点。
如果没有任何参数,xxd命令默认将文件内容按16进制的方式显示出来,并在右侧配合“翻译”:
$ cat t2.txt
i love linux, haha...
$ xxd t2.txt
00000000: 6920 6c6f 7665 206c 696e 7578 2c20 6861 i love linux, ha
00000010: 6861 2e2e 2e0a ha....
每行显示16个字节。
-b参数,以2进制的方式显示内容:
$ xxd -b t2.txt
00000000: 01101001 00100000 01101100 01101111 01110110 01100101 i love
00000006: 00100000 01101100 01101001 01101110 01110101 01111000 linux
0000000c: 00101100 00100000 01101000 01100001 01101000 01100001 , haha
00000012: 00101110 00101110 00101110 00001010 ....
每行显示6个字节的2进制。
-s参数,skip,跳过N个字节:
$ xxd -s 6 t2.txt 00000006: 206c 696e 7578 2c20 6861 6861 2e2e 2e0a linux, haha.... $ xxd -s 6 -b t2.txt 00000006: 00100000 01101100 01101001 01101110 01110101 01111000 linux 0000000c: 00101100 00100000 01101000 01100001 01101000 01100001 , haha 00000012: 00101110 00101110 00101110 00001010 ....
从开始地址00000006可以看出,前面6个字节被跳过。
-l参数,len,显示长度:
$ xxd -l 10 t2.txt 00000000: 6920 6c6f 7665 206c 696e i love lin $ xxd -l 10 -b t2.txt 00000000: 01101001 00100000 01101100 01101111 01110110 01100101 i love 00000006: 00100000 01101100 01101001 01101110 lin
很多时候,我们是-s和-l一起用,这样可以查看文件任意一段的内容。
-c参数,column,定义每行多少列(前面的示例说明,16进制显示默认是8列,每列2个字节;2进制显示默认是6列,每列1个字节):
$ xxd -c 8 t2.txt 00000000: 6920 6c6f 7665 206c i love l 00000008: 696e 7578 2c20 6861 inux, ha 00000010: 6861 2e2e 2e0a ha.... $ xxd -c 4 -b t2.txt 00000000: 01101001 00100000 01101100 01101111 i lo 00000004: 01110110 01100101 00100000 01101100 ve l 00000008: 01101001 01101110 01110101 01111000 inux 0000000c: 00101100 00100000 01101000 01100001 , ha 00000010: 01101000 01100001 00101110 00101110 ha.. 00000014: 00101110 00001010 ..
-g参数,group,用来定义每列所包含的字节数,即多少个字节算一组:
$ xxd -c 8 -g 1 t2.txt 00000000: 69 20 6c 6f 76 65 20 6c i love l 00000008: 69 6e 75 78 2c 20 68 61 inux, ha 00000010: 68 61 2e 2e 2e 0a ha.... $ xxd -c 24 -g 4 t2.txt 00000000: 69206c6f 7665206c 696e7578 2c206861 68612e2e 2e0a i love linux, haha....
一般-g参数会跟-c参数一起配合使用。当然也可以配合-s和-l参数。
-a参数,autoskip,用来自动跳过连续的0。
-r参数,revert,反向操作,将16进制或2进制输入流,重新转换成文件:
$ xxd t2.txt | xxd -r
i love linux, haha...
用-b参数生成的2进制显示,不能配合使用-r反转。
-r参数如果与-s参数配合,可以起到在新生成的字节流前面增加多少个0的效果:
$ xxd t2.txt | xxd -r -s 8 | xxd -c 8
00000000: 0000 0000 0000 0000 ........
00000008: 6920 6c6f 7665 206c i love l
00000010: 696e 7578 2c20 6861 inux, ha
00000018: 6861 2e2e 2e0a ha....
貌似不能在后面补0。
下面的命令,可以将输入文件中任意一端截取出来,存入新的文件:
$ xxd -s 6 -l 8 t2.txt | xxd -r > tt.txt
$ cat tt.txt
linux,
其它xxd命令的参数,请自行查阅man xxd。
本文链接:https://www.maixj.net/ict/xxd-24186
©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。