こちらからSWELLを購入できます 詳しくはこちら

【Linux】tarコマンド完全ガイド 圧縮・解凍の基本と実践

  • URLをコピーしました!

今回は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/)を取り除いて展開できます

strip-componentsの例
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つから、ぜひマスターしてください!

スポンサーリンク

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!