为Linux的rm命令添加回收站


      众所周知,在Linux下的非root用户有很多权限问题。但是做为程序员而非管理员的我们,只需开发自己的程序就行了。因此直接使用root用户可以避免很多问题的发生。但是如果误使用 rm怎么办?
      最好的方式就是为删除命令建立 回收站,当用户执行 rm时实际上执行的是 mv命令,将文件移动到我们的 回收站中,然后设置一个指令来自动清空 回收站,这样即使误删除导致系统无法启动我们也可以使用LiveCD挂载硬盘,从而进行文件还原。

一、主要功能

  1. 重新编写删除文件命令并用该命令替换默认的rm,以免误删除文件。
  2. 包含moveToCrashdelDelayFilescleanCrash以及moveToCrash.conf四个文件,分别为主命令,自动清理命令,清空回收站命令以及配置文件。
  3. 支持管理员非管理员用户操作。
  4. 对于操作用户,被删除文件的原始目录以及目标目录都有详细的日志记录,以供恢复时使用。
  5. 支持回收站自动清理1至7天前 (可配置) 的内容以节约空间(亦可手动清理)。
  6. 支持手动清空回收站操作。
  7. 所有功能对于用户来说都是透明的。
  8. 从删库到跑路彻底成为历史。

二、脚本中需要修改的内容

配置文件moveToCrash.conf中回收站和日志文件路径

CARSHROOTDIR="/raid/.crash"         #自定义回收站根目录
CRASHDISK="/dev/sdb1"    			#回收站所在的磁盘
RETAINDAYS="3"           			#回收站自动清理时保留的天数 [1,7]
EXTERNDIRLIST="samba"    			#自动清理脚本中${CARSHROOTDIR}目录下禁止删除的文件夹
USEPROGRESS="0"          			#是否显示进度条(需要为mv命令打补丁),修改此项时必须将NOTFIRSTUSE文件删除
LOGFILE="${CARSHROOTDIR}/log/moveToCrash.log"
NOTFIRSTUSE="${CARSHROOTDIR}/.__nofirst__"

三、设置清理过时文件夹的定时任务

本小节设置定时任务,以便让系统自动执行delDelayFiles任务

执行crontab -e后输入

0 17 * * * /usr/bin/delDelayFiles

代表每天下午五点整执行命令

四、配置系统

打开~/.bashrc文件,查找alias rm=字样并改成如下所示(如果找不到直接新建一行)

#alias rm='rm -i'
alias rm='moveToCrash'

意思是输入rm命令时实际上执行的是moveToCrash
然后执行

source ~/.bashrc

使命令立即生效。

五、脚本

  • moveToCrashdelDelayFiles以及cleanCrash 脚本放于/usr/bin目录下
  • moveToCrash.conf配置文件放于/etc目录下
  • 请使用chmod +x filename命令赋予第一条的三个命令可执行权限

moveToCrash,命令主脚本,代替rm命令

#!/usr/bin/env bash

#脚本功能:重新写rm命令,以免误删除
#删除程序运行锁
function delRunningLocked()
{
   
    ${REALRMPATH} -rf ${LOCKFILE}
}

function exitScript()
{
   
    LE $1
    Log "**************删除命令处理完成***************"
    delRunningLocked
    exit -1
}

function checkDelFilesHandler()
{
   
      result="$(crontab -l | grep delDelayFiles | grep -v '#')"
      if [ "x${result}" == "x" ];then
         echo "NO"
      else
         echo "OK"
      fi
}

function handlerLogFile()
{
   
    file="${LOGFILE}"

    logdir="$(dirname ${
     file})"
    if [ ! -d "${logdir}" ];then
        mkdir -p ${logdir}
    fi

    if [ ! -d "${CARSHROOTDIR}" ];then
        mkdir -p ${CARSHROOTDIR}
    fi

    if [ -e "${file}" ];then
        size="$(ls -l $file | awk '{print $5}')"
        if [ "${size}" -gt "5000000" ];then
            filename="$(basename ${
     file})"
            dirname="$(dirname ${
     file})"
            newname="$(echo ${
     filename} | awk -F '[.]' '{print $1"-old."$2}')"
            mv "${file}" "${dirname}/${newname}"
        fi
    fi
}

function checkOutConf()
{
   
    if [ ! -e "${1}" ];then
        echo "无法找到配置文件: ${1}!"
        exit -1
    fi

    . ${1}
    [ ! -e "${CARSHROOTDIR}" ] && mkdir -p ${CARSHROOTDIR}

    if [ ! -e "${NOTFIRSTUSE}" ];then         #非第一次运行时检查
        if [ "${USEPROGRESS}" = "1" ];then   #核查是否需要使用进度条
            if [ "$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贱贱的剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值