Infra Engineer

Linuxのテキストフィルタ処理~odコマンド・hexdumpコマンド~
2021.01.31
Lv1

Linuxのテキストフィルタ処理~odコマンド・hexdumpコマンド~

今回の内容

今回は、odコマンド・hexdumpコマンドについて解説します。

odコマンド

ファイルを8進数や他の形式(10進数など)で出力するには、「od(Octal Dump)」コマンドを使用します。
名前は「Octal Dump」に由来し、8進数で(Octal)出力する(Dump)という意味です。
デフォルトでは8進数で表示します。
バイナリ形式の実行可能ファイルの内容を見るのに便利です。

odコマンド
意味 ファイルの内容を8進数、16進数で表示する。(デフォルトは、8進数)

——————–

例)
「test1.txt」ファイルを8進数で表示。(一部省略)
[root@localhost ~]# cat test1.txt
あいうえお
かきくけこ
[root@localhost ~]#
[root@localhost ~]# od test1.txt
0000000 100743 161602 102201 100743 161606 104201 100743 005212
0000020 100743 161613 106601 100743 161617 110601 100743 005223
0000040
[root@localhost ~]#

odコマンドの一列目は、オフセットのアドレスです。16バイトごとに表示されます。
(用語解説1)オフセットアドレス(Offset address)
基準点のアドレスを0として、基準点からデータの位置を差し引いた値をオフセットアドレスと言います。

——————–

hexdumpコマンド

hexdumpコマンドは、ファイルを16進数または他の形式で出力するコマンドです。
16進数進数で(HEXadecimal)出力する(Dump)という意味です。
デフォルトでは16進数で表示しますが、オプションを使うと10進数や8進数など他の形式で出力することも可能です、

hexdumpコマンド
意味 ファイルの内容を8進数、16進数で表示する。(デフォルトでは、16進数)
書式 hexdump [オプション] [ファイル名]
例)
「test1.txt」ファイルを16進数で表示。
[root@localhost ~]# cat test1.txt
あいうえお
かきくけこ
[root@localhost ~]#
[root@localhost ~]# hexdump test1.txt
0000000 81e3 e382 8481 81e3 e386 8881 81e3 0a8a
0000010 81e3 e38b 8d81 81e3 e38f 9181 81e3 0a93
0000020
[root@localhost ~]#

——————–

odコマンドのオプションを使ってみよう

odコマンドは、オプションがあります。オプションは複数ありますが、一部紹介します。

オプション 説明
-An 冒頭のアドレスを表示しない
-t u1 1バイト単位で10進数で出力
-N1 表示するのは1バイトまで

——————–
今回は、上記のオプションを使って/dev/zeroファイルを読みだして表示してみましょう。

/dev/zeroファイルを読みだし
odコマンドを使って1バイト読みだして表示

[root@localhost ~]# cat /dev/zero

※catコマンドでは、何も表示されません

[root@localhost ~]# od -A n -tu1 -N 1 /dev/zero
   0
[root@localhost ~]#

——————–

そうすると出力結果が「0」と表示されます。/dev/zeroファイルは、「0」ばかりを生成し続けるファイルです。
こんなファイルを何に使うのか疑問に思いますよね?
ところが/dev/zeroファイルは、いろんな場面で活躍します。

例えば、あなたがペンでラブレターを書いたとしましょう。
そのラブレターには、こんな内容が書かれています。

「めぐみさんのことがすききです」

よく見ると文末が「すききです」になってます。
しかし、もしお母さんやお父さんや兄弟に拾われて、見られたらとても恥ずかしいですよね?
そこで、近くにあったで墨汁で「めぐみさんのことがすききです」の部分を黒塗りにしました。
これで安心です。もし誰かにラブレターを見られたとしても黒塗りなので絶対にわかりません。
/dev/zeroファイルは、まさに「墨汁で黒塗り」にするような役割をするファイルです。
ファイルの中身やディスクを「0」で上書きして(埋め尽くして)、完全に消去するといった使い方もできるわけです。
実際に、test1.txtファイルに中身(めぐみさんのことがすききです)を/dev/zeroファイルを使って、
すべて「0」で上書きして、最後にodコマンドで確認してみましょう!

——————–

catコマンドを使ってファイルの中身を確認()
[root@localhost ~]# cat test1.txt
めぐみさんのことがすききです
[root@localhost ~]#
[root@localhost ~]# wc -c test1.txt
43 test1.txt
[root@localhost ~]#

——————–

②「0」で埋め尽くす(マッキーのマジックペンで黒塗り)
ddコマンドを使用します
[root@localhost ~]# cat test1.txt
めぐみさんのことがすききです
[root@localhost ~]#
[root@localhost ~]# dd if=/dev/zero of=test1.txt bs=43 count=1
                    ↑ddコマンドを実行すると、中身がぜんぶ「0」でサイズが43Byteのファイル「test1.txt」が出来あがります。 
1+0 records in
1+0 records out
43 bytes (43 B) copied, 0.000401413 s, 107 kB/s
[root@localhost ~]#
[root@localhost ~]# cat test1.txt

※何も表示されません

[root@localhost ~]#

——————–

③「0」で上書きされたかの確認
odコマンドで確認
[root@localhost ~]# od -A n -tu1 -N 1 test1.txt
   0
[root@localhost ~]#

これで無事に「test1.txt」の中身は上書きされましたね!

——————–

まとめ

odコマンドやhexdumpコマンドは、LPICの試験においては、出題率は低いように感じますが、バイナリ形式の実行可能ファイルの内容を見るのに便利だったりと実務で使用することもあるかもしれません。しっかり覚えておきましょう!
それでは今回はこのあたりで。

確認問題

問題1

ファイル内容を8進数表示するコマンドで、正しい選択肢を1つ選びなさい。

A) cat
B) dd
C) od
D) wc

解答・解説
答え:c

A) ⇒ ファイルの中身を見るコマンドなので、誤りです。
B) ⇒ 入力指定した内容を、出力指定したファイルやデバイスにコピーするコマンドなので誤りです。
C) ⇒ ファイル内容を8進数表示するには、「od(Octal Dump)」コマンドを使用します。
D) ⇒ ファイルの文字数やバイト数コマンドなので、誤りです。

問題2

ファイル内容を16進数表示するコマンドで、正しい選択肢を1つ選びなさい。

A) hexdump
B) hexdump
C) hexdomp
D) hexaump

解答・解説
答え:c

A) ⇒ 六角形という意味ですが、このようなコマンドはありません。。
B) ⇒ ファイル内容を16進数表示するには、「od(Octal Dump)」コマンドを使用します。
C) ⇒ このようなコマンドはありません。
D) ⇒ このようなコマンドはありません。

Linux資格 「LPIC Lv1」徹底解説 連載目次リンク

Linux資格 「LPIC Lv1」徹底解説 連載目次

連載執筆講師が講座開講中!ITスクール SAK

ITスクールSAK | LPIC Lv1合格保証コース 講座紹介ページ