blob: 93928fe5da6d8ebaeb72dd6a2f8c0fc28295a7f4 [file] [log] [blame]
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +02001.TH XXD 1 "August 1996" "Manual page for xxd"
2.\"
3.\" 21st May 1996
4.\" Man page author:
5.\" Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
6.\" Changes by Bram Moolenaar <Bram@vim.org>
7.SH 名前
8.I xxd
9\- 16 進ダンプを作成したり、元に戻したり。
10.SH 書式
11.B xxd
12\-h[elp]
13.br
14.B xxd
15[options] [infile [outfile]]
16.br
17.B xxd
18\-r[evert] [options] [infile [outfile]]
19.SH 説明
20ファイルや標準入力から 16 進ダンプを作成します。
2116 進ダンプから元のバイナリに戻すこともできます。
22.BR uuencode (1)
23
24.BR uudecode (1)
Bram Moolenaara9604e62018-07-21 05:56:22 +020025のように、バイナリデータを、メールに貼り付け可能な ASCII 形式に変換できたり、標準出力に出力することもできます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020026さらに、バイナリファイルにパッチを当てるという使い方もできます。
27.SH オプション
28.I infile
29を指定しなかった場合は、標準入力が読み込まれます。
30.I infile
31
32.RB \` \- '
33を指定した場合も、標準入力から読み込まれます。
34.I outfile
35を指定しなかった (または
36.RB \` \- '
37を指定した) 場合は、標準出力に出力されます。
38.PP
Bram Moolenaara9604e62018-07-21 05:56:22 +020039引数の解釈処理は適当なので注意してください。
40パラメータを取らない引数は最初の一文字だけチェックされます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020041引数の文字とパラメータの間のスペースは省略可能です。
42パラメータは 10 進数、16 進数、8 進数で指定できます。
43.BR \-c8
44
45.BR "\-c 8"
46
47.B \-c 010
48
49.B \-cols 8
50はすべて同じ意味です。
51.PP
52.TP
53.IR \-a " | " \-autoskip
54オートスキップ: 連続した nul 行を一つの '*' で置き換える。
55.TP
56.IR \-b " | " \-bits
57ビット (2進数) ダンプ。
581 オクテットが "1" "0" 8 文字で出力されます。
59各行の行頭には 16 進数の行番号が表示されます。
K.Takataef07a762023-12-20 04:21:40 +090060行末には ASCII (または EBCDIC) で表した場合の文字が表示されます。
tristhaus85f45212023-10-06 19:51:13 +020061このモードでは \-p\-i は機能しません。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020062.TP
Bram Moolenaar5e9b2fa2016-02-01 22:37:05 +010063.IR \-e
64リトルエンディアンの 16 進ダンプに切り替える。
Bram Moolenaara9604e62018-07-21 05:56:22 +020065このオプションは、バイトのグループをリトルエンディアンのバイト順のワードとして扱います。
66標準のグルーピングは 4 バイトですが、
Bram Moolenaar5e9b2fa2016-02-01 22:37:05 +010067.RI "" \-g
68を使うことで変更可能です。
Bram Moolenaara9604e62018-07-21 05:56:22 +020069このオプションは 16 進ダンプのみに適用され、ASCII (あるいは EBCDIC)
70表示は変更されません。
Bram Moolenaar5e9b2fa2016-02-01 22:37:05 +010071このモードでは \-r\-p\-i は機能しません。
72.TP
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020073.IR "\-c cols " | " \-cols cols"
74一行
75.RI < cols >
76オクテットで出力する。標準設定は 16 (\-i: 12, \-ps: 30, \-b: 6)。最大 256
Bram Moolenaarfd31be22022-01-16 14:46:06 +000077\-ps には最大値がありません。 \-ps 付きの場合、0 を指定すると単一の長い行で出力されます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020078.TP
Bram Moolenaar2f018892018-05-18 18:12:06 +020079.IR \-C " | " \-capitalize
80\-i を使用した際に、C インクルードファイル形式の変数名を大文字にする。
81.TP
Ken Takata12cb1d12024-08-15 22:02:45 +020082.I \-d
83オフセットを 16 進の代わりに 10 進で表示する。
84.TP
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020085.IR \-E " | " \-EBCDIC
86右端に出力される文字のエンコーディングを ASCII から EBCDIC に変更する。
8716 進ダンプの出力形式は変更されません。
88\-r\-p\-i が同時に指定された場合は何の効果もありません。
89.TP
90.IR "\-g bytes " | " \-groupsize bytes"
91出力を
92.RI < bytes >
Bram Moolenaara9604e62018-07-21 05:56:22 +020093バイト (2 文字の 16 進数、または 8 文字の 2 進数) ごとにスペースで区切ります。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +020094区切らずに出力するには
95.I \-g 0
96を指定してください。
97.RI < Bytes >
Bram Moolenaar5e9b2fa2016-02-01 22:37:05 +010098の標準設定は \fI2\fP で、リトルエンディアンモードの場合は \fI4\fP
992 進ダンプの場合は \fI1\fP です。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200100ポストスクリプト形式やインクルード形式で出力するときは、このオプションは使われません。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200101.TP
102.IR \-h " | " \-help
103コマンドの説明を出力して終了する。変換は実行されません。
104.TP
105.IR \-i " | " \-include
K.Takataef07a762023-12-20 04:21:40 +0900106C インクルードファイル形式で出力する。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200107入力ファイルの名前が付けられた静的配列の定義が出力されます。
108標準入力の場合は定義の中身だけ出力されます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200109.TP
110.IR "\-l len " | " \-len len"
111.RI < len >
112オクテットだけ出力する。
113.TP
K.Takataef07a762023-12-20 04:21:40 +0900114.I "\-n name " | " \-name name"
115\-i が使われたときに変数名の出力を上書きする。
116配列は \fIname\fP と名付けられ、長さは \fIname\fP_len と名付けられます。
117.TP
Bram Moolenaar5e9b2fa2016-02-01 22:37:05 +0100118.I \-o offset
119表示されるファイル位置に
120.RI < offset >
121を加算する。
122.TP
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200123.IR \-p " | " \-ps " | " \-postscript " | " \-plain
124ポストスクリプト形式の 16 進ダンプを出力する。別名 プレーン 16 進ダンプ。
125.TP
126.IR \-r " | " \-revert
127元に戻す: 16 進ダンプからバイナリ形式に変換 (またはパッチ) します。
128ファイルへ出力する場合、出力先のファイルは切り詰めされません。
129行番号や特定の書式がないプレーン 16 進ダンプを読み込む場合は、
130.I \-r \-p
K.Takataef07a762023-12-20 04:21:40 +0900131の組み合わせを使ってください。空白と改行は無視されます。
13216 進ダンプの代わりにビットダンプを読み込むには、
133.I \-r \-b
134の組み合わせを使ってください。
135.TP
136.IR \-R " " when
13716 進の値に基づいて、16 進の値とその値の両方が同じ色でカラー表示される。
138たいていは、表示可能文字と非表示可能文字を区別するのに有用です。
139.I \fIwhen\fP
140
Ken Takata12cb1d12024-08-15 22:02:45 +0200141.BR never ", " always ", あるいは " auto " (デフォルト: auto)
K.Takataef07a762023-12-20 04:21:40 +0900142のいずれかです。
143.BR $NO_COLOR
144環境変数が設定されているときは、カラー表示は無効化されます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200145.TP
146.I \-seek offset
147.IR \-r
148の後で使われた場合: 16 進ダンプを出力するファイルの位置に
149.RI < offset >
150を加える。
151.TP
152.I \-s [+][\-]seek
153infile の
154.RI < seek >
155バイト目 (絶対位置、または相対位置) から開始する。
156\fI+ \fRは、現在の標準入力の位置から相対的な位置を示します
Bram Moolenaara9604e62018-07-21 05:56:22 +0200157(標準入力から読み込むときのみ意味があります)。
158\fI\- \fRは、入力の終わりからの文字数を示します
159(\fI+\fR と同時に指定した場合は、現在の標準入力の位置から手前の位置を示します)。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200160\-s 引数を指定しなかった場合は、現在のファイル位置から開始されます。
161.TP
162.I \-u
16316 進数の表記に大文字を使います。指定がない場合は小文字で出力されます。
164.TP
165.IR \-v " | " \-version
166バージョンを表示します。
167.SH 警告
168.PP
169.I xxd \-r
170では行番号の評価に関しての暗黙のルールがいくつかあります。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200171出力ファイルがシーク可能なら、各行の行番号が順番通りに並んでなくても構いません。
172位置が飛んでいても重なっていても大丈夫です。
173その場合、次の位置に移動するために lseek(2) が使われます。
174出力ファイルがシーク不可なら、「隙間」だけが処理可能です。
175隙間は null バイトで埋められます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200176.PP
177.I xxd \-r
178は不正な入力をエラーにしません。ゴミは静かに読み飛ばされます。
179.PP
18016 進ダンプを編集するときは注意が必要です。
181.I xxd \-r
Bram Moolenaara9604e62018-07-21 05:56:22 +0200182は必要な桁 (\-c 引数参照) だけ 16 進データを読み込んで、行の残りを無視します。
K.Takataef07a762023-12-20 04:21:40 +0900183つまり、ASCII (または EBCDIC) を示している列への変更は無視されます。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200184xxd \-r \-p でプレーン形式 (ポストスクリプト形式) の 16 進ダンプを元に戻す場合は、列の数は影響しません。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +02001852 桁の 16 進数と認識できるものはすべて変換されます。
186.PP
187\fI% xxd \-i file\fR
188.br
189
190.br
191\fI% xxd \-i < file\fR
192.br
193の結果は違います。注意してください。
194.PP
195.I xxd \-s +seek
196
197.IR "xxd \-s seek" ,
Bram Moolenaara9604e62018-07-21 05:56:22 +0200198の違いは、lseek(2) を使って入力を "巻き戻す" かどうかです。'+' が意味を持つのは、入力が標準入力で、xxd
199が起動されたときに標準入力のファイル位置がファイルの先頭ではなかった場合です。
K.Takataef07a762023-12-20 04:21:40 +0900200以下の例が分かりやすいかもしれません (もっと混乱するかも!):
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200201.PP
Bram Moolenaara9604e62018-07-21 05:56:22 +0200202`cat' が既に標準入力を終わりまで読んでいるので、読む前に標準入力を巻き戻す必要がある。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200203.br
204\fI% sh \-c "cat > plain_copy; xxd \-s 0 > hex_copy" < file\fR
205.PP
206ファイル位置 0x480 (=1024+128) 前方から 16 進ダンプする。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200207`+' は 「現在地からの相対位置」を意味するので、dd が 1k 処理した後から、さらに `128' 進めます。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200208.br
209\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet" < file\fR
210.PP
K.Takataef07a762023-12-20 04:21:40 +0900211ファイル位置 0x100 (=1024\-768) から 16 進ダンプする。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200212.br
213\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +\-768 > hex_snippet" < file\fR
214.PP
215このような使い方はあまりしませんし、`+' を使うこともほとんどないでしょう。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200216\-s を使うときはいつでも、strace(1) や truss(1) を使って、xxd の働きをチェックすることをお勧めします。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200217.SH 例
218.PP
219.br
220.BR ファイル
221の最初の三行 (16 進数で 0x30 バイト) 以降を出力する。
222.br
223\fI% xxd \-s 0x30 file\fR
224.PP
225.br
226.BR ファイル
227の最後から三行 (16 進数で 0x30 バイト) を出力する。
228.br
229\fI% xxd \-s \-0x30 file\fR
230.PP
231.br
232120 バイトを、平文 16 進ダンプ形式で一行に 20 オクテットずつ出力する。
233.br
234\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
235.br
2362e54482058584420312022417567757374203139
237.br
23839362220224d616e75616c207061676520666f72
239.br
24020787864220a2e5c220a2e5c222032317374204d
241.br
242617920313939360a2e5c22204d616e2070616765
243.br
24420617574686f723a0a2e5c2220202020546f6e79
245.br
246204e7567656e74203c746f6e79407363746e7567
247.br
248
249.br
Bram Moolenaara9604e62018-07-21 05:56:22 +0200250この man ページの先頭から 120 バイトを一行に 12 オクテットずつ 16 進ダンプする。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200251.br
252\fI% xxd \-l 120 \-c 12 xxd.1\fR
253.br
2540000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A
255.br
256000000c: 7567 7573 7420 3139 3936 2220 ugust 1996"
257.br
2580000018: 224d 616e 7561 6c20 7061 6765 "Manual page
259.br
2600000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\\
261.br
2620000030: 220a 2e5c 2220 3231 7374 204d "..\\" 21st M
263.br
264000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\\"
265.br
2660000048: 4d61 6e20 7061 6765 2061 7574 Man page aut
267.br
2680000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\\"
269.br
2700000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent
271.br
272000006c: 3c74 6f6e 7940 7363 746e 7567 <tony@sctnug
273.PP
274.br
275xxd.1 の日付部分だけを出力する。
276.br
277\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
278.br
2790000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996
280.PP
281.br
282.B input_file
283
284.B output_file
285にコピーし、先頭に 0x00 を 100 バイト分付け加える。
286.br
287\fI% xxd input_file | xxd \-r \-s 100 > output_file\fR
288.br
289
290.br
291xxd.1 の日付を修正する。
292.br
293\fI% echo "0000037: 3574 68" | xxd \-r \- xxd.1\fR
294.br
295\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
296.br
2970000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996
298.PP
299.br
300中身がすべて 0x00 の 65537 バイトのファイルを作成する。
301ただし、最後のバイトだけは 'A' (hex 0x41)。
302.br
303\fI% echo "010000: 41" | xxd \-r > file\fR
304.PP
305.br
306作成したファイルをオートスキップを使って 16 進ダンプする。
307.br
308\fI% xxd \-a \-c 12 file\fR
309.br
3100000000: 0000 0000 0000 0000 0000 0000 ............
311.br
312*
313.br
314000fffc: 0000 0000 40 ....A
315.PP
316一文字の 'A' からなる 1 バイトのファイルを作成する。
Bram Moolenaara9604e62018-07-21 05:56:22 +0200317 '\-r \-s' の後に指定した数値がファイル中の行番号に加算され、結果、余計なバイトが飛ばされる。
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200318.br
319\fI% echo "010000: 41" | xxd \-r \-s \-0x10000 > file\fR
320.PP
321.B vim(1)
322の中から xxd をフィルタとして実行し、
323マークされた `a' から `z' までの領域を 16 進ダンプする。
324.br
325\fI:'a,'z!xxd\fR
326.PP
327.B vim(1)
328の中から xxd をフィルタとして実行し、
329マークされた `a' から `z' までの領域をバイナリに戻す。
330.br
331\fI:'a,'z!xxd \-r\fR
332.PP
333.B vim(1)
Bram Moolenaara9604e62018-07-21 05:56:22 +0200334の中から xxd をフィルタとして実行し、16 進ダンプされた行を元に戻す。
335戻したい行にカーソルを移動して:
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200336.br
337\fI!!xxd \-r\fR
338.PP
339シリアル行から一文字読み込む
340.br
341\fI% xxd \-c1 < /dev/term/b &\fR
342.br
343\fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
344.br
345\fI% echo \-n foo > /dev/term/b\fR
346.PP
347.SH 返り値
348以下のエラー値が返ります:
349.TP
3500
351エラーなし。
352.TP
353\-1
K.Takataef07a762023-12-20 04:21:40 +0900354操作がサポートされていない
355\%(\c
356.I \%xxd \-r \-i
Bram Moolenaara3fe8fe2013-07-13 15:33:20 +0200357はまだ不可です)。
358.TP
3591
360引数の解釈に関するエラー。
361.TP
3622
363入力ファイルに関する問題。
364.TP
3653
366出力ファイルに関する問題。
367.TP
3684,5
369指定された位置へシークできなかった。
370.SH 関連項目
371uuencode(1), uudecode(1), patch(1)
372.br
373.SH 警告
374この奇妙なツールは作者が使いやすいように作られています。
375自己責任で使ってください。ファイルをコピーし、それを調べ、ウィザードたれ。
376.br
377.SH バージョン
378このマニュアルは xxd バージョン 1.7 について説明しています。
379.SH 著者
380.br
381(c) 1990-1997 by Juergen Weigert
382.br
383<jnweiger@informatik.uni\-erlangen.de>
384.LP
385私の功績として自由に配布してください。
386.br
387儲かったら教えてください。
388.br
389損しても知りません。
390.PP
391マニュアルは Tony Nugent
392.br
393<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
394.br
395によって書かれ、
396Bram Moolenaar が少し変更を加え、
397Juergen Weigert が編集しました。
398.PP