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

猜你喜欢

转载自blog.csdn.net/m0_37674755/article/details/78419509