パーソナルツール
現在の場所: ホーム Tips コマンド 圧縮と解凍 gzip

gzip

gzipの使用方法です。

検証環境

OS:CentOS_5.1

gzipの使いかた

「.gz」という拡張子をもったファイルを見たことがあると思いますが、この「.gz」といった拡張子がついている ファイルは一般的に「gzip」コマンドを使用して圧縮されたファイルとなっています。

この、gzipコマンドを使用してのファイル圧縮/解凍(伸長)の方法を解説していきます。

書式

gzip [オプション] [圧縮対象ファイル]

オプション
  • -r サブディレクトリ内のファイルも圧縮する
  • -v 詳細情報を表示させる
  • -c 標準出力に書き出す
  • -f 強制上書きの指定
  • -数字 圧縮レベルの指定 1-9 のレベルがあり9が圧縮率が最大となるが、CPU使用率も最大となる。

圧縮

「gzip」10MBのテスト用ファイルを用意したので、それ使ってファイルの圧縮や解凍を 実際に行っていきます。

テスト用ファイル
[tamo@www ~]$ gzip 10MB

元ファイルは残りませんので(圧縮ファイルのみとなります)、注意してください。

[tamo@www ~]$ ls -la 10MB*
-rw-rw-r-- 1 tamo tamo 10213 6月 23 16:35 10MB.gz

元のファイルをそのままにしておきたいときは「-c」オプションを使用して圧縮を行います。

[tamo@www ~]$ gzip -c 10MB > 10MB.gz

元ファイルが残っていることが確認できます。

[tamo@www ~]$ ls -la 10MB*
-rw-rw-r-- 1 tamo tamo 10485760 6月 23 16:35 10MB
-rw-rw-r-- 1 tamo tamo 10213 6月 24 10:54 10MB.gz
圧縮ファイルの確認

fileコマンドで確認してみます。

[tamo@www ~]$ file 10MB.gz 
10MB.gz: gzip compressed data, was "10MB", from Unix, last modified: Mon Jun 23 16:35:26 2008
詳細情報付き圧縮

-v コマンドを使用することで、圧縮時に詳細情報を表示させることができます。

[tamo@www ~]$ gzip -v 10MB
10MB: 99.9% -- replaced with 10MB.gz

圧縮後のファイルはこんな感じです。

[tamo@www ~]$ ls -la 10MB.gz 
-rw-rw-r-- 1 tamo tamo 10213 6月 23 16:35 10MB.gz
圧縮ファイルの詳細情報

「-l」オプションを指定することで、圧縮されたファイルの詳細情報を確認することが出来ます。 「圧縮されたファイルの大きさ」「解凍(伸長)後のファイルサイズ」「圧縮率」「解凍(伸長)後のファイル名」を確認することが出来ます。

[tamo@www ~]$ gzip -l 10MB.gz 
compressed uncompressed ratio uncompressed_name
10213 10485760 99.9% 10MB
圧縮レベルの指定

圧縮率 1ー9のレベルがあります。
デフォルト値は6で1は1番圧縮率が低いですが、圧縮速度が速くて 9は1番圧縮率が高いですが、圧縮速度が遅いです。

実際に、圧縮後のサイズを比べてみます。
bmpとjpgのイメージファイル合計81ファイルをtarでアーカイブした 「image.tar」ファイルを圧縮してみます。

[tamo@www ~]$ ls -lh image.tar 
-rw-rw-r-- 1 tamo tamo 87M 6月 24 16:56 image.tar
[tamo@www ~]$ gzip -cv1 image.tar > image_1.tar.gz
image.tar: 93.4%
[tamo@www ~]$ gzip -cv9 image.tar > image_9.tar.gz
image.tar: 94.7%
圧縮後サイズ比較

-9で圧縮したファイルのほうがサイズが小さいことが確認できます。

[tamo@www ~]$ ls -lh image*
-rw-rw-r-- 1 tamo tamo 87M 6月 24 16:56 image.tar
-rw-rw-r-- 1 tamo tamo 5.8M 6月 24 16:57 image_1.tar.gz
-rw-rw-r-- 1 tamo tamo 4.6M 6月 24 16:57 image_9.tar.gz
[tamo@www ~]$ ls -la image*
-rw-rw-r-- 1 tamo tamo 90603520 6月 24 16:56 image.tar
-rw-rw-r-- 1 tamo tamo 6023500 6月 24 16:57 image_1.tar.gz
-rw-rw-r-- 1 tamo tamo 4772222 6月 24 16:57 image_9.tar.gz

(圧縮率の違いは、圧縮するファイルによって違ってきますので参考程度ですが。)

解凍

圧縮したファイルを解凍(伸長)する方法です。

gzipコマンドに「-d」オプションをつけることで、圧縮されたファイルを解凍することができます。
実際にgzipで圧縮されたファイルを解凍してみます。
元ファイルは残りませんので(解凍されたファイルのみとなります)、注意してください。

[tamo@www ~]$ gzip -d 10MB.gz 
[tamo@www ~]$ ls -lh 10MB
-rw-rw-r-- 1 tamo tamo 10M 6月 23 16:35 10MB
元のファイルをそのままにしておきたい場合

元のファイルをそのままにしておきたいときは「-c」オプションを追加して解凍を行います。

[tamo@www ~]$ gzip -dc 10MB.gz > 10MB
[tamo@www ~]$ ls -la 10MB*
-rw-rw-r-- 1 tamo tamo 10485760 6月 24 13:18 10MB
-rw-rw-r-- 1 tamo tamo 10213 6月 23 16:35 10MB.gz

応用編

再起圧縮

「-r」オプションを使用することで、ディレクトリ内のファイルを一括圧縮することができます。
テスト用に作成した10ファイルを「-r」オプションを使用して一気に圧縮してみます。

テスト用ファイル
[tamo@www ~]$ ls -la test/
合計 97856
drwxrwxr-x 2 tamo tamo 4096 6月 24 10:31 .
drwx------ 58 tamo tamo 4096 6月 24 10:31 ..
-rw-rw-r-- 1 tamo tamo 117 6月 24 10:31 create-testfiel.rb
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_0
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_1
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_2
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_3
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_4
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_5
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_6
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_7
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_8
-rw-rw-r-- 1 tamo tamo 10000000 6月 24 10:31 test-flie_9
一括圧縮圧縮

では、実際に圧縮してみます。

[tamo@www ~]$ gzip -rv ./test/
./test//test-flie_7: 99.9% -- replaced with ./test//test-flie_7.gz
./test//test-flie_1: 99.9% -- replaced with ./test//test-flie_1.gz
./test//test-flie_6: 99.9% -- replaced with ./test//test-flie_6.gz
./test//test-flie_3: 99.9% -- replaced with ./test//test-flie_3.gz
./test//test-flie_4: 99.9% -- replaced with ./test//test-flie_4.gz
./test//test-flie_9: 99.9% -- replaced with ./test//test-flie_9.gz
./test//create-testfiel.rb: 13.7% -- replaced with ./test//create-testfiel.rb.gz
./test//test-flie_2: 99.9% -- replaced with ./test//test-flie_2.gz
./test//test-flie_8: 99.9% -- replaced with ./test//test-flie_8.gz
./test//test-flie_0: 99.9% -- replaced with ./test//test-flie_0.gz
./test//test-flie_5: 99.9% -- replaced with ./test//test-flie_5.gz
圧縮ファイルの確認

lsコマンドでディレクトリ内を確認すると、全てのファイルが圧縮されていることが確認できます。

[tamo@www ~]$ ls -la test/
合計 136
drwxrwxr-x 2 tamo tamo 4096 6月 24 10:31 .
drwx------ 58 tamo tamo 4096 6月 24 10:31 ..
-rw-rw-r-- 1 tamo tamo 138 6月 24 10:31 create-testfiel.rb.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_0.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_1.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_2.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_3.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_4.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_5.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_6.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_7.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_8.gz
-rw-rw-r-- 1 tamo tamo 9749 6月 24 10:31 test-flie_9.gz
zcat

「zcat」コマンドを使用すると、圧縮されたファイルを解凍せずにファイルの中身を見ることが出来ます。

圧縮ファイル内容の確認

実際に「zcat」コマンドを使用して、圧縮されたファイルの中身を覗いてみましょう。

[tamo@www ~]$ zcat test/create-testfiel.rb.gz 
#!/usr/bin/ruby
10.times { |i|
system("dd" , "if=/dev/zero" , "of=test-flie_#{i}" , "bs=1000" , "count=10000")
}

このような感じに、解凍せずにファイルの中身を見ることができます。

このコマンドは「gzip -dc」と同じような動作をしますので、このコマンドを使用して圧縮ファイルを 解凍することもできたりします。

zcatで解凍

では、実際に「zcat」コマンドを使用して圧縮ファイルを解凍してみます。

[tamo@www test]$ zcat create-testfiel.rb.gz > create-testfiel.rb
解凍されたファイルの確認

本当にファイルが解凍されたのか確認してみます。

[tamo@www test]$ ls -la create-testfiel.rb*
-rw-rw-r-- 1 tamo tamo 117 6月 30 17:15 create-testfiel.rb
-rw-rw-r-- 1 tamo tamo 138 6月 24 10:31 create-testfiel.rb.gz

正常に解凍されているか、ファイルの中身を見てみます。

[tamo@www test]$ cat create-testfiel.rb
#!/usr/bin/ruby
10.times { |i|
system("dd" , "if=/dev/zero" , "of=test-flie_#{i}" , "bs=1000" , "count=10000")
}

正常にファイルの解凍が出来ていることが確認できました :-)