バイナリファイルを16進数などでダンプするコマンド。ファイル名を指定するとファイルを読み込み、そうでない場合は標準入力を読み込み、標準出力にダンプする。
例
od -avtx1 -Ad ファイル名
または
cat ファイル名 | od -avtx1 -Ad
各行の左にはアドレス(ファイルの先頭からのバイト単位でのオフセット値)が表示される。アドレスはデフォルトでは8進数表記である。
Coreutilsというパッケージに入っているので、CentOSにもUbuntuにも始めから入っている。
-Ad
-Ax
-An
-w8
w
のあとの数字を変えれば任意のバイト単位でできる。デフォルトは16バイト単位かな。-x
-h
-x
と同じ。-tx1
-tx2
x
のあとの数字を変えれば任意のバイト単位でできる-tu1
-tu2
u
のあとの数字を変えれば任意のバイト単位でできる-c
-tc
と同じ-tc
-c
と同じ-a
sp
などと。-ta
と同じ-ta
sp
などと。-a
と同じ-v
*
だけが表示されて中身が省略されてしまう。このオプションを付けると、その制御が無効になる。--help
--version
--
というパラメータを渡すとそれ以降のパラメータをオプションではなくファイル名とみなしてくれるので、-
で始まるファイル名を扱いたい場合に使うとよい。
$ cat hello.txtHello, world!$ od -x hello.txt0000000 6548 6c6c 2c6f 7720 726f 646c 0a210000016## 2バイトずつ16進数で表示される$ od hello.txt0000000 062510 066154 026157 073440 071157 062154 0050410000016## 8進数で表示。16進数の6548は、8進数の62510$ od -c hello.txt0000000 H e l l o , w o r l d ! \n0000016$ od -tx1 -a hello.txt0000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a H e l l o , sp w o r l d ! nl0000016## 出力フォーマットを2つ指定すると、2行でそれぞれ表示される
1行が15バイトのテキストで同じ行が続く場合の例
$ cat hello3.txtHello, world!!!Hello, world!!!$ od -x hello3.txt0000000 6548 6c6c 2c6f 7720 726f 646c 2121 0a21*0000040$ od -xv hello3.txt0000000 6548 6c6c 2c6f 7720 726f 646c 2121 0a210000020 6548 6c6c 2c6f 7720 726f 646c 2121 0a210000040
改行含め同じ16バイトが2回繰り返すことになるので、デフォルトでは2行目が*
という表示になってしまう。-v
を付けることで、繰り返しの場合もちゃんと表示させることができる。
左のアドレス表記を10進数にする例 (-Ad
)
$ od -vtx1 -Ad -a hello3.txt0000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 21 21 0a H e l l o , sp w o r l d ! ! ! nl0000016 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 21 21 0a H e l l o , sp w o r l d ! ! ! nl0000032