回答:
TARは、多数のファイルから単一のアーカイブファイルを作成しますが、それらを圧縮しません。
tarファイルは、1つ以上のファイルを連結したものです。各ファイルの前には、512バイトのヘッダーレコードがあります。ファイルデータは、長さが512バイトの倍数に切り上げられ、余分なスペースがゼロで埋められることを除いて、変更されずに書き込まれます。アーカイブの終わりは、少なくとも2つの連続したゼロで埋められたレコードによってマークされます。
GZIPは、単一のファイルを別の単一のファイルに圧縮しますが、アーカイブは作成しません。
...そのファイル形式では、複数のそのようなストリームを連結することもできますが(zipファイルは、元の1つのファイルであるかのように連結されて単に解凍されます)、gzipは通常、単一のファイルのみを圧縮するために使用されます。通常、圧縮アーカイブは、ファイルのコレクションを1つのtarアーカイブにアセンブルし、そのアーカイブをgzipで圧縮することにより作成されます。
tar -xzvf tarball.tar.gz single/file.txt
。舞台裏では追加の作業を行う必要がありますが、外観については単一のファイルを抽出します。
.tar.*
圧縮されたアーカイブは常に「固体」です。単一の圧縮ストリームで構成されます。.zip
一方、アーカイブは圧縮アルゴリズムは、ファイルごとに新たに開始され、すべてで固体ではありません。ランダムアクセスを高速化するために圧縮効率を犠牲にします。.7z
アーカイブは、ソリッド、非ソリッド、またはソリッドブロックにすることができます。
Tarは、単一のアーカイブファイルへの(アン)アーカイブ(アウト)を1つだけ行うことを担当しています。なにかの?唯一無二のこと:ファイルのセット。
Gzipは、圧縮と圧縮解除の1つだけをうまく処理します。なにかの?1つだけのこと:任意のタイプの単一のファイル...そしてそれはtarで作成されたファイルを含みます。
これは、パイプライン化というUNIXの哲学、つまり基礎となる「パイプとフィルター」アーキテクチャにまでさかのぼります。すべてをファイルとして扱い、「1つのことだけを1つのことだけを行う」という健全なアーキテクチャ上の目標(非常にエレガントでシンプルなプラグアンドプレイを実現する) )
その単純さでは、本質的にほぼ代数的です(システム設計の大きな目標)。そして、それは簡単な偉業ではありません。
多くの点で(欠陥がないわけではありませんが)、これはほぼ構成可能性、モジュール性、疎結合、および高い凝集度の頂点です。これら4つを理解すると(そして本当に理解するということです)、理解できるでしょう。tarとgzipがペアでこのように機能する理由は明らかです。
まず、ファイルアーカイブを作成するためのTARは作成されていません。それはだテープアーカイバ。それは、アーカイブをテープに書き込んだり、テープからロードすることです。
-fオプションは、それがその後、別のプログラムによって圧縮することができる「仮想テープ」、などのファイルを使用します。実際、このような圧縮は、実際のテープドライブでも発生します。
もちろん、1つのプログラムを使用してそれをうまく実行するという哲学もこのケースでは重要ですが、なぜTARアーカイブがコンテンツのディレクトリ+コンテンツではなくストリームとして構成されるのかを見逃すかもしれません。
伝統的に、Unixシステムは、ごとに1つのタスクを実行するために、1つのプログラムを使用するUNIX哲学:tar
(したがって、もともとテープバックアップのために、単一のファイルに複数のファイルをパッケージ化するためだけの手段だったtar
、トンのサルARのニラ)。tar
圧縮を提供しません。得られた非圧縮アーカイブは、典型的には、のようないくつかの他のプログラムで圧縮されgzip
、bzip2
またはxz
。昔は、compress
コマンドを使用してこれを行っていました。新しい圧縮アルゴリズムは、これよりもはるかに効果的です。
Unixの哲学で規定されている高度にモジュール化されたアプローチは、各プログラムを適切に個別に使用したり、ここで説明する圧縮アーカイブの作成など、より複雑なタスクを実行するために組み合わせたりできることを意味します。これらの種類のタスクでは、必要に応じて個々のツールを簡単に交換することもできます。tar
ユーティリティ自体を交換することなく、異なる圧縮アルゴリズムを使用するように圧縮プログラムを変更するだけです。
このモジュール方式には、欠点がないわけではありません。以下のように述べた他の回答にコメントで、のような専用の圧縮アーカイブ形式は、.zip
個々のファイルの抽出を処理するより良いことができます。圧縮されたtarballは、アーカイブの終わり近くでファイルを抽出するためにほぼ完全に解凍する必要がありますが、アーカイブは.zip
そのコンテンツへのランダムアクセスを許可します。(などのいくつかの新しい形式は、.7z
ソリッドアーカイブと非ソリッドアーカイブ、およびより大きなアーカイブのさまざまなサイズのソリッドブロックをサポートします。)tar
個別の圧縮ユーティリティと組み合わせて使用し続けることは、伝統と互換性の問題です。また、パーミッションなどのUnixファイルシステムのメタデータもサポート.7z
して.zip
いません。