对于一个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操作,就会调用系统原先的删除功能,不经过封装脚本,直接删除文件。