• 如何优雅地使用 rm 防止误删除?


    IT 界的有一个老梗,一次某论坛的数据库管理员抱怨自己老板一直虐待他,结果他一气之下就删库跑路了......

    于是...

    据新华社北京 8 月 20 日电 ,北京一软件工程师徐某离职后因公司未能如期结清工资,便利用其在所设计的网站中安插的后门文件将网站源代码全部删除。记者 20 日从北京市丰台区人民法院获悉,徐某破坏计算机信息系统罪成立,获刑五年。

    压力不大

    我在服务器维护的时候不小心执行了 rm -rf 命令......现在整台服务器被我删光了肿么办???

    所以程序员喜欢跑步锻炼

    好吧,现在先来介绍一下 rm

    rm -rf 的威力

    rm 是 linux 系统下删除文件的命令,-r 代表删除这个下面的一切,一切的一切那种的一切。f 表示不需要用户确认,直接执行。

    通常这个命令都是指定文件夹用的,比如

    rm -rf /home/test/
    

    就是删除 /home/test/ 这个文件夹下面的所有东西。

    但是如果后面的文件夹路径没有加对,

    rm -rf / 在服务器上也就意味着...

    解脱了

    俗话说的好:常在河边走, 哪能不湿鞋。 那该怎么避免这种悲剧的发生呢?

    如何避免再次跑路?

    一个方案就是重定向 rm 命令以嫁接为 mv 命令, 相当于给 Linux 系统定制了一个回收站。

    实现方式如下:

    ### 重定义rm命令 ###
    
    # 定义回收站目录
    trash_path='~/.trash'
    
    # 判断 $trash_path 定义的文件是否存在,如果不存在,那么就创建 $trash_path.
    if [ ! -d $trash_path ]; then
        mkdir -p $trash_path
    fi
    
    # 定义别名:使用 rm 就调用 trash
    alias rm=trash
    
    # 使用 rl 就调用 'ls ~/.trash' 
    # 如果更改上面的回收站目录这里的目录也需要修改
    alias rl='ls ~/.trash'
    
    # 使用 unrm 就调用 restorefile,需要在删除目录的父目录下执行
    alias unrm=restorefile
    
    # 使用 rmtrash 就调用 claearteash
    alias rmtrash=cleartrash
    
    # 恢复文件的函数
    restorefile()
    {
        mv -i ~/.trash/$@  ./
    }
     
    # 删除文件的函数
    trash()
    {  
        mv $@  ~/.trash/
    }
     
    # 清空回收站的函数
    cleartrash()
    {
        read -p "确定要清空回收站吗?[y/n]" confirm
        [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf  ~/.trash/*
    }
    

    最后将上述脚本写入 /etc/bashrc,并立即执行命令 source /etc/bashrc 即刻生效。

    大神果然厉害

    使用

    这个脚本定义了几个命令:

    • rl:查看回收站下的文件
    • unrm 文件名或目录:恢复到当前的路径下
    • rmtrash:清空回收站,不过会友好提示。

    执行 rm 不会真正删除,而是使用 mv 移动到我们指定的回收站。

    实在真的想删除可以 /bin/rm 来进行删除。

    另外,需要注意的时,之前 rm 指令的一些参数可能不再使用,因为 rm 现在其实是 mv 了。

    # touch hoxistest
    # touch 1
    # mkdir haha
    # ls
    1  haha  hoxistest
    # rm 1
    # ls
    haha  hoxistest
    
    # 查看回收站文件
    # rl
    1  myftp1
    
    # 恢复已删除文件
    # unrm 1
    [root@CESHI-CLM-10-254-4-48 test]# ls
    1  haha  hoxistest
    
    # rm haha/
    # rm hoxistest
    # rl
    haha  hoxistest
    
    # 情况回收站
    # rmtrash
    确定要清空回收站吗?[y/n]y
    # rl
    

    效果看着应该还可以吧。

    很牛的样子

    例行总结

    看着是还可以,但是也有一些问题,比如删除文件不能重名,若重名了会提示你是否进行覆盖。那就需要再进行特殊处理了,比如删除时加个时间戳什么的,有兴趣的动手实现下吧。

    via:https://www.cloudbility.com/club/6981.html

  • 相关阅读:
    ASP.NET Core 与 .NET Core 演变与基础概述
    Mac 下使用 brew 安装软件
    关于微信支付,支付宝支付与银联支付的异步消息状态
    keytab生成不了
    Exit code from container executor initialization is : 24 ExitCodeException exitCode=24: Configuration file ../etc/hadoop/container-executor.cfg not found.
    Connection broken for id 62, my id = 70, error =
    File system needs to be upgraded. You have version null and I want version 7
    virsh创建和恢复快照
    raw转qcow2
    Freemaker 自定义函数
  • 原文地址:https://www.cnblogs.com/hoxis/p/9737239.html
Copyright © 2020-2023  润新知