今回はLinuxコマンドであるtarコマンドについて解説します
複数のファイルやディレクトリを1つにまとめたり、圧縮・解凍したりできるコマンドです
.tar.gzの展開や設定ファイルのバックアップなど、実際の現場で大活躍するのでぜひ覚えて帰ってくださいね!
※注 本文の△は半角スペースに置き換えてください。わかりやすくするために△で記述してます
tarコマンドとは??
tarコマンドは、複数のファイルやディレクトリを1つのファイル(アーカイブ)にまとめるコマンドです
「Tape ARchive」の略から名付けられ、もともとは磁気テープへのバックアップ用に作られました
ポイントは、tar自体は「まとめる」だけで圧縮はしないということです
圧縮はgzipやbzip2、xzといった別のプログラムが担当し、tarはオプションでそれらを呼び出します
# .tar
# まとめただけ(圧縮なし)
# .tar.gz(.tgz)
# tarでまとめてgzipで圧縮
# .tar.bz2
# tarでまとめてbzip2で圧縮
# .tar.xz
# tarでまとめてxzで圧縮
この記事の実行結果は、GNU tar 1.35(Ubuntu 24.04)で確認しています
tarコマンドの主なオプション
tarコマンドは、動作を決めるオプション(-c・-x・-t・-rのどれか1つ)と、組み合わせて使うオプションを並べて使います
| オプション | 意味 |
|---|---|
| -c (–create) | アーカイブを作成するオプション |
| -z / -j / -J | 圧縮形式を指定するオプション |
| -t (–list) | アーカイブの中身を一覧表示するオプション |
| -x (–extract) | アーカイブを展開するオプション |
| -C (–directory) | 指定したディレクトリに移動してから処理するオプション |
| –exclude | 特定のファイルを除外してアーカイブするオプション |
| -a (–auto-compress) | ファイル名の拡張子を見て圧縮形式を自動で選ぶオプション(GNU tarのオプション) |
ここからは、次のような練習用ディレクトリprojectを使って説明します
作業用のディレクトリtar-testを作り、その中で次のコマンドを実行して準備してください
app.logは同じような行が1500行続くログなので、圧縮がとてもよく効くファイルです
mkdir△tar-test
cd△tar-test
mkdir△-p△project/src△project/logs
echo△key=value△>△project/config.conf
printf△’#!/bin/bash\necho△”start△app”\n’△>△project/src/app.sh
echo△’TODO:△ログのローテーション設定を見直す’△>△project/src/memo.txt
seq△-f△’2026-10-28△09:00:00△INFO△GET△/api/items△status=200△req=%g’△1△1500△>△project/logs/app.log
ls△-lR△project
実行結果:
project:
total 12
-rw-rw-r– 1 user user 10 Nov 1 12:04 config.conf
drwxrwxr-x 2 user user 4096 Nov 1 12:04 logs
drwxrwxr-x 2 user user 4096 Nov 1 12:04 src
project/logs:
total 88
-rw-rw-r– 1 user user 88893 Nov 1 12:04 app.log
project/src:
total 8
-rw-rw-r– 1 user user 29 Nov 1 12:04 app.sh
-rw-rw-r– 1 user user 55 Nov 1 12:04 memo.txt
cat△project/config.conf
実行結果:
key=value
cat△project/src/app.sh
実行結果:
#!/bin/bash
echo “start app”
cat△project/src/memo.txt
実行結果:
TODO: ログのローテーション設定を見直す
head△-n△3△project/logs/app.log
実行結果:
2026-10-28 09:00:00 INFO GET /api/items status=200 req=1
2026-10-28 09:00:00 INFO GET /api/items status=200 req=2
2026-10-28 09:00:00 INFO GET /api/items status=200 req=3
wc△-l△project/logs/app.log
実行結果:
1500 project/logs/app.log
-c (–create)
アーカイブを作成するオプション
-fでアーカイブのファイル名を、-vで処理したファイル名の表示を指定します
tar△-cvf△project.tar△project
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
表示が不要なら-vを外してtar -cf project.tar projectでOKです
-z / -j / -J
圧縮形式を指定するオプション
-zはgzip、-jはbzip2、-J(大文字)はxzで圧縮・展開します
tar△-czvf△project.tar.gz△project
# 実務で一番よく使うgzip圧縮
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
tar△-cjvf△project.tar.bz2△project
tar△-cJvf△project.tar.xz△project
# どちらも-czvfと同じファイル一覧が表示されます
ls△-lh△project.tar*
実行結果:
-rw-rw-r– 1 user user 100K Nov 1 12:05 project.tar
-rw-rw-r– 1 user user 2.4K Nov 1 12:05 project.tar.bz2
-rw-rw-r– 1 user user 4.5K Nov 1 12:05 project.tar.gz
-rw-rw-r– 1 user user 1.3K Nov 1 12:05 project.tar.xz
今回のapp.logは同じような行が続くので、100Kのアーカイブがどの形式でも数Kまで小さくなりました
一般的に、圧縮率はxz>bzip2>gzip、処理速度はその逆でgzipが一番速い傾向があります(実際の差はファイルの中身によって大きく変わります)
迷ったら互換性が高く速いgzipを選んでおけば間違いありません
-t (–list)
アーカイブの中身を一覧表示するオプション
展開する前に「何が入っているか」を確認するクセをつけておくと安心です
tar△-tf△project.tar.gz
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
tar△-tvf△project.tar.gz
実行結果:
drwxrwxr-x user/user 0 2026-11-01 12:04 project/
drwxrwxr-x user/user 0 2026-11-01 12:04 project/src/
-rw-rw-r– user/user 29 2026-11-01 12:04 project/src/app.sh
-rw-rw-r– user/user 55 2026-11-01 12:04 project/src/memo.txt
-rw-rw-r– user/user 10 2026-11-01 12:04 project/config.conf
drwxrwxr-x user/user 0 2026-11-01 12:04 project/logs/
-rw-rw-r– user/user 88893 2026-11-01 12:04 project/logs/app.log
# -vを付けると権限・所有者・サイズ・日時まで表示されます
-x (–extract)
アーカイブを展開するオプション
カレントディレクトリにproject/が展開されます
tar△-xzvf△project.tar.gz
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
tar△-xf△project.tar.xz
# 最近のGNU tarは圧縮形式を自動判別するので、zやJを省略してもOK
-C (–directory)
指定したディレクトリに移動してから処理するオプション
展開先のディレクトリは事前に作っておく必要があります
mkdir△out
tar△-xzf△project.tar.gz△-C△out
ls△out
実行結果:
project
–exclude
特定のファイルを除外してアーカイブするオプション
パターンはシングルクォートで囲んでおくと、シェルに勝手に展開されずに安全です
tar△-czvf△nolog.tar.gz△–exclude=’*.log’△project
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
# app.logが含まれていません(logs/ディレクトリ自体は残ります)
-a (–auto-compress)
ファイル名の拡張子を見て圧縮形式を自動で選ぶオプション(GNU tarのオプション)
tar△-caf△auto.tar.xz△project
file△auto.tar.xz
実行結果:
auto.tar.xz: XZ compressed data, checksum CRC64
基本的な使い方
tarコマンドの基本的な構文は「tar△オプション△アーカイブファイル名△対象ファイル」となります
覚え方のコツは「c=作る、x=展開、t=見る」+「z/j/J=圧縮形式」+「v=表示、f=ファイル名」です
czvfは「gzipで圧縮しながら作成、経過を表示、ファイル名は次」という意味になります
tar△-czvf△backup.tar.gz△project
projectをgzipで圧縮してbackup.tar.gzを作成
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
tar△-tvf△backup.tar.gz
backup.tar.gzの中身を詳しく確認
実行結果:
drwxrwxr-x user/user 0 2026-11-01 12:04 project/
drwxrwxr-x user/user 0 2026-11-01 12:04 project/src/
-rw-rw-r– user/user 29 2026-11-01 12:04 project/src/app.sh
-rw-rw-r– user/user 55 2026-11-01 12:04 project/src/memo.txt
-rw-rw-r– user/user 10 2026-11-01 12:04 project/config.conf
drwxrwxr-x user/user 0 2026-11-01 12:04 project/logs/
-rw-rw-r– user/user 88893 2026-11-01 12:04 project/logs/app.log
tar△-xzvf△backup.tar.gz
backup.tar.gzをカレントディレクトリに展開
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
mkdir△restore
展開先のディレクトリrestoreを作成
tar△-xzf△backup.tar.gz△-C△restore
backup.tar.gzをrestoreに展開
ls△restore
実行結果:
project
tarコマンドの実用的な活用例
実際の現場でよく使われるtarコマンドの活用例をご紹介します
特定のファイルだけ取り出す
# 特定のファイルだけ展開する(パスは-tで表示されたとおりに書く)
tar△-xzf△project.tar.gz△project/config.conf
# 展開せずに中身だけ画面に表示する(-O)
tar△-xOzf△project.tar.gz△project/config.conf
実行結果:
key=value
先頭のディレクトリを外して展開する
–strip-components=1を付けると、パスの先頭1階層(ここではproject/)を取り除いて展開できます
mkdir△out4
tar△-xzf△project.tar.gz△-C△out4△–strip-components=1
ls△out4
実行結果:
config.conf logs src
日付つきでバックアップを取る
設定ファイルを変更する前には、日付入りのファイル名でバックアップを取っておくと安心です
tar△-czf△backup_$(date△+%Y%m%d).tar.gz△project
ls△backup_*
実行結果:
backup_20261101.tar.gz
# 実行した日の日付がファイル名に入ります
# project/を含めずに中身だけまとめる(作成時の-C)
tar△-czf△conf.tar.gz△-C△project△config.conf△src
tar△-tf△conf.tar.gz
実行結果:
config.conf
src/
src/app.sh
src/memo.txt
アーカイブと現在のファイルの差分を確認する
-d(–diff)で、アーカイブ内のファイルと現在のファイルを比較できます
echo△changed△>>△project/config.conf
tar△-dzf△project.tar.gz
実行結果:
project/config.conf: Mod time differs
project/config.conf: Size differs
更新日時(Mod time)とサイズ(Size)がアーカイブの中身と違っていることがわかります
トラブルシューティング
tarコマンド使用時によくある問題と解決法です
-fのすぐ後ろにはファイル名を書く
-fは「次の引数をアーカイブ名として扱う」オプションです
そのため-cfzのようにfの後ろに別の文字を書くと、zという名前のアーカイブが作られてしまいます
tar△-cfz△bad.tar.gz△project
実行結果:
tar: bad.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
ls△z
実行結果:
z
tar△-tf△z
実行結果:
project/
project/src/
project/src/app.sh
project/src/memo.txt
project/config.conf
project/logs/
project/logs/app.log
# projectがzという名前のアーカイブにまとめられています
オプションをまとめて書くときは、fを最後に置くと覚えておきましょう
展開すると同名ファイルは上書きされる
※tarは展開先に同じ名前のファイルがあると、確認なしで上書きします
既存ファイルを上書きしたくないときは–keep-old-files(-k)を付けると、同名ファイルがあった場合はエラーにして上書きしません
tar△-xzf△project.tar.gz△-C△out△–keep-old-files
実行結果:
tar: project/src/app.sh: Cannot open: File exists
tar: project/src/memo.txt: Cannot open: File exists
tar: project/config.conf: Cannot open: File exists
tar: project/logs/app.log: Cannot open: File exists
tar: Exiting with failure status due to previous errors
一番安全なのは、空のディレクトリを作って-Cで展開し、中身を確認してからmvコマンドで移動する方法です
圧縮済みアーカイブには追加できない
-r(追加)は圧縮なしの.tarにしか使えません
# 事前準備:追加用のファイルextra.txtを作る
echo△extra△>△extra.txt
cat△extra.txt
実行結果:
extra
tar△-rf△project.tar.gz△extra.txt
実行結果:
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
絶対パスで作成したときのメッセージ
絶対パスを指定してアーカイブを作ると、次のようなメッセージが出ます
tar△-czf△etc_hosts.tar.gz△/etc/hosts
実行結果:
tar: Removing leading `/’ from member names
tar△-tf△etc_hosts.tar.gz
実行結果:
etc/hosts
これはエラーではなく、展開時に元のファイル(/etc/hosts)を上書きしないよう、先頭の/を外して保存したという安全のためのメッセージです
後片付けでrm -rfを使うときは慎重に
※rm -rfは確認なしで完全に削除され、元に戻せません
展開したディレクトリを削除するときは、実行前に必ずpwdで場所を確認し、対象のパスを見直してから実行してください
まとめ
いかがでしたでしょうか
今回はtarコマンドについてまとめてみました
tarは「まとめる」コマンドで、圧縮はz(gzip)・j(bzip2)・J(xz)で指定し、動作はc(作成)・x(展開)・t(一覧)で切り替えます
展開前に-tで中身を確認し、-Cで展開先を指定すると安全です
まずはczvf(作る)・tvf(見る)・xzvf(展開する)の3つから、ぜひマスターしてください!
