linux carpetas - Eliminar un enlace simbólico a un directorio




de link (9)

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

Intenté rm y vuelvo rm: cannot remove 'foo' .
rmdir y volví a 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?


Answers

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


En CentOS, simplemente ejecute rm linkname y se le preguntará "¿eliminar el enlace simbólico?". Escriba Y y Enter , el enlace desaparecerá y el directorio estará seguro.


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 que sí.


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, hizo una copia del directorio en caso de que luego eliminara el enlace flexible en el Explorador de Windows y luego eliminara el elemento en la Papelera de reciclaje. Hizo ruidos como si estuviera borrando los archivos pero no lo hizo. Hacer una copia de seguridad sin embargo!


Si rm no puede eliminar un enlace simbólico, quizás deba 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.



Suponiendo que en realidad es un enlace simbólico,

$ rm -d symlink

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


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

$ unlink mySymLink

unlink () borra un nombre del sistema de archivos. Si ese nombre era el último enlace a un archivo y ningún proceso tiene el archivo abierto, el archivo se elimina y el espacio que estaba usando está disponible para su reutilización. Si el nombre era el último enlace a un archivo, pero en cualquier proceso que aún tenga el archivo abierto, el archivo seguirá existiendo hasta que se cierre el último descriptor de archivo que lo menciona.

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

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

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

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


El comando que desea es 'du -sk' du = "uso de disco"

El indicador -k le da salida en kilobytes, en lugar del valor predeterminado de los sectores del disco (bloques de 512 bytes).

La marca -s solo mostrará una lista de las cosas en el directorio de nivel superior (es decir, el directorio actual, por defecto, o el directorio especificado en la línea de comandos). Es extraño que du tenga el comportamiento opuesto de ls en este sentido. Por defecto, du le dará recursivamente el uso del disco de cada subdirectorio. En contraste, ls solo proporcionará archivos de lista en el directorio especificado. (ls -R te da un comportamiento recursivo.)





linux file symlink