1 .TH XXD 1 "August 1996" "Manual page for xxd"
6 .\" Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
7 .\" Changes by Bram Moolenaar <Bram@vim.org>
18 [options] [infile [outfile]]
21 \-r[evert] [options] [infile [outfile]]
23 .SH "描述 (DESCRIPTION)"
25 建立 一个 指定 文件 或者 标准 输入 的 十六 进制 转储, 同时 也 可以
26 把 十六 进制 转储 转换成 原来的 二进制 形式. 同
30 一样, 它 也可以 把 二进制 数据 转换成 ASCII 表示 形式, 这样 电子邮件 就可以
31 安全的 传输. 但是 它 有 一个 优点, 就是 可以 把 解码后 的 结果 输出 到
32 标准输出. 同时 它 还可以 用来 给 二进制 文件 打补丁.
41 字符, 也从 标准输入 读入. 如果 没有 给定
47 注意 我们 用的 是 一个 很 "懒" 的 解析器, 它 只 检查 选项的 第一个 字符,
48 除非 这个 选项 有 参数. 在 一个 单 字符 的 选项 和 它的 参数 之间的 空格
49 可有可无. 选项的 参数 可以 用 十进制, 十六进制 或者 八进制的 形式 指定.
59 .IR \-a " | " \-autoskip
60 打开/关闭 autoskip: 用一个 单独的 '*' 来 代替 空行. 默认 关闭.
63 转到 比特(二进制 数字) 模式, 而 不是 十六进制 模式. 在 这种 模式 下,
64 每个 字符 被 表示成 八个 0/1 的 数字, 而 不是 一般的 十六进制 形式.
65 每 一行 都 以 一个 用 十六进制 形式 表示的 行号, 后面 是 ascii (或者 ebcdic)
66 形式 开头. 命令行 选项 \-r, \-p, \-i 在 这个 模式下 不起作用.
68 .IR "\-c cols " | " \-cols cols"
69 .IR "\-c cols " | " \-cols cols"
72 个 字符. 默认 16 (\-i: 12, \-ps: 30, \-b: 6). 最多 256.
74 .IR \-E " | " \-EBCDIC
75 把 右手边的 字符 编码 从 ASCII 变为 EBCDIC. 这个 并不 改变 其 十六进制
76 表示 形式. 同 \-r, \-p 或者 \-i 一起用 是 没有 意义的.
78 .IR "\-g bytes " | " \-groupsize bytes"
81 个 字符 (每 两个 十六进制 字符 或者 八个 二进制 数字) 之间 用 一个 空格 隔开.
85 .RI < Bytes "> 默认 是 " 2
86 在 二进制 模式 中 是 \fI1\fP. 分组 并不 适用于 postscript 或者
90 显示 可用 命令 概述 并且 退出. 不做 其它 任何 事情.
92 .IR \-i " | " \-include
93 输出 为 C 语言的 包含 文件 形式. 除非 xxd 从 标准输入 读入, 不然 会 输出 一个
94 完整的 静态 数组 定义(与 输入 文件 同名).
96 .IR "\-l len " | " \-len len"
101 .IR \-p " | " \-ps " | " \-postscript " | " \-plain
102 以 postscript 的 连续 十六进制 转储 输出. 这 也叫做 纯 十六进制 转储.
104 .IR \-r " | " \-revert
105 逆向 操作: 把 十六进制 转储 转换 (或者 打补丁) 成 二进制 形式. 如果 不 输出 到
106 标准输出, xxd 并不把 输出 文件 截断, 而是 直接 写到 输出 文件. 用
108 来 从 一个 没有 行号 没有 某种 列格式 的 纯 十六进制 转储 读入. 附加的 空格
114 之后: 会在 当前 文件的 偏移量 上 增加
118 从 infile 的 绝对 或者 相对 偏移量
121 \fI\+ \fR 表示 相对于 标准 输入 当前的 位置 (如果 不是 标准输入 就
122 没有 意义了). \fI\- \fR 表示 从 文件 末尾 (如果 和 \fI \+ \fR 连用:
123 从 标准输入 当前 位置) 向前 数 一些 字符, 从 那个
124 地方 开始. 如果 没有 \-s 选项, xxd 从 当前 位置 开始.
129 .IR \-v " | " \-version
135 在 对待 行号 上 有一些 地方 值得 注意. 如过 输出 文件 可以 定位,
136 那么 在 十六进制 文件 中的 行首的 行号 可以 重叠, 顺序 可以 打乱,
137 还 可以 略去 一些 行号. 这种 情况 下, xxd 会 用 lseek(2) 来 定位.
138 如果 输出 文件 不可以 定位, 那么 行号 可以 不连续, 但是 必须 按
139 顺序, 这种 情况 下, 中间 会 插入 null 字符.
142 从不 输出 解析 错误. 错误 会 被跳过.
146 在 读入 足够列 之后 会跳过 本行 后面 所有的 数据 (见 选项 \-c).
147 这 就是说 对可打印的 ASCII (或者 EBCDIC) 的修改 都会被 忽略. 用
148 xxd \-r \-p 把一个 纯十六进制 转储文件 (或者 postscript) 恢复 成
149 二进制文件 与 列数 是否 正确 没有 什么 关系, 它会 解释 所有 看起来
158 \fI% xxd \-i \< file\fR
161 因为 lseek(2) 是 用来 重置 输入指针的, 所以
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 的 行为.
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.
245 \fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
247 0000028: 3231 7374 204d 6179 2031 3939 21st May 199
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 数字 同 文件 中的 行号 相 抵消; 结果是 开头 的 字节 被
289 \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> file\fR
293 中 把 xxd 当成 一个 过滤 程序 来用, 用 十六进制 来 显示
294 被 标记 为 'a' 和 'z' 中间 的 区域.
300 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复
301 被 标记 为 'a' 和 'z' 中间 的 区域 的 十六进制 显示.
307 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 一行的
308 十六进治 显示. 把 光标 移动 到 相应行 并 键入:
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)"
345 uuencode(1), uudecode(1), patch(1)
349 这个 工具 古怪的 念头 是其 作者的 意思. 使用 这个 工具的 任何 结果 都由 自己
350 负责. 使用它, 探索它, 你 终会 成为 一个 高手.
354 此 手册页 为 1.7 版本的 xxd 而写.
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.
370 <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
373 Bram Moolenaar 做了 一些 小的 改动.
374 Juergen Weigert 完成了 手册页 的 编写.
378 .B 唐友 \<tony_ty@263.net\>
381 .SH "[中国Linux论坛man手册页翻译计划]"
382 .BI http://cmpp.linuxforum.net