目次
概要
ファイルを「Burrows-Wheeler変換」というアルゴリズムを用いて圧縮(エンコード)・展開(デコード)するコマンドです。
Linux標準の圧縮形式としては、gzipよりも処理速度は劣りますが、より高い圧縮率を実現できるのが特徴です。拡張子には一般的に .bz2 が付与されます。
仕様(引数・オプション)
構文
bzip2 [オプション] [ファイル名]
bunzip2 [オプション] [ファイル名]
※ bunzip2 は bzip2 -d と等価です。
主な引数・オプション
| オプション | 説明 |
| -d / –decompress | ファイルを展開(解凍)します。 |
| -z / –compress | ファイルを圧縮します(デフォルト動作)。 |
| -k / –keep | 処理後に元のファイルを削除せず残します(デフォルトは削除)。 |
| -f / –force | 出力ファイルと同名のファイルが存在する場合、強制的に上書きします。 |
| -c / –stdout | 結果を標準出力に書き出します(元のファイルは変更されません)。 |
| -s / –small | メモリ使用量を削減して実行します(速度は低下します)。 |
| -1 .. -9 | 圧縮レベルを指定します。-1が最速・低圧縮、-9が低速・最高圧縮です(デフォルトは9)。 |
基本の使い方
テキストファイル(ここでは service.log)を圧縮し、サイズの変化を確認してから、元に戻す手順です。
# 元のファイルを確認
ls -lh service.log
# ファイルを圧縮(元ファイルは削除され、.bz2ファイルが生成される)
bzip2 service.log
# 圧縮後のファイルとサイズを確認
ls -lh service.log.bz2
# 圧縮ファイルを展開(元に戻す)
bzip2 -d service.log.bz2
実行結果例
-rw-r--r-- 1 user user 10M 1月 20 10:00 service.log
-rw-r--r-- 1 user user 2.1M 1月 20 10:00 service.log.bz2
-rw-r--r-- 1 user user 10M 1月 20 10:00 service.log
元のファイルを消さずに圧縮する
デフォルトでは元のファイルが消えますが、-k オプションで保持できます。
# 元のファイルを残したまま圧縮ファイルを作成
bzip2 -k service.log
実践コマンド
特定ディレクトリ内のファイルを再帰的に個別に圧縮する
bzip2 自体にはディレクトリを再帰的に辿る機能がないため、find コマンドと組み合わせて実行します。
以下は、archive/ ディレクトリ配下にある全てのファイルを個別に .bz2 形式に圧縮する例です。
# archiveディレクトリ以下のファイルのみを対象に、一つずつbzip2を実行
find archive/ -type f -exec bzip2 {} \;
実行結果例
# 実行前
archive/log1.txt
archive/subdir/log2.txt
# 実行後(すべて個別に圧縮される)
archive/log1.txt.bz2
archive/subdir/log2.txt.bz2
カスタムポイント
- 圧縮レベルの調整 (-1 〜 -9)とにかく速く圧縮したい場合は -1 を、時間はかかってもサイズを極限まで小さくしたい場合は -9 を明示します。Bash
bzip2 -1 large_data.csv - 標準出力の活用 (-c)圧縮結果をファイルに保存せず、パイプラインで別のコマンドに渡したい場合に使用します。Bash
# 圧縮したデータをそのままssh経由で転送する例 bzip2 -c database.sql | ssh remote_host "cat > database.sql.bz2"
注意点
- ディレクトリ自体の圧縮は不可bzip2 は単一ファイルの圧縮に特化しています。ディレクトリを丸ごと一つのアーカイブにしたい場合は、必ず tar コマンドと組み合わせてください(応用参照)。
- デフォルトで元ファイルが消えるオプションなしで実行すると、圧縮・解凍ともに処理成功後に元のファイルが削除されます。不安な場合は -k オプションを使用する癖をつけると安全です。
- 処理速度gzip に比べて圧縮率が高い反面、CPU負荷が高く、処理に時間がかかります。リアルタイム性が求められる用途には不向きな場合があります。
応用
tarコマンドと組み合わせてディレクトリをアーカイブ圧縮する
実務では、bzip2 単体ではなく、tar コマンドのオプションとして利用することが最も多いです。
-j オプションを指定することで、tarアーカイブ作成とbzip2圧縮を同時に行います。
# logsディレクトリをまとめて logs.tar.bz2 に圧縮
tar -cjvf logs.tar.bz2 logs/
# logs.tar.bz2 を展開
tar -xjvf logs.tar.bz2
まとめ
bzip2 は、保存容量の節約を最優先したい場合に非常に有効なツールです。
「ログファイルの長期保存」や「帯域の細いネットワークでのファイル転送」など、多少のCPUリソースと時間を犠牲にしてもファイルサイズを小さくしたい場面で、gzip の代わりとして活用してください。
