## はじめに
Linuxで単一ファイルを圧縮する代表的なツールが`gzip`、`bzip2`、`xz`の3種です。それぞれ圧縮率と速度のバランスが異なるため、用途に応じて使い分けることが重要です。
本記事では3つのツールの基本操作、展開方法、圧縮率比較、そしてストリーム処理での実用例を解説します。
## 症状・背景
– ログファイルを圧縮して容量を節約したい
– gzファイル/bz2ファイル/xzファイルを展開したい
– 圧縮率と速度の最適なバランスを知りたい
– pipe処理で圧縮しながらバックアップしたい
## 手順・設定方法
### ステップ1: gzipで圧縮・展開する
“`bash
# ファイルを圧縮(元ファイルは削除される)
gzip access.log
# 元ファイルを保持して圧縮
gzip -k access.log
# 圧縮レベルを指定(1=高速, 9=高圧縮)
gzip -9 access.log
# 展開
gunzip access.log.gz
# または
gzip -d access.log.gz
“`
### ステップ2: bzip2で圧縮・展開する
“`bash
# bzip2圧縮(gzipより高圧縮率)
bzip2 access.log
# 元ファイル保持
bzip2 -k access.log
# 展開
bunzip2 access.log.bz2
# または
bzip2 -d access.log.bz2
# 内容を表示せず確認のみ
bzip2 -t access.log.bz2
“`
### ステップ3: xzで圧縮・展開する
“`bash
# xz圧縮(最高圧縮率、やや低速)
xz access.log
# 元ファイル保持で圧縮
xz -k access.log
# 圧縮レベル指定
xz -9 access.log
# 展開
unxz access.log.xz
# または
xz -d access.log.xz
“`
### ステップ4: 表示と比較を行う
“`bash
# 展開せず内容を表示
zcat access.log.gz # gzip用
bzcat access.log.bz2 # bzip2用
xzcat access.log.xz # xz用
# パイプで圧縮しながら保存
mysqldump db | gzip > db.sql.gz
# 各形式のサイズを比較
ls -lh access.log.{gz,bz2,xz}
“`
## 注意事項
– デフォルトでは元ファイルが削除されるため、必要なら`-k`オプションを併用する
– xzはメモリ消費が大きく、リソースが限られた環境では注意が必要
– 圧縮率はxz > bzip2 > gzip、速度はgzip > bzip2 > xzの順
– 複数ファイルを1つにまとめる機能はないため、tarと組み合わせる
## まとめ
1. **gzip**は高速・互換性重視の標準圧縮ツール
2. **bzip2**は中間のバランス、文字ベースファイルで効果的
3. **xz**は最高圧縮率、長期保管や配布に向く
4. **-k**オプションで元ファイルを保持できる
関連記事:
– [tarコマンドでファイルを圧縮・展開する方法](/articles/linux-tar-compress-extract)
– [zipとunzipコマンドの使い方](/articles/linux-zip-unzip-command)
– [ログローテーションの設定方法](/articles/linux-logrotate-config)





