在openKylin系统上进行开发或调试时,经常需要查看文件的原始二进制内容。无论是分析可执行文件的文件头、排查乱码文件的真实编码,还是检查磁盘镜像中的数据,hexdump都是最顺手的选择之一。openKylin基于Linux内核,其软件源中自带的hexdump属于util-linux工具集,安装系统后即可直接使用,无需额外配置。本文将从基础语法、常用参数、格式化输出和同类工具对比几个方面,完整介绍hexdump在openKylin下的使用方法。

hexdump基础语法与默认输出格式
hexdump的基本语法非常简单,直接在终端中输入hexdump 文件名即可查看文件的十六进制内容。它最常用的形式其实是带别名的hd命令,效果等同于hexdump -C,输出的每一行包含十六进制偏移量、十六进制字节内容和右侧的ASCII字符对照三列,这也是最符合阅读习惯的一种输出格式。
先准备一个测试文件来观察默认输出。使用echo命令生成一个包含中英文内容的文本文件:
echo "Hello openKylin 你好" > test.txt hexdump test.txt
不加任何参数时,hexdump默认以16位为一组、每组8个元素的方式显示,也就是每行显示16个字节,前8个和后8个之间用空格分隔,但右侧没有ASCII对照列,读起来不太直观。因此日常使用中,绝大多数场景都建议直接使用hexdump -C或简写hd,输出会带上ASCII列,能快速识别出可打印字符,判断文件内容的性质。
常用参数详解与组合技巧
hexdump的参数不算多,但组合起来可以覆盖绝大多数分析需求。最常用的几个参数如下:-C以十六进制加ASCII对照的方式输出,-b以八进制显示每个字节,-c以ASCII字符显示,-n指定只显示前N个字节,-s指定从偏移量N处开始显示。
查看文件头部是hexdump最典型的应用。例如分析ELF可执行文件时,只需查看前64字节的文件头,就能确认文件类型和架构信息:
hexdump -C -n 64 /bin/ls
输出开头的7f 45 4c 46就是ELF文件的魔数,其中45 4c 46对应的ASCII字符正是E、L、F。如果文件开头不是这个序列,就说明它不是标准的ELF格式。-n参数同样适合快速识别图片、压缩包等文件的真实类型,比如PNG文件开头固定为89 50 4e 47,ZIP文件开头为50 4b 03 04。当文件扩展名被篡改或丢失时,用这个方法判断文件类型比单纯看后缀名可靠得多。
-s参数用于跳过指定偏移量,配合-n可以精确截取文件的某一段区域。例如查看文件从偏移量100开始、长度为32字节的数据:
hexdump -C -s 100 -n 32 test.txt
这两个参数支持在数字后加单位后缀,比如-s 1k表示跳过1024字节,-n 512表示显示512字节。此外,hexdump还可以从标准输入读取数据,配合管道使用非常灵活。例如查看某个命令输出的原始字节:
printf "ABC" | hexdump -C
这种管道方式也常用于检查文本文件的编码细节。中文乱码问题排查时,用hexdump查看文件的真实字节序列,就能判断出文件是UTF-8编码还是GBK编码。UTF-8编码的中文每个汉字占3个字节,而GBK每个汉字占2个字节,通过字节模式一眼就能区分。
格式化字符串与同类工具对比
hexdump还支持自定义格式化字符串,通过-e参数完全控制输出格式。格式化字符串由单引号包裹,内部包含格式字符串和计数,例如以每行16个字节、纯十六进制无偏移量的方式输出:
hexdump -e '16/1 "%02x " "\n"' test.txt
这条命令中,16/1表示重复16次、每次取1个字节,%02x以两位十六进制小写字母显示,最后的\n表示每行结束换行。格式化字符串支持%d、%o、%x、%c等多种格式,还可以指定字节序,例如%04x读取双字节时默认是大端序,加上格式修饰可以按小端序解释。这种进阶用法在分析网络协议、解析特定二进制结构时特别有用,能够按目标格式的字段宽度直接解读数据。
在openKylin源中,还有几个功能类似的工具可以配合使用。xxd的功能与hexdump -C类似,但它的-r参数支持反向操作,可以把十六进制内容还原成二进制文件,做二进制补丁时非常方便。od是更古老的工具,支持八进制、十进制、浮点数等多种输出格式,在解析数值型数据时比hexdump更灵活。选择建议是:日常查看文件用hd最顺手,需要还原二进制用xxd,需要特殊进制解释数据时用od。
最后需要提醒一点,hexdump查看大文件时务必加-n限制输出量,否则终端会被海量数据刷屏,甚至导致图形终端卡顿。配合less分页也是一个好习惯,例如hexdump -C bigfile.bin | less可以自由翻页浏览,按q退出。掌握这些技巧后,在openKylin上分析二进制数据就会得心应手。