在登陆自己或者公司提供的生产服务器时,是不是有时会幻想着,万一自己不小心执行了 rm -rf /*
删库命令,会发生什么?然后自己要怎么办?脑海中是不是想到了,"某某公司程序员删库造成公司大量财富损失后被抓判刑坐牢"的案例和场景。
为了不让自己或者其他伙伴误操作删库命令,从而造成不可逆的损失。经过我查找资料和手动实践之后,打算写这篇文章,以便能帮助到大家,解决以后误操作删库的问题。
总体思路——重写rm命令,建立Linux下的"回收站"
总所周知,Windows 系统是有回收站的,即使误删了,也可以在回收站恢复。那么想象一下,如果Linux系统也有"回收站",那我们是不是就可以防止误删了,因此,我们也可以在 Linux 实现"回收站"的机制。
实现思路:
删除文件时,它并不真正执行删除操作,而是将文件移动到一个特定目录,可以设置定时清除回收站,或者在回收站里面的文件大小达到一定容量时(或者用时间做判断)执行删除操作以腾出空间。
可以写个 Shell 脚本替换 rm 命令,或者在需要删除文件的时候使用 mv 命令将文件移动到回收站。
① 创建回收站目录
mkdir /home/.trash
image.png
②编写 remove.sh
脚本,内容如下
touch /home/remove.sh
vim /home/remove.sh
TRASH_DIR="/home/.trash"
for i in $*; do
STAMP=`date +%s`
fileName=`basename $i`
# 将对应文件 mv 至 .trash 目录
mv $i ${TRASH_DIR}/${fileName}.${STAMP}
done
image.png
image.png
③ 修改 ~/.bashrc
, 用我们自建的remove.sh
替代 rm
命令
alias rm="sh /home/remove.sh"
image.png
④ 设置 crontab
,定期清空垃圾箱,如每天 0 点01分清空垃圾箱:
crontab
基本命令操作如下:
crontab -u //设定某个用户的cron服务
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
crontab -i //打印提示,输入yes等确认信息
/var/spool/cron/root (以用户命名的文件) 是所有默认存放定时任务的文件
/etc/cron.deny 该文件中所列出用户不允许使用crontab命令
/etc/cron.allow 该文件中所列出用户允许使用crontab命令,且优先级高于/etc/cron.deny
/var/log/cron 该文件存放cron服务的日志
设定每天 0 点01分清空垃圾箱 即每天凌晨过一分钟。这是一个恰当的进行备份和清理系统垃圾的时间,因为此时系统负载不大。
crontab -e
1 0 * * * rm -rf /home/.trash/*
image.png
查看定时任务
[root@root ~]# crontab -l
1 0 * * * rm -rf /home/.trash/*
⑤ 最后,执行以下命令,使之生效
source ~/.bashrc
⑥测验 rm
命令
创建一个文件test
,然后再执行rm
,最后到我们定制的"回收站" .trash
中查看已删除的文件。
[root@root ~]# touch /home/test
[root@root ~]# ls /home/
remove.sh test
[root@root ~]# rm /home/test
[root@root ~]#
[root@root ~]#
[root@root ~]# ls /home/
remove.sh
[root@root ~]#
[root@root ~]#
[root@root ~]# ls /home/.trash/
test.1591773746
执行过程如下图所示
image.png
总结
到此《Linux下的防"删库"到"跑路"——重写rm命令》这篇文章就写完了,这样一来就不怕误操作执行了删库命令,因为删除的文件都放在我们自己制定的"回收站"里面了,还有一段时间能挽回的余地,希望这篇文章能帮到你。
网友评论