Linuxコマンド gzip(gzip形式アーカイブに圧縮/展開する)
指定したファイル・ディレクトリをLempel-Zivコーディング(LZ77)を利用して圧縮/展開したり、.gzや.z等の拡張子が付いた圧縮ファイルを解凍するgzip/gunzipコマンドの概要と使用方法を記録しています。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
概要・使用方法
Zipは汎用的でありますが、Linuxでは多くの場合GNUにより提供されているGZip(.gz)形式が使われています。引数を区切り複数のファイルを指定すると、それぞれ個別で圧縮します。また、圧縮されたファイルは、ファイルの所有権/パーミッションを変更せず、.gz拡張子を付加して置き換えられます。圧縮ファイルを指定しない場合、もしくは「-」を与えた場合は、標準入力からの入力を圧縮します。
gzipコマンド自体はアーカイブ機能はないので、引数として渡されたファイルが個別に圧縮されファイルとなります。ただし、ファイルをディレクトリにまとめ-rオプションを渡すことで、1つのファイルにまとめることは可能です。
書式
圧縮
$gzip [オプション] [ファイル名・・・]
展開(解凍)
.gzや.zなどの圧縮ファイル拡張子がついたファイルを展開します。また、zipやcompressで圧縮されたファイルも展開できます。古い情報では、gzip圧縮ファイルの展開にzcatを使うように記述されていることがあります。「zcat 圧縮ファイル名」と「gzip -d 圧縮ファイル」と同じ機能になります。
$gunzip [オプション] [ファイル名・・・]
gzipにより圧縮されたファイルはGNU Zip形式となりZip形式とは互換性がありません。よってunzipコマンドで伸張することができません。
オプション
-c, –stdout | 標準出力に出力して元ファイルを残す |
-d, –decompress | 展開する |
-f, –force | 既に圧縮するファイルと同じファイル名が存在した場合、そのファイルを上書きして 圧縮/展開する |
-k, –keep | |
-l, –list | 「圧縮されたファイルのサイズ」「伸張されたファイルのサイズ」「圧縮率」 「伸張されたファイル名」の圧縮ファイル情報を表示する |
-n | 圧縮時に圧縮前ファイルのファイル名/タイムスタンプを保存しない |
-N | 圧縮時に圧縮前のファイル名/タイムスタンプを保存する(デフォルト) |
-r, –recursive | 指定したディレクトリ及びその下にあるファイルも圧縮する |
-s 拡張子 –suffix 拡張子 | 圧縮拡張子にgz形式の代わりに指定した拡張子を利用する。「.」は自動で付属されない |
-数値 | 1~9までの数値を指定する。数値が低いと処理速度は速いが圧縮率が低くなる。 数値が高いと処理速度は落ちるが圧縮率は高くなる。 |
【基本使用例】
ファイルを圧縮する
$gzip test1.txt
実行結果
[centos@work sample]$ls -la
total 12
drwxrwxr-x 2 centos centos 4096 Feb 16 11:36 .
drwx------ 9 centos centos 4096 Feb 16 11:36 ..
-rw-rw-r-- 1 centos centos 5 Feb 16 11:36 test.log
[centos@work sample]$gzip test.log
[centos@work sample]$ls
test.log.gz
ファイルを解凍する
$gzip -d test.log.gz
実行結果
[centos@work sample]$ls
test.log.gz
[centos@work sample]$gzip -d test.log.gz
[centos@work sample]$ls
test.log
ディレクトリ以下のファイルすべて圧縮する
-rのオプションを使用することで、特定のディレクトリ配下すべて圧縮することができます。
サンプル
$gzip -rv dir1 dir2
実行結果
[centos@work sample]$ls
dir1 dir2
[centos@work sample]$gzip -rv dir1 dir2
dir1/http1.log: -40.0% -- replaced with log1/http1.log.gz
dir2/http2.log: -40.0% -- replaced with log2/http2.log.gz
ディレクトリ以下のファイルすべて展開する
-drのオプションを使用することで、特定のディレクトリ配下すべて展開することができます。
サンプル
$gzip -rv dir1 dir2
実行結果
[centos@work sample]$tree
.
├── dir1
│ └── http1.log.gz
└── dir2
└── http2.log.gz
2 directories, 2 files
[centos@work sample]$gzip -drv dir1 dir2
dir1/http1.log.gz: -100.0% -- replaced with dir1/http1.log
dir2/http2.log.gz: -66.7% -- replaced with dir2/http2.log
[centos@work sample]$tree
.
├── dir1
│ └── http1.log
└── dir2
└── http2.log
2 directories, 2 files
[centos@work sample]$
圧縮ファイルの情報を表示する
サンプル
$gzip -l http.log.gz
実行結果
[centos@work sample]$ls
dir1 dir2 http.log.gz
[centos@work sample]$gzip -l http.log.gz
compressed uncompressed ratio uncompressed_name
33 4 -50.0% http.log
[centos@work sample]$
圧縮ファイルの拡張子を指定する
サンプル
$gzip -S test http.log
実行結果
[centos@work sample]$gzip -S test http.log
[centos@work sample]$ls
dir1 dir2 http.logtest
[centos@work sample]$
圧縮率を変えて圧縮する
圧縮率を1から9で指定できる。以下の例では、圧縮率を一番下げて圧縮している。
サンプル
$gzip -5 test http.log
実行結果
[centos@work sample]$gzip -1 test.txt
drwxrwxr-x 2 centos centos 4096 Feb 20 09:12 .
drwx------ 9 centos centos 4096 Feb 20 09:12 ..
-rw-rw-r-- 1 centos centos 33 Feb 20 09:12 test.txt.gz
[centos@work sample]$ls -l
total 4
-rw-rw-r-- 1 suna suna 33 Feb 20 09:12 test.txt.gz
[centos@work sample]$