如果你用过linux,那你肯定听说过rm的故事,由这个恐怖的命令引发的灾难比比皆是。比如,rm -rf /*,感兴趣的可以尝试一下,后果自负。
个人总结,rm的致命伤有以下几点:
首先,rm命令很容易敲错,比如你删除当前目录下的所有文件,rm -rf ./*,它和rm -rf /*其实就差一个点,稍不注意,你就GG了。每次在公司编译服务器上看到历史命令有rm -rf ./*,我的小心肝都要颤一颤,全公司200来号开发全在编译服务器上有自己单独的编译环境(docker或chroot),rm命令一敲错,带来的灾难不敢想像,我估计大家能用唾沫把这个罪魁祸首淹死。
其次,rm命令很消耗I/O,如果有几个人同时在执行rm,就会把编译服务器搞得很慢,git或svn下代码也会变慢,耽误大家的工作效率。
最后,手贱导致误删。虽然高手们可以恢复复原,但我相信你额外花的这个时间足以让老板不太高兴。
综上所述,大家还是尽量少用rm命令,下面介绍使用mv实现的rm2来替代rm命令。
#!/bin/bash
set -e
LOSTFOUNDDIR="/home/you_can_delete_all_files_in_me/"`date +"%Y%m%d-%H%M-%S"`"/"
BASEDIR=`pwd`
while(($#>0));do
file=$1
tfile=""
tmp=`echo ${file:0:1}`
if [ "$tmp" = "/" ];then
tfile=${file}
else
tfile=${BASEDIR}"/"${file}
fi
if [ -e ${tfile} ];then
mkdir -p ${LOSTFOUNDDIR}`dirname ${tfile}`
mv ${tfile} ${LOSTFOUNDDIR}${tfile}
fi
shift
done
把这个脚本命令为rm2,放到/usr/bin下,然后加上权限chmod 0755 rm2,就可以使用了。
脚本很简单,即用mv来实现rm,将本来想删除的东西都放到/home/you_can_delete_all_files_in_me
目录下,这样上面提到的rm的三个问题都可以解决,误删可恢复且mv几乎没有任何成本。
这样,还有最后一个问题,这样不能真正的删除,都往这里放,会导致硬盘空闲空间越来越小,一旦硬盘空间不足以创建一个docker容器,大家的抱怨又会到来。解决方法就是创建一个定时任务cron,定时清理/home/you_can_delete_all_files_in_me下的东西,让它们真正的被rm。
0 2 * * 3,0 rm -rf /home/you_can_delete_all_files_in_me/*
这个cron每周三、周末的凌晨两点把/home/you_can_delete_all_files_in_me/下的东西rm掉,这个时间点应该没有人在工作了,编译服务器可以悠闲的执行rm。
一周两次集中清理,我认为这是一个很好的折中方案,可以解决rm命令的危险,又能解决不rm硬盘空间不足的问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。