アーカイブと圧縮の基礎
アーカイブと圧縮は異なる概念です:
- アーカイブ: 複数のファイルを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によるアーカイブの作成と管理
- 各種圧縮形式の特徴と使い分け
- 効率的なバックアップ手法
- クロスプラットフォーム対応
適切な圧縮方法を選択することで、ストレージの節約と効率的なファイル管理が可能になります。
💡 次のレッスンでは、シンボリックリンクとハードリンクについて学びます。