質問

として、主としてWindowsの開発者でない何かが足りないの文化をLinuxコミュニティはもちろん、そして常に混乱しました。

ダウンロードする場合は、そのファイルを最初に入れて .tar アーカイブを zip形式で圧縮.理由は二つのステップ?な 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

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

分離の理由は、選択した答えのように、職務の分離です。とりわけ、それは人々が( tar の代わりに)ファイルをパッケージ化するために ' cpio 'プログラムを使用し、次に選択したコンプレッサーを(一度だけ)使用できることを意味します、優先コンプレッサーは pack で、後で compress pack よりもはるかに効果的)で、その後 gzip zip (Unixに移植されたが、そこにはネイティブではない)と完全に競合するcode>、そして今 bzip2 は、私の経験では、通常は gzip よりも10〜20%有利です。

[追加 cpio にはおかしな慣習があると答えた人がいます。それは本当ですが、GNU tar が関連するオプション( ' -T-')を取得するまで、 cpio は望んでいなかったときのより良いコマンドでした特定のディレクトリの下にあるすべてをアーカイブするには、実際にアーカイブするファイルを正確に選択できます。 cpio の欠点は、ファイルを選択できなかっただけではなく、ファイルを選択した ことでした。 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 作品)。または、暗号化などの別のプログラムをパイプラインに配置し、tarring、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は、複数のファイルを単一のファイルに配置するために使用されます。したがって、タール化と圧縮は2段階のプロセスです。なぜそれが今日でもまだ支配的であるのかは誰もが推測します。

Tar_(file_format)

のウィキペディアから
  

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

tarはUNIXです。UNIXはtarです

私の意見では、今日 tar を使用する still の理由は、UNIXのアプローチがまさに始まり。

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

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

  • および任意の交換可能な別のツール( gzip bz2 xz は、いくつかのオプションを指定するだけ) バイトの入力ストリームを別の(できれば)より小さな出力ストリームに入力します。

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

  • 拡張性 tar と既存の any 圧縮アルゴリズム、または any 圧縮アルゴリズムとの組み合わせを可能にします tar の内部動作を変更します。

    まったく新しい「hyper-zip-utra」がすぐにあるいは、 tar の全機能を備えた新しいサーバントを使用するための圧縮ツールがすでに用意されています。

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

    すべての新しいアーカイブのために、所有者、許可、タイムスタンプなどを何度も繰り返し実装する際に、車輪を再発明する必要性を防ぐこのツールは、開発に多くの(不必要に費やされた)時間を節約するだけでなく、すべての新しいアプリケーションに対して同じ信頼性を保証します。

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

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

    ツールDを利用する場合、-if-you-had-used-tool-bs-switch-your-files-would-have-been-削除済み

タール 人気はほとんど歴史ある。が代替可能です。しろくて、シコシコとしたタールできなかった凌タールで人気のいる理由はいくつかあります。

  • cpio(外国人の構文;理論的にはより一貫性のあるもののうえ、tar普及)
  • ar(人気で長時間前になるために今使用されている包装ライブラリファイル)
  • 投稿者(自己抽出すシェルスクリプトは、あらゆる問題使用されることのない、以下)
  • zipでのライセンスの問題かなり多くのUnices)

大きな優位は、ダウンサイド)のタールでもファイルのヘッダー、中部ディレクトリの内容です。多くの年間でそのためならの限定ファイルサイズまでこの十年で8Gbに制限ファイル内のアーカイブとなった問題を解いただきました。

Apperantlyの下振れのtar.gz (ar.Zい)することを解凍し全体のアーカイブの抽出のための単一のファイル一覧のアーカイブの内容を、人を傷つけない欠陥からのtarなります。

gzipおよびbzip2は単なる圧縮プログラムであり、アーカイバソフトウェアではありません。したがって、組み合わせ。すべてのファイルをバンドルするにはtarソフトウェアが必要です。

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

通常、* nuxの世界では、ファイルのバンドルはtarballとして配布され、必要に応じてgzipで圧縮されます。 Gzipは単純なファイル圧縮プログラムであり、tarやzipが行うファイルバンドルを行いません。

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

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

GZip =ファイルを圧縮する

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

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

Macユーザーがディスクイメージを好むのと同じ理由で、これらは、ものをアーカイブしてから、それを渡したり、ダウンロードしたり、メールで送信したりするための本当に便利な方法です。

また、zipのIMHOよりも使いやすく、ポータブルです。

Altos-XENIXの時代(1982年)に、tar(テープアーカイバ)を使用して5 1/4フロッピーまたはストリーミングテープからファイルを抽出し、これらのメディアにコピーし始めました。その機能は、補足として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システムには通常テープドライブが接続されていませんでした!

Tar_(file_format)のウィキペディアから

  

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

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

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

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

sudo apt install <package_name>

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top