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