Pregunta Eliminar un enlace simbólico a un directorio


Tengo un enlace simbólico a un directorio importante. Quiero deshacerme de ese enlace simbólico, mientras mantengo el directorio detrás de él.

Lo intenté rm y regresa rm: cannot remove 'foo'.
Lo intenté rmdir y regresé rmdir: failed to remove 'foo': Directory not empty
Luego progresé a través de rm -f, rm -rf y sudo rm -rf

Luego fui a buscar mis copias de seguridad.

¿Hay alguna manera de deshacerse del enlace simbólico sin tirar al bebé con el agua del baño?


904
2017-10-16 20:18


origen


Respuestas:


# this works
rm foo
# versus
rm foo/

Básicamente, necesita decirle que elimine un archivo, no elimine un directorio. Yo creo que la diferencia entre rm y rmdir existe debido a las diferencias en la forma en que la biblioteca C trata a cada uno.

En cualquier caso, el primero debería funcionar, mientras que el segundo debería quejarse de que foo sea un directorio.

Si no funciona como se indica arriba, verifique sus permisos. Necesita permiso de escritura en el directorio contenedor para eliminar archivos.


1123
2017-10-16 20:22



utilice el comando "desvincular" y asegúrese no tener el / al final

$ unlink mySymLink

unlink () borra un nombre del sistema de archivos. Si ese nombre fue el último enlace a un archivo y ningún proceso tiene el archivo abierto, el archivo se elimina y el espacio que estaba utilizando se pone a disposición para su reutilización.   Si el nombre fue el último enlace a un archivo pero cualquier proceso aún tiene el archivo abierto, el archivo seguirá existiendo hasta que se cierre el último descriptor de archivo que hace referencia a él.

Creo que esto puede ser problemático si lo estoy leyendo correctamente.

Si el nombre hace referencia a un enlace simbólico, se elimina el enlace.

Si el nombre hace referencia a un socket, fifo o dispositivo, el nombre para el mismo se elimina, pero los procesos que tienen el objeto abierto pueden continuar usándolo.

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


774
2017-10-16 20:22



rm debería eliminar el enlace simbólico.

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



Asumiendo que en realidad es un enlace simbólico,

$ rm -d symlink

Debería resolverlo, pero dado que no podemos, habilitamos el código latente que estaba destinado a otro caso que ya no existe pero que hace lo correcto aquí.


12
2017-10-16 22:29



Utilizar rm symlinkname pero no incluya una barra inclinada al final (no use: rm symlinkname/) Luego se le preguntará si desea eliminar el enlace simbólico, y para responder si.


11
2017-08-21 21:13



Si rm no puede eliminar un enlace simbólico, tal vez necesite ver los permisos en el directorio que contiene el enlace simbólico. Para eliminar entradas de directorio, necesita permiso de escritura en el directorio que lo contiene.


7
2017-10-16 20:21



Suponiendo que su configuración es algo así como: ln -s /mnt/bar ~/foo, entonces deberías poder hacer un rm foo sin problema Si no puede, asegúrese de ser el propietario del foo y tiene permiso para escribir / ejecutar el archivo. Eliminando foo no tocará bar, a menos que lo hagas recursivamente.


3
2017-10-16 20:23



En CentOS, solo ejecuta rm linkname y le pedirá que "elimine el enlace simbólico". Tipo Y y Entrar, el enlace se habrá ido y el directorio estará seguro.


2
2017-09-17 19:23



Tuve este problema con MinGW (en realidad, Git Bash) ejecutándose en un servidor de Windows. Ninguna de las sugerencias anteriores pareció funcionar. Al final, hizo una copia del directorio en el caso, luego eliminó el enlace suave en el Explorador de Windows y luego eliminó el elemento en la Papelera de reciclaje. Hizo ruidos como si estuviera borrando los archivos pero no lo hizo. ¡Haz una copia de seguridad!


1
2018-01-30 08:39