-rf / linux rm

2018-08-24 18:30:29 qq_39661027 阅读数 21830

如果你接触过linux,肯定没少听过rm -rf的故事,这个恐怖的命令执行后到底会产生什么样的效果呢?接下来就带大家在虚拟机中演示一下。

注意:::一定不能在生产环境中执行此命令,否则没有后悔药可买的!

【演示环境】

虚拟机:vmware

系统:centos

用户:root

1、执行删除命令前,系统运行良好,且操作正常,如下图所示:

 

linux free df

 

2、执行“rm -rf /*”命令,期间会报如下图所示的错误。容易看出,并不是所有的文件都能被删除,有些系统保护的文件删除会报错。

 

删除后命令报错

 

3、删除完毕后,我们试着执行了几个命令,如top、free、ls、shutdown等都已经无法执行了,只有cd可以。由此可见执行rm -rf /*命令的影响程度有多大。

 

rm -rf报权限错误

 

4、强制关机后,重新启动系统,如下图所示已经报异常了,无法正常进入系统,此时只有进行重装系统了。

 

linux启动异常

 

总结:

有点遗憾删除结束后没法再使用df、ls这些命令,所以没办法看出还剩哪些文件。不过从上面的结果来看,连基础命令都执行不了,所以用户数据(如安装的软件、部署的网站、数据库等)肯定也都全删没了。

 

因此平时操作的过程中要养成良好的习惯,尽量不要用rm命令,可以用mv命令来代替。比如要删掉a.txt,可以执行mv a.txt /mytemp ,然后再写个脚本定时清除/mytemp目录下的文件,这样会安全很多。

 

文章出自:https://www.daixiaorui.com/read/265.html 本站所有文章,除注明出处外皆为原创,转载请注明本文地址,版权所有。

2019-04-10 16:03:13 guancong3412 阅读数 1641

1.下载安装safe-rm:
yum -y install wget
wget https://launchpadlibrarian.net/188958703/safe-rm-0.12.tar.gz
tar xf safe-rm-0.12.tar.gz
mv safe-rm-0.12 /usr/local/safe-rm
cd /usr/local/safe-rm
mkdir bin
cp safe-rm /bin/rm

2.配置环境变量:
vim /etc/profile
#safe-rm
export RM_HOME=/usr/local/safe-rm
export PATH=RMHOME/bin:RM_HOME/bin:PATH

source /etc/profile

在这里插入图片描述
which rm
alias rm=‘rm -i’
/usr/local/safe-rm/bin/rm

此时可以看到rm命令已经是我们安装的safe-rm了

3.配置我们需要避免删除的文件:
vim /etc/safe-rm.conf
/*
/tmp/1.txt

4.测试删除操作:
touch /tmp/1.txt /tmp/2.txt
mkdir /tmp/d
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到只有我们加进/etc/safe-rm.conf的文件路径或者目录不会被删除,未加进的文件依旧可以正常删除。

5.说明:
如果加进了/etc/safe-rm.conf的文件路径,我们依然想删除他怎么办,那就直接使用/bin/rm -rf /tmp/1.txt ,但是删除前一定要三思,毕竟数据恢复比较麻烦。

2019-09-21 09:38:42 geek64581 阅读数 17519

rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉

命令 作用
-f 强制删除文件或目录
-i 删除已有文件或目录之前先询问用户
-r 递归处理, 将指定目录下的所有文件与子目录一并处理
/ 在Linux中表示根目录
* 所有文件
/* 根目录下的所有文件

注意:一旦你执行了上述“rm -rf /” 或者“rm -rf /*”命令,会删除Linux根目录下的所有文件,直接导致服务器瘫痪

解决的办法只有一个,如下:
在这里插入图片描述

程序员应该养成好的习惯,慎用rm命令,用mv命令代替.

命令 作用
~/ 当前登录用户的用户目录
./ 表示当前目录
pwd 查看当前所在路径

mv实现步骤:

  • 1、打开一个终端,输入命令:vim ~/.bashrc
  • 2、在打开的文件最后加入如下代码:
mkdir -p ~/.trash   #在家目录下创建一个.trash文件夹(隐藏文件,ls -a 查看)
alias rm=del        #使用别名del代替rm   
del()               #函数del,作用:将rm命令修改为mv命令
{  
  mv $@ ~/.trash/  
}  
cleardel()          #函数cleardel,作用:清空回收站.trash文件夹,y或Y表示确认,n表示取消
{  
    read -p "clear sure?[Input 'y' or 'Y' to confirm. && Input 'n' to cancel.]" confirm   
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf ~/.trash/*   
}  
  • 3、保存修改并退出
  • 4、使设置生效:在终端下输入source ~/.bashrc。
  • 5、如果没有生效,请关闭终端重新打开也可以,本步骤同4步骤(source - ~/.bashrc)作用相同。至此,已经设置完成,可以在终端下进行测试了。

测试结果(命令总结)

  • 1、删除文件
    del [文件名]
    rm [文件名]
    del *
    rm *
  • 2、清空回收站(即:清空.trash文件夹)
    cleardel
    注:该命令会有一个是否删除确认,y或Y表示确认删除,n表示取消删除。

注:rm命令已经删除,所以要彻底删除文件的话,可以先del删除文件到垃圾箱,然后进入~/.trash文件夹使用cleardel命令来彻底清除垃圾箱里的所有文件。

2019-12-09 13:16:52 qq_34330286 阅读数 613

自己在Debian 9.9上测试成功,请结合您操作系统的环境,谨慎操作,在进行测试时候尽量先使用一个临时目录,若由于你的不正确操作造成的后果与本人无关

众所周知,Linux中的rm -rf /*命令是一条灾难性的命令.因此有的运维人员想一些办法来禁止这条命令的执行,今天演示一个简单的

今天我们使用的是替换rm命令的方法,然后做一个简单的配置,让系统不能执行rm -rf /*

1.下载safe-rm

实际上有这一个工具,也就是safe-rm命令,我们用来替换rm就行了,实际上safe-rm就是一个删除命令,只不过呢它可以通过配置文件来做一些过滤.
官网下载https://launchpad.net/safe-rm/+download
我直接下载0.12版本

wget https://launchpad.net/safe-rm/trunk/0.12/+download/safe-rm-0.12.tar.gz

2.替换系统的rm命令

# 解压
tar -zxvf safe-rm-0.12.tar.gz
# 将safe-rm命令复制到系统的/usr/local/bin目录
cp safe-rm-0.12/safe-rm /usr/local/bin/
# 创建链接,将safe-rm替换rm
ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

此时已经替换掉rm命令,为了确保环境变量有效,我们将/usr/local/bin目录设置在所有PATH环境变量之前.先更改/etc/profile文件,在文件末尾追加以下代码

PATH=/usr/local/bin:$PATH

编辑完毕之后,为了让环境变量在整个系统全局生效,我们重启操作系统.重启之后执行rm命令就相当于执行safe-rm了

3.设置过滤目录

过滤目录将不被删除,编写 /etc/safe-rm.conf 文件,添加自己需要过滤的目录,以下是配置示例,实际上要根据你的需求来

/
/*
/etc
/etc/*
/data
/data/mysql
/data/mysql/datadir
/data/mysql/datadir/*
/usr
/usr/local
/usr/local/bin
/usr/local/bin/*

/ 代表过滤 /
/* 代表过滤 / 下面的所有文件

在以上代码中,我过滤掉safe-rm所在目录和其链接所在目录,除此之外,还过滤其配置文件,这样的话可以一定程度上做到安全防护了

如果配置文件中,有 /root/test/123 这样一条规则,那么删除/root/test/123文件时会被过滤掉,但是删除/root/test时能成功删除,因此不支持递归的规则,那么配置文件我们应该写成以下格式

/
/root
/root/test
/root/test/123

4.测试

接下来就是见证奇迹的时刻了,执行测试之前请确保你的配置文件编写正确,其次,你出错可与我无关!!!哈哈哈
如下图:
在这里插入图片描述

文章原创首发自微信订阅号:极客开发者up,禁止转载

2018-10-13 09:03:50 qiangw09 阅读数 3202

做服务器运维的人众所周知, rm -rf / 命令在Linux下执行后,就是一场灾难。

好吧,先看一个事例,了解下这个命令的恐怖>>>一个命令rm -rf/ ,他把整个公司删没了

为了防止这种误删除操作,找了很多办法,有建议回收站机制、也有说给重要目录设置权限等等方法、还有替换rm删除命令的方法;总结了一下,还是觉得替换rm命令比较简单直接,这里就记录一下替换 rm 命令的方法。

原理:
首先我们需要用到的软件(其实就是一个命令): safe-rm ,它具有 rm 命令的所有功能,不过 safe-rm 命令可以设置路径黑名单,也就是说在黑名单中的目录或文件将不会被删除;我们把 rm 命令替换为 safe-rm ,之后执行 rm 命令也就相当于执行 safe-rm 命令,也就不会误删除黑名单中的目录或文件了。

safe-rm命令下载:百度网盘  官网下载

1、下载到Linux服务器后并解压缩,复制safe-rm-0.12下的 safe-rm 命令到/usr/local/bin目录

cp /opt/safe-rm-0.12/safe-rm /usr/local/bin/

注:我是解压缩到//opt/safe-rm-0.12目录下的。

现在已经可以直接用safe-rm命令进行删除操作了,用法和参数和 rm 是一样的,不过还没有替换为 rm

2、替换 safe-rm 为系统默认的 rm 命令

做一个 rm 命令的符号链接,之后执行 rm 命令就相当于执行 safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

设置环境变量,要保证/usr/local/bin在其他变量路径前面

先查看当前变量的顺序,可以看到/usr/local/bin没有在其他路径的最前面:

[root@localhost /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

修改编辑配置文件/etc/profile,添加下面一行

PATH=/usr/local/bin:$PATH

保存后,重启整个服务器,使配置生效;重启后,用 rm 命令删除,就相当执行的 safe-rm 命令了。

3、设置路径黑名单

创建/etc/safe-rm.conf文件,将重要文件或者目录的完整路径输入进去保存就可以了,每条以回车分隔。

[root@localhost /]# cat /etc/safe-rm.conf 
/opt/test
/

我这里加了2个路径,一个根目录,一个/opt/test目录。

好了,到这里就完成了,执行 rm -rf /  rm -rf /opt/test 将不会删除其目录,会提示跳过删除(最好先找个测试目录进行实验,别弄不好成灾难了....)。
QQ截图20171124105550
总结:其实,只要用点心,仔细一些,误操作的几率还是比较少的;有句话说的好,刀可以杀猪,也可以杀人,关键在于拿刀的人...