我只是rm -rf /*
不小心跑了,但我的意思是rm -rf ./*
(注意斜线后面的星号)。
alias rm='rm -i'
并且--preserve-root
默认情况下没有拯救我,那么有什么自动保护措施吗?
我不是 root 用户,因此立即取消了命令,但某个地方的权限有所放松,因为我注意到我的 Bash 提示符已经损坏。我不想依赖权限,也不想成为 root 用户(我可能会犯同样的错误sudo
),也不想因为系统中某个文件丢失而寻找神秘的错误,因此,备份和sudo
很好,但对于这种特定情况,我希望有更好的方法。
关于三思而后行,用脑子。我实际上在用脑子!但我用它解决一些涉及 10 种不同事物的复杂编程任务。我深深地沉浸在这项任务中,脑力已经不足以检查标志和路径,我甚至不考虑命令和参数,我考虑的是“清空当前目录”之类的操作,我大脑的不同部分将它们转换为命令,有时会犯错误。我希望计算机能够纠正它们,至少是那些危险的。
答案1
我遵循的技巧之一是#
在使用命令时将其放在开头rm
。
root@localhost:~# #rm -rf /
这可以防止意外执行rm
错误的文件/目录。一旦验证,#
从开头删除。这个技巧很有效,因为在 Bash 中,以 开头的单词#
会导致该单词和该行上的所有剩余字符被忽略。因此命令被忽略了。
或者
如果您想阻止任何重要目录,还有一个技巧。
在该目录中创建一个名为的文件-i
。如何创建这样一个奇怪的文件?使用touch -- -i
或touch ./-i
现在尝试rm -rf *
:
sachin@sachin-ThinkPad-T420:~$ touch {1..4}
sachin@sachin-ThinkPad-T420:~$ touch -- -i
sachin@sachin-ThinkPad-T420:~$ ls
1 2 3 4 -i
sachin@sachin-ThinkPad-T420:~$ rm -rf *
rm: remove regular empty file `1'? n
rm: remove regular empty file `2'?
此处*
将扩展-i
为命令行,因此您的命令最终变为rm -rf -i
。因此命令将在删除前提示。您可以将此文件放在您的/
、、等中/home/
。/etc/
或者
用作--preserve-root
的一个选项。在较新的软件包中包含的rm
中,此选项是默认选项。rm
coreutils
--preserve-root
do not remove `/' (default)
或者
使用安全保证
摘自网站:
Safe-rm 是一种安全工具,旨在通过用包装器替换 /bin/rm 来防止意外删除重要文件,该包装器会根据可配置的黑名单(包含永远不应删除的文件和目录)检查给定的参数。
尝试删除这些受保护文件或目录的用户将无法执行此操作,而是会显示一条警告消息:
$ rm -rf /usr Skipping /usr
答案2
你的问题:
我只是不小心运行了 rm -rf /*,但我的意思是 rm -rf ./*(注意斜线后的星号)。
解决方案:不要这样做!按照惯例,不要./
在路径开头使用。斜线不会给命令增加任何价值,只会引起混淆。
./*
含义与 相同*
,因此上述命令最好写成:
rm -rf *
这是一个相关的问题。我经常看到以下表达式,其中有人认为FOO
设置为类似于/home/puppies
。事实上,我今天才在一家主要软件供应商的文档中看到这一点。
rm -rf $FOO/
但如果FOO
没有设置,则将计算为rm -rf /
,这将尝试删除系统上的所有文件。结尾的斜杠是不必要的,因此在实践中不要使用它。
下面的操作可以达到同样的效果,而且不太可能损坏您的系统:
rm -rf $FOO
我是通过惨痛经历才学到这些技巧的。14 年前,当我拥有第一个超级用户帐户时,我意外地rm -rf $FOO/
从 shell 脚本中运行并破坏了一个系统。其他 4 位系统管理员看到后说:“是的。每个人都会这样做一次。现在这是您的安装介质(36 张软盘)。快去修复它。”
其他人推荐使用--preserve-root
和等解决方案safe-rm
。但是,这些解决方案并不适用于所有 Un*xe 变体,并且可能无法在 Solaris、FreeBSD 和 MacOSX 上使用。此外,safe-rm
要求您在使用的每个 Linux 系统上安装其他软件包。如果您依赖safe-rm
,当您开始一份新工作而它们尚未safe-rm
安装时会发生什么?这些工具只是一种拐杖,最好依赖已知的默认值并改善您的工作习惯。
答案3
由于这是关于“Serverfault”的,我想说的是:
如果你有几十台或更多的服务器,并且有一个较大的管理员/用户团队,某人是要去往rm -rf
或chown
错误的目录。
您应该制定一个计划,以尽可能最短的 MTTR 恢复受影响的服务。
答案4
正如您所提到的,您可以随时使用别名:
what_the_hell_am_i_thinking() {
echo "Stop." >&2
echo "Seriously." >&2
echo "You almost blew up your computer." >&2
echo 'WHAT WERE YOU THINKING!?!?!' >&2
echo "Please provide an excuse for yourself below: "
read
echo "I'm sorry, that's a pathetic excuse. You're fired."
sleep 2
telnet nyancat.dakko.us
}
alias rm -fr /*="what_the_hell_am_i_thinking"
rm -fr /*
您还可以将它与命令行 Twitter 客户端集成,以提醒您的朋友您几乎是如何以root 身份擦除硬盘并自取其辱的。