Linux防止rm误删除的最佳实践

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恢复。默认这个命令几乎是不可逆。

 

一个优秀的技术工程师,就应该养成良好的习惯,使用这个解决方案,可以让你高枕无忧。

 

 

 

posted @ 2021-06-05 16:21  狂奔的骆驼  阅读(472)  评论(0编辑  收藏  举报