首页 > Sysadmin > 正文

Linux 查看二进制文件的四种方法

huyuanwen 2026-11-04 Sysadmin

二进制文件不能直接 cat,先用 file 判断类型,再选 od、hexdump 或 strings 查看。

TL;DR:日常先跑 file 确认类型,看字节布局用 hexdump -C,通用转储用 od -A x -t x1z,只想要可读字符串用 strings。

1. 先确认类型:file

file /bin/ls

file 通过文件系统、魔术字节和语言测试三步判定类型 [1]。参数无时直接输出类型;-i 输出 MIME 类型与编码,适合脚本分支处理。预期结果类似 /bin/ls: ELF 64-bit LSB pie executable, x86-64, ...。若文件是文本,file 会标为 text,此时不必再用十六进制工具,直接 cat 或 less 即可。

2. 十六进制查看:hexdump -C

hexdump -C /bin/ls | head

hexdump -C 以十六进制加 ASCII 对照输出 [2]。-C 是 canonical 十六进制+ASCII 显示;-n 64 只看前 64 字节,-s 0x100 从偏移 0x100 开始。预期结果每行 16 字节的 hex 与右侧 ASCII。对大文件务必配合 head 或 -n,避免终端刷屏。

3. 通用转储:od

od -A x -t x1z /bin/ls | head

od 默认按八进制输出,-A x 把地址改为十六进制,-t x1z 按单字节十六进制并附 ASCII [3]。与 hexdump 相比,od 在 POSIX 环境普遍可用,脚本里更稳妥。-j 16 跳过前 16 字节,-N 32 只读 32 字节。预期结果地址列 + 字节 + 右侧可读字符。

4. 提取字符串:strings 与 xxd

strings -n 8 /bin/ls | head

strings 打印长度不少于阈值的可打印字符序列 [4]。默认阈值 4,-n 8 提高阈值减少噪声;-t x 在每行前输出偏移。适合快速看二进制里的路径、版本号、错误信息,不必完整转储。

xxd -l 64 /bin/ls

xxd 同样给出十六进制+ASCII 对照 [5],-l 64 限制长度,-s 0x100 指定起始偏移,-r 可把十六进制文本还原为二进制。在 Vim 环境中 xxd 与编辑器配合方便,但脚本自动化场景优先 od/hexdump。

5. 大文件、权限与回滚

对超大文件,所有工具都会输出海量内容,务必用 -n/-N/-l 限制,或管道给 head/less。查看操作只读,不会修改原文件,因此没有回滚需求;但若用 xxd -r 生成新文件,务必先确认输出路径,避免覆盖源文件。权限不足时工具会报 Permission denied,加 sudo 或切换用户即可。对设备文件、FIFO、socket 的读取行为由内核决定,未必得到稳定输出。

6. 排错速查、局限性与 FAQ

现象 原因 处理
输出全是八进制 od 默认格式 加 -t x1 或 -A x
终端乱码/刷屏 文件过大未限制 用 -n/-N/-l 或管道 head
Permission denied 无读权限 chmod +r 或 sudo
strings 结果为空 阈值过高或文件无长字符串 降低 -n 值

局限性:本篇只覆盖 x86-64 Linux 上的 ELF 与通用二进制;macOS/BSD 的 od/hexdump 选项略有差异;对压缩、加密文件,这些工具只能看到封装层,内部内容需先解压/解密。

实测记录:WSL2 Ubuntu-24.04,file 5.45、coreutils od 9.4、util-linux hexdump 2.39.3、binutils strings 2.42、vim xxd 2023-10-25;以上命令均为 wsl-pass;RPM 平台未实测。

Q:二进制文件能直接 cat 吗? A:不建议。终端可能被控制字符干扰,甚至触发异常;先用 file 判断。

Q:hexdump 和 od 选哪个? A:交互查看偏好 hexdump -C 的 ASCII 对照;脚本与可移植性偏好 od。

Q:如何只看文件头? A:hexdump -C -n 64 file 或 od -A x -t x1z -N 64 file。

Q:strings 能还原源码吗? A:不能,只能提取可打印片段;符号表与调试信息需 readelf/objdump。

Q:查看大文件会卡吗? A:会,务必限制字节数或用 less 分页。

草稿待审 — 未实测:RPM 平台、macOS/BSD 选项差异、压缩/加密文件内部内容。


参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测,个别条目(未装工具/安装类命令)仅核对官方文档,未实际执行。