【问题标题】:Deleting a folder that contains symlinks删除包含符号链接的文件夹
【发布时间】:2011-02-27 23:37:21
【问题描述】:

如果我rm -rf 一个文件夹中有软链接,它会尝试跟踪这些链接并删除相应的文件夹,还是直接取消链接?

我有一个包含符号链接的主目录的副本,我害怕rm -rf 它以防它跟随这些链接并炸毁相应的文件夹...

【问题讨论】:

    标签: linux bash macos shell


    【解决方案1】:

    POSIX 引用

    既然rm -ris POSIX我们也可以看看他们怎么说:https://pubs.opengroup.org/onlinepubs/009604599/utilities/rm.html

    rm 实用程序不应通过跟随符号链接进入层次结构的其他部分来遍历目录,但应删除链接本身。

    基本原理部分提到了更多:

    根据说明,由于依赖于 unlink() 功能,rm 实用程序本身会删除符号链接,而不是它们引用的文件。使用 -r 或 -R 删除层次结构时,必须明确禁止跟随符号链接。

    【讨论】:

      【解决方案2】:

      一般来说,rm 不会“删除”。它“取消链接”。这意味着rm 删除了对文件的引用。当引用的数量达到零时,该文件将不再可访问,并且及时,它所在的磁盘区域将用于其他用途。

      当您rm 一个目录时,目录中的内容将被取消链接。符号链接是(有点像)文件,其中包含目标名称,因此它们只是被删除。真正弄清楚他们指向什么然后取消链接目标是一项特殊的工作,因此不会由通用工具完成。

      【讨论】:

        【解决方案3】:

        这是一个例子:

        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 -r 只会删除符号链接本身,但是, rm -r b/ 将删除 a 的所有内容(然后产生您报告的错误)!因此它会留下 a 和 b,但会删除 a/1 和 a/2。
        【解决方案4】:

        没有。 rm -rf 不会跟随符号链接 - 它只会删除它们。

        % mkdir a                                                             
        % touch a/foo
        % mkdir b                                                               
        % ln -s a b/a                                                           
        % rm -rf b                                                              
        %   ls a                                                                  
        foo
        

        【讨论】:

          猜你喜欢
          • 2010-11-11
          • 2012-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-15
          • 2019-05-27
          • 1970-01-01
          • 2015-09-14
          相关资源
          最近更新 更多