Manpages

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 对 文 件 名 的 处 理 是 幼 稚 的 。

bzip2bunzip2 在 缺 省 情 况 下 不 覆 盖 已 有 的 文 件 。 如 果 想 覆 盖 已 有 的 文 件 , 要 指 定 -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 可 从 环 境 变 量 BZIP2BZIP 中 依 次 读 取 参 数 , 并 在 命 令 行 参 数 之 前 对 其 进 行 处 理 。 这 是 提 供 缺 省 选 项 的 方 便 途 径 。 即 使 压 缩 后 的 文 件 略 大 于 原 文 件 , 压 缩 也 总 是 照 样 进 行 。 小 于 大 约 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 手 册 页 翻 译 计 划 ]

http://cmpp.linuxforum.net

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