最近在网上看到一张图(原图出处不详,题图据原图重制,有修改。)
唔,感觉很有道理啊,你看,rm
是删除,这个单词简单好记;连 rf
都给出了解释,“垃圾文件”;/*
代表目录下的所有文件,没毛病;sudo
也有了,确保权限没问题。
哈哈,你一定会说,又编段子搞笑,没人会信的。
会有人执行这样的命令来清理所谓的垃圾文件么?你别说,这还真不好说。
我们经常会发一些关于关于 Bash 别名的文章,总有一些同学皮一下“贡献”一些别致的别名,比如 alias ls=rm -rf
,alias cd=rm -rf
等等。虽然我认为几乎没有人会被这些命令恶搞,但是大家也屡屡乐此不疲。
我将这张图发到朋友圈里,好友“龙十三”表示,这不仅仅清除垃圾文件,而且清除垃圾系统管理员。
是啊,为什么会有这样的段子一再出现呢?就是因为我们有些不求甚解的人,遇到问题了,习惯于从网上随便找个命令示例瞎试,不去探究其原理,也不去核实可靠性。所以,这样的段子真是用来清除“系统管理员里的垃圾”的。
那么让我们来探究一下上面这条命令,看看这里有多少知识点。
rm 的那些事
首先,这条命令是用来清除 Linux 系统的根目录(/
)下所有文件的。它使用了两个命令选项:
-
-r
:递归,对目录及其下的内容进行递归操作 -
-f
:强制,无需确认操作
这两个选项可以单独写作 -r
和 -f
,也可以按 POSIX 惯例,将两个选项合并成 -rf
。这里的 -r
和 -f
选项,绝非上图中恶搞的 “Rubbish” 和 “Files”。
其后的参数 /*
指的是根目录 /
下的所有文件。
-r 选项
-r
选项代表递归,其意思是指递归地对参数中的目录及其下的文件或子目录进行删除操作。
这个选项除了短选项风格,还有 GNU 风格的长选项 --recursive
;也出于兼容性的原因,支持同义的大写 -R
参数。
如果没有该选项,则不会删除目录及其下的内容。
-f 选项
在介绍 -f
选项之前,让我们先看一下这里没有出现的 -i
选项。
原生的 rm
命令在删除文件或目录时,遵循 UNIX 惯例,在执行删除操作前和操作成功后,是静默的,毫无提示的。除非遇到错误(如要删除的文件不存在)时,否则绝不抱怨。
后来,可能是鉴于很多人经常会错误删除文件,在绝大多数的 Linux 发行版上的 rm
命令是一个添加了 -i
选项的别名:
-
alias rm=rm -i
这里的 -i
选项用于在每一个删除动作前做个提示,需要用户明确给予确认才会删除。