このページの内容

1 概要

gzipはLempel–Ziv符号化(LZ77)を使い、指定したファイルのサイズを小さくします。可能な場合、各ファイルは所有権・モード・アクセス時刻・変更時刻を保ったまま、拡張子「.gz」の付いたファイルに置き換えられます。(MSDOS、OS/2のFAT、Atariでの既定の拡張子は「z」です。)ファイルを指定しない場合、またはファイル名が-の場合は、標準入力を圧縮して標準出力へ書き出します。gzipは通常のファイルだけを圧縮対象とし、特にシンボリックリンクは無視します。

新しいファイル名がファイルシステムの制限より長い場合、gzipは名前を切り詰めます。gzipは、ファイル名のうち3文字より長い部分だけを切り詰めようとします。(各部分はドットで区切られています。)名前が短い部分だけで構成される場合は、最も長い部分を切り詰めます。たとえば、ファイル名が14文字に制限されている場合、gzip.msdos.exeはgzi.msd.exe.gzに圧縮されます。ファイル名の長さに制限がないシステムでは、名前は切り詰められません。

既定では、gzipは元のファイル名を圧縮ファイル内に保存します。ファイル転送後に圧縮ファイル名が切り詰められた場合、-Nを指定して展開するときに役立ちます。

元のファイルが通常のファイルであれば、gzipは既定でそのタイムスタンプを圧縮ファイル内に保存します。ファイル転送後にタイムスタンプが保持されなかった場合、-Nを指定して展開するときに役立ちます。ただし、現在のgzipファイル形式の制限により、秒未満の部分は破棄されます。また、タイムスタンプは1970-01-01 00:00:01から2106-02-07 06:28:15までのUTCの範囲内でなければなりません。OSが32ビットのタイムスタンプを使うホストでは、さらに2038-01-19 03:14:07 UTC以前に制限されます。これらの上限は、一般的な、うるう秒を数えない場合を前提としています。

圧縮ファイルは「gzip -d」、gunzip、またはzcatで元の形に戻せます。圧縮ファイル内に保存された元の名前がファイルシステムに適さない場合は、有効な名前になるよう、元の名前をもとに新しい名前を作ります。

gunzipはコマンド行でファイルの一覧を受け取り、名前が「.gz」「.z」「-gz」「-z」「_z」のいずれかで終わり(大文字・小文字は区別しません)、正しいマジックナンバーで始まる各ファイルを、元の拡張子を取り除いた展開済みファイルに置き換えます。gunzipは、特別な拡張子「.tgz」「.taz」も認識し、それぞれ「.tar.gz」「.tar.Z」の短縮形として扱います。圧縮時には、gzipは必要に応じて拡張子「.tgz」を使い、拡張子「.tar」の付いたファイルの名前を切り詰めずに済むようにします。

現在、gunzipはgzip、zip、compress、packで作られたファイルを展開できます。入力形式は自動的に判別されます。最初の2形式では、gunzipは32ビットのCRC(巡回冗長検査)を確認します。packでは、gunzipは展開後の長さを確認します。compress形式は整合性の検査を可能にするようには設計されていません。ただし、gunzipが不正な「.Z」ファイルを検出できる場合もあります。「.Z」ファイルの展開中にエラーが出たとき、標準のuncompressが何も指摘しないというだけで、その「.Z」ファイルが正しいと判断しないでください。通常、それは標準のuncompressが入力を検査せず、無意味な出力をそのまま生成することを意味します。SCOの「compress -H」形式(LZH圧縮方式)にはCRCがありませんが、ある程度の整合性検査はできます。

zipで作られたファイルをgzipで展開できるのは、「deflation」方式で圧縮されたメンバーが1つだけある場合です。この機能は、tar.zipファイルをtar.gz形式へ変換するのを補助するためだけのものです。メンバーが1つのzipファイルを展開するには、「gunzip <foo.zip」や「gunzip -S .zip foo.zip」のようなコマンドを使います。メンバーが複数あるzipファイルを展開するには、gunzipの代わりにunzipを使ってください。

zcatは「gunzip -c」と同じです。zcatは、コマンド行で指定したファイルの一覧または標準入力を展開し、展開後のデータを標準出力へ書き出します。zcatは、拡張子「.gz」の有無にかかわらず、正しいマジックナンバーを持つファイルを展開します。

gzipは、zipやPKZIPで使われるLempel–Zivアルゴリズムを使います。圧縮率は、入力のサイズと、共通する部分文字列の分布によって変わります。通常、ソースコードや英語のテキストは60〜70%小さくなります。一般に、compressで使われるLZW、packで使われるハフマン符号化、compactの適応ハフマン符号化より、圧縮率はかなり高くなります。

圧縮後のファイルが元のファイルより少し大きくなっても、圧縮は必ず行われます。最悪の場合の増加量は、gzipのファイルヘッダーの数バイトに加えて32 KiBブロックごとに5バイトであり、大きなファイルでは増加率が0.015%になります。実際に使われるディスクブロックの数は、ほとんど増えません。

gzipは、圧縮・展開時に通常はファイルのモードと変更タイムスタンプを保持します。適切な権限があれば、ファイルの所有者とグループも保持します。

gzipのファイル形式は、P. DeutschによるGZIP file format specification version 4.3、Internet RFC 1952(1996年5月)に定められています。zipのdeflation形式は、P. DeutschによるDEFLATE Compressed Data Format Specification version 1.3、Internet RFC 1951(1996年5月)に定められています。