名前

hexdump - ファイルの内容を 16 進数、10 進数、8 進数、ASCII 文字で表示する

hexdump options file ...

hd options file ...

説明

hexdump ユーティリティーは、指定されたファイルをユーザーが指定したフォーマットで表示するフィルターである。 ファイルが指定されていない場合は、標準入力を処理の対象にする。

オプション

以下で使用する引数 lengthoffset の後ろには、KiB (=1024), MiB (=1024*1024) のような乗数を表すサフィックスを付けることができる。GiB, TiB, PiB, EiB, ZiB, YiB も同様に使える ("iB" を続けるのは任意であり、たとえば、"K" は "KiB" と同じ意味だ)。また、KB (=1000), MB (=1000*1000) のようなサフィックスを付けてもよい。GB, TB, PB, EB, ZB, YB も同様に使える。

-b, --one-byte-octal

1 バイト単位の 8 進数表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 1 バイトずつ 0 で字詰めした 3 桁の 8 進数で表現し、それを 1 行当たり 16 個、空白で区切って表示する。

-c, --one-byte-char

1 バイト単位の ASCII 文字表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 1 キャラクタずつ、空白で字詰めした 3 桁の ASCII 文字で表現し、それを 1 行当たり 16 個、空白で区切って表示する。

-C, --canonical

標準的な 16 進数 + ASCII での表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 1 バイトずつ 2 桁の 16 進数で表現し、それを 1 行当たり 16 個、空白で区切って表示する。 その後に、2 つの | で囲まれた中に同じ 16 バイトを %_p フォーマットで表示する。本プログラムを hd として起動した場合には、 本オプションを暗に含む。

-d, --two-bytes-decimal

2 バイト単位の 10 進数表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 2 バイトずつ 0 で字詰めした 5 桁の符号なし 10 進数で表現し、それを 1 行当たり 8 個、空白で区切って表示する。

-e, --format format_string

データを表示するために使われるフォーマット文字列を指定する。

-f, --format-file file

1 個以上のフォーマット文字列を、 改行で区切って書き込んだファイルを指定する。 空行や、空白を除いた最初の文字がハッシュマーク (#) である行は無視される

-L, --color[=when]

フォーマット中のカラー指定単位 (color unit) を出力に使用する。 指定が任意の引数 when は、auto, never, always のいずれかである。 引数 when を省略すると、デフォルトの auto になる。 カラー表示は、無効にすることもできる。 プログラムに埋め込まれた現在のデフォルトが有効か無効かは、 --help の出力を見ればわかる。 後述の「カラー指定」サブセクションと「カラー表示」セクションも参照のこと。

-n, --length length

入力の length バイト分だけを処理する。

-o, --two-bytes-octal

2 バイト単位の 8 進数表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 2 バイトずつ 0 で字詰めした 6 桁の 8 進数で表現し、それを 1 行当たり 8 個、空白で区切って表示する。

-s, --skip offset

入力の先頭から offset バイトを読み飛ばす。

-v, --no-squeezing

-v オプションを指定すると、hexdump は、入力データをすべて表示するようになる。 -v オプションを指定しない場合は、直前の出力行と (入力オフセット以外が) 同じ内容の行は、何行であっても、ただ 1 個のアスタリスクからなる 1 行に置き換えられる。

-x, --two-bytes-hex

2 バイト単位の 16 進数表示。 入力オフセットを 16 進数で表示し、その後に、入力データを 2 バイトずつ 0 で字詰めした 4 桁の 16 進数で表現し、それを 1 行当たり 8 個、空白で区切って表示する。

-h, --help

ヘルプを表示して終了する。

-V, --version

バージョンを表示して終了する。

各入力ファイルに対して、hexdump は、入力を -e-f オプションで指定されたフォーマット文字列に従い、 フォーマット文字列が指定された順序でデータを変換しながら、標準出力に順次書き出していく。

フォーマット

フォーマット文字列は、空白 (またはタブ) で区切られた任意の数のフォーマット単位から構成される。1 つのフォーマット単位は、最大で 3 個の要素、すなわち、繰り返し回数、バイト数、フォーマットを含んでいる。

繰り返し回数は、省略可能な正の整数であり、 デフォルトは 1 である。 各フォーマットは繰り返し回数だけ適用される。

バイト数も、指定が任意の正の整数である。これが指定されている場合は、そのフォーマットを 1 回適用するごとに処理するバイト数を示している。

繰り返し回数やバイト数を指定する場合、どちらの数字か区別できるように、 繰り返し回数の後や、バイト数の前にスラッシュを 1 個置かなければならない。 スラッシュの前後に空白があっても、無視される。

フォーマットは必須であり、 ダブルクォート (" ") で囲まなければならない。 このフォーマットは、 fprintf 形式のフォーマット文字列 (fprintf(3) を参照) として解釈されるが、 以下のような例外がある。

1.

フィールドの幅や精度としてアスタリスク (*) を使えない。

2.

変換文字 s のそれぞれについて、バイト数かフィールド精度が必要である。 (その点が、精度が指定されていない場合に全ての文字列を表示する fprintf(3) のデフォルトとは異なる)。

3.

変換文字 h, l, n, p, q がサポートされていない。

4.

C 言語の規格に書かれている 1 文字のエスケープシーケンスがサポートされている。

NULL \0
<アラート文字> \a
バックスペース \b
フォームフィード \f
改行 \n
復帰 \r
タブ \t
垂直タブ \v


変換文字列

hexdump ユーティリティーは、さらに以下の変換文字列もサポートしている。

_a[dox]

次に表示されるバイトの入力オフセット (複数の入力ファイルで通算した値) を表示する。 文字 d, o, x を後ろに付けると、オフセットの表示がそれぞれ 10, 8, 16 進数になる。

_A[dox]

変換文字列 _a とほぼ同じ。 ただしこの変換は、 すべての入力データが処理された後で 1 回だけ実行される。

_c

デフォルト文字セットの文字で出力する。表示不能な文字は、0 で字詰めした 3 桁の 8 進数で表示される。ただし、標準エスケープ表記で表現できる文字 (上記を参照) は、その 2 文字の文字列で表示される。

_p

デフォルト文字セットの文字で出力する。 表示不能な文字は、1 つの '.' として表示される。

_u

US ASCII 文字で出力する。 ただし、制御文字は以下のような小文字の名前を使って表示される。 16 進数で 0xff より大きい文字は、16 進数の文字列として表示される。

000 nul 001 soh 002 stx 003 etx 004 eot 005 enq
006 ack 007 bel 008 bs 009 ht 00A lf 00B vt
00C ff 00D cr 00E so 00F si 010 dle 011 dc1
012 dc2 013 dc3 014 dc4 015 nak 016 syn 017 etb
018 can 019 em 01A sub 01B esc 01C fs 01D gs
01E rs 01F us 0FF del


カラー指定

フォーマット指定子の末尾にカラー指定を追加すると、 hexdump は対応する文字列を指定された色でハイライトする。 条件が存在する場合は、ハイライトする前に評価される。

_L[color_unit_1,color_unit_2,...,color_unit_n]

カラー指定単位 (color unit) の完全な書式は、 以下のとおりである。

[!]COLOR[:VALUE][@OFFSET_START[-END]]

!

条件を否定する。 注意する点として、あるカラー指定単位について否定することに意味があるのは、 値/文字列と、オフセットの両方を指定したときだけである。 その場合は、値/文字列がそのオフセットにあるものとマッチしなかったときにのみ、 対応する出力文字列がハイライトされることになる。

COLOR

シェルで使われる 8 種の基本色の 1 つ。

VALUE

マッチすべき値。 16 進数、8 進数、または文字列で指定する。 hexdump はカラー指定単位の中では、 通常の C 言語のエスケープシーケンスを解釈しないことに注意すること。

OFFSET

マッチするか否かをチェックするオフセット、またはオフセットの範囲。 OFFSET_START だけ指定すると、 END オフセットが同じ値になることに注意していただきたい。

処理されるバイト数

変換文字で使われるデフォルトのバイト数とサポートされるバイト数は、以下の通りである。

%_c, %_p, %_u, %c

1 バイトのみ。

%d, %i, %o, %u, %X, %x

4 バイトがデフォルト。 1, 2, 4 バイトがサポートされている。

%E, %e, %f, %G, %g

8 バイトがデフォルト。 4 バイトがサポートされている。

各フォーマット文字列によって解釈、変換されるデータの量は、 各フォーマット単位が要求するデータの合計である。 各フォーマット単位が要求するデータは、(繰り返し回数) x (バイト数) である。 バイト数が指定されていない場合は、 (繰り返し回数) x (そのフォーマットが要求するバイト数) になる。

入力は ブロック 単位で処理される。ここで言うブロックとは、 フォーマット文字列のいずれかによって指定されるデータの量のうちで、 最大のもののことである 入力ブロック 1 個分のデータより少ないバイト数しか解釈しないフォーマット文字列については、 その最後のフォーマット単位が、何バイトかを解釈、変換するものであり、 しかも繰り返し回数が指定されていないならば、 その繰り返し回数を増加させて、入力ブロック全体の処理が済むか、 あるいは、フォーマット文字列の要求を満たすだけのデータがブロックになくなるまで、処理を続ける。

ユーザーの指定によって、あるいは、上述のように hexdump が繰り返し回数を変更していることによって、繰り返し回数が 2 回以上になっている場合は、 最後の繰り返しにおける末尾の空白は出力されない。

フォーマット単位で、バイト数とともに複数の変換文字や変換文字列を指定するのは誤用である。 ただし、変換文字や変換文字列の 1 つ以外のすべてが、 _a_A であるときは、問題がない。

-n オプションを指定したり、ファイルの終わりに達したために、 入力データがフォーマット文字列の一部しか満たさなかった場合、 その入力ブロックには、利用できるすべてのデータを表示するのに足りるだけのゼロバイト (ASCII NUL) が補われる (換言すると、フォーマット単位が、データの末尾からはみ出している場合、 そのフォーマット単位は、いくつかのゼロバイトを表示することになる)。

そうしたフォーマット文字列による追加の出力は、相当する数の空白で置き換えられる。 相当する数の空白というのは、s 変換文字が、実際に指定されている変換文字や変換文字列と同じフィールド幅と精度を持ち、 '+', \(aq \(aq, '#' といった変換フラグが付いていれば、それを取り除いたときに、 NULL 文字列に対して出力する数の空白のことである。

フォーマット文字列が指定されていない場合、デフォルトの表示は、-x オプションの出力形式とよく似たものになる (ただし、-x オプションを付けた方が、フォーマット単位間のスペースがデフォルトの出力より広くなる)。

終了ステータス

hexdump は成功すると 0 を返して終了する。 エラーが起きた場合は、1 以上を返して終了する。

準拠

hexdump ユーティリティーは IEEE Std 1003.2 ("POSIX.2") に適合しているはずである。

詳細な書式により入力内容を表示する。

   "%06.6_ao "  12/1 "%3_u "
   "\t" "%_p "
   "\n"

-x オプションを実装する。

   "%07.7_Ax\n"
   "%07.7_ax  " 8/2 "%04x " "\n"

MBR ブートシグネチャーの例: アドレスをシアンで、オフセット 510 と 511 にあるバイトの値が 0xAA55 の場合は緑、その他の場合は赤でハイライトする。

   "%07.7_Ax_L[cyan]\n"
   "%07.7_ax_L[cyan]  " 8/2 "   %04x_L[green:0xAA55@510-511,!red:0xAA55@510-511] " "\n"

カラー表示

出力のカラー化は terminal-colors.d(5) の機能によって実装されている。 暗にカラー化を無効にするには、 以下のファイルを空ファイルとすることで実現することができる。

/etc/terminal-colors.d/hexdump.disable

上は hexdump コマンドに対するものであり、 すべてのツールに対しては以下のファイルを空ファイルとすることで実現できる。

/etc/terminal-colors.d/disable

ユーザー固有の $XDG_CONFIG_HOME/terminal-colors.d または $HOME/.config/terminal-colors.d はグローバル設定を上書きする。

なお出力のカラー化はデフォルトで有効となっている場合がある。 その場合、 terminal-colors.d ディレクトリは存在していなくて構わない。

バグ報告

バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.

入手方法

hexdump コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.