xxd
是一个在Linux和UNIX系统中常用的工具,主要用于将文件或标准输入转换为hex(十六进制)和ASCII(美国信息交换标准代码)表示。该命令同时也提供了从hex dump(十六进制转储)反向到二进制的功能。
通常情况下,xxd命令默认已经包含在大多数Linux发行版中。如果操作系统中没有这个命令,可以通过以下命令进行安装:
sudo apt-get install vim-common
或者
yum install vim-common
这两个命令分别适用于基于Debian和基于Red Hat的Linux发行版。
xxd命令最常见的用法是创建一个文件的hex dump。例如,可以使用以下命令来查看文件"example.txt"的hex dump:
xxd example.txt
这会将文件的内容转化为十六进制,并显示每一行的偏移量(offset)。
xxd命令还有一个很重要的功能就是可以从hex dump恢复到二进制。只需要使用-r选项,例如:
xxd -r example.txt.hex > example.txt
其中,example.txt.hex
是由xxd
命令生成的hex dump文件,example.txt
则是恢复出的二进制文件。
示例:
root@ubuntu:/userdata/20231130_ffmpegTest/test20231210#
root@ubuntu:/userdata/20231130_ffmpegTest/test20231210# cat example.txt.hex
00000000: e5a5 bde6 97a5 e5ad 90e8 bf98 e59c a8e5
00000010: 908e e5a4 b4e5 91a2 efbc 810a
root@ubuntu:/userdata/20231130_ffmpegTest/test20231210#
root@ubuntu:/userdata/20231130_ffmpegTest/test20231210# xxd -r example.txt.hex
好日子还在后头呢!
root@ubuntu:/userdata/20231130_ffmpegTest/test20231210#
以下是xxd
命令常用的一些选项:
-p
或 --ps
:将输出结果以连续hexdump的方式显示,不会显示偏移量或原始的字符数据。-r
或 --revert
:从hex dump反向到二进制。-s <offset>
或 --seek <offset>
:从指定的偏移量开始进行操作。-l <len>
或 --len <len>
:只处理指定长度的输入数据。-c <cols>
或 --cols <cols>
:设置每行显示的列数。例如,要查看一个二进制文件中从第100个字节开始的16个字节的hex dump,可以使用如下命令:
xxd -s 100 -l 16 binaryfile
在这里,-s 100
告诉xxd
从第100个字节开始,-l 16
表示只查看16个字节。
示例:
xxd
命令通常在shell脚本中使用,作为数据处理的一部分。例如,在分析网络协议或文件格式时,可以用xxd
来转换和查看二进制数据。
这种情况下,通常会将xxd
的输出重定向到一个文件,或者通过管道传递给其他命令进行进一步处理。例如,以下命令会创建一个hex dump,并使用grep
命令查找包含"abcdef"的行:
xxd binaryfile | grep 'abcdef'
示例:
虽然xxd -r
可以从hex dump恢复到二进制,但这要求输入的格式必须是xxd
能够识别的。如果hex dump的格式与xxd
的输出格式不同,可能需要先进行转换。
例如,如果hex dump是连续的,没有偏移量或原始的字符数据,可以使用xxd -r -p
来恢复。在这里,-p
选项告诉xxd
忽略任何非hex字符。
echo '48656c6c6f' | xxd -r -p
上面的命令将输出"Hello",因为"48656c6c6f"是"Hello"在ASCII中的十六进制表示。
xxd
是一个功能强大的工具,对于处理和分析二进制数据来说非常有用。尽管它的用法看起来可能有些复杂,但只需要理解了基本的操作和选项,就能够灵活地应对各种情况。