HEXDUMP(1)

名称
hexdump, hd - ASCII, 10進, 16進, 8進でのダンプ

書式
hexdump [-bcCdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file ... hd [-bcdovx] [-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 進数で表示し、次に、 入力の1バイトずつを、空白詰めした 3 桁の ASCII 文字で、1 行あたり 16 個、 空白で区切って表示します。

-C  標準的な hex+ASCII 表示 。 入力オフセットを 16 進数で表示し、 引続いて 16 バイトを 16 進数 2 桁で空白で区切って表示し、 引き続いて同じ 16 バイトを %_p フォーマットで ``|'' 文字で括って表示します。

    コマンド hd を実行すると、このオプションで hexdump 実行したことを意味します。

-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 進数として解釈されます。 b, k, m を offset の後ろにつけると、それぞれ 512, 1024, 1048576 倍と解釈されます。

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

-x  2 バイト 16 進表示 。 入力のオフセットを 16 進数で表示し、次に、 入力の 2 バイトづつを、0 詰めした 4 桁の 16 進数で、1 行あたり 8 個、 空白で区切って表示します。

hexdump は、各々の入力ファイルの内容を、それらが指定された順に、 -e および -f オプションによって指示されたフォーマット文字列に従って変換しながら、 シーケンシャルに標準出力へコピーします。

  フォーマット
フォーマット文字列は、任意の数のフォーマット単位を空白で区切って 並べたものです。 フォーマット単位は最大 3 個までの要素すなわち 繰り返し回数・バイト数・フォーマットによって構成されます。

繰り返し回数は正の整数で、省略時の値は 1 です。 それぞれのフォーマットは この繰り返し回数だけ適用されます。

バイト数も正の整数で、省略することもできます。 指定された場合には 繰り返し 1 回あたりに処理されるバイト数を示します。

繰り返し回数とバイト数はスラッシュ (/) で区切ります。 どちらか一方だけ 指定する時も、繰り返し回数の場合は直後、バイト数の場合は直前にスラッシュを 付け、曖昧にならないようにします。 スラッシュの前後にある空白は無視されます。

フォーマットは必須であり、ダブルクォート (" ") で囲みます。 フォーマットは fprintf 形式のフォーマット文字列 ( fprintf(3) を参照) ですが、以下の例外があります。

•   フィールドの幅あるいは精度としてアスタリスク (*) を使用することはできません。

•   ``s'' 変換文字にはバイト数または精度を指定しなければなりません (精度が指定されなかった場合は文字列全体を表示するという fprintf(3) のデフォルトとは異なります)。

•   変換文字 ``h'', ``l'', ``n'', ``p'' , ``q'' は サポートされていません。

•   C の標準規格の中で記述されている 以下の 1 文字エスケープシーケンスをサポートしています。
    NUL | \0
    <alert character> | \a
    <backspace> | \b
    <form-feed> | \f
    <newline> | \n
    <carriage return> | \r
    <tab> | \t
    <vertical tab> | \v

hexdump ユーティリティはさらに以下の変換文字をサポートします。

_a[dox]
    次に表示されるバイトのオフセット (複数の入力ファイルを通算しての値) を表示します。 文字 d, o, x を付加すると、表示をそれぞれ 10 進、8 進、16 進形式にします。

_A[dox]
    _a 変換文字とほぼ同じですが、すべての入力が処理された後で一度だけ実行 されるという点が異なります。

_c  デフォルトの文字セット中における文字を表示します。 表示不能な文字は 0 詰めして 3 桁にした 8 進数で表示します。 ただし標準のエスケープ 表記 (上述) ができるものについてはその 2 文字で表示します。

_p  デフォルトの文字セット中における文字を表示します。 表示不能な文字は “”. として表示します。

_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 バイトと 12 バイトも使用できます。

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

入力は ``ブロック'' ごとに処理されます。 ブロックとは、フォーマット 文字列によって指定されるデータの塊のうちで最も大きいものです。 1 ブロック分のデータを処理し切らないフォーマット文字列で、その中の 最後のフォーマット単位が何バイトかを処理し、かつ繰り返し 回数が指定されていないものは、ブロック全体が処理され切るか、 フォーマット文字列に合致するデータがブロック中になくなるまで 繰り返し回数を増やされます。

ユーザの指定または hexdump が上記のように繰り返し回数を変更した結果、 繰り返し回数が 1 より大きくなった場合、最後の繰り返しにおける 末尾の空白は出力されません。

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

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

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

フォーマット文字列が指定されない場合、デフォルトの表示形式は -x オプションが指定された場合のものと同じになります。

診断

使用例
入力を perusal 形式で表示する:

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

-x オプションを実装:

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

関連項目
gdb(1), od(1)