Linuxでファイルやディレクトリを圧縮・解凍するコマンドは複数あります(gzip, tar, zip, xz, bzip2など)。 単にファイルサイズを縮めるだけでなく、**用途・スピード・互換性・圧縮率・展開速度**で使い分ける必要があります。
この記事では、各コマンドの基本から、実務で使う比較・使い分け・性能差・よくある失敗と対処まで完全網羅します。
📚Linux学習の全体像を知りたい方へ
本記事はLinux学習の一部内容です。初心者から現場レベルまでの学習順をまとめたロードマップはこちら。
▶ Linux学習ロードマップ完全版|初心者から現場レベルまでの勉強手順とコマンド体系まとめ
目次
圧縮を使う目的
圧縮操作をする理由は主に以下:
- ディスク容量節約
- ファイル転送帯域の削減
- バックアップデータの効率化
- アーカイブとしてまとめたい
主な圧縮ツールと特徴(一覧)
| コマンド | 特徴 | 圧縮率 | 対応 |
|---|---|---|---|
gzip | 単一ファイルの圧縮 | 中 | 広く互換あり |
tar | まとめて圧縮(アーカイブ) | tar + gzip/xz など | アーカイブ運用 |
zip | Windows互換性高い | 中 | クロスプラットフォーム |
xz | 高圧縮率だが遅め | 高 | バックアップ |
bzip2 | gzipより少し圧縮率高 | やや高 | 歴史的用途 |
基本的な圧縮・解凍コマンド
gzip(単一ファイル)
gzip file.txt
gzip -d file.txt.gz
gzip -k file.txt # 元ファイルを残す
tar(複数ファイル/ディレクトリ)
# tarだけ(アーカイブ化のみ)
tar cvf archive.tar dir/
# gzip圧縮
tar czvf archive.tar.gz dir/
# xz圧縮
tar cJvf archive.tar.xz dir/
# 解凍
tar xvf archive.tar.gz
tar xvf archive.tar.xz
zip / unzip (Windows互換含む)
zip -r archive.zip dir/
unzip archive.zip
bzip2
bzip2 file.txt
bzip2 -d file.txt.bz2

実務でよく使う圧縮例
バックアップディレクトリを1本化(gzip + tar)
tar czvf app_backup_$(date +%F).tar.gz /var/www/html
転送効率重視(高圧縮)
tar cJvf app_backup_high.tar.xz /var/log
Windows/他環境でも展開したい
zip -r share.zip project/
圧縮方式の性能比較
圧縮方式選びは用途によって変わります:
- 速度最優先:
gzip - 圧縮率最優先:
xz - 互換性最優先:
zip
大規模ログのバックアップでは xz、スクリプト配布では gzip、Windows との互換が必要なら zip が使われます。
よくある失敗と対処法
ファイルだけ gzip したいのにディレクトリごとになってしまう
原因:gzip はディレクトリ非対応。まず tar でまとめる必要があります。
対処:
tar cvf before.tar dir/
gzip before.tar
圧縮が遅すぎる(大きいファイル)
原因:高圧縮率モード(xz など)を無条件に使っている
対処:gzip や低圧縮率設定で速度優先
zip で Permission denied
原因:権限不足でファイルにアクセスできない
対処:sudo を付ける / 権限を確認
FAQ(よくある質問)
Q1. gzip と tar の違いは?gzip は単一ファイル専用、tar は複数ファイル/ディレクトリをまとめるためのアーカイブ化(圧縮は別オプションで行う)です。
Q2. 圧縮率と解凍速度のバランスは?xz は圧縮率が高い反面、CPU 時間がかかります。高速処理が必要なら gzip を使います。
Q3. Windows でも解凍したいzip はクロスプラットフォーム対応なので Windows でも解凍できます。
Q4. 圧縮ファイルを分割したい
tar + split を使います:
tar czvf - dir/ | split -b 500M - archive.tar.gz.part

