xxd 命令学习笔记 / xxd - make a hexdump or do the reverse.

in #xxd6 years ago

今天工作的时候遇到一个命令:xxd,说来惭愧,虽然曾在Linux系统下工作了好多年,但是这个命令我却真的是第一次看到。为了搞明白这个命令,我对着man手册做了一些测试,我将学到的东西记录到这里,一则方便自己以后查找,二则希望给和我一样第一次遇到这个命令一头雾水的朋友一些参考。


(图源 :pixabay)

xxd的使用

对于给定的文件或者标准输入,以十六进制显示其内容,或者反过来转换

为了演示xxd的使用,我创建了一个简单的文本文件hello.txt:
Hello World, I am oflyhigh!
xxd - make a hexdump or do the reverse.

不带参数的xxd命令

xxd hello.txt

通过对比输出内容,我们的出结论:
不带参数的xxd命令,以16进制形式输出文件内容,前边是地址,数据2个字节一组,每行显示8组,后边显示对应的文本内容。

-g 分组参数

通过分组参数,我们可以指定多少个字节为一组,默认为2。
xxd -g 1 hello.txt

-c 列参数

通过 -c 参数,我们可以指定每列显示几个字节
xxd -g 1 -c 8 hello.txt

-b 二进制形式显示

通过 -b 参数,我们可以指定以二进制形式显示内容
xxd -b -g 1 -c 6 hello.txt

-i 参数,生成C语言格式的数组

通过-i 参数,我们生成C语言格式的数组,同时可以通过-c参数控制格式
xxd -i -c 10 hello.txt

-l 参数,指定长度

通过-l 参数,我们指定要处理的内容长度(字节数)
xxd -l 24 -g 1 -c 12 hello.txt

-p 参数,纯HEX转储

通过-p 参数,我们输出内容的纯HEX显示
xxd -p -l 24 -c 12 hello.txt

-s [+][-]seek 搜索功能

我们通过-s [+][-]seek来实现从文件首尾指定开始长度的功能
xxd -g 1 hello.txt

xxd -s 0x10 -g 1 hello.txt

-r 参数

通过 -r 参数,可以将类似这样输出,转出成普通文件

比如我们将上述例子中的输出存储到文件
xxd -s 0x10 -g 1 hello.txt > example.txt

打开这个文件,可以发现文件中包含如下文本:

0000010: 6d 20 6f 66 6c 79 68 69 67 68 21 0a 78 78 64 20  m oflyhigh!.xxd
0000020: 2d 20 6d 61 6b 65 20 61 20 68 65 78 64 75 6d 70  - make a hexdump
0000030: 20 6f 72 20 64 6f 20 74 68 65 20 72 65 76 65 72   or do the rever
0000040: 73 65 2e 0a                                      se..

xxd -r example.txt

是不是非常神奇?

用途

通过上述介绍,我们应该想到xxd有很多用途啦。

不过一个重要的用途就是十六进制编辑,比如上述介绍的最后一条,我们可以编辑生成的十六进制的文本文件,再通过xxd -r保存成文件,这样就达到了十六进制编辑的目的。

地址编辑,我们还可以通过编辑上述文件中的地址,达到在指定地址写入指定内容的目的。

文件截取,在学习-r参数时,我组合出下列一条指令,猜猜它干什么用的?
xxd -s 0x10 -g 1 hello.txt | xxd -r -seek -0x10 >1.txt

更多内容

想了解关于xxd的更多内容,请输入man xxd

Sort:  

感谢分享,让我想起了很久之前我自己写的 xxd 简易版本,给 windows 用的。
https://github.com/DoctorLai/xxd/blob/master/main.cpp

This is amazing!You all seem to be great individuals.Love seeing this kind of stuff.I'm looking forward to attending some Steemit meetups as well.

This got me pumped about working harder on my own Steemit profile :)
Thanks for sharing @oflyhigh

Now , Im reading english comment but firstly , can you speak english ? :) @oflyhigh

Love seeing this kind of staff

nice ,, but a little confused in this sir.

hahaha i don't undestand it can you explain it in human language?? :D

haha programmer language?

额。。。第一次见这个命令。。。。

Over all good but what was that , Is it china language ???
Upvoted , comt done @oflyhigh

this is amazing , wow nice effort nice article photography also , super super super super work,, it is great work and idea of theme

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.028
BTC 62134.65
ETH 3418.09
USDT 1.00
SBD 2.51