Linuxでファイルを圧縮・解凍する方法|tar・gzip・zipの使い分け

Linux

Linuxで作業をしていると「複数のファイルをまとめて送りたい」「ログファイルを圧縮して保存領域を節約したい」「バックアップを効率的に管理したい」という場面が頻繁にあります。

しかし、初心者の方からよく聞かれる疑問があります:

「圧縮コマンドがたくさんあるけど、どれを使えばいいの?」 「tar、gzip、zipの違いは何?」 「Windows との互換性を考えるとどれがおすすめ?」 「圧縮率と速度、どちらを優先すべき?」

この記事では、Linuxでの圧縮・解凍の基本的な方法から、各コマンドの特徴と使い分けまで、初心者の方にもわかりやすく解説します。

スポンサーリンク

Linux圧縮の基礎知識

圧縮とアーカイブの違い

多くの人が混同しがちな概念を整理しましょう:

アーカイブ(書庫化)

  • 複数のファイルを1つのファイルにまとめること
  • ファイルサイズは基本的に変わらない
  • tarコマンドが代表的

圧縮

  • データのサイズを小さくすること
  • アルゴリズムを使ってファイルサイズを削減
  • gzipbzip2xzなどが代表的

アーカイブ + 圧縮

  • ファイルをまとめてから圧縮する
  • tar.gztar.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.gz200MB30秒15秒日常利用
tar.bz2150MB90秒45秒サイズ重視
tar.xz120MB180秒60秒長期保存
zip220MB35秒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互換圧縮

安全で効率的な圧縮のポイント

  • 重要なデータは圧縮前にバックアップを取る
  • 大きなファイルは事前にサイズと所要時間を見積もる
  • 定期的な圧縮作業はスクリプト化して自動化する
  • アーカイブの整合性を定期的にチェックする

コメント

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