はじめに

こんにちは!今回はtarコマンドについて解説します。

tarはファイルやディレクトリを1つのアーカイブファイルに圧縮・展開するコマンドです。“tape archive"の略ですね。

バックアップ、ファイル配布、サーバー間でのファイル転送など、実務ではめっちゃよく使うコマンドです。圧縮形式の選択肢も多いので、使い方をしっかり理解しておくと役立ちますよ。


tarコマンドとは

tarは、複数のファイルやディレクトリを1つのアーカイブファイルにまとめる外部コマンドです。

単なるアーカイブ化だけでなく、gzipbzip2などの圧縮ツールと組み合わせることで、圧縮アーカイブを作成できます。Linuxサーバーのバックアップやソフトウェアの配布に欠かせないコマンドです。

主な使い方:

  • ファイルのバックアップ
  • ディレクトリ全体の圧縮・転送
  • アーカイブの展開・復元

基本構文

1
tar [オプション] ファイル/ディレクトリ

主な操作モード:

  • c:アーカイブを作成(create)
  • x:アーカイブを展開(extract)
  • t:アーカイブの内容を表示(list)

主なオプション

オプション 説明
-c アーカイブを作成
-x アーカイブを展開
-t アーカイブの内容を表示
-f ファイル名を指定(ほぼ必須)
-v 詳細表示(処理中のファイル表示)
-z gzip圧縮を使用(.tar.gz)
-j bzip2圧縮を使用(.tar.bz2)
-J xz圧縮を使用(.tar.xz)
-p 属性(権限・タイムスタンプ)を保持
-C 展開先ディレクトリを指定

圧縮形式の比較

形式 オプション 圧縮率 速度 用途
tar(無圧縮) (なし) 最速 単なるアーカイブ化
tar.gz -z 速い 汎用的、最も一般的
tar.bz2 -j 遅い 高圧縮率が必要な場合
tar.xz -J 最高 最遅 最高圧縮率が必要な場合

使用例

例1: 単純なアーカイブを作成する(圧縮なし)

1
tar -cf archive.tar myproject/

実行結果:

1
(成功時は何も表示されない)

myproject/ディレクトリをアーカイブ化してarchive.tarを作成します。圧縮はしていないので、ファイルサイズはそのままです。


例2: gzip圧縮してアーカイブを作成する

1
tar -czf archive.tar.gz myproject/

実行結果:

1
(成功時は何も表示されない)

myproject/gzip圧縮してアーカイブ化します。.tar.gzは最も一般的な形式で、Linuxではほぼこの形式が使われます。


例3: bzip2圧縮で高圧縮率を実現

1
tar -cjf archive.tar.bz2 myproject/

実行結果:

1
(成功時は何も表示されない)

bzip2圧縮でアーカイブを作成します。圧縮率は高いですが、処理に時間がかかります。


例4: xz圧縮で最高圧縮率を実現

1
tar -cJf archive.tar.xz myproject/

実行結果:

1
(成功時は何も表示されない)

xz圧縮で最高レベルの圧縮率を実現します。大容量のバックアップに向いています。


例5: アーカイブを展開する

1
tar -xzf archive.tar.gz

実行結果:

1
(成功時は何も表示されない)

archive.tar.gzを展開します。-zオプションで自動的に圧縮形式を認識して展開されます。


例6: 展開先ディレクトリを指定する

1
tar -xzf archive.tar.gz -C /home/user/restore/

実行結果:

1
(成功時は何も表示されない)

archive.tar.gz/home/user/restore/ディレクトリに展開します。-Cオプションで展開先を指定できます。


例7: アーカイブの内容を表示する

1
tar -tzf archive.tar.gz

実行結果:

1
2
3
4
myproject/file1.txt
myproject/file2.txt
myproject/subdir/file3.txt
(全ファイルが表示される)

アーカイブを展開せずに内容を確認できます。大きなファイルのサイズを確認する時に便利です。


例8: 詳細表示付きで展開する

1
tar -xzvf archive.tar.gz

実行結果:

1
2
3
4
5
6
myproject/
myproject/file1.txt
myproject/file2.txt
myproject/subdir/
myproject/subdir/file3.txt
(展開中のファイルが表示される)

-vオプションで展開中のファイルを表示します。処理の進行状況が確認できて便利です。


例9: 属性を保持しながらアーカイブを作成

1
tar -cpzf archive.tar.gz myproject/

実行結果:

1
(成功時は何も表示されない)

-pオプションでファイルの権限とタイムスタンプを保持します。バックアップには重要な設定です。


例10: 複数のディレクトリをまとめてアーカイブ

1
tar -czf backup.tar.gz project1/ project2/ config/

実行結果:

1
(成功時は何も表示されない)

複数のディレクトリを1つのアーカイブにまとめます。バックアップやサーバー転送に便利です。


Tips・注意点

ファイル形式を自動認識する

1
2
3
4
5
6
# gzip、bzip2、xzを自動認識
tar -xf archive.tar.gz
tar -xf archive.tar.bz2
tar -xf archive.tar.xz

# すべて同じコマンドで展開できる(-z、-j、-Jを省略可能)

最新のtarコマンドでは圧縮形式を自動認識するので、-z-jを省略できます。


圧縮形式の選択ガイド

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 汎用的(推奨):tar.gz
tar -czf backup.tar.gz mydata/

# 高圧縮率が必要:tar.bz2
tar -cjf huge_backup.tar.bz2 bigdata/

# 最高圧縮率:tar.xz
tar -cJf archival_backup.tar.xz old_data/

# スピード重視:無圧縮tar
tar -cf fast_archive.tar mydata/

用途に応じて圧縮形式を選びましょう。迷ったらtar.gzが無難です。


アーカイブのサイズを確認

1
2
3
4
5
# ファイルサイズを表示
ls -lh archive.tar.gz

# アーカイブ内容のサイズ(圧縮前)を確認
tar -tzf archive.tar.gz | wc -l

アーカイブ作成後は、サイズと含まれるファイル数を確認しましょう。


現在のディレクトリに展開しない工夫

1
2
3
4
5
6
# ✗ 危険:ファイルが現在のディレクトリに展開される
tar -xzf archive.tar.gz

# ✓ 安全:先にディレクトリを作成してから展開
mkdir extract_dir
tar -xzf archive.tar.gz -C extract_dir/

展開時に想定外のファイルが出現するのを防ぐため、専用ディレクトリを作成してから展開するのがベストプラクティスです。


tar爆弾対策

1
2
3
4
5
# アーカイブ内のパス構造を確認してから展開
tar -tzf archive.tar.gz | head

# 確認後に展開
tar -xzf archive.tar.gz

信頼できない出所のアーカイブは、内容を確認してから展開しましょう。


実践的な使い方

ホームディレクトリのバックアップ

1
tar -cpzf home_backup_$(date +%Y%m%d).tar.gz ~

日付付きでホームディレクトリをバックアップします。$(date +%Y%m%d)で現在の日付がファイル名に付きます。


Webサーバーの設定ファイルをバックアップ

1
sudo tar -cpzf /backup/apache_config_$(date +%Y%m%d).tar.gz /etc/apache2/

Apache設定をバックアップしてサーバー障害に備えます。-pで権限を保持することが重要です。


プロジェクトをサーバーに転送

1
2
3
4
5
6
7
8
# ローカルで圧縮
tar -czf myproject.tar.gz myproject/

# サーバーに転送
scp myproject.tar.gz user@server:/home/user/

# サーバーで展開
ssh user@server 'cd /home/user && tar -xzf myproject.tar.gz'

プロジェクト全体をサーバーに転送する標準的な手順です。


アーカイブの内容をフィルタリングして確認

1
2
3
4
5
# tar.gzに含まれるJavaファイルのみ表示
tar -tzf app.tar.gz | grep '\.java$'

# tar.gzに含まれるディレクトリ構造を表示
tar -tzf app.tar.gz | grep '/$'

アーカイブ内の特定ファイルを検索する時に便利です。


ディレクトリをバージョン管理付きでバックアップ

1
2
3
4
5
6
7
# 世代管理:日時で複数バージョンを保持
for i in {1..7}; do
  if [ -f backup_$((i+1)).tar.gz ]; then
    mv backup_$((i+1)).tar.gz backup_$i.tar.gz
  fi
done
tar -czf backup_1.tar.gz mydata/

古いバックアップを世代管理して、複数の復旧ポイントを確保します。


まとめ

tarコマンドのポイント:

  • アーカイブ作成tar -czf archive.tar.gz dir/
  • アーカイブ展開tar -xzf archive.tar.gz
  • 内容確認tar -tzf archive.tar.gz
  • gzip(.tar.gz):最も汎用的、推奨
  • bzip2(.tar.bz2):高圧縮率
  • xz(.tar.xz):最高圧縮率
  • -p:属性保持(バックアップに重要)
  • -v:詳細表示(進行状況確認)
  • よく使う組み合わせ:tar -czf, tar -xzf, tar -tzf

バックアップとファイル転送の基本となるコマンドです。圧縮形式の選択と属性保持を意識することで、実務的なバックアップ運用ができるようになりますよ!