【发布时间】:2011-02-27 23:37:21
【问题描述】:
如果我rm -rf 一个文件夹中有软链接,它会尝试跟踪这些链接并删除相应的文件夹,还是直接取消链接?
我有一个包含符号链接的主目录的副本,我害怕rm -rf 它以防它跟随这些链接并炸毁相应的文件夹...
【问题讨论】:
如果我rm -rf 一个文件夹中有软链接,它会尝试跟踪这些链接并删除相应的文件夹,还是直接取消链接?
我有一个包含符号链接的主目录的副本,我害怕rm -rf 它以防它跟随这些链接并炸毁相应的文件夹...
【问题讨论】:
POSIX 引用
既然rm -ris POSIX我们也可以看看他们怎么说:https://pubs.opengroup.org/onlinepubs/009604599/utilities/rm.html
rm 实用程序不应通过跟随符号链接进入层次结构的其他部分来遍历目录,但应删除链接本身。
基本原理部分提到了更多:
根据说明,由于依赖于 unlink() 功能,rm 实用程序本身会删除符号链接,而不是它们引用的文件。使用 -r 或 -R 删除层次结构时,必须明确禁止跟随符号链接。
【讨论】:
一般来说,rm 不会“删除”。它“取消链接”。这意味着rm 删除了对文件的引用。当引用的数量达到零时,该文件将不再可访问,并且及时,它所在的磁盘区域将用于其他用途。
当您rm 一个目录时,目录中的内容将被取消链接。符号链接是(有点像)文件,其中包含目标名称,因此它们只是被删除。真正弄清楚他们指向什么然后取消链接目标是一项特殊的工作,因此不会由通用工具完成。
【讨论】:
这是一个例子:
find a b
a
a/1
a/2
b
ll
drwxr-xr-x 2 ****** ****** 4.0K Feb 6 15:11 a
lrwxrwxrwx 1 ****** ****** 1 Feb 6 15:13 b -> a
.
rm -rf b
给予
find a b
a
a/1
a/2
.
rm -rf b/
给出错误:
rm: cannot remove `b/': Not a directory
结论:
rm 不遵循符号链接
【讨论】:
没有。 rm -rf 不会跟随符号链接 - 它只会删除它们。
% mkdir a
% touch a/foo
% mkdir b
% ln -s a b/a
% rm -rf b
% ls a
foo
【讨论】: