ソースファイルや文書ファイルを配布するときに、バラバラに渡すと必要なファイルがなかったりして混乱しやすい。そこで複数のファイルをまとめることになる。この用途のためのプログラムはアーカイバとか書庫プログラムと呼ばれる。アーカイバにもいろいろあるが、Linuxではtarがよく使われている。
アーカイブファイルを作成するには、作成を指示するためのcオプションと、出力ファイルを指定するためのfオプションを指定する。そして、含めるファイルを指定する。
USER$ tar cf ciao.tar ciao.c ciao.1 Makefile
ディレクトリを指定した場合は、ディレクトリ情報も保存される。
USER$ tar cf hoge.tar ciao
作成されたtarファイルの内容を確認するには、cの代わりにtオプションを使う。
USER$ tar tf ciao.tar ciao/.exrc ciao/Makefile ciao/ciao.c ciao/ciao.1
tarファイルを展開するには、xオプションを指定する。ディレクトリ付きで作成されているtarファイルの場合は、そのディレクトリもあわせて復元される。
USER$ tar xf ciao.tar USER$ ls -a ciao . .exrc ciao.c .. Makefile ciao.1
パス名を含めてtarファイルを作成するときは、少し注意が必要だ。絶対パスで保存をしてしまうと、パーミッションの関係から、スーパーユーザーでないと展開できなくなる可能性があるからだ。GNU版ではPオプションを付けない限りは、先頭の/を取り除いてtarファイルを作成するようになっている。だが、他のOSが提供しているtarコマンドもそうだとは限らない。間違いを減らすためにも、つねに相対パスで指定するクセを付けるほうがよいだろう。
tarコマンドは、ファイルをまとめるだけで圧縮はしない。そのため、ファイルの大きさを小さくするには、別に圧縮をする必要がある。以前は圧縮形式として、compress形式が使われていたが、最近はより圧縮率の高いgzip形式が使わることが多い。
tarファイルを圧縮するには、次のようにする。
USER$ gzip ciao.tar
すると、カレントディレクトリにciao.tar.gzが作成される。tarでまとめたものをパイプでgzipコマンドに渡すこともできる。tarコマンドのーは標準出力を示している。gzipコマンドのーcも標準出力へ出力するオプションである。
USER$ tar cf - ciao | gzip -c > ciao.tar.gz
逆に、tar+gzipで作られたアーカイブのリスト一覧を見るときや展開するときも同様に行える。gzipのdオプションは、展開をするためのオプションだ。
USER$ gzip -cd ciao.tar.gz | tar tf -
GNU版のtarでは、tarコマンドのzオプションで同様のことができる。
USER$ tar zcf ciao.tar.gz ciao USER$ tar ztf ciao.tar.gz USER$ tar zxf ciao.tar.gz
tarコマンドは、ファイルシステムを越えて、ディレクトリを移動するときにも便利だ。次の例の後半は、ディレクトリを移動して、そこで標準入力から受け取った内容を展開している。後半部分をかっこで括らないと正しく動作しないことに気をつけてほしい。
USER$ tar cf - hoge | (cd /export/share/fuga ; tar xf - )
また、rshコマンドを利用できれば、ネットワークを越えてファイルコピーするのにも使える。
USER$ tar cf - hoge | dd bs=1024 | rsh リモートホスト名 dd bs=1024 of=hoge.tar.gz
2番目のddコマンドは出力するブロックサイズを指定するためだけに用いている。そして、リモートホストのddでは、ofオプションでhoge.tar.gzに書き出している。ofの指定をテープデバイスに指定すれば、ローカルホストに接続されていないデバイスにバックアップすることができる。