如何优雅的使用rm防止误删除脚本实践

原创 陈宝佳  2018-05-21 10:43  阅读 368 次 评论 0 条
行云管家,新手有礼

目录

  • 前言
  • 问题背景
  • 解决方法
    • 防误删脚本
    • 例子
  • 后记

前言

下面的对话是来自运维派

image image image image

俗话说的好:

常在河边走, 哪能不湿鞋。 身边的例子很多,时刻提醒我们运维人员要建立明确、规范的标准化管理流程;提高运维效率、降低综合成本;保障业务的连续性。

问题背景

若一不小心执行命令 rm -rf /,如果此时正好拥有root权限,那么后果将不堪设想。

解决方法

重定向 rm 命令以嫁接mv命令, 相当于给Linux系统定制了一个回收站。

防误删脚本

###重定义rm命令###

#定义回收站目录
trash_path='~/.trash'

#判断$trash_path 定义的文件是否存在,如果不存在,那么就创建$trash_path.
if [ ! -d $trash_path ]; then
    mkdir -p $trash_path
fi

#定义别名:使用rm就调用trash
alias rm=trash

#使用rl就调用'ls ~/.trash'  如果更改上面的回收站目录这里的目录也需要修改
alias rl='ls ~/.trash'

#使用unrm就调用restorefile
alias unrm=restorefile

#使用rmtrash就调用claearteash
alias rmtrash=cleartrash

#恢复文件的函数
restorefile()
{
    mv -i ~/.trash/$@  ./
}
 
#删除文件的函数
trash()
{  
    mv $@  ~/.trash/
}
 
#清空回收站的函数
cleartrash()
{
    read -p "确定要清空回收站吗?[y/n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf  ~/.trash/*
}

最后将上述脚本写入 /etc/bashrc 并立即执行命令 source /etc/bashrc即刻生效。

例子

这个脚本定义了几个命令 rl 就是查看回收站下的文件

unrm 文件名或目录 就是恢复到当前的路径下

rmtrash 就是清空回收站,不过会友好提示。

执行rm 不糊删除,其实就是使用mv 移动到我们指定的回收站

实在真的想删除可以/bin/rm 来进行删除

/bin/rm或者\rm 都可以临时取消别名。

[root@master ~]# touch chen

[root@master ~]# mkdir bao

[root@master ~]# ls
~   bao  chen  

[root@master ~]# rm -f chen 

[root@master ~]# find ~ -name chen
/root/.trash/chen

[root@master ~]# ll /root/.trash/
-rw-r--r-- 1 root root 0 4   7 02:16 chen

[root@master ~]# echo "chenbaojia" >jia.txt

[root@master ~]# cat jia.txt 
chenbaojia

[root@master ~]# rm -f jia.txt 

[root@master ~]# ls
~  bao  

[root@master ~]# ll /root/.trash/
总用量 4
-rw-r--r-- 1 root root  0 4   7 02:16 chen
-rw-r--r-- 1 root root 11 4   7 02:17 jia.txt

[root@master ~]# cat /root/.trash/jia.txt 
chenbaojia

[root@master ~]# rm -fr bao/
mv:无效选项 -- r
请尝试执行"mv --help"来获取更多信息。

[root@master ~]# rm -r bao/
mv:无效选项 -- r
请尝试执行"mv --help"来获取更多信息。

[root@master ~]# rm -f bao/

[root@master ~]# ll /root/.trash/
drwxr-xr-x 2 root root 4096 4   7 02:16 bao
-rw-r--r-- 1 root root    0 4   7 02:16 chen
-rw-r--r-- 1 root root   11 4   7 02:17 jia.txt

使用我们在用户变量里定义的命令别名 /etc/bashrc

#查看回收站下的文件
[root@master ~]# rl
bao  chen  jia.txt

#恢复jia.txt 到当前目录
[root@master ~]# unrm jia.txt

[root@master ~]# ls
~  anaconda-ks.cfg  head  install.log  install.log.syslog  jia.txt  Package

[root@master ~]# cat jia.txt 
chenbaojia

[root@master ~]# unrm bao

[root@master ~]# ls
~  bao   jia.txt  


[root@master ~]# ll /root/.trash/
-rw-r--r-- 1 root root 0 4   7 02:16 chen

[root@master ~]# source /etc/bashrc 

#回收站
[root@master ~]# rmtrash
确定要清空回收站吗?[y/n]y
[root@master ~]# ll /root/.tcshrc 
-rw-r--r--. 1 root root 129 12  4 2004 /root/.tcshrc

真想删除可以使用/bin/rm 进行删除

后记

未雨绸缪永远比出了问题在处理要好的多,出了问题补救是没办法不得已的事,最差的是很多公司,没有亡羊补牢,而是好了伤疤忘了疼,没过多久问题又发生。

因此,在工作中要尽量做到未雨绸缪,从源头上减少故障的发生。其次,要做到亡羊补牢、举一反三,事情出现一次就不能在出现第二次。当然,完善的备份和恢复策略也是需要做的。只有把这些结合起来,才能把我们运维的工作做的更好。

在日常的运维工作中,确实有很多紧急情况的出现,我们运维人员甚至一度都用“消防员”戏称自己每天的工作。

这好似一个恶性循环,系统越却弱,问题越多,紧急情况也越多,更加没有时间考虑系统优化的问题,如此往复,我们运维人员只能充当“消防员”的角色,哪里有火情,第一时间赶赴火场。

避免这种恶性循环的方法之一,就是在问题发生之前能够提前主动修复,修复的问题越多,紧急情况也就越少。

“工作四象限”中,也就是把更多的精力放在那些重要但不紧急的事情上,有条不紊,价值才能能到提升。

END

本文地址:https://www.cloudbility.com/club/6981.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:cloudbility
版权声明:本文为原创文章,版权归 陈宝佳 所有,欢迎分享本文,转载请保留出处!

发表评论


表情