Linuxで作業をしていると「複数のファイルをまとめて送りたい」「ログファイルを圧縮して保存領域を節約したい」「バックアップを効率的に管理したい」という場面が頻繁にあります。
しかし、初心者の方からよく聞かれる疑問があります:
「圧縮コマンドがたくさんあるけど、どれを使えばいいの?」 「tar、gzip、zipの違いは何?」 「Windows との互換性を考えるとどれがおすすめ?」 「圧縮率と速度、どちらを優先すべき?」
この記事では、Linuxでの圧縮・解凍の基本的な方法から、各コマンドの特徴と使い分けまで、初心者の方にもわかりやすく解説します。
Linux圧縮の基礎知識
圧縮とアーカイブの違い
多くの人が混同しがちな概念を整理しましょう:
アーカイブ(書庫化)
- 複数のファイルを1つのファイルにまとめること
- ファイルサイズは基本的に変わらない
tar
コマンドが代表的
圧縮
- データのサイズを小さくすること
- アルゴリズムを使ってファイルサイズを削減
gzip
、bzip2
、xz
などが代表的
アーカイブ + 圧縮
- ファイルをまとめてから圧縮する
tar.gz
、tar.bz2
などがこの形式
Linuxで使われる主な圧縮形式
形式 | 圧縮速度 | 圧縮率 | 互換性 | 用途 |
---|---|---|---|---|
.tar.gz | 高速 | 中程度 | Linux標準 | 一般的な用途 |
.tar.bz2 | 中速 | 高圧縮 | Linux標準 | サイズ重視 |
.tar.xz | 低速 | 最高圧縮 | 比較的新しい | 長期保存 |
.zip | 高速 | 中程度 | 全OS対応 | 異OS間共有 |
.gz | 高速 | 中程度 | Linux標準 | 単一ファイル |
tarコマンドでアーカイブ + 圧縮
tarの基本概念
tar
(Tape ARchive)は、もともとテープバックアップのために開発されたコマンドです。現在では、複数のファイルやディレクトリを1つのファイルにまとめる際の標準ツールとして使われています。
基本的な使い方(tar.gz形式)
圧縮の基本構文
tar -czf アーカイブ名.tar.gz 対象ディレクトリ/
オプションの詳細
-c
:create(アーカイブ作成)-z
:gzipで圧縮-f
:file(出力ファイル名を指定)
実際の例
# プロジェクトディレクトリを圧縮
tar -czf myproject.tar.gz ./myproject/
# 複数のファイルを指定
tar -czf backup.tar.gz file1.txt file2.txt documents/
# 現在のディレクトリ全体を圧縮
tar -czf current_dir.tar.gz .
解凍の基本構文
tar -xzf アーカイブ名.tar.gz
オプションの詳細
-x
:extract(展開)-z
:gzipで解凍-f
:file(入力ファイル名を指定)
解凍の実例
# 基本的な解凍
tar -xzf myproject.tar.gz
# 特定のディレクトリに解凍
tar -xzf myproject.tar.gz -C /tmp/
# 解凍前に中身を確認
tar -tzf myproject.tar.gz
より高圧縮なtar.bz2形式
bzip2の特徴
- gzipより高い圧縮率
- 処理時間はgzipより長い
- サイズを重視する場合に最適
圧縮例
tar -cjf archive.tar.bz2 directory/
解凍例
tar -xjf archive.tar.bz2
最高圧縮率のtar.xz形式
xzの特徴
- 最も高い圧縮率
- 処理時間は最も長い
- 長期保存やネットワーク転送に適している
圧縮例
tar -cJf archive.tar.xz directory/
解凍例
tar -xJf archive.tar.xz
tarの便利なオプション
進行状況を表示(-v)
tar -czvf archive.tar.gz directory/
# 出力例:
# directory/
# directory/file1.txt
# directory/file2.txt
特定のファイルを除外(–exclude)
tar -czf backup.tar.gz --exclude="*.log" --exclude="temp/" project/
相対パスで保存
cd /path/to/parent
tar -czf archive.tar.gz project/
gzipとgunzipで単一ファイル圧縮
gzipの基本的な使い方
gzip
は単一ファイルの圧縮に特化したコマンドです。元ファイルは圧縮後に削除され、.gz
拡張子が付いたファイルが作成されます。
基本的な圧縮
gzip large_file.txt
# 結果:large_file.txt.gz が作成され、large_file.txt は削除される
元ファイルを保持したまま圧縮
gzip -c large_file.txt > large_file.txt.gz
# または
gzip -k large_file.txt # -k オプション(keep)
圧縮レベルを指定
gzip -1 file.txt # 最高速(圧縮率低)
gzip -9 file.txt # 最高圧縮(速度遅)
gzip -6 file.txt # デフォルト(バランス型)
gunzipでの解凍
基本的な解凍
gunzip large_file.txt.gz
# 結果:large_file.txt が復元され、.gz ファイルは削除される
元ファイルを保持したまま解凍
gunzip -c large_file.txt.gz > large_file.txt
# または
gunzip -k large_file.txt.gz
gzipの実用例
ログファイルの圧縮
# アクセスログを圧縮
gzip /var/log/apache2/access.log
# システムログの圧縮
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
大きなデータファイルの圧縮
# データベースダンプの圧縮
mysqldump database_name | gzip > backup.sql.gz
# テキストファイルの圧縮
gzip -9 large_dataset.csv
zipとunzipでクロスプラットフォーム対応
zipの特徴と利点
zip
形式の最大の利点は、Windows、Mac、Linuxすべてで標準的にサポートされていることです。
zipの利点
- すべてのOSで標準サポート
- パスワード保護が可能
- 部分的な解凍が可能
- GUIツールでも扱いやすい
zipコマンドの基本的な使い方
基本的な圧縮
zip archive.zip file1.txt file2.txt
ディレクトリごと圧縮(再帰的)
zip -r archive.zip directory/
圧縮レベルを指定
zip -0 archive.zip files/ # 無圧縮(最高速)
zip -9 archive.zip files/ # 最高圧縮(最低速)
パスワード保護
zip -e secure.zip confidential_files/
# パスワードの入力を求められます
unzipでの解凍
基本的な解凍
unzip archive.zip
特定のディレクトリに解凍
unzip archive.zip -d /target/directory/
解凍前に中身を確認
unzip -l archive.zip
特定のファイルのみ解凍
unzip archive.zip "*.txt"
zipの実用例
プロジェクトの共有
# 開発プロジェクトをWindows環境に送る場合
zip -r project_v1.0.zip ./myproject/ -x "*.git*" "node_modules/*"
設定ファイルのバックアップ
# システム設定のバックアップ
zip -r config_backup.zip /etc/nginx/ /etc/apache2/ /etc/mysql/
高度な圧縮テクニック
パイプとの組み合わせ
データベースダンプの直接圧縮
mysqldump database_name | gzip > backup_$(date +%Y%m%d).sql.gz
リモートサーバーへの圧縮転送
tar -czf - directory/ | ssh user@remote "cat > backup.tar.gz"
圧縮しながらのファイルコピー
tar -czf - source_dir/ | tar -xzf - -C destination_dir/
分割圧縮
大きなファイルを分割
# 100MBずつ分割
tar -czf - large_directory/ | split -b 100M - backup.tar.gz.part
# 復元
cat backup.tar.gz.part* | tar -xzf -
暗号化との組み合わせ
GPGで暗号化しながら圧縮
tar -czf - sensitive_data/ | gpg --cipher-algo AES256 --compress-algo 1 -c > encrypted_backup.tar.gz.gpg
圧縮コマンドの選び方
用途別推奨コマンド
日常的なバックアップ
tar -czf backup_$(date +%Y%m%d).tar.gz ~/documents/
理由:高速で適度な圧縮率、Linux標準
長期保存用アーカイブ
tar -cJf longterm_backup.tar.xz important_data/
理由:最高の圧縮率でストレージ効率化
Windows環境との共有
zip -r shared_files.zip project_files/
理由:すべてのOSで標準サポート
ログファイルの圧縮
gzip /var/log/application.log
理由:単一ファイルに最適、高速処理
ネットワーク転送用
tar -czf - files/ | ssh user@server "tar -xzf - -C /destination/"
理由:ストリーミング圧縮で効率的
性能比較の目安
1GBのテキストファイルディレクトリの場合
形式 | 圧縮後サイズ | 圧縮時間 | 解凍時間 | 用途 |
---|---|---|---|---|
tar.gz | 200MB | 30秒 | 15秒 | 日常利用 |
tar.bz2 | 150MB | 90秒 | 45秒 | サイズ重視 |
tar.xz | 120MB | 180秒 | 60秒 | 長期保存 |
zip | 220MB | 35秒 | 20秒 | 互換性重視 |
*注:実際の数値は環境とデータ内容により変動します
トラブルシューティング
よくあるエラーと対処法
権限エラー
# エラー例
tar: Cannot open: Permission denied
# 対処法
sudo tar -czf archive.tar.gz /protected/directory/
ディスク容量不足
# エラー例
gzip: write error: No space left on device
# 対処法:別のディスクに出力
tar -czf /mnt/external/backup.tar.gz large_directory/
壊れたアーカイブの確認
# tar.gz ファイルの整合性確認
gunzip -t archive.tar.gz
# zip ファイルの整合性確認
unzip -t archive.zip
アーカイブの部分的な操作
特定のファイルだけ解凍
tar -xzf archive.tar.gz specific_file.txt
アーカイブにファイルを追加
tar -rzf archive.tar.gz new_file.txt
アーカイブからファイルを削除
tar --delete -f archive.tar removed_file.txt
自動化とスクリプト化
バックアップスクリプトの例
日次バックアップスクリプト
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE_DIR="/home/user/documents"
# 7日以上古いバックアップを削除
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
# 新しいバックアップを作成
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
echo "Backup completed: backup_$DATE.tar.gz"
条件付き圧縮スクリプト
#!/bin/bash
# ファイルサイズに応じて圧縮方法を変える
FILE_SIZE=$(du -m "$1" | cut -f1)
if [ $FILE_SIZE -lt 100 ]; then
# 100MB未満:高速圧縮
tar -czf "${1}.tar.gz" "$1"
echo "Fast compression applied"
elif [ $FILE_SIZE -lt 1000 ]; then
# 1GB未満:標準圧縮
tar -cjf "${1}.tar.bz2" "$1"
echo "Standard compression applied"
else
# 1GB以上:最高圧縮
tar -cJf "${1}.tar.xz" "$1"
echo "Maximum compression applied"
fi
まとめ
Linux圧縮コマンドの使い分け指針
目的 | 推奨コマンド | 理由 |
---|---|---|
日常的なファイル管理 | tar -czf | バランスが良く、標準的 |
長期保存・アーカイブ | tar -cJf | 最高の圧縮率 |
単一ファイルの圧縮 | gzip | シンプルで高速 |
異OS間でのファイル共有 | zip | 互換性が最高 |
ネットワーク転送 | tar -czf - | ストリーミング対応 |
覚えておきたい基本コマンド
# 最も使用頻度が高い4つのコマンド
tar -czf archive.tar.gz directory/ # ディレクトリ圧縮
tar -xzf archive.tar.gz # 展開
gzip large_file.txt # 単一ファイル圧縮
zip -r archive.zip directory/ # Windows互換圧縮
安全で効率的な圧縮のポイント
- 重要なデータは圧縮前にバックアップを取る
- 大きなファイルは事前にサイズと所要時間を見積もる
- 定期的な圧縮作業はスクリプト化して自動化する
- アーカイブの整合性を定期的にチェックする
コメント