|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > g > gzip - コマンド (プログラム) の説明 gzip - コマンド (プログラム) の説明 - Linux コマンド集 一覧表名前gzip, gunzip, zcat - ファイルの圧縮・伸長を行う 書式
gzip
[
-acdfhlLnNrtvV19
][
-S
suffix
]
[
"name ..."
]
説明gzip は Lempel-Ziv コーディング (LZ77) を利用して、 指定されたファイルのサイズを小さくする。 各ファイルは所有権・アクセス時刻・修正時刻を保存したまま、 拡張子 ".gz" をつけたファイルに置き換えられる。 (デフォルトの拡張子は、VMSでは -gz, MSDOS, OS/2 FAT, Windows NT FAT, Atari では "z" である。) ファイルが指定されない場合、またはファイル名が "-" の場合、 標準入力を圧縮して標準出力に書き出す。 gzip は通常のファイルしか圧縮しようとしない。 特に、シンボリックリンクは無視される。 圧縮されたファイル名が、そのファイルシステム上では長すぎる場合、 gzip はファイル名を切り詰める。 gzip はファイル名のうちの 4 文字以上のパートを切り詰めようとする。 (各パートはドットで区切られている。) 小さなパートだけからファイル名ができている場合、 もっとも長いパートが切り詰められる。 例えば、ファイル名が 14 文字までに制限されている場合、 gzip.msdos.exe は gzi.msd.exe.gz という名前で圧縮される。 ファイル名の長さに制限がないシステムでは、 ファイル名が切り詰められることはない。 デフォルトでは、 gzip は圧縮ファイルの中に元ファイルの名前とタイムスタンプを保存する。 これらの情報はファイルを -N オプションで伸長するときに使われる。 これは、圧縮されたファイルの名前が切り詰められた場合や、 ファイル転送の後でタイムスタンプが保存されなかった場合に役立つ。 圧縮されたファイルは gzip -d , gunzip , zcat を使うと元の形に復元することができる。 圧縮ファイルに保存された元ファイルの名前がファイルシステムに適合しない場合、 そのファイルシステムに適合するように元の名前から新しい名前が作られる。 gunzip は、ファイル名が .gz, -gz, .z, -z, _z, .Z でおわっており、 正しいマジックナンバーで始まっているファイルのリストを コマンドラインから受け取り、 伸長したファイルに置き換える。 このとき圧縮ファイルの拡張子は取り除かれる。 gunzip は ".tgz" と ".taz" という特別な拡張子も認識する。 これらはそれぞれ、 ".tar.gz" と ".tar.Z" の省略形である。 圧縮するときに ".tar" という拡張子をもつファイルの名前を切り詰める必要があるなら、 gzip はかわりに ".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 によって作られたファイルは、'deflation' 法で圧縮された元ファイルを 1 つしか含まない場合にだけ、gzip で伸長することができる。 この特徴は、tar.zip ファイルを tar.gz 形式へ変換する際の 補助となることだけを意図している。 複数の元ファイルを含んでいる 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 ファイルヘッダのための数バイトと
32K バイトブロック毎に 5 バイトの増加となり、
大きなファイルでは 0.015% の増加率となる。
ただし実際の使用ディスクブロック数は、
ほとんど絶対に増加しない。
gzip
は圧縮・伸長時にファイルのアクセス権・所有者・タイムスタンプを保存する。
オプション
高度な使用法複数の圧縮ファイルを連結することができる。 この場合、 gunzip はすべての圧縮ファイルを一度に伸長する。たとえば、
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 の代用としてではなく、補助として設計されている。
環境変数環境変数 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), zip(1), unzip(1), compress(1), pack(1), compact(1) 返り値通常、終了状態は 0 である。 エラーが起きた場合、終了状態は 1 である。 警告が起きた場合、終了状態は 2 である。
警告圧縮されたデータをテープに書き込むときは、 一般的に、出力のブロック境界をゼロで埋める必要がある。 伸長のためにデータを読み込んですべてのブロックを gunzip に渡すと、 gunzip は通常、圧縮されたデータの後ろに余分なゴミが続いていると検知して、 警告を発する。 この警告を抑制するには --quiet オプションを使う必要がある。 このオプションは環境変数 GZIP に次のようにして設定できる。 sh の場合: GZIP="-q" tar -xfz --block-compress /dev/rst0 csh の場合: (setenv GZIP -q; tar -xfz --block-compress /dev/rst0 上の例では、gzip は GNU tar の -z オプションによって暗に呼び出されている。 テープ上の圧縮されたデータの読み出しと書き込みに 同じブロックサイズ (tar の -b オプション) が使われていることに注意すること。 (この例は、GNU 版の tar を使うことを仮定している。) バグ
サイズが 2GB を越える場合、--list オプションによる表示は正しくない。
圧縮ファイルがシーク不可媒体の上に存在する場合、
--list オプションによる表示は、サイズが -1、crc が ffffffff となる。
|
|