[Litz' UNION] > [Dal Segno] > [UNIXたん] > [その10] // [その9][その11]

UNIXたん その10

ファイルのバックアップ

何かの拍子に大切なファイルを消去してしまった、ということはありませんか?
UNIXでは、いちど失われたファイルはもう戻らないので、他のOSと較べてその可能性は高いといえるでしょう。みぢかなところにキケンがいっぱい。

そのような悲劇を起こさぬ為に、予めファイルのコピーを別な場所に保管しておくことをバックアップといいます。
本体とコピーを同じ場所に置いておくと火災や地震などで共倒れになってしまう可能性があるので、基本的には物理的に隔離すべきであるということを念頭に置いた上で、どのような媒体にバックアップすれば良いかを見ていきましょう。

(1) ハードディスク
大量のデータを格納するにはやはりこれでしょう。
異なるハードディスクにバックアップを取るというのが賢い選択です。
ただし、ハードディスクはある程度使うと壊れる、ということには注意。

(2) DVD-R, CD-R, MO, ZIP等
ハードディスクに次いで割安な記憶媒体であるといえます。
媒体が入手しやすいのも魅力ですが、1枚あたりの記憶容量に乏しいのが難。

(3) 磁気テープ
あまりに高価で個人向けではありませんが、1本あたりの記憶容量もかなり大きく、まさに業務用といったところ。
ただし、機敏な操作性は期待できないので、一定期間ごとに大量のバックアップを取る場合向け。

(4) フロッピーディスク
価格も低く入手は容易ですが、容量が小さいので本格的な記憶媒体には向きそうにありません。

複数のファイルを1つにまとめる

大量のバックアップを施す際は、通常、1つのファイルにまとめてから処理します。
理由としては操作が簡単になる、ファイル容量の無駄を省く、といったところでしょう。
この操作をするには tar, lha を用います。

tar

アーカイバ。ほぼ無害

第2回で簡単に説明していますが、ここで再びその機能をまとめておきます。
"tar" の後に続く命令文について。

【命令(以下の中から1つだけ指定する必要がある)】
c … tarファイルを新たに作る。
x … tarファイルを展開する。
t … tarファイルの内容を表示する。
r … tarファイルに追加する。

【オプション】
f … tarファイルを指定する。指定しなければ/dev/rst0
p … パーミッション、オーナー、グループの情報を保存する。
v … 処理内容を詳しく表示する。(慣れたらいらないかも)
z … gzipで圧縮/伸長する。
y … bzip2で圧縮/伸長する。
Z … compressで圧縮/伸長する。
O … 展開したファイルを標準出力に出力する。

lha

ファイルを1つにまとめ、圧縮します。ほぼ無害

lha a ***.lzh dir → dir以下を***.lzhにまとめます。
lha x ***.lzh → ***.lzhを展開します。

圧縮

ファイルを1つにまとめることにより扱いが便利になることは解ったので、今度はファイルサイズを小さくしてみましょう。
(注 : jpeg, mp3などは既に圧縮ファイルなので、これを圧縮しようとしないように!)
UNIXでよく使われるツールは、compress, gzip, bzip2, lhaなどです。

compress, uncompress

前述。

gzip, gunzip

前述。

bzip2

ファイルを圧縮します(優秀)。ほぼ無害

bzip2 file とすると、fileが圧縮されます。
圧縮後のファイル名は、圧縮前のファイルに拡張子「.bz2」を付けたものです。

-c オプションを付けると、圧縮結果を標準出力に書き出します。ファイル操作はしません。
-d オプションを付けると、ファイルを伸長します(bunzip2 と等価)。
-v オプションを付けると、圧縮率を出力します。

bunzip2

bzip2形式の圧縮ファイルを伸長します。ほぼ無害

bunzip2 file とすると、fileが伸長されます。bzip2 -d と等価。
伸長後のファイル名は、伸長前のファイルから拡張子「.bz2」を除いたものです。

-c オプションを付けると、伸長結果を標準出力に書き出します。ファイル操作はしません。

バージョン管理

コンピュータを使っていると、同じファイルを何度も修正することがあります。
それが大きいファイルであったりすると、修正作業のミスなどによって意図せぬ状況を生ずることがあります。
こうしたとき、以前の状態(=バージョン違い)のファイルを保存しておけば良いということになります。
ここでは、バージョン管理ソフトの RCS に慣れ親しんでみましょう。

概要

バージョン管理ファイル
管理対象のファイルに関するバージョン情報が入ったファイル。
初めてチェックインする時に自動的に作られます(RCS というディレクトリが存在すればその中、なければ同じディレクトリ)。
元のファイル名の末尾に ,v をつけたファイル名であることが大半。

ロック
バージョン管理ファイルに鍵をかけるようなものです。
ロックした本人しか新しいバージョンのファイルを登録することができません。
rcs -l とすると、ファイルをロックすることができます。

チェックイン
バージョン管理ファイルに「最新バージョンが出来ました」とファイルを登録すること。
ロックしてあるファイルしかチェックインできないので注意。

チェックアウト
バージョン管理ファイルからファイルを取り出すこと。
ロックしないで取り出すと、編集不可になることに注意。

おおまかな流れとしては
1. 管理したいファイルをバージョン管理ファイルにチェックインする
2. バージョン管理ファイルから使いたいファイルをロック付きでチェックアウトする
3. ファイルを編集する(→ 1へ戻る)
…という感じになるはずです。

使用例

良く解らないので、実際に使ってみるしかない。

[1] 適当なディレクトリに移動。

[2] 適当なファイルを作り、sample.txt とでも命名。中身はこんな感じで
Sample File
$Id$
$Date$

[3] バージョン管理ファイルを置くためのディレクトリ RCS を作る(mkdir RCS)。

[4] 初めてのチェックイン(ci -l sample.txt)。
ci -l は、チェックインした後、自動的にロック付きでチェックアウトするコマンド。
最初は「ファイルの内容を記述せよ」というメッセージが出るので、英語で記入すること。ピリオドのみの行を記入すれば終わります。
記入が終わると、バージョン1.1で登録されたとのメッセージが出ます。

[5] ディレクトリ RCS にバージョン管理ファイルがあることを確認(ls RCS)。
sanple.txt,v というファイルが出来ていればOK。

[6] チェックアウトされたファイルがあるかどうか確認(ls sample.txt)。

[7] チェックアウトされたファイルがどう変わったか見てみる(cat sample.txt)。
時間がグリニッジ標準時で記述されてない?

[8] sample.txt の中身を適当に書き換えてみる。$Id$, $Date$ はいじらないで

[9] 再びチェックイン&自動チェックアウト(今度は ci -l -zLT sample.txt)。
-zLT は、ローカル時間を用いて時間を記述するオプション。
ファイルの変更点を問うメッセージが出るので、英語で記入すること。ピリオドのみの(略)
すると、バージョン1.2でファイルが登録されます。

[10] チェックアウトされたファイルがどう変わったか見てみる(cat sample.txt)。
日本時間で時間が記述されてますよね!

[11] 戯れにsample.txtを消去してみる(rm sample.txt)。

[12] sample.txtを復活してみる(co -l -zLT sample.txt)。
バージョン管理ファイルは残っているので、チェックアウトすればファイルは復活します。
co は、指定しなければ最新バージョン(今回は1.2)を取り出します。

[13] 古いバージョンとの違いを見てみる(rcsdiff -zLT -r1.1 sample.txt)。
最新バージョンとバージョン1.1を比較せよ、というコマンドです。

[14] これまでにsample.txtに加えた編集の履歴を見る(rlog -zLT sample.txt)。
今までにチェックインの際に記述した変更内容などが出力されます。

[15] sample.txtに埋め込んであるキーワード(Id, Date)を取り出す(ident sample.txt)。
$Id$ や $Date$ と書いた部分が出力されます。

キーワードの埋め込み

先の使用例で用いたように、$Id$ や $Date$ などをファイルに埋め込んでおくことで、RCSの様々な情報を自動的に書き込むことができます。
どのようなキーワードがあるかは以下の通り。

$Id$ … ファイル名,バージョン,日時,作成者,状態,ロックした者。大体はこれで十分。
$Header$ … $Id$とほぼ同じだが、ファイル名がフルパスになるなど、やや冗長。
$Date$ … そのバージョンがチェックインされた日時。
$Revision$ … バージョン。
$Author$ … そのバージョンをチェックインしたユーザ。
$Locker$ … そのファイルをロックしているユーザ。
$RCSfile$ … ファイル名。
$Source$ … ファイル名(フルパス)。
$State$ … そのバージョンの状態。通常はExp。
$Log$ … 変更点として記述した内容。rlogで再現できるのであまり使われない。

ci

ファイルをチェックインします。ほぼ無害

コマンドは基本的に ci オプション ファイル名 と書きます。
オプションを付けないとファイルが登録/吸収されて元のファイルが消えますが、慌てず騒がずチェックアウト。

-l オプションを付けると、自動的にロック付きでチェックアウトします。
-u オプションを付けると、自動的にロック無しでチェックアウトします。
-zLT オプションを付けると、時間表記をローカル時間で行います(デフォルトはグリニッジ標準時)。
-r #(リビジョン番号) オプションを付けると、指定したリビジョン番号でチェックインします。
-f オプションを付けると、ファイルが変更されていなくても強制的にチェックインします。

co

ファイルをチェックアウトします。ほぼ無害

コマンドは基本的に co オプション ファイル名 と書きます。

-l オプションを付けると、ロック付きでチェックアウトします。
-u オプションを付けると、ロック無しでチェックアウトします。
-zLT オプションを付けると、時間表記をローカル時間で行います(デフォルトはグリニッジ標準時)。
-r #(リビジョン番号) オプションを付けると、指定した番号のバージョンでチェックアウトします。
-f オプションを付けると、既にファイルがあっても強制的にチェックアウトして上書きします。

ident

ファイル内のキーワードを読み出します。無害

rlog

バージョン管理ファイルのログや関連情報を出力します。無害

コマンドは基本的に rlog オプション ファイル名 と書きます。

-L オプションを付けると、ロックされたファイルのみ対象とします。
-R オプションを付けると、管理ファイル名を表示します。
-h オプションを付けると、関連情報を表示します。
-t オプションを付けると、関連情報を表示します。-h よりもやや冗長
-r #(リビジョン番号) オプションを付けると、指定した番号のバージョンの情報のみ表示します。

rcsdiff

ファイルのバージョン違いを比較します。無害

コマンドは基本的に rcsdiff -r番号1 -r番号2 ファイル名 と書きます。

番号を1つだけ与えると、番号1のバージョンと最新バージョンで比較します。
番号を与えないと、登録された最新バージョンといま存在するファイルで比較します。

rcs

バージョン管理ファイルの様々な性質を変更します。ほぼ無害

コマンドは基本的に rcs オプション ファイル名 と書きます。

-l オプションを付けると、ファイルをロックします。
-u オプションを付けると、ファイルのロックを解除します。
-L オプションを付けると、ロックを厳密に行うモードになります(デフォルト)。
-U オプションを付けると、ロック機構がほぼ無効なモードになります。ロックされなくてもチェックイン可能。

[Litz' UNION] > [Dal Segno] > [UNIXたん] > [その10] // [その9][その11]