【初心者必見】Linuxで使えるファイル圧縮・解凍コマンド一覧と使い方

Linux

Linuxでのファイル管理において、圧縮・解凍コマンドは非常に重要な技術です。

ディスク容量の節約、データ転送の高速化、バックアップファイルの管理など、様々な場面で活用されています。

この記事では、Linuxで頻繁に使用される圧縮・解凍コマンドを、初心者の方にもわかりやすく解説します。

各コマンドの特徴、使い方、実用的な活用例まで詳しく紹介します。

スポンサーリンク

Linuxの圧縮・解凍の基本概念

圧縮とアーカイブの違い

Linuxの世界では、「圧縮」と「アーカイブ」という概念を理解することが重要です。

  • アーカイブ:複数のファイルを1つのファイルにまとめること
  • 圧縮:ファイルサイズを小さくすること

多くの場合、これら2つの処理を組み合わせて使用します。

よく使われる形式の特徴

形式圧縮率処理速度用途
.tarなし(アーカイブのみ)高速ファイルをまとめるだけ
.tar.gz中程度高速一般的なバックアップ
.tar.bz2中程度サイズ重視の場合
.tar.xz最高低速最高圧縮率が必要な場合
.zip中程度高速Windows互換性が必要

tarコマンド:アーカイブの基本

コマンドの概要

tar(Tape ARchive)は、複数のファイルやディレクトリを1つのアーカイブファイルにまとめるLinuxの基本コマンドです。圧縮機能と組み合わせることで、効率的なファイル管理が可能になります。

主要オプション一覧

オプション意味説明
-ccreateアーカイブを作成
-xextractアーカイブを展開
-tlistアーカイブの内容を表示
-ffileファイル名を指定
-vverbose処理内容を詳細表示
-zgzipgzip圧縮を使用
-jbzip2bzip2圧縮を使用
-Jxzxz圧縮を使用
-Cdirectory指定ディレクトリで実行

実用的な使用例

基本的なアーカイブ作成と展開

# ディレクトリをアーカイブ化(圧縮なし)
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柔軟なオプション

日常利用での推奨

  1. 一般的なバックアップ: tar -czf backup.tar.gz directory/
  2. Windows共有ファイル: zip -r archive.zip directory/
  3. 長期保存: tar -cJf archive.tar.xz directory/
  4. ログファイル管理: gzip *.log
  5. 大容量アーカイブ: tar -cjf archive.tar.bz2 directory/

コメント

タイトルとURLをコピーしました