シンボリックリンクを用いた設定ファイルのバックアップ
cpコマンドには、シンボリックリンクそのものではなくリンク先をコピーする「-L」(もしくは「--dereference」)コマンドがある。これを利用して/etc以下の設定ファイルをバックアップするシェルスクリプトを考えてみた。
普段から/etc/以下のファイルに変更を加えたときは、すかさず~/save/からシンボリックリンクをはっておく。例えば/etc/sysconfig/networkを変更したら、以下の用にリンクしておく。
さらにautofs(automount)の設定の通りバックアップ先のリムーバブルディスクをautofsで自動的に/misc/hoge2にマウントするよう設定しておく。
$ []ln -s /etc/sysconfig/network ~/save/[]
#!/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のオプション
制限
- バックアップ対象のファイル名にスペースが含まれていると正しく動作しない。
- link.lstという名前のファイルはバックアップできない。