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 @   狂奔的骆驼  阅读(531)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
点击右上角即可分享
微信分享提示