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

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

     
    -------------------------
    技术不在于多么高超先进巧妙,而在于要有现实价值!!!
  • 相关阅读:
    三步完成自适应网页设计
    EasyUI DataGrid 修改每页显示数量的最大值&&导出Grid到Excel
    EasyUI DataGrid 实用例子(2015-05-22)
    C# 如何将List拆分成多个子集合
    EasyUI Tabs绑定右键
    微信支付-扫码支付备忘
    微信支付:模板消息实现过程备忘
    4、http协议之二
    1、套按字及http基础知识之一
    3、Web server 之httpd2.2 配置说明
  • 原文地址:https://www.cnblogs.com/geektcp/p/14853236.html
Copyright © 2011-2022 走看看