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 +seek 和 xxd -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 一 切 正 常 |
.
操 作 ( xxd -r
-i 仍 然 不 行 ). 地 址 不 可 到 达 . 参 见 (SEE ALSO)uuencode(1), uudecode(1), patch(1) 警 告 (WARNINGS)这 个 工 具 古 怪 的 念 头 是 其 作 者 的 意 思 . 使 用 这 个 工 具 的 任 何 结 果 都 由 自 己 负 责 . 使 用 它 , 探 索 它 , 你 终 会 成 为 一 个 高 手 . 版 本 (VERSION)此 手 册 页 为 1.7 版 本 的 xxd 而 写 . 作 者 (AUTHOR)(c) 1990-1997
by Juergen Weigert Distribute
freely and credit me, Tony Nugent
[中 文 版 维 护 人 ]唐 友 <tony_ty [AT] 263.net> [中 文 版 最 新 更 新 ]2002/1/22 [中 国 Linux论 坛 man手 册 页 翻 译 计 划 ]跋本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh |