メインコンテンツへスキップ
レッスン 2 / 8推定時間: 30

圧縮とアーカイブ

tar、gzip、zip などのツールを使ってファイルの圧縮とアーカイブを効率的に行う方法を学びます

このレッスンの学習目標

  • 様々な圧縮形式の特徴を理解する
  • tarコマンドを使いこなす
  • 状況に応じた最適な圧縮方法を選択できる
  • 圧縮ファイルの中身を効率的に操作できる

アーカイブと圧縮の基礎

アーカイブと圧縮は異なる概念です:

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

tar - Tape Archive

tarは最も一般的なアーカイブツールです。

tarの基本操作

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

tarの主要オプション:

  • c : 作成(Create)
  • x : 展開(eXtract)
  • t : 一覧表示(lisT)
  • v : 詳細表示(Verbose)
  • f : ファイル指定(File)
  • z : gzip圧縮
  • j : bzip2圧縮
  • J : xz圧縮

アーカイブの作成と展開

# 基本的なアーカイブ作成
tar -cvf archive.tar file1.txt file2.txt

# ディレクトリ全体をアーカイブ
tar -cvf project.tar project/

# 圧縮付きアーカイブ
tar -czvf archive.tar.gz project/    # gzip
tar -cjvf archive.tar.bz2 project/   # bzip2
tar -cJvf archive.tar.xz project/    # xz

# アーカイブの展開
tar -xvf archive.tar
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xJvf archive.tar.xz

tarの高度な使用法

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# アーカイブの内容確認
tar -tvf archive.tar

# 特定のファイルのみ展開
tar -xvf archive.tar path/to/specific/file

# 除外パターン
tar -czvf backup.tar.gz --exclude='*.log' --exclude='temp/*' backup/

# 差分バックアップ
tar -czvf backup_$(date +%Y%m%d).tar.gz --newer-mtime='2024-01-01' /path/to/data

# 標準出力への出力(パイプで使用)
tar -czf - directory/ | ssh user@remote 'tar -xzf -'

圧縮形式の比較

主要な圧縮形式

形式拡張子速度圧縮率用途
gzip.gz速い普通一般的、互換性高い
bzip2.bz2普通高いアーカイブ配布
xz.xz遅い最高長期保存
zip.zip速い普通Windows互換
7z.7z遅い最高高圧縮が必要な場合

圧縮形式の選択基準

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# 圧縮率の比較
time gzip -c test_file > test_file.gz
time bzip2 -c test_file > test_file.bz2
time xz -c test_file > test_file.xz

# サイズ比較
ls -lh test_file*

gzip - GNU zip

最も一般的な圧縮ツールです。

gzipの基本操作

# ファイルを圧縮(元ファイルは削除される)
gzip file.txt

# 圧縮レベル指定(1-9、9が最高圧縮)
gzip -9 file.txt

# 元ファイルを保持
gzip -k file.txt

# ディレクトリ内のファイルを個別に圧縮
gzip -r directory/

# 解凍
gunzip file.txt.gz
# または
gzip -d file.txt.gz

gzipの応用

# 標準出力に圧縮(パイプで使用)
cat large_file.txt | gzip > compressed.txt.gz

# 圧縮ファイルの中身を確認
zcat file.txt.gz
zless file.txt.gz

# 圧縮ファイル内を検索
zgrep "pattern" file.txt.gz

# 複数ファイルを連結して圧縮
cat file1.txt file2.txt | gzip > combined.txt.gz

zip/unzip - クロスプラットフォーム圧縮

Windowsとの互換性が必要な場合に使用します。

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

zipの操作

# ZIPファイルの作成
zip archive.zip file1.txt file2.txt

# ディレクトリを再帰的に圧縮
zip -r archive.zip directory/

# パスワード付きZIP
zip -e secure.zip sensitive.txt

# 圧縮レベル指定
zip -9 maximum.zip large_file.txt

# ZIPファイルの内容確認
unzip -l archive.zip

# 特定のファイルのみ展開
unzip archive.zip specific_file.txt

# 別のディレクトリに展開
unzip archive.zip -d /path/to/destination/

高度な圧縮テクニック

複数の圧縮形式を扱う

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# 自動判別して展開
tar -xvf archive.tar.gz  # 拡張子から自動判別

# 圧縮形式の変換
gunzip -c file.txt.gz | bzip2 > file.txt.bz2

# 複数ステップの圧縮
tar -cf - directory/ | gzip -9 | gpg -c > backup.tar.gz.gpg

分割アーカイブ

# 大きなファイルを分割
split -b 100M large_archive.tar.gz archive_part_

# 分割ファイルの結合
cat archive_part_* > restored_archive.tar.gz

# tarと組み合わせた分割
tar -czf - large_directory/ | split -b 1G - backup.tar.gz.

# 復元
cat backup.tar.gz.* | tar -xzf -

アーカイブの更新

# tarアーカイブにファイルを追加
tar -rvf archive.tar newfile.txt

# 圧縮アーカイブの更新(一度解凍が必要)
gunzip archive.tar.gz
tar -rvf archive.tar newfile.txt
gzip archive.tar

# ZIPファイルの更新
zip -u archive.zip updated_file.txt

実践演習

演習1:効率的なバックアップ

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

プロジェクトをバックアップしますが、logsとtempディレクトリは除外してください。

解答例:

# 除外パターンでバックアップ
tar -czvf project_backup_$(date +%Y%m%d).tar.gz \
  --exclude='project/logs' \
  --exclude='project/temp' \
  --exclude='*.tmp' \
  project/

# 確認
tar -tvf project_backup_*.tar.gz

演習2:圧縮形式の変換

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

.gz形式のファイルを.xz形式に変換してください(より高圧縮)。

解答例:

# 方法1: パイプを使用
gunzip -c large.txt.gz | xz -9 > large.txt.xz

# 方法2: 一時ファイルを使用
gunzip large.txt.gz
xz -9 large.txt

# サイズ比較
ls -lh large.txt.*

演習3:増分バックアップ

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

初回フルバックアップ後、新しいファイルのみを含む増分バックアップを作成してください。

解答例:

# フルバックアップ
tar -czvf full_backup.tar.gz .
touch timestamp

# 新しいファイルを追加
sleep 2
touch file{6..8}.txt

# 増分バックアップ
tar -czvf incremental_backup.tar.gz --newer=timestamp .

# 確認
tar -tvf incremental_backup.tar.gz

圧縮のベストプラクティス

1. 用途に応じた形式選択

# 速度重視(ログのローテーション等)
gzip -1 access.log

# 圧縮率重視(長期アーカイブ)
xz -9 archive.tar

# 互換性重視(配布用)
zip -r release.zip product/

2. 圧縮前の準備

# 不要ファイルの削除
find . -name "*.tmp" -delete
find . -name ".DS_Store" -delete

# ファイルの整理
tar -czf sorted.tar.gz $(ls | sort)

3. 検証とテスト

# アーカイブの整合性確認
tar -tzf archive.tar.gz > /dev/null
gzip -t file.gz
zip -T archive.zip

# 展開テスト
tar -tzf archive.tar.gz | head

トラブルシューティング

よくある問題と解決策

# 「tar: Removing leading '/' from member names」警告
# 解決: 相対パスを使用
tar -czf backup.tar.gz -C / home/user/data

# 圧縮ファイルが破損
# 修復を試みる
gzip -t file.gz || gzip -d < file.gz > recovered.txt

# ディスク容量不足
# 別の場所に展開
tar -xzf archive.tar.gz -C /tmp/

まとめ

このレッスンでは、様々な圧縮とアーカイブの方法を学びました:

  • tarによるアーカイブの作成と管理
  • 各種圧縮形式の特徴と使い分け
  • 効率的なバックアップ手法
  • クロスプラットフォーム対応

適切な圧縮方法を選択することで、ストレージの節約と効率的なファイル管理が可能になります。

💡 次のレッスンでは、シンボリックリンクとハードリンクについて学びます。

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行