gzip - ファイルをgz形式に圧縮する

gzip

gzipコマンドは、LZ77というアルゴリズムを用いて、ファイルを圧縮します。

ファイルが圧縮されたときのデフォルトの拡張子は.gzになります。圧縮の際によく使用される圧縮コマンドのひとつになります。

スポンサーリンク

LZ77とは

LZ77は、1977年にAbraham LempelとJacob Zivによって開発された、データの圧縮アルゴリズムになります。

LZ77の圧縮アルゴリズムは特定のデータ範囲に対して、始めに現れたデータパターンを記憶して、次に同じデータパターンが現れた時に、そのデータパターンを始めに現れたデータパターンの参照に置き換えて、データを圧縮します。

つまり、ファイルに同じデータパターンがあるほど、そのファイルを圧縮することができます。

gzipコマンドの利用例

ファイルを圧縮し元ファイルは削除
(オプションなし)

gzipコマンドはファイルをgz形式に圧縮します。オプションなしの場合は、ファイルを圧縮した後で、元ファイルを削除します。

コマンド例

コマンド例実行前

実行結果

manual.txtはgzipのmanページをファイルに出力したものになります。
コマンド例

また、gzipコマンドはパイプを通して使用する場合、その出力をリダイレクトできます。

コマンド例

コマンド例実行前

実行結果

リダイレクトを行わない場合は、エラーメッセージが表示されます。
コマンド例と実行結果

圧縮ファイルを展開
(-dオプション)

-dオプションは、圧縮ファイルを展開することができます。また、gz形式のファイルを展開するのにgunzipコマンドがあります。gunzipコマンドは、gzipに単純に-dオプションがついたコマンドと同じコマンドになります。

コマンド例

または

コマンド例実行前

実行結果

標準出力に出力
(-cオプション)

-cオプションは、元のファイルはそのままの状態にしたまま、結果を標準出力に出力することができます。

コマンド例

コマンド例実行前

実行結果

-dオプションと組み合わせることで圧縮ファイルを展開しないまま、圧縮ファイルの内容を確認することができます。

また、圧縮ファイルの内容を確認するコマンドとしてzcatコマンドがあります。これはgzipコマンドに-dcオプションをつけたものと同じになります。

コマンド例

または

実行結果

元ファイルを残す
(-kオプション)

-kオプションはgzipコマンドでファイルを圧縮する場合に元のファイルをそのまま残すことができます。

コマンド例

コマンド例実行前

実行結果

-dオプションを用いて、圧縮ファイルを展開する場合も同様に元のファイルを残します。

コマンド例

コマンド例実行前

実行結果

圧縮時に情報を表示
(-vオプション)

ファイルを圧縮する時に、ファイル名や圧縮率等の情報を表示することができます。また、-lオプションや-tオプションでは、別の情報が表示されます。

コマンド例と実行結果

圧縮ファイルかどうかを確認
(-tオプション)

-tオプションは圧縮ファイルかどうかを確認することができます。圧縮ファイルの場合は何も表示されませんが、-vオプションと一緒に用いるとOKの文字が表示されます。

コマンド例と実行結果

ファイルの上書き
(-fオプション)

ファイルを圧縮または展開するとき、同じ名前のファイルがある場合、上書きするかどうかをプロンプトで尋ねられます。

-fオプションを用いると、プロンプトで上書きするかどうかを尋ねられずにファイルを上書きすることができます。

コマンド例

エラーメッセージを表示しない
(-qオプション)

-qオプションを用いるとエラーメッセージの表示をしません。

コマンド例と実行結果

上の例での本来のエラーメッセージは以下のようになります。
コマンド例と実行結果

圧縮ファイルの情報を確認
(-lオプション)

-lオプションは引数に圧縮ファイルを指定して、その圧縮ファイルの情報を表示します。情報は圧縮後のサイズ、圧縮前のサイズ、圧縮率、圧縮前のファイル名になります。

コマンド例と実行結果

-vオプションを追加すると、さらに圧縮メソッド、誤り検出符号のCRC、タイムスタンプの情報が追加されます。

コマンド例と実行結果

圧縮レベルを変更
(--fast,--bestオプション等)

--fastや--bestまたは-1,-2,-3,...,-9までの数字のオプションで圧縮レベルを変更できます。
--fastは-1に、--bestは-9に対応して、-1に近いほど圧縮の速度は上がりますが、圧縮率は下がります。-9に近いほど圧縮の速度は遅くなりますが、圧縮率は上がります。

特に圧縮レベルについてのオプションがない場合、デフォルトは-6になります。

コマンド例のmanual.txtは、gzipのmanページをファイルに出力したものになります。

コマンド例と実行結果

ディレクトリ内のファイルを再帰的に圧縮
(-rオプション)

-rオプションはディレクトリ内のファイルを再帰的に圧縮することができます。動作としてはファイルの場合はファイルを圧縮し、ディレクトリの場合はそのディレクトリの中に入っていき、そのディレクトリ内のファイルを同様に圧縮していきます。

コマンド例

コマンド例実行前

実行結果

圧縮前のファイル名やタイムスタンプの保持する
(-Nオプション)

-Nオプション(--nameオプション)を用いると、圧縮前のファイル名やタイムスタンプを保持します。
-Nオプションはファイルを圧縮するときのデフォルトになります。

コマンド例と実行結果

圧縮前のファイル名やタイムスタンプの保持しない
(-nオプション)

-nオプション(--no-nameオプション)を用いると、圧縮前のファイル名やタイムスタンプを保持しません。

-nオプションを用いた場合は、圧縮ファイル名から.gzのようなgzipの接尾辞を削除したファイル名になり、タイムスタンプは圧縮ファイルのタイムスタンプがコピーされます。これは圧縮前のファイル名が保持していないファイルを展開するときも同様になります。

-nオプションはファイルを展開するときのデフォルトになります。

コマンド例と実行結果

ディレクトリの圧縮について

gzipコマンドはディレクトリを圧縮することはできません。ディレクトリを圧縮しようとするとエラーメッセージが表示されて、ディレクトリについては無視されます。

コマンド例と実行結果

ディレクトリを圧縮する場合は、アーカイブファイルに変換してから圧縮します。また、アーカイブファイルにするコマンドとしてtarコマンドがよく使われます。

コマンド例と実行結果

tarコマンドの-cオプションはアーカイブファイルの作成で、-fオプションはアーカイブファイルの指定になります。また、tarコマンドの-zオプションを用いて、アーカイブファイルを作成すると同時にgzipで圧縮をすることもできます。

コマンド例と実行結果

gzipコマンドの-tオプションは圧縮ファイルかどうか確認することができ、-vオプションでその情報を表示することができます。

また、.tar.gz形式またはtgz形式(.tar.gzを簡略化した形式)のファイルの展開は

になります。tarコマンドがファイル形式を自動的に認識するので、アーカイブファイル作成に使用した-zオプションは必要ありません。

圧縮ファイルの連結について

ファイルの内容を連結させたいとき、gzipコマンドで圧縮させたファイルは、リダイレクトを用いて連結することが可能です。ただし、連結させた圧縮ファイルを再圧縮すると、ほとんどの場合は再圧縮したファイルの方がファイルサイズが小さくなります。

コマンド例と実行結果

コマンド例では再圧縮した場合、約半分のファイルサイズになっています。LZ77の圧縮アルゴリズムはデータの重複が多いとよりデータを圧縮できます。コマンド例では、同じファイルを連結したため、大幅にデータが圧縮されています。

参考

gzip - gzip: the data compression program

スポンサーリンク
スポンサーリンク