私はLinux環境で働いていて、tarとZipコマンドについて知りたいのです。
Tarとzipのどちらが効率的ですか。 tarコマンドとZipコマンドの違いも知っておく必要があります。誰かが私にそれらを説明できますか?
tar
は、複数のファイルから1つのファイルのみを作成します。gzip
やbzip2
(tar
内から呼び出すことができる)などの圧縮プログラムを組み合わせない限り、圧縮は行われません。 -z
または-j
オプション) Zip
は、アーカイブと圧縮の両方を1つのプログラムにまとめたものです。
tar
郵便番号
Zipがファイルを別々に圧縮するという事実は、特に多くの小さい類似ファイルでは、圧縮率に影響を与えます。
(少なくともこれは10年前には正しかったです。)
TarはZipよりもはるかに多くのメタデータを保存しています。私の比較を見てください(少し古くなっています)。
(クリックして拡大)
Tarはテストの65%に合格し、Zipは17%しか合格しません。私はテストスイート をBSDライセンス の下でgithubで利用できるようにしましたので、あなたがMacを持っているならあなたは自分で試すことができます。 Linuxの場合、メタデータがあるかどうかはわかりませんので、これらのテストは関連性がない可能性があります。
効率はさまざまな方法で測定できます。
「作成されたアーカイブを操作するためのツールはどの程度一般的なのでしょうか」など、他にも疑問があります。
そのため、例えば、bzip2
はgzip
よりも小さいファイルを作成しますが、かなり長い時間がかかる可能性があります。また、私の経験ではgzip
はUnixライクなシステムでは普遍的ですが、bzip2
はまだそうではありません(非常に一般的であり、通常は入手が簡単です)。
Wimが述べたように、tar自体は圧縮されません。 tarを追加して圧縮する場合(たとえば、.tar.gzまたは.tar.bz2を取得する場合)、tarファイル全体を一度に圧縮していることになります。対照的に、Zipは各ファイルを個別に圧縮します。
効率はワークロードによって異なります。具体的には、Zipを使用すると、個々のファイルに直接アクセスできます。 tarを使用すると、まず不要な(圧縮された)ファイルを検索する必要があります。圧縮性能は、圧縮している内容によって異なります。 bzip2
を伴うtar
は、多くの場合、類似のファイル(ソースディレクトリなど)に適しています。各ファイルの内容が非常に異なる場合は、Zip
の方が優れている可能性があります。
Zipアーカイブの最後には、その内容の中央ディレクトリが含まれています(ディレクトリの中身がまだ分からない場合は、事前にディレクトリを作成しなくてもよくなります)。これにより、アーカイブ全体を解凍することなく単一ファイルを素早く抽出することができます。アーカイブディレクトリを読み、必要なものだけを抽出するだけです。ただし、これにはアーカイブ全体がアクセス可能であること、およびブロックデバイス(フロッピーディスク、ハードドライブ)でのみ利用可能なランダムアクセスが必要です。さらに、アーカイブディレクトリは脆弱です。何らかの理由でアーカイブが切り捨てられた場合、アーカイブからanything有用なファイルを抽出するには多大な手間がかかります。
ZipアーカイブはBBS用に作成されました。そこでは、ディレクトリの内容を1つの(そして圧縮された)ファイルにまとめることができることが重要でした。同じ理由で、ほとんどのWebサイトが今日でもダウンロードをバンドルしているのと同じです。
Tarアーカイブは、テープドライブに使用されるバックアップをバンドルするために考案されました。したがって、順次アクセスになります。中央ディレクトリはありません。その代わりに、アーカイブには一定の間隔でヘッダーブロックが含まれており、次の数ブロックでどのファイルが続くかを示しています。 Tarアーカイブは一気に読むことを意図しています。単一ファイルのみを抽出する場合は、アーカイブは先頭から要求されたファイルが見つかるまで(最後になることもあります)順番に読み取られます。その上に圧縮が適用されます。 tarアーカイブに適用されるさまざまな圧縮プログラム(compress
、gzip
、bzip2
など)はそれぞれストリーム圧縮プログラムであり、アーカイブのシーケンシャルな性質を変えることはありません。最悪の場合、抽出を開始するまでに、もう少し多くのブロックが必要になります。
これは些細な違いのように思えるかもしれませんが、実際には哲学における極の反対を表しています。 Zipアーカイブでは、便利なことをするためにファイル全体を手元に置く必要が常にありますが、tarアーカイブはパイプラインにストリーミングすることができます。最初の数ブロックが来るとすぐに、大きなtarアーカイブをダウンロードして最初から抽出し始めることができます(そして私が探しているファイルが手に入るとすぐにダウンロードを中断します)。 Zipアーカイブの場合は、アーカイブディレクトリが表示されるまで待つ必要があります。これはアーカイブの最後になります。しかし、Idoが手元にあるファイル全体を手に入れたら、そこから部分的な内容を抽出する方がtarファイルからはるかに速くなります。
どちらのフォーマットにも、どこでどのように使用されているかに応じて、非常に強力な利点があります。パイプライン(そして、あるプロセスから別のプロセスへデータをストリーミングするという概念)は、実際にはUNIXの世界にしか存在しないので、tarアーカイブの主な利点は他のシステムでは失われます。しかし、tarアーカイブはより柔軟性があるので、選択があるときはいつでも私はそれらを好むのです。
他の人がすでに言ったように、tarはgzipやbzip2のようなストリームコンパスで圧縮できるすべてのファイルの大きな「ブロック」を作成します。
この欠点は、アーカイブ内の1つのファイルにアクセスするためにファイル全体を解凍する必要があることです。
これの利点は、特に圧縮ファイルがよく似ている場合は、圧縮率が通常高くなることです。
"rar"のような他のパッカーは同じ効果を持つために "ブロックモード"(または同様のもの)を持っています。