bzip2 使用 Burrows-Wheeler 變換 + Huffman 編碼,壓縮比通常優於 gzip,是 Linux 發布源碼包、備份大文本/日志的常用格式(.bz2)。本文完整解析所有參數、壓縮等級、多線程加速、管道流式操作、損壞恢復。

bzip2 [-cdfhkLstvVz] [--repetitive-best] [--repetitive-fast] [-#] [files...]
| 短參數 | 長參數 | 功能 |
|---|---|---|
-c | --stdout | 輸出到標準輸出,保留原文件 |
-d | --decompress | 解壓縮(等同 bunzip2) |
-f | --force | 覆蓋已存在輸出文件 |
-h | --help | 顯示幫助 |
-k | --keep | 保留原文件(壓縮/解壓後不刪除源文件) |
-s | --small | 降低內存佔用(用於嵌入式/舊機器),速度較慢 |
-t | --test | 測試 .bz2 文件完整性,不輸出 |
-v | --verbose | 顯示詳細進度(壓縮比、文件大小) |
-z | --compress | 強制壓縮(默認行為) |
-L | --license | 顯示許可證 |
-V | --version | 顯示版本 |
--repetitive-best | 針對重複數據優化壓縮比 | |
--repetitive-fast | 針對重複數據優化速度 | |
-# | 壓縮等級 1-9 (1 最快/壓縮比低, 9 最慢/壓縮比高, 默認 9) |
# 壓縮 file.txt → file.txt.bz2 (刪除 file.txt)
bzip2 file.txt
# 保留原文件
bzip2 -k file.txt
# 解壓 file.txt.bz2 → file.txt (刪除 .bz2)
bunzip2 file.txt.bz2
# 或
bzip2 -d file.txt.bz2
# 保留 .bz2
bzip2 -dk file.txt.bz2
# 壓縮輸出到 stdout
bzip2 -c file.txt > file.txt.bz2
# 解壓從 stdin 讀取
bzip2 -dc file.txt.bz2 > file.txt
# 遠程傳輸壓縮
ssh user@host "cat /var/log/app.log" | bzip2 -c > app.log.bz2
# 管道鏈:tar 打包 → bzip2 壓縮 → 異地備份
tar -cf - /data | bzip2 -c | ssh backup-host "cat > /backup/data-$(date +%F).tar.bz2"
# 快速壓縮 (等級 1)
bzip2 -1 bigfile.log
# 最大壓縮 (等級 9,默認)
bzip2 -9 bigfile.log
# 測試不同等級壓縮比與耗時
for i in {1..9}; do
time bzip2 -${i} -c bigfile.log > /dev/null
done
典型數據:等級 1 速度 ~3x 等級 9,壓縮比僅低 ~5%。大文件建議用 -1 或 pbzip2。
# 僅測試,不解壓
bzip2 -t archive.tar.bz2
echo $? # 0=完好, 非0=損壞
# bzip2recover 嘗試提取完好塊
bzip2recover damaged.bz2
# 生成 rec00001file.bz2, rec00002file.bz2 ...
# 再逐個解壓
bunzip2 rec*.bz2
cat rec* > recovered_data
標準 bzip2 單線程,大文件極慢。生產環境必裝並行版:
# 安裝
apt install pbzip2 # 或 lbzip2
yum install pbzip2
# 使用方式完全兼容 bzip2
pbzip2 -9 bigfile.log # 自動使用所有 CPU 核心
pbzip2 -p4 -c bigfile.log > bigfile.log.bz2 # 指定 4 線程
# 解壓
pbzip2 -d bigfile.log.bz2
測試:10GB 文本文件,bzip2 -9 約 45 分鐘,pbzip2 (16 核) 約 4 分鐘,壓縮比幾乎一致。
| 工具 | 算法 | 壓縮比 | 速度 | 內存 | 典型場景 |
|---|---|---|---|---|---|
| gzip | DEFLATE (LZ77+Huffman) | 基準 | 快 | 低 | 日志輪轉、HTTP 傳輸、腳本快速打包 |
| bzip2 | BWT + MTF + Huffman | ~15% 更小 | 慢 | 中 | 源碼包發布、長期存檔、備份 |
| xz | LZMA2 | ~30% 更小 | 極慢 | 高 | 軟件包分發、鏡像壓縮、極致體積 |
| zstd | Zstandard (LZ77+ANS) | 接近 xz | 極快 (多線程) | 可調 | 實時壓縮、備份、鏡像、替代 gzip/bzip2 |
tar + zstd:tar --zstd -cf backup.tar.zst /data(快、壓縮比高、支持多線程)。pbzip2:tar --use-compress-program=pbzip2 -cf backup.tar.bz2 /data。-k:防止誤刪源數據。-t:確保文件完好再傳輸/備份。bzip2recover:搶救部分數據優於完全丟失。理解 bzip2 參數與現代替代工具,能在存儲成本、傳輸時間、CPU 開銷三角中找到最佳平衡點。