Manpages

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 [AT] informatik.de>

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

Tony Nugent
<tony [AT] sctnugen.au> <T.Nugent [AT] sct.au> 最 先 开 始 写 本 手 册 页
Bram Moolenaar 做 了 一 些 小 的 改 动 , Juergen Weigert 完 成 了 手 册 页 的 编 写 。

[中 文 版 维 护 人 ]

唐 友 <tony_ty [AT] 263.net>

[中 文 版 最 新 更 新 ]

2002/1/22

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

http://cmpp.linuxforum.net

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh