主にWindows開発者として、おそらくLinuxコミュニティで文化的なものが欠けていますが、いつも混乱していました。
何かをダウンロードするとき、ファイルが最初に.tar
アーカイブzip形式。なぜ2段階のプロセスなのですか? zippingはファイルのグループ化を実現していませんか?私が知らない他の利点はありますか?
bzip
およびgzip
は、ファイルのグループではなく、単一のファイルで機能します。単純な古いZip
(およびpkzip
)は、ファイルのグループを操作し、組み込みのアーカイブの概念を持っています。
* nixの哲学は、特定のジョブを非常にうまく実行し、一緒にチェーンできる小さなツールの1つです。そのため、ここには特定のタスクを持つ2つのツールがあり、それらは互いにうまく合うように設計されています。また、tarを使用してファイルをグループ化でき、圧縮ツール(bzip
、gzip
など)を選択できることも意味します。
重要な違いは、2種類のアーカイブの性質です。
TARファイルは、ファイル内容といくつかのヘッダーを連結したものに過ぎませんが、gzipおよびbzip2は、tarballで連結全体に適用されるストリームコンプレッサーです。
Zipファイルは、個別に圧縮されたファイルといくつかのヘッダーを連結したものです。実際、DEFLATEアルゴリズムはZipとgzipの両方で使用され、適切なバイナリ調整を行うと、gzipストリームのペイロードを取得して、適切なヘッダーと辞書エントリを含むZipファイルに配置できます。
つまり、2つの異なるアーカイブタイプには異なるトレードオフがあります。小さなファイルの大規模なコレクションの場合、ストリームコンプレッサーはディクショナリ頻度を構築するためのデータをより多く持つため、通常、TARの後にストリームコンプレッサーが続くと圧縮率はZipよりも高くなり、より多くの冗長な情報を絞り出すことができます。一方、Zipファイルの(ファイル長を維持する)エラーは、圧縮データが影響を受けたファイルのみを破壊します。通常、ストリームコンプレッサーは、ストリームの途中のエラーから意味のある回復はできません。したがって、アーカイブの一部には引き続きアクセスできるため、Zipファイルは破損に対してより耐性があります。
GNU tar
の最新バージョンを使用すると、バンドルしているときに圧縮できるようになると誰も述べていません。
_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
(Unixに移植されたが、ネイティブではない)と完全に競合するZip
と、今では_bzip2
_経験、通常、gzip
よりも10〜20%優れています。
[追加:cpio
には面白い規則があると回答で指摘された人。それは本当ですが、GNU tar
が関連するオプション( '_-T -
_')を取得するまで、cpio
は、特定のディレクトリの下にあるすべてのものをアーカイブしたくない場合の優れたコマンドです- -実際にどのファイルをアーカイブするかを実際に選択できます。cpio
の欠点は、ファイルを選択するだけでなくcouldファイルを選択することhadファイルを選択することです。ここで、cpio
はスコアを付けます。中間ストレージなしで、1つのディレクトリ階層から別のディレクトリ階層にその場でコピーできます。
_cd /old/location; find . -depth -print | cpio -pvdumB /new/place
_
ちなみに、find
の '_-depth
_'オプションは、このコンテキストでは重要です-ディレクトリ自体に権限を設定する前に、ディレクトリの内容をコピーします。この回答への追加を入力する前にコマンドを確認したところ、いくつかの読み取り専用ディレクトリ(555アクセス許可)をコピーしました。コピーを削除しようとしたとき、 '_rm -fr /new/place
_'が完了する前に、ディレクトリのアクセス許可を緩和する必要がありました。 _-depth
_オプションがない場合、cpio
コマンドは失敗します。私がこれを思い出したのは、私がクリーンアップに行ったときだけでした-引用された式は、私にとっては自動的です(主に、何年にもわたる多くの繰り返しのおかげで)。 ]
面白いのは、tar
とgzip
の作成者が予期しない動作をする可能性があることです。たとえば、tarファイルをgzipするだけでなく、gzipしたファイルをtarしてfiles.gz.tar
を作成することもできます(技術的にはpkzip
の動作に近い方法です)。または、たとえば暗号化などの別のプログラムをパイプラインに入れ、tar、gzip、および暗号化の任意の順序を選択できます。暗号化プログラムを作成した人は、自分のプログラムがどのように使用されるかを少しでも理解する必要はありません。彼がする必要があるのは、標準入力から読み取って標準出力に書き込むことだけです。
Unixの世界では、ほとんどのアプリケーションは1つのことを行うように設計されており、それをうまく実行します。 Unix、gzipおよびbzip2で最も人気のあるZipユーティリティは、ファイル圧縮のみを実行します。 tarはファイルの連結を行います。 tarの出力を圧縮ユーティリティにパイプすると、どちらのソフトウェアにも過度の複雑さを加えることなく、必要なことが実行されます。
それが非常に普及しているもう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)でメモリにコミットしたものです。
あなたはこれについてもっと歴史的な文脈を探していたと思います。元のZipは単一ファイル用でした。 Tarは、複数のファイルを1つのファイルに配置するために使用されます。したがって、タール処理と圧縮は2段階のプロセスです。それが今日でも依然として非常に支配的である理由は誰もが推測することです。
ウィキペディアから Tar_(file_format)
コンピューティングでは、tar(テープアーカイブから派生)は、ファイル形式(アーカイブビットストリームの形式)であり、そのようなファイルの処理に使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988およびそれ以降のPOSIX.1-2001によって標準化されました。当初はrawフォーマットとして開発され、テープバックアップやその他のシーケンシャルアクセスデバイスでバックアップの目的で使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために現在使用されています権限、日付、およびディレクトリ構造。
私の意見では、今日stillがtar
を使用する理由は、UNIXのアプローチが最初から完全に正しくなった(おそらくまれな)ケースの1つだからです。
アーカイブの作成に関連する段階を詳しく見てみましょう。ここで、さまざまなタスクの分離が行われる方法がNIXの哲学であることに同意していただければ幸いです。
変換に特化した1つのツール(tar
でここに名前を付けます)anyファイル、ディレクトリ、およびシンボリックリンクの選択allタイムスタンプなどの関連メタデータ、所有者、権限を1つのバイトストリームに入れます。
anyバイトの入力ストリームを別の(うまくいけば)変換する任意の代替ツール(gzip
bz2
xz
)だけを変換します)より小さい出力ストリーム。
このようなアプローチを使用すると、ユーザーだけでなく開発者にもいくつかのメリットがあります。
拡張性tar
とany圧縮アルゴリズムが既に存在するか、またはanyまだ開発されていない圧縮アルゴリズムと組み合わせることができますなしtar
の内部の仕組みをまったく変更する必要はありません。
まったく新しい「hyper-Zip-utra」またはその他の圧縮ツールがリリースされるとすぐに、tar
の全機能を備えた新しいサーバントを採用して、それを使用する準備ができています。
安定性tar
は、80年代初頭から多く使用されており、多数のオペレーティングシステムおよびマシンでテストおよび実行されています。
reinventの所有権、権限、タイムスタンプなどの格納を実装する際の手間を省く何度も何度も for every新しいアーカイブツールだけではない(そうでなければ不必要に費やされる)開発時間を大幅に節約するだけでなく、すべての新しいアプリケーションに対して同じ信頼性を保証します。
consistencyユーザーインターフェイスは常に同じままです。
ツールAを使用して権限を復元するには、オプション--i-hope-you-rember-this-one
を渡す必要があり、ツールBを使用するには、ツールCを使用しているときに--this-time-its-another-one
を使用する必要があることを覚えておく必要はありません。これは、 `--hope-you-didnt-try -with-tool-as-switch。
一方、ツールDを使用する場合、--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
を使用しないと、実際にツールをめちゃくちゃにしてしまいます。
tarは主に歴史的な理由で人気があります。すぐに利用できるいくつかの代替案があります。それらのいくつかはほぼタールと同じくらい長く存在しますが、いくつかの理由で人気のあるタールを超えることができませんでした。
Tarの主な利点(および欠点)は、ファイルヘッダーもコンテンツの中央ディレクトリもないことです。したがって、何年もの間、ファイルサイズの制限に悩まされることはありませんでした(アーカイブ内のファイルの8 GB制限が問題になる、この数年前までは、何年も前に解決されました)。
見かけ上、tar.gz(またはそのことについてはar.Z)の1つの欠点は、単一のファイルを抽出し、アーカイブの内容をリストするためにアーカイブ全体を解凍する必要があることです。 。
gzipとbzip2は単なるコンプレッサであり、アーカイバソフトウェアではありません。したがって、組み合わせ。すべてのファイルをバンドルするには、tarソフトウェアが必要です。
Zip自体とRARも2つのプロセスの組み合わせです。
通常* nuxの世界では、ファイルのバンドルはtarballとして配布され、オプションでgzipされます。 Gzipは、tarまたはZipが行うファイルバンドルを行わない単純なファイル圧縮プログラムです。
かつて、Zipは、シンボリックリンク、大文字と小文字が混在するファイルなど、Unix tarとunixファイルシステムが通常と見なした処理の一部を適切に処理しませんでした。変更されたかどうかはわかりませんが、それがtarを使用する理由です。
Macユーザーがディスクイメージを愛するのと同じ理由で、ディスクイメージをアーカイブして、それを渡したり、アップロード/ダウンロードしたり、メールで送信したりするのに非常に便利な方法です。
使いやすく、ジッパーよりもポータブルです。
Tar =ファイルを1つのファイルにグループ化
GZip =ファイルを圧縮
彼らはプロセスを2つに分割しました。それだけです。
Windows環境では、Zipを実行するWinZipまたはWinRarの使用に慣れている可能性があります。これらのソフトウェアのZipプロセスは、ファイルとzipをグループ化しますが、そのプロセスは表示されません。
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の標準リリースユーティリティとして残っています。
Windows開発者として、tarballsが奇妙に見えるのは理解できます。 Word tar
は、Tape Archiveの略です。リールツーリールのテープレコーダーを考えてください。
Windowsの世界では、プログラムは通常、setup.exe
またはinstall.exe
を使用してインストールされます。これらは、レジストリであらゆる種類のウィザードを使用して、ディレクトリを作成し、.dll
(ダイナミックリンクライブラリ)ファイルをインストールします。
特に私自身の経験から、Linux、Ubuntuでは、パッケージマネージャーがアプリケーションを取得してインストールするほとんどの場合。 Ubuntuでは、開発者は.deb
(Debian、Ubuntuのベース)で終わるパッケージを作成します。 .deb
をインストールするための基本的な構文は次のとおりです。
Sudo apt install <package_name>
これはユーザーにとって比較的簡単なことですが、開発者が.deb
パッケージを作成してPPAを関連付けるのは大変な作業です。
開発者にとってより簡単な方法は、tarballを作成することです。次に、インストールの負担はエンドユーザーによって分担されます。彼らは〜するべきだ:
.tar.gz
で終わる)。apt
データベース(Windowsにインストールされているプログラムのリストを考えてください)がないため、将来的に繰り返す必要がある場合に備えて、彼らが行ったことを書き留めてください。別の回答がすでにあなたが尋ねた別の質問に述べているので、tarballを作成し、同時にデータを圧縮できます。 2パスプロセスは必要ありません。
Tarはファイル形式だけでなく、テープ形式でもあります。テープはデータをビットごとに格納します。各ストレージの実装はカスタムでした。 Tarは、ディスクからデータを取り出し、カスタムプログラムなしで他の人がデータを取得できるように、テープに保存する方法でした。
その後、圧縮プログラムが登場し、* nixには、複数のファイルを含む単一のファイルを作成する1つの方法しかありませんでした。
Tar.gzのトレンドが続いているのは、単なる慣性だと思います。 Pkzipは、圧縮とアーカイブの両方を一挙に開始しましたが、DOSシステムには通常、テープドライブが接続されていませんでした。
WikipediaのTar_(file_format)から
コンピューティングでは、tar(テープアーカイブから派生)は、ファイル形式(アーカイブビットストリームの形式)であり、そのようなファイルの処理に使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988およびそれ以降のPOSIX.1-2001によって標準化されました。当初はrawフォーマットとして開発され、テープバックアップやその他のシーケンシャルアクセスデバイスでバックアップの目的で使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために現在使用されています権限、日付、およびディレクトリ構造。