我想从特定文件夹中递归删除文件和文件夹,所以我从该文件夹中运行了这个命令
rm -rf *
Run Code Online (Sandbox Code Playgroud)
我认为它会递归删除当前目录下的所有文件/目录。之后发生了一些不好的事情(我的服务器宕机了,甚至没有得到 ping 响应)。
Mat*_*nco 12
不要忘记在rm命令之后服务器无法访问的可能性与此无关。这可能是巧合!
最有可能的是,当前工作目录不是您在发出命令时所想的那样。
这样做时你是root吗?
这是发出命令时发生的情况rm -rf *:
*在这种情况下)解析为与所使用的通配符模式匹配的所有文件(包括目录、符号链接和设备特殊文件),在这种情况下,所有不以 a 开头的内容.通常按“字母顺序”排序贝壳。exec()S的第一个版本rm发现你的$PATH,与-rf作为第一个参数,以及匹配的文件,逐一连续参数。如果rm调用的是标准rm命令,它首先一个一个解析参数,将所有以 a 开头的参数(包括由 shell globbing 产生的参数)-视为选项,直到遇到不以 a 开头的参数-(除了使用 GNU 的命令getopt()在非选项之后接受选项),或者完全是--. 之后的所有内容都被视为文件名。
换句话说,如果您--no-preserve-root在当前目录中有一个名为(例如)的文件,它会被解释为 的选项rm,而不是要删除的文件名!
小心通配符(和文件命名)。如果您-r在当前目录中调用了一个文件,该命令ls *将按相反顺序列出其他文件,而不显示“-r”文件。
换句话说,如果您有一个名为 的文件--no-preserve-root,它将作为选项传递给rm,而不是作为文件名。
使用rm -rf -- *,以防止这种情况发生,同时也删除这些文件开头-。或者简单地使用绝对或相对路径名使文件名以 以外的其他内容开头-,如:rm ./--flagfile或rm /abs/path/to/--flagfile。
还有一个-i标志可以rm在删除任何内容之前提示(“交互式”)。