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
    一つあるいはそれ以上のフォーマット文字列(改行で区切る) の書かれたファイルを指定します。空行、および、 空白を除いた最初の文字が ハッシュ記号 (#) である行は無視されます。

-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です。それぞれのフォーマットは この繰り返し回数だけ適用されます。

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

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

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

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

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

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

•   Cの標準規格の中で記述されている 以下の一文字エスケープシーケンスをサポートしています。
    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バイトも使用できます。

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

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

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

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

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

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

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

hexdump は成功すれば0を、エラーが発生すれば >0 を返します。

実行例
入力を 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)