19.7.1 コマンドラインからの圧縮

gzipで圧縮

UNIX でよく用いられる圧縮と伸張のコマンドとして, gzipgunzipがあります.これらは,GZIPという形式の圧縮と伸張を行うコマンドです. ここでは,この2つのコマンドを使って,圧縮と伸張を試してみましょう.

まず,次の3つのファイルを自分のディレクトリにダウンロードしてください. それぞれのファイル名を,マウスの右ボタンでクリックして,出てきたメニューから,リンク先のファイルを別名でダウンロードを選びます (ダウンロード先は自分で適当に決めましょう).

filefilenull.txt

00(16) のバイト (ASCII で NUL) のみのファイル

filefiletext.txt

普通の ASCII テキストファイル (主にアルファベットと空白)

filefilerand.txt

1 から 99 までのランダムなバイトが詰まったファイル

ls コマンドによって, どのファイルも大きさが 1000バイトであることが分かります.

promptls -l return2 -rw------- 1 yama teacher 1000 Apr 19 19:55 filenull.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filerand.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filetext.txt

各ファイルfilenameについて,以下のいずれかのコマンドを実行することで, ファイルの内容を確認できますから試してみましょう. また,Emacs を用いても,それぞれのファイルの内容を確認できます.

promptless -f filename return2 promptod -a filename return2

gzip コマンドは,与えられたファイル filename を圧縮して, filename.gz というファイルを生成します. 次のように,3つのファイルを圧縮してから,サイズを比較してみましょう.

promptgzip filenull.txt return2 promptgzip filerand.txt return2 promptgzip filetext.txt return2 promptls -l return2 -rw------- 1 yama teacher 42 Apr 19 19:55 filenull.txt.gz -rw------- 1 yama teacher 892 Apr 19 19:55 filerand.txt.gz -rw------- 1 yama teacher 560 Apr 19 19:55 filetext.txt.gz

元のファイルはいずれも同じ1000バイトであったのに, 00(16) のバイトのみが入っていた単調なファイル filenull.txt は非常に小さくなり, ランダムなバイトの入っていたファイル filerand.txt はそれほど小さくなっていないのがわかります.

gzip コマンドによる圧縮は,損失のない圧縮ですので, 伸張することが可能です. 伸張用のコマンド gunzip によって, 圧縮されたファイル filename.gz を元のファイル filename に戻します.

promptgunzip filenull.txt.gz return2 promptgunzip filerand.txt.gz return2 promptgunzip filetext.txt.gz return2 promptls -l return2 -rw------- 1 yama teacher 1000 Apr 19 19:55 filenull.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filerand.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filetext.txt

tar でまとめて圧縮

また,tarコマンドを使うと,複数のファイルを1つにまとめてgzipによる圧縮をすることができます.

cvzfというオプションを指定して使います. cがまとめるという操作を指定し,vはどのファイルをまとめているかの情報を出力します. zがgzipによる圧縮であることを表します. fの後に,対象となるファイルを指定します.

以下のようにして,file.tar.gzというファイルに3つのファイルをまとめて圧縮します.

prompttar cvzf file.tar.gz filenull.txt filerand.txt filetext.txt return2 filenull.txt filerand.txt filetext.txt promptls -l return2 -rw------- 1 yama teacher 1681 Apr 19 19:55 file.tar.gz -rw------- 1 yama teacher 1000 Apr 19 19:55 filenull.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filerand.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filetext.txt

ファイル名やファイルのつなぎ目を表す情報などが含まれるために,ファイルサイズが,それぞれのファイルを圧縮して足し合わせたもの(42+892+560=1494)よりは,大きくなるようです.

元のファイルを取り出すには,オプションで,cの代わりにxを指定します.

promptrm filenull.txt filerand.txt filetext.txt return2 promptls -l return2 -rw------- 1 yama teacher 1681 Apr 19 19:55 file.tar.gz prompttar xvzf file.tar.gz return2 filenull.txt filerand.txt filetext.txt promptls -l return2 -rw------- 1 yama teacher 1681 Apr 19 19:55 file.tar.gz -rw------- 1 yama teacher 1000 Apr 19 19:55 filenull.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filerand.txt -rw------- 1 yama teacher 1000 Apr 19 19:55 filetext.txt