主にWindows開発者として、私はLinuxコミュニティで文化的な何かを見逃しているかもしれませんが、それは常に私を混乱させてきました。
.tar
何かをダウンロードするとき、ファイルは最初にアーカイブに入れられ、次に圧縮されます。なぜ2段階のプロセスなのですか?ジッピングはファイルのグループ化を実現しませんか?私が気付いていない他の利点はありますか?
bzip
gzip
ファイルのグループではなく、単一のファイルで作業します。プレーンオールドzip
(およびpkzip
)はファイルのグループを操作し、アーカイブの概念が組み込まれています。
* nixの哲学は、特定の仕事を非常にうまく行い、連鎖させることができる小さなツールの1つです。そのため、ここには特定のタスクを持つ2つのツールがあり、それらは互いにうまく適合するように設計されています。bzip
また、tarを使用してファイルをグループ化し、圧縮ツール( 、、など)を選択できることも意味しますgzip
。
重要な違いは、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
圧縮している場合、GNUtar
はこれらを自動検出し、適切なプログラムを実行します。つまり、次を使用できます。
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
:おかしな慣習を持っている誰かが彼らの答えに注目しました。それは本当ですが、GNUtar
が関連するオプション(' -T -
')を取得するまでcpio
は、特定のディレクトリの下にあるすべてのものをアーカイブしたくない場合は、より適切なコマンドでした。実際にアーカイブするファイルを正確に選択できます。欠点は、ファイルを選択できるcpio
だけでなく、ファイルを選択する必要があることです。スコアが出る場所はまだ1つあります。中間ストレージなしで、あるディレクトリ階層から別のディレクトリ階層にその場でコピーを実行できます。cpio
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で圧縮して、を生成することもできますfiles.gz.tar
(これは技術的には動作に近いものになりますpkzip
)。または、別のプログラム、たとえば暗号化をパイプラインに入れて、タール、gzip、暗号化の任意の順序を選択することもできます。暗号化プログラムを作成した人は誰でも、自分のプログラムがどのように使用されるかを少しでも理解する必要はありません。必要なのは、標準入力から読み取り、標準出力に書き込むことだけです。
Unixの世界では、ほとんどのアプリケーションは1つのことを実行するように設計されており、それをうまく実行します。Unixで最も人気のあるzipユーティリティであるgzipとbzip2は、ファイル圧縮のみを行います。tarはファイルの連結を行います。tarの出力を圧縮ユーティリティにパイプすることで、どちらのソフトウェアにも過度の複雑さを加えることなく、必要な処理を実行できます。
それが非常に普及しているもう1つの理由は、tarとgzipが*NIXインストールベースのほぼ全体にあることです。これがおそらく唯一の最大の理由だと思います。また、RARまたは7zの優れたルーチンに関係なく、サポートが組み込まれているため、zipファイルがWindowsで非常に普及しているのもそのためです。
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つの大きなファイルにまとめて配布またはアーカイブするために使用されています。権限、日付、およびディレクトリ構造。
私の意見では、今日でも使用している理由はtar
、UNIX のアプローチが最初から完全に正しく機能した (おそらくまれな) ケースの 1 つだからです。
アーカイブの作成に関連する段階を詳しく見てみると、さまざまなタスクの分離がここで行われる方法がUNIX 哲学の最高の状態であることに同意してくれることを願っています。
タイムスタンプ、所有者、アクセス許可などの関連するすべてのメタデータを含むファイル、ディレクトリ、およびシンボリック リンクの選択を1 つのバイト ストリームに変換することtar
に特化した1 つのツール (ここでは名前を付けます)。
そして、バイトの入力ストリームを別の (できれば) より小さな出力ストリームに 変換する、任意に交換可能な別のツール (gzip
bz2
xz
いくつかのオプションを挙げます)です。
このようなアプローチを使用すると、ユーザーだけでなく開発者にもいくつかの利点がもたらされます。
拡張性既存の圧縮アルゴリズムやまだ開発中の圧縮アルゴリズムと、内部の仕組みをまったく変更することtar
なく結合できる
ようにします。tar
まったく新しい「hyper-zip-utra」またはその他の圧縮ツールが登場するとすぐに、新しいサーバントを完全なパワーで受け入れる準備ができていますtar
。
安定性
tar
は、80 年代初頭からテストされ、多数のオペレーティング システムやマシンで実行されて以来、頻繁に使用されてきました。
新しいアーカイブ ツールごとに、所有権、アクセス許可、タイムスタンプなどの保存を何度も何度も実装し直す必要がないようにすることで、開発にかかる時間を大幅に節約できるだけでなく (そうでなければ、不必要に費やされる)、すべてのツールに対して同じ信頼性が保証されます。新しいアプリ。
一貫性ユーザー インターフェイスは常に同じままです。
ツール A を使用して権限を復元するには、オプションを渡す必要があり、ツール C--i-hope-you-rember-this-one
を使用しているときにツール B を使用する必要が--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 とほぼ同じくらい長く存在していますが、いくつかの理由で人気が tar を超えることはできませんでした。
tar の主な利点 (および欠点) は、ファイル ヘッダーもコンテンツの中央ディレクトリもないことです。したがって、何年もの間、ファイルサイズの制限に悩まされることはありませんでした (アーカイブ内のファイルの 8 Gb 制限が問題になり、数年前に解決されたこの 10 年間まで)。
明らかに tar.gz (または ar.Z) の欠点の 1 つは、単一のファイルを抽出してアーカイブの内容を一覧表示するためにアーカイブ全体を解凍する必要があることです。 .
gzipとbzip2は単なるコンプレッサーであり、アーカイバソフトウェアではありません。したがって、組み合わせ。すべてのファイルをバンドルするには、tarソフトウェアが必要です。
ZIP自体とRARも、2つのプロセスを組み合わせたものです。
通常、* nuxの世界では、ファイルのバンドルはtarballとして配布され、オプションでgzip圧縮されます。Gzipは、tarやzipのようにファイルのバンドルを行わない単純なファイル圧縮プログラムです。
かつて、zipは、シンボリックリンクや大文字と小文字が混在するファイルなど、Unix tarおよびunixファイルシステムが通常と見なすものの一部を適切に処理しませんでした。変更されたかどうかはわかりませんが、tarを使用するのはそのためです。
Tar=1つのファイルにファイルをグループ化します
GZip=ファイルをzip圧縮します
彼らはプロセスを2つに分割しました。それだけです。
Windows環境では、Zipを実行するWinZipまたはWinRarを使用することに慣れている可能性があります。これらのソフトウェアのZipプロセスは、ファイルとzipをグループ化しますが、そのプロセスは表示されません。
Mac ユーザーがディスク イメージを好むのと同じ理由で: ディスク イメージは、データをアーカイブしてから配布したり、アップロード/ダウンロードしたり、電子メールで送信したりするのに非常に便利な方法です。
そして、私見のzipよりも使いやすく、持ち運びが簡単です。
私の Altos-XENIX 時代 (1982 年) に、tar (テープ アーカイバ) を使用して、5 1/4 フロッピーまたはストリーミング テープからファイルを抽出し、これらのメディアにコピーし始めました。その機能は、補足として DOS 5.0 および 6.22 の BACKUP.EXE および RESTORE.EXE コマンドに非常に似ており、1 つだけに収まらない場合は複数のメディアにまたがることができます。欠点は、複数のメディアのうちの 1 つに問題が発生した場合、すべてが無価値になることでした。tar と dd は UNIX システム III に由来し、おそらく下位互換性の理由から、UNIX ライクな OS の標準リリース ユーティリティのままです。
Tarはファイル形式であるだけでなく、テープ形式でもあります。テープはデータをビットごとに保存します。各ストレージの実装はカスタムでした。Tarは、ディスクからデータを取り出し、他の人がカスタムプログラムなしでデータを取得できるように、データをテープに保存する方法でした。
その後、圧縮プログラムが登場しましたが、* nixには、複数のファイルを含む単一のファイルを作成する方法が1つしかありませんでした。
tar.gzのトレンドが続いているのは、単なる慣性だと思います。Pkzipは、圧縮とアーカイブの両方を一挙に開始しましたが、DOSシステムには通常テープドライブが接続されていませんでした。
Tar_のウィキペディアから(file_format)
コンピューティングでは、tar(テープアーカイブから派生)は、ファイル形式(アーカイブビットストリームの一種の形式)であると同時に、そのようなファイルを処理するために使用されるプログラムの名前でもあります。この形式は、POSIX.1-1988以降のPOSIX.1-2001によって標準化されました。当初はraw形式として開発され、バックアップ目的でテープバックアップやその他のシーケンシャルアクセスデバイスに使用されていましたが、現在では、ユーザーやグループなどのファイルシステム情報を保持しながら、ファイルのコレクションを1つの大きなファイルにまとめて配布またはアーカイブするために使用されています。権限、日付、およびディレクトリ構造。