WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Linuxでのファイルの圧縮・解凍

      2012/11/25

GNU tarとは?

GNU tarは、tar形式のアーカイブファイルを展開して元のファイルを作成する機能(解凍)と複数のファイルをまとめてtar形式というアーカイブファイルにする機能(圧縮)をもつソフトウェアです。
従来の UNIX 系システムに標準で用意されている”tar”コマンドに対し、”GNU tar”はオプション z で gzip 形式のアーカイブも同時に展開できるなどの拡張がされています。(※FreeBSD、Linux などは標準の”tar”コマンドが GNU tar ですが、例えば Solaris の標準の”tar”コマンドは GNU tar ではない。)

Linuxでファイルの解凍・圧縮を行う際は、主にこの”tar”コマンドを利用します。

UNIX系OSでのファイルの圧縮アーカイブ形式

UNIX系OSで主に利用される圧縮アーカイブ形式としては、tar + gzip(拡張子.tar.gz)、tar + bzip2(拡張子.tar.bz2)などがあります。
古いものではtar + compress(拡張子.tar.Z)が使われている場合もあります。
また、2009年3月5日にリリースされたGNU tarバージョン1.22からは、gzipに比べて圧縮効率が大きく向上した xz圧縮(拡張子.tar.xz)という新しい圧縮フォーマットがサポートされています。

tarコマンドでの解凍と各種圧縮アーカイブ形式毎のオプション

GNU tarを利用すれば、前述の種類の圧縮アーカイブをすべて解凍(展開)することができますが、解凍時に.tar.gz(または.tar.Z)ならtar zxvf、.tar.bz2ならtar jxvf、.tar.xzならtar Jxvfと、オプションのz/j/Jを使い分ける必要があります。

[root@centos ~]#  tar zxvf foo.tar.gz    ※拡張子.tar.gzの圧縮アーカイブを解凍
[root@centos ~]#  tar zxvf foo.tar.Z    ※拡張子.tar.Zの圧縮アーカイブを解凍
[root@centos ~]#  tar jxvf foo.tar.bz2    ※拡張子.tar.bz2の圧縮アーカイブを解凍
[root@centos ~]#  tar Jxvf foo.tar.xz    ※拡張子.tar.xzの圧縮アーカイブを解凍

また、pオプションを付加すると、可能な限りパーミッションやオーナー、グループの情報が保持されます。

[root@centos ~]#  tar pxvf foo.tar    ※パーミッションを保持して解凍

-Cオプションを付加すると展開先のディレクトリを指定することができます。

[root@centos ~]#  tar pxvf foo.tar -C ~/    ※解凍先をホームディレクトリに指定する

後続引数にtarファイル内のパス名を指定すると、指定されたファイルのみ取り出すこともできます。

[root@centos ~]#  tar xvf foo.tar foo/README    ※圧縮アーカイブの中のREADMEファイルだけ取り出す

その他、必ずといっていいほどついてくるx/v/fの各オプションの意味については
x – tarファイルを展開する
v – 詳細メッセージを出力する
f – 本来 tar はテープドライブに書き出すコマンドなので、f でアーカイブ名を指定しないとテープドライブのデバイス /dev/rst0 を対象に読み書きしてしまう。それを防ぐために付加するオプション
となっています。

tarコマンドでの圧縮アーカイブ生成

“GNU tar”も用いて圧縮アーカイブを生成する場合は下記のコマンドを実行します。

[root@centos ~]#  tar czf foo.tar.gz foo    ※tar + gzip(拡張子.tar.gz)で圧縮
[root@centos ~]#  tar cjf foo.tar.bz2 foo    ※tar + bzip2(拡張子.tar.bz2)で圧縮

cオプションは”tarファイルを新しく作る”という意味を持っています。

 - Linux , , ,