bzip2 是什么
bzip2 是单文件压缩工具,用 Burrows-Wheeler 变换配合霍夫曼编码,压缩率通常高于 gzip,代价是压缩与解压速度明显更慢,且不支持多线程并行。它在老系统、遗留源码包(.tar.bz2)与历史归档中仍很常见,tar 通过 -j 选项直接调用它。新项目一般选压缩率更高的 xz,或速度更快的 zstd。
基本信息
| 适用平台 | Linux、macOS、WSL;主流发行版均自带 |
|---|---|
| 语法 | bzip2 [-z | -d | -t] [-k] [-9] [-v] 文件 |
| 命令家族 | bzip2 压缩、bunzip2 解压、bzcat 解压到标准输出、bzip2recover 抢救损坏归档 |
| 默认行为 | 压缩或解压成功后删除源文件,需要保留源文件必须加 -k |
典型使用场景
- 接手上古系统的归档,只有 .bz2 文件需要解开
- 把体积较大的历史日志压小存放,且不介意压缩耗时
- 与只认 .tar.bz2 的老旧工具链或对方环境交换文件
- 对下载来的归档做完整性校验(-t)后再删除原始拷贝
- 用 bzip2recover 尽力抢救损坏的分块归档
常用示例
常用示例
bzip2 -k -9 app.log # 保留原文件,使用最高压缩级别
bunzip2 -k app.log.bz2 # 解压并保留压缩包
bzcat app.log.bz2 | head # 不解压落盘,直接看内容
bzip2 -t app.log.bz2 # 完整性测试,通过则无输出
tar -jcvf etc-2026.tar.bz2 /etc # 打包并调用 bzip2 压缩
tar -jtvf etc-2026.tar.bz2 # 不解压,列出包内文件
tar -xjf etc-2026.tar.bz2 -C /tmp # 解包到指定目录
zstd -T0 app.log # 新场景的替代:多线程、更快选项逐项读法
| 选项 | 作用 | 使用注意 |
|---|---|---|
| -z | 压缩,缺省行为 | 压缩后源文件消失,除非加 -k |
| -d | 解压(等价 bunzip2) | 常与 -k 一起使用保留压缩包 |
| -t | 只做完整性测试 | 归档迁移前跑一遍,避免删了源才发现坏 |
| -k | 保留输入文件 | 在脚本里几乎总该加上 |
| -9 | 最高压缩级别(默认也是 9) | 级别高意味着更慢,收益对小文件不明显 |
| -f | 覆盖已存在的输出文件 | 自动化脚本里慎用,容易覆盖同名新文件 |
bzip2 单进程单线程,批量压缩大日志会长时间占满一颗 CPU;需要并行时改用 zstd -T0 或 pigz、xz -T0。
压缩率并非永远高于 gzip:小文件、图片视频等已压缩数据再压几乎没有收益,却要多花时间。批量处理前先用一两个样本对比输出体积。