1、首先重命名默认的删除命令
mv /usr/bin/rm /usr/bin/rm_raw
2、替换rm
vim /usr/bin/rm
写入如下内容:
#!/bin/sh # file name is : /opt/remove.sh # mv /bin/rm /bin/rm_raw # ln -s /opt/remove.sh /bin/rm # chmod 555 /bin/rm # author: Mr.Tang # email: geektcp@163.com # date : Sat Jun 5 16:04:30 CST 2019 # 这个脚本用于替换系统原有rm命令,防止误删除 # 目前支持通配符批量删除 # 支持-参数,但是无效,也不提示警告(没必要) # 不能删除文件名中带有空格的文件,这类文件要先重命名 # 删除不存在的文件不会异常,否则编译安装某些软件时会异常 # awk那句用于取出参数的第一个字符,排除-,但不排除* # 不能用${thy:0:1}取出来,因为遇到通配符*会异常 # 注意外面必须带双引号,否则删除不存在的文件时会报错 TRASH_DIR="/data/.trash" date=`date +%Y-%m-%d--%H-%M-%S` mkdir -p ${TRASH_DIR}/${date} for thy in $*; do if [ $thy == ‘-i‘ ];then continue elif [ "`echo ${thy} |awk ‘{print substr($0,1,1)}‘`" != ‘-‘ ];then if [[ -f $thy || -d $thy || -L $thy ]];then mv -f $thy $TRASH_DIR/${date}/ fi fi done
4、最后进行授权
chmod 755 /usr/bin/rm
5、脚本解析
这个脚本最关键也是最巧妙的一行是:
"`echo ${thy} |awk ‘{print substr($0,1,1)}‘`" != ‘-‘
这行就是在遍历参数时,遇到带有横杠-的参数就跳过,
这样就所有要删除的文件或者目录都mv到指定的回收目录下了。
6、总结
分享出来是因为我不只一次踩过这个坑,即便我对linux非常熟悉。往往越熟练的人操作越快,越容易犯错。
通过上面的解决方案,不管怎么误操作rm都会进入回收站:
/data/.trash
当哪天磁盘比较满的时候,需要清空回收站就用下面这个命令:
rm_raw /data/.trash
这样避免了一直经常使用linux自带的rm命令,这个命令删除的文件难以恢复。
这个目录的文件按照删除时间进行存放。
不管你用 rm -rf xxx xxx2 xx3
还是rm -r xx1 xx2 x3
或者 rm -f xx1 xx2 xx3
这个方案都可以完美适应各种用法。
这个方案可以完美解决初级,中级,高级Linux系统管理员的误操作。是本人长期使用linux的最佳实践。
即便是非常熟悉linux的高手,也可能有天误删除,导致费时费力的麻烦事情。通过rm -rf删除的文件夹,很难通过lsof恢复。默认这个命令几乎是不可逆。
一个优秀的技术工程师,就应该养成良好的习惯,使用这个解决方案,可以让你高枕无忧。