`rm -rf` 和 `rm -r` 的结果相同

`rm -rf` 和 `rm -r` 的结果相同

请记住,我刚刚学习 bash,因此请用适度的措辞解释一下。

rm -rf并且rm -r似乎做了同样的事情。本教程 (https://help.ubuntu.com/community/Beginners/BashScripting) 表示这-f是强制的,计算机将不会请求删除文件的权限。

为了测试这一点,我创建了一个锁定的文件,但-r得到-rf了相同的结果,即没有删除文件(权限被拒绝)。

为什么是这样?

答案1

Ubunturm 命令在使用选项运行时,其行为符合预期,无需提示即可删除我们拥有的文件-f

写保护文件的示例:

:~/Test$ rm test.txt
rm: remove write-protected regular empty file ‘test.txt’? n
:~/Test$ rm -f test.txt
:~/Test$

Root 将能够删除所有文件,无论其权限如何。这就是为什么我们-f在运行时可能看不到选项的差异sudo rm

我们应该意识到Unix命令的行为在不同的操作系统上可能有所不同。

递归运行时,还请仔细检查命令rm-r)。如果在错误路径上意外发出此命令,将不可逆转地清除该路径上的所有文件。这可能对您的系统健康造成危害,如果在运行时没有提示错误( ),危害会更大-f

答案2

以下是对这两个选项的作用的解释。

-F 删除目录中的所有文件(无论是否受写保护),而不提示用户。但是,在受写保护的目录中,文件永远不会被删除(无论其权限如何),但不显示任何消息。如果尝试删除受写保护的目录,此选项将不会抑制错误消息。

-r 递归删除参数列表中的目录和子目录。目录中的文件将被清空并删除。通常会提示用户删除目录中包含的任何写保护文件。但是,如果使用了 -f 选项,或者标准输入不是终端且未使用 -i 选项,则会在不提示的情况下删除写保护文件。使用此选项时遇到的符号链接将不会被遍历。如果尝试删除非空的写保护目录,该实用程序将始终失败(即使使用了 -f 选项),从而导致错误消息。关于 rm

也可以看看命令参考

答案3

让我们明确一点:

  • rm -rf directory方法强制(不要问问题,只管做)递归删除目录
  • rm -r directory方法尝试删除递归目录

这是什么man rm说:

-f, --force
       ignore nonexistent files and arguments, never prompt
[...]
-r, -R, --recursive
       remove directories and their contents recursively

手册页中的另一个有用信息:

[...] 如果文件不可写,则标准输入是终端,并且
未给出 -f 或 --force 选项或 -i 或
给出了 --interactive=always 选项,R M提示用户是否
删除该文件。如果答复不肯定,则该文件
跳过。

当然,如果您没有权限移除/删除文件,您将收到rm: cannot remove ‘file_name’: Permission denied错误。-f无论如何,选项不会停留在删除您没有权限的文件的位置!

答案4

听起来你没有删除此文件的权限,也许管理员帐户不是 root。问题不应该出在 rm 上。

启用根: http://support.apple.com/kb/ht1528

无论如何,OSX 不是 Ubuntu 也不是 Linux,因此那里的情况可能会有所不同,最好在一些 OSX 论坛上询问...

相关内容