アーカイブと圧縮は別の問題を解決します。アーカイブはディレクトリツリーとそのメタデータを一つのストリームへまとめます。圧縮はストリームを符号化してサイズを減らします。.tar.gz ファイルは慣例として、ストリームを gzip で圧縮した tar アーカイブです。
パッケージ · レッスン 3
tar と gzip
`tar` でファイルをアーカイブし、`gzip` でストリームを圧縮し、安全な展開前にアーカイブを検査する方法を学びます。
`gzip` で一つのストリームを圧縮する
gzip は既定ではファイルを圧縮し、元の名前を .gz ファイルへ置き換えます。
$ gzip report.txt
通常、report.txt.gz の作成に成功すると report.txt は削除されます。展開には次を使います。
$ gunzip report.txt.gz
対応している環境で入力ファイルを残すには gzip -k report.txt を使い、明示的に制御する必要がある場合は標準ストリームを使います。ファイル名の拡張子は慣習であり、実際の形式の証明ではありません。file などのツールで内容を調べられます。
このレッスンにおける gzip の主な役割は何ですか?
Tar アーカイブを作成する
非圧縮アーカイブは次のように作成します。
$ tar -cvf project.tar file1 file2 directory1
-cは新しいアーカイブを作成します。-vは処理中のメンバーを一覧表示する任意のオプションです。-f project.tarはアーカイブファイルを指定します。-fは引数を一つ取るため、ファイル名をその隣に置きます。
パスはアーカイブのメンバー名として保存されます。意図した作業ディレクトリからアーカイブを作成し、機密情報、キャッシュ、ソケット、広範な絶対パスを誤って含めないようにしてください。
新しいアーカイブを作成する tar オプションはどれですか?
Gzip で圧縮した Tar アーカイブを作成する
GNU tar をはじめ多くの実装では、-z で gzip を呼び出せます。
$ tar -czvf project.tar.gz file1 file2 directory1
結果は、gzip で圧縮された一つの tar ストリームです。圧縮はアーカイブを暗号化せず、読み取って展開できる人から内容を隠しません。機密性が必要なら、適切な認証付き暗号化の手順を使い、鍵を別に管理してください。
示した tar コマンドの -z は何を要求しますか?
展開前に一覧表示する
別の相手から受け取ったアーカイブは、信頼できない入力として扱います。まずメンバー名を一覧表示してください。
$ tar -tzf download.tar.gz
予期しない絶対パス、.. によるパストラバーサル、意外なシンボリックリンクやハードリンク、デバイスファイル、重要ファイルを上書きする名前がないか確認します。現代の tar 実装には保護機能がありますが、動作とオプションは異なり、展開すると攻撃者が選んだ名前と内容が作成されることに変わりはありません。
新しく作った非特権のステージングディレクトリへ展開します。
$ mkdir extraction-stage
$ tar -xzf download.tar.gz -C extraction-stage
未確認のアーカイブを root として展開してはいけません。作成されたものを検証してから、選択したファイルを最終的な場所へ移動します。
アーカイブのメンバーを展開せずに一覧表示する操作はどれですか?
その他の圧縮形式
tar 実装は bzip2 や xz などの圧縮器も扱えます。GNU tar では一般にそれぞれ -j と -J で選択します。対応形式と自動検出の動作は異なるため、tar --help またはローカルマニュアルを参照してください。ZIP は別のアーカイブ形式であり、zip や unzip などのツールで操作します。
gzip 圧縮によって tar アーカイブに機密性が加わりますか?
ファイルのパッケージ化と圧縮で破棄可能なファイルを使って練習し、tar でバックアップを作成・復元するで検査とステージングを実践してください。
レッスン完了
tar と gzip を完了しました
tar のアーカイブと gzip の圧縮を安全に組み合わせられるようになりました。
tar アーカイブと gzip 圧縮を区別する。
-cでアーカイブを、-zで gzip ストリームを作成する。-xで展開する前に-tでメンバーを一覧表示する。信頼できない内容は非特権のステージングディレクトリへ展開する。
圧縮と暗号化を別のものとして扱う。