![`rm -rf` 和 `rm -r` 的结果相同](https://linux22.com/image/1043841/%60rm%20-rf%60%20%E5%92%8C%20%60rm%20-r%60%20%E7%9A%84%E7%BB%93%E6%9E%9C%E7%9B%B8%E5%90%8C.png)
请记住,我刚刚学习 bash,因此请用适度的措辞解释一下。
rm -rf
并且rm -r
似乎做了同样的事情。本教程 (https://help.ubuntu.com/community/Beginners/BashScripting) 表示这-f
是强制的,计算机将不会请求删除文件的权限。
为了测试这一点,我创建了一个锁定的文件,但-r
得到-rf
了相同的结果,即没有删除文件(权限被拒绝)。
为什么是这样?
答案1
在Ubuntu这rm 命令在使用选项运行时,其行为符合预期,无需提示即可删除我们拥有的文件-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 论坛上询问...