zoukankan      html  css  js  c++  java
  • Linux 教你如何预防删库到跑路

    学习linux之前,有几个命令是必须记住的

    我们最常见的删库命令

    rm -rf /**

    这个命令可以在你心情不好的时候,对着公司服务器操作一番,保证让你一时爽,

    删完库这个时候你就该跑路了,但是你真的能跑的掉吗,恐怕等待你的就是牢狱之灾;

    所以我们要在这里提前做好预防。

    1.我们可以使用温和的删除命令,每一次删除都会要你进行确认,避免删错

    rm -ir directory

    2.在每一次删除前,我们先做好备份

    touch test     #新建文件
    cp test test.bak #复制为带后缀bak的备份文件
    mv test test.bak #修改为带后缀bak的备份文件

    默认是当前路径,你也可以放在其他路径

    mkdir backup                 #创建文件夹backup
    mv test /backup/test.bak     #将test文件移动到backup文件夹并且重命名为test.bak

    3.将rm命令构建为自己的回收站,编辑 /etc/bashrc文件

    vi /etc/bashrc

    新增内容

    ### 重定义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/* 
    }

     重新加载下文件,使配置生效

    source /etc/bashrc

    4.创建你刚才在文件中定义的回收站文件夹.trash

    mkdir .trash

    5.我们来进行测试一下

    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# touch chen
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# mkdir bao
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# ls
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# rm -f chen 
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# ll /root/.trash/     #查看回收站
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# rl                   #查看回收站
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# unrm chen            #恢复文件
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# rmtrash              #清空回收站
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# /bin/rm -r bao       #强制删除文件

    使用这种方式存在一个缺陷,每次删除同名文件,都会覆盖回收站原有的文件,那么这个时候我们怎么解决呢

    编写shell脚本

    vi rm.sh

    于是乎,写了下面的shell脚本(rm.sh):

    #version  : 1.0 
    #author   : zzy
    # 删除文件
    #主要功能,将文件已到指定的目录
    #缺陷:当转移的目录中已经存在需要转移的文件时,尚未处理
     
     
    recycle_dir=~/.recycle
    if ! [ -d $recycle_dir ]
    then
        mkdir $recycle_dir
        echo "创建目录$recycle_dir 保存删除得文件" ... ok
        chmod 777 $recycle_dir
        echo "修改权限" ..ok
    fi
    #将需要删除得文件移到该目录
    file_dir=$(cd `dirname $1`; pwd)
    file_name=`basename $1`
    rmFiles="$file_dir/$file_name"
     
    cur_date=`date +%Y%m%d_%H_%M_%S`
    save_dir="$recycle_dir/$cur_date";
     
    if ! [ -e $save_dir ] 
    then
     mkdir $save_dir
     chmod 777 $save_dir 
    fi
    save_dir="$save_dir/$file_name"
     
     
    if [ -e $rmFiles ]
    then
        if [ -e $save_dir ]
        then
             echo "$save_dir已经存在,可以通过-f选项移除之前的文件"  
        else
           mv $rmFiles $save_dir
           if [ $? -eq 0 ]
           then
               rm -rf $rmFiles
               echo "$rmFiles已经成功删除...若想恢复,请到$save_dir中查找"
               #添加日志
               logTime=`date "+%Y-%m-%d %H:%M:%S"`
               curUser=`whoami`
               echo "[$curUser] $logTime $rmFiles ====> $save_dir" >> "$recycle_dir/del.log"
           else
              echo "请使用相对目录删除"
             fi
        fi
    else
        echo "你没有权限或是文件不存在哦!!!"
    fi

    给脚本授权

    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# chmod 777 rm.sh

    创建回收站目录

    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# mkdir .recycle

    测试脚本

    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# touch index.html
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# ./rm.sh index.html
    /root/index.html已经成功删除...若想恢复,请到/root/.recycle/20190708_20_29_12/index.html中查找

    如果我嫌这个脚本太长了怎么办,没事,我们可以把他定义为自己的命令

    编辑文件.bashrc

    vi ~/.bashrc

    添加内容

    alias del=~/rm.sh

     重新加载下文件

    source .bashrc

    测试下

    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# touch hello.txt
    [root@iZj6cet3mqlrzqmdk2a20qZ ~]# del hello.txt
    /root/hello.txt已经成功删除...若想恢复,请到/root/.recycle/20190708_20_30_12/hello.txt中查找

    github有一个完整的脚本,

    github项目地址: https://github.com/LaiJingli/rmtrash

    Linux安装

    wget --no-check-certificate https://raw.githubusercontent.com/LaiJingli/rmtrash/master/rmtrash.sh
    mv rmtrash.sh /bin/
    chmod +x /bin/rmtrash.sh

    单个用户授权

    /bin/rmtrash.sh

    所有用户授权

    echo "alias rm=/bin/rmtrash.sh" >>/etc/bashrc

    帮助命令

    rm -h

    如果有问题,执行以下2条命令排查,或者退出重新登录系统

    source ~/.bashrc
    alias |grep rm

    如果需要彻底删除文件

    rm -e                 清空回收站
    /bin/rm file          直接删除文件而不经过回收站
    /bin/rm -r directory  直接目录而不经过回收站

    如果你想设置某个目录不被删除,加个elif 条件

    vi /bin/rmtrash.sh

    测试结果

     回收站存放的目录

    cd .rmtrash
    vi .rmtrash.log

    原文地址:http://www.findme.wang/blog/detail/id/238.html

  • 相关阅读:
    Machine Learning/Introducing Logistic Function
    学习Machine Leaning In Action(四):逻辑回归
    极致和厚道为小米新国货的核心实质(极致不是指最好的,而是要超乎预期)
    做事要提前留有余地,否则到时候就来不及了(超市买菜,找工作,交朋友,发脾气都是如此)
    UpdateWindow API函数的作用很明显
    近几年前端技术盘点以及 2016 年技术发展方向
    使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改
    设计模式——(Abstract Factory)抽象工厂
    从优化到再优化,最长公共子串
    与数据库打交道的Adapter----SimpleCursorAdapter
  • 原文地址:https://www.cnblogs.com/reasonzzy/p/11145933.html
Copyright © 2011-2022 走看看