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 0000013hexdump 默认按双字节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 0a5.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-commonhexdump找不到时# Ubuntu/Debian sudo apt install bsdmainutils # CentOS/RHEL sudo yum install util-linux-ng7.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 -308.2 od 命令除了 xxd 和 hexdump还有一个更古老的 odoctal dump命令od -x test.txt # 十六进制显示 od -c test.txt # 字符显示od 的显示格式比较独特在某些系统脚本中还在使用。8.3 图形化工具对于复杂的二进制分析图形化工具可能更高效blessLinux 下的十六进制编辑器ghexGNOME 环境的十六进制编辑器hexedit终端下的简单十六进制编辑器但对于快速查看和简单分析命令行工具仍然是最方便的选择。9. 实际工作中的应用经验从我多年的使用经验来看二进制查看工具最重要的不是记住所有参数而是知道在什么场景下该用什么方式查看。排查文件问题时先看文件头确认文件类型和完整性再看文件尾检查是否完整最后根据需要查看中间特定位置。分析数据格式时结合文档说明查看特定偏移的数据结构。比如分析图片EXIF信息时需要先找到EXIF标记然后按结构逐字段查看。调试程序时如果程序输出二进制数据可以重定向到文件后用 xxd 查看比直接看乱码容易分析得多。安全分析时检查可疑文件的魔数签名分析恶意软件的文件结构或者验证数字签名区域的原始数据。我个人的习惯是日常快速查看用xxd -l 长度 文件名需要详细分析时用hexdump -C 文件名 | less需要修改二进制数据时才用 xxd 的导出编辑再导入流程。最重要的是不要一遇到二进制文件就盲目用这些工具从头看到尾。先明确你要解决什么问题然后有针对性地查看相关部分。大文件直接全量查看既浪费时间又可能卡住终端。先小范围取样确认找到目标数据后再扩大查看范围这是最稳妥的工作流程。