Man page - bunzip2(1)

Packages contains this manual

Available languages:

en fr es pl ko cs tr ja uk ru ro zh_TW zh_CN de

Manual

bzip2

NAME 命 令 名
總 覽
描 述
選 項
記 憶 體 管 理
從 損 壞 的 檔 案 中 恢 復 資 料
有 關 效 能 的 註 解
警 告
作 者
[中 文 版 維 護 人 ]
[中 文 版 最 新 更 新 ]
[中 國 Linux 論 壇 man 手 冊 頁 翻 譯 計 劃 ]


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@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@263.net>

[中 文 版 最 新 更 新 ]

2001/01/31

[中 國 Linux 論 壇 man 手 冊 頁 翻 譯 計 劃 ]

http://cmpp.linuxforum.net

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。
中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh