【问题标题】:Remove a symlink to a directory删除目录的符号链接
【发布时间】:2010-09-17 15:07:00
【问题描述】:

我有一个指向重要目录的符号链接。我想摆脱那个符号链接,同时将目录保留在它后面。

我尝试了rm 并返回rm: cannot remove 'foo'
我尝试了rmdir 并返回了rmdir: failed to remove 'foo': Directory not empty
然后我通过rm -frm -rfsudo rm -rf 取得进展

然后我去寻找我的备份。

有没有办法在不把婴儿和洗澡水一起扔掉的情况下摆脱符号链接?

【问题讨论】:

  • 问 linux 相关问题有什么问题?上次我检查时,堆栈溢出不是特定于操作系统的
  • 这个问题不是更适合超级用户,还是与 Linux 相关的 Stack Exchange?
  • @mwfearnley 会的,但请检查日期。那时超级用户还不是一个东西。它已被移植,所以它也在那里。不知道为什么它还在这里,但这是我得分最高的问题,我不会在嘴里看礼物业力。
  • 提示: rm -r link/ 删除目标上的内容
  • Then I went to find my back-ups - 这让我笑了。

标签: linux file symlink


【解决方案1】:
# this works:
rm foo
# versus this, which doesn't:
rm foo/

基本上,您需要告诉它删除一个文件,而不是删除一个目录。我相信 rmrmdir 之间存在差异是因为 C 库处理它们的方式不同。

无论如何,第一个应该可以工作,而第二个应该抱怨 foo 是一个目录。

如果它不能按上述方式工作,请检查您的权限。您需要对包含目录的写入权限才能删除文件。

【讨论】:

  • 啊是的。这就说得通了。我从来没有输入过 foo,我输入了 f 并且 bash 为我填写了 /。
  • 这并不总是有效。有时您需要运行rm -rf folderName(不带尾随/)以删除符号链接。例如,Amazon Linux 在某些情况下会以这种方式运行。
  • @r3mus:除非您想丢失其中的所有内容,否则切勿将-r 与符号链接一起使用。 -f 也不需要,除非可能覆盖文件权限。
  • 具体来说,unlinkln 又名“链接”操作无关。名称unlink 指的是从文件系统的文件表中取消链接/删除文件的过程,以便内容与对它们的任何引用分离 - 它们是取消链接的。这是一个令人困惑的名称,特别是在应用于链接和符号链接时会产生误导。 unlink 将适用于符号链接,因为它适用于任何文件,无论类型如何。
  • 如果您真的担心会做一些愚蠢的事情,alias rm="rm -i" 比我认为的其他任何东西都节省了更多的皮革。
【解决方案2】:

使用“取消链接”命令并确保在末尾有 /

$ unlink mySymLink

unlink() 从文件系统中删除一个名称。 如果该名称是文件的最后一个链接,并且没有进程打开该文件,则该文件将被删除,并且它正在使用的空间可供重复使用。 如果名称是文件的最后一个链接,但任何进程仍然打开该文件,则该文件将一直存在,直到最后一个引用它的文件描述符被关闭。

如果我没看错的话,我认为这可能会有问题。

如果名称引用了符号链接,则删除链接。

如果名称引用了套接字、fifo 或设备,则删除它的名称,但打开对象的进程可以继续使用它。

https://linux.die.net/man/2/unlink

【讨论】:

  • @OmarAbid “rm foo/”版本让我害怕。这个似乎更安全:)
  • 在 Ubuntu 中,我使用~/c/a/file/c/b/ln -s ~/c/a ~/c/b/ 进行了测试。在~/c/b/rm a/不起作用,rm -rf a/只清空原来的aunlink a 完美运行,unlink a/ 什么也不做。
  • 在 OS X 10.10 中,unlink 只是 rm 的别名。表明在处理目录结构的任何部分时应使用正确的rm 纪律。
  • 在脚本中rm -f 会默默地删除一个链接,不管它是否存在,而unlink 会在链接不存在时报错。没有与取消链接等效的 `-f' 选项,使脚本更复杂。
  • unlink 可以删除常规文件。它的功能不如rm,并且不特定于符号链接。 rm 也不会删除没有 -r 标志的目录。所以我推荐首选 rm,它有详细和交互的标志;以及有意义的警告和错误消息。
【解决方案3】:

rm 应该删除符号链接。

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

【讨论】:

    【解决方案4】:

    使用rm symlinkname,但不要在末尾包含正斜杠(不要使用:rm symlinkname/)。然后系统会询问您是否要删除符号链接,y 回答是。

    【讨论】:

    • 你没有错,但正确的答案已经在这里并被接受(4 年前!)。为什么要打扰?
    • Google 在搜索“删除符号链接”时将其作为特色 sn-p。也许它喜欢它的简洁性,不确定它的启发式是如何工作的。无论如何,当我回头看我的命令行时,我立即做了一个面部护理 :-)
    【解决方案5】:

    假设它实际上是一个符号链接,

    $ rm -d symlink
    

    它应该可以解决,但由于它不能启用用于另一个不再存在但恰好在这里做正确事情的情况的潜在代码。

    【讨论】:

    • CentOS 6.8、Coreutil 8.4(2018 年 6 月发布)中没有 -d 参数,但它存在于 Xubuntu 18.04、Coreutils 8.28(2018 年 1 月)中......
    【解决方案6】:

    如果 rm 无法删除符号链接,也许您需要查看包含符号链接的目录的权限。要删除目录条目,您需要包含目录的写入权限。

    【讨论】:

      【解决方案7】:

      假设您的设置类似于:ln -s /mnt/bar ~/foo,那么您应该能够毫无问题地执行rm foo。如果不能,请确保您是 foo 的所有者并有权写入/执行该文件。删除 foo 不会触及 bar,除非你递归地这样做。

      【讨论】:

        【解决方案8】:

        在 CentOS 上,只需运行 rm linkname,它会询问“删除符号链接?”。键入 YEnter,链接将消失,目录安全。

        【讨论】:

          【解决方案9】:

          我在 Windows Server 上运行的 MinGW(实际上是 Git Bash)遇到了这个问题。上述建议似乎都不起作用。最后复制目录以防万一然后删除Windows资源管理器中的软链接,然后删除回收站中的项目。它发出声音,好像它正在删除文件,但没有。不过一定要备份!

          【讨论】:

          • “它发出的声音就像是在删除文件...” - 哇!
          • LMFAO。 “它发出的声音就像是在删除文件……”
          • 我记得软盘!
          • 以上都不适合我:eddyq@eddyq-Latitude-E6440:~$ ls Desktop Downloads Dropbox-Windows Music Public Videos w Documents Dropbox examples.desktop Pictures Templates 'VmWare vmx files'跨度>
          【解决方案10】:

          我也遇到了同样的问题。所以我建议尝试unlink <absolute path>

          例如unlink ~/<USER>/<SOME OTHER DIRECTORY>/foo

          【讨论】:

          • 如果问题包含特定名称 (foo),则您的答案不应使用诸如“~///foo”之类的令人困惑的内容。一些解释也会有所帮助。
          【解决方案11】:

          您可以在创建符号链接的文件夹中使用 unlink

          【讨论】:

            猜你喜欢
            • 2019-08-26
            • 2012-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            相关资源
            最近更新 更多