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


结束语:

这是linux 进阶系列的第一篇,linux 操作是程序员的必修课,如果你现在还不能熟练操作,那就开始学习吧。

一个会思考的胖子

长按扫码关注,每周分享:程序员赚钱,个人成长,技术资料等。

右下角

给个好看呗

全部评论

相关推荐

机智的大学生这就开摆:有些地方描述有点儿空泛。传感器直接说清是哪款,要不然对方都不知道问啥。然后freertos那里的描述也是,加上freertos就实现了实时性吗?可以说基于freertos的调度,结合xxx优化/xxx技术实现了xxx检测的实时性。同时freertos也能实现异步io,也能实现灵活的并行架构和高并发。 检测时效性的问题要考虑哪里需要时效性,摔倒检测需要通过中断实现,至于温度这种大惯量就不需要,方案细节理清楚。然后freertos那里提升响应速度用的消息队列不是太合适,可以说是用的notify反正和消息队列差不多,或者说指针传参来优化消息队列的值传递进而提升线程间通信效率。 但凡是搞过开发的看一眼你的简历就知道有问题了,需要重新整理技术路线优化一下。首先搞清楚技术路线,描述好软硬框架,体现性能优化/低功耗等。例如后续针对xxx功能进行了xxx的优化,实现了xxx成果(这里可以展开描述你使用的工具链,你是用的串口调试助手还是RTT来打印日志,有没有用systemview来优化任务的优先级大小避免乱序调度,或者使用了Ozone调试定位问题等)。 描述问题上例如视觉项目那里,基于xxx通信接口编写xxx传感器的驱动,实现了xxx功能,并提供了xxx数据处理/稳定性/精确度/异步调用。或者也可以统一描述为基于xxx、xxx、xxx通讯协议编写xxx、xxx、xxx传感器的驱动。后续再单独给这些传感器的数据处理/优化等进行描述。 最重要的一点,实习栏太少了,五六个月不至于只干了这么点,把实习项目描述清楚,把自己会的不管有没有让你做都写进去。你写了实习这栏,内容就不能比剩下的两个项目差多少了。 最后就是看看岗位jd,跟着描述修改你的专业技能以及项目的描述,这样被回复的概率才大。 希望你早日找到理想工作!祝好
点赞 评论 收藏
分享
八月份以为是开始没想到是巅峰,九月约面反而少了,每天就是疯狂做测评和AI面试。这周更离谱,一个新的面邀都没有说好的金九银十呢?
牛客58830004...:九月到现在只有一场三七互娱的线下面试,java 无实习能找到工作吗 哥能告诉我客户端有希望吗,怎么转客户端
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务