rm -fr /var/www/html 作用,请记住,rm -fr /不会再删除系统了

前几天相信做运维的同学都知道的一个新闻,那就是让你心惊胆战的”rm -fr /”命令。没错,那个新闻就是国外一哥们据说是Ansible的bug,导致执行”rm -fr $foo/$bar”时,$foo/$bar变量并没有获取到值,所以你懂的,命令就变成了”rm -fr /”,但是”rm -fr /”真的会删除整个系统吗?是的,真的会删除,但那是老一点系统版本才会有这么一个天大的bug,比如CentOS5,在CentOS6/7早已不存在这个问题了,系统已经做了安全控制,确切地说,rm -fr /不会被执行,当然你也可以强制执行此命令,一切后果自行承担。当然这些也是我在看了一篇文件后实验得出的结论,下面给出验证过错。

那篇文章是这么说的,根据最新的POSIX.1-2008标准,”rm -fr /”命令是不会被执行的,而是应该打印错误信息。但是老的POSIX.1-2004标准则无此定义,那么这个有什么意义呢?在Linux中,我们所使用的rm、touch、mkdir、cp、mv等命令都是由coreutils这个核心工具提供的,coreutils 5.2稳定版于2004年2月19日发布,而现在coreutils工具在CentOS6上都已经是8.22版本了(CentOS7是8.4版本,Debian8是8.23版本)。只有你的coreutils的版本足够高(5.2版本以上),才可以”安全地”使用rm -fr /这个指令,老版本的rm还是存在此问题的。

下面来验证看看

内核版本和coreutils版本(CentOS6)

[root@localhost ~]# uname -r

2.6.32-431.el6.x86_64

1

2

[root@localhost~]# uname -r

2.6.32-431.el6.x86_64

[root@localhost ~]# rpm -qi coreutils

Name : coreutils

Version : 8.22

Release : 15.el7

.............

Description :

These are the GNU core utilities. This package is the combination of

the old GNU fileutils, sh-utils, and textutils packages.

1

2

3

4

5

6

7

8

[root@localhost~]# rpm -qi coreutils

Name:coreutils

Version:8.22

Release:15.el7

.............

Description:

ThesearetheGNUcoreutilities.Thispackageisthecombinationof

theoldGNUfileutils,sh-utils,andtextutilspackages.

内核版本和coreutils版本(CentOS7)

[root@localhost ~]# uname -r

3.10.0-327.el7.x86_64

1

2

[root@localhost~]# uname -r

3.10.0-327.el7.x86_64

[root@localhost ~]# rpm -qi coreutils

Name : coreutils Relocations: (not relocatable)

Version : 8.4 Vendor: CentOS

1

2

3

[root@localhost~]# rpm -qi coreutils

Name:coreutilsRelocations:(notrelocatable)

Version:8.4Vendor:CentOS

内核版本和coreutils版本(Debian8)

root@localhost:~ # uname -r

3.16.0-4-amd64

1

2

root@localhost:~# uname -r

3.16.0-4-amd64

root@localhost:~ # dpkg -s coreutils

Package: coreutils

Essential: yes

Status: install ok installed

Priority: required

Section: utils

Installed-Size: 14249

Maintainer: Michael Stone

Architecture: amd64

Multi-Arch: foreign

Version: 8.23-4

1

2

3

4

5

6

7

8

9

10

11

root@localhost:~# dpkg -s coreutils

Package:coreutils

Essential:yes

Status:installokinstalled

Priority:required

Section:utils

Installed-Size:14249

Maintainer:MichaelStone

Architecture:amd64

Multi-Arch:foreign

Version:8.23-4

开始执行”rm -fr /”,所以以上系统执行此命令都会报以下错误信息(都验证过)

[root@localhost ~]# rm -fr /

rm: it is dangerous to operate recursively on `/'

rm: use --no-preserve-root to override this failsafe

1

2

3

[root@localhost~]# rm -fr /

rm:itisdangeroustooperaterecursivelyon`/'

rm:use--no-preserve-roottooverridethisfailsafe

[root@localhost ~]# LANG="zh_CN.UTF-8"

[root@localhost ~]# rm -fr /

rm: 在"/" 进行递归操作十分危险

rm: 使用 --no-preserve-root 选项跳过安全模式

1

2

3

4

[root@localhost~]# LANG="zh_CN.UTF-8"

[root@localhost~]# rm -fr /

rm:在"/"进行递归操作十分危险

rm:使用--no-preserve-root选项跳过安全模式

可以看出执行”rm -fr /”命令会被不允许执行,说执行rm /十分危险,然后就拒绝了。另外,除了直接使用根目录作为参数,如果这个参数是在经过计算、替换之后、最后和根目录等价;也会提示错误的。下面来看看。

[root@localhost ~]# foo="/tmp"

[root@localhost ~]# far=""

[root@localhost ~]# rm -fr $foo/$far

[root@localhost ~]# foo=""

[root@localhost ~]# rm -fr $foo/$far

rm: it is dangerous to operate recursively on `/'

rm: use --no-preserve-root to override this failsafe

1

2

3

4

5

6

7

[root@localhost~]# foo="/tmp"

[root@localhost~]# far=""

[root@localhost~]# rm -fr $foo/$far

[root@localhost~]# foo=""

[root@localhost~]# rm -fr $foo/$far

rm:itisdangeroustooperaterecursivelyon`/'

rm:use--no-preserve-roottooverridethisfailsafe

同样可以检测出来,然后拒绝执行此操作,但是下面也说了,可以使用–no-preserve-root选项,强制执行”rm -fr / –no-preserve-root”,如果这样的话,整个系统就会被删除的哦!谨慎操作,我是在虚拟机上面试的删除操作哦。系统马上就会死掉了,马上系统就会报一大堆”command not found”,然后重启系统就会发现如下报错:

[root@localhost ~]# rm -fr / --no-preserve-root

1

[root@localhost~]# rm -fr / --no-preserve-root

640e390eb4e969469dc26c59626074d0.png

然后重启系统就挂掉了。

如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。

### 解决方案分析 在 Linux 系统中,当尝试下载 `kylin-os` 仓库元数据时遇到错误,通常可能是由于网络连接问题、配置文件中的 URL 不正确或不可访问、镜像源失效等原因引起的。以下是针对该问题的具体解决方案。 #### 可能的原因及对应解决方法 1. **Curl 错误 (无法解析主机名)** 如果错误提示类似于 `- Curl error (6): Couldn't resolve host name`,这表明系统无法解析指定的域名。可以检查 DNS 配置是否正常工作[^4]。 ```bash cat /etc/resolv.conf ``` 若发现 DNS 设置不正确,可以通过修改 `/etc/resolv.conf` 文件来设置有效的 DNS 服务器地址(例如 Google 的公共 DNS 或阿里云 DNS)。 ```bash nameserver 8.8.8.8 nameserver 114.114.114.114 ``` 2. **URL 地址无效或不可达** 当错误显示为 `Status code: 404` 或者 `Couldn't open file` 时,可能是因为仓库的 URL 已经更改或者不再可用[^3]。需要确认 `kylin-os` 仓库的实际地址并更新到 YUM 配置文件中。 编辑对应的 `.repo` 文件: ```bash vi /etc/yum.repos.d/kylin-os.repo ``` 修改其中的 baseurl 和 gpgkey 字段指向最新的有效路径。如果不确定最新地址,可以从官方文档或其他可信资源获取。 3. **本地缓存损坏** 偶尔也会因为之前操作留下的残缺缓存而导致此类问题。清除现有缓存后再重新同步可能会解决问题[^1]。 执行以下命令清理旧的数据: ```bash sudo yum clean all sudo rm -rf /var/cache/yum/* ``` 4. **防火墙或代理干扰** 某些情况下企业内部环境会启用严格的网络安全策略,阻止外部求到达目标站点。此时应联系管理员调整规则允许必要的流量通过;另外也可以临时关闭 selinux 测试效果如何[^2]: ```bash setenforce 0 systemctl stop firewalld.service ``` 5. **版本兼容性冲突** 对于某些特定发行版来说,可能存在不同代际间支持程度差异的情况。比如 CentOS 8 用户试图接入只适配 RHEL 7.x 版本的服务端口就会引发类似的状况。因此务必核实当前操作系统与所选存储库之间是否存在匹配关系[^4]。 --- ### 实施步骤总结代码片段 下面提供一段综合性的脚本来帮助快速排查和修复上述提到的各种潜在隐患: ```bash #!/bin/bash # Step A: Check Network Connectivity & DNS Resolution ping -c 3 www.google.com || echo "Network issue detected!" cat /etc/resolv.conf && grep -q '^nameserver' /etc/resolv.conf \ || { echo 'No valid DNS configured'; exit 1; } # Step B: Clean Up Existing Cache Data yum clean all rm -fr /var/cache/yum/* # Step C: Validate Repository Configuration Files REPO_FILE="/etc/yum.repos.d/kylin-os.repo" if [[ ! -f "$REPO_FILE" ]]; then echo "${REPO_FILE} missing." else sed -i '/baseurl/d;/gpgcheck/d' $REPO_FILE fi # Optional D: Temporarily Disable Security Policies For Testing Purposes Only! setenforce 0 systemctl disable --now firewalld.service echo Done! Please retry your original command now. ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值