tarコマンドが 'z'オプションでgzipコマンドを使用するのはなぜですか?

tarコマンドが 'z'オプションでgzipコマンドを使用するのはなぜですか?

Linux Ubuntuでの「tar」コマンドの次のバージョンについて:

tar -tzf  /path/to/filename.tar.gz # Show the content
tar -xzf  /path/to/filename.tar.gz # Extract the content 

どちらのコマンドもこのzオプションを使用し、期待どおりに機能していることを確認してください。

man tarこのzオプションに関して、Passは次のことを示します。

   -z, --gzip, --gunzip, --ungzip
          Filter the archive through gzip(1).

質問

  • tarコマンドがオプションgzipでコマンドを使用するのはなぜですか'z'

その他の質問

セクションについてFilter the archive through gzip(1).

  • "filter"上記の2つのコマンドにはなぜ必要ですか?またはの意味や文脈は何ですかfilter

答え1

保管と圧縮は異なるものです。

Windowsのほとんどのアーカイブプログラム(たとえば、、、、zipなど7zrarは、両方ともアーカイブと圧縮を実行する1つのプログラムにまとめられているため、Windowsに慣れている人はそれらを分離できないものと考える傾向があります。

これらのプログラムは、主にUNIX以外のシステムとの互換性のためにUNIX / Linuxに存在しますが、別のプログラムが圧縮およびアーカイブ機能を実行するのがより一般的です。 MS-DOS / Windowsアーカイブとは異なり、UnixネイティブプログラムはUnixファイルのメタデータ(所有権や権限など)を理解して活用し、一部はACLを正しく処理することもできます。

tarアーカイブプログラムです。 1 つ以上のファイルを .tar アーカイブに保存できます。アーカイブが圧縮されていません。もともとは、複数のファイルと関連するメタデータ(ファイル名、所有権、権限など)を含むストリームをテープに書き込むために使用されました。またはファイルとして。これは、すべてのバイトストリームをファイルにリダイレクトしたり、別のプログラムにパイプしたりできるためです。は唯一のアーカイブプログラムではなく、、、などをtar含む他の多くのプログラムがあります。cpioarafiopax

gzip圧縮プログラムです。単一のファイルを独自の圧縮バージョンに圧縮できます。あるいは、標準入力のデータを圧縮して標準出力に出力することができます(つまり、「フィルタ」として機能することができます)。繰り返しますが、gzipこれは唯一の圧縮/圧縮解除プログラムではなく、多くのプログラムの1つです。

targzip.tarアーカイブをディスクに書き込む前に圧縮するために使用できます。圧縮されたアーカイブを読む前に圧縮してください。

使用しているバージョンによっては、tar他の圧縮プログラムを代わりに使用することもできますgzip。たとえば、GNU tarには次の圧縮関連オプションがあります。

圧縮オプション

-a--auto-compress圧縮パッケージのサフィックスを使用して圧縮プログラムを決定します。

-I--use-compress-program=COMMANDCOMMANDでデータをフィルタリングします。-d解凍するには、このオプションを受け入れる必要があります。パラメータにはコマンドラインオプションを含めることができます。

-j--bzip2bzip2(1)を介してアーカイブをフィルタリングします。

-J--xzxz(1)でアーカイブをフィルタリングします。

--lziplzip(1) でアーカイブをフィルタリングします。

--lzmalzma(1) でアーカイブをフィルタリングします。

--lzoplzop(1) でアーカイブをフィルタリングします。

--no-auto-compressコンプレッサーを決定するためにアーカイブサフィックスを使用しないでください。

-z、、、、 gzip( 1 )でアーカイブをフィルタリングします--gzip--gunzip--ungzip

-Z、、圧縮( --compress1 --uncompress)でアーカイブをフィルタリングします。

--zstdzstd(1) でアーカイブをフィルタリングします。

そして、他のアーカイバーをコンプレッサーで使用できることは注目に値します。または、などのコマンドラインオプションを介して、-zまたは-Zコンプレッサの出力をファイルにリダイレクトする前に、アーカイバの出力をコンプレッサにパイプすることによって(または逆にコンテンツをリストまたは抽出するために圧縮をアーカイバに解凍)

必要に応じてアーカイブおよび圧縮プログラムを「混合」することで、アーカイブおよび/または圧縮技術の向上を活用できます。

GNU tarを含むほとんどのアーカイブプログラムはパイプを介してそれをサポートしますが、GNU tarはいくつかのよく知られたプログラムのためのいくつかの組み込みオプションと-I独自の組み込みオプションを持たない他の圧縮プログラムを使用するための便利なオプションも提供します。 - おそらく、新しい圧縮アルゴリズムを実装したり、既存のアルゴリズムを新しく実装したりすることができます。たとえば、pigz(、、などではない)などのpixzプログラムはこれらの圧縮プログラムの並列バージョンであり、マルチコア/マルチスレッドCPUを利用してデータを圧縮または解凍するのに必要な時間を大幅に短縮できます。pbzip2gzipxzbzip2


「フィルタ」は、出力がファイルにリダイレクトされるか、パイプライン出力の次のプログラムにパイプされる前に、1つのプログラムを処理(および何らかの方法で変更)するためにパイプラインで使用されるプログラムの一般的な用語です。

一部のプログラム(tarwith-zなど)は、ユーザーがシェルで実行することなく、フィルタリングパイプライン自体を設定できます(たとえば、tar xfz filename.tar.gz基本的には同じgzip -d filename.tar.gz | tar xf -tar cfz filename.tar.gz ...基本的には同じtar cf - ... | gzip > filename.tar.gz)。

多くのUnixプログラムは、パイプでフィルタとして使用できるように書かれています。たとえば、gzip既存のファイルを圧縮したり、入力ストリーム(stdin)を圧縮したり、出力をstdoutに送信したりできます。たとえば、単純なプログラムはcat単にstdinをstdoutに直接渡すことも、オプションで行に番号を付けることで-n行の終わりと制御などのコードを表示することができます(-v、、-Eなど-Aのオプションを使用-t)。

ところで、パイプは非常に便利なので、人々がstdinから入力を受け取ってstdoutに書き込むことができるように、独自のスクリプト(awk、perl、または他の言語で)を書くのが非常に一般的です。つまり、人々は通常、独自のスクリプトをフィルタとして書きます。

関連情報