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)もバックアップファイルの
転送先と同様の場所に提出してください。