Linuxでのファイル管理において、圧縮・解凍コマンドは非常に重要な技術です。
ディスク容量の節約、データ転送の高速化、バックアップファイルの管理など、様々な場面で活用されています。
この記事では、Linuxで頻繁に使用される圧縮・解凍コマンドを、初心者の方にもわかりやすく解説します。
各コマンドの特徴、使い方、実用的な活用例まで詳しく紹介します。
Linuxの圧縮・解凍の基本概念
圧縮とアーカイブの違い
Linuxの世界では、「圧縮」と「アーカイブ」という概念を理解することが重要です。
- アーカイブ:複数のファイルを1つのファイルにまとめること
- 圧縮:ファイルサイズを小さくすること
多くの場合、これら2つの処理を組み合わせて使用します。
よく使われる形式の特徴
形式 | 圧縮率 | 処理速度 | 用途 |
---|---|---|---|
.tar | なし(アーカイブのみ) | 高速 | ファイルをまとめるだけ |
.tar.gz | 中程度 | 高速 | 一般的なバックアップ |
.tar.bz2 | 高 | 中程度 | サイズ重視の場合 |
.tar.xz | 最高 | 低速 | 最高圧縮率が必要な場合 |
.zip | 中程度 | 高速 | Windows互換性が必要 |
tarコマンド:アーカイブの基本
コマンドの概要
tar
(Tape ARchive)は、複数のファイルやディレクトリを1つのアーカイブファイルにまとめるLinuxの基本コマンドです。圧縮機能と組み合わせることで、効率的なファイル管理が可能になります。
主要オプション一覧
オプション | 意味 | 説明 |
---|---|---|
-c | create | アーカイブを作成 |
-x | extract | アーカイブを展開 |
-t | list | アーカイブの内容を表示 |
-f | file | ファイル名を指定 |
-v | verbose | 処理内容を詳細表示 |
-z | gzip | gzip圧縮を使用 |
-j | bzip2 | bzip2圧縮を使用 |
-J | xz | xz圧縮を使用 |
-C | directory | 指定ディレクトリで実行 |
実用的な使用例
基本的なアーカイブ作成と展開
# ディレクトリをアーカイブ化(圧縮なし)
tar -cvf backup.tar documents/
# アーカイブを展開
tar -xvf backup.tar
# アーカイブの内容を確認(展開せずに)
tar -tvf backup.tar
gzip圧縮との組み合わせ
# gzip圧縮でアーカイブ作成
tar -czvf backup.tar.gz documents/
# gzip圧縮されたアーカイブを展開
tar -xzvf backup.tar.gz
# 特定のディレクトリに展開
tar -xzvf backup.tar.gz -C /tmp/restore/
bzip2圧縮との組み合わせ
# bzip2圧縮でアーカイブ作成
tar -cjvf backup.tar.bz2 documents/
# bzip2圧縮されたアーカイブを展開
tar -xjvf backup.tar.bz2
xz圧縮との組み合わせ
# xz圧縮でアーカイブ作成(最高圧縮率)
tar -cJvf backup.tar.xz documents/
# xz圧縮されたアーカイブを展開
tar -xJvf backup.tar.xz
実用的な応用例
# 特定のファイルタイプのみをアーカイブ
tar -czvf logs.tar.gz *.log
# 特定のファイルを除外してアーカイブ
tar -czvf backup.tar.gz --exclude='*.tmp' --exclude='cache/' documents/
# アーカイブ作成時に進捗を表示
tar -czvf backup.tar.gz documents/ | pv -p -s $(du -sb documents/ | awk '{print $1}')
# 複数のディレクトリを1つのアーカイブに
tar -czvf multi_backup.tar.gz dir1/ dir2/ dir3/
gzip/gunzipコマンド:高速圧縮
コマンドの概要
gzip
は単一ファイルを.gz
形式に圧縮する高速圧縮コマンドです。処理速度が速く、CPU負荷が軽いため、日常的な圧縮処理に適しています。
特徴
- 対象:単一ファイルのみ(ディレクトリは直接圧縮不可)
- 動作:元ファイルは圧縮後に削除される
- 互換性:Linux標準、多くのシステムでサポート
実用的な使用例
基本的な圧縮と解凍
# ファイルを圧縮
gzip document.txt
# → document.txt.gz が作成され、document.txt は削除される
# ファイルを解凍
gunzip document.txt.gz
# → document.txt が復元され、document.txt.gz は削除される
# 元ファイルを保持しながら圧縮
gzip -c document.txt > document.txt.gz
# → 元の document.txt も残る
圧縮レベルの指定
# 最速圧縮(圧縮率は低い)
gzip -1 document.txt
# 最高圧縮(時間がかかる)
gzip -9 document.txt
# デフォルト圧縮(バランス重視)
gzip document.txt
複数ファイルの一括処理
# 複数ファイルを個別に圧縮
gzip *.txt
# 複数ファイルを個別に解凍
gunzip *.gz
# ディレクトリ内の全ファイルを再帰的に圧縮
find . -name "*.log" -exec gzip {} \;
ストリーム処理での活用
# パイプライン経由で圧縮
cat large_file.txt | gzip > compressed.gz
# 圧縮ファイルの内容を直接表示
zcat file.txt.gz
# 圧縮ファイルをgrep検索
zcat log.txt.gz | grep "ERROR"
zip/unzipコマンド:Windows互換圧縮
コマンドの概要
zip
は複数のファイルやディレクトリを.zip
形式に圧縮できるコマンドです。Windows環境との互換性が高く、クロスプラットフォームでのファイル共有に適しています。
特徴
- 互換性:Windows、macOS、Linuxで共通利用可能
- 機能:パスワード保護、圧縮レベル調整が可能
- 構造:ディレクトリ構造を保持
実用的な使用例
基本的な圧縮と解凍
# 複数ファイルを圧縮
zip archive.zip file1.txt file2.txt file3.txt
# ディレクトリを再帰的に圧縮
zip -r project.zip project_directory/
# zipファイルを解凍
unzip archive.zip
# 特定のディレクトリに解凍
unzip archive.zip -d /path/to/destination/
高度な圧縮オプション
# 圧縮レベルを指定(0:無圧縮 〜 9:最高圧縮)
zip -9 high_compression.zip large_file.txt
# パスワード付きzipを作成
zip -e secure.zip sensitive_data.txt
# 特定のファイルを除外して圧縮
zip -r backup.zip project/ -x "*.tmp" "*/cache/*"
# 更新されたファイルのみを追加
zip -u backup.zip updated_file.txt
zipファイルの情報確認
# zipファイルの内容を一覧表示
unzip -l archive.zip
# 詳細情報を表示
unzip -v archive.zip
# テスト(実際には解凍しない)
unzip -t archive.zip
# 特定のファイルのみを解凍
unzip archive.zip specific_file.txt
実用的な活用例
# Webサイトのバックアップ
zip -r website_backup_$(date +%Y%m%d).zip /var/www/html/
# ログファイルの月次アーカイブ
zip logs_$(date +%Y%m).zip /var/log/*.log
# 開発プロジェクトのリリース用パッケージ
zip -r myproject_v1.0.zip myproject/ -x "*/node_modules/*" "*/.git/*"
xz/unxzコマンド:最高圧縮率
コマンドの概要
xz
は非常に高い圧縮率を実現する.xz
形式の圧縮コマンドです。ファイルサイズを最小限に抑えたい場合に最適ですが、処理時間は長くなります。
特徴
- 圧縮率:gzipやbzip2より高い圧縮率
- 処理時間:圧縮・解凍に時間がかかる
- 用途:長期保存、ネットワーク転送用のアーカイブ
実用的な使用例
基本的な圧縮と解凍
# ファイルを最高圧縮率で圧縮
xz database_dump.sql
# → database_dump.sql.xz が作成
# xzファイルを解凍
unxz database_dump.sql.xz
# → database_dump.sql が復元
# 元ファイルを保持しながら圧縮
xz -c large_file.txt > large_file.txt.xz
圧縮レベルとメモリ使用量の調整
# 最速圧縮(圧縮率は低下)
xz -1 file.txt
# 最高圧縮(デフォルト)
xz -9 file.txt
# メモリ使用量を制限して圧縮
xz --memory=512M large_file.txt
# 複数CPUを使用して高速化
xz -T 4 large_file.txt
ストリーム処理での活用
# パイプライン経由で圧縮
mysqldump database | xz > backup.sql.xz
# 圧縮ファイルの内容を表示
xzcat backup.sql.xz
# 圧縮ファイルから直接検索
xzcat log.txt.xz | grep "ERROR"
bzip2/bunzip2コマンド:バランス重視
コマンドの概要
bzip2
は圧縮率と処理速度のバランスが良い.bz2
形式の圧縮コマンドです。gzipより高い圧縮率を持ちながら、xzより高速に動作します。
特徴
- 圧縮率:gzipより高く、xzより低い
- 処理速度:gzipより遅く、xzより速い
- 互換性:多くのLinuxディストリビューションで標準サポート
実用的な使用例
基本的な圧縮と解凍
# ファイルを圧縮
bzip2 log_file.txt
# → log_file.txt.bz2 が作成
# ファイルを解凍
bunzip2 log_file.txt.bz2
# → log_file.txt が復元
# 元ファイルを保持しながら圧縮
bzip2 -c document.txt > document.txt.bz2
圧縮オプションの活用
# 最高圧縮(デフォルト)
bzip2 -9 large_file.txt
# 高速圧縮(圧縮率は低下)
bzip2 -1 large_file.txt
# 詳細情報を表示しながら圧縮
bzip2 -v large_file.txt
ストリーム処理
# 圧縮ファイルの内容を表示
bzcat file.txt.bz2
# 圧縮ファイルから検索
bzcat access.log.bz2 | grep "404"
# パイプライン経由で圧縮
cat large_dataset.csv | bzip2 > dataset.csv.bz2
実用的な活用シナリオ
システム管理でのバックアップ
#!/bin/bash
# 日次バックアップスクリプト
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE_DIR="/home"
# ログローテーション用の古いファイルを圧縮
find /var/log -name "*.log.1" -exec gzip {} \;
# ホームディレクトリのバックアップ
tar -cJf $BACKUP_DIR/home_$DATE.tar.xz $SOURCE_DIR
# 30日以上前のバックアップを削除
find $BACKUP_DIR -name "home_*.tar.xz" -mtime +30 -delete
ログファイルの管理
# 月次ログアーカイブ
#!/bin/bash
YEAR_MONTH=$(date +%Y%m)
LOG_DIR="/var/log"
ARCHIVE_DIR="/var/log/archive"
# 前月のログを圧縮
tar -cjf $ARCHIVE_DIR/logs_$YEAR_MONTH.tar.bz2 \
--exclude='*.gz' --exclude='*.bz2' $LOG_DIR/*.log.*
# 元のログファイルを削除
find $LOG_DIR -name "*.log.*" -not -name "*.gz" -not -name "*.bz2" -delete
開発プロジェクトのアーカイブ
# Git履歴を含まないプロジェクトアーカイブ
PROJECT_NAME="myproject"
VERSION="v1.0"
tar -czf ${PROJECT_NAME}_${VERSION}.tar.gz \
--exclude='.git' \
--exclude='node_modules' \
--exclude='*.tmp' \
--exclude='.DS_Store' \
$PROJECT_NAME/
# 開発環境も含む完全バックアップ
tar -cJf ${PROJECT_NAME}_full_${VERSION}.tar.xz $PROJECT_NAME/
圧縮形式の選び方ガイド
用途別推奨形式
用途 | 推奨形式 | 理由 |
---|---|---|
日常的なバックアップ | .tar.gz | 処理速度と圧縮率のバランス |
長期保存アーカイブ | .tar.xz | 最高圧縮率でストレージを節約 |
Windows共有 | .zip | クロスプラットフォーム互換性 |
大量ログファイル | .tar.bz2 | 中程度の圧縮率で処理可能 |
一時的な転送 | .tar.gz | 高速圧縮で迅速な処理 |
性能比較の目安
# 1GBのテキストファイルでの圧縮結果例
# gzip: 圧縮後 200MB, 処理時間 30秒
# bzip2: 圧縮後 150MB, 処理時間 90秒
# xz: 圧縮後 120MB, 処理時間 180秒
# zip: 圧縮後 220MB, 処理時間 40秒
トラブルシューティング
よくあるエラーと対処法
ディスク容量不足
# エラー: No space left on device
# 対処: 一時的に別のディスクに圧縮
tar -czf /tmp/backup.tar.gz /home/user/documents/
# または外部ストレージに直接圧縮
tar -czf /mnt/external/backup.tar.gz /home/user/documents/
アクセス権限エラー
# エラー: Permission denied
# 対処: sudo権限で実行
sudo tar -czf backup.tar.gz /etc/
# または所有者を変更
sudo chown $USER:$USER backup.tar.gz
破損したアーカイブの確認
# tarアーカイブの整合性チェック
tar -tzf archive.tar.gz > /dev/null
# zipファイルの整合性チェック
unzip -t archive.zip
# gzipファイルの整合性チェック
gzip -t file.gz
パフォーマンス最適化
大容量ファイルの処理
# 進捗表示付き圧縮
tar -czf - large_directory/ | pv > backup.tar.gz
# マルチスレッド圧縮(pigz使用)
tar -c large_directory/ | pigz > backup.tar.gz
# 分割アーカイブの作成
tar -czf - large_directory/ | split -b 1G - backup.tar.gz.
メモリ使用量の最適化
# xzでメモリ使用量を制限
xz --memory=512M large_file.txt
# bzip2で小さなブロックサイズを使用
bzip2 -s large_file.txt
まとめ
Linuxの圧縮・解凍コマンドは、効率的なファイル管理に欠かせないツールです。それぞれのコマンドには特徴があり、用途に応じて使い分けることが重要です。
選択のポイント
重視する点 | 推奨コマンド | 理由 |
---|---|---|
処理速度 | gzip, tar -z | 高速圧縮・解凍 |
圧縮率 | xz, tar -J | 最小ファイルサイズ |
互換性 | zip | クロスプラットフォーム |
バランス | bzip2, tar -j | 速度と圧縮率の中間 |
多機能性 | tar | 柔軟なオプション |
日常利用での推奨
- 一般的なバックアップ:
tar -czf backup.tar.gz directory/
- Windows共有ファイル:
zip -r archive.zip directory/
- 長期保存:
tar -cJf archive.tar.xz directory/
- ログファイル管理:
gzip *.log
- 大容量アーカイブ:
tar -cjf archive.tar.bz2 directory/
コメント