hd コマンド

ファイルの内容を16進数、10進数、8進数、またはASCII形式で表示します。

概要

hdコマンド(hexdump)は、ファイルの内容を様々な形式、主に16進数で表示します。バイナリファイルの検査、非表示文字の確認、ファイル構造の分析に役立ちます。このコマンドはファイルまたは標準入力からデータを読み取り、フォーマットされた表現を出力します。

オプション

-a, --ascii

16進ダンプと一緒にASCII文字を表示します。

$ echo "Hello" | hd -a
00000000  48 65 6c 6c 6f 0a                                 |Hello.|
00000006

-c, --canonical

標準的な16進数+ASCII表示形式を使用します。

$ echo "Hello" | hd -c
00000000  48 65 6c 6c 6f 0a                                 |Hello.|
00000006

-d, --decimal

16進数の代わりに10進数形式で出力を表示します。

$ echo "Hello" | hd -d
0000000   072 101 108 108 111 012
0000006

-o, --octal

8進数形式で出力を表示します。

$ echo "Hello" | hd -o
0000000 000110 000145 000154 000154 000157 000012
0000006

-n, --length=N

入力のN個のバイトのみを解釈します。

$ echo "Hello World" | hd -n 5
00000000  48 65 6c 6c 6f                                    |Hello|
00000005

-s, --skip=N

入力の先頭からNバイトをスキップします。

$ echo "Hello World" | hd -s 6
00000006  57 6f 72 6c 64 0a                                 |World.|
0000000c

-v, --no-squeezing

すべての入力データを表示します(重複行をアスタリスクで置き換えるデフォルトの動作を無効にします)。

$ dd if=/dev/zero bs=16 count=3 | hd -v
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030

使用例

バイナリファイルの検査

$ hd /bin/ls | head -3
00000000  cf fa ed fe 07 00 00 01  03 00 00 80 02 00 00 00  |................|
00000010  10 00 00 00 18 07 00 00  85 00 20 00 00 00 00 00  |.......... .....|
00000020  19 00 00 00 48 00 00 00  5f 5f 50 41 47 45 5a 45  |....H...__PAGEZE|

ファイルヘッダーの表示

$ hd -n 16 image.jpg
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 01 00 48  |......JFIF.....H|
00000010

バイナリファイルの比較

$ hd file1.bin > file1.hex
$ hd file2.bin > file2.hex
$ diff file1.hex file2.hex

ヒント:

他のコマンドと組み合わせる

他のコマンドの出力をhdにパイプして、バイナリデータを素早く検査できます:

$ curl -s https://example.com | hd | head

非表示文字の検査

hdを使用して、テキストファイルで問題を引き起こす可能性のあるキャリッジリターン、改行、ヌルバイトなどの隠れた文字を確認できます。

ファイル形式の分析

hdはファイルタイプを識別したり、ファイル形式の問題をデバッグしたりするためのファイルヘッダーの検査に役立ちます。

メモリ効率

非常に大きなファイルの場合、-s-nオプションを使用して、ファイル全体をロードせずに特定の部分を検査できます。

よくある質問

Q1. hdhexdumpの違いは何ですか?

A. 多くのシステムでは、hdは実際にはhexdumpへのシンボリックリンクか、その簡略版です。基本的な目的は同じですが、hexdumpはより多くのフォーマットオプションを提供する場合があります。

Q2. ASCII表現のみを表示するにはどうすればよいですか?

A. hdは常に16進表現を表示しますが、表示可能なASCII文字のみが必要な場合は、代わりにstringsコマンドを使用できます。

Q3. hdを使用してファイルを変更できますか?

A. いいえ、hdはファイルの内容を表示するだけです。バイナリファイルを変更するには、hexeditddなどのツールが必要です。

Q4. 出力形式はどのように解釈すればよいですか?

A. 左端の列は16進数でのバイトオフセット(位置)を示します。中央の列は各バイトの16進数/10進数/8進数の値を示します。右端の列(-aまたは-cを使用する場合)はASCII表現を示し、非表示文字はドットで表示されます。

参考文献

https://man.openbsd.org/hd.1

改訂履歴