Linuxのodコマンドは、ファイルの内を8進数で表示(ダンプ)するコマンドです。 こんな感じの結果が返ってきます。
# ファイルの内容 $ cat test.txt abcdefg hijklmnop # odの実行結果 $ od test.txt 0000000 061141 062143 063145 005147 064550 065552 066554 067556 0000020 005160 0000022
odコマンドの1列目はオフセットと呼ばれるらしいのですが、何だかよくわからないので調べました。
オフセットとは
いろいろ調べた結果、Yahoo!知恵袋のわかりやすい回答にたどり着きました。
オフセットというのはファイルの頭からの距離で先頭ブロックに表示されています。
~中略~
odはデフォルトで1行に16バイト表示します
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10218784505 より
改めてodの実行結果を見ると、2行目のオフセットは、20になっていることがわかります。 8進数で20なので、確かに先頭から16バイト離れていることが確認できます。
# odの実行結果 $ od test.txt 0000000 061141 062143 063145 005147 064550 065552 066554 067556 0000020 005160 0000022
オフセットの基数を変更してみる
デフォルトでは8進数でオフセットが表現されるのですが、10進数や16進数への変更も可能です。
# 10進数でオフセットを表示する $ od -Ad test.txt 0000000 061141 062143 063145 005147 064550 065552 066554 067556 0000016 005160 0000018
# 16進数でオフセットを表示する $ od -Ax test.txt 000000 061141 062143 063145 005147 064550 065552 066554 067556 000010 005160 000012
ファイルの中身も進数を変更できる
odはファイルの中身を8進数で表示するコマンドですが、10進数や16進数で表現することもできます。
# オフセットもファイルの中身も10進数で表示する $ od -d -Ad test.txt 0000000 25185 25699 26213 2663 26984 27498 28012 28526 0000016 2672 0000018
# オフセットもファイルの中身も16進数で表示する $ od -x -Ax test.txt 000000 6261 6463 6665 0a67 6968 6b6a 6d6c 6f6e 000010 0a70 000012
さいごに
odコマンドについて理解したは良いものの、実際にこのコマンドを使いたくなるケースは、あまり思い浮かびません。 私が思いつく限りでは、以下の用途で使うのだろうと推測しています。
- バイナリファイルもダンプできるため、バイナリファイルの中身を解析するケースで利用する
- 単なるファイル内容の出力(catなど)では見分けがつかない、制御文字や隠し文字を発見したいケースで使う
補足事項
実際の用途を調べてみたのですが、以下のケースで役立つことがわかりました。
[Linux] バイナリファイルを表示する - od
- 差分を調べる
- 画像形式を見分ける
- UnicodeのBOMを発見する
- 改行コードを確認する https://blog.katsubemakito.net/linux/view-binary より
『ねこの足跡R』さまの解説記事、かなり具体的でわかりやすかったです。 この場を借りてお礼申し上げます。