[〜#〜] tar [〜#〜] は、多数のファイルから単一のアーカイブファイルを作成しますが、圧縮はしません。
Tarファイルは、1つ以上のファイルを連結したものです。各ファイルの前には、512バイトのヘッダーレコードが付いています。ファイルデータは変更されずに書き込まれますが、その長さは512バイトの倍数に切り上げられ、余分なスペースはゼロで埋められます。アーカイブの終わりは、少なくとも2つの連続したゼロで埋められたレコードによってマークされます。
[〜#〜] gzip [〜#〜] 単一のファイルを別の単一のファイルに圧縮しますが、アーカイブは作成しません。
...そのファイル形式では、そのような複数のストリームを連結することもできますが(zipファイルは、元々1つのファイルであるかのように、単に圧縮解除されて連結されます)、gzipは通常、単一のファイルのみを圧縮するために使用されます。[4]圧縮アーカイブは、通常、ファイルのコレクションを単一のtarアーカイブにアセンブルし、そのアーカイブをgzipで圧縮することによって作成されます。
Gzip/Bzip2はストリームコンプレッサーです。それらはデータのストリームをより小さなものに圧縮します。それらは個々のファイルで使用できますが、それ自体のファイルのグループでは使用できません。
一方、Tarには、パス、権限、所有権情報を含むファイルのリストを単一の連続したストリームに変換する機能があり、その逆も可能です。
そのため、ファイルをアーカイブするには(そして圧縮が必要な場合も)、通常はtar +何らかの圧縮方法を使用します。
Tarは、単一のアーカイブファイルへの(アン)アーカイブ(アウト)を1つだけ実行することを担当しています。なにかの?たった1つのこと:ファイルのset。
Gzipは、たった1つのことだけを行うことを担当しています:(非)圧縮。なにかの?ひとつだけですが、単一のファイル任意のタイプ ...で、tarで作成されたファイルが含まれます。
これは、パイプラインというUNIXの哲学、つまり基礎となる「パイプとフィルター」アーキテクチャにさかのぼります。すべてをファイルとして処理し、「1つのこと、1つのこと、1つのことだけ、そして、それだけで十分」という健全なアーキテクチャ上の目標(これにより、非常にエレガントでシンプルなプラグアンドプレイが実現します) 。)
その単純さの点では、本質的に代数的です(システム設計における大きな目標)。そして、それは簡単な偉業ではありません。
多くの点で(欠点がないわけではありませんが)、これは、構成可能性、モジュール性、疎結合、および高度な凝集性のほぼ頂点です。これら4つを理解すれば(つまり本当に理解すること)、理解できます。tarとgzipがこのようにペアで機能する理由は明らかです。
まず、TARはfileアーカイブを作成するために作成されていません。 Tape ARchiverです。仕事は、アーカイブをテープに書き込んだり、テープから読み込んだりすることです。
-fオプションを指定すると、ファイルが「仮想テープ」として使用され、別のプログラムで圧縮できます。実際、このような圧縮は実際のテープドライブでも発生します。
もちろん、1つのプログラムを使用してそれをうまく実行するという哲学もこの場合には重要ですが、TARアーカイブがコンテンツ+コンテンツのディレクトリではなくストリームとして構造化されている理由を見落とす可能性があります。
伝統的に、Unixシステムは nix哲学 に従って1つのタスクを実行するために1つのプログラムを使用していました: tar
は、もともとテープバックアップのために複数のファイルを単一のファイルにパッケージ化する手段でした(したがって、 tar
、tapearchive)。 tar
は圧縮を提供しません。結果の非圧縮アーカイブは、通常 gzip
、 _bzip2
_ 、または xz
などの他のプログラムで圧縮されます。昔、彼らは compress
コマンドを使用してこれを行っていました。新しい圧縮アルゴリズムは、これよりもはるかに効果的です。
Unixの哲学によって規定された高度にモジュール化されたアプローチは、各プログラムを適切に個別に使用したり、ここで説明する圧縮アーカイブの作成など、より複雑なタスクを実行するために組み合わせたりできることを意味します。この種のタスクでは、必要に応じて個々のツールを簡単に交換することもできます。 tar
ユーティリティ自体を置き換える必要なく、別の圧縮アルゴリズムを使用するように圧縮プログラムを変更するだけです。
このモジュール式のアプローチには、欠点がないわけではありません。 言及 が他の回答へのコメントにあるように、 _.Zip
_ のような専用の圧縮アーカイブ形式は、個々のファイルの抽出をより適切に処理できます。圧縮されたtarballは、アーカイブの終わり近くにあるファイルを抽出するために、ほぼ完全に解凍する必要がありますが、_.Zip
_アーカイブは、コンテンツへのランダムアクセスを許可します。 ( _.7z
_ などの一部の新しい形式は、ソリッドアーカイブと非ソリッドアーカイブ、および大規模なアーカイブでのさまざまなサイズのソリッドブロックをサポートしています。)と組み合わせてtar
を継続して使用すると、個別の圧縮ユーティリティは、伝統と互換性の問題です。また、_.7z
_および_.Zip
_は、権限などのUnixファイルシステムメタデータをサポートしていません。