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. hd
とhexdump
の違いは何ですか?
A. 多くのシステムでは、hd
は実際にはhexdump
へのシンボリックリンクか、その簡略版です。基本的な目的は同じですが、hexdump
はより多くのフォーマットオプションを提供する場合があります。
Q2. ASCII表現のみを表示するにはどうすればよいですか?
A. hd
は常に16進表現を表示しますが、表示可能なASCII文字のみが必要な場合は、代わりにstrings
コマンドを使用できます。
Q3. hd
を使用してファイルを変更できますか?
A. いいえ、hd
はファイルの内容を表示するだけです。バイナリファイルを変更するには、hexedit
やdd
などのツールが必要です。
Q4. 出力形式はどのように解釈すればよいですか?
A. 左端の列は16進数でのバイトオフセット(位置)を示します。中央の列は各バイトの16進数/10進数/8進数の値を示します。右端の列(-aまたは-cを使用する場合)はASCII表現を示し、非表示文字はドットで表示されます。
参考文献
https://man.openbsd.org/hd.1
改訂履歴
- 2025/05/05 初版