私が走るとき
tar -cvzf archive.tgz file1 file2 ; rm file1 file2
一般的に圧縮されたターボールを生成しますが、それはどのように可能ですか?
tar -xvf archive.tgz
圧縮されていないファイルを返しますか?私はいつも-zフラグが必要だと思いました。
答え1
あなたのtar
実装(おそらく最初の実装)は、圧縮のための引数1GNU
に渡されたファイルを検出します。
tar
現在最も一般的な実装は、ファイルの最初のバイト(マジックナンバーとも呼ばれる)をGNU tar
見て、ファイルが圧縮されているかどうか、および使用される圧縮アルゴリズムを決定することです。busybox
tar
もともとAT&Tコードに基づく商用Unixの実装は、最初はこのフラグをサポートしていませんでした-z
。注目すべき例外の1つtar
は、ファイル形式を検出する機能など、この拡張機能が追加されたSolaris 11です。
1他の記事ですでに述べたように、GNU tarはstdinを介して渡されたファイルが圧縮されたかどうかを検出しません。返信するそしてSensorSmithの口コミ。
答え2
Starは自動圧縮検出と自動圧縮解除を導入します。 20年前。
今日、他のいくつかのtar実装(gtarなど)はこのアイデアをコピーしています。
注:starは、正しい解凍方法を検出するために圧縮されたストリームのマジックナンバーを理解します。また、stdin
指定されたファイルから圧縮アーカイブを読み取るとgtarが失敗することに注意してください。