tail head cat sleep
QR code linking to this page

manページ  — GZIP

名称

gzip, gunzip, zcat - ファイルの圧縮、伸長を行なう

内容

書式

gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name amp;... ]
gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name amp;... ]
zcat [ -fhLV ] [ name amp;... ]

解説

gzip は、Lempel-Ziv アルゴリズム (LZ77) を利用してファイルのサイズを減らします。 もし可能な場合は、ファイル名に amp;.gz の拡張子をつけ、 ファイルの所有者やアクセス時間と更新時間を保存します。 (デフォルトの拡張子は、 VMS では -gz 、MSDOS, OS/2 FAT, Windows NT FAT, Atari では z となります。) もし、ファイル名が指定されなかったり、ファイル名として "-" が指定されれば、 標準入力を圧縮し、結果を標準出力へ出力します。 gzip は、一般ファイルのみを圧縮します。 特に、シンボリックリンクは無視されます。

もし、圧縮されたファイル名がファイルシステムにとって長ければ、 gzip は、その名前を縮めます。 gzip は、ファイル名の 3 文字以上の部分にのみ名前の縮小を試みます。 (部分とは、ドットによって分けられた所です。) もし、ファイル名が短かい部分のみで 構成されていた時は、最も長い部分を縮小します。例えば、ファイル名が 14 文字 という制限がある時、 gzip.msdos.exe は gzi.msd.exe.gz となります。 ファイル名の文字数が制限を持たないシステムでは、 ファイル名の縮小は行われません。

デフォルトで gzip は、オリジナルのファイル名とタイムスタンプを圧縮されたファイル中に保存します。 これらは、 -N オプション付きで伸長された時に、使われます。これは、圧縮されたファイル名が 縮小されていたり、ファイル転送後にタイムスタンプが保存されなかった時に 便利です。

圧縮されたファイルは、 gzip -dgunzipzcat を用い、オリジナルに戻すことが出来ます。 もし、圧縮されたファイルに保存されたオリジナルのファイル名がファイルシステムに 合わなければ、オリジナルのファイル名から新しいファイル名が作られます。

gunzip は、コマンドライン上のファイルのリストを 受け取り、.gz, -gz, .z, -z, _z, .Z で終っていて、正しいマジックナンバで 始まっているファイルを、 元の拡張子を取り除いた圧縮されていないファイルにします。 gunzip は、 amp;.tar.gzamp;.tar.Z を省略した amp;.tgzamp;.taz も認識します。 圧縮する時、 gzip は、 amp;.tar ファイルのファイル名を縮めるかわりに amp;.tgz を使います。

gunzip は、 gzip, zip, compress, compress -H, pack で作られたファイルを伸長できます。 入力されたファイルがどの方式で圧縮されているかは自動的に判別されます。 最初の二つの方式を使うと、 gunzip は 32ビット CRC をチェックします。 pack の場合、 gunzip は伸長された大きさをチェックします。標準の compress は一貫性のチェックをするように設計されていませんでしたが、 gunzip は .Z ファイルが正しくないことを検出できることもあります。 もし .Z ファイルを伸長する時にエラーに会う場合には、 標準の uncompress がエラーを出さないという理由で .Z ファイルは正しい と思わないで下さい。 これは一般的に、標準の uncompress が入力をチェックせず、ゴミである出力をしてしまうという事を意味しています。 SCO compress -H 方式 (lzh 圧縮技法) は CRC を含みませんが、 ある程度の一貫性のチェックの余地があります。

zip で作られたファイルは、 'deflation' 技法で圧縮された一つのメンバを もつ時のみ gzip で伸長できます。この特徴は tar.zip ファイルを tar.gz ファイルに するのを助けることのみを意図しています。複数のメンバを持った zip ファイルを 取り出す時には gunzip ではなく unzip を使って下さい。

zcat は、 gunzip -c と同一です。 (いくつかのシステムでは、 zcatcompress へのオリジナルのリンクを保存しておくために gzcat としてインストールされているかもしれません。) zcat は、コマンドラインで指定されたファイルか標準入力からの入力を伸長し、 標準出力へ伸長したデータを出力します。 zcat は、 amp;.gz 拡張子であろうとなかろうと、マジックナンバが正しければファイルを伸長 します。

gzip は、 zip や PKZIP で使われている Lempel-Ziv アルゴリズムを使っています。 圧縮率は入力の大きさや共通の文字列の分布によります。 一般に、ソースコードや英語のようなテキストは 60-70% 縮小されます。 また、 LZW ( compress で使われている)、 Huffman coding ( pack で使われている)、 適応性 Huffman coding (compact) よりも圧縮率が良いです。

圧縮されたファイルがオリジナルのファイルよりわずかでも大きいとしても、 圧縮は常に行われます。最悪の伸長は gzip ファイルヘッダの数バイト、 32K ブロック毎に 5 バイトの増加、すなわち伸長率 0.015% です。 使用しているディスクブロックの実際の数はほとんどの場合決して増加しない事に 注意してください。 gzip は、圧縮や伸長を行う時ファイルのモード、所有者、タイムスタンプを保存します。

オプション

-a --ascii
  行末の変換を行います。このオプションは非 Unix 環境でのみ サポートされています。例えばMSDOSでは、圧縮時に CR LF が LF に変換され、 伸長時に LF が CR LF に変換されます。
-c --stdout --to-stdout
  オリジナルファイルはそのままで、結果を標準出力へ書き出します。 もし、複数のファイルが入力されれば、結果は一続きの独立したものに なります。よりよく圧縮をするためには、圧縮をする前にすべての入力 ファイルを結合するとよいです。
-d --decompress --uncompress
  伸長を行います。
-f --force
  ファイルが複数のリンクを持っていたり、すでにファイルが存在していたとしても、 また圧縮されたデータを端末から読み書きしようとしたときでも圧縮や伸長を 強行します。もし入力されたデータが gzip で認識出来ない形式でありオプション --stdout が指定された場合、 変更されることなく入力されたデータは標準出力へコピーされます: zcatcat として振舞います。もし -f が指定されておらず バックグラウンドで実行されていない場合には、 gzip はファイルを上書きしてよいか確認を求めます。
-h --help
  ヘルプを表示し、終了します。
-l --list
  圧縮されたファイルそれぞれに以下のフィールドを表示する。

compressed size: 圧縮されたファイルの大きさ
uncompressed size: 伸長されたファイルの大きさ
ratio: 圧縮率 (分からなければ 0.0%)
uncompressed_name: 伸長されたファイルの名前

uncompressed size が -1 ならば、ファイルは gzip 形式ではなく .Z ファイル等です。 そのようなファイルの伸長されたファイルの大きさを 知るには、以下のようにして下さい。

zcat file.Z | wc -c

--verbose オプションを共に指定すると、以下のフィールドが追加されます。

method: 圧縮技法
crc: 伸長されたファイルの 32-bit CRC
date & time: 伸長されたファイルのタイムスタンプ

圧縮技法は今のところ deflate, compress, lzh (SCO compress -H), pack を サポートしています。crc が ffffffff ならば、gzip 形式ではありません。

--name オプションを共に指定すると、表示する伸長されたファイルの名前、日付、時間 は圧縮されたファイルに保存されたものになります。

--verbose オプションを共に指定すると、 全てのファイルのサイズのトータルや圧縮率が 表示されます (ファイルサイズが分からないものがある場合を除きます)。 --quiet オプションを共に指定すると、タイトルやトータルラインは表示されません。

-L --license
  gzip ライセンスを表示し、終了します。
-n --no-name
  圧縮する時、デフォルトでオリジナルのファイル名やタイムスタンプを保存しません。 (もしファイル名が縮められるならば、オリジナルのファイル名は常に 保存されます。) 伸長する時、もしオリジナルのファイル名が存在しても 復元しません (圧縮されたファイルの名前から gzip サフィックスのみを取り除きます)、もしオリジナルのタイムスタンプが 存在しても復元しません (圧縮されたファイルからコピーします)。この オプションは伸長する時のデフォルトです。
-N --name
  圧縮する時、常にオリジナルのファイル名とタイムスタンプを保存します。 これはデフォルトです。伸長する時、もしオリジナルのファイル名やタイム スタンプが存在すれば復元します。これはファイル名の長さに制限のある システムやタイムスタンプがファイル転送後に失われた時に役に立ちます。
-q --quiet
  すべての警告を抑制します。
-r --recursive
  ディレクトリ構造を再帰的に進みます。もし、コマンドラインで指定された ファイル名のディレクトリがあれば、 gzip はそのディレクトリへ進み、 そのディレクトリで発見した全てのファイルを圧縮します ( gunzip の場合はそれらを伸長します)。
-S .suf --suffix .suf
  amp;.gz の代わりに .suf というサフィックスを使います。どのようなサフィックス でも使う事が出来ますが、ファイルを他のシステムに転送する時の混乱を避ける ために、.z や .gz 以外のサフィックスは避けるべきです。サフィックスに ヌルを指定すると、 以下のように gunzip はサフィックスにかかわらずすべてのファイルを 伸長しようとします。

gunzip -S "" * (MSDOS では *.*)

gzip の以前のバージョンでは .z サフィックスを使っていました。 これは、 pack(1) との衝突を避けるために変更されました。

-t --test
  テスト。圧縮されたファイルが完全なものかチェックします。
-v --verbose
  冗長メッセージを表示します。圧縮/伸長される各ファイル名と圧縮率を 表示します。
-V --version
  バージョンナンバやオプションを表示した後、終了します。
-# --fast --best
  圧縮の速度を数値 # で調節します。例えば、 -1--fast は圧縮速度を最も速くし (圧縮率は最低)、 -9--best は圧縮速度を最も遅くします (圧縮率は最高)。 デフォルトの圧縮レベルは -6 (つまり 速度より高い圧縮率を重視している)。

進んだ使用法

複数の圧縮されたファイルは結合する事ができます。この場合、 gunzip は同時にすべてのメンバを取り出します。例えば、

gzip -c file1 > foo.gz
gzip -c file2 >> foo.gz その後、
gunzip -c foo

cat file1 file2

と同じ事です。.gz ファイルの一つのメンバが壊れた場合、他のメンバは 復元できます (壊れたメンバを取り除けば)。しかし、 同時にすべてのメンバを圧縮する時、

gzip -c file1 file2 > foo.gz

と実行するより、以下のように実行するとより圧縮率を上げる事が出来ます。

cat file1 file2 | gzip > foo.gz

もし結合されたファイルをより圧縮率を上げるために再圧縮したければ、 以下のように実行して下さい。

gzip -cd old.gz | gzip > new.gz

もし圧縮されたファイルがいくつかのメンバを持つのなら、 --list オプションで報告される伸長後の大きさや CRC は最後のメンバのみを 示しています。すべてのメンバの伸長後の大きさが必要なら、以下のように 実行して下さい。

gzip -cd file.gz | wc -c

複数のメンバを持ち、後からあるメンバを抜き取る事ができるような 単一のアーカイブファイルを作りたければ、 tar や zip のようなアーカイバを使って下さい。 GNU tar は gzip を呼び出す -z オプションをサポートしています。 gzip は tar の代替ではなく tar の補足として設計されています。

環境変数

環境変数 GZIP には、 gzip 起動時にコマンドラインに付加するオプションを指定できます。 これらのオプションがまず解釈され、コマンドラインのパラメータ によって上書きされます。例えば、
sh では: GZIP="-8v --name"; export GZIP
csh では: setenv GZIP "-8v --name"
MSDOS では: set GZIP=-8v --name

Vax/VMS では、環境変数の名前は GZIP_OPT です。これはプログラムの 始動のためのシンボルセットとの衝突を避けるためです。

関連項目

znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), compress(1)

診断

終了コードは通常 0 です; エラーが起こった場合は 1 を返します。 警告が出た時は 2 を返します。

Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] 無効なオプションがコマンドラインに指定されています。 file: not in gzip format gunzip に指定されたファイルは圧縮されていません。 file: Corrupt input. Use zcat to recover some data. 圧縮されたファイルが壊れています。壊れている部分までのデータを 以下のようにして復元できます。 zcat file > recover file: compressed with xx bits, can only handle yy bits file が、このマシンの伸長プログラムよりも多くの bit を処理できるプログラムにより (LZW を使い) 圧縮されています。 ファイルを gzip で再圧縮してください。 圧縮率が良くなりメモリ使用量も少なくなります。 file: already has .gz suffix -- no change ファイルが既に圧縮されているかもしれません。ファイルをリネームして もう一度試してください。 file already exists; do you wish to overwrite (y or n)? もし出力ファイルを置き換えたければ、"y" と答えてください。そうでなければ "n" と答えてください。 gunzip: corrupt input SIGSEGV 違反が検出されました。これは通常、入力されたファイルが壊れている事を 意味しています。 xx.x% 圧縮で保存された入力の割合 ( -v-l にのみ関係あります)。 -- not a regular file or directory: ignored 入力ファイルが通常ファイルやディレクトリでない時 (シンボリックリンク、ソケット、FIFO、デバイスファイル)、それらは 変更されません。 -- has xx other links: unchanged 入力ファイルがリンクをもっています; 変更されないままです。より詳しい事は ln(1) を参照して下さい。複数のリンクを持つファイルを圧縮するためには -f フラグを使用して下さい。

注意

圧縮されたデータをテープに書く時、一般にブロック境界まで 0 で埋める必要が あります。データを読み、全ブロックを gunzip で伸長する時、 gunzip は圧縮されたデータの後にゴミがあると検出し、デフォルトでは警告を出力します。 この警告を抑えるには --quiet オプションを使わなければなりません。 このオプションは、以下のように GZIP 環境変数にセット出来ます。
sh では: GZIP="-q" tar -xfz --block-compress /dev/rst0
csh では: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0

上記の例では、gzip は GNU tar の -z オプションによって 暗黙的に呼び出されています。 テープで圧縮されたデータを読み書きするのに同じブロックサイズ (tar の -b オプション) が使われて いるか確認して下さい。(この例では tar は GNU Version を使っていると 仮定しています。)

バグ

サイズが 2GB を越える場合のオプション --list による出力は、正しくないものです。 圧縮ファイルがシークできない媒体上に存在する場合、 オプション --list による出力は、 サイズを -1 としヘッダ内の CRC を 0xffffffffとします。

まれに、オプション --best を付加して圧縮した場合よりも、デフォルトの圧縮 時 (-6) の方が圧縮率が良いことがあります。ファイルに高い冗長性があれば、 compress の方が gzip より圧縮率がよいです。


GZIP (1)

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Never write it in C if you can do it in `awk';
Never do it in `awk' if `sed' can handle it;
Never use `sed' when `tr' can do the job;
Never invoke `tr' when `cat' is sufficient;
Avoid using `cat' whenever possible.
— Taylor's Laws of Programming