「
tar -xvf と tar -zxvf の違いがいつまでも頭に入らない」Linuxを触り始めた頃、誰もが一度はぶつかる壁です。
この記事では、Linuxでアーカイブファイルを展開する
tar コマンドの実践的な使い方を解説します。基本となる
tar -xvf・tar -zxvf の組み合わせから、上書きを防ぐ安全策、特定のディレクトリだけ展開する方法、現場で詰まりやすいエラー対処まで網羅しました。この記事のポイント
・tar -xvf ファイル.tar が「展開」の基本書式
・gzip圧縮されているなら tar -zxvf ファイル.tar.gz
・bzip2圧縮なら -z の代わりに -j(tar -jxvf)
・-k オプションで既存ファイルを上書きせず安全に展開できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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 -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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:yumでダウンロードしたRPMを残す方法|keepcache設定とキャッシュ管理
- 前のページへ:tarコマンドでディレクトリを圧縮(アーカイブ)する方法|除外設定も
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます