Linux二进制文件查看:xxd与hexdump实用指南
2026/7/26 20:45:15 网站建设 项目流程

1. 先搞清楚什么时候需要看二进制文件

在 Linux 环境下处理文件时,大部分时候我们都在和文本文件打交道,用 cat、less、vim 这些工具就能直接查看内容。但遇到二进制文件——比如编译后的程序、图片、音频、视频、数据库文件,或者某些特殊格式的文档——直接用文本编辑器打开就会看到一堆乱码。这时候就需要专门的二进制查看工具。

xxd 和 hexdump 就是两个最常用的命令行工具,它们能把文件的二进制内容按十六进制、ASCII 等形式展示出来,让你能看到文件底层的真实数据。这类工具不是日常高频命令,但关键时刻能帮你判断文件是否完整、排查格式问题、分析文件头,甚至做简单的数据恢复。

很多人第一次接触二进制查看是因为遇到了“文件损坏”的报错,或者想确认下载的文件是否被篡改。也有开发者在调试时需要查看内存 dump 或网络包原始数据。如果你有这些需求,那么掌握 xxd 和 hexdump 的基本用法会很有帮助。

2. xxd 和 hexdump 到底有什么区别

虽然都能查看二进制,但 xxd 和 hexdump 在设计初衷和输出风格上有些差异。

xxd 默认输出比较简洁,左边是地址偏移量,中间是十六进制数据,右边是对应的 ASCII 字符(不可打印字符显示为点号)。它还有一个很方便的功能:能把十六进制输出反向转换回二进制文件。这个特性在手动修改某些二进制数据时特别有用。

hexdump 的输出格式更灵活,支持多种显示格式(十六进制、八进制、十进制等),可以通过格式字符串自定义显示方式。它更适合需要按特定格式解析二进制数据的场景,比如分析协议包或特定文件结构。

从可用性来说,xxd 通常是 vim 软件包的一部分,大多数 Linux 发行版默认安装;hexdump 属于 util-linux 包,也广泛预装。如果系统里两个命令都有,我建议先掌握 xxd,因为它的默认输出对新手更友好,基本功能也覆盖了大部分日常需求。

3. 从最简单的文件查看开始

先准备一个测试文件。创建一个包含简单文本的文件:

echo "Hello Binary World" > test.txt

然后用 xxd 查看:

xxd test.txt

你会看到类似这样的输出:

00000000: 4865 6c6c 6f20 4269 6e61 7279 2057 6f72 Hello Binary Wor 00000010: 6c64 0a ld.

我来解释一下这个输出的结构:

  • 00000000:是偏移地址,表示这行数据在文件中的起始位置(十六进制)
  • 4865 6c6c 6f20是文件的十六进制内容,每两个十六进制数表示一个字节
  • Hello Binary Wor是右侧的 ASCII 表示,不可打印字符会显示为点号

注意最后一行显示6c64 0a,对应的 ASCII 是 "ld.",其实是因为换行符0a是不可打印字符,所以显示为点号。这就是二进制查看工具的价值——能看到文本工具隐藏的细节。

用 hexdump 查看同一个文件:

hexdump test.txt

默认输出略有不同:

0000000 6548 6c6c 206f 6942 616e 7972 5720 726f 0000010 6c64 000a 0000013

hexdump 默认按双字节(16位)分组显示,而且字节顺序是反的(小端序),所以 "Hello" 的 "He" 显示为6548而不是4865。这种显示方式在某些特定场景下有用,但日常查看可能不如 xxd 直观。

4. 调整显示格式适应不同需求

4.1 xxd 的常用参数

限制显示长度:如果文件很大,只想看前几行:

xxd -l 256 test.txt # 只显示前256字节

调整每行显示的字节数:默认每行16字节,可以改为其他值:

xxd -c 8 test.txt # 每行显示8字节

只显示十六进制部分:不需要ASCII显示时:

xxd -p test.txt # 连续显示,不分行

从指定偏移开始:跳过文件开头部分:

xxd -s 10 test.txt # 从第10字节开始显示

4.2 hexdump 的格式控制

hexdump 的强大之处在于格式控制,但语法相对复杂。先看几个实用例子:

像 xxd 一样显示

hexdump -C test.txt

-C参数是最常用的,它显示标准格式:左边偏移量,中间十六进制,右边ASCII。

自定义显示格式:比如想用十进制显示:

echo -e "\x01\x02\x03" | hexdump -d

只查看文件头:分析文件格式时经常需要:

hexdump -C image.jpg | head -20 # 查看JPEG文件头

5. 实际应用场景和技巧

5.1 判断文件类型

Linux 的file命令其实也是通过读取文件头信息来判断类型的。我们可以手动验证:

# 创建一个PNG图片的测试文件(包含PNG文件头) echo -ne '\x89PNG\r\n\x1a\n' > test.png xxd test.png | head -2

你会看到标准的 PNG 文件头:89 50 4e 47 0d 0a 1a 0a

5.2 检查文件是否损坏

下载大文件后,可以用二进制查看工具检查文件头和尾是否完整:

# 检查文件头 xxd huge_file.zip | head -5 # 检查文件尾 xxd huge_file.zip | tail -5

对于 ZIP 文件,文件尾应该有明确的结束标记。如果文件尾异常,可能意味着下载不完整。

5.3 分析文本文件编码

遇到乱码文本时,用 xxd 查看能发现编码问题:

echo "中文" | iconv -f UTF-8 -t GBK > gbk.txt xxd gbk.txt

可以看到 GBK 编码的中文与 UTF-8 的字节序列完全不同。

5.4 手动修改二进制数据

xxd 的逆向功能很实用:

# 先导出为十六进制文本 xxd original.bin > hex.txt # 用文本编辑器修改hex.txt vim hex.txt # 转换回二进制 xxd -r hex.txt > modified.bin

这种方法适合小范围修改,比如修改文件中的某个标志位或字符串。

6. 处理大文件的正确姿势

二进制文件往往很大,直接xxd huge_file.bin可能会卡住终端。有几种更安全的方式:

只查看关键部分

# 查看文件头1KB xxd -l 1024 huge_file.bin # 查看特定偏移附近的内容 xxd -s 0x1000 -l 512 huge_file.bin # 从0x1000偏移看512字节

结合 less 浏览

xxd huge_file.bin | less

这样可以上下滚动查看,不会一次性输出全部内容。

搜索特定模式

xxd huge_file.bin | grep "4d 54" # 搜索十六进制模式 xxd huge_file.bin | grep "MT" # 搜索ASCII文本

7. 常见问题排查

7.1 命令找不到

如果xxd找不到,通常需要安装 vim:

# Ubuntu/Debian sudo apt install vim-common # CentOS/RHEL sudo yum install vim-common

hexdump找不到时:

# Ubuntu/Debian sudo apt install bsdmainutils # CentOS/RHEL sudo yum install util-linux-ng

7.2 权限问题

查看系统文件或他人文件时可能权限不足:

sudo xxd /etc/shadow | head -10 # 需要root权限

7.3 二进制显示与预期不符

特别是 hexdump 的字节序问题需要注意。如果发现十六进制显示的顺序奇怪,先确认是不是小端序显示。对于网络协议或文件格式分析,通常需要大端序显示,可以用-C参数避免混淆。

7.4 特殊字符处理

二进制文件中经常包含控制字符(如00字节)。xxd 会将这些显示为点号,这是正常现象。如果确实需要查看所有字符的十六进制值,可以用-p参数获得纯十六进制输出。

8. 进阶用法和替代工具

8.1 结合其他工具进行分析

二进制查看经常需要和其他工具配合:

# 查看进程内存 cat /proc/1234/mem | xxd | head -20 # 分析网络包(需要root) tcpdump -i eth0 -w packet.pcap xxd packet.pcap | head -30

8.2 od 命令

除了 xxd 和 hexdump,还有一个更古老的 od(octal dump)命令:

od -x test.txt # 十六进制显示 od -c test.txt # 字符显示

od 的显示格式比较独特,在某些系统脚本中还在使用。

8.3 图形化工具

对于复杂的二进制分析,图形化工具可能更高效:

  • bless:Linux 下的十六进制编辑器
  • ghex:GNOME 环境的十六进制编辑器
  • hexedit:终端下的简单十六进制编辑器

但对于快速查看和简单分析,命令行工具仍然是最方便的选择。

9. 实际工作中的应用经验

从我多年的使用经验来看,二进制查看工具最重要的不是记住所有参数,而是知道在什么场景下该用什么方式查看。

排查文件问题时:先看文件头确认文件类型和完整性,再看文件尾检查是否完整,最后根据需要查看中间特定位置。

分析数据格式时:结合文档说明,查看特定偏移的数据结构。比如分析图片EXIF信息时,需要先找到EXIF标记,然后按结构逐字段查看。

调试程序时:如果程序输出二进制数据,可以重定向到文件后用 xxd 查看,比直接看乱码容易分析得多。

安全分析时:检查可疑文件的魔数签名,分析恶意软件的文件结构,或者验证数字签名区域的原始数据。

我个人的习惯是:日常快速查看用xxd -l 长度 文件名,需要详细分析时用hexdump -C 文件名 | less,需要修改二进制数据时才用 xxd 的导出编辑再导入流程。

最重要的是,不要一遇到二进制文件就盲目用这些工具从头看到尾。先明确你要解决什么问题,然后有针对性地查看相关部分。大文件直接全量查看既浪费时间又可能卡住终端。先小范围取样,确认找到目标数据后再扩大查看范围,这是最稳妥的工作流程。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询