关于linux:删除目录的符号链接

Remove a symlink to a directory

我有一个重要目录的符号链接。我想去掉这个符号链接,同时把目录放在后面。

我试了一下rm,把rm: cannot remove 'foo'拿回来。我试了一下rmdir,又把rmdir: failed to remove 'foo': Directory not empty弄回来了。然后我又通过了rm -frm -rfsudo rm -rf

然后我去找我的备份。

有没有一种方法可以摆脱这个符号链接,把婴儿和洗澡水一起扔掉?


1
2
3
4
# this works
rm foo
# versus
rm foo/

基本上,你需要告诉它删除一个文件,而不是删除一个目录。我相信rmrmdir之间的区别是存在的,因为C库对待每一个的方式不同。

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

如果它不能像上面那样工作,请检查您的权限。您需要对包含目录的写入权限才能删除文件。


使用"unlink"命令,确保结尾没有/

1
$ unlink mySymLink

unlink() deletes a name from the file system. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse.
If the name was the last link to a file but any processes still have the file open the file will remain in existence until the last file descriptor referring to it is closed.

我认为如果我读得正确,这可能会有问题。

If the name referred to a symbolic link the link is removed.

If the name referred to a socket, fifo or device the name for it is removed but processes which have the object open may continue to use it.

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


RM应该删除符号链接。

1
2
3
4
5
6
7
8
9
10
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:~$

使用rm symlinkname,但末端不包括正斜杠(不要使用:rm symlinkname/)。然后会询问您是否要删除symlink,y回答"是"。


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

1
$ rm -d symlink

它应该能解决这个问题,但由于它不能实现,所以我们启用了一个潜在的代码,这个代码原本是为另一个不再存在的案例设计的,但却恰好在这里做了正确的事情。


如果rm无法删除symlink,可能需要查看包含symlink的目录上的权限。要删除目录项,需要对包含目录具有写权限。


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


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


在CentOS上,只需运行rm linkname,它将要求"删除符号链接?".键入yenter,链接将消失,目录将安全。