专栏首页看一看大海安全放心的使用rm
原创

安全放心的使用rm

如果你用过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硬盘空间不足的问题。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 守护进程

    我们知道linux有许多自带的守护进程,比如syslogd、crond、sendmail等。那用户或开发者自己编写的程序为什么也需要成为守护进程呢?

    wytheZ
  • 深入理解select的行为

    select的第一个参数为输入参数,其它4个参数既是输入也是输出。3个事件集合:读事件集合、写事件集合、异常事件集合。输出为触发了该事件的集合。最后一个参数为还...

    wytheZ
  • 图文并茂VLAN详解,让你看一遍就理解VLAN

    VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指...

    wytheZ
  • 如何删除一个文件名以分号开头的文件

    昨天在Linux上发现了一个文件名为";q"的文件,还以为遭受攻击了呢。后来猜想可能是使用VIM时不小心创建了一个文件,于是又用VIM故意使用":wq ;1"果...

    雷大亨
  • Linux常用命令07 - rm

    rm 是一个命令行工具,用于删除文件和目录。 这是每个 Linux 用户都应该熟悉的基本命令之一。

    叉叉敌
  • 防止“rm-rf/”误删除的5种方法

    到周四了,大家好啊,在raksmart服务器Linux系统下防止“rm -rf /”误删除,不解释了,运维应该在每台服务器都去配置这个问题以减少灾难的发生,下面...

    企鹅号小编
  • 运维管理之防止"rm -rf /" 误删除

    大概懂点linux的程序员都知道“rm -rf /”意味着擦除根路径“/”下挂载的所有内容而无需询问。以前一个主管说过,在你不充分了解某个工具的原理的时候,不要...

    lyb-geek
  • Linux 下回收站机制

    程序手艺人
  • 「R」如何计算几何平均数

    刚遇到一个有意思的问题,如何用R计算几何平均数。如果数字少,简单,计算很容易,直观上,先用prod函数连乘,然后开方即可。

    王诗翔呀
  • XShell常用命令总结

    1、rm -r :rm -r的删除范围是删除当前输入位置的文件。 2、rm -R:rm -R的删除范围是删除当前输入的目录文件夹里文件及其子目录里的文件。

    阮键

扫码关注云+社区

领取腾讯云代金券