hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

hexdumpコマンドの使い方



1 hexdumpコマンドとは?

ファイルの内容を8進数や16進数で表示するコマンドです。

2 検証環境

CentOS版数は以下のとおりです。仮想マシンは最小構成で作成しました。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

3 オプション一覧

オプション一覧は以下のとおりです。

[root@server ~]# hexdump -h
hexdump: 無効なオプション -- 'h'

Usage:
 hexdump [options] file...

Options:
 -b              one-byte octal display
 -c              one-byte character display
 -C              canonical hex+ASCII display
 -d              two-byte decimal display
 -o              two-byte octal display
 -x              two-byte hexadecimal display
 -e format       format string to be used for displaying data
 -f format_file  file that contains format strings
 -n length       interpret only length bytes of input
 -s offset       skip offset bytes from the beginning
 -v              display without squeezing similar lines
 -V              output version information and exit

4 事前準備

事前準備としてテスト用ファイル(test.bin)を作成します。テスト用ファイルは、17バイト目から32バイト目にASCIIコードが含まれています。

[root@server ~]# echo -en "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" > test.bin
[root@server ~]# echo -en "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" >> test.bin

5 オプションなしで実行した場合

オプションなしでhexdumpを実行すると、テスト用ファイル(test.bin)が16進数で2バイト単位で表示されます。

[root@server ~]# hexdump test.bin
0000000 8180 8382 8584 8786 8988 8b8a 8d8c 8f8e
0000010 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e
0000020

6 ASCII文字を表示する方法(-C)

-Cは、ASCII文字を表示するオプションです。-Cを使って、テスト用ファイルに含まれるASCII文字を表示してみます。17byteから32byte目がASCII文字であることがわかります。

[root@server ~]# hexdump -C test.bin
00000000  80 81 82 83 84 85 86 87  88 89 8a 8b 8c 8d 8e 8f  |................|
00000010  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000020

7 表示する範囲を指定する方法

7.1 先頭からnバイトを表示する方法

-nは、表示するバイト数を指定するオプションです。テスト用ファイルの先頭から8バイトを表示してみます。

[root@server ~]# hexdump -C -n 8 test.bin
00000000  80 81 82 83 84 85 86 87                           |........|
00000008

7.2 sバイト目からnバイトを表示する方法

-sは、表示開始位置を指定するオプションです。テスト用ファイルの8バイト目から2バイトを表示してみます。

[root@server ~]# hexdump -C -s 8 -n 2 test.bin
00000008  88 89                                             |..|
0000000a

7.3 sバイト目から最後まで表示する方法

テスト用ファイルの16バイト目から最後まで表示してみます。

[root@server ~]# hexdump -C -s 16 test.bin
00000010  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000020

8 繰り返し部分を表示する方法(-v)

テスト用ファイル(test1.bin)を作成します。

[root@server ~]# echo -en "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" > test1.bin
[root@server ~]# echo -en "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" >> test1.bin
[root@server ~]# echo -en "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" >> test1.bin
[root@server ~]# echo -en "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" >> test1.bin
[root@server ~]# echo -en "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" >> test1.bin

オプションを指定しないと、以下のように繰り返し部分が省略されます。

[root@server ~]# hexdump -C test1.bin
00000000  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
*
00000050

-vオプションを指定して、hexdumpコマンドを実行してみます。繰り返し部分が表示されていることがわかります。

[root@server ~]# hexdump -Cv test1.bin
00000000  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000010  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000020  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000030  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000040  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f  | !"#$%&'()*+,-./|
00000050

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ