web-dev-qa-db-ja.com

今日 'tar'を使用する利点は何ですか?

私はtarが当時のテープアーカイブ用に作られたことを知っていますが、今日私たちはファイルを集約し、同じ論理ファイルフォーマット内で圧縮を実行するアーカイブファイルフォーマットを持っています。

質問:

  • 同じデータ構造で集約と圧縮を行うファイル形式を使用した場合と比較した場合、tarまたはbzip2でカプセル化されたgzipを使用すると、集約/圧縮/解凍の段階でパフォーマンスが低下しますか?比較されているコンプレッサのランタイムが同一であると仮定する(例えば、gzipとDeflateは類似している)。

  • .7z.Zipなどの他のファイル形式にはない、tarファイル形式の機能はありますか?

  • tarはそのような古いファイル形式であり、今日より新しいファイル形式が存在するため、GNU/Linux、Android、BSD、およびその他のUNIXでtargzipbzip2、さらには新しいxzにカプセル化される)オペレーティングシステム、ファイル転送、プログラムソースとバイナリのダウンロード、そして時にはパッケージマネージャフォーマットとしても?

210
MarcusJ

パート1:パフォーマンス

以下に、2つの別々のワークフローとそれらの機能の比較を示します。

ディスクblah.tar.gzにファイルがあります。これは、たとえば、1ギガバイトのgzipで圧縮されたデータで、非圧縮時には2ギガバイトを占有します(圧縮率50%)。

アーカイブと圧縮を別々に行う場合、これを作成する方法は次のとおりです。

tar cf blah.tar files ...

これにより、blah.tarが生成されます。これは、非圧縮形式のfiles ...の単なる集約です。

その後、あなたはやります

gzip blah.tar

これは、ディスクからblah.tarの内容を読み取り、gzip圧縮アルゴリズムでそれらを圧縮し、その内容をblah.tar.gzに書き込み、ファイルblah.tarのリンクを解除(削除)します。

さあ、解凍しましょう!

方法1

何らかの方法でblah.tar.gzがあります。

あなたが実行することに決めました:

gunzip blah.tar.gz

この意志

  • blah.tar.gzの1GBの圧縮データコンテンツを読み取ります。
  • メモリ内のgzip解凍プログラムを介して圧縮データを処理します。
  • メモリバッファが「ブロック」に相当するデータでいっぱいになると、非圧縮データをディスク上のファイルblah.tarに書き込み、すべての圧縮データが読み取られるまで繰り返します。
  • ファイルblah.tar.gzのリンクを解除(削除)します。

これで、blah.tarがディスク上にあります。これは非圧縮ですが、その中に1つ以上のファイルが含まれており、データ構造のオーバーヘッドは非常に低くなっています。ファイルサイズはおそらく、すべてのファイルデータの合計よりも大きい数バイトです。

あなたが実行します:

tar xvf blah.tar

この意志

  • blah.tarの2GBの非圧縮データの内容と、ファイル許可、ファイル名、ディレクトリなどに関する情報を含むtarファイル形式のデータ構造を読み取ります。
  • 2GBのデータとメタデータをディスクに書き込みます。これには、データ構造/メタデータ情報をディスク上の新しいファイルとディレクトリの作成に適切に変換するか、既存のファイルとディレクトリを新しいデータコンテンツで書き換えます。

このプロセスでディスクからREADした合計データは、1ギガバイト(gunzipの場合)+ 2ギガバイト(tarの場合)= 3ギガバイトでした。

このプロセスでディスクにを書き込んだ合計データは、2GB(gunzipの場合)+ 2GB(tarの場合)+メタデータの数バイト=約4GBでした。

方法2

何らかの方法でblah.tar.gzがあります。

あなたが実行することに決めました:

tar xvzf blah.tar.gz

この意志

  • blah.tar.gzの1GBの圧縮データコンテンツを一度に1ブロックずつメモリに読み込みます。
  • メモリ内のgzip解凍プログラムを介して圧縮データを処理します。
  • メモリバッファがいっぱいになると、メモリ内のpipeそのデータがtarファイル形式パーサーに渡され、メタデータなどに関する情報と非圧縮ファイルデータが読み取られます。
  • メモリバッファーがtarファイルパーサーでいっぱいになると、ファイルとディレクトリを作成し、それらを圧縮されていないコンテンツで埋めることにより、圧縮されていないデータをディスクに書き込みます。

このプロセスでディスクからREAD合計データは、1GBの圧縮データ、期間でした。

このプロセスでにディスクに書き込んだ合計データは、2ギガバイトの非圧縮データ+メタデータの数バイト=約2ギガバイトでした。

気付いた場合、Way 2のディスクI/Oの量は、たとえばZipまたは-によって実行されるディスクI/Oと同じである7-Zip プログラム、圧縮率の違いを調整します。

圧縮率が懸念される場合は、Xzコンプレッサーを使用してtarをカプセル化すると、 LZMA2'ed TARアーカイブがあります。これは、7-Zipで利用できる最も高度なアルゴリズムと同じくらい効率的です:-)

パート2:機能

tarは、ファイルメタデータ内にUnixパーミッションを格納し、あらゆる種類のパーミッション、シンボリックリンクなどでディレクトリを正常にパックするために非常によく知られており、テストされています。ファイルを単一のファイルまたはストリームに変換しますが、必ずしも圧縮する必要はありません(ただし、圧縮は便利で頻繁に使用されます)。

パート3:互換性

多くのツールは、「最も一般的な分母」ファイル形式であるため、.tar.gzまたは.tar.bz2としてソースまたはバイナリ形式で配布されます。ほとんどのWindowsユーザーが.Zipまたは.rar解凍プログラム、ほとんどのLinuxインストールにアクセスできるように、たとえ最も基本的なものであっても、少なくとも古くなったり縮小したりしても、少なくともtarとgunzipにアクセスできます。 Androidファームウェアでもこれらのツールにアクセスできます。

最新のディストリビューションを実行しているオーディエンスを対象とする新しいプロジェクトは、.tar.xz(gzipまたはbzip2よりも圧縮率の高いXz(LZMA)圧縮形式を使用)、またはZipまたは RAR は、複数のファイルを単一のファイルにカプセル化するためのレイアウトを圧縮および指定するという点で、ファイル形式です。

OpusWebM のような新しいフォーマットでオンラインダウンロードストアから音楽が販売されないのと同じ理由で、.7zが頻繁に使用されることはありません。古代または非常に基本的なシステムを実行している人々との互換性。

177
allquixotic

これ はStack Overflow で答えられました。

bzipとgzipは、ファイルのグループではなく、単一のファイルに対して機能します。普通のZip(およびpkzip)はファイルのグループを操作し、アーカイブの概念を内蔵しています。

* nix哲学は特定の仕事を非常にうまく行ない、一緒に連鎖することができる小さなツールの1つです。そのため、ここには特定のタスクを持つ2つのツールがあり、それらはうまく合うように設計されています。それはまたあなたがファイルをグループ化するためにtarを使うことができ、それからあなたが圧縮ツール(bzip、gzipなど)の選択を持つことができることを意味します。

多くのツールはソース形式またはバイナリ形式で.tar.gzまたは.tar.bz2として配布されています。これは、最も一般的な分母形式のファイル形式であるためです。最も基本的なものでも、少なくともtargunzipにアクセスできます。 Androidファームウェアでもこれらのツールにアクセスできます。

最新のディストリビューションを実行しているオーディエンスをターゲットにした新しいプロジェクトは、.tar.xz(Xz( LZMA )圧縮形式など、より最新の形式で配布される場合があります。 gzipやbzip2)、または.7zよりも圧縮率が高い Zip または RAR ファイル形式は、複数のファイルを単一のファイルにカプセル化するためのレイアウトを圧縮および指定します。

あなたは.7zが音楽が Opus のような真新しいフォーマットでオンラインダウンロードストアから販売されていないのと同じ理由でより頻繁に使用されるのを見ません、または WebMのビデオ 。古代のシステムや非常に基本的なシステムを実行している人々との互換性が重要です。

101
Kruug

Tarには、Unixファイルシステムについてすべて知っている豊富な操作と修飾子があります。 Unixのパーミッション、ファイルに関連したさまざまな時間、ハードリンク、ソフトリンクについて(そしてシンボリックリンクがファイルシステムのグラフにサイクルを導入する可能性について)知っています。 。

  • 抽出したデータにファイルアクセス時間を保存しますか? Tarはそれをすることができます。パーミッションを維持するには? Tarはそれをすることができます。

  • シンボリックリンクをシンボリックリンクとして保持しますか? Tarはデフォルトでそれを行います。代わりにターゲットをコピーしたいですか? Tarはそれをすることができます。

  • ハードリンクされたデータが一度だけ保存されることを確認しますか?(つまり、正しいことをするために) Tarがそれを行います。

  • スパースファイルをうまく処理しますか? Tarはそれをすることができます。

  • 非圧縮データが必要ですか(なぜですか)。 Tarはそれをすることができます。gzipで圧縮するには? Tarはそれをすることができます。bzip2では? Tarはそれを行うことができます。任意の外部圧縮プログラムでは? Tarはそれをすることができます。

  • RAWデバイスへの書き込みまたはRAWデバイスからの復元を行いますか? Tarのフォーマットはそれをうまく処理します。

  • 既存のアーカイブにファイルを追加しますか? Tarはそれを行うことができます。2つのアーカイブを比較して何が変わったかを確認しますか? Tarはそれを行うことができます。アーカイブの変更された部分だけを更新するには? Tarはそれをすることができます。

  • 複数のファイルシステムにまたがってアーカイブしないようにしますか? Tarはそれをすることができます。

  • 前回のバックアップより新しいファイルのみを取得しますか? Tarはそれをすることができます。

  • ユーザーとグループの名前または番号を保持しますか? Tarはどちらかをすることができます。

  • 抽出後にシステムが正しく動作するように、デバイスノードを保存する必要がありますか(/dev内のファイルのように)。 Tarはそれをすることができます。

Tarは何十年もの間多くのユースケースを処理するために進化してきました。そして実際に多くのが人々がUnixファイルシステムでやりたいことについて知っています。

62
dmckee

あなたはアーカイブ圧縮という2つの異なるプロセスを混同します。

アーカイバを使用する理由

圧縮せずにアーカイブを使用する1つの理由は、例えば、ファイルの束があるホストから別のホストにコピーされた場合です。次のようなコマンド

tar cf - some_directory | ssh Host "(cd ~/somewhere | tar xf -)"

物事をかなりスピードアップすることができます。ファイルが圧縮できないことがわかっている場合、または SSH が圧縮で設定されている場合は、かなりのCPU時間を節約できます。確かに、アーカイブ機能を備えたより近代的な圧縮ツールを使用して、圧縮を無効にすることができます。 tarの利点は、すべてのシステムで利用できることが期待できるということです。

gzip圧縮でアーカイバを使用する理由

targzipと一緒に使用する理由の1つは、スピードです。いくつかの場所から別の場所にいくつかのGiBのテキストファイルを転送する場合、私は構いません。最後のバイトの圧縮については、圧縮は転送にのみ使用され、長期保存には使用されないためです。そのような場合、私はgzipを使います。これはCPUを最大限に使いません(例えば、 7-Zip とは対照的に)。 m I/O は再度バインドされ、CPUにはバインドされません。 gzipは至る所で利用可能であると考えることができます。

tarscpなどを優先してrsyncを使用する理由

あなたがコピーする小さなファイルがたくさんあるなら、それはscpを打ちます(例えば、何十万ものファイルを持つメールディレクトリ)。 rsyncは、それ自体はすごいですが、どこでも利用できるわけではありません。さらに、rsyncは、ファイルの一部(または古いバージョン)が既に宛先に存在している場合にのみ、実際に成果を上げます。最初のコピーでは、実際のデータに応じてtarが最も速く、圧縮ありまたはなしです。

28
Marco

ここで他の良い答えに加えて、私はtar + gzip|bzip2|xzの組み合わせが好きです。これは主にこれらの圧縮ファイルがストリームのようであり、あなたがそれらを簡単にパイプ処理できるからです。

インターネットで利用可能なファイルを解凍する必要があります。 Ziprarのどちらのフォーマットでも、まずダウンロードしてから解凍する必要があります。 tar.{gz,bz2,xz}を使えば、圧縮アーカイブをディスク上に物理的に持つ必要なしに、同じステップでダウンロードと解凍ができます。

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

私は最初にファイル全体をダウンロードする時間を無駄にしておらず、ダウンロードが終了した後に解凍するので、これは私のディスクに圧縮されていないファイルだけを残して、全体のプロセスをスピードアップします。代わりに、ダウンロード中に解凍します。 Zipまたはrarファイルでこれを行うことはできません。

24

(GNU)Tarに固執する理由はいくつかあります。

それは:

  • GPLライセンス
  • unixの哲学の意味で良い
    • 複数のタスクを実行できる単一目的のツール
  • よく文書化されており、多くの信頼できる機能を持っています
  • いくつかの圧縮アルゴリズムと互換性があります
  • 使いやすく、人々はそれと習慣を開発しました
  • 広く利用可能
  • _ rms _で始まるソフトウェアを使うと、中が暖かくてぼやけています( Emacs を除く)

あなたの特定の牛肉が内容を読むことができる前にtarballを「解凍」しなければならないことであるならば、あなたはおそらく正しいです。 WinRAR および 7-Zip 自動的に実行します。ただし、アーカイブの内容を圧縮されていない形式で文書化するなど、この問題に対する簡単な回避策があります。

あなたの質問すべてを直接的に答えることにはいくらか消極的であるように思われますが、あなたの質問を教化の出発点として使うのが明らかな好みです。それで私はそれに打撃を与えるつもりです。

同じデータ構造で集約と圧縮を行うファイル形式を使用した場合と比較した場合、gzipまたはbzip2でカプセル化されたtarを使用すると、集約/圧縮/解凍の段階でパフォーマンスが低下しますか?比較されているコンプレッサのランタイムが同一であると仮定する(例えば、gzipとDeflateは類似している)。

いいえ。実際、tarとgzipは通常2つのプロセスなので、Info-ZipのZipのようなアーカイバが提供していない、マルチコアスピードの利点を享受することさえできます。圧縮率に関しては、tar + gzipはZipを使用した場合、deflateを使用した場合よりも明らかに優れています。より圧縮されたアーカイブはより短い時間で解凍されるので、その圧縮の利点は抽出時の速度の利点に変換されます。

.7zや.Zipなどの他のファイル形式にはないtarファイル形式の機能はありますか?

はい、tarはUnix用に設計されており、奇妙で卑劣なMac OS X Unixファイルシステムであっても、奇妙なことにすべてのUnixファイルシステムを正確に記録および復元できるように長年にわたって進化してきました。 Zipは、権限、時間、所有者、グループ、シンボリックリンクなどのメタデータの多くを保持できますが、それでもすべてではありません。一例として、Zipも7zもスパースファイルを認識または利用することはできず、ハードリンクを認識したり復元することもできません。

Tarはそのような古いファイル形式であり、新しいファイル形式が今日存在するため、GNU/Linux、Android、BSD、およびその他のUNIXでtarがgzip、bzip2、または新しいxzでカプセル化されているかどうか)オペレーティングシステム、ファイル転送、プログラムソースとバイナリのダウンロード、そして時にはパッケージマネージャフォーマットとしても?

それに対するその他の良い答えはたくさんあります。一番良いのはそれがうまくいくことです、そしてあなたはより良い圧縮フォーマット(例えばxz)にそれを更新し続けることができます、そしてそれでも同じtarフォーマットとさらには同じコンパイル済みtarユーティリティ。たくさんのものをまとめて、もう一方の端にまとめて展開したいだけであれば、最も古く、完成された、そして最もデバッグされたソフトウェア以外のものを使用する理由はほとんどありません。

ランダムアクセス、部分的な更新、またはコンテンツを断片的に処理する必要がある他のものが必要な場合、または全体を読んでいなくてもその内容を確認できるようにする場合は、別の形式を使用します。

11
Mark Adler

パフォーマンス

大きな違いは、圧縮とアーカイブが行われる順序です。tarアーカイブは、オプションでアーカイブをコンプレッサーに送ることができます。そしてZipは、アーカイブを作成し、ファイルデータを32 KBのチャンクに圧縮します。アーカイブ。ファイルデータを小さな塊に分割して別々に圧縮することで、アーカイブ内のすべてのものをその前に解凍することなく、特定のファイルまたはファイルの一部を抽出することができます。また、コンプレッサーが再起動される前に非常に大きな辞書を作成するのを防ぎます。つまり、圧縮は速くなりますが、辞書サイズを大きくして全体を圧縮するのと同じぐらいの比率では圧縮できません。

2番目のファイルの最初の500バイトが最初のファイルの最後の500バイトと同じである2つのファイルを考えることによってそれを視覚化することができます。 Zipメソッドでは、2番目のファイルに対してコンプレッサーが再起動されるので、最初のファイルが同じデータで終わっていることを覚えていないので、2番目のファイルから重複したデータを削除することはできません。

人気

tarよりも多くの利点を持つ他のフォーマットがたくさんあります。 7-Zip はUnixファイルのパーミッションを格納しませんが、darは格納し、Zipは格納でき、3つすべてがインデックスを格納します。アーカイブ内のファイルを更新します。彼らはまた、圧縮のためにマルチコアCPUを使用することができます。

みんながまだtarを使っているのは、みんながまだWindowsを使っているのと同じ理由です。 Flash :人々は変更を好まない。変更するための強力な理由がなければ、人々は彼らが知っていることに固執するだけです。ほとんどの人が既にdarをインストールしている場合、tarはその形式でファイルを公開することを正当化するのに十分な利点を提供しないため、darを知っている人はほとんどいないので、単純な慣性で古い標準を守ります。

11
psusi

.Zipのようなファイルフォーマットは、ファイル名のカタログを読むために、最初にファイルの終わりを読むことをソフトウェアに要求します。逆に、tarはその情報を圧縮ストリームとともに格納します。

Tarの方法の利点は、ネットワークソケットのようにシークできないパイプからデータを読み込んでいる間にデータを解凍できることです。

Zip方式の利点は、ディスク上の静的ファイルの場合、最初にアーカイブ全体を解凍することなくコンテンツとメタデータを参照できることです。

あなたがしていることに応じて、どちらも用途があります。

11
xorsyst

Tarは、ファイルを完全に忠実にバックアップするために作成されました。ファイルを転送するためだけのものではありません。そのため、tarユーティリティは、ファイルシステム構造に関して重要なすべてのものを保存するアーカイブを作成するための最も完全なユーティリティです。

これには、1つ以上の競合するツールに欠けているこれらの機能すべてが含まれます。

  • ファイルの所有権
  • ファイル許可
  • あまり一般的ではないファイル許可(例:setuid、sticky bit)
  • シンボリックリンク
  • ハードリンク
  • デバイスエントリ(キャラクタデバイスとブロックデバイス)
  • スパースファイル
  • ACLエントリ(はすべてのバージョンでサポートされているわけではありません
  • 拡張/ユーザ属性(はすべてのバージョンでサポートされているわけではありません
  • SElinuxラベル(はすべてのバージョンでサポートされているわけではありません

バックアップを作成するときに非常に便利な--one-file-systemオプションもあります。

新しい機能がファイルシステムに追加されるときはいつでも、サポートは最初にtarに追加されます。だからそれはファイルを保存するための最も互換性のある方法であり続けています。

6
tylerl

今日、MP3、JPG、ビデオ、tar.gzファイル、JARパッケージ、RPM、DEBなど、さまざまな圧縮ファイルがあります。あなたが転送のために単一のファイルにこれらの束を束ねる必要があるなら、それはそれらを圧縮しようとせずにファイルを束ねるだけの 'tar'ユーティリティを持つことは有用です。

圧縮ファイルを圧縮しようとするのに時間と電気を浪費するだけでなく、元のファイルよりも大きいファイルになることがよくあります。

それの別の用途は圧縮率を改善することです。たとえば、ログファイルのバンドルを 'tar'して結果をgzipした場合、最初に圧縮してから 'tar'をバンドルした場合よりも小さいファイルが作成される可能性があります。そしてもちろん、tarを使用して、必要な圧縮アルゴリズムを選択したり、特定のユースケースに合わせて圧縮を最適化するためのオプションを指定したりできます。

私は、tar 'が今日非常に関連性があることに気付き、Zipを使用することを好みます。私たちのオフィスでは、Windowsを使う人は誰でも7-Zipをインストールしているので、tarファイルは完全にクロスプラットフォーム互換です。

5
Michael Dillon

たぶん私たちは、そのような「新しい」ファイルフォーマットが圧縮と集約の両方を実行する(そして私が暗号化を加える)のはなぜ完全に異なるツールの代わりに最初からtar上に構築されなかったのだろうか。

私が理解しているように、歴史的な理由があります(OSの歴史、特許の「保護」、ソフトウェアベンダーがツールを販売する能力などに関連します)。

さて、他の回答が指摘しているように、今でもtarは他のソリューションよりも明らかに劣っているわけではなく、ストリームの処理能力やUnix権利管理のような他の面ではより良いかもしれません。

あなたが tarに関するウィキペディアの記事 を読むなら、あなたはもう一つの興味深い事実を見ることができます。記事は tarのいくつかの欠点 を認めています...しかし代わりにZipを使うことを示唆していません(実際にZipフォーマットはこれらの欠点を解決していません)がDAR。

私は個人的なタッチで終わります。暗号化されたデータを保存するためのファイルフォーマットを作成しなければならなかったこともあります。ベースとしてtarを使用するのは便利でした(他の人が同じ選択をしました、例えば、tarは.debパッケージのための内部集約フォーマットです)。暗号化後にデータを圧縮しようとしてもまったく役に立たず、暗号化の前に独立したステップとして圧縮を実行しなければならず、Zip暗号化を使用する準備もできていませんでした(公開鍵と秘密鍵による2鍵暗号化が必要でした) 。タールを使用してそれはそよ風として働いた。

4
kriss

tarはUNIXです。UNIXはtarです。

私の意見では、 still が今日tarを使用する理由は、UNIXアプローチが最初から完全に正しくなった(おそらくまれな)ケースの1つだからです。

アーカイブの作成に関わる段階を詳しく見てみると、ここでさまざまなタスクの分離が行われる方法が UNIX哲学であることに同意していただければ幸いです。

  • any all 関連メタを含むファイル、ディレクトリ、シンボリックリンクの選択の変換に特化した1つのツール(ここに名前を付けるtar)タイムスタンプ、所有者、許可などのデータを1つのバイトストリームに。

  • そして、 any バイトの入力ストリームを別の(うまくいけば)より小さな出力ストリームに変換する、任意の交換可能なツール(gzipbz2xz).

このようなアプローチを使用すると、ユーザーだけでなく開発者にもいくつかのメリットがあります。

  • extensibility tar any 圧縮アルゴリズムが既に存在するか、または any 圧縮アルゴリズムと結合できるようにするなしを開発します。tarの内部動作を変更する必要はありません。

    まったく新しい「hyper-Zip-utra」またはその他の圧縮ツールが登場するとすぐに、tarの全機能を備えた新しい使用人を受け入れて使用する準備ができています。

  • stability tarは、80年代初期にテストされ、多数のオペレーティングシステムとマシンで実行されて以来、頻繁に使用されています。

    reinvent 所有権、アクセス許可、タイムスタンプなどの保存を実装する際にを何度も何度も繰り返す必要を防ぐ for every 新しいアーカイブツールは、開発に多くの(不必要に費やされた)時間を節約するだけでなく、新しいアプリケーションごとに同じ reliability を保証します。

  • consistency ユーザーインターフェイスは常に同じままです。

    ツールAを使用して権限を復元するには、オプション--i-hope-you-rember-this-oneを渡し、ツールBを使用するには--this-time-its-another-oneを使用する必要があることを覚えておく必要はありません。ツールCの使用は `--hope-you-didnt-try -with-tool-as-switch。

    一方、ツールDを使用する場合、--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-nowを使用しなかった場合は、ツールDを台無しにしたことになります。

3
mikyra

誰もこれに言及していないことに驚いていますが、理由の1つ - 本当に利点ではなく必要性 - は後方互換性のためです。アーカイブのためにtarを呼び出すかもしれない何十年もの間ソフトウェアを実行しているたくさんのシステムがあります。古いシステムをすべて「修正」するために誰かを雇うのは、費用効率が高くありません。

3
Keltari

その理由は、「文化の中への定着」です。私のように、圧縮されたtarアーカイブ、あるいはWindowsの世界から来たものであればZipファイル以外のものを処理するよう求められた場合、目が輝く人がたくさんいます。

私は7-Zip、RAR、その他のことについて知りたくありません。私があなたのファイルを解凍するためにプログラムをインストールしなければならないならば、それは仕事です。支払いが行われた場合、またはコンテンツが「持っている必要がある」もので他の方法で利用できない場合は、それを行います。

Tarの利点の1つは、誰かにtarballを送信した場合に即座に認識されることです。レシピエントは筋肉記憶を用いて抽出コマンドをタイプすることができる。

本当の質問は:なぜいくつかの人々は彼らが誰かがいくつかのエキゾチックなユーティリティをインストールしてそれを使用する方法を学ぶ時間を浪費するように頼むほどもう1バイトのスペースを節約することに夢中になるのですか?それから、エキゾチックな圧縮とアーカイブフォーマットの愚かな使い方があります。 AAC のサウンドを持つ H.264 ビデオは本当に必要ですか?マルチパートRARに入れることができますか?

Tarフォーマットは古いかもしれませんが、それは関連するものすべてを格納します:ファイルの内容、パス、タイムスタンプ、パーミッションと所有権。シンボリックリンクだけでなく、ハードリンク構造を保持することもできます。これは特別なファイルも格納しているので、ブートストラップ中に使われるミニチュアの/devディレクトリのようなものにテープアーカイブを使うことができます。バイナリパッケージ形式がファイルシステムのルートに対して圧縮されていないtarballだけで構成されているLinuxディストリビューションをまとめることができます。

3
Kaz

良い答えはたくさんありますが、それらはすべて重要な事実を無視しています。 Tarは、Unix風の世界で、ユーザーと開発者のエコシステムを確立しています。 ZipがそのDOS/Windowsエコシステムによって続けられているように、それはそれを続けていく。そのようなエコシステムを持つことは、その技術的利点ではなく、技術を支えるものです。

3

あなたが提起した具体的な質問に直接答える:

同じデータ構造で集約と圧縮を行うファイル形式を使用した場合と比較した場合、gzipまたはbzip2でカプセル化されたtarを使用すると、集約/圧縮/解凍の段階でパフォーマンスが低下しますか?比較されているコンプレッサのランタイムが同一であると仮定する(例えば、gzipとDeflateは類似している)。

一般に、特に組み込みの圧縮ライブラリ(2番目のプロセスではなく圧縮ライブラリが使用される場合のtar xvzfまたはtar xvjfスタイルのコマンドライン)でtarを使用すると、パフォーマンスが大幅に向上します。これは2つの主な原因から来ます。

  • 特にソフトウェアの配布に一般的に使用されている比較的小さなファイルを大量に処理する場合、冗長性が高くなります。多数のファイルを圧縮すると、個々のファイルを圧縮するよりも全体的な圧縮率が高くなります。そして「辞書」は、ファイルごとではなく、入力のチャンクごとに1回計算されます。

  • tarはファイルシステムを理解します。これは、作業中の/実行可能なオペレーティングシステムを保存および復元するように設計されています。 UNIXファイルシステムで何が重要なのかを正確に把握し、それを忠実にとらえて復元します。他のツール、特にZipファミリーは、ドキュメントが重要なものであり、忠実なOS機密コピーではないOSファミリー間でファイルを共有するために設計されています。

.7zや.Zipなどの他のファイル形式にはないtarファイル形式の機能はありますか?

スパースファイル処理直接データベースライブラリの中には、スパースファイル(データが名目上GBですが、実際に書き込まれて保存されるデータははるかに少ないファイル)に依存しているものがあり、実際に使用されるディスクは数ブロックのみです。あなたが気づいていないツールを使用するならば、それから解凍時に、あなたは大量のディスクブロック消費で終わり、すべてゼロを含みます。それをスパースファイルに戻すのは...苦痛です。あなたもそれをする余地がある場合。スパースファイルとは何かを把握し、それを尊重するツールが必要です。

メタデータUnixは長年にわたっていくつかの奇妙なことを進化させてきました。 14文字のファイル名、長いファイル名、symリンク、スティッキビット、スーパーユーザービット、継承されたグループアクセス許可などをリンクします。Tarはこれらを理解し、再現します。ファイル共有ツール...そんなにありません。リンクを使用するソフトウェアを使用したことがなく、バックアップや復元に無意味なツールを使用したことがある場合は、現在、多くの人が独立しています。多数の名前を持つ単一のファイルではなく、ファイル。疼痛。あなたのソフトウェアは失敗し、あなたはディスクが肥大しています。

Tarはそのような古いファイル形式であり、新しいファイル形式が今日存在するため、GNU/Linux、Android、BSD、およびその他のUNIXでtarがgzip、bzip2、または新しいxzでカプセル化されているかどうか)オペレーティングシステム、ファイル転送、プログラムソースとバイナリのダウンロード、そして時にはパッケージマネージャフォーマットとしても?

tarは動作します。設計された仕事をします。他の推奨された代替品(cpiopaxなど)がありました。しかし、tarはほとんどすべてのものにインストールされており、それが使用する圧縮ライブラリも他の理由で非常に一般的です。タールがすることを実質的に上回るものは他には何もありません。明確な利点がなく、コミュニティでの多くの組込み用途と知識があれば、それに代わるものはありません。 Tarは長年にわたって多くの用途がありました。ファイルシステムやテキスト以外のファイルがコード転送の方法に大きく変化した場合(現在どのように想像することはできませんが無視してください)、別のツールを見つけることができます。しかし、それで私たちが今使っているタイプのOSにはならないでしょう。それは違うもので、違う形で組織されていて、それ自身のツールが必要です。

最も重要な質問は、あなたが尋ねなかったと思いますが、仕事 'tar'がどのような仕事に不向きなのかということです。

圧縮されたtarは壊れやすいです。アーカイブ全体が少しずつ必要です。私の経験では、それは回復力がありません。シングルビットエラーが発生し、マルチパートアーカイブが使用できなくなりました。エラーから保護するための冗長性は導入されていません(データ圧縮に関してあなたが尋ねた質問の1つを無効にします)。データが破損する可能性がある場合は、データを再構築できるように、冗長性のあるエラーチェックが必要です。つまり、定義上、あなたは最大限に圧縮されていないということです。すべてのデータを必要とし、その最大値を意味するもの(最大圧縮)を保持することも、すべてのデータを損失と回復の可能性(冗長性とエラー訂正)を持つこともできません。アーカイブの目的は何ですか? tarは、信頼性の高い環境で、またアーカイブをソースから再度再生できる場合に最適です。 IME、その名前が示唆している元々の事柄 - テープアーカイブ - では実際にはもっと悪い。テープ上のシングルビットエラー(または、さらに悪いことには、テープ全体またはアーカイブ全体の各バイトに1ビットが失われるテープヘッドのシングルビットエラー)は、データが使用できなくなる原因となります。十分な冗長性とエラーの検出および修正により、これらの問題のどちらにも耐えることができます。

それで...あなたが見ている環境にはどれくらいのノイズと破損がありますか、そしてソースは失敗したアーカイブを再生成するために使われることができますか?あなたが提供した手がかりからの答えは、システムが騒々しくない、そしてそのソースがアーカイブを再生することができるということです。その場合、tarが適切です。

圧縮付きのtarは、圧縮前のファイルでもうまく動作しません。すでに圧縮されたデータを送信している場合は、単にtarを使用し、圧縮段階を気にする必要はありません。CPUサイクルが増えるだけで済みます。それは、あなたが何を送っているのか、そしてその理由を知る必要があるということです。もし気にするなら。これらの特別な場合を気にしないのであれば、tarはデータを忠実にコピーし、compressは忠実に失敗するようにしてそれを有効にします。小さいです。いくつかのCPUサイクル以外は大きな問題はありません。

2
JezC