Eliminar un enlace simbólico a un directorio


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

He intentado rm y volver rm: cannot remove 'foo'.
Lo intenté rmdir y volví rmdir: failed to remove 'foo': Directory not empty
Entonces progresé a través de rm -f, rm -rf y sudo rm -rf

Luego fui a buscar mis copias de seguridad.

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

Author: Freedom_Ben, 2008-10-17

9 answers

# this works
rm foo
# versus
rm foo/

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

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

Si no funciona como antes, entonces revisa tus permisos. Necesita permiso de escritura en el directorio que contiene para eliminar archivos.

 1155
Author: Matthew Scharley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-16 20:22:41

Use el comando "desvincular" y asegúrese de que no tenga el / al final

$ unlink mySymLink

Unlink() elimina 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 todavía tiene el archivo abierto, el archivo permanecerá en existencia hasta que el último descriptor de archivo que se refiere a él sea cerrado.

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

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

Si el nombre se refiere 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

 786
Author: Joe Phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-21 15:54:37

Rm debe 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:~$ 
 14
Author: Steve K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-16 20:24:24

Use rm symlinkname pero no incluya una barra diagonal al final (no use: rm symlinkname/). A continuación, se le preguntará si desea eliminar el enlace simbólico, y para responder sí.

 12
Author: DeeEss09,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-29 19:23:41

Asumiendo que en realidad es un enlace simbólico,

$ rm -d symlink

Debería averiguarlo, pero como no puede habilitar el código latente que estaba destinado a otro caso que ya no existe, pero sucede que hace lo correcto aquí.

 12
Author: Joshua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-29 19:23:49

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

 7
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-16 20:21:00

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

 3
Author: tj111,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-16 20:23:45

En CentOS, simplemente ejecute rm linkname y le pedirá que " remove symbolic link?". Escriba Y y Enter, el enlace desaparecerá y el directorio estará seguro.

 2
Author: Yuri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-17 20:01:45

Tuve este problema con MinGW (en realidad Git Bash) ejecutándose en un servidor Windows. Ninguna de las sugerencias anteriores parecía funcionar. Al final, a hizo una copia del directorio en caso de que luego eliminara el enlace suave en el Explorador de Windows y luego eliminara el elemento en la papelera de reciclaje. Hizo ruidos como si estuviera eliminando los archivos, pero no lo hizo. Hacer una copia de seguridad sin embargo!

 1
Author: Keith Whittingham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 08:39:24