Linux之rm -rf安全删除

作者: Saxon_323e | 来源:发表于2019-05-21 10:29 被阅读448次

    新建自定义删除脚本:

    vim /usr/bin/safe_remove
    
    #!/bin/bash
    
    TRASH_DIR="/tmp/user/${USER}/.trash"
    mkdir -p $TRASH_DIR
    
    RMPATH=""
    # 遍历rm命令参数(e.g. rm -rf时要去掉-rf参数,只需后面的path列表即可)
    for arg in "$@"
    do
      IS_ARG=$(echo "$arg" | grep "^-")
      if [ -z "$IS_ARG" ]; then
        if [ -n "$RMPATH" ]; then
          RMPATH="${RMPATH} "
        fi
        RMPATH="${RMPATH} $arg"
      fi
    done
    
    if [ -n "$RMPATH" ]; then
      FILE_PARENT_DIR=$(pwd $RMPATH)
      SUFFIX=$(echo `date "+%y%m%d%H%M%S"`)
    
      # 拼接欲删除文件的目录,在回收站中的目录名称(直接将目标文件或目录的父目录作为在回收站的名称,这样做好处是无论删除的是文件或目录都可统一处理)
      FILE_TRASH_DIR="${TRASH_DIR}${FILE_PARENT_DIR}.children.rm.${SUFFIX}.tmp"
    
      if [ ! -d "$FILE_TRASH_DIR" ]; then
        mkdir -p $FILE_TRASH_DIR
      fi
      mv $RMPATH "${FILE_TRASH_DIR}"
    fi
    

    配置安全删除脚本生效

    vim /root/.bashrc
    

    新增一行即可:

    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    # 安全rm
    alias rm='sh /usr/bin/safe_remove'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    

    使其生效

    . /root/.bashrc
    

    效果测试

    生成测试文件和目录
    useradd testing
    cd /home/testing
    echo 111 > a.txt
    echo 222 > b.txt
    mkdir -p log
    echo 333 > log/test.log
    
    rm删除
    rm -rf a.txt b.txt log
    
    查看回收站
    ll /tmp/user/root/.trash/home/testing.children.rm.190521102654.tmp/
    

    操作效果:


    image.png

    FAQ:
    1,安全删除测试不成功?
    排查是否与本文操作一致,同时查看是否有mv目标文件或目录的linux权限。
    2,如何清理回收站?
    直接\rm -rf xxx (加个反斜杠)就可以使用linux原生rm命令了。
    3,定时清理回收站?
    自己建立个crontab任务咯~!

    相关文章

      网友评论

        本文标题:Linux之rm -rf安全删除

        本文链接:https://www.haomeiwen.com/subject/riddzqtx.html