スポンサーリンク

GZIP

名称
書式
解説
オプション
進んだ使用法
環境変数
関連項目
診断
注意
バグ

名称

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

書式

gzip [ −acdfhlLnNrtvV19 ] [−S suffix] [ name ... ]
gunzip
[ −acfhlLnNrtvV ] [−S suffix] [ name ... ]
zcat
[ −fhLV ] [ name ... ]

解説

gzip は、Lempel-Ziv アルゴリズム (LZ77) を利用してファイルのサイズを減 らします。もし可能な場合は、ファイル名に .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 は、 .tar.gz.tar.Z を省略した .tgz.taz も認識します。圧縮 す る 時、 gzip は、 .tar ファイルのファイル名を縮めるかわりに .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 は、 .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

.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 より圧縮率がよいです。

スポンサーリンク