前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安全放心的使用rm

安全放心的使用rm

原创
作者头像
Stare
修改2018-11-15 14:24:46
1.7K0
修改2018-11-15 14:24:46
举报

如果你用过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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档