删除一个目录的符号链接

我有一个指向一个重要目录的符号链接。我想去掉这个符号链接,同时保留它后面的目录。

我试过rm,得到的结果是rm: cannot remove 'foo'
我试过rmdir,得到的结果是rmdir: 未能删除'foo'。目录不是空的。 然后我通过rm -frm -rfsudo rm -rf进行操作。

然后我去找我的备份。

有什么方法可以摆脱符号链接,而不把婴儿和洗澡水一起扔掉?

解决办法
# this works
rm foo
# versus
rm foo/

基本上,你需要告诉它删除一个文件,而不是删除一个目录。我相信rmrmdir之间的区别是由于C库处理两者的方式不同而存在的。

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

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

评论(11)

使用"unlink"命令,并确保***不要在末尾有/。

$ unlink mySymLink

unlink()将一个名字从文件系统中删除。**如果该名称是一个文件的最后一个链接,并且没有进程打开该文件,则该文件被删除,其使用的空间可重新使用。 如果这个名字是一个文件的最后一个链接,但是任何进程仍然打开着这个文件,那么这个文件将继续存在,直到最后一个指向它的文件描述符被关闭。

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

如果这个名字指的是一个符号链接,那么这个链接就会被删除

如果该名称指的是一个套接字、fifo或设备,那么它的名称就会被删除,但打开该对象的进程可以继续使用它。

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

评论(11)

如果rm不能删除一个符号链接,也许你需要看看包含该符号链接的目录的权限。要删除目录条目,你需要在包含目录上有写入权限。

评论(0)