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


209

これtarはテープアーカイブ用に作成されたものですが、今日では、ファイルを集約し、同じ論理ファイル形式内で圧縮を実行するアーカイブファイル形式があります。

質問:

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

  • 機能がありtar、ファイル形式は、以下のような他のファイル形式、ということ.7zと、.zip持っていないのですか?

  • 以来tar、このような古いファイル形式、新しいファイル形式をである今日、理由は存在しtar(中にカプセル化するかどうかgzipbzip2あるいは新しいxzファイルのために、まだそれほど広くGNU / Linuxの、アンドロイド、BSD、および他のそのようなUNIXオペレーティングシステムで現在使用されています)転送、プログラムソース、バイナリダウンロード、そして時々パッケージマネージャー形式として?


33
「時間を無駄にする」ことに同意しません。パフォーマンスを意味する場合、形式が非常に効率的であるため、tarの実際のパフォーマンスの低下はありません。あなたはそれが無駄に意味場合は、あなたの時間を、私はどのように表示されないtar xvzfよりも硬い7z -x...
allquixotic

41
彼はtarが最初にカタログを保存しないという事実を嘆いているようです。そのため、抽出する前にコンテンツをリストしたいGUI圧縮ツールは、コンテンツをリストするためだけにtar全体を解凍しなければなりません。 。
-psusi

10
@MarcusJ:7zはどういうわけか、各ファイルがアーカイブのどこから始まるかを魔法のように知っていると思いますか?その上、通常の圧縮アルゴリズム(gzip、bzip2)はコンテンツのストリーミングで機能します。次の前に最初の段階を100%完了する必要はありません。
souser12345

11
また、@ MarcusJ tar xvzfでは、2つの異なることを混乱させているように見えます。その場合、非圧縮データハードディスクに.tar形式で書き込まれません。実行してgunzip blah.tar.gzからtar xf blah.tar、データをディスクに2回(一度.tarとして、またファイルシステム内のファイルとして)書き込むことになりますが、実際には誰もそれを行いません。tar xzf使用UNIXパイプから非圧縮データを転送する(基本的にメモリコピー)gzipする(または任意の圧縮機)tarので、データがされていないディスクに書き込まれた.tarフォーマット。
-allquixotic

14
私が知っていることの1つは、tar(特に圧縮された)データ破損に関してはひどく動作することです。現代の形式で追加された小型の冗長性/リカバリデータは、金の価値がある
PPC

回答:


178

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

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

blah.tar.gzたとえば、1 GBのgzipで圧縮されたデータのディスク上にファイルがあり、非圧縮時には2 GBを占有します(圧縮率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

この意志

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

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

あなたが実行します:

tar xvf blah.tar

この意志

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

このプロセスでディスクから読み取る合計データは、1 GB(gunzipの場合)+ 2 GB(tarの場合)= 3 GBでした。

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

方法2

あなたはblah.tar.gz、何らかの形で持っています。

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

tar xvzf blah.tar.gz

この意志

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

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

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

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

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

パート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が頻繁に使用されることはありません。古代または非常に基本的なシステムを実行している人々との互換性。


すべてのコンテンツが3つの別個のヘッダーで区切られているというすばらしい回答に感謝します。
JFW

2
「パート3:互換性」は@Kruugの回答からコピーされたようです。
titaniumdecoy

23
@titaniumdecoy元々その部分を書いてそれをKruugの答えに編集したのはオールクイクソティックであることに気づきましたか?
slhck

2
それを指摘してくれてありがとう、気づかなかった。しかし、このページの2つの異なる回答に同じテキストブロックがあるのは少しばかげているようです。
titaniumdecoy

1
これtarは、アーカイブエコシステムに適合する理由(つまり、ファイルを集約し、パフォーマンスを向上させ、アクセス許可の保存などのその他の利点を提供する理由)に答えますが、最新の代替手段darが適切に使用されない理由には対応していません。言い換えれば、この回答はファイルアグリゲーターの使用を正当化しますが、tarソフトウェア自体の使用は正当化しません。
貪欲な

101

これはStack Overflowで回答されています。

bzipおよびgzipは、ファイルのグループではなく、単一のファイルで機能します。プレーンオールドzip(およびpkzip)はファイルのグループで動作し、アーカイブの概念が組み込まれています。

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

多くのツールは、「最も一般的な分母」ファイル形式であるため、.tar.gzまたは.tar.bz2としてソースまたはバイナリ形式で配布されます。ほとんどのWindowsユーザーが.zipまたは.rar解凍プログラムにアクセスできるように、ほとんどのLinuxインストール、最も基本的な、少なくともへのアクセスを持っていないだろうtargunzip関係なく、ダウン切り詰め何歳か、。Androidファームウェアでもこれらのツールにアクセスできます。

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

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


7
こんにちは@Kruug、私はあなたが他の何かを使用する選択があるときに人々がこれらのフォーマットを使用すること選択する理由について実用的な観点を与えるためにあなたの投稿を編集しました。私はあなたがすでに持っていたテキストを変更しませんでした。これは、この質問に対する標準的な答えのように見えるものが完全な画像を持っていることを確実にするためです。必要に応じて自由に編集を編集してください:)
allquixotic

5
@allquixoticの始まりは誰ですか?編集を編集し、編集を編集できるようにします
...-SnakeDoc

21
この答えは、間違いなく「不当な賛成票に圧倒されることがある」場合です。圧縮されたtarの内容をリストするという質問の核心的な問題には対処しておらず、元の答えすらありません!
ЯрославРахматуллин

5
正義の場合は-1。これはコメントだったはずです。
WIM

6
レガシー/最小公分母の引数を購入しません。新しいシステム(sun)では、他のtar.gzパッケージソフトウェア(およびsunのtarが吸い込まれたためgnu tar)をインストールするためだけに、gzip / gunzip(sunfreewareから)を頻繁にダウンロードする必要がありました。レガシー/低公分母については、tar.Z(compress / uncompress)がありました。ユーティリティの進行は、変更と改善の絶え間ない流れ(しゃれなし)でした。Z=> zip => gz => bz2 => 7z => xz(または任意の順序)。tarの役割に関しては、一部のutilsはun / compressのみで、ファイル階層をまとめるためにtarが必要です。
マイケル

63

Tarには、Unixファイルシステムについてすべてを知っている豊富な操作と修飾子があります。Unixパーミッション、ファイルに関連付けられたさまざまな時間、ハードリンク、ソフトリンク(およびシンボリックリンクがファイルシステムグラフにサイクルを導入する可能性)について知っており、このすべてのデータを管理するためのいくつかの異なる方法を指定できます。

  • 抽出されたデータでファイルアクセス時間を保持しますか?タールはそれを行うことができます。許可を保持するには?タールはそれを行うことができます。

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

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

  • スパースファイルを適切に処理しますか?タールはそれを行うことができます。

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

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

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

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

  • 最後のバックアップより新しいファイルのみを取得しますか?タールはそれを行うことができます。

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

  • /dev抽出後にシステムが正しく実行されるように、デバイスノード(のファイルなど)を保持する必要がありますか?タールはそれを行うことができます。

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


12
任意のコンプレッサーを使用するのにGNU tarは必要ありません。アーカイブにstdoutを書き込みf -、コンプレッサーにパイプするようにtarに指示するだけです。
イルマリカロネン

3
「非圧縮データが必要ですか(なぜですか?)」tarファイルシステムツリーをある場所から別の場所にコピーし、権限などを保持するために非常に頻繁に使用します。この場合の圧縮には、余分なCPUサイクルがかかります。例えばtar cf - * | tar xf - -C /somewhere
スティーブ14

1
さらに、宛先ファイルシステムが重複排除を実行するときに.tarファイルが必要になります。重複排除を実行するファイルシステムに圧縮アーカイブを作成すると、重複排除率が大幅に低下します。例:10,000.00ドルのtar.gzファイルを削除しました。つまり、誰かが圧縮を使用したため、1万ドル相当のストレージスペースを占有していました。
アーロン

@Steve CPUサイクルは、LZ4やLZOなどのアルゴリズムのディスクIOよりも安価です。それは彼らがzramで使用している理由だし、NTFS、ZFS、はBtrfsのような透明の圧縮ファイル・システムのディスクIOの量が大幅に削減されているので...ので、時にはそれが実際に速く圧縮するよりもだ
phuclv

30

アーカイブ圧縮の2つの異なるプロセスを混同します

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

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

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

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

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

私が使う理由の一つtarには、gzip次のとおりです。スピード! いくつかのGiBのテキストファイルをある場所から別の場所に転送したい場合、圧縮は長期保存ではなく転送にのみ使用されるため、最後のバイトを圧縮する必要はありません。そのような場合、私はを使用しますがgzip、これはCPUを最大化しません(たとえば、7-Zipとは対照的に)。つまり、CPUバウンドではなくI / Oバウンドになります。繰り返しgzipますが、どこでも利用可能と見なすことができます。

使用する理由tarの賛成でscprsyncなど

それは打つscpあなたが(例えば、ファイルの百、何千とメールディレクトリ)をコピーするために、小さなたくさんのファイルを持っている場合。rsync、素晴らしく、どこでも利用できるとは限りません。さらに、rsyncファイルの一部(または古いバージョン)が宛先に既に存在する場合にのみ、本当に成果があります。最初のコピーtarは、実際のデータに応じて、圧縮の有無にかかわらず、最速です。


1
しかし、アーカイブする場合は、同様に圧縮してみませんか?わかりました。簡単に圧縮できないファイルの時間を節約できますが、アーカイバは、たとえばヘッダー以外の音楽はあまり圧縮できないことを知っているはずです。
-MarcusJ

2
必要がない場合や、コンテンツが圧縮可能でない場合があります。
ハスタークン

4
パフォーマンス上の理由から、コンプレッサがデータを圧縮できる速度を超える非常に高い帯域幅のネットワークリンクを介してデータを送信する場合、非圧縮ファイルの集約を使用する方が簡単な場合がよくあります。これは、たとえばギガビットイーサネットで実現可能です。圧縮率が非常に低い、適切に設計された圧縮アルゴリズムのみが、大きなデスクトップCPUでも高速にデータを圧縮できます。組み込みデバイスでは、作業するCPU時間はさらに少なくなります。
-allquixotic

3
これは物事をスピードアップするだけでなく、ファイルの所有権、タイムスタンプ、および属性を保持することも可能にします(ユーザー権限で許可されている場合)
Andre Holzner

3
@AndreHolznerそうです。私はよくやりますtar cf - . | (cd ~/somewhere; tar xvf -)。中央のインデックスが書き込まれるまで待つ必要がないのは本当に便利です(たとえば、zipファイルなど)。
user239558

24

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

インターネットで利用可能なファイルを解凍する必要があります。どちらかzipまたはrar形式の場合、まずダウンロードしてから解凍する必要があります。tar.{gz,bz2,xz}私はディスク上phisically圧縮アーカイブを有することを必要とせず、同じ手順でダウンロードして解凍することができます:

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

これにより、圧縮されていないファイルのみがディスクに残り、最初にファイル全体をダウンロードし、ダウンロードが完了した後、圧縮を解除する時間がないため、プロセス全体が高速化されます。代わりに、ダウンロード中に圧縮を解除しています。zipまたはrarファイルでこれを行うことはできません。


2
rarについては知りません(これは、複数の小さなファイルに分割する機能があるため、海賊に人気が出ているように見える恐ろしいプログラムです)が、zipをうまくストリーミングできます。マニュアルページにも記載されています。また、大きなアーカイブの途中からファイルを効率的に抽出または更新できるという利点がありますが、tarは圧縮率がわずかに向上する傾向があります。圧縮とランダムアクセスはトレードオフです。
-psusi

3
@psusiが正しくありません。このようなハックを行うことができますが、ダウンロード中に解凍するのではなく、メモリ内のすべてのファイルをダウンロードしてから解凍します。そしてfunzip、zipファイルの最初のファイルだけを抽出します。すべてではありません。
カルロスキャンデロス

2
@Stuは明らかにするだけで問題ではなく、単にあなたの時間を最適化するだけです(それがあなたの考えだとしたらスペースは気にしません)
カルロスキャンデロス

1
双方は動作します:あなたは、あまりにも、他の一の側とuntarしにタールができます:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
カルロスCampderrós

1
@psusi昔から思い出したように、pkzipを使用してファイルを複数のフロッピーに保存し、アーカイブの最後にzipストアカタログを作成していました。抽出の開始またはカタログの表示のために、常に最後のフロッピーを要求します。だから、en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg
ミハイルMoskalev

13

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

それは:

  • GPLライセンス
  • Unix哲学の意味で良い
    • 複数のタスクを実行できる単一目的ツール
  • 十分に文書化され、多くの信頼できる機能を備えています
  • いくつかの圧縮アルゴリズムとの互換性
  • 使いやすく、人々はそれを習慣にしています
  • 広く利用可能
  • RMSで起動したソフトウェアEmacsを除く)を使用すると、内部が暖かくあいまいになります

特定の牛肉が、内容を読む前にtarballを「解凍」する必要がある場合は、おそらく正しいでしょう。WinRAR7-Zipが自動的に実行します。ただし、アーカイブの内容を非圧縮形式で文書化するなど、この問題に対する簡単な回避策があります。


1
それはフリーソフトウェアです-だからそれらの多くはそれが何をするのが得意です-他のものとほとんど比較されていませんそれはよく文書化されており、多くの機能を備えています それはいくつかの圧縮アルゴリズムをサポートしています-他のいくつかほどではありません
グリフィン

4
Unix Godsが作成したため、使用する必要があります。
SnakeDoc

28
また、TarはUNIXアクセス権をネイティブに保存し、非常によく知られ、テストされています。多数のファイルを1つのファイルまたはストリームにまとめる必要があるかもしれないが、必ずしもそれを圧縮する必要がない場合がいくつかあります。
ローレンス

3
幸いなことに、tarはGNUバージョンだけに限定されません。GNU tarは確かに優れたソフトウェアですが、libarchive +関連のフロントエンドははるかに高速で、他のソフトウェアプロジェクトに簡単に組み込むことができます。tarをライセンスの争いに変えることなく議論することができます。
ルーカスホルト

1
私は皮肉ではありません。私はRMSと彼の信念を伝える方法が好きです。
ЯрославРахматуллин

11

.zipなどのファイル形式では、ファイル名のカタログを読み取るために、ソフトウェアが最初にファイルの終わりを読み取る必要があります。逆に、tarはその情報を圧縮ストリームとともに保存します。

tar方式の利点は、ネットワークソケットのようなシークできないパイプからデータを読み取りながら圧縮解除できることです。

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

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


5
いいえ、zipファイルをパイプからのストリームとして読み書きすることができます。
マークアドラー

それは実装固有の場合がありますが、元のpkzipではサポートされていません。
xorsyst

1
はい、サポートするためにソフトウェアを作成する必要があります。zip形式は、圧縮されたデータの後に長さとCRCを付けることができるデータ記述子で完全にサポートします。
マークアドラー

@MarkAdler、どんなソフトウェア?Infozipはパイプからの解凍をサポートしていません。
-psusi


11

あなたの質問のすべてに直接答えることには多少の抵抗があるように思われますが、あなたの質問をポンティフィケーションの出発点として使用することは明らかです。だから私はそれにショットを与えます。

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

いいえ。実際、tarとgzipは通常2つのプロセスであるため、Info-ZIPのzipのようなアーカイバーが提供しないマルチコアの速度の利点がわずかに得られます。圧縮率に関しては、tar + gzipは通常、zipをdeflateで圧縮するよりも著しく優れています。前者はファイル間の相関の恩恵を受けることができますが、後者はファイルを個別に圧縮するためです。この圧縮の利点は、より圧縮されたアーカイブがより短時間で解凍されるため、抽出時の速度の利点に変わります。

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

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

tarは非常に古いファイル形式であり、現在より新しいファイル形式が存在するため、GNU / Linux、Android、BSD、およびその他のそのようなUNIXでtar(gzip、bzip2、または新しいxzにカプセル化されている)が今日でも広く使用されている理由オペレーティングシステム、ファイル転送、プログラムソース、バイナリダウンロード、および場合によってはパッケージマネージャー形式としても。

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

ランダムアクセス、部分的な更新、またはコンテンツの断片を処理する必要があるその他のものが必要な場合、またはすべてを読まずにその内容を見つけたい場合は、別の形式を使用することをお勧めします。


CWCommunity Wikiの略です。参照して、「コミュニティのWiki」の記事は何?
ctype.h

質問には15を超える回答があるため、CWであると思います。15回目なので、この回答を投稿したときに、質問とすべての回答にCWのマークが付けられました。
ctype.h

質問を直接引用する以外に、この回答が他の回答のどれもしないことをどのように言っているのかわかりません(質問の元の改訂はNARQとして閉じられるほど恐ろしいので、私は書いた、BTW)。いいね
allquixotic

わかった。あなたが考えたいものは何でも結構です。あなたの答えも他の答えも、パフォーマンスのペナルティがあるかどうかに対処しているようです。あなたの答えは、顕著な圧縮の違いに対処していませんが、他の人は対処しています。実際にはパフォーマンスに対応していないため(パフォーマンスセクションは実際にはワークフローに関するものであり、パフォーマンスに関するものではありません)、他の答えは1か所ですべてに答えることはありません。パフォーマンスペナルティの質問を書いたのは面白いのですが、答えなかったのです!図を移動します。
マークアドラー

ところで、ワークフローの説明は、誰もしていないこと、つまりtarファイルをディスクに書き込んでから圧縮することです。tarは、圧縮プログラムを直接呼び出すか、圧縮プログラムへのパイプに直接呼び出すかのいずれかで常に使用されます。
マークアドラー

11

性能

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

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

人気

に比べて多くの利点がある他のフォーマットがたくさんありますtar7-Zipは Unixファイルのパーミッションを保存しませんがdarない、とzipすることができ、そしてすべての3つは、高速なブラウジングを可能にし、インデックス、ファイルのサブセットの抽出、およびアーカイブ内のファイルの更新を保存します。また、マルチコアCPUを使用して圧縮することもできます。

誰もがまだ使用しtarている理由は、誰もがまだWindowsとFlashを使用しているのと同じ理由です。人々は変化を嫌います。変化する強い理由がなければ、人々は自分の知っていることに固執するだけです。darほとんどの人が既にtarインストールしている形式でファイルを公開することを正当化するのに十分な利点がありませんdar


2
zipはUnixパーミッションを保存および復元できます。Unixシステムで通常配布されるInfoZIPのzipおよびunzipユーティリティがこれを行います。
マークアドラー

3
zipは、ファイルを32Kのチャンクで圧縮しません。32Kのスライディングウィンドウサイズと圧縮方法を混同しています。
マークアドラー

1
gzip -9には900 kBの辞書はありません。すべてのレベルのgzipは32K辞書を使用します。bzip2を考えているかもしれません。
マークアドラー

1つの答えに非常に多くの誤報があります。
マークアドラー

1
回答を修正するか、回答を削除する必要があります。
マークアドラー

7

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

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

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

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

ファイルシステムに新しい機能が追加されるたびに、tar最初に(または排他的に)サポートが追加されます。したがって、ファイルを保存する最も互換性のある方法であり続けます。


この答えが唯一の理にかなっています。投稿していただきありがとうございます。
貪欲な

5

現在、MP3、JPG、ビデオ、tar.gzファイル、JARパッケージ、RPM、DEBなど、たくさんの圧縮ファイルがあります。転送のためにこれらの束を単一のファイルにバンドルする必要がある場合、ファイルを圧縮せずにバンドルするだけの「tar」ユーティリティがあると便利です。

圧縮ファイルを圧縮しようとすると時間と電力が無駄になるだけでなく、多くの場合、元のファイルよりも大きいファイルが作成されます。

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

今日、tar 'は非常に適切であることがわかり、ZIPを使用することを好みます。私たちのオフィスでは、Windowsを使用するすべての人に7-zipがインストールされているため、tarファイルは完全にクロスプラットフォームで互換性があります。


圧縮されていないtarファイルはほとんど表示されず、その理由があります。tar非常に大きなチャンクを使用します。つまり、ファイルの最後に多くのパディングを取得します。これらすべてのゼロを取り除くには、ほとんどの場合、考え直さずに使用するだけgzipです。
クリスチャン

面白い例外は、明白な理由から、gzipソースコードが裸のtarとして利用可能であることです。
マークアドラー

4

圧縮と集約の両方を実行する(そして暗号化を追加する)このような「新しい」ファイル形式が、まったく異なるツールではなく、最初からtarで構築されていないのはなぜでしょうか。

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

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

タールに関するウィキペディアの記事を読むと別の興味深い事実を見ることができます。この記事ではtarのいくつかの欠点を認めていますが、代わりにzipを使用することは推奨していません(実際、zip形式ではこれらの欠点は解決されません)が、DARです。

私は個人的なタッチで終わります。数回前、暗号化されたデータを保存するためのファイル形式を作成する必要がありました。tarを基本として使用すると便利でした(他の人は同じ選択をしました。たとえば、tarは.debパッケージの内部集約形式です)。暗号化後にデータを圧縮しようとするとまったく役に立たず、暗号化の前に独立したステップとして圧縮を実行する必要があり、zip暗号化を使用する準備ができていなかったことは明らかでした(公開キーと秘密キーによる2つのキー暗号化が必要でした) 。tarを使用すると、簡単に動作しました。


3

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


3

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

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

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

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

  • ちょうど他の任意の互換ツール(gzip bz2 xz変換名にわずか数オプション)任意の別の(できれば)より小さい出力ストリームにバイトの入力ストリームを。

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

  • 拡張性 に結合するように許可tarして任意の圧縮アルゴリズムは、既存または任意の圧縮アルゴリズムは、まだ、まだ開発されてなくての内部動作には何も変更することtarで、すべての。

    まったく新しい「hyper-zip-utra」またはその他の圧縮ツールがリリースされるとすぐに、新しい使用人をの全力で使用できるようになりますtar

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

    必要性を防止することはする改革所有権、パーミッション、タイムスタンプを保存する実装にホイールをなどを何度も繰り返しのために、すべての新しいアーカイブツールは、開発に時間を(そうでない場合は、不必要に費やした)の多くを節約するだけでなく、同じ保証するだけでなく、信頼性のすべてのために新しいアプリ。

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

    ツールAを使用してアクセス許可を復元するにはオプションを渡す--i-hope-you-rember-this-one必要が--this-time-its-another-one あり、ツールC を使用するときに使用するツールBを使用する必要があることを覚えておく必要はありません。これは、「-hope-you-didnt-try-with-tool-as-switch」です。

    一方、ツールDを使用する場合、使用しなかった場合は、実際にそれを台無しにしていたでしょう--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now


3

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


本当に良いコメント、私はそれを考えさえしませんでした、そしてそれは本当に良いポイントです。
-MarcusJ

3

その理由は「文化の定着」です。私のように、圧縮されたtarアーカイブ、またはWindowsの世界から来た場合は時折ZIP以外の何かを処理するように頼まれたら目が凝ってくる人がたくさんいます。

7-Zip、RARなどについては聞きたくありません。ファイルを圧縮解除するプログラムをインストールする必要がある場合は、それで問題ありません。支払いが発生する場合、またはコンテンツが「必須」であり、他の方法で利用できない場合は、それを行います。

tarの利点の1つは、誰かにtarballを送信すると、すぐに認識されることです。受信者は、マッスルメモリを使用して抽出コマンドを入力できます。

本当の問題は、なぜ一部の人々がもう1バイトのスペースを節約することに夢中になっていて、他の人にエキゾチックなユーティリティをインストールし、それを使用する方法を学ぶよう時間を浪費するよう求めるのですか?そして、エキゾチックな圧縮とアーカイブ形式の愚かな使用があります。AACサウンドを含むH.264ビデオは、本当にマルチパートRARに入れる必要がありますか?

tar形式は古い場合がありますが、ファイルの内容、パス、タイムスタンプ、権限、所有権など、関連するすべてのものが保存されます。シンボリックリンクだけでなく、ハードリンク構造も保持できます。特殊ファイルも保存されるため、テープアーカイブは、/devブートストラップ中に使用される小さなディレクトリなどに使用できます。バイナリパッケージ形式が何も含まないLinuxディストリビューションをまとめることができますが、ファイルシステムルートに対して圧縮されていないtarballのみです。


Re "So obsessed" ...単一の強化されたラップトップで戦場に立ち往生していると想像してください。ジープの修復方法を示す100MBの.PDFマニュアルですが、ファイルは2 Gig .tgzファイルにあります。そしてラップトップはクローズドソースの奇妙なプロプライエタリなOSを実行し、システムファイルを削除するルートアクセス権がありません。デアーカイバまたはPDFビューアを壊さずに4G +を削除する方法は明らかではありません。100MBのファイルだけを抽出できたら
...-agc

2

あなたが提起した特定の質問に直接答える:

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

用いた一般的なケースでは、特定の性能向上、があるtar(に内蔵された圧縮ライブラリで特にtar xvzftar xvjf圧縮ライブラリは第二工程ではなく、使用されるスタイルのコマンドラインは、)。これは、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が使用する圧縮ライブラリも他の理由で非常に一般的です。tarの機能を大幅に上回るものは他にありません。明確な利点がなく、コミュニティに多くの組み込みの使用法と知識があるため、代替品はありません。タールは長年にわたって多く使用されてきました。ファイルシステムの考え方に大きな変更があった場合、または非テキストファイルが何らかの方法でコードを転送する方法になった場合(現在は想像できませんが、それを無視してください...)、別のツールを見つけることができます。しかし、その場合、現在使用しているOSの種類ではありません。それは異なるものであり、異なる構成であり、独自のツールが必要です。

あなたが尋ねなかった最も重要な質問は、「tar」がどんな仕事に向いていないかということです。

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

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

tar圧縮されたファイルは、事前に圧縮されたファイルではうまく再生されません。すでに圧縮されたデータを送信している場合は、tarを使用するだけで、圧縮段階に煩わされることはありません-CPUサイクルを追加するだけで、それほど多くはなりません。つまり、送信する内容とその理由を知る必要があるということです。もし気にするなら。これらの特殊なケースを気にしない場合、tarはデータを忠実にコピーし、compressはそれを小さくするのに非常に役立つことを忠実に失敗します。いくつかのCPUサイクル以外の大きな問題はありません。


-3

TARはテープアーカイブです。それは数十年前から存在し、広く使用され、サポートされています。それは成熟した製品であり、現在のニーズとレガシーのニーズに対応します。

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