Imported upstream version 1.5
[manpages-zh.git] / src / man1 / xxd.1
bloba82fac688727fa807915d9bb6d2862e002320589
1 .TH XXD 1 "August 1996" "Manual page for xxd"
3 .\"
4 .\" 21st May 1996
5 .\" Man page author:
6 .\"    Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
7 .\"    Changes by Bram Moolenaar <Bram@vim.org>
9 .SH NAME
10 .I xxd
11 \- 以十六进制形式表示
13 .SH "总览 (SYNOPSIS)"
14 .B xxd
15 \-h[elp]
16 .br
17 .B xxd
18 [options] [infile [outfile]]
19 .br
20 .B xxd
21 \-r[evert] [options] [infile [outfile]]
23 .SH "描述 (DESCRIPTION)"
24 .I xxd
25 建立 一个 指定 文件 或者 标准 输入 的 十六 进制 转储, 同时 也 可以
26 把 十六 进制 转储 转换成 原来的 二进制 形式. 同
27 .BR uuencode(1)
28
29 .BR uudecode(1)
30 一样, 它 也可以 把 二进制 数据 转换成 ASCII 表示 形式, 这样 电子邮件 就可以
31 安全的 传输. 但是 它 有 一个 优点, 就是 可以 把 解码后 的 结果 输出 到
32 标准输出. 同时 它 还可以 用来 给 二进制 文件 打补丁.
34 .SH "选项 (OPTIONS)"
35 如果 没有 给定
36 .I infile
37 就用 标准输入. 如果
38 .I infile
39 是 一个
40 .RB \` \- \'
41 字符, 也从 标准输入 读入. 如果 没有 给定
42 .I outfile
43 (或者 它的 文件名 是 一个
44 .RB \` \- \'
45 字符), 结果 将 输出至 标准输出.
46 .PP
47 注意 我们 用的 是 一个 很 "懒" 的 解析器, 它 只 检查 选项的 第一个 字符,
48 除非 这个 选项 有 参数. 在 一个 单 字符 的 选项 和 它的 参数 之间的 空格
49 可有可无. 选项的 参数 可以 用 十进制, 十六进制 或者 八进制的 形式 指定.
50 也就是说
51 .RB \-c8 ,
52 .BR "\-c 8" ,
53 .B \-c 010
54
55 .B \-cols 8
56 是 等价的.
57 .PP
58 .TP
59 .IR \-a " | " \-autoskip
60 打开/关闭 autoskip: 用一个 单独的 '*' 来 代替 空行. 默认 关闭.
61 .TP
62 .IR \-b " | " \-bits
63 转到 比特(二进制 数字) 模式, 而 不是 十六进制 模式. 在 这种 模式 下,
64 每个 字符 被 表示成 八个 0/1 的 数字, 而 不是 一般的 十六进制 形式.
65 每 一行 都 以 一个 用 十六进制 形式 表示的 行号, 后面 是 ascii (或者 ebcdic)
66 形式 开头. 命令行 选项 \-r, \-p, \-i 在 这个 模式下 不起作用.
67 .TP
68 .IR "\-c cols " | " \-cols cols"
69 .IR "\-c cols " | " \-cols cols"
70 每行 表示
71 .RI < cols >
72 个 字符. 默认 16 (\-i: 12, \-ps: 30, \-b: 6). 最多 256.
73 .TP
74 .IR \-E " | " \-EBCDIC
75 把 右手边的 字符 编码 从 ASCII 变为 EBCDIC. 这个 并不 改变 其 十六进制
76 表示 形式. 同 \-r, \-p 或者 \-i 一起用 是 没有 意义的.
77 .TP
78 .IR "\-g bytes " | " \-groupsize bytes"
79
80 .RI < bytes >
81 个 字符 (每 两个 十六进制 字符 或者 八个 二进制 数字) 之间 用 一个 空格 隔开.
82
83 .I \-g 0
84 禁止 分组. 在 普通 模式 中
85 .RI < Bytes "> 默认 是 " 2
86 在 二进制 模式 中 是 \fI1\fP. 分组 并不 适用于 postscript 或者
87 include style 选项.
88 .TP
89 .IR \-h " | " \-help
90 显示 可用 命令 概述 并且 退出. 不做 其它 任何 事情.
91 .TP
92 .IR \-i " | " \-include
93 输出 为 C 语言的 包含 文件 形式. 除非 xxd 从 标准输入 读入, 不然 会 输出 一个
94 完整的 静态 数组 定义(与 输入 文件 同名).
95 .TP
96 .IR "\-l len " | " \-len len"
97 输出
98 .RI  < len >
99 个 字符 后 停止.
101 .IR \-p " | " \-ps " | " \-postscript " | " \-plain
102 以 postscript 的 连续 十六进制 转储 输出. 这 也叫做 纯 十六进制 转储.
104 .IR \-r " | " \-revert
105 逆向 操作: 把 十六进制 转储 转换 (或者 打补丁) 成 二进制 形式. 如果 不 输出 到
106 标准输出, xxd 并不把 输出 文件 截断, 而是 直接 写到 输出 文件. 用
107 .I \-r \-p
108 来 从 一个 没有 行号 没有 某种 列格式 的 纯 十六进制 转储 读入. 附加的 空格
109 和 换行 可以 出现 在 任何 地方.
111 .I \-seek offset
112 用在
113 .I \-r
114 之后: 会在 当前 文件的 偏移量 上 增加
115 .RI < offset > .
117 .I \-s [\+][\-]seek
118 从 infile 的 绝对 或者 相对 偏移量
119 .RI < seek >
120 开始.
121 \fI\+ \fR 表示 相对于 标准 输入 当前的 位置 (如果 不是 标准输入 就
122 没有 意义了). \fI\- \fR 表示 从 文件 末尾 (如果 和 \fI \+ \fR 连用:
123 从 标准输入 当前 位置) 向前 数 一些 字符, 从 那个
124 地方 开始. 如果 没有 \-s 选项, xxd 从 当前 位置 开始.
126 .I \-u
127 用大写字母. 默认的是小写字母.
129 .IR \-v " | " \-version
130 显示 版本 字符串.
132 .SH "告诫 (CAVEATS)"
134 .I xxd \-r
135 在 对待 行号 上 有一些 地方 值得 注意. 如过 输出 文件 可以 定位,
136 那么 在 十六进制 文件 中的 行首的 行号 可以 重叠, 顺序 可以 打乱,
137 还 可以 略去 一些 行号. 这种 情况 下, xxd 会 用 lseek(2) 来 定位.
138 如果 输出 文件 不可以 定位, 那么 行号 可以 不连续, 但是 必须 按
139 顺序, 这种 情况 下, 中间 会 插入 null 字符.
141 .I xxd \-r
142 从不 输出 解析 错误. 错误 会 被跳过.
144 在 编辑 十六进制 文件时 要 注意
145 .I xxd \-r
146 在 读入 足够列 之后 会跳过 本行 后面 所有的 数据 (见 选项 \-c).
147 这 就是说 对可打印的 ASCII (或者 EBCDIC) 的修改 都会被 忽略. 用
148 xxd \-r \-p 把一个 纯十六进制 转储文件 (或者 postscript) 恢复 成
149 二进制文件 与 列数 是否 正确 没有 什么 关系, 它会 解释 所有 看起来
150 像 两个 十六进制的 数字.
152 请 注意
154 \fI% xxd \-i file\fR
158 \fI% xxd \-i \< file\fR
159 的 区别.
161 因为 lseek(2) 是 用来 重置 输入指针的, 所以
162 .I xxd \-s \+seek
164 .I xxd \-s seek
165 是 有区别的. 如果 输入 是 标准输入, 并且 在 xxd 被执行是 它的 标准输入的 指针
166 位置 不是在 文件的 开头, 那么 多了个 '+' 效果 就会 不一样了. 下面的 例子 可能
167 帮助你 弄清楚(也可能 让你 更糊涂)...
169 在读 之前 需要 重置 输入的 文件指针; 因为 `cat' 已经 读到了 输入的 文件尾.
171 \fI% sh \-c 'cat > plain_copy; xxd \-s 0 > hex_copy' < file
173 从 0x480 (=1024+128) 开始读. `+' 表明 "相对于 当前的 文件位置", 也就是说
174 从 dd 读了 1k, 在此 基础上 再加 `128'.
176 \fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet' < file
178 从 0x100 ( = 1024-768) 开始读.
180 \fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +-768 > hex_snippet' < file
182 可是, 这种 情况 很少 发生, 我们 也 很少 需要用 `+'. 当用了 \-s 是, 作者 比较
183 喜欢 用 strace(1) 或者 truss(1) 去 监控 xxd 的 行为.
185 .SH "例子 (EXAMPLES)"
188 (译者: 实际 输出 可能 和 例子 有 一些 出入, 只要 理解 其 意思 就行了)
190 显示 \fBfile\fP 除了 前 三行 (十六进制 的 0x30) 的 所有 内容.
192 \fI% xxd \-s 0x30 file
195 显示 \fBfile\fP 最后 三行 (十六进制 的 0x30) 的 所有 内容.
197 \fI% xxd \-s \-0x30 file
200 显示 120 个 字符, 每行 20 个 字符, 连续 显示.
202 \fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
204 2e544820585844203120224d616e75616c207061
206 676520666f7220787864220a2e5c220a2e5c2220
208 32317374204d617920313939360a2e5c22204d61
210 6e207061676520617574686f723a0a2e5c222020
212 2020546f6e79204e7567656e74203c746f6e7940
214 7363746e7567656e2e7070702e67752e6564752e
218 显示 120 个 字符, 每行 12 个 字符.
220 \fI% xxd \-l 120 \-c 12 xxd.1\fR
222 0000000: 2e54 4820 5858 4420 3120 224d  .TH XXD 1 "M
224 000000c: 616e 7561 6c20 7061 6765 2066  anual page f
226 0000018: 6f72 2078 7864 220a 2e5c 220a  or xxd"..\\".
228 0000024: 2e5c 2220 3231 7374 204d 6179  .\\" 21st May
230 0000030: 2031 3939 360a 2e5c 2220 4d61   1996..\\" Ma
232 000003c: 6e20 7061 6765 2061 7574 686f  n page autho
234 0000048: 723a 0a2e 5c22 2020 2020 546f  r:..\\"    To
236 0000054: 6e79 204e 7567 656e 7420 3c74  ny Nugent <t
238 0000060: 6f6e 7940 7363 746e 7567 656e  ony@sctnugen
240 000006c: 2e70 7070 2e67 752e 6564 752e  .ppp.gu.edu.
243 只 显示 xxd.1 中 的 日期.
245 \fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
247 0000028: 3231 7374 204d 6179 2031 3939  21st May 199
251 .B input_file
252 考到
253 .B output_file
254 并 在 前面 增加 100 个 字节的 0x00.
256 \fI% xxd input_file | xxd \-r \-s 100 \> output_file\fR
260 给 文件 xxd.1 中的 日期 打 补钉.
262 \fI% echo '0000029: 3574 68' | xxd \-r \- xxd.1\fR
264 \fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
266 0000028: 3235 7468 204d 6179 2031 3939  25th May 199
269 建立 一个 65537 字节的 文件, 所有 字节 都是 0x00,
270 除了 最后 一个 字节 是 'A' (十六进制 0x41).
272 \fI% echo \'010000: 41\' | xxd \-r \> file\fR
275 打开 autoskip, 显示 上例 中 建立的 文件.
277 \fI% xxd \-a \-c 12 file\fR
279 0000000: 0000 0000 0000 0000 0000 0000  ............
283 000fffc: 0000 0000 40                   ....A
285 建立 一个 只 含有 一个 'A' 的 文件. '\-r \-s' 后面 的
286 数字 同 文件 中的 行号 相 抵消; 结果是 开头 的 字节 被
287 跳过了.
289 \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> file\fR
291 在 编辑器, 比如
292 .B vim(1)
293 中 把 xxd 当成 一个 过滤 程序 来用, 用 十六进制 来 显示
294 被 标记 为 'a' 和 'z' 中间 的 区域.
296 \fI:'a,'z!xxd\fR
298 在 编辑器, 比如
299 .B vim(1)
300 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 
301 被 标记 为 'a' 和 'z' 中间 的 区域 的 十六进制 显示.
303 \fI:'a,'z!xxd \-r\fR
305 在 编辑器, 比如
306 .B vim(1)
307 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 一行的
308 十六进治 显示. 把 光标 移动 到 相应行 并 键入:
310 \fI!!xxd \-r\fR
312 从 串行线 中 读入 一个个的 单独的 字符.
314 \fI% xxd \-c1 < /dev/term/b &\fR
316 \fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
318 \fI% echo \-n foo > /dev/term/b\fR
321 .SH "返回值 (RETURN VALUES)"
322 此 程序 返回 如下的 错误码:
325 一切 正常.
328 不支持 此 操作 (
329 .I xxd \-r \-i
330 仍然 不行).
333 解析 选项 错误.
336 输入 文件 出错.
339 输出 文件 出错.
342 指定 的 偏移量 地址 不可 到达.
344 .SH "参见 (SEE ALSO)"
345 uuencode(1), uudecode(1), patch(1)
348 .SH "警告 (WARNINGS)"
349 这个 工具 古怪的 念头 是其 作者的 意思. 使用 这个 工具的 任何 结果 都由 自己
350 负责. 使用它, 探索它, 你 终会 成为 一个 高手.
353 .SH "版本 (VERSION)"
354 此 手册页 为 1.7 版本的 xxd 而写.
356 .SH "作者 (AUTHOR)"
358 (c) 1990-1997 by Juergen Weigert
360 <jnweiger@informatik.uni-erlangen.de>
362 Distribute freely and credit me,
364 make money and share with me,
366 lose money and don't ask me.
368 Tony Nugent 
370 <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
371 最先 开始 写 本 手册页
373 Bram Moolenaar 做了 一些 小的 改动.
374 Juergen Weigert 完成了 手册页 的 编写.
377 .SH "[中文版维护人]"
378 .B 唐友 \<tony_ty@263.net\>
379 .SH "[中文版最新更新]"
380 .BR 2002/1/22
381 .SH "[中国Linux论坛man手册页翻译计划]"
382 .BI http://cmpp.linuxforum.net