Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名前
hexdump - ファイルの内容を 16 進数、10 進数、8 進数、ASCII 文字で表示する
書式
hexdump [options] file...
読者へのご注意
これは、util-linux 版の hexdump コマンドのマニュアルである。hexdump コマンドの実装には、い くつかの系統がある。御使用のディストリビューションが util-linux 版以外の hexdump コマンド を採用している場合は、 動作やオプションがここで説明しているものとかなり違っているかもしれ ない。 そういうときは、英語版しかないかもしれないが、お手元の hexdump コマンドに付属するマ ニュアルに当たってみていただきたい。
説明
hexdump ユーティリティは、指定されたファイルをユーザーが指定したフォーマットで表示するフィ ルタである。 ファイルが指定されていない場合は、標準入力を処理の対象にする。
オプション
以下で使用する引き数 length や offset の後ろには、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 個、空白で区切って表示する (訳注: 表示不能文字は、エスケープ表記が可能な ものはエスケープ表記で、 できないものは、3 桁の 8 進数で表示される)。 -C, --canonical 標準的な 16 進数 + ASCII での表示。 入力オフセットを 16 進数で表示し、その後に、入 力データを 1 バイトずつ 2 桁の 16 進数で表現し、それを 1 行当たり 16 個、空白で区 切って表示する。 その後に、2 つの '|' で囲まれた中に同じ 16 バイトを %_p フォーマッ トで表示する。 -d, --two-bytes-decimal 2 バイト単位の 10 進数表示。 入力オフセットを 16 進数で表示し、その後に、入力データ を 2 バイトずつ 0 で字詰めした 5 桁の符号なし 10 進数で表現し、それを 1 行当たり 8 個、空白で区切って表示する。 -e, --format format_string データを表示するために使われるフォーマット文字列を指定する (訳注: フォーマット文字 列は、シングルクォート (' ') で囲む必要がある)。 -f, --format-file file 1 個以上のフォーマット文字列を、改行で区切って書き込んだファイルを指定する。 空行 や、空白を除いた最初の文字がハッシュマーク (#) である行は無視される (訳注: -e オプ ションと違って、こちらでは、 フォーマット文字列、すなわち各行をシングルクォートで囲 んではいけない)。 -L, --color[=when] フォーマット中のカラー指定単位 (color unit) を出力に使用する。 指定が任意の引き数 when は、auto, never, always のいずれかである。引き数 when を省略すると、デフォルト の auto になる。 カラー表示は、無効にすることもできる。 プログラムに埋め込まれた現 在のデフォルトが有効か無効かは、--help の出力を見ればわかる。 後述の「カラー指 定」サブセクションと「カラー表示」セクションも参照していただきたい (訳注: 短いオプ ション -L に引き数を付けるときは、間に空白を入れずに -Lalways のように直接続けなけ ればならない)。 -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 個、空白 で区切って表示する。 -V, --version バージョン情報を表示して、終了する。 -h, --help ヘルプを表示して、終了する。 各入力ファイルに対して、hexdump は、入力を -e や -f オプションで指定されたフォーマット文字 列に従い、 フォーマット文字列が指定された順序でデータを変換しながら、標準出力に順次書き出 していく。
フォーマット
フォーマット文字列は、空白 (またはタブ) で区切られた任意の数のフォーマット単位から構成され る。1 つのフォーマット単位は、最大で 3 個の要素、すなわち、繰り返し回数、バイト数、フォー マットを含んでいる。 [訳注] 各フォーマット文字列は 1 行からなる。フォーマット文字列を複数個指定すると、 その 各々が、同じ 1 つの処理単位 (後述のブロックである。「処理されるバイト数」セクション を参照) に対して、重ねて適用されることになる (すなわち、どのフォーマット文字列もブ ロックの先頭から適用される)。 複数のフォーマット文字列を指定するには、-e オプション では、-e を複数回使えばよい。-f オプションでは、改行で区切って複数行にする。 フォーマット単位は、「繰り返し回数 / バイト数 "フォーマット"」という書式にな る。"フォーマット" 以外は省略できる。 繰り返し回数は、指定が任意の (訳注: すなわち、省略可能な) 正の整数であり、デフォルトは 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 進数で 0x7f より大きい文字は、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 07F del カラー指定 フォーマット指定子 (訳注: 変換文字や変換文字列) の末尾にカラー指定を追加すると、hexdump は、対応する文字列 (訳注: たいていは 16 進数などの数値) を指定された色でハイライトする。 条件が存在する場合は、ハイライトする前に評価される (訳注: カラー指定の実例については、「用 例」セクションの 3 番目の例をご覧になっていただきたい)。 _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 マッチするか否かをチェックするオフセット、またはオフセットの範囲 (訳注: このオフ セットは 10 進数で指定するようだ)。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 つの処理単位 (つまり、ブロック) に繰り返し適用されることになる)。入力ブロック 1 個分のデータより少ないバイト数しか解釈しないフォーマット文字列については、 その最後の フォーマット単位が、何バイトかを解釈・変換するものであり、 しかも繰り返し回数が指定されて いないならば、 その繰り返し回数を増加させて、入力ブロック全体の処理が済むか、 あるい は、フォーマット文字列の要求を満たすだけのデータがブロックになくなるまで、処理を続ける。 ユーザの指定によって、あるいは、上述のように hexdump が繰り返し回数を変更していることに よって、繰り返し回数が 2 回以上になっている場合は、(訳注: そのフォーマット単位で、たとえば '8/1 "%02x "' や '"%_p "' のように、各出力項目の末尾に空白を追加することになっていても) 最 後の繰り返しにおける末尾の空白は出力されない。 フォーマット単位で、バイト数とともに複数の変換文字や変換文字列を指定するのは誤用である。 ただし、変換文字や変換文字列の 1 つ以外のすべてが、 _a や _A であるときは、問題がない。 -n オプションを指定したり、ファイルの終わりに達したために、 入力データがフォーマット文字列 の一部しか満たさなかった場合、 その入力ブロックには、利用できるすべてのデータを表示するの に足りるだけのゼロバイト (ASCII NUL) が補われる (換言すると、フォーマット単位が、データの 末尾からはみ出している場合、 そのフォーマット単位は、いくつかのゼロバイトを表示することに なる)。 そうしたフォーマット文字列による追加の出力は、相当する数の空白で置き換えられる。 相当する 数の空白というのは、s 変換文字が、実際に指定されている変換文字や変換文字列と同じフィールド 幅と精度を持ち、 '+', ´ ´, '#' と言った変換フラグが付いていれば、それを取り除いたときに、 NULL 文字列に対して出力する数の空白のことである。 フォーマット文字列が指定されていない場合、デフォルトの表示は、-x オプションの出力形式とよ く似たものになる (ただし、-x オプションを付けた方が、フォーマット単位間のスペースがデフォ ルトの出力より広くなる)。
終了ステータス
hexdump は成功すると 0 を返して終了する。 エラーが起きた場合は、1 以上を返して終了する。
用例
入力を「ためつすがめつ見直し」フォーマットで表示する: "%06.6_ao " 12/1 "%3_u " "\t\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"
カラー表示
空ファイル /etc/terminal-colors.d/hexdump.disable を置くことで、暗黙のカラー表示を無効化で きる。 カラー設定の詳細については terminal-colors.d(5) を参照していただきたい。
規格
hexdump ユーティリティは IEEE Std 1003.2 ("POSIX.2") に適合しているはずである。
入手方法
この hexdump コマンドは、util-linux パッケージの一部であり、Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/> から入手できる。
翻訳者謝辞
この man ページの翻訳の最初のバージョンは、NetBSD jman proj から寄贈していただいたものだっ た。また、翻訳にあたっては、FreeBSD jpman project <http://www.jp.freebsd.org/man-jp/> の翻 訳を参考にさせていただいた。両プロジェクトの翻訳者の方々にお礼を申し上げる。
おまけ
説明がわかりにくかったと思うので、翻訳者の判断で、用例をもう一つ追加して、説明を補足してみ る。 却って混乱が増すようなら、読み飛ばしていただきたい。hexdump -C のエミュレーションをし てみよう。次のような内容のファイルを hexchar.fmt という名前で作成する。 "%08.8_Ax\n" "%08.8_ax " 8/1 "%02x " " " 8/1 "%02x " " |" "%_p" "|\n" 各行がフォーマット文字列であり、「"%08.8_ax "」 「8/1 "%02x "」 「" "」 「" |"」 「"%_p"」 といった部分がフォーマット単位、 ダブルクォート (" ") で囲まれた部分がフォーマッ トである。 フォーマット単位には、繰り返し回数やバイト数の指定がなく、 フォーマットしか含ま れていないこともある。 入力データは、一定の量ごとに分割されて処理される。その一定の量がブロックだが、 ブロックの 大きさは、フォーマット文字列の中で最大のデータを要求しているものによって決まる。 上の場合 なら、最大のデータを要求しているのは、2 行目であり (ほかの行はデータの量を指定していな い)、1 バイトが 8 回、さらに 1 バイトが 8 回繰り返し処理されるわけだから、合計で 16 バイト が要求されていることになる。 従って、ブロックの大きさは 16 バイトである。言い換えれば、こ の例では、入力データは 16 バイトずつ処理されるということだ。 各フォーマット文字列は、同一のブロックに対して順番に適用される。 しかも、それぞれが、その ブロックの先頭に戻って、適用されていく。 1 行目は、「すべての入力データの処理が終わったときに、最後から 1 つ先のオフセットを表示せ よ」ということだから、ブロックのデータの処理とは関係がない。 2 行目の「"%08.8_ax " 8/1 "%02x " " " 8/1 "%02x "」の意味はこうである。 「まず、次に表示 するバイトのオフセットを 8 桁の 16 進数で、先頭を 0 で埋めて表示し、空白を 2 個続ける。そ れから、1 バイトずつ 8 個 のデータを、2 桁の 16 進数で後ろに空白を付けて (つまり、空白で区 切って) 表示し、空白を 2 個置いて、さらに 1 バイトずつ 8 個のデータを、2 桁の 16 進数で空 白で区切って表示せよ」。 3 行目の「" |" "%_p"」が指示しているのは、「2 行目による出力にすぐ続けて、同じ出力行にま ず ' |' という文字列を表示し、それから、2 行目が処理したのと同じブロックに対して 1 バイト ずつ '_p' 変換をして (つまり、ASCII 文字で) 出力せよ」ということだ。 3 行目は、「最後の フォーマット単位が、何バイトかを解釈・変換するものであり、 しかも繰り返し回数が指定されて いない」ので、ブロック全体の処理が済むまで、 最後のフォーマット単位 "%_p" による処理が繰り 返されることになる。 仮に、3 行目と 4 行目を 1 つにし、3 行目を「" |" "%_p" "|\n"」という形にすると、 フォー マット文字列の「最後のフォーマット単位が、 何バイトかを解釈・変換するもの」ではなくなるの で、 自動的な繰り返しの増加が行われないことになる。それ故、両者は別の行になっている。 4 行目は、データに対する処理は何も指定せず、「3 行目による出力のすぐ後ろに '|' という文字 を書き出してから改行せよ」とだけ指示している。 このすべてが終わると、次のブロックに移って、同じ処理を繰り返していく。 結果として、hexdump -f hexchar.fmt sample.txt を実行すれば、 hexdump -C sample.txt と同じ 結果が得られるはずである。