タイトル: tar ファイルの圧縮と解凍
SEOタイトル: Linux tar コマンド完全ガイド (圧縮/解凍)
| この記事の要点 |
- 圧縮:
tar -czf archive.tar.gz dir/ (gzip) - 解凍:
tar -xzf archive.tar.gz - 中身一覧:
tar -tzf archive.tar.gz (展開せずに見るだけ) - オプション暗記: c=create, x=extract, t=list, z=gzip, j=bzip2, J=xz, v=verbose, f=file
- 圧縮率:
tar.xz > tar.bz2 > tar.gz (xz が最も小さい、gzip が最速) - 除外:
--exclude="*.log" / 展開先指定: -C /tmp - pigz で並列 gzip、pbzip2 で並列 bzip2 → CPU 多コアを活用
- ネット越し:
curl -L URL | tar xz でダウンロードしながら展開
|
tar コマンドの基本
Linux の標準的なアーカイブツール。複数ファイルを 1 つにまとめる (tar = tape archive 由来)。
圧縮機能はgzip / bzip2 / xz を組合せて使います。
# 圧縮: ディレクトリを gzip 形式でアーカイブ
tar -czf archive.tar.gz mydir/
# 解凍 (展開)
tar -xzf archive.tar.gz
# 中身一覧 (展開しない)
tar -tzf archive.tar.gz
# 詳細表示しながら圧縮
tar -czvf archive.tar.gz mydir/
# 圧縮しないただのまとめ (.tar)
tar -cf archive.tar mydir/
tar -xf archive.tar
主要オプション
| オプション | 意味 |
-c | create (新規作成) |
-x | extract (展開) |
-t | list (中身一覧) |
-z | gzip 圧縮/解凍 (.tar.gz / .tgz) |
-j | bzip2 圧縮/解凍 (.tar.bz2) |
-J | xz 圧縮/解凍 (.tar.xz) |
-v | verbose (詳細表示) |
-f | アーカイブファイル名指定 (必須) |
-C | 展開先ディレクトリ |
--exclude=PAT | パターンに合うファイルを除外 |
--strip-components=N | 展開時に先頭 N 層を削る |
-p | パーミッション保持 |
--preserve-permissions | 同上の長形式 |
-a | 拡張子から圧縮形式を自動推定 (GNU tar) |
圧縮形式の比較
| 形式 | 圧縮率 | 速度 | 典型用途 |
| tar.gz / tgz | 中 | ★★★ 高速 | 一般、Web 配布 |
| tar.bz2 | 高 | ★ 遅い | 古典的、最近は xz に置換 |
| tar.xz | ★★★ 最高 | ★ 遅い (展開は速い) | カーネルソース等大物 |
| tar.zst | 高 | ★★★ gzip 並 | 新世代 (Facebook 製) |
実測例 (Linux カーネル 6.x ソース)
| 形式 | サイズ目安 |
| 無圧縮 (tar) | 約 1.3 GB |
| tar.gz | 約 230 MB |
| tar.bz2 | 約 180 MB |
| tar.xz | 約 140 MB |
典型ユースケース
1. バックアップ作成
# 日付付きでバックアップ
tar -czf backup-$(date +%Y%m%d).tar.gz /var/www/html
# 詳細表示
tar -czvf backup.tar.gz /var/www/html
# 除外しながらバックアップ
tar -czf backup.tar.gz /var/www/html \
--exclude='*.log' \
--exclude='node_modules' \
--exclude='vendor/cache'
2. 別ディレクトリへ展開
# /tmp 配下に展開
tar -xzf archive.tar.gz -C /tmp
# 先頭ディレクトリを削って展開 (rails-master/ を削る)
tar -xzf rails-master.tar.gz --strip-components=1
# 特定ファイルだけ展開
tar -xzf archive.tar.gz path/to/file.txt
tar -xzf archive.tar.gz --wildcards "*.conf"
3. 別形式で圧縮
# bzip2 (より小さく)
tar -cjf archive.tar.bz2 mydir/
tar -xjf archive.tar.bz2
# xz (最も小さく)
tar -cJf archive.tar.xz mydir/
tar -xJf archive.tar.xz
# 自動推定 (拡張子で判断、GNU tar)
tar -caf archive.tar.gz mydir/ # gz
tar -caf archive.tar.xz mydir/ # xz
tar -xaf archive.tar.bz2 # 解凍も自動
並列圧縮 (pigz / pbzip2 / pxz)
多コア CPU を活かして圧縮を高速化:
# pigz: 並列 gzip
sudo apt install -y pigz
tar -cf - mydir/ | pigz > archive.tar.gz
# または --use-compress-program
tar --use-compress-program=pigz -cf archive.tar.gz mydir/
# pbzip2: 並列 bzip2
sudo apt install -y pbzip2
tar -cf - mydir/ | pbzip2 > archive.tar.bz2
# pxz: 並列 xz
tar -cf - mydir/ | pxz > archive.tar.xz
# zstd (内蔵並列、速くて小さい)
tar --zstd -cf archive.tar.zst mydir/
tar --zstd -xf archive.tar.zst
# スレッド数指定
pigz -p 8 file.tar # 8 スレッド
ネット越しのアーカイブ操作
# ダウンロードしながら展開 (パイプ)
curl -L https://example.com/source.tar.gz | tar xz
# wget でも
wget -O - https://example.com/source.tar.gz | tar xz
# SSH 越しのバックアップ
tar czf - /var/www/html | ssh user@backup-server "cat > backup.tar.gz"
# SSH 越しの転送+展開
tar czf - /var/www/html | ssh user@target "cd /restore && tar xzf -"
# rsync 経由 (より高機能)
rsync -avz --progress /var/www/html/ user@target:/restore/
Windows での解凍
| ツール | 使い方 |
| Windows 10 1803+ | 標準で tar コマンド搭載 (BSD tar) |
| 7-Zip | 右クリック → 7-Zip → ここに展開 |
| WinRAR | 同じく右クリックメニュー |
| PowerShell + tar | tar -xzf archive.tar.gz でそのまま動く |
| WSL | Linux と同じ |
差分バックアップ / 増分バックアップ
# 増分バックアップ (新規・変更のみ)
# 初回 (フル)
tar --listed-incremental=snapshot.snar -czf full.tar.gz /var/www/html
# 2 回目以降 (差分)
tar --listed-incremental=snapshot.snar -czf incr-$(date +%F).tar.gz /var/www/html
# 復元 (フル → 差分の順)
tar --listed-incremental=/dev/null -xzf full.tar.gz
tar --listed-incremental=/dev/null -xzf incr-2026-06-10.tar.gz
整合性確認
# アーカイブが壊れていないか
tar -tzf archive.tar.gz > /dev/null && echo OK || echo BROKEN
# 詳細チェック (gzip)
gzip -t archive.tar.gz && echo OK
# サイズ・ファイル数確認
tar -tzf archive.tar.gz | wc -l
トラブルシューティング
| 症状 | 原因 | 対処 |
tar: archive: Cannot open: No such file | パス間違い | 絶対パスで指定 |
tar: Removing leading '/' from member names | 絶対パス指定の警告 | 無視可。気になるなら相対パスへ cd |
gzip: stdin: not in gzip format | 拡張子と中身が違う | file archive.tar.gz で確認 |
Unexpected EOF in archive | 転送途中で切れた | 再ダウンロード / 再転送 |
| 展開後のパーミッションがおかしい | -p なしで展開 | tar -xpzf で展開、root で実行 |
| シンボリックリンクが壊れる | 古い tar / 別 OS で作成 | GNU tar 利用、形式に注意 |
FAQ
Q: .tar.gz と .tgz の違い?
A: 中身は全く同じ。拡張子の長さの差だけ。歴史的にファイル名 8 文字制限のあった環境で .tgz が使われた名残。
Q: なぜ f オプションが必要?
A: -f なしだと標準入出力 (パイプ) を期待する。ファイル相手なら必ず -f file.tar.gz。
Q: 巨大ファイルでメモリ不足になる
A: tar はストリーミングなのでメモリは食わない。圧縮プログラムの問題かディスクの問題。xz は特にメモリ大食いなので --memlimit-compress=512MiB 等で制限可能。