zoukankan      html  css  js  c++  java
  • 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恢复。默认这个命令几乎是不可逆。

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

     
    -------------------------
    技术不在于多么高超先进巧妙,而在于要有现实价值!!!
  • 相关阅读:
    Linux常用命令英文全称与中文解释
    输入一个URL之后发生了什么?
    四种基本的数据结构
    关于深拷贝
    TCP的三次握手和四次挥手
    利用正则表达式去掉字符串的前后空格
    用canvas画一个等腰三角形
    三种隐藏元素方法的区别
    消息中间件-activemq安全机制
    Netty学习(十)-Netty文件上传
  • 原文地址:https://www.cnblogs.com/geektcp/p/14853236.html
Copyright © 2011-2022 走看看