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