几年来,除非使用该选项调用 GNU 实用程序,否则它rm
不会删除。然而,该命令长期以来一直被集体潜意识视为危险,人们仍然经常将其称为“可怕”的命令。/
--no-preserve-root
rm -rf /
我想知道这个rm
不能删除的规则是什么时候/
出现的。我检查了 POSIX 规范,我可以看到虽然POSIX:2008包含此安全功能,但POSIX:2001没有。由于POSIX规范的在线版本不时更新,随着每个新的子发布,我也检查了回程机器,找到了2010年的POSIX:2008的相关页面,并且能够确认rm
无法删除的规则/
那时已经上市了。
所以,我的问题是:
rm
无法删除的规则何时/
添加到 POSIX 规范中?它是在最初的 2008 年版 Single UNIX Specification 第 4 版中还是在修订版中添加的?- 这个限制是什么时候添加到 GNU 的
rm
?我很确定它是在它被添加到 POSIX 之前,但它是什么时候发生的?
您可以在线找到所有 POSIX 2008 版本的 HTML 版本:
这是在 2008 年版中添加的。
技术勘误通常不会添加新功能。
您可以看到以前的版本 ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) 没有该文本。
新文本在2003-05-09 奥斯汀集团会议上被接受,以包含在该标准的后续修订版中。
同年 3 月,Sun Microsystems 的 John Beck 提出了请求(链接需要 opengroup 注册,另请参阅此处的增强请求编号 5)。
GNU在此 2003-11-09 提交
rm
中添加了--preserve-root
和--no-preserve-root
选项,但仅在此 2006-09-03 提交中成为默认值,因此在 coreutils 6.2 中--preserve-root
自 2004 年 10 月 4 日提交以来, FreeBSD 一直保留斜线(带有“找出我的内衣到底有多防火”提交日志),但最初不是在 下,直到十年后他们记得检查 POSIX 现在强制它在这一点上也是在 POSIX 模式下完成的。
POSIXLY_CORRECT
FreeBSD 最初的提交提到当时 Solaris 已经在这样做了。
@JdePB(在下面的评论中)发现指向 Sun 内部故事的链接证实并提供了有关 Solaris 起源的更多详细信息,并表明 Solaris 在他们向 Austin 小组提出请求之前已经采取了保护措施。
它解释了添加该排除项的理由。虽然如果他们这样做了只能责怪自己,但有一种情况是,如果在没有检查/是否提供
rm -rf /
的情况下,脚本可以做到这一点,这在误用 Solaris 补丁时对一些 Sun 客户造成了不好的影响(根据该链接)。rm -rf -- "$1/$2"
$1
$2
在此之前很久就添加了禁止删除
.
and..
以防止潜在的事故。rm
仍然是一个危险的命令。它做了它应该做的事情:删除你告诉它的东西。还会删除所有内容。众所周知,Shell 文件名完成会导致此类问题
扩展为:
因为
something
碰巧不是一个目录。当尝试使用通配符(默认情况下不是)调用时, Shell 喜欢
tcsh
或zsh
将添加额外的提示。rm
*
tcsh