圧縮されたファイル名が、 そのファイルシステム上では長すぎる場合、 gzip はファイル名を切り詰めます。 gzip はファイル名のうちの 4 文字以上のパートを切り詰めようとします (各パートはドットで区切られます)。 小さなパートのみからファイル名ができている場合、 最長のパートが切り詰められます。 たとえば、 ファイル名が 14 文字までに制限されている場合、 gzip.msdos.exe は gzi.msd.exe.gz という名前で圧縮されます。 ファイル名の長さに制限がないシステムでは、 ファイル名が切り詰められることはありません。
デフォルトでは、 gzip は圧縮ファイルの中に元ファイルの名前とタイムスタンプを保存します。 これらの情報はファイルを -N オプションで伸長するときに使用されます。 これは、 圧縮されたファイルの名前が切り詰められた場合や、 ファイル転送の後でタイムスタンプが保存されなかった場合に役立ちます。
圧縮されたファイルは gzip -d, gunzip, zcat を使うと元の形に復元することができます。 圧縮ファイルに保存された元ファイルの名前がファイルシステムに適合しない場合、 そのファイルシステムに適合するように元の名前から新しい名前が作られます。
gunzip は、 コマンドラインからファイルのリストを受け取り、 ファイル名の末尾が .gz, -gz, .z, -z, _z (大文字小文字は区別しない) でファイルが正しいマジックナンバーで始まっている各ファイルを伸長したファイルに置き換えます。 このとき圧縮ファイルの拡張子は取り除かれます。 gunzip は .tgz と .taz という特別な拡張子も認識します。 これらはそれぞれ .tar.gz と .tar.Z の省略形です。 gzip は、 圧縮する際に、 必要であれば、 拡張子が .tar のファイルの名前を切り詰める代わりに .tgz という拡張子を使用します。
現時点では、 gunzip は gzip, zip, compress, compress -H, pack で作られたファイルを正しく伸長できます。 入力形式の検知は自動的に行われます。 はじめの 2 つの形式を使った場合、 gunzip は 32 ビットの CRC をチェックします。 pack の場合、 gunzip は伸長した長さをチェックします。 標準的な compress 形式は、 整合性チェックができるようには設計されていません。 しかし gunzip は壊れた .Z ファイルを検知することができる場合もあります。 .Z ファイルを伸長しているときにエラーが出たときには、 単に標準の uncompress がエラーを出さないという理由だけで .Z ファイルが正しいと考えてはいけません。 一般的にいうと、 標準的な uncompress は入力をチェックせず、 脳天気にゴミを出力してしまうことがあります。 SCO の compress -H 形式 (lzh 圧縮法) は CRC を含んでいないが、 いくつかの整合性チェックが可能です。
zip によって作られたファイルは、 元ファイルが 1 つだけ含まれ、 かつ、 そのファイルが 'deflation' 法で圧縮されている場合にのみ、 gzip で伸長できます。 この機能は、 tar.zip ファイルを tar.gz 形式へ変換する際の補助となることだけを意図したものです。 元ファイルが 1 つだけの zip ファイルを伸長するには、 gunzip <foo.zip や gunzip -S .zip foo.zip といったコマンドを使用します。 複数の元ファイルを含んでいる zip ファイルを伸長するためには、 gunzip ではなく unzip を使ってください。
zcat コマンドは gunzip -c と同一です。 (compress へのオリジナルのリンクを保存するために、 zcat が gzcat としてインストールされているシステムもあるかもしれません。) zcat はコマンドラインで指定されたファイルのリストまたは標準入力を伸長し、 伸長したデータを標準出力に書き出します。 zcat は、 ファイルが .gz という拡張子であるかどうかにかかわらず、 正しいマジックナンバーを持っているファイルであれば伸長しようとします。
gzip コマンドは zip と PKZIP で使われている Lempel-Ziv アルゴリズムを使用します。 得られる圧縮量は、 入力のサイズと共通の部分データ列の分布に依存します。 一般に、 ソースコードや英文といったテキストでは 60-70% 小さくなります。 (compress に使われている) LZW、 (pack に使われている) Huffman コーディング、 (compact に使われている) 適応 Huffman コーディング、 による圧縮に比べて、 この圧縮率は一般にかなり良いものです。
たとえ圧縮されたファイルが元ファイルより少し大きくなるとしても、 圧縮は常に行われます。 最悪の場合、 gzip ファイルヘッダーのための数バイトと 32 K バイトブロックごとに 5 バイトの増加となり、 大きなファイルでは 0.015% の増加率となります。 ただし、 実際の使用ディスクブロック数が増加することは、 ほぼ絶対にありません。
gzip は、 通常、 圧縮、伸長時にファイルのアクセス権、所有者、タイムスタンプを維持します。 適切な権限を有していれば、 ファイル所有者やグループについても維持されます。
compressed size: 圧縮されたファイルのサイズ
uncompressed size: 伸長されたファイルのサイズ
ratio: 圧縮率 (不明の場合は 0.0%)
uncompressed_name: 伸長されたファイルの名前
compress でつくられた .Z ファイルのように、 gzip 形式でないファイルの伸長時サイズは -1 と表示されます。 そのようなファイルについて伸長されたファイルのサイズを求める場合は、 以下のコマンドを使用してください。
zcat file.Z | wc -c
--verbose オプションと組み合わせると、以下のフィールドも表示されます。
method: 圧縮法
crc: 伸長されたデータの 32 ビット CRC
date & time: 伸長されたファイルのタイムスタンプ
現在サポートされている圧縮法は、 deflate, compress, lzh (SCO compress -H), pack です。 gzip 形式でないファイルについて、 crc は ffffffff とされます。
--name が同時に指定されると、 (もし記録されているなら) 伸長されたファイルの名前、 日付、 時刻は 圧縮ファイル内に記録されているものになります。
--verbose が同時に指定されると、 どれかのファイルのサイズが不明でない限り、 サイズの合計と全体での圧縮率も表示されます。 --quiet が同時に指定されると、 タイトルと合計の行は表示されません。
伸長時には、 入力ファイル名から出力ファイル名を抜き出す際に確認する拡張子のリストの先頭に .suf を追加します。
gzip -c file1 > foo.gz
gzip -c file2 >> foo.gz
の後に
gunzip -c foo
とするのは、 以下と同じです。
cat file1 file2
.gz ファイルのうち 1 つのファイルが壊れても、 (壊れたファイルを削除すれば) 他のファイルはまだ回復できます。 しかし、 次のようにすべてのファイルを一度に圧縮すれば、 より高い圧縮が得られます。
cat file1 file2 | gzip > foo.gz
これは下の例より高く圧縮できます。
gzip -c file1 file2 > foo.gz
より高い圧縮を得るために、 結合されたファイルをもう一度圧縮するには、 次のようにしてください。
gzip -cd old.gz | gzip > new.gz
圧縮ファイルが複数の元ファイルで構成されている場合、 --list オプションで表示される伸長時のサイズと CRC は、 最後の元ファイルのもののみとなります。 すべての元ファイルについて伸長時のサイズが必要な場合は、 次のコマンドを使用してください。
gzip -cd file.gz | wc -c
複数の元ファイルからなる 1 つの書庫ファイルを作って、 後から元ファイルを別々に伸長できるようにしたいなら、 tar や zip といったアーカイバーを使ってください。 GNU tar は gzip を透過的に起動するために -z オプションをサポートしています。 gzip は tar の代用としてではなく、 tar を補完するものとして設計されています。
この代わりとして、 エイリアスやスクリプトを利用できます。 たとえば、 gzip がディレクトリ /usr/bin にある場合、 PATH 変数の先頭に $HOME/bin を追加し、 以下のような内容を含んだ実行スクリプト $HOME/bin/gzip を作成します。
#! /bin/sh
export PATH=/usr/bin
exec gzip -9 "$@"
gzip ファイル形式は P. Deutsch, GZIP file format specification version 4.3, <https://www.ietf.org/rfc/rfc1952.txt>, Internet RFC 1952 (May 1996) で規定されています。 zip deflation 形式は P. Deutsch, DEFLATE Compressed Data Format Specification version 1.3, <https://www.ietf.org/rfc/rfc1951.txt>, Internet RFC 1951 (May 1996) で規定されています。
zcat file > recover
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.