NAME 命 令 名
bzip2, bunzip2
- 一 种 块 排 序 文
件 压 缩 软 件 , v0.9.5
bzcat - 将 文 件 解 压
缩 至 标 准 输 出
bzip2recover - 恢 复 损 坏 的
bzip2 文 件
总 览
bzip2 [
-cdfkqstvzVL123456789 ] [ filenames ... ]
bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename
描 述
bzip2 采 用 Burrows-Wheeler 块 排 序 文 本 压 缩 算 法 和 Huffman 编 码 方 式 压 缩 文 件 。 压 缩 率 一 般 比 基 于 LZ77/LZ78 的 压 缩 软 件 好 得 多 , 其 性 能 接 近 PPM 族 统 计 类 压 缩 软 件 。 命 令 行 参 数 有 意 设 计 为 非 常 接 近 GNU gzip 的 形 式 , 但 也 不 完 全 相 同 。
bzip2 从 命 令 行 读 入 文 件 名 和 参 数 。 每 个 文 件 被 名 为 "原 始 文 件 名 .bz2" 的 压 缩 文 件 替 换 。 每 个 压 缩 文 件 具 有 与 原 文 件 相 同 的 修 改 时 间 、 权 限 , 如 果 可 能 的 话 , 还 具 有 相 同 的 属 主 , 因 此 在 解 压 缩 时 这 些 特 性 将 正 确 地 恢 复 。 在 某 些 文 件 系 统 中 , 没 有 权 限 、 属 主 或 时 间 的 概 念 , 或 者 对 文 件 名 的 长 度 有 严 格 限 制 , 例 如 MSDOS, 在 这 种 情 况 下 , bzip2 没 有 保 持 原 文 件 名 、 属 主 、 权 限 以 及 时 间 的 机 制 , 从 这 个 意 义 上 说 , bzip2 对 文 件 名 的 处 理 是 幼 稚 的 。
bzip2 和 bunzip2 在 缺 省 情 况 下 不 覆 盖 已 有 的 文 件 。 如 果 想 覆 盖 已 有 的 文 件 , 要 指 定 -f 选 项 。 如 果 未 指 定 文 件 名 , bzip2 将 压 缩 来 自 标 准 输 入 的 数 据 并 写 往 标 准 输 出 。 在 这 种 情 况 下 , bzip2 会 拒 绝 将 压 缩 结 果 写 往 终 端 , 因 为 这 完 全 无 法 理 解 并 且 是 没 有 意 义 的 。
bunzip2 (以 及 bzip2 -d) 对 所 有 指 定 的 文 件 进 行 解 压 缩 处 理 。 不 是 由 bzip2 产 生 的 文 件 将 被 忽 略 , 同 时 发 出 一 个 警 告 信 息 。 bzip2 按 下 列 方 式 由 压 缩 文 件 名 确 定 解 压 后 的 文 件 名 :
filename.bz2
解 压 成 filename
filename.bz 解 压 成 filename
filename.tbz2 解 压 成 filename.tar
filename.tbz 解 压 成 filename.tar
anyothername 解 压 成 anyothername.out
如 果 文 件 名 的
后 缀 不 是 下 列
之 一 : .bz2, .bz, .tbz2 或
.tbz, .bzip2 将 抱 怨 无
法 确 定 原 始 文
件 名 , 并 采 用
原 文 件 名 加 .out
作 为 解 压 缩 文
件 名 。 在 压 缩
时 , 如 果 不 提
供 文 件 名 , bzip2 将
从 标 准 输 入 读
取 数 据 , 压 缩
结 果 写 往 标 准
输 出 。
bunzip2
能 够 正 确 地 解
压 由 两 个 或 更
多 个 压 缩 文 件
连 在 一 起 的 文
件 。 解 压 的 结
果 为 相 应 的 连
在 一 起 的 未 压
缩 文 件 。
bzip2 也 支 持 对 连 在
一 起 的 压 缩 文
件 的 完 整 性 检
查 (-t选 项 )。 同 样
可 采 用 -c 选 项 将
文 件 压 缩 或 解
压 缩 至 标 准 输
出 。 多 个 文 件
可 通 过 这 种 方
式 压 缩 或 解 压
缩 。 输 出 结 果
被 依 次 送 往 标
准 输 出 。 采 用
这 种 方 式 对 多
个 文 件 的 压 缩
将 生 成 包 含 多
个 压 缩 文 件 的
数 据 流 。 这 样
的 数 据 流 只 能
被 0.9.0 版 或 其 后 续
版 本 的 bzip2 正 确
解 压 。 较 早 版
本 的 bzip2 会 在 解
压 完 第 一 个 文
件 之 后 停 止 。
bzcat (或 bzip2 -dc) 将 所 有 指 定 文 件 解 压 缩 至 标 准 输 出 。
bzip2 可 从 环 境 变 量 BZIP2 和 BZIP 中 依 次 读 取 参 数 , 并 在 命 令 行 参 数 之 前 对 其 进 行 处 理 。 这 是 提 供 缺 省 选 项 的 方 便 途 径 。 即 使 压 缩 后 的 文 件 略 大 于 原 文 件 , 压 缩 也 总 是 照 样 进 行 。 小 于 大 约 100 字 节 的 文 件 压 缩 后 倾 向 于 变 大 , 因 为 会 有 一 个 50 字 节 的 数 据 头 。 对 于 随 机 数 据 ( 包 括 大 多 数 压 缩 软 件 的 输 出 ) , 大 约 每 字 节 压 成 8.05 位 , 放 大 率 约 为 0.5%。
bzip2 采 用 32 位 CRC 校 验 码 作 自 我 检 查 , 以 确 认 解 压 后 的 文 件 与 原 始 文 件 相 同 。 这 可 用 于 检 测 压 缩 文 件 是 否 损 坏 , 并 防 止 bzip2 中 未 知 的 缺 陷 ( 运 气 好 的 话 这 种 可 能 性 非 常 小 ) 。 数 据 损 坏 而 未 检 测 到 的 几 率 非 常 之 小 , 对 于 每 个 被 处 理 的 文 件 大 约 是 四 十 亿 分 之 一 。 检 查 是 在 解 压 缩 时 进 行 的 , 因 此 它 只 能 说 明 某 个 地 方 出 问 题 了 。 它 能 帮 助 恢 复 原 始 未 压 缩 的 数 据 。 可 以 用 bzip2recover 来 尝 试 从 损 坏 的 文 件 中 恢 复 数 据 。 返 回 值 : 正 常 退 出 返 回 0, 出 现 环 境 问 题 返 回 1 ( 文 件 未 找 到 , 非 法 的 选 项 , I/O错 误 等 ) , 返 回 2 表 明 压 缩 文 件 损 坏 , 出 现 导 致 bzip2 紧 急 退 出 的 内 部 一 致 性 错 误 ( 例 如 缺 陷 ) 时 返 回 3。
选 项
-c
--stdout 将 数 据 压 缩
或 解 压 缩 至 标
准 输 出 。
-d --decompress 强 制 解 压
缩 。 bzip2, bunzip2 以 及
bzcat 实 际 上 是 同
一 个 程 序 , 进
行 何 种 操 作 将
根 据 程 序 名 确
定 。 指 定 该 选
项 后 将 不 考 虑
这 一 机 制 , 强
制 bzip2 进 行 解 压
缩 。
-z --compress
-d 选 项 的 补 充 : 强 制 进 行 压 缩 操 作 , 而 不 管 执 行 的 是 哪 个 程 序 。
-t --test 检
查 指 定 文 件 的
完 整 性 , 但 并
不 对 其 解 压 缩
。 实 际 上 将 对
数 据 进 行 实 验
性 的 解 压 缩 操
作 , 而 不 输 出
结 果 。
-f --force 强 制 覆 盖 输
出 文 件 。 通 常
bzip2 不 会 覆 盖 已
经 存 在 的 文 件
。 该 选 项 还 强
制 bzip2 打 破 文 件
的 硬 连 接 , 缺
省 情 况 下 bzip2 不 会
这 么 做 。
-k --keep 在 压 缩 或 解
压 缩 时 保 留 输
入 文 件 ( 不 删
除 这 些 文 件 )
。
-s --small 在 压 缩 、 解
压 缩 及 检 查 时
减 少 内 存 用 量
。 采 用 一 种 修
正 的 算 法 进 行
压 缩 和 测 试 ,
每 个 数 据 块 仅
需 要 2.5 个 字 节 。
这 意 味 着 任 何
文 件 都 可 以 在 2300k
的 内 存 中 进 行
解 压 缩 , 尽 管
速 度 只 有 通 常
情 况 下 的 一 半
。 在 压 缩 时 ,
-s将 选 定 200k 的 块 长
度 , 内 存 用 量
也 限 制 在 200k 左 右
, 代 价 是 压 缩
率 会 降 低 。 总
之 , 如 果 机 器
的 内 存 较 少 (
8兆 字 节 或 更 少
) , 可 对 所 有
操 作 都 采 用 -s选
项 。 参 见 下 面
的 内 存 管 理 。
-q --quiet 压 制 不 重 要
的 警 告 信 息 。
属 于 I/O 错 误 及 其
它 严 重 事 件 的
信 息 将 不 会 被
压 制 。
-v --verbose 详 尽 模 式 --
显 示 每 个 被 处
理 文 件 的 压 缩
率 。 命 令 行 中
更 多 的 -v 选 项 将
增 加 详 细 的 程
度 , 使 bzip2 显 示 出
许 多 主 要 用 于
诊 断 目 的 信 息
。
-L --license -V --version 显 示 软
件 版 本 , 许 可
证 条 款 及 条 件
。
-1 to -9 在 压 缩 时 将
块 长 度 设 为 100 k、
200 k .. 900 k。 对 解 压 缩
没 有 影 响 。 参
见 下 面 的 内 存
管 理 。
-- 将 所 有 后 面 的 命 令 行 变 量 看 作 文 件 名 , 即 使 这 些 变 量 以 减 号 |
"-"打 头 。 可 |
用 这 一 选 项 处 理 以 减 号 "-"打 头 的 文 件 名 , 例 如 : bzip2 -- -myfilename.
--repetitive-fast --repetitive-best 这 些 选 项 在 0.9.5 及 其 以 上 版 本 中 是 多 余 的 。 在 较 早 的 版 本 中 , 这 两 个 选 项 对 排 序 算 法 的 行 为 提 供 了 一 些 粗 糙 的 控 制 , 有 些 情 况 下 很 有 用 。 0.9.5 及 其 以 上 版 本 采 用 了 改 进 的 算 法 而 与 这 些 选 项 无 关 。
内 存 管 理
bzip2
按 照 数 据 块 压
缩 大 文 件 。 数
据 块 长 度 同 时
影 响 数 据 的 压
缩 率 和 压 缩 及
解 压 缩 时 需 要
的 内 存 用 量 。
选 项 -1 至 -9 将 数 据
块 长 度 分 别 指
定 为 100,000 字 节 至
900,000( 缺 省 ) 字 节
。 在 解 压 缩 时
, 压 缩 时 使 用
的 块 长 度 从 压
缩 文 件 的 头 中
读 取 , 同 时 bunzip2
分 配 出 刚 好 够
用 的 内 存 对 文
件 进 行 解 压 缩
。 由 于 数 据 块
长 度 保 存 在 压
缩 文 件 中 , 所
以 在 解 压 缩 时
不 需 要 -1 至 -9 这 些
选 项 , 因 而 将
被 忽 略 。 可 以
按 下 面 的 公 式
估 计 压 缩 和 解
压 缩 时 的 内 存
用 量 , 单 位 为
字 节 : 压 缩 : 400k + ( 8 x
数 据 块 长 度 ) 解
压 缩 : 100k + ( 4 x 数 据 块
长 度 ), 或
100k + ( 2.5 x 数 据 块 长 度
) 大 数 据 块 长 度
产 生 迅 速 缩 小
的 临 界 返 回 (give rapidly
diminishing marginal returns)。 在 小
机 器 上 使 用 bzip2
时 , 一 个 值 得
记 住 的 事 实 是
, 大 多 数 压 缩
来 自 数 据 块 长
度 的 前 200 或 300k。
另 外 重 要 的 一
点 是 , 解 压 缩
时 内 存 的 需 要
量 是 在 压 缩 时
用 块 长 度 选 项
设 定 的 。 对 于
缺 省 用 900k 的 数 据
块 长 度 压 缩 的
文 件 , bunzip2 大 约
需 要 3700k 字 节 的 内
存 进 行 解 压 缩
。 为 支 持 一 台 4MB
机 器 上 任 何 文
件 的 解 压 缩 ,
bunzip2 有 一 个 选 项
大 约 只 需 一 半
容 量 的 内 存 ,
约 2300k 字 节 。 解 压
缩 速 度 同 样 也
降 低 一 半 。 因
此 应 该 只 在 需
要 时 采 用 该 选
项 。 相 应 的 选
项 标 志 为 -s。 一
般 来 说 , 应 尽
量 采 用 内 存 允
许 的 最 大 数 据
块 长 度 , 因 为
这 能 达 到 最 好
的 压 缩 率 , 压
缩 和 解 压 缩 速
度 实 质 上 不 受
块 长 度 的 影 响
。 另 一 个 值 得
注 意 的 问 题 是
关 于 小 于 一 个
数 据 块 长 度 的
文 件 的 , 也 就
是 说 , 所 遇 到
的 大 多 数 文 件
使 用 一 个 大 数
据 块 。 由 于 文
件 长 度 小 于 一
个 数 据 块 长 度
, 实 际 使 用 到
的 内 存 与 文 件
长 度 成 正 比 。
例 如 , 采 用 -9 选
项 压 缩 一 个 20,000 字
节 的 文 件 时 ,
将 分 配 7600k 的 内 存
, 但 其 中 只 用
到 了 400k+20000*8=560k 字 节
。 同 样 地 , 在
解 压 缩 时 将 分
配 3700k 内 存 , 但 只
用 到 100k + 20000 * 4 = 180 k 字 节
。 下 表 总 结 了
不 同 数 据 块 长
度 下 的 内 存 用
量 。 同 时 列 出
的 还 有 Calgary 文 本
压 缩 语 料 库 中
的 14 个 文 件 的 压
缩 长 度 , 这 14 个
文 件 压 缩 前 总
长 度 为 3,141,622 字 节
。 这 些 数 据 显
示 了 压 缩 率 是
如 何 随 数 据 块
长 度 变 化 的 。
由 于 这 一 语 料
库 主 要 由 小 文
件 组 成 , 所 以
这 些 数 字 并 没
有 充 分 体 现 出
大 文 件 情 况 下
, 采 用 大 数 据
块 所 能 达 到 的
较 高 压 缩 率 的
优 势 。 压 缩 时
解 压 缩 解 压 缩 -s
语 料 库 文 件
Flag 内 存 用 量 内 存
用 量 选 项 内 存
用 量 压 缩 长 度
-1 1200k 500k
350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642
从 损 坏 的 文 件 中 恢 复 数 据
bzip2 按 数 据 块 对 数 据 进 行 压 缩 , 数 据 块 长 度 通 常 为 900k 字 节 。 每 个 数 据 块 被 独 立 地 处 理 。 如 果 由 于 介 质 或 传 输 错 误 导 致 多 数 据 块 的 .bz2 文 件 损 坏 , 有 可 能 将 文 件 中 未 损 坏 的 数 据 块 中 的 数 据 恢 复 。 压 缩 后 的 数 据 块 以 一 个 48 位 的 结 构 分 界 , 因 而 有 可 能 在 合 理 的 范 围 内 找 到 块 边 界 。 每 个 数 据 块 也 带 着 自 己 的 32 位 CRC 校 验 码 , 因 此 可 以 区 分 损 坏 与 未 损 坏 的 数 据 块 。
bzip2recover 是 一 个 简 单 的 程 序 , 它 的 功 能 是 在 .bz2 文 件 中 寻 找 数 据 块 , 并 将 每 个 数 据 块 写 到 自 己 的 .bz2 文 件 中 。 然 后 可 以 用 bzip2 -t 测 试 结 果 的 完 整 性 , 将 未 损 坏 的 部 分 解 压 缩 。
bzip2recover 只 有 一 个 命 令 行 变 量 , 即 损 坏 文 件 的 名 字 。 输 出 结 果 是 一 系 列 象 "rec0001file.bz2"、 "rec0002file.bz2" 这 样 的 文 件 , 每 个 文 件 含 有 从 损 坏 文 件 中 找 出 的 数 据 块 。 输 出 文 件 名 设 计 为 在 接 下 来 的 处 理 中 可 方 便 地 使 用 通 配 符 , 例 如 , "bzip2 -dc rec*file.bz2>recovered_data", 可 按 正 确 的 次 序 列 出 文 件 。
bzip2recover 在 处 理 大 文 件 时 最 有 用 , 因 为 大 文 件 含 有 很 多 数 据 块 。 显 然 用 它 处 理 单 个 数 据 块 的 损 坏 文 件 不 会 有 任 何 结 果 , 因 为 一 个 损 坏 的 数 据 块 是 无 法 恢 复 的 。 如 果 想 尽 量 减 少 潜 在 的 由 于 介 质 及 传 输 错 误 导 致 的 数 据 损 坏 , 可 以 考 虑 采 用 较 小 的 数 据 块 长 度 进 行 压 缩 。
有 关 性 能 的 注 解
在 压 缩 的 排 序 阶 段 , 相 似 的 字 符 串 将 被 聚 集 在 一 起 。 因 此 , 对 于 包 含 很 长 重 复 符 号 的 文 件 , 例 如 象 "aabaabaabaab......" 这 样 的 字 符 串 ( 重 复 几 百 次 ) , 压 缩 速 度 会 比 通 常 情 况 慢 得 多 。 0.9.5 及 其 以 上 版 本 在 处 理 这 样 的 重 复 时 , 速 度 比 以 前 版 本 提 高 了 很 多 。 最 坏 情 况 与 平 均 情 况 下 的 压 缩 时 间 之 比 约 为 10:1。 对 于 以 前 的 版 本 , 这 一 数 字 大 约 是 100:1 以 上 。 你 如 果 愿 意 , 可 采 用 -vvvv 选 项 来 非 常 详 细 地 监 视 这 一 过 程 。 解 压 缩 速 度 并 不 受 这 些 现 象 的 影 响 。
bzip2 通 常 分 配 出 几 兆 字 节 的 内 存 用 于 处 理 数 据 , 对 这 些 内 存 的 访 问 是 以 相 当 随 机 的 方 式 进 行 的 。 这 意 味 着 , 压 缩 及 解 压 缩 的 性 能 在 很 大 程 度 上 取 决 于 机 器 上 处 理 高 速 缓 存 未 命 中 的 速 度 。 因 此 , 已 经 观 察 到 对 程 序 作 很 小 的 减 少 失 败 率 的 改 动 会 导 致 不 成 比 例 的 很 大 的 性 能 上 的 提 升 。 我 设 想 bzip2 在 有 大 量 高 速 缓 存 机 器 上 的 性 能 最 佳 。
警 告
I/O 错 误 信 息 并 不 是 很 有 用 。 bzip2 会 尽 量 探 测 I/O 错 误 信 息 并 干 净 地 退 出 , 但 问 题 的 细 节 有 时 看 上 去 很 容 易 引 起 误 解 。 本 手 册 页 适 用 于 0.9.5 版 的 bzip2。 由 这 一 版 本 的 bzip2 产 生 的 压 缩 数 据 与 以 前 的 公 开 版 本 0.1pl2、 0.9.0 完 全 兼 容 , 但 有 一 个 例 外 : 0.9.0 及 其 以 上 版 本 能 正 确 解 压 缩 多 个 连 在 一 起 的 压 缩 文 件 , 0.1pl2 则 不 能 , 它 将 在 解 压 缩 完 数 据 流 中 的 第 一 个 文 件 之 后 停 止 。
bzip2recover 采 用 32 位 的 整 型 数 表 示 压 缩 文 件 中 位 的 位 置 , 因 此 它 无 法 处 理 大 于 512 兆 字 节 的 文 件 。 但 这 一 问 题 很 容 易 解 决 。
作 者
Julian Seward, jseward [AT] acm.org.
http://www.muraroa.demon.co.uk
bzip2 包 含 的 想 法 及 概 念 至 少 归 功 于 下 列 人 员 : Michael Burrows 和 David Wheeler( 块 排 序 变 换 ) , David Wheeler( Huffman 编 码 器 ) , Peter Fenwick( 原 始 bzip 的 结 构 编 程 模 型 及 许 多 改 进 ) , Alistair Moffat、 Ian Witten( 原 始 bzip 中 的 算 法 编 码 ) 。 我 非 常 感 激 他 们 的 帮 助 、 支 持 以 及 建 议 。 参 见 源 发 布 的 手 册 中 有 关 文 档 来 源 中 的 线 索 。 Christian von Roques 曾 鼓 励 我 寻 找 更 快 的 排 序 算 法 , 以 提 高 压 缩 速 度 。 bela Lubkin 曾 鼓 励 我 改 进 最 坏 情 况 下 的 压 缩 性 能 。 很 多 人 给 我 发 来 修 补 程 序 , 帮 助 解 决 移 植 问 题 , 租 借 机 器 , 提 出 建 议 等 。
[中 文 版 维 护 人 ]
Liu JingSong <js-liu [AT] 263.net>
[中 文 版 最 新 更 新 ]
2001/01/31
[中 国 Linux 论 坛 man 手 册 页 翻 译 计 划 ]
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh