当前位置: 首页 > Linux

每天一条Linux命令(二):od_0

时间:2023-04-07 00:07:36 Linux

功能介绍od(OctalDump)命令用于以八进制、十进制、十六进制、浮点数格式或ASCII编码字符显示指定文件的内容,通常用于显示或查看文件中不能直接在终端上显示的字符。od命令系统默认的显示方式是八进制。常见的文件有文本文件和二进制文件。od命令主要用于查看二进制文件中存储的值,将文件中的数据按照指定的格式进行解释输出,无论是IEEE754格式的浮点数还是ASCII码,od命令都可以根据要求输出它们的值。也可以学习一下hexdump命令,十六进制输出,但是感觉hexdump命令没有od命令强大。命令格式od[OPTION]...[FILE]...选项说明-ARADIX--address-radix=RADIX#选择用哪个基数来表示地址偏移-jBYTES--skip-bytes=BYTES#Skip指定字节数-NBYTES--read-bytes=BYTES#输出指定字节数-S[BYTES]--strings[=BYTES]#输出长度不小于指定字节数的字符串,BYTES默认为3-v--output-duplicates#输出时不省略重复数据-w[BYTES]--width[=BYTES]#设置每行显示的字节数,BYTES默认为32字节-tTYPE--format=TYPE#指定输出格式,格式包括a、c、d、f、o、u、x,含义如下:a:命名字符;例如,换行符显示为nlc:可打印字符或反斜杠转义字符;例如换行符显示为nd[SIZE]:SIZE字节组成一个带符号的十进制整数。SIZE默认为sizeof(int)f[SIZE]:SIZE字节组成一个浮点数。SIZE默认为sizeof(double)o[SIZE]:SIZE字节组成一个八进制整数。SIZE默认为sizeof(int)u[SIZE]:SIZE字节组成一个无符号十进制整数。SIZE默认为sizeof(int)x[SIZE]:SIZE字节组成一个十六进制整数。SIZE默认为sizeof(int)SIZE可以是数字或大写字母。如果TYPE是[doux]之一,那么SIZE可以是C=sizeof(char),S=sizeof(short),I=sizeof(int),L=sizeof(long)。如果TYPE是f,那么SIZE可以是F=sizeof(float),D=sizeof(double),L=sizeof(longdouble)--help#在线帮助--version#显示版本信息常见例子1.先设置The列偏移地址以十进制显示。od-Adtestfile#Offset地址显示基数:d表示十进制,o表示八进制,x表示十六进制或n表示无。2.od不显示首列偏移地址。od-Antestfile3.十六进制输出,默认以四个字节为一组(一列)显示。od-txtestfile4.以十六进制输出,每列一个字节。od-tx1testfile5.显示ASCII字符和ASCII字符名称,注意换行符显示方式的区别。#显示ASCII字符[b3335@localhost]$echolvlv|od-a0000000lvlvnl0000005#显示ASCII字符名称[b3335@localhost]$echolvlv|od-tc0000000lvlvn00000hexadecimal05同时显示原始字符。[b3335@localhost]$echolvlv|od-tcx10000000lvlvn6c766c760a00000057.指定每行显示512个字节。od-w512-tx1testfile8.od命令输出时,去掉列之间的空格。当我们需要将文件内容显示为十六进制时,需要输出连续的单个字节,每个字节都以十六进制显示。这时候我们可以使用od命令将文件分组为一个字节,在同一行输出十六进制,去掉每个字节之间的空格。目前不知道如何通过指定od命令的相关选项来去掉列之间的空格。也许od命令本身不支持它。我的做法是:(a)用-An不输出偏移地址;(b)使用-v输出不省略重复数据;(c)使用-tx1以十六进制输出为单个字节,-w1每列输出一个字节;(d)最后通过管道传给awk的标准输入,通过awk输出所有行,不换行,拼接成一行输出。具体命令如下:od-An-w1-tx1testfile|awk'{for(i=1;i<=NF;++i){printf"%s",$i}}'来源:https://dablelv.blog.csdn.net...