tar,gzip,bzip2について
tarコマンドとtarボール
tarコマンドは、tarボールという形式の1つのファイルに複数のファイルやディレクトリをまとめ、タイムスタンプ、アクセス権、所有者の情報も格納するが、データの圧縮は行わない。*1
まとめたtarボールは、別途圧縮を行うことで、他の多くの圧縮形式のような「複数ファイルをまとめて圧縮」を実現できる。一見面倒そうではあるのだが、圧縮方式が自由というのは利点と言える。一部の圧縮形式(gzipとbzip2)に関しては、この2段階の処理を1度で行ってくれる。圧縮率の高い7z形式では、多少面倒になるが、圧縮率を優先するのであれば、使う価値がある(p7zipというパッケージが必要)。
実際の使い方は、例を参考にしたほうが、長いマニュアルを読むよりも分かりやすい。
以下の例では、処理されるファイルなどを詳細に表示するvオプションを付けているが、付けなくてもファイルの処理は行われる。
tarボールを新規作成
$ tar cvf test.tar [ファイルもしくはディレクトリ...]
tarボールを現在いるディレクトリに展開
$ tar xvf test.tar
tarボールを指定ディレクトリ以下に展開
$ tar xvf test.tar -C [ディレクトリ]
tarボールの内容を一覧
$ tar tvf test.tar
既存のtarボールにファイルやディレクトリを追加
$ tar rvf test.tar [ファイルもしくはディレクトリ...]
tarボールを作成する際に「/」から始まるフルパスを指定した場合、先頭の「/」が削られる。例えば
$ tar cvf usrlocal.tar /usr/local/
とした場合、展開されるときには、usr/以下という(展開される階層からの)相対的な場所となる。
完全なパス名を保存し、復元したいのであれば、-Pオプションをtarボール作成時と展開時の両方に付ける。下の例では、一般ユーザで書き込めない場所に展開されるため、sudoを使用している。
$ tar cvf usrlocal.tar /usr/local/ -P $ sudo tar xvf usrlocal.tar -P
gzipとbzip2
- 圧縮コマンドは、それぞれ「gzip」と「bzip2」。
- 展開コマンドは、それぞれ「un」を付けて、「gunzip」と「bunzip2」。
- どちらも、1つのファイルのみ圧縮し、複数のファイルをまとめることはしない。
- 圧縮されたファイルの拡張子は、それぞれ「.gz」「.bz2」。
- 圧縮率はbzip2のほうが高い。
- zcat(gzip)、bzcat(bzip2)といったコマンドで簡単に圧縮されたデータが読めるため、小さなテキストファイル(書式情報を含まない、プレーンテキスト)を圧縮するのにも使われる。Emacs 22では、gzip/bzip2圧縮されたテキストファイルを開くと、自動的に展開してくれて、元のテキストデータを表示し、書き込むときには圧縮してくれる(圧縮を意識せずに(透過的に)扱える、といえる)。
gzip圧縮(最高圧縮)
$ gzip -9 [ファイルの場所]
bzip2圧縮
$ bzip2 [ファイルの場所]
元のファイルを残す
gzipとbzip2コマンドは、指定したファイルを圧縮した後、元のファイルを削除してしまう。この場合、拡張子は自動的に付けられる。
下の例は、test.txtというファイルを用意した場合。
$ ls test.txt $ bzip2 test.txt; ls test.txt.bz2
もし、元のファイルを残したいのであれば、-cオプションで標準出力に(圧縮後の)ファイルを出力する。この場合、拡張子を含め、出力ファイル名は自分で書く。
$ bzip2 -c test.txt > test.txt.bz2; ls test.txt test.txt.bz2
展開時に元のファイルを残したい場合や、圧縮ファイルに書き込み権限が無い場合などには、zcatとbzcatコマンドが役に立つ。これらは、gunzipやbunzip2に-cオプションを付けたものと等価。
圧縮されたtarボールの作成と展開
tarコマンドで作成したtarボールを普通に圧縮することもできるが、これでは2段階の操作になるため、より簡単にできる操作が存在する。ただし、以下で述べるtarコマンドのzやjといったオプションは、GNU版以外のtarでは動作しないかもしれない。
作成と展開以外の操作(例: tar jtvf test.tar.bz2)も同様に可能だが、省略。
.tar.gzファイルの作成
$ tar zcvf test.tar.gz [ファイルやディレクトリ...] もしくは $ tar cv [ファイルやディレクトリ...] | gzip > test.tar.gz
.tar.bz2ファイルの作成
$ tar jcvf test.tar.bz2 [ファイルやディレクトリ...] もしくは $ tar cv [ファイルやディレクトリ...] | bzip2 > test.tar.bz2
.tar.gzファイルの展開
$ tar zxvf test.tar.gz もしくは $ zcat test.tar.gz | tar xvf -
.tar.bz2ファイルの展開
$ tar jxvf test.tar.gz もしくは $ bzcat test.tar.bz2 | tar xvf -
tar+gzipとtar+bzip2の拡張子
それぞれ、「.tar.gz」と「.tar.bz2」が一般的だが、「.tgz」や「.tbz」という短縮形も存在する。