今号では、複数のファイルをまとめたり、バックアップを取る際によく利用される tar コマンドについて説明します!
tar とは
tar とは、複数のファイルを 1つのファイル (アーカイブファイル) にまとめたり、まとめたファイルを元に戻す (展開) ための仕組みです。
本来は「まとめる」だけでありファイルの圧縮は行われませんが、オプションを組み合わせることで gzip などの圧縮も同時に行うのが一般的です (tar.gz 形式など)。
基本の書式
- アーカイブファイルを作成
tar [オプション] アーカイブファイル名 アーカイブ対象のファイル・ディレクトリ
の書式で実行します。
ディレクトリを指定した場合、ひとつのアーカイブファイルにまとめられます。例: $ tar -cf data.tar /tmp/data/ $
※各オプションの意味については後述します。
-v オプションを付与することによって、アーカイブされたファイルが表示されるようになります。
例: $ tar -cvf data.tar /tmp/data/ /tmp/data/ /tmp/data/log.1 /tmp/data/log.2 /tmp/data/log.3 /tmp/data/log.4 /tmp/data/log.5 $
- アーカイブファイルを展開
tar [オプション] アーカイブファイル名 の書式で実行します。例: $ tar -xf data.tar $
アーカイブファイルの作成と同様に -v オプションを付与することによって、展開されたファイルが表示されるようになります。
例: $ tar -xvf data.tar /tmp/data/ /tmp/data/log.1 /tmp/data/log.2 /tmp/data/log.3 /tmp/data/log.4 /tmp/data/log.5 $
展開した後、カレントディレクトリに tmp ディレクトリが表示されていれば成功です。
$ ls data.tar tmp $ ls tmp/data/ log.1 log.2 log.3 log.4 log.5
tar コマンドのオプション
tar コマンドの基本的なオプションをご説明します。
※すべてのオプションはご紹介せず、よく使用されると考えられるものを抜粋しています。
- -c
アーカイブファイルを作成します。
※-f オプション (アーカイブファイルを指定) と同時に使用する必要があります。$ tar -cf data.tar /tmp/data/
- -x
アーカイブファイルを展開します。
※-f オプション (アーカイブファイルを指定) と同時に使用する必要があります。$ tar -xf data.tar
- -v
アーカイブ、もしくは展開されたファイルの一覧など、実行時の詳細な情報を表示します。 - -z
gzip 形式でアーカイブ、もしくは展開します。
ファイルが圧縮されるため、ファイルサイズを小さくしたい場合に有効です。アーカイブ時の拡張子は、tar.gz にするのが一般的です。
$ tar -czvf data.tar.gz /tmp/data/ /tmp/data/ /tmp/data/log.1 /tmp/data/log.2 /tmp/data/log.3 /tmp/data/log.4 /tmp/data/log.5 $
$ tar -xzvf data.tar.gz /tmp/data/ /tmp/data/log.1 /tmp/data/log.2 /tmp/data/log.3 /tmp/data/log.4 /tmp/data/log.5 $
アーカイブ後のファイルサイズを確認すると、tar.gz 形式のファイルの方がサイズが小さくなっていることが分かります。
$ ls -l data.* -rw-r--r--. 1 user1 user1 201 1月 13 00:21 data.tar.gz -rw-r--r--. 1 user1 user1 10240 1月 13 00:21 data.tar
補足1:なぜ -f オプションが必須なのか?
上で記載の通り、-f オプションはアーカイブファイルを指定するオプションですが、なぜこのオプションが必要なのか?について説明します。
tar コマンドのマニュアルを確認すると、-f オプションに関する箇所に下記の記述があります。
-f, --file=ARCHIVE Use archive file or device ARCHIVE. If this option is not given, tar will first examine the environment variable `TAPE'. If it is set, its value will be used as the archive name. Otherwise, tar will assume the compiled-in default. The default value can be inspected either using the --show-defaults option, or at the end of the tar --help output.
上記によると、-f オプションが指定されていない場合、最初に TAPE 変数を参照、次にコンパイル時に読み込まれたデフォルトのデバイスを参照しに行きます。
つまり、-f オプションで明示的にファイルを指定しなければ意図しないファイルやデバイスを参照してしまうことになります。
このような誤動作を避けるために -f オプションが必要となります。
補足2:アーカイブする場合の拡張子は何でも良いか?
コマンドの仕組み上、tar -cf や tar -czf でファイルをアーカイブする際のファイル名に決まりはなく、どんな名前 (拡張子) にしても良いです。
しかしながら、ユーザがアーカイブファイルとひと目で分かるように .tar や .tar.gz としておくのが一般的であり、推奨されます。

