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

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

#!/bin/sh
trash_dir=/trash/`date +%Y%m%d`      #自己创建的回收站路径,本次为/trash/

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" && "${i}" != "-f" ]];then     #这里对-rf进行处理,因为mv指令后面没有-rf,-f参数
           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 在文件最后添加(注:/home/shell路径按照实际情况进行修改):

alias rm='sh /home/shell/changerm.sh'         #表示执行rm指令的时候其实相当于自行了changerm.sh的脚本

source /etc/bashrc 重新加载该文件
2.修改~/.bashrc
vim ~/.bashrc 修改alias rm一行的信息,如果没有则添加如下一行(注:/home/shell路径按照实际情况进行修改):

alias rm='sh /home/shell/changerm.sh'

source ~/.bashrc 重新加载该文件

三、添加crontab计划,定时执行cleartrash.sh指令
使用crontab -e命令进入定时任务编辑界面,在最后面加入(注:/home/shell路径按照实际情况进行修改):

00 22 * * * sh /home/shell/cleartrash.sh     #每天22:00执行清理回收站的脚本

service crond restart重启crontab服务,使用crontab -l 命令如果可以看到刚才添加的那段话,则证明添加成功
最后补充一句:使用该方法封装rm-rf指令后确实可以避免误删,但是如果执行带单引号的’rm’ -rf操作,就会调用系统原先的删除功能,不经过封装脚本,直接删除文件。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值