なぜ人々はtarballを使うのですか?


90

主にWindows開発者として、おそらくLinuxコミュニティで文化的なものが足りないのですが、いつも混乱していました。

何かをダウンロードするとき、ファイルは最初に.tarアーカイブに入れられ、次に圧縮されます。なぜ2段階のプロセスなのですか?zip圧縮によってファイルのグループ化が実現しませんか?私が知らない他の利点はありますか?


3
通常は、圧縮とファイルのグループ化を1つのコマンドに組み合わせるだけです。tar -zcf file.tar.gz一部のファイル名
JuhaSyrjälä2008年

1
サイズが1バイトの1000000ファイルを転送する方が、サイズが1000000バイトの1ファイルを転送するよりもコストがかかると誰も述べていません。
Milo LaMar

回答:


137

bzipそしてgzip、単一のファイルではなく、ファイルのグループでの作業。プレーンオールドzip(およびpkzip)はファイルのグループを操作し、組み込みのアーカイブの概念を持っています。

* nixの哲学は、特定のジョブを非常にうまく実行し、一緒にチェーンできる小さなツールの1つです。そのため、ここには特定のタスクを持つ2つのツールがあり、それらは互いにうまく合うように設計されています。それはまた、あなたがグループファイルにタールを使用することができ、その後、あなたは圧縮ツール(の選択肢持っていることを意味bzipgzipなど)。


2
答えは速く、私よりも少し上手でした-仕事に戻ると思います!
Harper Shelby

9
私はあなたを4分で打ち負かしました、そしてそれはスタックオーバーフロー時間の永遠です。:-)
スチュワートジョンソン

1
tarとgzipの両方がそれ自体で有用であることは注目に値します。そのため、これらは分離されています。パイプを上手に使用して、SSH経由でtar、zip、パイピングしてフォルダーをあるコンピューターから別のコンピューターに移動した後、宛先でunzipして解凍しました。1つのコマンド、一時ファイルなし。
rmeador 2008年

1
また、物事を変更して互換性を壊すのではなく、うまく機能することが証明されているものにこだわっていると言うこともできます。.tar.gzは、いわゆる最新のツールやテクニック(WinZipを登録してください)と同様に、1つのステップで実行できます。
JeeBee 2008年

2
誰も質問を編集したり、tarアーカイブを使用する(imo)全体のポイントに言及したコメントを残したとは信じられません:Linuxファイルシステムのアクセス許可のサポート。Debianパッケージをダウンロードし、パッケージマネージャーがそれをインストールしたが、実行可能ファイルがどれも実行可能でなかった場合はどうなりますか?それが、誰もがtarballを使用する本当の理由です;)
JamesTheAwesomeDude

28

重要な違いは、2種類のアーカイブの性質です。

TARファイルは、ファイルの内容といくつかのヘッダーを連結したものに過ぎませんが、gzipとbzip2は、tarballで連結全体に適用されるストリームコンプレッサーです。

ZIPファイルは、個別に圧縮されたファイルといくつかのヘッダーを連結したものです。実際、DEFLATEアルゴリズムはzipとgzipの両方で使用され、適切なバイナリ調整を行うことで、gzipストリームのペイロードを取得し、適切なヘッダーと辞書エントリを含むzipファイルに入れることができます。

つまり、2つの異なるアーカイブタイプには異なるトレードオフがあります。小さなファイルの大きなコレクションの場合、TARの後にストリームコンプレッサーが続くと、通常、ZIPよりも圧縮率が高くなります。これは、ストリームコンプレッサーがディクショナリ頻度を構築するためのデータを増やし、冗長な情報を絞り出すことができるためです。一方、ZIPファイルの(ファイル長を維持する)エラーは、圧縮データが影響を受けたファイルのみを破壊します。通常、ストリームコンプレッサーは、ストリームの途中のエラーから意味のある回復はできません。したがって、アーカイブの一部には引き続きアクセスできるため、ZIPファイルは破損に対してより耐性があります。


zipとtar + gzipの違いをありがとうございます。
ルーク、

1
「集約ファイルの圧縮」と「圧縮ファイルの集約」を区別するための+1。
Jesse Chisholm

一方、tarが圧縮率を向上させ、zipの復元力を高める理由は、tarは一種の固体圧縮であり、zipは非固体であることです。
2015年

@バリー、結局のところ誰が勝ちますか?(最新のOSを使用していると想定)
Pacerier 2017

@Pacerier勝つことはないと思います。zipは、ランダムアクセスやWindowsでの使用に適しています。tarballは、LinuxおよびUnixですぐに使用できる互換性があります。tarballの圧縮率はわずかに高くなりますが、何かにアクセスするには全体を解凍する必要があります。どちらも任意の圧縮アルゴリズムをサポートしていますが、tarballと組み合わせたり、一致させたりする方がはるかに簡単です。目標によっては、どちらの方が良いかもしれません。
バリーケリー

26

tarバンドルしているときに、最新バージョンのGNUを使用して圧縮できると誰も言っていないのは奇妙です。

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

' -c'(stdoutへ、またはstdinから)および ' -d'(解凍)オプションをサポートしている場合は、選択したコンプレッサーを使用することもできます。

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

これにより、代替のコンプレッサーを指定できます。

[ 追加:ファイルから抽出gzipまたはbzip2圧縮している場合、GNU tarはこれらを自動検出し、適切なプログラムを実行します。つまり、以下を使用できます。

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

これらは適切に処理されます。非標準のコンプレッサーを使用する場合は、抽出を行うときにそれを指定する必要があります。]

分離の理由は、選択された回答のように、職務の分離です。とりわけ、それは人々がcpio(の代わりにtar)ファイルをパッケージ化するために' 'プログラムを使用し、次に選択したコンプレッサーを使用できることを意味します(あるとき、推奨されたコンプレッサーがpack、後になりましたcompress(それはpack)、その後gzip、その前任者の両方にリングがあり、完全に競争力がありますzip(これはUnixに移植されましたが、そこにはネイティブではありません)。今bzip2では、私の経験では、通常、10〜20%の利点がありgzipます。

[ 追加cpioおかしな慣習を持っている回答で指摘された人。それは事実ですが、GNU tarが関連するオプション( ' -T -')を取得するまでcpioは、特定のディレクトリの下にあるすべてのものをアーカイブしたくないときに、より適切なコマンドでした-実際にアーカイブするファイルを正確に選択できました。欠点はcpio、あなたがいないだけということだった可能性がファイルを選択してください-あなたが持っていたそれらを選択します。cpioスコアを付ける場所はまだ1つあります。中間ストレージなしで、1つのディレクトリ階層から別のディレクトリ階層にその場でコピーできます。

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

ちなみに、このコンテキスト-depthfindは' 'オプションが重要です-ディレクトリ自体に権限を設定する前にディレクトリの内容をコピーします。この回答への追加を入力する前にコマンドを確認したところ、いくつかの読み取り専用ディレクトリ(555アクセス許可)をコピーしました。コピーを削除しようとしたとき、「rm -fr /new/place」が完了する前に、ディレクトリの権限を緩和する必要がありました。-depthオプションがないと、cpioコマンドは失敗します。私がこれを思い出したのは、私がクリーンアップに行ったときだけでした-引用された式は、私にとっては自動的です(主に、何年にもわたる多くの繰り返しのおかげで)。]


拡張されたZIP形式は、TARと同じくらいプラグインストリームコンプレッサーに対応できますが、適切なIPCプロトコルがなければ、サブプロセスの過度の実行により遅くなる可能性があります。
バリーケリー

私のgotoコマンド:tar -xfvz tarpkg.tar.gz(bz2圧縮アーカイブの場合、zをajに置き換えます)
Bryan Rehbein 08年

1
@Redbeard:tarは抽出時にgzipとbzip2を自動検出します-作成するには、何をするかを指示する必要がありますが、私は-xf(または-xvf)とtarファイル名を使用します。
ジョナサンレフラー

15

面白いことに、あなたはのクリエイターが予想しない動作を得ることができ、あるtarとしますgzip。たとえば、tarファイルをgzipするだけでなく、gzip圧縮したファイルをtarしてaを生成することもできますfiles.gz.tar(これは技術的には動作に近い方法ですpkzip)。または、暗号化などの別のプログラムをパイプラインに配置し、tar、gzip、および暗号化の任意の順序を選択できます。暗号化プログラムを作成した人は、自分のプログラムがどのように使用されるかを少しでも理解する必要はありません。彼が行う必要があるのは、標準入力から読み取って標準出力に書き込むことだけです。


暗号化の出力はランダムに見え、圧縮が難しいため、ファイルを生成するときは、前ではなく圧縮後に暗号化することを忘れないでください。
ジョナサンレフラー2014

8

Unixの世界では、ほとんどのアプリケーションは1つのことを行うように設計されており、それをうまく実行します。Unix、gzipおよびbzip2で最も人気のあるzipユーティリティは、ファイル圧縮のみを実行します。tarはファイルの連結を行います。tarの出力を圧縮ユーティリティにパイプすると、どちらのソフトウェアにも過度の複雑さを加えることなく、必要なことが実行されます。


7

それが非常に普及しているもう1つの理由は、tarとgzipがそこにある* NIXインストールベースのほぼ全体にあるためです。これがおそらく単一の最大の理由だと思います。また、RARまたは7zの優れたルーチンに関係なく、サポートが組み込まれているため、Windowsでzipファイルが非常に普及しているのもこのためです。

GNU tarでは、これらのファイルを1つのコマンド(1つのステップ)から作成/抽出することもできます。

  • アーカイブを作成します。
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • アーカイブを抽出します (-Cの部分はオプションで、デフォルトは現在のディレクトリです)。

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

これらは、私が長年Linuxで、そして最近、Nexenta(OpenSolaris)でメモリにコミットしたものです。


3
実際、それは逆です。zipは、DOSや初期バージョンのWindowsで普及していたため、現在 Windowsに組み込まれています。
Christian Lescuyer、2008年

WindowsではRAR、Linuxではtar.bz2を使用したい
Osama Al-Maadeed 08年

奇妙な(getopt()と互換性がない)オプションの解析に気付くかもしれません。tarはUnixコマンドオプションの標準的な規則よりも古いため、ダッシュはオプションです。
ジョナサンレフラー

5

あなたはこれについてもっと歴史的な文脈を探していたと思います。元のzipは単一ファイル用でした。Tarは、複数のファイルを1つのファイルに配置するために使用されます。したがって、タール処理と圧縮は2段階のプロセスです。なぜそれが今日でもそれほど支配的であるのかは誰にも分からない。

WikipediaのTar_(file_format)から

コンピューティングでは、tar(テープアーカイブから派生)はファイル形式(アーカイブビットストリームの形式)であり、そのようなファイルの処理に使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988およびそれ以降のPOSIX.1-2001によって標準化されました。当初はrawフォーマットとして開発され、テープバックアップやその他のシーケンシャルアクセスデバイスでバックアップの目的で使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために一般的に使用されています権限、日付、およびディレクトリ構造。


4

UNIXはtarなので、tarはUNIXです。

私の意見では、まだ使用する理由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

タールは主に歴史的な理由で人気があります。すぐに利用できるいくつかの代替案があります。それらのいくつかはほぼタールと同じくらい長く存在しますが、いくつかの理由で人気でタールを超えることができませんでした。

  • cpio(エイリアン構文、理論的にはより一貫性がありますが、人々は彼らが知っていることを好み、tarが優勢でした)
  • ar(昔から人気があり、現在ライブラリファイルのパッキングに使用されています)
  • shar(自己抽出シェルスクリプト、あらゆる種類の問題がありましたが、以前から人気がありました)
  • zip(ライセンスの問題のため、多くのUnicesでは簡単に入手できませんでした)

tarの主な利点(および欠点)は、ファイルヘッダーもコンテンツの中央ディレクトリもないことです。したがって、何年もの間、ファイルサイズの制限に悩まされることはありませんでした(この10年間、アーカイブ内のファイルの8 GB制限が問題となり、数年前に解決されました)。

見たところ、tar.gz(またはそのことについてはar.Z)の欠点の1つは、アーカイブ全体を解凍して単一のファイルを抽出し、アーカイブのコンテンツを一覧表示する必要があることです。 。


古いバージョンのtarにはヘッダー情報がありませんでした。新しい(POSIX互換、USTAR)バージョンのtar(例えば、GNU tar)は、そうします。'file'コマンドはこれを理解します。
ジョナサンレフラー

2

gzipとbzip2は単なるコンプレッサであり、アーカイバソフトウェアではありません。したがって、組み合わせ。すべてのファイルをバンドルするには、tarソフトウェアが必要です。

ZIP自体、およびRARも2つのプロセスの組み合わせです。


2

通常* nuxの世界では、ファイルのバンドルはtarballとして配布され、オプションでgzipされます。Gzipは、tarまたはzipが行うファイルのバンドルを行わない単純なファイル圧縮プログラムです。

かつて、zipは、シンボリックリンク、大文字と小文字が混在したファイルなど、Unixのtarとunixのファイルシステムが通常と見なした処理の一部を適切に処理しませんでした。


1
* nux-Linux、Unux、Solarnux?
マッケニル2008年

1
@mackenir-POSUXを忘れないでください。:-)
ポールトンブリン

1
@mackenir-またはそれはPOSNUXである必要がありますか?
Paul Tomblin

1

Tar =ファイルを1つのファイルにグループ化

GZip =ファイルを圧縮

彼らはプロセスを2つに分割しました。それだけです。

Windows環境では、Zipを実行するWinZipまたはWinRarの使用に慣れている可能性があります。これらのソフトウェアのZipプロセスは、ファイルとzipをグループ化しますが、そのプロセスは表示されません。


3
WindowsでOPが使用されている「zip」ファイルにはすでにグループ化が組み込まれているため、これは最良の説明ではありません。
ガレス

1

Macユーザーがディスクイメージを気に入っているのと同じ理由で、ディスクイメージをアーカイブして、それを渡したり、アップロード/ダウンロードしたり、メールで送信したりするのにとても便利な方法です。

使いやすく、ジッパーよりも携帯性に優れています。


1

Altos-XENIXの時代(1982年)に、5 1/4フロッピーまたはストリーミングテープからファイルを抽出し、これらのメディアにコピーするためにtar(テープアーカイバー)を使い始めました。この機能は、DOS 5.0および6.22のBACKUP.EXEおよびRESTORE.EXEコマンドに補足として非常に似ており、1つに収まらない場合に複数のメディアにまたがることができます。欠点は、複数のメディアの1つに問題があった場合、すべてが役に立たないことでした。tarとddはUNIX SYstem IIIに由来し、おそらく下位互換性の理由から、UNIXライクなOSの標準リリースユーティリティとして残っています。


0

Tarはファイル形式だけでなく、テープ形式でもあります。テープはデータをビットごとに格納します。各ストレージの実装はカスタムでした。Tarは、ディスクからデータを取り出し、カスタムプログラムなしで他の人がデータを取得できるように、テープに格納する方法でした。

その後、圧縮プログラムが登場し、* nixには、複数のファイルを含む単一のファイルを作成する1つの方法しかありませんでした。

tar.gzのトレンドが続いているのは、単なる慣性だと思います。Pkzipは、圧縮とアーカイブの両方を一挙に開始しましたが、DOSシステムには通常、テープドライブが接続されていませんでした。

WikipediaのTar_(file_format)から

コンピューティングでは、tar(テープアーカイブから派生)はファイル形式(アーカイブビットストリームの形式)であり、そのようなファイルの処理に使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988およびそれ以降のPOSIX.1-2001によって標準化されました。当初はrawフォーマットとして開発され、テープバックアップやその他のシーケンシャルアクセスデバイスでバックアップの目的で使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために一般的に使用されています権限、日付、およびディレクトリ構造。


厳密に言えば、tarはファイル形式です。UNIXテープでは、別のファイルであるというだけです。
マーティンベケット

実際、tarはそもそもファイル形式ではありませんでした。テープにはファイルシステムがなかったため、tarはファイルシステムがないためのパッチとして作成されました。
キエーヴェリ09年

0

Windows開発者として、tarballが奇妙に見えるのは理解できます。言葉tarはテープアーカイブを意味します。リールツーリールのテープレコーダーを考えてください。

Windowsの世界では、プログラムは通常、setup.exeまたはinstall.exeでインストールされ、レジストリ内のあらゆる種類のウィザードで機能し、ディレクトリを作成してインストールします。.dll(ダイナミックリンクライブラリ)ファイルます。

特に私自身の経験から、Linux、Ubuntuでは、パッケージマネージャーがほとんどの場合、アプリケーションを取得してインストールします。Ubuntuでは、開発者は末尾が.deb(UbuntuのベースとなっているDebian)のパッケージを作成します。をインストールするための基本的な構文.debは次のとおりです。

sudo apt install <package_name>

これはユーザーにとって比較的簡単なことですが、開発者が作成するのは大変な作業です。 .debパッケージ PPAを関連付けるの。

開発者にとってより簡単な方法は、tarballを作成することです。その後、インストールの負担はエンドユーザーによって分担されます。彼らは〜するべきだ:

  • tarballをダウンロードします(通常は .tar.gz)。
  • ソースコードをディレクトリに解凍します。
  • ソースコードをコンパイルします(Windows for Profitの世界では前例のない)。
  • aptバックアップできるデータベース(Windowsのインストール済みプログラムのリストと考えてください)がないため、将来的に繰り返す必要がある場合に備えて、彼らが行ったことを書き留めてください。

別の回答がすでにあなたが尋ねた別の質問に述べているので、tarballを作成し、同時にデータを圧縮することができます。2パスプロセスは必要ありません。

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