提到od,很多人首先会想到华为od岗,但在linux系统中,od是一个完全独立、实用性极强的硬核原生命令,是运维、后端开发排查底层数据的必备工具。
多数新手对它十分陌生,可资深技术从业者却高频使用。今天咱聚焦linux od命令(Octal Dump,八进制转储),全方位讲解其用法与实战场景。
简单来说,它是linux系统中查看二进制文件、解析隐藏字符、校验文件字节、排查数据异常的核心工具。对比cat、more等常用工具,od系统兼容性更强、参数更灵活,专门解决普通文本工具无法处理的底层数据问题,是冷门但实用的排查利器。
一、od的核心作用
咱日常使用cat、vim仅能查看可打印文本字符,对于换行符、空字节、制表符等隐藏字符,以及二进制乱码、原始协议数据,均无法正常识别,还可能出现终端乱屏、解析异常问题。
而od命令的核心能力,就是将文本、二进制文件的原始字节数据,以八进制、十六进制、ASCII等格式可视化展示。
适用场景分为4类:
1.查看文件隐藏不可见字符(换行、空格、空字节、制表符)
2.解析二进制文件、日志缓存、数据包原始字节
3.精准校验文件字节、比对文件差异、排查数据写入异常
4.截取指定字节范围数据,精准调试程序数据
可以理解为普通文本工具读不懂、肉眼无法识别的原始数据,可以用od解析排查。
1. 基础语法
od [选项] 文件名默认不加参数:以八进制格式展示文件字节数据,附带偏移地址。
2、od核心参数
-c:ASCII字符格式展示,清晰查看换行、空格、隐藏字符(最常用)
-x:十六进制格式展示,适配二进制文件、协议数据调试
-o:八进制格式(默认格式,可手动指定)
-N 字节数:只展示文件前N个字节,精准截取数据
-j 字节数:跳过前N个字节,从指定位置开始解析
-A d/x/o/n:设置偏移地址格式:d十进制、x十六进制、o八进制、n不显示地址
三、常用实战场景
场景1:查看文件隐藏字符
脚本报错、配置文件解析异常,很多时候并非代码问题,而是文件存在隐藏换行符、空字符,这类问题用cat完全无法发现。这也是od使用比较多的场景。
创建测试文件:
echo "hello linux" > test.txt#普通cat查看(看似正常)cat test.txt#od解析查看od -c test.txt

cat ceshi.shod -x -c ceshi.sh

输出能看到\r隐藏回车符,在脚本调试的时候比较有用。
场景2:十六进制查看二进制文件
对于程序编译后的二进制文件、图片、缓存文件,文本工具完全无法读取,od可完美解析原始字节:
od -x test.txt
tcp -i ens33 -w ceshi.pcapod -x ceshi.pcap#可以用来核对协议头、端口、数据载荷原始十六进制值

命令常用于网络数据包调试、二进制配置文件校验、固件文件解析等底层场景。
场景3:截取文件前N个字节,高效排查大文件(文件比对,防篡改查看)
排查超大文件时无需加载全部内容,通过-N参数限定读取字节数,大幅提升排查效率:
#只查看前10个字节od -c -N 10 test.txt

截取前 10 个字符:h e l l o 空格 l i n u末尾偏移0000012为八进制计数,对应十进制 10 字节。一般用在仅校验文件头部的协议表示等字段时使用。
#也可以用来校验文件,如备份文件#仅对比头部20字节od -t x1 -N 20 file1od -t x1 -N 20 file2

在生产环境中校验上传包、备份文件是否损坏篡改。
mv log.tar.gz log.jpgod -c -A n -N 8 log.jpgfile log.jpg

开头037 213是gzip 压缩文件魔数标识,并非标准 JPG 图片头,说明文件后缀被篡改,实际是压缩包。
八进制037 = 十进制31 = 十六进制0x1f
八进制213 = 十进制139 = 十六进制0x8b
0x1F 0x8B 是 gzip 压缩文件固定魔数头,jpg的标准头是0xFF 0xD8。
场景4:跳过头部字节,解析指定数据区间
解析文件尾部数据、跳过文件固定协议头部时,可通过 -j 参数跳过指定字节,精准定位目标内容:
#跳过前5个字节,解析后续内容od -c -j 5 test.txt

场景5:隐藏偏移地址,查看纯净数据
od默认展示左侧字节偏移地址,仅需查看数据时可关闭地址显示,让输出界面更简洁:
od -c -A n -N 12 test.txt#-A n:不显示左边的地址偏移#-N 12:只读取前 12 个字节

只展示内容。
场景6:自定义偏移地址格式
进行数据比对、字节精准定位调试时,可自定义偏移地址格式,适配不同开发调试需求:
#十进制偏移地址od -c -Ad test.txt#十六进制偏移地址od -c -Ax test.txt

四、od vs hexdump 主要区别
很多人混淆od与hexdump,这里清晰区分两者适用场景,避免误用:
•hexdump:主打十六进制展示,格式固定、上手简单,但参数灵活性不足,仅适用于简单查看场景
•od:linux全系系统原生自带、兼容性无短板,支持多格式数据展示,可灵活实现字节截取、跳过、地址自定义,功能性更强
结论:简单查看用hexdump,精准调试、跨系统兼容、排查疑难底层数据问题,优先使用od。
五、注意事项
1、慎用默认八进制输出:日常排查优先用-c字符模式、-x十六进制模式,默认格式易看错数据
2、大文件禁止直接od:超大文件直接执行od会刷屏、占用资源,必须搭配-N限定读取字节数
3、区分换行符差异:windows文件换行符\r\n、Linux\n,用od可精准识别,解决跨系统文件解析报错
4、概念勿混淆:linux od是技术命令,和职场OD岗位无任何关联,工作沟通、面试需注意区分。
六、总结
od不属于日常高频命令,但却是底层调试、疑难数据排查的刚需工具。
当cat、vim等普通日志、文本工具失效,面对隐藏字符、二进制乱码、数据解析异常等问题时,od是高效可靠的兜底排查方案。
如果觉得文本对你的运维工作有帮助,记得点赞加收藏,快速掌握linux od核心用法,搞定底层数据排查,助力运维、开发能力进阶!
#运维 #linux运维 #二进制解析 #od
别再死磕crontab!Linux at命令5个实战技巧,一次性定时任务真香