命令行 如何防止 `rm rf/*` 破坏我的系统?

分享于 

6分钟阅读

ubuntu

 

问题:

在提交了删除我的整个文件系统的臭名昭著的错误之后 sudo rm -rf/* 我开始想知道为什么这样做是可以能的,以及怎样防止这个错误发生。

我建议的解决方案是从帐户中撤消 root 访问,但是很不方便,因为很多命令都需要 root 访问。

备份系统是一种明显的方式,但还需要一些停机时间,并且取决于系统的停机时间。

所以我的问题是:当用户试图删除他的文件系统 时,为什么不实现一个确认? 所以,当你真正想要这样做的时候,你只要点击Y 或者输入,如果你至少不丢失所有的东西。


回答 1:

满足 safe-rmInstall safe-rm ,"。rm 命令周围的包装以防止意外删除":

安全的rm通过将 rm 替换为不应该被删除的文件和目录的可以配置的黑名单来防止重要的文件。

试图删除其中一个 protected 文件或者目录的用户将无法这样做,而是将显示警告消息。 ( man safe-rm )

缺省配置已经包含系统目录,让我们尝试 rm/* 例如:


$ rm/*


safe-rm: skipping/bin


safe-rm: skipping/boot


safe-rm: skipping/dev


safe-rm: skipping/etc


safe-rm: skipping/home


safe-rm: skipping/lib


safe-rm: skipping/proc


safe-rm: skipping/root


safe-rm: skipping/sbin


safe-rm: skipping/sys


safe-rm: skipping/usr


safe-rm: skipping/var


…



对于运行不带 sudorm为你的shell 添加 alias 插件是一个不错的做法,它使 rm-i 为缺省的default。 这样 rm 就会在删除之前询问每个文件:

 
alias rm='rm -i'



 

一个类似的有用标志是 -i:

在删除三个以上的文件之前提示一次,或者递归移除,而不是-i的侵入。


回答 2:

确认已经存在,问题是命令的f,即 --force ;用户强制操作时,假设它正在执行操作。

一个示例:


 rm -r./*


 rm: remove write-protected regular file './mozilla_mvaschetto0/WEBMASTER-04.DOC'? N


 rm: cannot remove './mozilla_mvaschetto0': Directory not empty


 rm: descend into write-protected directory './pulse-PKdhtXMmr18n'? n


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-bolt.service-rZWMCb'? n


 rm: descend into write-protected directory './systemd-private- 890f5b31987b4910a579d1c49930a591-colord.service-4ZBnUf'? n


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-fwupd.service-vAxdbk'? n


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-minissdpd.service-9G8GrR'? 


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-ModemManager.service-s43zUX'? nn


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-rtkit-daemon.service-cfMePv'? n


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-systemd-timesyncd.service-oXT4pr'? n


 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-upower.service-L0k9rT'? n



它与 --force 选项不同,我不会得到任何确认和文件被删除。

问题是了解命令及其参数,在命令( 如果在教程中找到该命令)的man 中导航更多示例: 第一次我播放命令 tar xzf some.tar.gz,我要求自己,什么 xzf 意味着?

然后我把tar的人拿出来发现。


回答 3:

简短的回答是不要运行这样的命令。

漫长的故事是,它是定制的一部分。 本质上,这里有两个因素。 一个是你可以自由修改所有文件。

其次,rm命令提供了有用的语法糖来删除文件夹下的所有文件。

有效地说,这可以作为Unix机器的一个简单的原则。 是一个文件。 为了更好地使用,存在访问控制,但是在你的使用过程中存在重写

sudo

我想你可以添加别名或者函数来确保这永远不会被运行。


回答 4:

如果你的系统文件空间使用不是巨大的( 而这些日子'巨大'意味着'或者更多') 创建一些虚拟机实例,并且总是在一个虚拟机内部工作。 恢复只需要使用备份实例。

或者你可以创建一个 chroot 监狱,在里面工作。 如果它被弄坏了,你仍然需要一些恢复,但是在运行( 封闭) 系统时会更容易。



COM  COMM  SYS  系统  DES  PRE