Question Supprimer un lien symbolique vers un répertoire


J'ai un lien symbolique vers un répertoire important. Je veux me débarrasser de ce lien symbolique, tout en gardant le répertoire derrière.

j'ai essayé rm et reviens rm: cannot remove 'foo'.
j'ai essayé rmdir et reviens rmdir: failed to remove 'foo': Directory not empty
J'ai ensuite progressé à travers rm -f, rm -rf et sudo rm -rf

Puis je suis allé trouver mes sauvegardes.

Y a-t-il un moyen de se débarrasser du lien symbolique sans jeter le bébé avec l'eau du bain?


904
2017-10-16 20:18


origine


Réponses:


# this works
rm foo
# versus
rm foo/

Fondamentalement, vous devez lui dire de supprimer un fichier, pas supprimer un répertoire. Je crois que la différence entre rm et rmdir existe en raison de différences dans la façon dont la bibliothèque C traite chaque.

En tout cas, le premier devrait fonctionner, tandis que le second devrait se plaindre de foo étant un répertoire.

Si cela ne fonctionne pas comme ci-dessus, vérifiez vos autorisations. Vous avez besoin d'une autorisation en écriture dans le répertoire contenant pour supprimer des fichiers.


1123
2017-10-16 20:22



utilisez la commande "unlink" et assurez-vous ne pas avoir le / à la fin

$ unlink mySymLink

unlink () supprime un nom du système de fichiers. Si ce nom est le dernier lien vers un fichier et qu'aucun processus n'a ouvert le fichier, le fichier est supprimé et l'espace utilisé est mis à disposition pour réutilisation.   Si le nom était le dernier lien vers un fichier mais que tous les processus avaient encore le fichier ouvert, le fichier resterait en existence jusqu'à ce que le dernier descripteur de fichier le concernant soit fermé.

Je pense que cela peut être problématique si je le lis correctement.

Si le nom fait référence à un lien symbolique, le lien est supprimé.

Si le nom fait référence à une socket, un fifo ou un périphérique, son nom est supprimé mais les processus qui ont ouvert l'objet peuvent continuer à l'utiliser.

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


774
2017-10-16 20:22



RM devrait supprimer le lien symbolique.

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



En supposant que c'est en fait un lien symbolique,

$ rm -d symlink

Il devrait le comprendre, mais puisqu'il ne peut pas nous permettre le code latent qui était prévu pour un autre cas qui n'existe plus mais arrive à faire la bonne chose ici.


12
2017-10-16 22:29



Utilisation rm symlinkname mais n'incluez pas de barre oblique à la fin (n'utilisez pas: rm symlinkname/). Il vous sera alors demandé si vous souhaitez supprimer le lien symbolique, y pour répondre oui.


11
2017-08-21 21:13



Si rm ne peut pas supprimer un lien symbolique, vous devez peut-être consulter les autorisations sur le répertoire qui contient le lien symbolique. Pour supprimer les entrées du répertoire, vous devez disposer des droits d'écriture sur le répertoire conteneur.


7
2017-10-16 20:21



En supposant que votre configuration est quelque chose comme: ln -s /mnt/bar ~/foo, alors vous devriez être capable de faire un rm foo sans problème. Si vous ne le pouvez pas, assurez-vous que vous êtes le propriétaire du foo et avoir la permission d'écrire / exécuter le fichier. Enlever foo ne touchera pas bar, sauf si vous le faites de manière récursive.


3
2017-10-16 20:23