連載
» 2016年08月09日 05時00分 UPDATE

Linux基本コマンドTips(39):【 gzip 】コマンド/【 gunzip 】コマンド――ファイルを圧縮する/伸張する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「gzip」コマンドと「gunzip」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、ファイルを圧縮する「gzip」コマンドと、ファイルを伸張する「gunzip」コマンドを解説します。

gzipコマンド/gunzipコマンドとは?

 gzipはファイルを圧縮するコマンド、gunzipは伸張する(圧縮ファイルを元に戻す)コマンドです。複数のファイルをまとめるという“アーカイブ機能”はなく、1つ1つのファイルに対して機能します。


gzipコマンド/gunzipコマンドの書式

gzip [オプション] ファイル

gunzip [オプション] ファイル

※[ ]は省略可能な引数を示しています



gzipコマンド/gunzipコマンドの主なオプション

 gzipコマンド/gunzipコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-1〜-9 圧縮レベル(「-1」が低圧縮率で高速、「-9」は高圧縮率だが低速)
-c --stdout,--to-stdout 結果をファイルではなく標準出力へ出力する(主にパイプで別コマンドに渡す際に使用)
-d --decompress,--uncompress 伸張を行う(gunzipのデフォルト)
-f --force ファイルを上書きする
-k --keep 圧縮前/伸張前のファイルを残す
-l --list 圧縮率と圧縮前のファイルサイズを表示する(圧縮ファイルに対して使用)
-N --name ファイル名とタイムスタンプを保持する
-n --no-name ファイル名とタイムスタンプを保持しない
-q --quiet エラーメッセージなどを表示しない
-r --recursive ディレクトリを再帰的に処理する
-S 拡張子 --suffix 拡張子 圧縮ファイルの拡張子を指定する(無指定時は「.gz」)
-t --test 圧縮ファイルをテストする
-v --verbose 処理内容を表示する


ファイルを圧縮する/伸張する

 複数のファイルをまとめることを「アーカイブ」、アーカイブからファイルを取り出すことを「展開」、ファイルサイズを小さくすることを「圧縮」、圧縮されたファイルを元に戻すことを「伸張」と呼びます。

 「zip」コマンド(第34回第36回)はアーカイブと圧縮を同時に行うのに対し、gzipコマンドは「圧縮」のみ、gunzipコマンドは「伸張」のみを行います。ちなみに、アーカイブには「tar」コマンドを使用します。

 gzipコマンドで圧縮されたファイルには、元のファイル名に拡張子「.gz」が追加されます。圧縮と同時に元のファイルは削除されるので、例えば「gzip list1.txt」は「list1.txt」を「list1.txt.gz」に変換する、という動作になります(画面1の赤枠部分)。

 逆に、gunzipコマンドで圧縮ファイル(.gz)を伸張した場合は、元の圧縮ファイルが削除されます。つまり、「gunzip list1.txt.gz」は「list1.txt.gz」を「list1.txt」に変換する、という動作になります(画面1の青枠部分)。

コマンド実行例

gzip list1.txt

(「list1.txt」を圧縮して「list1.txt.gz」にする)

gunzip list1.txt.gz

(「list1.txt.gz」を伸張して「memo.txt」にする)


画面1 画面1 赤枠部分が「gzip」コマンドによるファイルの圧縮処理で、青枠部分が「gunzip」コマンドによるファイルの伸張処理

 なお、gzipコマンド/gunzipコマンドで元のファイルを残したい場合は、「-k」オプションを使用します。



ディレクトリ内のファイルをまとめて圧縮する

 「gzip -r ディレクトリ」で、指定したディレクトリ下の全てのファイルを“1つずつ”圧縮します(画面2)。

 例えば、テキストファイルの場合、「less」コマンドのようにgzip形式に対応しているものがあります。使用頻度が低く、参照するだけのファイルであれば、gzip形式でまとめて圧縮しておくことで、ディスクスペースを節約できます。

コマンド実行例

gzip work/

(「work」ディレクトリ下の全てのファイルを圧縮する)


画面2 画面2 「-r ディレクトリ」を指定すると、指定したディレクトリ下の全てのファイルを圧縮できる

 この方法が用いられているのが「man」コマンドで参照するファイルで、デフォルトでは「/usr/share/man」下にgzip形式で圧縮されて保存されています。昨今のPCの性能であれば、圧縮ファイルでも内容の表示速度はそれほど遅くなりませんが、manコマンドでよく参照するファイルをgunzipコマンドで伸張しておくと、表示が若干高速化されるかもしれません。



gzipコマンドとgunzipコマンドの実体は?

 gzipとgunzipは、実際は“同じコマンド”です。「gzip」という名前で実行されたら圧縮を行い、「-d」オプション付き、あるいは「gunzip」という名前で実行されたら伸張を行います。

 CentOSの場合、gunzipは「gzip -d」を呼び出すシェルスクリプトになっていますが、「ハードリンク」になっているLinuxディストリビューションもあります。



より新しいbzip2コマンド/bunzip2コマンド

 gzip/gunzipと同じように使えるコマンドに、「bzip2」コマンドと「bunzip2」コマンドがあります。bzip2はgzipよりも新しいコマンドで、ファイルの圧縮率も高くなっています。

 再帰的に圧縮する「-r」オプションはありませんが、元のファイルを残す「-k」オプションなどは共通です。圧縮したファイルの拡張子は、gzipの「.gz」に対し、bzip2では「.bz2」になります。

 ちなみに、gzip/gunzipよりも古いコマンドに「compress」「uncompress」があり、「.Z」という拡張子が使われていました。この2つのコマンドはほとんど使用されておらず、CentOSにもデフォルトではインストールされていません。



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。