HEXDUMP(1)

名前
hexdump - ASCII, 10 進, 16 進, 8 進でダンプする

書式
hexdump [-bcCdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file ...

説明
hexdump ユーティリティは、指定したファイルを ユーザーが指定したフォーマットで表示するフィルタである。 ファイルが指定されていない場合は、標準入力を読み込んでフォーマットする。

オプションとしては以下のものがある:

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

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

-C  標準的な 16進数 + ASCII での表示。 入力オフセットを 16 進数で表示し、 その後に、入力データのキャラクタを 2 桁の 16 進数で表現し、 それを 1 行当たり 16 個、空白で区切って表示する。 その後に、``|'' で囲まれた中に同じ 16 バイトを %_p フォーマットで表示する。

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

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

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

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

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

-s offset
    入力の先頭から offset バイトを読み飛ばす。 デフォルトでは offset は 10 進数として解釈される。 先頭に 0x または 0X を付けた場合、 offset は 16 進数として解釈される。 先頭に 0 を付けた場合、 offset は 8 進数として解釈される。 offset の後ろに b, k, m を付けた場合、それぞれ 512, 1024, 1048576 倍であると解釈されるようになる。

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

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

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

  フォーマット
フォーマット文字列は、空白で区切られた任意の個数の フォーマット単位を含んでいる。 フォーマット単位は最大 3 個の要素、つまり、 繰り返し回数・バイト数・フォーマットを含んでいる。

繰り返し回数は、オプションとして指定される正の整数である。 デフォルトは 1 である。 各フォーマットは繰り返し回数だけ適用される。

バイト数は、オプションとして指定される正の整数である。 これが指定された場合、 1 つのフォーマットで処理されるバイト数を示す。

繰り返し回数とバイト数 (の両方、もしくはどちらか一方) が指定された場合、 どちらの数字かを区別するために、 繰り返し回数の後とバイト数の前にスラッシュを 1 個置かなければならない。 スラッシュの前後の空白は無視される。

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

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

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

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

•   C 言語の標準規格で記述されている 1 文字のエスケープシーケンスがサポートされている:
    NUL \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

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

%_c, %_p, %_u, %c
    1 バイトのみ。

    %d, %i, %o, %u, %X, %x 4 バイトがデフォルト。1, 2, 4 バイトがサポートされている。

    %E, %e, %f, %G, %g 8 バイトがデフォルト。4 バイトがサポートされている。

各フォーマット文字列によって処理されるデータの量は、 各フォーマット単位で必要とされるデータの合計である。 この合計は (繰り返し回数)×(バイト数) である。 また、バイト数が指定されていない場合は、 (繰り返し回数)×(フォーマットが必要としているバイト数) である。

入力は「ブロック」ごとに操作される。 ブロックは、フォーマット文字列で指定される データの塊のうちで最大のもの、と定義される。 入力ブロックのデータより少ないバイト数しか処理していないフォーマット文字列で、 その中の最後のフォーマット単位で数バイトを処理し、 かつ繰り返し回数が指定されていない場合、 入力ブロック全体が処理されるか、 フォーマット文字列に合致するデータがブロックになくなるまで、 繰り返し回数を増加させる。

ユーザーの指定、 または hexdump が上で説明したように繰り返し回数を変更した結果、 繰り返し回数が 2 回以上になった場合、 最後の繰り返しにおける末尾の空白は出力されない。

バイト数を複数の変換文字と共に指定すると、 1 つを除いた全ての変換文字が _a または _A である場合以外は、エラーになる。

-n オプションで指定したバイト数分、またはファイル終端に達したときに、 入力データがフォーマット文字列の一部分にしか満たさない場合、 有効なデータを全て表示するために、入力ブロックには適切な数の 0 が補われる (すなわち、データの終端にまたがっているフォーマット単位は、 何個かの 0 のバイトを表示する)。

このようなフォーマット文字列によるさらなる出力は、 等数の空白で置き換えられる。 等数の空白とは、元々の変換文字とフィールド幅と精度は同じで、 変換フラグ文字 “+”, “ ”, “#” を取り除いた s 変換文字が NULL 文字列を参照した場合に出力される数の空白である。

フォーマット文字列が指定されない場合、 デフォルトの表示は -x オプションを指定した場合と同じである。

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

例
入力を perusal (詳しく閲覧する) フォーマットで表示する:

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

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

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

準拠
hexdump ユーティリティは p1003.2 に適合しているはずである。

翻訳者謝辞
この man ページの翻訳にあたり、 FreeBSD jpman project <http://www.jp.freebsd.org/man-jp/> による翻訳を参考にさせていただいた。