主にWindows開発者として、おそらくLinuxコミュニティで文化的なものが足りないのですが、いつも混乱していました。
何かをダウンロードするとき、ファイルは最初に.tar
アーカイブに入れられ、次に圧縮されます。なぜ2段階のプロセスなのですか?zip圧縮によってファイルのグループ化が実現しませんか?私が知らない他の利点はありますか?
主にWindows開発者として、おそらくLinuxコミュニティで文化的なものが足りないのですが、いつも混乱していました。
何かをダウンロードするとき、ファイルは最初に.tar
アーカイブに入れられ、次に圧縮されます。なぜ2段階のプロセスなのですか?zip圧縮によってファイルのグループ化が実現しませんか?私が知らない他の利点はありますか?
回答:
bzip
そしてgzip
、単一のファイルではなく、ファイルのグループでの作業。プレーンオールドzip
(およびpkzip
)はファイルのグループを操作し、組み込みのアーカイブの概念を持っています。
* nixの哲学は、特定のジョブを非常にうまく実行し、一緒にチェーンできる小さなツールの1つです。そのため、ここには特定のタスクを持つ2つのツールがあり、それらは互いにうまく合うように設計されています。それはまた、あなたがグループファイルにタールを使用することができ、その後、あなたは圧縮ツール(の選択肢持っていることを意味bzip
、gzip
など)。
tar
アーカイブを使用する(imo)全体のポイントに言及したコメントを残したとは信じられません:Linuxファイルシステムのアクセス許可のサポート。Debianパッケージをダウンロードし、パッケージマネージャーがそれをインストールしたが、実行可能ファイルがどれも実行可能でなかった場合はどうなりますか?それが、誰もがtarballを使用する本当の理由です;)
重要な違いは、2種類のアーカイブの性質です。
TARファイルは、ファイルの内容といくつかのヘッダーを連結したものに過ぎませんが、gzipとbzip2は、tarballで連結全体に適用されるストリームコンプレッサーです。
ZIPファイルは、個別に圧縮されたファイルといくつかのヘッダーを連結したものです。実際、DEFLATEアルゴリズムはzipとgzipの両方で使用され、適切なバイナリ調整を行うことで、gzipストリームのペイロードを取得し、適切なヘッダーと辞書エントリを含むzipファイルに入れることができます。
つまり、2つの異なるアーカイブタイプには異なるトレードオフがあります。小さなファイルの大きなコレクションの場合、TARの後にストリームコンプレッサーが続くと、通常、ZIPよりも圧縮率が高くなります。これは、ストリームコンプレッサーがディクショナリ頻度を構築するためのデータを増やし、冗長な情報を絞り出すことができるためです。一方、ZIPファイルの(ファイル長を維持する)エラーは、圧縮データが影響を受けたファイルのみを破壊します。通常、ストリームコンプレッサーは、ストリームの途中のエラーから意味のある回復はできません。したがって、アーカイブの一部には引き続きアクセスできるため、ZIPファイルは破損に対してより耐性があります。
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
ちなみに、このコンテキスト-depth
でfind
は' 'オプションが重要です-ディレクトリ自体に権限を設定する前にディレクトリの内容をコピーします。この回答への追加を入力する前にコマンドを確認したところ、いくつかの読み取り専用ディレクトリ(555アクセス許可)をコピーしました。コピーを削除しようとしたとき、「rm -fr /new/place
」が完了する前に、ディレクトリの権限を緩和する必要がありました。-depth
オプションがないと、cpio
コマンドは失敗します。私がこれを思い出したのは、私がクリーンアップに行ったときだけでした-引用された式は、私にとっては自動的です(主に、何年にもわたる多くの繰り返しのおかげで)。]
面白いことに、あなたはのクリエイターが予想しない動作を得ることができ、あるtar
としますgzip
。たとえば、tarファイルをgzipするだけでなく、gzip圧縮したファイルをtarしてaを生成することもできますfiles.gz.tar
(これは技術的には動作に近い方法ですpkzip
)。または、暗号化などの別のプログラムをパイプラインに配置し、tar、gzip、および暗号化の任意の順序を選択できます。暗号化プログラムを作成した人は、自分のプログラムがどのように使用されるかを少しでも理解する必要はありません。彼が行う必要があるのは、標準入力から読み取って標準出力に書き込むことだけです。
それが非常に普及しているもう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段階のプロセスです。なぜそれが今日でもそれほど支配的であるのかは誰にも分からない。
WikipediaのTar_(file_format)から
コンピューティングでは、tar(テープアーカイブから派生)はファイル形式(アーカイブビットストリームの形式)であり、そのようなファイルの処理に使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988およびそれ以降のPOSIX.1-2001によって標準化されました。当初はrawフォーマットとして開発され、テープバックアップやその他のシーケンシャルアクセスデバイスでバックアップの目的で使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために一般的に使用されています権限、日付、およびディレクトリ構造。
私の意見では、まだ使用する理由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
。
タールは主に歴史的な理由で人気があります。すぐに利用できるいくつかの代替案があります。それらのいくつかはほぼタールと同じくらい長く存在しますが、いくつかの理由で人気でタールを超えることができませんでした。
tarの主な利点(および欠点)は、ファイルヘッダーもコンテンツの中央ディレクトリもないことです。したがって、何年もの間、ファイルサイズの制限に悩まされることはありませんでした(この10年間、アーカイブ内のファイルの8 GB制限が問題となり、数年前に解決されました)。
見たところ、tar.gz(またはそのことについてはar.Z)の欠点の1つは、アーカイブ全体を解凍して単一のファイルを抽出し、アーカイブのコンテンツを一覧表示する必要があることです。 。
通常* nuxの世界では、ファイルのバンドルはtarballとして配布され、オプションでgzipされます。Gzipは、tarまたはzipが行うファイルのバンドルを行わない単純なファイル圧縮プログラムです。
かつて、zipは、シンボリックリンク、大文字と小文字が混在したファイルなど、Unixのtarとunixのファイルシステムが通常と見なした処理の一部を適切に処理しませんでした。
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の標準リリースユーティリティとして残っています。
Tarはファイル形式だけでなく、テープ形式でもあります。テープはデータをビットごとに格納します。各ストレージの実装はカスタムでした。Tarは、ディスクからデータを取り出し、カスタムプログラムなしで他の人がデータを取得できるように、テープに格納する方法でした。
その後、圧縮プログラムが登場し、* nixには、複数のファイルを含む単一のファイルを作成する1つの方法しかありませんでした。
tar.gzのトレンドが続いているのは、単なる慣性だと思います。Pkzipは、圧縮とアーカイブの両方を一挙に開始しましたが、DOSシステムには通常、テープドライブが接続されていませんでした。
WikipediaのTar_(file_format)から
コンピューティングでは、tar(テープアーカイブから派生)はファイル形式(アーカイブビットストリームの形式)であり、そのようなファイルの処理に使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988およびそれ以降のPOSIX.1-2001によって標準化されました。当初はrawフォーマットとして開発され、テープバックアップやその他のシーケンシャルアクセスデバイスでバックアップの目的で使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために一般的に使用されています権限、日付、およびディレクトリ構造。
Windows開発者として、tarballが奇妙に見えるのは理解できます。言葉tar
はテープアーカイブを意味します。リールツーリールのテープレコーダーを考えてください。
Windowsの世界では、プログラムは通常、setup.exe
またはinstall.exe
でインストールされ、レジストリ内のあらゆる種類のウィザードで機能し、ディレクトリを作成してインストールします。.dll
(ダイナミックリンクライブラリ)ファイルます。
特に私自身の経験から、Linux、Ubuntuでは、パッケージマネージャーがほとんどの場合、アプリケーションを取得してインストールします。Ubuntuでは、開発者は末尾が.deb
(UbuntuのベースとなっているDebian)のパッケージを作成します。をインストールするための基本的な構文.deb
は次のとおりです。
sudo apt install <package_name>
これはユーザーにとって比較的簡単なことですが、開発者が作成するのは大変な作業です。 .deb
パッケージ PPAを関連付けるの。
開発者にとってより簡単な方法は、tarballを作成することです。その後、インストールの負担はエンドユーザーによって分担されます。彼らは〜するべきだ:
.tar.gz
)。apt
バックアップできるデータベース(Windowsのインストール済みプログラムのリストと考えてください)がないため、将来的に繰り返す必要がある場合に備えて、彼らが行ったことを書き留めてください。別の回答がすでにあなたが尋ねた別の質問に述べているので、tarballを作成し、同時にデータを圧縮することができます。2パスプロセスは必要ありません。