linux-alias方式防止根目录误删
linux-alias方式防止根目录误删(本文档未测试)
参考:
- http://www.opstool.com/article/179
- https://steemit.com/cn/@oflyhigh/sudo-rm-rf
- https://zhuanlan.zhihu.com/p/106066854
rm是一个危险的命令,为了防止rm /这样的操作发生。我们可以在用户的家目录的.bashrc里将rm alisa一下,加上–preserve-root这个参数。其实除了rm外,另外几个命令也需要谨慎,如chgrp、chown、chmod总结一下,我们可以在.bashrc里加入如下alias:
1 | alias chgrp='chgrp --preserve-root' |
详细解释之根目录保护
有一定经验的系统管理员可能这个时候会想起来,rm
命令有一对专门针对根目录的选项 --preserve-root
和 --no-preserve-root
。这对选项的意思是:
--preserve-root
:保护根目录,这是默认行为。--no-preserve-root
:不保护根目录。
这对选项是后来添加到 rm
命令的。可能几乎每个系统管理员都犯过操作错误,而这其中删除过根目录的比比皆是(我就是一个)。出现这种情况的原因有几种:
- 输入手误:比如本来想输入
rm /tmp/test.txt
,结果不小心键盘打的飞起,多输入了一个空格变成:rm / tmp/test.txt
。看到根目录(/
)后面的空格了么?!——这就是我当前自己亲手犯过的错误,而且是在生产服务器上。 - 未正确初始化或命名错误的 shell 脚本变量:比如在脚本中,
rm -rf /${tmp_dir}
,如果无论是tmp_dir
变量没有正确赋值还是输入错误(原本或许是tmpdir
?),那会导致什么?当然是删除根目录咯~
鉴于这种情况层出不穷,在 Linux 圈子几乎和“初学者如何退出 vi” 一样成为经典笑话了。所以,在 POSIX 第七版规范中,rm
命令添加了 --preserve-root
选项,并将其作为默认行为,以降低出现这种错误的可能。
但是,这个选项不能防范本文中所述的清除根目录下所有文件(/*
)的操作。
有的同学可能要问,那为什么还会专门出现 --no-preserve-root
选项呢?这可能主要是出于 UNIX 哲学的考虑,给予你想要的一切权力,犯傻是你的事情,而不是操作系统的事情。万一,你真的想删除根目录下的所有文件呢?
你还别说,真有这种需求:比如你要清除一个 chroot 环境下的所有文件。 chroot 我们这里不多讲,它就是以一个目录作为“监狱”,该目录在逻辑上形成了新的“根目录”,在该监狱内的文件操作不能跨出该目录范畴。近些年流行的 Docker、LXC/LXD 之类的容器技术,都是一种 chroot 技术。