tarコマンドでアーカイブファイルを展開する方法|tar -xvf・-zxvfの使い分けと安全策

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > tarコマンドでアーカイブファイルを展開する方法|tar -xvf・-zxvfの使い分けと安全策
「ダウンロードしてきた tar.gz ファイル、どうやって展開するんだったか毎回忘れる」
tar -xvftar -zxvf の違いがいつまでも頭に入らない」
Linuxを触り始めた頃、誰もが一度はぶつかる壁です。

この記事では、Linuxでアーカイブファイルを展開する tar コマンドの実践的な使い方を解説します。
基本となる tar -xvftar -zxvf の組み合わせから、上書きを防ぐ安全策、特定のディレクトリだけ展開する方法、現場で詰まりやすいエラー対処まで網羅しました。

この記事のポイント

tar -xvf ファイル.tar が「展開」の基本書式
・gzip圧縮されているなら tar -zxvf ファイル.tar.gz
・bzip2圧縮なら -z の代わりに -jtar -jxvf
-k オプションで既存ファイルを上書きせず安全に展開できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

tar展開の基本書式(tar -xvf / tar -zxvf)

アーカイブファイルを展開するには、tarコマンドに -x オプションを付けて実行します。
保存対象がテープではなくファイルの場合は -f オプションも付けます。

また、展開の実行結果を表示させるには -v オプションを付け、さらに圧縮されている場合には -z オプションも付けます。

展開先ディレクトリに、アーカイブ内と同じ名前のファイルやディレクトリが存在した場合、タイムスタンプを比較し、新しい日付のファイル・ディレクトリが残ります。
-k オプションを付けることで、同じファイルが存在した場合には警告を表示して処理を中断させることも可能です。

引数にはこれらのオプションの他に、展開したいアーカイブファイル名を指定します。これらアーカイブファイルは展開後も削除されず残ります。

主要オプションの意味

オプションを丸暗記しようとすると挫折するので、意味とセットで覚えてください。

x:展開(eXtract)する
v:詳細表示(Verbose)する
f:対象のファイル名を指定(File)する
z:gzip形式(.gz)を扱う
j:bzip2形式(.bz2)を扱う
k:既存ファイルを上書きしない(Keep)

実例:gzipアーカイブを展開する(tar -zxvf)

最も使用頻度が高いケースが、.tar.gz のgzip圧縮アーカイブを展開するパターンです。

[pakira@Tiger ~]$ ls -l -rw-rw-r-- 1 pakira pakira 5056 3月 5 07:29 2013 work.tar.gz # カレントディレクトリにアーカイブファイルがあることを確認 [pakira@Tiger ~]$ tar zxvf work.tar.gz work/ work/country_list_cpm2.txt work/country_list.tgz work/country_list.txt work/country_list.tbz2 work/country_list_cpm1.txt work/country_list_column.txt # work/ ディレクトリ配下に各ファイルが展開された

書式は tar -zxvf ファイル名。「z(gzip)」「x(展開)」「v(詳細表示)」「f(ファイル指定)」を全部入りにしているので、何が起きているかをすべて画面で確認できます。

非圧縮の.tarだけを展開する(tar -xvf)

すでに圧縮を外した .tar ファイルや、最初から圧縮されていないアーカイブを扱う時は -z を省きます。

# tar -xvf archive.tar

ここで -z を付けたまま実行すると「This does not look like a tar archive」というエラーになります。圧縮の有無を間違えた時の典型的な症状です。

bzip2形式の.tar.bz2を展開する(tar -jxvf)

.tar.bz2 形式で配布されているソースコードもよく見かけます。この場合は z の代わりに j を使います。

# tar -jxvf archive.tar.bz2

新しめのtarでは tar -xvf archive.tar.bz2 のように -z-j を省略しても、拡張子から自動判定してくれる実装が増えています。とはいえ古いCentOS 6世代のサーバーでは判定されないこともあるため、明示するクセをつけておくと安全です。

展開先を指定する・上書きを防ぐ

1. 展開先ディレクトリを指定する(-C)

何も指定しないと、カレントディレクトリに展開されます。
「/opt」配下や「/tmp」配下など、明示的に場所を指定したい時は -C(大文字のC)オプションを使います。

# /tmp 配下に展開する # tar -zxvf work.tar.gz -C /tmp/

-C で指定するディレクトリは 事前に存在している必要 があります。tarは自動でディレクトリを作ってくれないので、必要であれば事前に mkdir しておきます。

2. 既存ファイルを上書きしない(-k)

同名のファイルが展開先に既にある時、デフォルトでは上書きされます。本番サーバーで他人の作業結果を壊すリスクを避けたい時は、-k オプションで「既存があれば中断」させるのが安全です。

[pakira@Tiger ~]$ tar zxvfk work.tar.gz work/ work/country_list_cpm2.txt tar: work/country_list_cpm2.txt: open 不能: ファイルが存在します work/country_list.tgz tar: work/country_list.tgz: open 不能: ファイルが存在します work/country_list.txt tar: work/country_list.txt: open 不能: ファイルが存在します work/country_list.tbz2 tar: work/country_list.tbz2: open 不能: ファイルが存在します work/country_list_cpm1.txt tar: work/country_list_cpm1.txt: open 不能: ファイルが存在します work/country_list_column.txt tar: work/country_list_column.txt: open 不能: ファイルが存在します tar: 前のエラーにより失敗ステータスで終了します # 同名のファイルが存在するため、警告を表示して展開を中止する

本番環境で「いったいどっちのファイルが残るんだ」という事故を回避するために、-k は地味だが非常に頼りになるオプションです。

3. 中身を確認してから展開する(-t)

配布元から受け取った得体の知れない .tar.gz を、いきなり展開して現在のディレクトリを散らかすのが怖い時。
先に -t(lisT)オプションで中身を一覧表示するのが安全な手順です。

# 展開せずに中身を確認する # tar -ztvf work.tar.gz

特に意図しない絶対パス(/etc/passwd など)が入っているアーカイブを展開すると、システムファイルを上書きするリスクがあります。事前確認の癖をつけてください。

実務でよく使う応用パターン

特定のファイルやディレクトリだけ展開する

アーカイブ全体ではなく、中の特定ファイルだけを取り出したい時は、展開対象を引数で指定できます。

# work/country_list.txt だけを展開する # tar -zxvf work.tar.gz work/country_list.txt

ログのバックアップ logs.tar.gz から特定の日付のログだけ取り出す、といった用途で出番が多いパターンです。

所有者を変えずに展開する(--no-same-owner)

rootで展開した時、tar内に記録された元の所有者UIDがそのまま復元されてしまい、想定外のユーザーが所有者になることがあります。明示的に「今のユーザーで」展開したい時は --no-same-owner を付けます。

# 所有者を維持せず、実行ユーザーの所有で展開する # tar -zxvf work.tar.gz --no-same-owner

逆に、バックアップから元の所有者を完全復元したい時は --same-owner(root実行時のデフォルト)が効きます。意図を明示するために、本番作業ではどちらかを必ず書く方がトラブルが減ります。

トラブルシュート・エラー対処

「This does not look like a tar archive」が出る

原因の9割は「圧縮形式の指定ミス」です。
ファイル名が .tar.gz なら -z.tar.bz2 なら -j を付けます。

拡張子が .tgz.tbz のように省略されていて圧縮形式が判別しづらい場合は、file コマンドで実体を確認してください。

[pakira@Tiger ~]$ file work.tar.gz work.tar.gz: gzip compressed data, from Unix, last modified: ... # gzip 圧縮であることが確認できる

「Cannot open: No such file or directory」が出る

-f の直後にファイル名が来ていない時の典型エラーです。
tar -zxfv work.tar.gz のように書くと、tarは「-f の引数 = v」と解釈し、「v」というファイルを開こうとして失敗します。

慣例として f は一番最後に置く-zxvf)と覚えておけば、この事故は起きません。

容量不足で展開が途中で止まった

df -h で展開先パーティションの空きを確認します。tarは展開途中で容量が尽きると中途半端なファイルを残すため、再展開する前に rm -rf で残骸を消すか、別パーティションに -C で逃がしてください。

本記事のまとめ

やりたいこと コマンド
gzip圧縮アーカイブを展開する tar -zxvf ファイル.tar.gz
非圧縮の.tarを展開する tar -xvf ファイル.tar
bzip2形式のアーカイブを展開する tar -jxvf ファイル.tar.bz2
展開先ディレクトリを指定する tar -zxvf ファイル.tar.gz -C /出力先パス/
既存ファイルを上書きせず展開する tar -zxvfk ファイル.tar.gz
展開せず中身だけ確認する tar -ztvf ファイル.tar.gz
特定ファイルだけ取り出す tar -zxvf ファイル.tar.gz パス/対象ファイル

■関連記事
tarコマンド

tarの展開先を間違えただけで、本番サーバーは壊れます

-C や絶対パスの指定を一つ誤るだけで、システムに必要な重要ファイルを上書きしてしまったり、想定外の場所に大量のファイルを展開してしまう大事故に繋がります。
ネットの断片情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。