小编fla*_*006的帖子

为什么这个简单的 rm -rf 命令会破坏我的操作系统?

我使用 Bash 4.3.48(1),并在测试 VPS 机器上运行以下命令模式:

rm -rf ${drt}/${pma}*
Run Code Online (Sandbox Code Playgroud)

该命令删除了整个操作系统(Ubuntu)。通过执行可以明显看出这一点cd /,除了以下错误之外什么也没返回:

bash: cd /: 没有这样的文件或目录

更深入地观察,发生这种情况是因为上面原始命令中的两个变量都没有声明:

  1. 我创建了一个名为 的文件~/repoName/assignments_variables.sh,其中包含导出变量的列表(包括drtpma)。

  2. 相反source /etc/bash.bashrc,我运行了 running /etc/bash.bashrc,这是错误的,因为该文件仅与当前会话相关(尽管它可用于随后运行自己在子会话中执行数据的文件)。


现在我很清楚错误的路径是问题的一般原因,我想更深入地探讨一下并提出以下问题:

为什么 会rm -rf忽略错误的变量扩展并继续转到/*?我知道只有rm -rf在找到目录时才应该删除它,因此不应依赖于不存在的目录的部分路径(就像导致删除操作系统一样)。我如何改进该命令以涵盖将来可能出现的类似错误路径情况(由于错误的变量扩展)?/*rm -rf

是否有一些 Bash 指令可以确保 Bash 永远不会扩展空变量(直到我撤消该指令)?


让我强调一下:我通常不仅进行备份,而且进行双重备份。这确实是一个后台有 x3 备份的测试环境。

bash ubuntu path rm variable-substitution

1
推荐指数
1
解决办法
1296
查看次数

标签 统计

bash ×1

path ×1

rm ×1

ubuntu ×1

variable-substitution ×1