tarなしのgzip?なぜ一緒に使用されるのですか?


回答:


72

TARは、多数のファイルから単一のアーカイブファイルを作成しますが、それらを圧縮しません。

フォーマットの詳細

tarファイルは、1つ以上のファイルを連結したものです。各ファイルの前には、512バイトのヘッダーレコードがあります。ファイルデータは、長さが512バイトの倍数に切り上げられ、余分なスペースがゼロで埋められることを除いて、変更されずに書き込まれます。アーカイブの終わりは、少なくとも2つの連続したゼロで埋められたレコードによってマークされます。

GZIPは、単一のファイルを別の単一のファイルに圧縮しますが、アーカイブは作成しません。

ファイル形式

...そのファイル形式では、複数のそのようなストリームを連結することもできますが(zipファイルは、元の1つのファイルであるかのように連結されて単に解凍されます)、gzipは通常、単一のファイルのみを圧縮するために使用されます。通常、圧縮アーカイブは、ファイルのコレクションを1つのtarアーカイブにアセンブルし、そのアーカイブをgzipで圧縮することにより作成されます。


12
「tgz」ファイルのようなものはありません。これはtar.gzです。gzipの仕事は、そのコンテンツ(この場合はtarアーカイブ)をzipまたはunzipすることです。次に、tarでそれをアーカイブ解除します。これは典型的なUnixパイプライン化の哲学であり、したがってほとんどユニークではありません。
luis.espinal

5
いいえ、.tar.gzは一意ではありません。.tar.bz2、.cpio.gzなどは同じように機能します。
user46971

3
@ user36310原則としてあなたが何を意味するかは知っていますが、実際にはツールを使用して単一のファイルを抽出できます。 tar -xzvf tarball.tar.gz single/file.txt。舞台裏では追加の作業を行う必要がありますが、外観については単一のファイルを抽出します。
リッチホモルカ

4
ファイルが大きなアーカイブの最後にある場合は、「多くの余分な作業」を行います。明らかに、ランダムアクセスが必要な場合は、zip / rar / xar / 7z / lzh / arj / cab / sitなどが優れた形式です。
LaC

3
正確には、.tar.*圧縮されたアーカイブは常に「固体」です。単一の圧縮ストリームで構成されます。.zip一方、アーカイブは圧縮アルゴリズムは、ファイルごとに新たに開始され、すべてで固体ではありません。ランダムアクセスを高速化するために圧縮効率を犠牲にします。.7zアーカイブは、ソリッド、非ソリッド、またはソリッドブロックにすることができます。
ダニエルB

17

Gzip / Bzip2はストリームコンプレッサーです。データのストリームをより小さなものに圧縮します。それらは個々のファイルで使用できますが、単独のファイルのグループでは使用できません。

一方、Tarには、パス、権限、所有権情報を含むファイルのリストを単一の連続したストリームに変換する機能があります(逆も同様です)。

そのため、ファイルをアーカイブするために(および圧縮が必要な場合)、通常はtar +圧縮方法を使用します。


12

Tarは、単一のアーカイブファイルへの(アン)アーカイブ(アウト)を1つだけ行うことを担当しています。なにかの?唯一無二のこと:ファイルのセット

Gzipは、圧縮と圧縮解除の1つだけをうまく処理します。なにかの?1つだけのこと:任意のタイプの単一のファイル...そしてそれはtarで作成されたファイルを含みます。

これは、パイプライン化というUNIXの哲学、つまり基礎となる「パイプとフィルター」アーキテクチャにまでさかのぼります。すべてをファイルとして扱い、「1つのことだけを1つのことだけを行う」という健全なアーキテクチャ上の目標(非常にエレガントでシンプルなプラグアンドプレイを実現する) )

その単純さでは、本質的にほぼ代数的です(システム設計の大きな目標)。そして、それは簡単な偉業ではありません。

多くの点で(欠陥がないわけではありませんが)、これはほぼ構成可能性、モジュール性、疎結合、および高い凝集度の頂点です。これら4つを理解すると(そして本当に理解するということです)、理解できるでしょう。tarとgzipがペアでこのように機能する理由は明らかです。


1
このUNIX哲学は大丈夫ですが、私はそれが不十分であり、非固体アーカイブを作成することを観察しています。(1-GBのtar.gz形式から1つのファイルを解凍すると、痛みをすべきではない、と私はここに理解したものから、ZIPは右...かなりの優れtar.gz形式です?)
Mehrdad

@Mehrad- 最初に、非ソリッドアーカイブとは何ですか?ヴォルテールによると、「あなたが私と話をするなら、まずあなたの用語を定義しなければなりません。」第二に、はい、パイプとフィルターのアーキテクチャは、その美しさに関係なく、他のアーキテクチャと同じように特定の場合には不十分です。それは工学のわずかなもので与えられたものであり、議論されているのではありません。第三に、zipはgzipやtarよりも優れていますが、それはあなたが尋ねたものではありませんでした。zipとtarが機能する理由と、利点があるかどうかを尋ねたところ、技術的な答えが得られました。
-luis.espinal

@Mehrad-また、1gig tar.gzファイルを解凍する際にどのような問題が発生するのかわかりません。古いバージョンのgzipで最大2GB(および新しいバージョンのgzipで最大4GB)まで何度もやったことがあります。プレーンzipを使用した場合と同様のパフォーマンスの問題が発生します。ちなみに、パイプからリモートプロセスへのgtar入力をソケットに吐き出しました。zipで試してください。それぞれの問題について、適切なツールを(。それがタールも| GZまたはzip)を使用
luis.espinal

8

まず、ファイルアーカイブを作成するためのTARは作成されていません。それはだテープアーカイバ。それは、アーカイブをテープに書き込んだり、テープからロードすることです。

-fオプションは、それがその後、別のプログラムによって圧縮することができる「仮想テープ」、などのファイルを使用します。実際、このような圧縮は、実際のテープドライブでも発生します。

もちろん、1つのプログラムを使用してそれをうまく実行するという哲学もこのケースでは重要ですが、なぜTARアーカイブがコンテンツのディレクトリ+コンテンツではなくストリームとして構成されるのかを見逃すかもしれません。


3
正しい... ZIPファイルはすべてのファイル情報を統合ヘッダーに入れ、次にすべてのファイルの内容を入れます...これにより、ZIPファイルにさらにファイルを追加することができなくなります...ファイル全体を書き換える必要があります... TAR形式では、各ファイルのヘッダーが分離されているため、テープ全体を書き換えることなく、より多くのファイルを簡単に追加できます
JoelFan

5

伝統的に、Unixシステムは、ごとに1つのタスクを実行するために、1つのプログラムを使用するUNIX哲学tar(したがって、もともとテープバックアップのために、単一のファイルに複数のファイルをパッケージ化するためだけの手段だったtarトンのサルARのニラ)。tar圧縮を提供しません。得られた非圧縮アーカイブは、典型的には、のようないくつかの他のプログラムで圧縮されgzipbzip2またはxz。昔は、compressコマンドを使用してこれを行っていました。新しい圧縮アルゴリズムは、これよりもはるかに効果的です。

Unixの哲学で規定されている高度にモジュール化されたアプローチは、各プログラムを適切に個別に使用したり、ここで説明する圧縮アーカイブの作成など、より複雑なタスクを実行するために組み合わせたりできることを意味します。これらの種類のタスクでは、必要に応じて個々のツールを簡単に交換することもできます。tarユーティリティ自体を交換することなく、異なる圧縮アルゴリズムを使用するように圧縮プログラムを変更するだけです。

このモジュール方式には、欠点がないわけではありません。以下のように述べた他の回答にコメントで、のような専用の圧縮アーカイブ形式は、.zip個々のファイルの抽出を処理するより良いことができます。圧縮されたtarballは、アーカイブの終わり近くでファイルを抽出するためにほぼ完全に解凍する必要がありますが、アーカイブは.zipそのコンテンツへのランダムアクセスを許可します。(などのいくつかの新しい形式は、.7zソリッドアーカイブと非ソリッドアーカイブ、およびより大きなアーカイブのさまざまなサイズのソリッドブロックをサポートします。)tar個別の圧縮ユーティリティと組み合わせて使用し続けることは、伝統と互換性の問題です。また、パーミッションなどのUnixファイルシステムのメタデータもサポート.7zして.zipいません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.