シンボリックリンクを用いた設定ファイルのバックアップ

cpコマンドには、シンボリックリンクそのものではなくリンク先をコピーする「-L」(もしくは「--dereference」)コマンドがある。これを利用して/etc以下の設定ファイルをバックアップするシェルスクリプトを考えてみた。
普段から/etc/以下のファイルに変更を加えたときは、すかさず~/save/からシンボリックリンクをはっておく。例えば/etc/sysconfig/networkを変更したら、以下の用にリンクしておく。


$ []ln -s /etc/sysconfig/network ~/save/[]
さらにautofs(automount)の設定の通りバックアップ先のリムーバブルディスクをautofsで自動的に/misc/hoge2にマウントするよう設定しておく。

#!/bin/bash

if [ -a /misc/hoge2 ]; then {      #リムーバブルディスクが接続されていれば
 #バックアップされたファイルがどこにあったかをlink.lstに記録
 find /home/tks/save/ -type l -exec ls -l {} \; \
  | cut -d$' ' -f8-10 |sed 's@^\./@@'  > /home/tks/save/link.lst ;
 #リンク先のファイルとlink.lstを/misc/hoge2/fedora8/以下に保存
 sudo cp -Lpruv /home/tks/save /misc/hoge2/fedora8/ ;
 #その他rsyncを用いた雑多なバックアップ
 rsync -aL --delete --exclude 'Cache' --stats /home/tks/.mozilla/firefox/myprofile /misc/hoge2/fedora8/ ;
 rsync -aL --delete --stats /home/tks/.fluxbox  /misc/hoge2/fedora8/ ;
 return 0; 
}

else echo 'error: backup drive is missing.' ;  #リムーバブルディスクが接続されていなければ
 return 1;
fi

他のcpのオプション

-p
ファイルのパーミッション、所有者、タイムスタンプを保存
-r
再帰的にコピー
-u
ファイルが新しいときだけコピー
-v
作業の詳しい表示

制限

  • バックアップ対象のファイル名にスペースが含まれていると正しく動作しない。
  • link.lstという名前のファイルはバックアップできない。