safe-rmはrmのラッパコマンド。あらかじめ削除されてはまずいファイルやディレクトリを登録しておき(blacklist)、それらを削除しようとしたときは警告が表示される。ここではUbuntu8.10を使って行った。
マニュアルによると、/usr/local/bin/にrmとしてシンボリックリンクをはって使う記述があるので、それにしたがってやってみる。
パスを確認して/usr/local/binが/usr/binより前にあることを確認する。
$ echo $PATH
シンボリックリンク/usr/local/bin/rmを作成する。
$ sudo ln -s /usr/bin/safe-rm /usr/local/bin/rm
確認
$ which rm
/usr/local/bin/rm
$ file /usr/local/bin/rm
/usr/local/bin/rm: symbolic link to `/usr/bin/safe-rm'
safe-rmはrmと同じオプションを受け入れることが出きるので使うときにはrmコマンドと同じように使える。blacklistを登録するには、/etc/safe-rm.confか~/.safe-rmに記述する。1行に1ファイルor1ディレクトリを記述する。デフォルト状態(=空状態)では重要なファイルが適用されるので、このファイルを作らなくてもいい。デフォルトのblacklistは以下のようになっている。
/bin
/boot
/dev
/etc
/home
/initrd
/lib
/proc
/root
/sbin
/sys
/usr
/usr/bin
/usr/include
/usr/lib
/usr/local
/usr/local/bin
/usr/local/include
/usr/local/sbin
/usr/local/share
/usr/sbin
/usr/share
Ubuntuではインストール時に/etc/safe-rm.confが作られており以下のようになっている。
/bin
/boot
/dev
/etc
/home
/initrd
/lib
/proc
/root
/sbin
/sys
/usr
/usr/bin
/usr/include
/usr/lib
/usr/local
/usr/local/bin
/usr/local/include
/usr/local/sbin
/usr/local/share
/usr/sbin
/usr/share
/usr/src
/var
エントリがディレクトリの場合は、そのディレクトリのみが対象で配下のファイルは関係ないようだ。
実験。
/etc/iranaifile と /etc/iranaidir を/etc/safe-rm.conf追加する
$ sudo vi /etc/safe-rm.conf
作成して削除してみる。
$ sudo touch /etc/iranaifile
$ sudo mkdir /etc/iranaidir
$ sudo rm /etc/iranaifile
Skipping /etc/iranaifile
$ sudo rm -rf /etc/iranaidir/
Skipping /etc/iranaidir/
$