linux封装rm -rf指令,防止误删

对于一个linux新手,敲错指令是常有的事情,智者千虑必有一失,即使对于一个老司机来说,也难免会有操作失误的时候,而误删导致的后果往往是无法弥补的。与其在误删数据后懊悔,不如趁早寻求方法避免这种错误的发生。这里采用alias对rm指令设置别名,使得执行rm指令的时候,实际上执行了mv指令而将需要删除的文件放到自己建立的回收站之中。

一、首先编写shell脚本 1.changerm.sh 用于改变rm指令,代码如下:

#!bin/sh
trash_dir=/trash/`date +%Y%m%d`      #自己创建的文件夹的路径

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

for i in $*
do
    suffix=`date "+%H%M%S"`
    if [ ! -d "${i}" ]&&[ ! -f "${i}" ];then    #首先判断是否是合法的文件或者文件夹
        if [ "${i}" != "-rf" ];then     #这里对-rf进行处理,因为mv指令后面没有-rf参数
           echo "[${i}] do not exist"
        fi
    else
        file_name=`basename $i`   #取得文件名称  
        mv ${i} ${trash_dir}/${file_name}_${suffix}_${RANDOM} 
        echo "[${i}] delete completed"  
    fi
done

2.cleartrash.sh 用于定期清理回收站(因为对rm -rf进行封装后,实际上文件只是移动到了自己新建的回收站目录,并未进行实际的删除操作)

#!bin/sh
trashdir=/trash
cd ${trashdir}
find ./ -mtime +3 -exec 'rm' -rf {} \;       #找到回收站中修改日期大于3天的文件,执行真正的删除
(注:rm被封装后,带引号的’rm’执行的是真正的删除)

二、为rm指令设置别名 1.修改/etc/bashrc

>>vim /etc/bashrc      在最后添加:
alias rm='sh /home/shell/changerm.sh'         #表示执行rm指令的时候其实相当于自行了changerm.sh的脚本
>>source /etc/bashrc    重新加载该文件

2.修改~/.bashrc

>>vim ~/.bashrc   修改alias rm一行的信息
alias rm='sh /home/shell/changerm.sh'
>>source ~/.bashrc    重新加载该文件

三、添加crontab计划,定时执行cleartrash.sh指令

>>crontab -e,在里边加入:
        00 22 * * * sh /home/shell/cleartrash.sh     #每天22:00执行清理回收站的脚本
>>service crond restart  #重启crond服务使之生效:
>>crontab -l  #如果可以看到刚才添加的那段话,则证明添加成功

最后补充一句:使用该方法封装rm-rf指令后确实可以避免误删,但是如果执行带单引号的’rm’ -rf操作,就会调用系统原先的删除功能,不经过封装脚本,直接删除文件。

原文发布于微信公众号 - 程序员成长充电站(qianpangzi8)

原文发表时间:2019-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券