Frage Entfernen Sie einen Symlink zu einem Verzeichnis


Ich habe einen Symlink zu einem wichtigen Verzeichnis. Ich möchte diesen Symlink loswerden und dabei das Verzeichnis behalten.

Ich habe es versucht rm und komm zurück rm: cannot remove 'foo'.
Ich habe es versucht rmdir und bin zurück gekommen rmdir: failed to remove 'foo': Directory not empty
Ich bin dann durchgegangen rm -f, rm -rf und sudo rm -rf

Dann ging ich zu meinen Backups.

Gibt es eine Möglichkeit, den Symlink loszuwerden, ohne das Baby mit dem Bade auszuschütten?


904
2017-10-16 20:18


Ursprung


Antworten:


# this works
rm foo
# versus
rm foo/

Im Grunde müssen Sie ihm sagen, dass er eine Datei löschen und nicht ein Verzeichnis löschen soll. Ich glaube den Unterschied zwischen rm und rmdir existiert aufgrund von Unterschieden in der Art und Weise, wie die C-Bibliothek sie behandelt.

Auf jeden Fall sollte das erste funktionieren, während das zweite sich darüber beschweren sollte, dass foo ein Verzeichnis ist.

Wenn es nicht wie oben funktioniert, überprüfen Sie Ihre Berechtigungen. Sie benötigen Schreibrechte für das enthaltende Verzeichnis, um Dateien zu entfernen.


1123
2017-10-16 20:22



Verwenden Sie den Befehl "unlink" und stellen Sie sicher nicht das / am Ende haben

$ unlink mySymLink

unlink () löscht einen Namen aus dem Dateisystem. Wenn dieser Name der letzte Link zu einer Datei ist und keine Prozesse die Datei geöffnet haben, wird die Datei gelöscht und der von ihr verwendete Speicherplatz wird für die Wiederverwendung verfügbar gemacht.   Wenn der Name der letzte Link zu einer Datei war, aber bei allen Prozessen die Datei noch geöffnet ist, bleibt die Datei bestehen, bis der letzte Dateideskriptor, der darauf verweist, geschlossen wird.

Ich denke, das kann problematisch sein, wenn ich es richtig lese.

Wenn der Name auf einen symbolischen Link verweist, wird der Link entfernt.

Wenn der Name auf einen Socket, einen Fifo oder ein Gerät verweist, wird der Name für ihn entfernt, aber Prozesse, bei denen das Objekt geöffnet ist, können ihn weiterhin verwenden.

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


774
2017-10-16 20:22



rm sollte den symbolischen Link entfernen.

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:~$ 

13
2017-10-16 20:24



Angenommen, es ist tatsächlich ein Symlink,

$ rm -d symlink

Es sollte es herausfinden, aber da es nicht möglich ist, können wir den latenten Code aktivieren, der für einen anderen Fall gedacht war, der nicht mehr existiert, aber hier das Richtige tut.


12
2017-10-16 22:29



Benutzen rm symlinkname Geben Sie am Ende keinen Schrägstrich ein (verwenden Sie nicht: rm symlinkname/). Sie werden dann gefragt, ob Sie den Symlink entfernen möchten, y mit ja antworten.


11
2017-08-21 21:13



Wenn rm einen Symlink nicht entfernen kann, müssen Sie möglicherweise die Berechtigungen für das Verzeichnis prüfen, das den Symlink enthält. Um Verzeichniseinträge zu entfernen, benötigen Sie Schreibrechte für das enthaltende Verzeichnis.


7
2017-10-16 20:21



Angenommen, Ihr Setup ist etwas wie: ln -s /mnt/bar ~/fooDann solltest du in der Lage sein rm foo ohne Problem. Wenn Sie nicht können, stellen Sie sicher, dass Sie der Besitzer der sind foo und haben die Erlaubnis, die Datei zu schreiben / auszuführen. Entfernen foo wird sich nicht berühren bar, es sei denn, Sie tun es rekursiv.


3
2017-10-16 20:23



Auf CentOS lauf einfach rm linkname und es wird gebeten, "symbolischen Link zu entfernen". Art Y und Eingeben, der Link ist weg und das Verzeichnis ist sicher.


2
2017-09-17 19:23