どちらがより効率的ですか-tarまたはzip圧縮ですか?tarとzipの違いは何ですか?


68

私はLinux環境で作業していますが、tarコマンドとzipコマンドについて知りたいです。

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

回答:


77

tar複数のファイルから単一のファイルを作成するだけで、gzipor などの圧縮プログラムを組み合わせない限り、圧縮は実行されませんbzip2(それぞれtar-zor -jオプションを使用して内部から呼び出すことができます)。zip1つのプログラムでアーカイブと圧縮の両方を組み合わせます。


60

タール

  • 片方の端からもう一方の端まで読むことを想定しています-「テープアーカイブ」。(コマンドの年齢は...を示しています)
  • 圧縮は行いませんが、gzipやbzip2(-zまたは-jで内部的に実行)を介してパイプすることにより、結果のストリーム全体を圧縮できます
  • UNIXファイル属性を格納します:uid、gid、permissions(特に実行可能)。デフォルトはディストリビューションに依存し、オプションで切り替えることができます。

zip

  • MSDOS属性を格納します。(アーカイブ、読み取り専用、非表示、システム)
  • 各ファイルを圧縮してから、アーカイブに追加します
  • ファイルの最後にファイルテーブルを含める
  • 前の2つの結果として、必要なファイルに関する正確な部分のみを読み取ることができます。

zipがファイルを個別に圧縮するという事実は、特に多くの小さな類似ファイルの圧縮率に影響します。

(少なくとも、これは10年前には正確でした。)


22

Tarは、Zipよりもはるかに多くのメタデータを保持します。私の比較を参照してください(少し時代遅れです)。

ここに画像の説明を入力してください

(クリックして拡大)

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


面白い!+1。しかし、再び、それは巨大なプログラムでした。他の目的でこれを書きましたか?ちょっと興味があるんだけど。
CppLearner

数年前に作業していたファイルマネージャーのテストを作成しました。しかし、決してリリースしませんでした。
ネオニー

1
Linuxにもメタデータがありますので、それで動作するはずです。
zeitue

14

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

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

「作成されたアーカイブを操作するツールはどのくらい一般的ですか」など、他の質問もあります。

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


3
7zip(7-zip.org)は、CPU時間を犠牲にして優れた圧縮を実現するためのもう1つの優れたオプションです。bzip2(私が知っている場所にはデフォルトではインストールされません)ほど一般的ではありませんが、ほとんどの場所に簡単にインストールできます(ほとんどのLinuxディストリビューションの標準リポジトリにあり、Windows用のシンプルなインストーラパッケージがあります。tar+ gzipのように入力ファイル間で圧縮ウィンドウは非常に多くの小さなファイルを含むときにジッパーの上にさらに大きな節約を取得します。
デビッドSpillett

3
効率は、データをどれだけ保存するかによっても測定できます。この質問に対する私の答えをご覧ください。タールは、データの保存においてzipよりもはるかに優れています。
ネオニー

1
もう1つの測定値は、UNIX外での互換性です。Windowsはzip(Windowsに組み込まれています)で問題ありません。通常、シェアウェアでtar.gzを簡単に処理できますが、bzip2を見つけるのはまれです。残念ながら、元の質問ではこれらの基準に言及していなかったため、それらが関連しているかどうかはわかりません。
リッチホモルカ

1
私はかつて、いくつかの一般的なコンプレッサーに必要な圧縮率と時間の徹底的な見直しを行いました。これは、スペースと時間の価値に応じて最も効率的です:blog.grandtrunk.net/2004/07/practical-compressor-test
Wim

9

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

効率はワークロードに依存します。具体的には、zipを使用すると、個々のファイルに直接アクセスできます。tarでは、最初に不要な(圧縮された)ファイルをシークする必要があります。圧縮のパフォーマンスは、圧縮対象によって異なります。 tarwith bzip2は、多くの同様のファイル(ソースディレクトリなど)の場合によく適しています。 zip各ファイルが非常に異なるコンテンツを持っている場合、より良いかもしれません。


4
...一方、tocは最後に配置されるため、コンテンツにアクセスする前にzipファイル全体を取得する必要があります。対照的に、バイトが到着するのと同じ速さでtarを展開することができます...-

6

Zipアーカイブには、その内容の中央ディレクトリが最後に含まれています(内部に何があるかまだわからないディレクトリを事前に作成する必要はほとんどありません)。これにより、アーカイブ全体を解凍することなく、単一のファイルをすばやく抽出できます。アーカイブディレクトリを読み取り、必要なものだけを抽出します。ただし、これにはアーカイブ全体がアクセス可能であることが必要であり、ブロックデバイス(フロッピーディスク、ハードドライブ)でのみ利用可能なランダムアクセスが必要です。さらに、アーカイブディレクトリには脆弱性があります。何らかの理由でアーカイブが切り捨てられた場合、アーカイブから有用なものを抽出するために重いウィザードが必要です。

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

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

これは些細な違いのように聞こえるかもしれませんが、実際には哲学の正反対を表しています。zipアーカイブでは、ファイル全体を手元に置いて必要な処理を行う必要が常にありますが、tarアーカイブはパイプラインにストリーミングできます。大きなtarアーカイブをダウンロードして、最初の数ブロックが入ったらすぐに解凍を開始できます(探しているファイルを取得したらすぐにダウンロードを中断できます)。Zipアーカイブの場合、アーカイブの最後にあるアーカイブディレクトリが表示されるまで待つ必要があります。しかし、私は一度やるはるかに速くtarファイルからなり、そこから部分コンテンツを抽出し、手元のファイル全体を持っています。

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


5

既に述べたように、tarはgzipやbzip2などのストリームコンプレッサーで圧縮できるすべてのファイルの大きな「ブロック」を作成します。

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

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

「rar」のような他のパッカーには、「ブロックモード」(または類似の)があり、同じ効果があります。

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