linux xxd命令(将文件或标准输入转换为hex(十六进制)和ASCII(美国信息交换标准代码)表示,或者从hex dump(十六进制转储)反向到二进制)

2023-12-18 22:57:05

Linux xxd命令

xxd是一个在Linux和UNIX系统中常用的工具,主要用于将文件或标准输入转换为hex(十六进制)和ASCII(美国信息交换标准代码)表示。该命令同时也提供了从hex dump(十六进制转储)反向到二进制的功能。

安装xxd

通常情况下,xxd命令默认已经包含在大多数Linux发行版中。如果操作系统中没有这个命令,可以通过以下命令进行安装:

sudo apt-get install vim-common

或者

yum install vim-common

这两个命令分别适用于基于Debian和基于Red Hat的Linux发行版。

基本使用方法

创建hex dump

xxd命令最常见的用法是创建一个文件的hex dump。例如,可以使用以下命令来查看文件"example.txt"的hex dump:

xxd example.txt

这会将文件的内容转化为十六进制,并显示每一行的偏移量(offset)。

在这里插入图片描述

从hex dump恢复到二进制

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

xxd命令通常在shell脚本中使用,作为数据处理的一部分。例如,在分析网络协议或文件格式时,可以用xxd来转换和查看二进制数据。

这种情况下,通常会将xxd的输出重定向到一个文件,或者通过管道传递给其他命令进行进一步处理。例如,以下命令会创建一个hex dump,并使用grep命令查找包含"abcdef"的行:

xxd binaryfile | grep 'abcdef'

示例:

在这里插入图片描述

从hex dump恢复数据

虽然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是一个功能强大的工具,对于处理和分析二进制数据来说非常有用。尽管它的用法看起来可能有些复杂,但只需要理解了基本的操作和选项,就能够灵活地应对各种情况。

文章来源:https://blog.csdn.net/Dontla/article/details/135052373
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。