名不见经传的od命令

查看文本文件可以使用众多 app,也可以使用命令 cat、less、more、tail、head 等。然而对于非文本文件来说,前面的方法往往力不从心。而且存在一些场景,文本文件我们看不清楚真相,譬如 \r \n 这些空白字符。我曾经就遇到过一个在mac下多行显示的文本在windows下看是一行。当然这个问题更多的是不同系统换行符的差异。我还遇到另外一个场景,就是文本文件太大,有 200+M,如果用文本工具还未打开就卡死,真的很捉急。

这里就介绍一个查看文件的利器 —— od 。

让我们先一睹其主要用法:

  • od -c hello.txt :以ascii码字符形式查看文件,某些特殊字符转义展示,主要是 \n \r 这些 c 中的转义字符;
  • od -t x1 hello.txt : 以十六进制逐字节展示;o 八进制 d 十进制 u 无符号十进制 x 十六进制, 1或是 C 单字节, 2 或是 S 双字节, 4 或是 L 四字节; 8 表示八字节,等等;
  • od -N 100 hello.txt : 查看至多 100 个字节;
  • od -j 10 hello.txt : 跳过前 10 个字节;
  • od -Ax hello.txt : 地址以十六进制表示;o 八进制 d 十进制 x 十六进制 n 不展示地址;

光说不练,假把式。

Java 编译的字节码 class 文件是二进制文件,其头四个字节是其文件的 signature —— 0xCAFEBABE 。让我们 check 一把:

[wenqiong@name.lrj java] $ od -Ax -N16 -tx1 Hello.class 
0000000    ca  fe  ba  be  00  00  00  34  00  67  0a  00  11  00  21  07
0000010

上面是以十六进制逐字节展示文件 Hello.class 的前16个字节,前四个是 ca fe ba be,bingo !关于更多的 file signature 可以参看这篇 wiki

其实 od 命令我最常用其实是: od -c hello.txt ,就是以ascii码字符展示,这样就很容易看出来特殊字符,诸如 \r \n \001 等。如果要查看的文件太大,可以加上那个 -N 参数,方便易用。

Tags: 

Article type: