こんにちは、フルスタックエンジニアのryuです。
今回の記事では、tarコマンドの使い方を解説します。tarコマンドは、ファイルのアーカイブと展開をするコマンドで、複数あるファイルを1つにまとめることができます。
tarコマンドはバックアップをとる際に使われ、システム管理者や開発者にとって非常に便利なツールとなっています。
結論から言うと、tar -czvf で圧縮、tar -xzvf で解凍という2つの型を覚えれば、日常の大半の場面に対応できます。この記事では、基本の書式から実務で役立つ応用テクニックまで順番に見ていきましょう。
tarコマンドとは?アーカイブと圧縮の違い¶
まずは、tarコマンドがどんなコマンドなのかを整理しておきましょう。
tarコマンドとは、複数のファイルやディレクトリを1つのアーカイブファイルにまとめるコマンドです。名前は、磁気テープにデータをまとめて保存していた時代のtape archiveという言葉に由来しています。
ここで初心者の方がつまずきやすいのが、アーカイブと圧縮の違いです。この2つを同じ意味だと思っていませんか?
実は、アーカイブは複数のファイルを1つにまとめる処理のことで、ファイルサイズを小さくする圧縮とは別の作業です。tarコマンド自体はまとめる係で、サイズを小さくするのはgzipやbzip2といった圧縮プログラムの担当になります。
とはいえ、まとめる作業と圧縮を毎回別々に行うのは面倒ですよね。そこでtarコマンドには、アーカイブと圧縮を一度に行うオプションが用意されています。
.tar.gz のように拡張子が2段階になっているのは、tarでまとめてからgzipで圧縮したという処理の流れを表しているためです。意味が分かると、ファイル名から中身を想像できるようになりますよ。
【Linux】tarコマンドの使い方¶
それでは、tarコマンドの基本的な使い方を見ていきましょう。
tarコマンドの基本的な書式¶
tarコマンドの基本的な使い方は以下の通りです。
tar [オプション] [アーカイブファイル名] [対象ファイル・ディレクトリ]
アーカイブファイル名には .tar の拡張子を使います。ファイルの圧縮は、オプションによって異なるアルゴリズムを選択できます。
ここで1つ、大切なルールがあります。-f オプションの直後には、必ずアーカイブファイル名を指定するという点です。
オプションを組み合わせて書くときは、fを一番最後に置くと覚えておきましょう。理由は後半のエラー対処のセクションで詳しく説明します。
tarコマンドのオプション¶
代表的なtarコマンドのオプションは、以下の通りです。
| オプション | 説明 |
|---|---|
| -c | ファイルをアーカイブ化(作成)する |
| -x | ファイルをアーカイブから展開(解凍)する |
| -t | アーカイブの中身を一覧表示する |
| -f | アーカイブファイルの指定 |
| -v | 処理の詳細を表示 |
| -z | gzipで圧縮・展開(.tar.gz 拡張子) |
| -j | bzip2で圧縮・展開(.tar.bz2 拡張子) |
| -J | xzで圧縮・展開(.tar.xz 拡張子) |
| -C | 指定したディレクトリへ移動してから処理する |
| -a | 拡張子に応じた圧縮形式を自動で選ぶ |
| --exclude | 指定したパターンのファイルを除外する |
tarコマンドはこれらのオプションを組み合わせて、ファイルをアーカイブしたり、展開(解凍)したりします。
すべてを暗記する必要はありません。作成のc、展開のx、一覧表示のtという3つの動作に、fとvを添えるのが基本形です。
次にtarコマンドの具体的な使用例をみていきましょう。
tarコマンドの具体的な使用例¶
ここからは、実際のコマンド例とあわせて動きを確認していきます。
手元にLinux環境がない方は、VirtualBoxでLinuxをインストールする手順を参考に用意してみてください。実際に打ちながら読むと、理解の速さが違いますよ。
ファイルのアーカイブ¶
ファイルのアーカイブをする場合は、以下のように実行します。
$ tar -cvf archive.tar file1 file2 dir1
file1
file2
dir1/
上記は、file1とfile2とdir1をarchive.tarというアーカイブファイルにまとめています。オプションの cf だけでもアーカイブできますが、v を加えることで、処理の詳細を表示します。
vを付けると、上記のようにアーカイブされたファイル名が1行ずつ表示されます。どのファイルが取り込まれたか、一目で分かって安心ですね。
対象にディレクトリを指定した場合は、その中のファイルもまとめて取り込まれます。
アーカイブしたファイルの展開¶
アーカイブしたファイルを展開をする場合は、以下のように実行します。
$ tar -xvf archive.tar
file1
file2
dir1/
オプションの x はファイルの展開を意味し、-v は処理の詳細を表示するオプションです。-f の後には展開したいアーカイブファイル名を指定します。
展開されたファイルは、カレントディレクトリに復元されます。同じ名前のファイルがすでにあると上書きされるため、展開する場所には注意しましょう。
アーカイブと同時に圧縮も行う¶
アーカイブと同時に圧縮を行う場合は、以下のように実行します。
# gzipで圧縮しながらアーカイブを作成
tar -czvf archive.tar.gz file1 file2 dir1
# tar.gzファイルを展開(解凍)
tar -xzvf archive.tar.gz
先ほどのアーカイブしたコマンドに、z のオプションを加えています。これは、gzipでファイルを圧縮するオプションです。
ファイルの拡張子に .gz と付け加えておきましょう。展開するときも同じように、xvf に z を加えた xzvf の形で解凍できます。
実務やWeb上の配布ファイルは、この .tar.gz 形式が圧倒的に多いです。czvfで圧縮、xzvfで解凍という2つの型は、指が覚えるまで練習する価値があります。
bzip2で圧縮したいときはzの代わりに j を、xzで圧縮したいときは J を使います。たとえば tar -cJvf archive.tar.xz dir1 とすれば、xz形式で圧縮されたアーカイブが作成されます。
実務で役立つtarコマンドの応用テクニック¶
基本の操作に慣れてきたら、実務でよく使う応用オプションも押さえておきましょう。
どれも、システム管理の現場で頻繁に登場するものばかりですよ。
展開せずにアーカイブの中身を確認する¶
ダウンロードしたアーカイブを、いきなり展開するのは少し危険です。アーカイブの作り方によっては、カレントディレクトリに大量のファイルが散らばってしまうことがあるからです。
そこで役立つのが、中身を一覧表示する t オプションです。tar -tzvf archive.tar.gz のように、xの代わりにtを指定して実行します。
展開は行われず、パーミッションやサイズ、更新日時と一緒にファイルの一覧が表示されます。展開前にtで中身を確認する習慣をつけておくと、ファイルの散らばり事故を防げます。
展開先のディレクトリを指定する¶
tarコマンドは、何も指定しなければカレントディレクトリに展開します。別の場所へ展開したいときは、-C オプションで展開先を指定しましょう。
たとえば tar -xzvf archive.tar.gz -C /tmp/restore と実行すると、/tmp/restore の中に展開されます。展開先のディレクトリは、あらかじめ作成しておく必要がある点に注意してください。
特定のファイルを除外してアーカイブする¶
ディレクトリごと固めたいけれど、一部のファイルだけ外したい場面もありますよね。そんなときは --exclude オプションの出番です。
たとえば tar -czvf src.tar.gz --exclude='.git' project と実行すると、projectディレクトリの中の .git を除いてアーカイブできます。ログやキャッシュなど、バックアップに含めたくないものを外すときに便利です。
除外パターンが多い場合は、--exclude-from オプションでリストファイルを指定する方法もあります。
ディレクトリを日付付きファイル名でバックアップする¶
実務でのtarの定番は、設定ファイルやログのディレクトリをまるごと固めるバックアップです。ファイル名に日付を入れておくと、いつ取得したものか一目で分かります。
たとえば tar -czvf etc_backup_$(date +%Y%m%d).tar.gz /etc と実行すると、etc_backup_20230720.tar.gzのような名前でアーカイブが作成されます。
なお、絶対パスを指定すると、先頭のスラッシュを取り除いた旨のメッセージが表示されます。展開時に意図しない場所へ上書きされるのを防ぐ安全機能なので、心配いりません。
アーカイブから特定のファイルだけ取り出す¶
アーカイブ全体ではなく、必要なファイルだけを取り出すこともできます。
tar -xzvf archive.tar.gz file1 のように、コマンドの末尾に取り出したいファイル名を指定するだけです。大きなバックアップから設定ファイルを1つだけ復元したい場面などで役立ちます。
指定するファイル名はアーカイブ内のパスと一致させる必要があるため、事前にtオプションで確認しておくとスムーズです。
圧縮形式の違いと選び方(gzip・bzip2・xz・zstd)¶
tarコマンドで選べる圧縮形式は、gzipだけではありません。特徴を知っておくと、場面に応じて最適な形式を選べるようになります。
主な圧縮形式の違いを、表にまとめました。
| 圧縮形式 | オプション | 拡張子 | 特徴 |
|---|---|---|---|
| gzip | -z | .tar.gz(.tgz) | 速度と圧縮率のバランスが良い定番 |
| bzip2 | -j | .tar.bz2 | gzipより圧縮率が高い分、時間がかかる |
| xz | -J | .tar.xz | 圧縮率が最も高く、配布ファイル向き |
| zstd | --zstd | .tar.zst | 高速さと圧縮率を両立した新しい形式 |
迷ったら、まずはgzipを選んでおけば間違いありません。ほとんどのLinux環境で標準的に扱える、最もポピュラーな形式だからです。
配布ファイルのサイズを少しでも小さくしたいときは、圧縮率の高いxzが候補になります。ただし圧縮にかかる時間は長くなるため、日常のバックアップにはgzipのほうが快適です。
zstdは、GNU tar 1.31以降で --zstd オプションとして使える比較的新しい形式です。速度と圧縮率のバランスの良さで、近年注目されています。
ちなみに .tgz という拡張子は、.tar.gz を短く書いた別名です。中身は同じなので、xzvfの形でそのまま展開できます。
tarとzipの違いと使い分け¶
Windowsでおなじみのzipと、tarは何が違うのか気になったことはありませんか。どちらもファイルをまとめて圧縮するという点では、同じように見えますよね。
2つの違いを表で整理してみます。
| 比較項目 | tar(+gzip等) | zip |
|---|---|---|
| 主な利用環境 | Linux・Unix系 | Windowsや複数OS間 |
| 圧縮の方式 | 全体をまとめてから圧縮 | ファイル1つずつ圧縮 |
| 権限情報の保持 | 所有者やパーミッションを保持 | 完全には保持されない |
| 得意な用途 | サーバーのバックアップ | 異なるOS間のファイル受け渡し |
大きな違いは、Linuxのファイル属性を保持できるかどうかです。tarは所有者やパーミッションをそのまま保存できるため、システムのバックアップに向いています。
一方のzipは、Windowsでも標準機能で扱える手軽さが強みです。Windowsユーザーへファイルを渡すときはzip、Linuxサーバー内のバックアップはtar.gzと使い分けるのが定番ですね。
LinuxとWindowsの間でファイルをやり取りする機会が多い方は、CIFSでLinuxとWindowsのファイルを共有する方法も参考になります。
tarコマンドでよくあるエラーと対処法¶
tarコマンドを使い始めると、いくつか定番のエラーに出会います。代表的なものと対処法を紹介しておきます。
not in gzip format と表示される¶
gzip形式ではないファイルに z オプションを指定すると、not in gzip formatというエラーが表示されます。拡張子は .tar.gz なのに、中身は別の形式だったというケースが典型です。
そんなときは、file archive.tar.gz のようにfileコマンドを使うと実際の圧縮形式を調べられます。また、最近のGNU tarは展開時に圧縮形式を自動判定するため、tar -xvf とzを省略すればそのまま展開できることも多いですよ。
作成時にも、-a オプションを付けると拡張子に合わせた圧縮形式を自動で選んでくれます。オプションの暗記が苦手な方には心強い機能です。
Cannot open: No such file or directory と表示される¶
このエラーの原因で意外と多いのが、オプションの順番ミスです。
たとえば tar -xfv archive.tar と書くと、fの直後にあるvがアーカイブ名として解釈され、vというファイルを開こうとして失敗します。fは必ずオプションの最後に置き、直後にアーカイブファイル名を続けましょう。
単純にパスを間違えているだけのケースもあるので、lsコマンドで場所を確認してから再実行してみてください。
展開したらファイルが散らばってしまった¶
アーカイブの直下にファイルが入っていると、展開した瞬間にカレントディレクトリへファイルがばらまかれます。既存のファイルと混ざると、片付けが大変です。
予防策は、展開前に tar -tzvf で中身を確認することです。散らばりそうな構造なら、新しいディレクトリを作って -C で展開先を指定すれば安全に取り出せます。
tarコマンドでよくある疑問¶
最後に、tarコマンドについて初心者の方からよく聞かれる疑問に答えておきます。
解凍と展開はどう違う?¶
解凍と展開のどちらが正しい言い方なのか、迷ったことはありませんか。
厳密には、圧縮を元に戻すのが解凍で、アーカイブからファイルを取り出すのが展開です。tar.gzでは圧縮とアーカイブの両方が関わるため、どちらの言葉も使われています。
日常のやり取りではほぼ同じ意味で通じるので、神経質になる必要はありません。
tarコマンドはどのLinuxでも使える?¶
tarコマンドは、ほぼすべてのLinuxディストリビューションに標準で搭載されています。UbuntuでもCentOSでも、インストール直後からそのまま使えます。
コマンドの実体がどこにあるか調べたいときは、whichコマンドが便利です。調べ方はwhichコマンド・whereisコマンドでコマンドの場所を調べる方法で解説しています。
tarコマンドはLPICの試験に出る?¶
tarコマンドは、LPICやLinuCといったLinux系資格の頻出コマンドです。特にオプションの組み合わせは、選択問題でよく問われます。
cが作成、xが展開、tが一覧という対応を、実際に手を動かしながら覚えるのが近道です。実機を使った学習方法はLPICのコマンドを実機で勉強する方法で紹介しています。
資格学習の進め方から知りたい方は、LPICのおすすめ学習サイト5選もあわせてどうぞ。
まとめ¶
今回は、tarコマンドについて解説しました。ファイルのバックアップを取る際によく使うので覚えておきましょう。
基本は、czvfで圧縮付きアーカイブの作成、xzvfで展開という2つの型でしたね。慣れてきたら、tでの中身確認や -C での展開先指定、--exclude での除外にも挑戦してみてください。
コマンドは、読むだけではなかなか身につきません。これからLinuxを本格的に学びたい方は、Linuxの始め方と勉強方法も参考にしながら、手を動かして覚えていきましょう。
さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイトInfraAcademyをリリースしました!
入門から中級まで初心者でもわかりやすく学習を進めることができます。Linux入門講座の一部を、表でご紹介します。
| 講座 | 学べる内容 |
|---|---|
| Linux入門講座1 | ディレクトリと相対パス、絶対パス |
| Linux入門講座2 | ファイルの操作方法 |
| Linux入門講座3 | ファイルのアクセス権限 |
| Linux入門講座4 | ファイルの編集~vimの使い方をマスターする~ |
| Linux入門講座5 | ユーザーとグループ |
| Linux入門講座6 | ネットワーク |
↓InfraAcademyの講座の一部です。
上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。インフラエンジニアに必要な知識が学習できます。
