我有一个重要目录的符号链接.我想摆脱那个符号链接,同时保持它背后的目录.
我试着rm
回去rm: cannot remove 'foo'
.
我试着rmdir
然后回来rmdir: failed to remove 'foo': Directory not empty
然后继续前进rm -f
,rm -rf
然后sudo rm -rf
然后我去寻找我的备份.
有没有办法摆脱符号链接,而不是用洗澡水扔掉婴儿?
# this works rm foo # versus rm foo/
基本上,您需要告诉它删除文件,而不是删除目录.我认为由于C库对待每个库的方式不同rm
而rmdir
存在差异和存在.
无论如何,第一个应该工作,而第二个应该抱怨foo是一个目录.
如果它不能如上所述,那么检查您的权限.您需要对包含目录的写入权限才能删除文件.
使用"unlink"命令并确保不在最后使用/
$ unlink mySymLink
unlink()从文件系统中删除名称.如果该名称是文件的最后一个链接,并且没有进程打开该文件,则该文件将被删除,并且其使用的空间可供重用. 如果名称是文件的最后一个链接,但任何进程仍然打开文件,则文件将保持存在,直到引用它的最后一个文件描述符关闭为止.
我认为如果我正确阅读它可能会有问题.
如果名称引用符号链接,则删除该链接.
如果名称引用套接字,fifo或设备,则删除其名称,但打开该对象的进程可以继续使用它.
https://linux.die.net/man/2/unlink
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:~$
使用rm symlinkname
但不要在末尾包含正斜杠(不要使用:) rm symlinkname/
.然后会询问您是否要删除符号链接,y
以回答是.
假设它实际上是一个符号链接,
$ rm -d symlink
它应该弄清楚,但是因为它不能我们启用潜在的代码,这个潜在的代码用于另一个不再存在的情况,但恰好在这里做正确的事情.
如果rm无法删除符号链接,您可能需要查看包含符号链接的目录的权限.要删除目录条目,您需要对包含目录具有写入权限.