25ファイルの圧縮とアーカイブ及びバックアップコピー

25.ファイルの圧縮とアーカイブ及びバックアップコピー

圧縮

処理を行い、データサイズを元より小さくすること
ファイルスタンプは変わらない

可逆圧縮    数学的な方法でデータをまとめてサイズを小さくする(解凍してもデータが劣化しない)
非可逆圧縮   画像や音声などで、人に感知されにくいデータを削りサイズを小さくする(劣化する)


解凍(伸張)

圧縮されたデータを、もとの状態に復元すること
ファイルスタンプは変わらない


アーカイブ

複数のファイルやデータをひとまとめにして保存すること
アーカイブを行うソフト(Archiver)には、複数のデータを一つにまとめ、さらに圧縮を行う機能を備えているものもある




基本形 最も古くからある圧縮コマンドでファイルをcompress形式で圧縮する(拡張子は.Z

compress [オプション] ファイルのパス

-c  標準出力へ出力する(既存のファイルは変更されない)
-v  実行の状態を出力する
-d  圧縮ファイルを復元する(復元する拡張子は省略できる)



基本形 compress形式で圧縮されたファイルを解凍する

uncompress [オプション] ファイルのパス

-c  標準出力へ出力する
-v  実行の状態を出力する




基本形 最も広く思料されている圧縮コマンドでファイルをgzip形式で圧縮する(拡張子は.gz

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

-c  標準出力へ出力する
-v  実行の状態を出力する
-d  圧縮ファイルを復元する(復元する拡張子は省略できる)




基本形 gzip形式で圧縮されたファイルを解凍する

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

-c  標準出力へ出力する
-v  実行の状態を出力する



基本形 最近普及が進んでいる圧縮コマンドでファイルをbzip2形式で圧縮する(拡張子は.bz .bz2

bzip2 [オプション] ファイルのパス

-c  標準出力へ出力する
-v  実行の状態を出力する
-d  圧縮ファイルを復元する



基本形 bzip2形式で圧縮されたファイルを解凍する

bunzip2 [オプション] ファイルのパス

-c  標準出力へ出力する
-v  実行の状態を出力する




基本形 tar形式のアーカイブの作成と展開

tar [オプション] アーカイブファイルのパス [アーカイブに格納するファイルのパス]

-c  新しいアーカイブを作成します(メインオプション)
-x  アーカイブからファイルを取り出します(メインオプション)
-t  アーカイブの内容を一覧表示する

-v  実行の状態を出力する
ーf  アーカイブファイルのパス指定(オプションの最後に指定すること)



圧縮サイズ比較のため同じファイルを違う名前で作成(コピー)する



bashの履歴ファイルからコピーして同サイズのファイルを3つ作成した


compress、gzip、bzip2で圧縮する






CentOS(RedHut)にはcompressコマンドは入っていないので導入します (状況によってはやらなくてよい)

suでrootになってyumでインストール


# yum -y install ncompress

その後以下を実験





それぞれの圧縮コマンドに-dオプションを付けると解凍される


[guest@icv99 cmp]$ compress -dv hfile.Z
hfile.Z:  -- replaced with hfile
[guest@icv99 cmp]$ ls -al
合計 32
drwxrwxr-x   2 guest guest  4096  5月 23 10:22 2014 .
drwx------. 34 guest guest  4096  5月 23 09:49 2014 ..
-rw-------   1 guest guest  3182  5月 23 09:50 2014 bfile.bz2
-rw-------   1 guest guest  2958  5月 23 09:49 2014 gfile.gz
-rw-------   1 guest guest 13139  5月 23 09:50 2014 hfile

[guest@icv99 cmp]$ gzip -dv gfile.gz
gfile.gz:        77.7% -- replaced with gfile
[guest@icv99 cmp]$ ls -al
合計 44
drwxrwxr-x   2 guest guest  4096  5月 23 10:23 2014 .
drwx------. 34 guest guest  4096  5月 23 09:49 2014 ..
-rw-------   1 guest guest  3182  5月 23 09:50 2014 bfile.bz2
-rw-------   1 guest guest 13139  5月 23 09:49 2014 gfile
-rw-------   1 guest guest 13139  5月 23 09:50 2014 hfile

[guest@icv99 cmp]$ bzip2 -dv bfile.bz2
  bfile.bz2: done
[guest@icv99 cmp]$ ls -al
合計 56
drwxrwxr-x   2 guest guest  4096  5月 23 10:24 2014 .
drwx------. 34 guest guest  4096  5月 23 09:49 2014 ..
-rw-------   1 guest guest 13139  5月 23 09:50 2014 bfile
-rw-------   1 guest guest 13139  5月 23 09:49 2014 gfile
-rw-------   1 guest guest 13139  5月 23 09:50 2014 hfile
[guest@icv99 cmp]$





もとのファイルを残して圧縮したいときは-cオプション付きでリダイレクトする

[guest@icv99 cmp]$ gzip -vc gfile > gfile.gz
gfile:   77.7%
[guest@icv99 cmp]$


[guest@icv99 cmp]$ compress -vc hfile > hfile.Z
[guest@icv99 cmp]$


[guest@icv99 cmp]$ bzip2 -vc bfile > bfile.bz2
  bfile:    4.129:1,  1.937 bits/byte, 75.78% saved, 13139 in, 3182 out.
[guest@icv99 cmp]$


[guest@icv99 cmp]$ ls -al
合計 72
drwxrwxr-x   2 guest guest  4096  5月 23 11:33 2014 .
drwx------. 34 guest guest  4096  5月 23 09:49 2014 ..
-rw-------   1 guest guest 13139  5月 23 09:50 2014 bfile
-rw-rw-r--   1 guest guest  3182  5月 23 11:33 2014 bfile.bz2
-rw-rw-r--   1 guest guest  2958  5月 23 11:28 2014 gfile.gz
-rw-------   1 guest guest 13139  5月 23 09:49 2014 gfile
-rw-------   1 guest guest 13315  5月 23 11:31 2014 hfile
-rw-------   1 guest guest  5558  5月 23 11:31 2014 hfile.Z
[guest@icv99 cmp]$





以下のコマンドで圧縮ファイルの内容確認(解凍)ができる

[guest@icv99 cmp]$ compress -vcd hfile.Z

[guest@icv99 cmp]$ bzip2 -vcd bfile.bz2

[guest@icv99 cmp]$ gzip -vcd gfile.gz





それぞれの圧縮コマンドに対応した解凍コマンドでも内容確認(解凍)ができる

[guest@icv99 cmp]$ uncompress -vc hfile.Z

[guest@icv99 cmp]$ gunzip -vc gfile.gz

[guest@icv99 cmp]$ bunzip2 -vc bfile.bz2





tarでファイルをまとめます(このとき-fオプションの指定は最後に記述します)

[アーカイブに格納するファイルのパス]を指定し忘れないように(ご容赦願います)




tarファイルの中身を確認します





この状態でtarファイルを解凍すると既存ファイルが警告なく上書きされてしまうため新たにディレクトリを作って解凍する

-C オプションで展開先のディレクトリが指定できる






最近のtarコマンドではアーカイブして圧縮する一連の作業をオプション指定で実行できる

-Z  compressコマンドで圧縮/解凍する     拡張子は .tar.Z

-z  gzipコマンドで圧縮/解凍する         拡張子は .tar.gz(.tgz)

-j  bzip2コマンドで圧縮/解凍する        拡張子は .tar.bz2


ただしこのとき対応する圧縮コマンドがシステムで利用可能になっていなければならない

また-fオプションの前に指定しなければならない





tar-tenkaiにディレクトリを移動して

カレントディレクトリ上でいったんすべての圧縮を解く


[guest@icv99 tar-tenkai]$ gzip -dv gfile.gz
gfile.gz:        77.7% -- replaced with gfile
[guest@icv99 tar-tenkai]$


[guest@icv99 tar-tenkai]$ bzip2 -dv bfile.bz2  ( -f で強制上書き)
  bfile.bz2: done
[guest@icv99 tar-tenkai]$


[guest@icv99 tar-tenkai]$ compress -dv hfile
hfile.Z:  -- replaced with hfile
[guest@icv99 tar-tenkai]$


[guest@icv99 tar-tenkai]$ ls -al
合計 56
drwxrwxr-x 2 guest guest  4096  5月 23 13:45 2014 .
drwxrwxr-x 3 guest guest  4096  5月 23 13:32 2014 ..
-rw-rw-r-- 1 guest guest 13139  5月 23 11:33 2014 bfile
-rw------- 1 guest guest 13139  5月 23 09:49 2014 gfile
-rw------- 1 guest guest 13315  5月 23 11:31 2014 hfile
[guest@icv99 tar-tenkai]$




gzip2形式で圧縮アーカイブを作成する

[guest@icv99 tar-tenkai]$ tar -cvzf tfile.tgz .
./
./bfile
./gfile
./hfile
tar: .: 読み込んだファイルが変更されています
[guest@icv99 tar-tenkai]$ ls -al
合計 60
drwxrwxr-x 2 guest guest  4096  5月 23 13:49 2014 .
drwxrwxr-x 3 guest guest  4096  5月 23 13:32 2014 ..
-rw-rw-r-- 1 guest guest 13139  5月 23 11:33 2014 bfile
-rw------- 1 guest guest 13139  5月 23 09:49 2014 gfile
-rw------- 1 guest guest 13315  5月 23 11:31 2014 hfile
-rw-rw-r-- 1 guest guest  3558  5月 23 14:32 2014 tfile.tgz
[guest@icv99 tar-tenkai]$


ファイルサイズが非常に小さくなっています


【演習1】

圧縮したファイルをホームディレクトリに解凍するようコマンドを構成してください


[guest@icv99 tar-tenkai]$ ●●●●●●●●●●●●●●   P.125
./
./bfile
./gfile
./hfile

[guest@icv99 tar-tenkai]$ cd
[guest@icv99 ~]$ ls
DegitalSign           bfile         mem.txt          result2.txt
Desktop               cipher.jar    myFile.txt       secret-encrypt.sign
Documents             cmp           newfile.txt      secret.encrypt
Downloads             customer.txt  now.txt          secret.sign
MitsuyaKeiichiro.cer  error.txt     now2.txt         secret.xls
Music                 gfile         order.txt        secret1.encrypt
Pictures              hfile         outFile.txt      table.txt
Public                inFile.txt    outFile2.txt     test.txt
SuzukiJiro.cer        kanagawa      outFile2.txtcat  tomizu
Templates             mail.txt      password.sign    txt
Videos                mailp81.txt   password.txt
backupfile.txt        mailp83.txt   result1.txt
[guest@icv99 ~]$

 tar -xvzf tfile.tgz -C ~


最終的に重要なのは

tar -cvzf hogehoge.tgz .

tar -xvzf hogehoge.tgz -C /home/guest/hoge






圧縮と解凍のイメージ




アーカイブと圧縮/解凍のイメージ



30.シェルスクリプトによるバックアップコピー

【提出課題】 

guestユーザが
/home/guest ディレクトリを圧縮アーカイブしたバックアップファイルを作成し
ネットワーク上の別サーバにコピーするシェルスクリプトを作成してください。

・バックアップファイル名はguest-backup.tar.gzとします。

・シェルスクリプト名はguest-backup.sh とします。

・シェルスクリプト 実行の際のバックアップファイル転送先は192.168.112.7のictu17○○ユーザの
 ホームディレクトリ内にあるbackupディレクトリとします(〇〇は学籍番号とします )。

・シェルスクリプトを実行後シェルスクリプト自体(guest-backup.sh)もバックアップファイルの
 転送先と同様の場所に提出してください。