Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       xxd - 以十六进制形式表示

总览 (SYNOPSIS)

       xxd -h[elp]
       xxd [options] [infile [outfile]]
       xxd -r[evert] [options] [infile [outfile]]

描述 (DESCRIPTION)

       xxd  建立  一个 指定 文件 或者 标准 输入 的 十六 进制 转储, 同时 也 可以 把 十六 进制 转储
       转换成 原来的 二进制 形式. 同 uuencode(1)uudecode(1) 一样, 它 也可以 把 二进制 数据 转
       换成 ASCII 表示 形式, 这样 电子邮件 就可以 安全的 传输. 但是 它 有 一个 优点, 就是 可以 把
       解码后 的 结果 输出 到 标准输出. 同时 它 还可以 用来 给 二进制 文件 打补丁.

选项 (OPTIONS)

       如果 没有 给定 infile 就用 标准输入. 如果 infile 是 一个 `-´ 字符, 也从 标准输入 读入.  如
       果 没有 给定 outfile (或者 它的 文件名 是 一个 `-´ 字符), 结果 将 输出至 标准输出.

       注意 我们 用的 是 一个 很 "懒" 的 解析器, 它 只 检查 选项的 第一个 字符, 除非 这个 选项 有
       参数. 在 一个 单 字符 的 选项 和 它的 参数 之间的 空格 可有可无. 选项的 参数 可以 用  十进
       制, 十六进制 或者 八进制的 形式 指定.  也就是说 -c8, -c 8, -c 010-cols 8 是 等价的.

       -a | -autoskip
              打开/关闭 autoskip: 用一个 单独的 '*' 来 代替 空行. 默认 关闭.

       -b | -bits
              转到  比特(二进制  数字) 模式, 而 不是 十六进制 模式. 在 这种 模式 下, 每个 字符 被
              表示成 八个 0/1 的 数字, 而 不是 一般的 十六进制 形式.  每 一行 都 以 一个 用  十六
              进制  形式  表示的 行号, 后面 是 ascii (或者 ebcdic) 形式 开头. 命令行 选项 -r, -p,
              -i 在 这个 模式下 不起作用.

       -c cols | -cols cols
              -c cols | -cols cols 每行 表示 <cols> 个 字符. 默认 16 (-i: 12, -ps: 30, -b: 6). 最
              多 256.

       -E | -EBCDIC
              把  右手边的  字符 编码 从 ASCII 变为 EBCDIC. 这个 并不 改变 其 十六进制 表示 形式.
              同 -r, -p 或者 -i 一起用 是 没有 意义的.

       -g bytes | -groupsize bytes
              每 <bytes> 个 字符 (每 两个 十六进制 字符 或者 八个 二进制 数字) 之间 用 一个  空格
              隔开.  用 -g 0 禁止 分组. 在 普通 模式 中 <Bytes> 默认 是 2 在 二进制 模式 中 是 1.
              分组 并不 适用于 postscript 或者 include style 选项.

       -h | -help
              显示 可用 命令 概述 并且 退出. 不做 其它 任何 事情.

       -i | -include
              输出 为 C 语言的 包含 文件 形式. 除非 xxd 从 标准输入 读入, 不然 会 输出 一个  完整
              的 静态 数组 定义(与 输入 文件 同名).

       -l len | -len len
              输出 <len> 个 字符 后 停止.

       -p | -ps | -postscript | -plain
              以 postscript 的 连续 十六进制 转储 输出. 这 也叫做 纯 十六进制 转储.

       -r | -revert
              逆向 操作: 把 十六进制 转储 转换 (或者 打补丁) 成 二进制 形式. 如果 不 输出 到 标准
              输出, xxd 并不把 输出 文件 截断, 而是 直接 写到 输出 文件. 用 -r -p 来 从 一个 没有
              行号 没有 某种 列格式 的 纯 十六进制 转储 读入. 附加的 空格 和 换行 可以 出现 在 任
              何 地方.

       -seek offset
              用在 -r 之后: 会在 当前 文件的 偏移量 上 增加 <offset>.

       -s [+][-]seek
              从 infile 的 绝对 或者 相对 偏移量 <seek> 开始.  +  表示 相对于 标准 输入 当前的 位
              置  (如果 不是 标准输入 就 没有 意义了). -  表示 从 文件 末尾 (如果 和  +  连用: 从
              标准输入 当前 位置) 向前 数 一些 字符, 从 那个 地方 开始. 如果 没有 -s 选项, xxd 从
              当前 位置 开始.

       -u     用大写字母. 默认的是小写字母.

       -v | -version
              显示 版本 字符串.

告诫 (CAVEATS)

       xxd  -r  在 对待 行号 上 有一些 地方 值得 注意. 如过 输出 文件 可以 定位, 那么 在 十六进制
       文件 中的 行首的 行号 可以 重叠, 顺序 可以 打乱, 还 可以 略去 一些 行号. 这种 情况 下, xxd
       会  用  lseek(2) 来 定位.  如果 输出 文件 不可以 定位, 那么 行号 可以 不连续, 但是 必须 按
       顺序, 这种 情况 下, 中间 会 插入 null 字符.

       xxd -r 从不 输出 解析 错误. 错误 会 被跳过.

       在 编辑 十六进制 文件时 要 注意 xxd -r 在 读入 足够列 之后 会跳过 本行  后面  所有的  数据
       (见  选项  -c).  这 就是说 对可打印的 ASCII (或者 EBCDIC) 的修改 都会被 忽略. 用 xxd -r -p
       把一个 纯十六进制 转储文件 (或者 postscript) 恢复 成 二进制文件 与 列数 是否 正确 没有  什
       么 关系, 它会 解释 所有 看起来 像 两个 十六进制的 数字.

       请 注意
       % xxd -i file% xxd -i < file 的 区别.

       因为  lseek(2) 是 用来 重置 输入指针的, 所以 xxd -s +seekxxd -s seek 是 有区别的. 如果
       输入 是 标准输入, 并且 在 xxd 被执行是 它的 标准输入的 指针 位置 不是在 文件的 开头,  那么
       多了个 '+' 效果 就会 不一样了. 下面的 例子 可能 帮助你 弄清楚(也可能 让你 更糊涂)...

       在读 之前 需要 重置 输入的 文件指针; 因为 `cat' 已经 读到了 输入的 文件尾.
       % sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file

       从 0x480 (=1024+128) 开始读. `+' 表明 "相对于 当前的 文件位置", 也就是说 从 dd 读了 1k, 在
       此 基础上 再加 `128'.
       % sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet' < file

       从 0x100 ( = 1024-768) 开始读.
       % sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet' < file

       可是, 这种 情况 很少 发生, 我们 也 很少 需要用 `+'.  当用了  -s  是,  作者  比较  喜欢  用
       strace(1) 或者 truss(1) 去 监控 xxd 的 行为.

例子 (EXAMPLES)

       (译者: 实际 输出 可能 和 例子 有 一些 出入, 只要 理解 其 意思 就行了)
       显示 file 除了 前 三行 (十六进制 的 0x30) 的 所有 内容.
       % xxd -s 0x30 file

       显示 file 最后 三行 (十六进制 的 0x30) 的 所有 内容.
       % xxd -s -0x30 file

       显示 120 个 字符, 每行 20 个 字符, 连续 显示.
       % xxd -l 120 -ps -c 20 xxd.1
       2e544820585844203120224d616e75616c207061
       676520666f7220787864220a2e5c220a2e5c2220
       32317374204d617920313939360a2e5c22204d61
       6e207061676520617574686f723a0a2e5c222020
       2020546f6e79204e7567656e74203c746f6e7940
       7363746e7567656e2e7070702e67752e6564752e

       显示 120 个 字符, 每行 12 个 字符.
       % xxd -l 120 -c 12 xxd.1
       0000000: 2e54 4820 5858 4420 3120 224d  .TH XXD 1 "M
       000000c: 616e 7561 6c20 7061 6765 2066  anual page f
       0000018: 6f72 2078 7864 220a 2e5c 220a  or xxd"..\".
       0000024: 2e5c 2220 3231 7374 204d 6179  .\" 21st May
       0000030: 2031 3939 360a 2e5c 2220 4d61   1996..\" Ma
       000003c: 6e20 7061 6765 2061 7574 686f  n page autho
       0000048: 723a 0a2e 5c22 2020 2020 546f  r:..\"    To
       0000054: 6e79 204e 7567 656e 7420 3c74  ny Nugent <t
       0000060: 6f6e 7940 7363 746e 7567 656e  ony@sctnugen
       000006c: 2e70 7070 2e67 752e 6564 752e  .ppp.gu.edu.

       只 显示 xxd.1 中 的 日期.
       % xxd -s 0x28 -l 12 -c 12 xxd.1
       0000028: 3231 7374 204d 6179 2031 3939  21st May 199

       把 input_file 考到 output_file 并 在 前面 增加 100 个 字节的 0x00.
       % xxd input_file | xxd -r -s 100 > output_file

       给 文件 xxd.1 中的 日期 打 补钉.
       % echo '0000029: 3574 68' | xxd -r - xxd.1
       % xxd -s 0x28 -l 12 -c 12 xxd.1
       0000028: 3235 7468 204d 6179 2031 3939  25th May 199

       建立  一个  65537  字节的  文件, 所有 字节 都是 0x00, 除了 最后 一个 字节 是 'A' (十六进制
       0x41).
       % echo ´010000: 41´ | xxd -r > file

       打开 autoskip, 显示 上例 中 建立的 文件.
       % xxd -a -c 12 file
       0000000: 0000 0000 0000 0000 0000 0000  ............
       *
       000fffc: 0000 0000 40                   ....A

       建立 一个 只 含有 一个 'A' 的 文件. '-r -s' 后面 的 数字 同 文件 中的 行号 相 抵消; 结果是
       开头 的 字节 被 跳过了.
       % echo '010000: 41' | xxd -r -s -0x10000 > file

       在  编辑器, 比如 vim(1) 中 把 xxd 当成 一个 过滤 程序 来用, 用 十六进制 来 显示 被 标记 为
       'a' 和 'z' 中间 的 区域.
       :'a,'z!xxd

       在 编辑器, 比如 vim(1) 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 被 标记 为 'a' 和 'z'
       中间 的 区域 的 十六进制 显示.
       :'a,'z!xxd -r

       在 编辑器, 比如 vim(1) 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 一行的 十六进治 显示.
       把 光标 移动 到 相应行 并 键入:
       !!xxd -r

       从 串行线 中 读入 一个个的 单独的 字符.
       % xxd -c1 < /dev/term/b &
       % stty < /dev/term/b -echo -opost -isig -icanon min 1
       % echo -n foo > /dev/term/b

返回值 (RETURN VALUES)

       此 程序 返回 如下的 错误码:

       0      一切 正常.

       -1     不支持 此 操作 ( xxd -r -i 仍然 不行).

       1      解析 选项 错误.

       2      输入 文件 出错.

       3      输出 文件 出错.

       4,5    指定 的 偏移量 地址 不可 到达.

参见 (SEE ALSO)

       uuencode(1), uudecode(1), patch(1)

警告 (WARNINGS)

       这个 工具 古怪的 念头 是其 作者的 意思. 使用 这个 工具的 任何 结果 都由 自己 负责. 使用它,
       探索它, 你 终会 成为 一个 高手.

版本 (VERSION)

       此 手册页 为 1.7 版本的 xxd 而写.

作者 (AUTHOR)

       (c) 1990-1997 by Juergen Weigert
       <jnweiger@informatik.uni-erlangen.de>

       Distribute freely and credit me,
       make money and share with me,
       lose money and don't ask me.

       Tony Nugent
       <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au> 最先 开始 写 本 手册页
       Bram Moolenaar 做了 一些 小的 改动.  Juergen Weigert 完成了 手册页 的 编写.

[中文版维护人]

       唐友 <tony_ty@263.net>

[中文版最新更新]

       2002/1/22

[中国Linux论坛man手册页翻译计划]

       http://cmpp.linuxforum.net