この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: 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

主要オプション

オプション意味
-ccreate (新規作成)
-xextract (展開)
-tlist (中身一覧)
-zgzip 圧縮/解凍 (.tar.gz / .tgz)
-jbzip2 圧縮/解凍 (.tar.bz2)
-Jxz 圧縮/解凍 (.tar.xz)
-vverbose (詳細表示)
-f <file>アーカイブファイル名指定 (必須)
-C <dir>展開先ディレクトリ
--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 + tartar -xzf archive.tar.gz でそのまま動く
WSLLinux と同じ

差分バックアップ / 増分バックアップ

# 増分バックアップ (新規・変更のみ)
# 初回 (フル)
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 等で制限可能。