1.下载安装safe-rm:
yum -y install wget tree
wget https://launchpadlibrarian.net/188958703/safe-rm-0.12.tar.gz
tar xf safe-rm-0.12.tar.gz -C /usr/local/
mv /usr/local/safe-rm-0.12/{safe-rm,rm} #改名
2.配置环境变量:
cat >/etc/profile.d/rm.sh <<EOF
#safe-rm
export RM_HOME=/usr/local/safe-rm-0.12
export PATH=\$RM_HOME:\$PATH
EOF
source /etc/profile.d/rm.sh
3.查看系统默认rm命令
[root@localhost]# which rm
alias rm='rm -i'
/usr/local/safe-rm-0.12/bin/rm
此时可以看到rm命令已经是我们安装的safe-rm了
4.配置我们需要避免删除的文件:
vim /etc/safe-rm.conf
/*
/tmp/1.txt
/tmp/aaa
/tmp/aaa/1.txt
/tmp/bbb/a.txt
/tmp/ccc
/tmp/ddd/a.txt
/tmp/eee/fff
/tmp/eee/fff/jjj/a.txt
5.创建这些测试文件:
rm -rf /tmp/*
mkdir /tmp/{aaa,bbb,ccc,ddd,eee}
touch /tmp/{1,2}.txt
touch /tmp/aaa/{1,2}.txt
touch /tmp/bbb/{a,b}.txt
touch /tmp/ccc/{a,b}.txt
touch /tmp/ddd/{a,b}.txt
mkdir -p /tmp/eee/fff/jjj/
touch /tmp/eee/fff/jjj/a.txt
6.查看文件
[root@hub safe-rm-0.12]# tree /tmp/
/tmp/
├── 1.txt
├── 2.txt
├── aaa
│ ├── 1.txt
│ └── 2.txt
├── bbb
│ ├── a.txt
│ └── b.txt
├── ccc
│ ├── a.txt
│ └── b.txt
└── ddd
│ ├── a.txt
│ └── b.txt
├── eee
│ └── fff
│ └── jjj
│ └── a.txt
7…测试删除操作:
[root@hub ~]# rm -rf /tmp/1.txt
safe-rm: skipping /tmp/1.txt
[root@hub ~]# rm -rf /tmp/2.txt
[root@hub ~]# rm -rf /tmp/aaa
safe-rm: skipping /tmp/aaa
[root@hub ~]# rm -rf /tmp/aaa/1.txt
safe-rm: skipping /tmp/aaa/1.txt
[root@hub ~]# rm -rf /tmp/aaa/2.txt
[root@hub ~]# rm -rf /tmp/bbb/a.txt
safe-rm: skipping /tmp/bbb/a.txt
[root@hub ~]# rm -rf /tmp/bbb/b.txt
[root@hub ~]# rm -rf /tmp/ccc
safe-rm: skipping /tmp/ccc
[root@hub ~]# rm -rf /tmp/ccc/a.txt
[root@hub ~]# rm -rf /tmp/ddd/a.txt
safe-rm: skipping /tmp/ddd/a.txt
[root@hub ~]# rm -rf /tmp/ddd
[root@hub ~]# rm -rf /tmp/eee/fff/jjj/a.txt
safe-rm: skipping /tmp/eee/fff/jjj/a.txt
[root@hub ~]# rm -rf /tmp/eee/fff
safe-rm: skipping /tmp/eee/fff
[root@hub ~]# rm -rf /tmp/eee/fff/jjj/
[root@hub ~]# rm -rf /*
safe-rm: skipping /boot
safe-rm: skipping /data
safe-rm: skipping /dev
safe-rm: skipping /etc
safe-rm: skipping /home
safe-rm: skipping /media
safe-rm: skipping /mnt
safe-rm: skipping /nfs
safe-rm: skipping /nfs1
safe-rm: skipping /nfs2
safe-rm: skipping /nfs3
safe-rm: skipping /opt
safe-rm: skipping /proc
safe-rm: skipping /root
safe-rm: skipping /run
safe-rm: skipping /srv
safe-rm: skipping /sys
safe-rm: skipping /tmp
safe-rm: skipping /usr
safe-rm: skipping /var
[root@hub ~]# ll
-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: 没有那个文件或目录
[root@hub ~]# ls
-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: 没有那个文件或目录
[root@hub ~]#
8.总结:可以看到只有我们加进/etc/safe-rm.conf的带绝对路劲的文件或者目录不会被删除,未加进的文件依旧可以正常删除。包括定义了/tmp/ddd/a.txt不能删除,但是/tmp/ddd依然可以被删除,所以如果定义到某个文件不能删除,那么一定要分别定义他的所在目录的每一层目录都不能删除,否则该文件依然有被删除的风险。就如同上面的rm -rf /* ,虽然加进去了,但是依旧可以执行rm -rf /* ,只是根下层的目录不能删除而已,这也算是缺陷吧,所以在/etc/safe-rm.conf里面需要加多层限制
vim /etc/safe-rm.conf
/*
/*/*
/*/*/*
/*/*/*/*
/tmp/eee
/tmp/eee/fff
/tmp/eee/fff/jjj
/tmp/eee/fff/jjj/a.txt
9.说明:
如果加进了/etc/safe-rm.conf的文件路径,我们依然想删除他怎么办,那就直接使用/bin/rm -rf /tmp/1.txt ,但是删除前一定要三思,毕竟数据恢复比较麻烦。
/lib64/ld-linux-x86-64.so.2这个链接文件会被删除,在虚拟机上测试的,加了/*/*/*/*/*/*
后这个文件还是被删除,系统依旧无法正常使用,物理机上没有测试过