【Linux】tarコマンドの使い方|tar.gzの圧縮・解凍・中身確認・-Cで展開先指定

【Linux】tarコマンドの使い方|tar.gzの圧縮・解凍・中身確認・-Cで展開先指定 Linux

Linuxで複数のファイルやディレクトリを1つにまとめて圧縮する定番がtarコマンドです。.tar.gz.tgz)という拡張子のファイルは、tarでまとめてgzipで圧縮したもので、ソフトウェアの配布やバックアップ、サーバー間のファイル転送などで日常的に使われます。

「圧縮はczvf、解凍はxzvf」という呪文のように覚えられがちですが、それぞれの文字には意味があります。また、展開すると大量のファイルがカレントに散らばる(いわゆるtar bomb)のを避けるため、展開前に中身を確認するのが安全な使い方です。この記事では、実機のLinux(WSLのDebian)で実際にコマンドを動かしながら、tarの使い方を整理します。

先に結論

  • 圧縮はtar czvf 出力.tar.gz 対象、解凍はtar xzvf アーカイブ.tar.gzです。
  • 文字の意味:c=作成 / x=展開 / z=gzip / v=経過表示 / f=ファイル名指定。
  • 展開前にtar tzfで中身を確認すると、ファイルの散らばりを防げます。
  • 展開先を指定するには-C ディレクトリを付けます。
  • 最近のtarはtar xfだけで圧縮形式を自動判別して展開できます。
  • 圧縮効果は大きく、実測でテキストは数十分の一になりました。

ほかの基本コマンドはよく使うLinuxコマンドまとめ、古いファイルを探して圧縮するならfindコマンド(-mtime・-exec)、中身の一覧を絞り込むならgrepコマンドもあわせて参考になります。

スポンサーリンク

tarとは(アーカイブ+圧縮)

tarはもともと「複数のファイルを1つにまとめる(アーカイブする)」コマンドで、圧縮そのものはgzipなどが担当します。zオプションを付けると、まとめると同時にgzip圧縮され、.tar.gzができあがります。「まとめる(tar)+縮める(gz)」の2段構えと理解すると、オプションの意味が分かりやすくなります。

圧縮する(tar czvf)

ディレクトリを.tar.gzに圧縮するにはtar czvfを使います。fの直後に出力ファイル名、その後に圧縮したい対象を指定します。

圧縮(作成)
# proj ディレクトリを proj.tar.gz に圧縮
tar czvf proj.tar.gz proj

# 各文字の意味
#  c … create(アーカイブを作成)
#  z … gzip で圧縮
#  v … verbose(処理したファイル名を表示)
#  f … 次にアーカイブのファイル名を指定

# 複数の対象をまとめることもできる
tar czvf backup.tar.gz dir1 dir2 file.txt

実機でも、tar czvf proj.tar.gz projで、ディレクトリ構造(proj/a.txtproj/sub/b.txt)を保ったまま1つの.tar.gzにまとめられました。vを付けると処理中のファイル名が表示されるので、何が入ったか確認できます。圧縮の効果も実測したところ、同じ内容の非圧縮.tarが10,240バイトだったのに対し、.tar.gzは186バイトと、テキスト中心なら大幅に小さくなりました。ログや設定のバックアップに効果的です。

中身を確認する(tar tzf)

展開する前に、アーカイブに何が入っているかを確認できるのがt(list)オプションです。tar tzf アーカイブで、展開せずに中身の一覧が見られます。

中身の確認(展開しない)
# 展開せずに中身の一覧を表示
tar tzf proj.tar.gz
# proj/
# proj/a.txt
# proj/sub/
# proj/sub/b.txt

# 中身が多いときは grep で絞り込み
tar tzf big.tar.gz | grep ".conf" 
展開前のtzfで「tar bomb」を防ぐ

実機で確認したところ、tar tzf proj.tar.gzで、展開せずに中身の一覧(proj/以下の構造)が確認できました。これが重要なのは、アーカイブによっては「トップのフォルダが無く、ファイルがそのまま入っている」ことがあるためです。実機でも、フォルダ無しで固めたアーカイブはtzff.txtのようにファイルが直接見えました。こうしたアーカイブをそのまま展開すると、カレントディレクトリに大量のファイルが散らばってしまいます(俗にtar bombと呼ばれます)。ダウンロードしたアーカイブや出所の分からないファイルは、展開前に必ずtar tzfで中身を確認する習慣をつけると安全です。トップフォルダが無い場合は、先に専用ディレクトリを作って-Cで展開します。

解凍・展開する(tar xzvf)

展開はx(extract)オプションです。tar xzvf アーカイブ.tar.gzで、カレントディレクトリに展開されます。展開先を指定したいときは-Cを使います。

展開と -C
# カレントディレクトリに展開
tar xzvf proj.tar.gz

# -C で展開先ディレクトリを指定(ディレクトリは先に作っておく)
mkdir out
tar xzf proj.tar.gz -C out

# 特定のファイルだけを展開することもできる
tar xzf proj.tar.gz -C out proj/a.txt

実機でも、tar xzf proj.tar.gz -C outoutディレクトリの下に展開され、ファイルの中身も元どおりでした。-C(大文字)で展開先を指定できるため、カレントを散らかさずに済みます(展開先ディレクトリは事前に作っておきます)。また、アーカイブ名の後ろに中のパスを指定すると、特定のファイルだけを取り出すこともできました(proj/a.txtだけを展開)。巨大なバックアップから1ファイルだけ復元したいときに便利です。

モダンなtarはxfだけでよい(自動判別)

覚えることを減らせる朗報です。最近のtar(GNU tar)は、展開時に圧縮形式を自動判別します。つまりzを付けなくても、tar xfだけで.tar.gz.tarも展開できます。

xf で自動判別
# .tar.gz でも .tar でも、これだけで展開できる
tar xf archive.tar.gz
tar xf archive.tar

# .tar.bz2 や .tar.xz も自動判別される
tar xf archive.tar.xz

# 圧縮(作成)時は形式を指定する必要がある
#  z = gzip(.tar.gz) / j = bzip2(.tar.bz2) / J = xz(.tar.xz)

実機でも、zを付けないtar xfで、.tar.gz.tarの両方が正しく展開できました。展開はtar xf アーカイブ(+必要なら-C 展開先)だけ覚えれば実用上十分です。一方、作成時は形式の自動判別が働かないため、.tar.gzを作るならzの指定が必要です。「作るときはczf、開くときはxf」と覚えるのが現代的でシンプルです。

findと組み合わせたバックアップ

tarfindと組み合わせると、実務的なバックアップに使えます。日付入りのファイル名にするのも定番です。

実務での使用例
# 日付入りのバックアップファイルを作る
tar czf backup_$(date +%Y%m%d).tar.gz /var/www/html

# 特定の拡張子だけまとめる(findと組み合わせ)
find . -name "*.log" | tar czf logs.tar.gz -T -
#  -T - は「対象一覧を標準入力から受け取る」

# 展開せずに中身を検索
tar tzf backup.tar.gz | grep "config" 

$(date +%Y%m%d)を使うとbackup_20260702.tar.gzのような日付入りの名前になり、バックアップの管理がしやすくなります。findで絞り込んだファイル一覧を-T -で受け取れば、「.logだけをまとめる」といった柔軟なアーカイブも作れます。定期バックアップをcronに登録するときの基本形です。

主なオプション一覧

tarでよく使うオプションをまとめます。

オプション 働き
c / x / t 作成 / 展開 / 一覧表示
z gzip(.tar.gz)
v 処理ファイル名を表示
f 直後にアーカイブ名を指定
-C ディレクトリ 展開先を指定
j / J bzip2(.tar.bz2) / xz(.tar.xz)

よくある失敗

展開したらファイルが散らばった

トップフォルダが無いアーカイブです。先にtar tzfで中身を確認し、必要なら専用フォルダに-Cで展開します。

fの後にアーカイブ名を書かない

fは直後のファイル名とセットです。tar czvf 出力名 対象の順で書きます。

展開先を指定せずカレントに展開してしまう

-C ディレクトリで展開先を指定できます(ディレクトリは事前に作成)。

作成時にzを忘れて非圧縮になる

tar cfだけでは圧縮されません。.tar.gzにはzが必要です。

tarとzipを混同する

.zipunzipコマンドで扱います。tar.tar.gz系の形式用です。

よくある質問

Qtar.gzを解凍するには?
Atar xzvf ファイル.tar.gzで展開できます。最近のtarならtar xf ファイル.tar.gzだけでも、圧縮形式が自動判別されて展開されます。展開先を指定したいときは-C ディレクトリを付けます。
Qczvfやxzvfの文字はどういう意味ですか?
Acは作成(create)、xは展開(extract)、zはgzip圧縮、vは処理ファイル名の表示(verbose)、fは「直後にアーカイブのファイル名を指定する」という意味です。「作るときはczf、開くときはxf」と覚えると簡単です。
Q展開せずに中身を確認するには?
Atar tzf ファイル.tar.gzで、展開せずに中身の一覧が表示されます。トップフォルダが無いアーカイブをそのまま展開するとカレントにファイルが散らばるため、ダウンロードしたアーカイブは展開前にtzfで確認するのが安全です。
Q展開先のディレクトリを指定するには?
Atar xzf ファイル.tar.gz -C 展開先ディレクトリのように-C(大文字)で指定します。展開先ディレクトリは事前にmkdirで作っておいてください。実機でも、指定したディレクトリの下に正しく展開されることを確認しています。
Qtar.gzとzipは何が違いますか?
Aどちらも圧縮形式ですが、Linuxでは.tar.gzが標準的で、パーミッションなどの情報も保持されます。.zipはWindowsで一般的で、Linuxではzip/unzipコマンドで扱います。Linuxサーバー間のやり取りなら.tar.gz、Windowsと共有するなら.zipが無難です。

まとめ

  • 圧縮はtar czvf 出力.tar.gz 対象、展開はtar xzvf(またはxf)です。
  • c=作成・x=展開・t=一覧・z=gzip・f=ファイル名指定。
  • 展開前にtar tzfで中身を確認すると、ファイルの散らばりを防げます。
  • 展開先は-C ディレクトリで指定します。
  • 最近のtarはxfだけで自動判別。「作るときはczf、開くときはxf」でOKです。

tarは、バックアップ・配布・転送に欠かせないコマンドです。「作るときはczf、開くときはxf」「開く前にtzfで確認」の3つを押さえれば、日常の圧縮・解凍で困ることはありません。findや日付コマンドと組み合わせて、バックアップの自動化にも活用してみてください。