web-dev-qa-db-ja.com

tarとZipのどちらの圧縮がより効率的ですか。tarとZipはどう違いますか?

私はLinux環境で働いていて、tarとZipコマンドについて知りたいのです。

Tarとzipのどちらが効率的ですか。 tarコマンドとZipコマンドの違いも知っておく必要があります。誰かが私にそれらを説明できますか?

67
rekha_sri

tarは、複数のファイルから1つのファイルのみを作成します。gzipbzip2tar内から呼び出すことができる)などの圧縮プログラムを組み合わせない限り、圧縮は行われません。 -zまたは-jオプション) Zipは、アーカイブと圧縮の両方を1つのプログラムにまとめたものです。

78
Wim

tar

  • 「Tape ARchive」 - あなたはあなたが一方の端からもう一方の端まで読んでいると仮定します。 (コマンドの年齢は...を示しています)
  • 圧縮はしませんが、結果のストリーム全体をパイプで圧縮することができます。 gzipとbzip2(-zまたは-jで内部的に行われます)
  • UNIXファイル属性:uid、gid、パーミッション(最も顕著には実行可能)を格納します。デフォルトはあなたのディストリビューションに依存するかもしれず、オプションで切り替えることができます。

郵便番号

  • MSDOSの属性を格納します。 (アーカイブ、読み取り専用、非表示、システム)
  • 各ファイルを圧縮してからアーカイブに追加します
  • ファイルの末尾にファイルテーブルを含める
  • そして、前の2つの結果として、あなたが必要とするファイルについての正確な部分だけを読むことを可能にします。

Zipがファイルを別々に圧縮するという事実は、特に多くの小さい類似ファイルでは、圧縮率に影響を与えます。

(少なくともこれは10年前には正しかったです。)

59
MaHuJa

TarはZipよりもはるかに多くのメタデータを保存しています。私の比較を見てください(少し古くなっています)。

enter image description here

(クリックして拡大)

Tarはテストの65%に合格し、Zipは17%しか合格しません。私はテストスイート をBSDライセンス の下でgithubで利用できるようにしましたので、あなたがMacを持っているならあなたは自分で試すことができます。 Linuxの場合、メタデータがあるかどうかはわかりませんので、これらのテストは関連性がない可能性があります。

22
neoneye

効率はさまざまな方法で測定できます。

  1. このプロセスにはどのくらいの時間がかかりますか?
  2. 結果のファイルはどれくらいの大きさですか?

「作成されたアーカイブを操作するためのツールはどの程度一般的なのでしょうか」など、他にも疑問があります。

そのため、例えば、bzip2gzipよりも小さいファイルを作成しますが、かなり長い時間がかかる可能性があります。また、私の経験ではgzipはUnixライクなシステムでは普遍的ですが、bzip2はまだそうではありません(非常に一般的であり、通常は入手が簡単です)。

14
Telemachus

Wimが述べたように、tar自体は圧縮されません。 tarを追加して圧縮する場合(たとえば、.tar.gzまたは.tar.bz2を取得する場合)、tarファイル全体を一度に圧縮していることになります。対照的に、Zipは各ファイルを個別に圧縮します。

効率はワークロードによって異なります。具体的には、Zipを使用すると、個々のファイルに直接アクセスできます。 tarを使用すると、まず不要な(圧縮された)ファイルを検索する必要があります。圧縮性能は、圧縮している内容によって異なります。 bzip2を伴うtarは、多くの場合、類似のファイル(ソースディレクトリなど)に適しています。各ファイルの内容が非常に異なる場合は、Zipの方が優れている可能性があります。

9

Zipアーカイブの最後には、その内容の中央ディレクトリが含まれています(ディレクトリの中身がまだ分からない場合は、事前にディレクトリを作成しなくてもよくなります)。これにより、アーカイブ全体を解凍することなく単一ファイルを素早く抽出することができます。アーカイブディレクトリを読み、必要なものだけを抽出するだけです。ただし、これにはアーカイブ全体がアクセス可能であること、およびブロックデバイス(フロッピーディスク、ハードドライブ)でのみ利用可能なランダムアクセスが必要です。さらに、アーカイブディレクトリは脆弱です。何らかの理由でアーカイブが切り捨てられた場合、アーカイブからanything有用なファイルを抽出するには多大な手間がかかります。

ZipアーカイブはBBS用に作成されました。そこでは、ディレクトリの内容を1つの(そして圧縮された)ファイルにまとめることができることが重要でした。同じ理由で、ほとんどのWebサイトが今日でもダウンロードをバンドルしているのと同じです。

Tarアーカイブは、テープドライブに使用されるバックアップをバンドルするために考案されました。したがって、順次アクセスになります。中央ディレクトリはありません。その代わりに、アーカイブには一定の間隔でヘッダーブロックが含まれており、次の数ブロックでどのファイルが続くかを示しています。 Tarアーカイブは一気に読むことを意図しています。単一ファイルのみを抽出する場合は、アーカイブは先頭から要求されたファイルが見つかるまで(最後になることもあります)順番に読み取られます。その上に圧縮が適用されます。 tarアーカイブに適用されるさまざまな圧縮プログラム(compressgzipbzip2など)はそれぞれストリーム圧縮プログラムであり、アーカイブのシーケンシャルな性質を変えることはありません。最悪の場合、抽出を開始するまでに、もう少し多くのブロックが必要になります。

これは些細な違いのように思えるかもしれませんが、実際には哲学における極の反対を表しています。 Zipアーカイブでは、便利なことをするためにファイル全体を手元に置く必要が常にありますが、tarアーカイブはパイプラインにストリーミングすることができます。最初の数ブロックが来るとすぐに、大きなtarアーカイブをダウンロードして最初から抽出し始めることができます(そして私が探しているファイルが手に入るとすぐにダウンロードを中断します)。 Zipアーカイブの場合は、アーカイブディレクトリが表示されるまで待つ必要があります。これはアーカイブの最後になります。しかし、Idoが手元にあるファイル全体を手に入れたら、そこから部分的な内容を抽出する方がtarファイルからはるかに速くなります。

どちらのフォーマットにも、どこでどのように使用されているかに応じて、非常に強力な利点があります。パイプライン(そして、あるプロセスから別のプロセスへデータをストリーミングするという概念)は、実際にはUNIXの世界にしか存在しないので、tarアーカイブの主な利点は他のシステムでは失われます。しかし、tarアーカイブはより柔軟性があるので、選択があるときはいつでも私はそれらを好むのです。

6

他の人がすでに言ったように、tarはgzipやbzip2のようなストリームコンパスで圧縮できるすべてのファイルの大きな「ブロック」を作成します。

この欠点は、アーカイブ内の1つのファイルにアクセスするためにファイル全体を解凍する必要があることです。

これの利点は、特に圧縮ファイルがよく似ている場合は、圧縮率が通常高くなることです。

"rar"のような他のパッカーは同じ効果を持つために "ブロックモード"(または同様のもの)を持っています。

5
IanH