Un enlace simbólico es un pequeño archivo que contiene la ubicación (es decir, la ruta y el nombre de archivo) de un archivo de destino, con una bandera en la entrada del directorio que indica que es un enlace simbólico.
Cuando abre un enlace simbólico, el sistema operativo seguirá la ubicación para encontrar el archivo de destino. Si el objetivo en sí mismo es un enlace simbólico, también sigue su ubicación (1) (2) hasta que la ubicación apunte a un archivo que no es un enlace simbólico (llamémoslo FinalFile ). Luego, el sistema operativo obtiene el inodo del FinalFile (el inodo contiene metadatos como tiempo de modificación y también tiene un puntero a los datos del archivo). Finalmente se abre el inodo del FinalFile . De ahora en adelante, el proceso usa ese inodo para leer / escribir en el archivo. Como resultado, cambiar el nombre o la ruta del enlace simbólico, eliminar el enlace simbólico, cambiar la ruta o el nombre del FinalFile o incluso eliminar el FinalFile(3) no tiene ningún efecto en el proceso; sigue leyendo del mismo inodo.
En la mayoría de los casos, las operaciones de datos de archivos en el enlace simbólico afectarán al FinalFile (por ejemplo, leer y escribir en el enlace simbólico leerá / escribirá en el FinalFile ) pero hay excepciones: la readlink()
llamada al sistema lee el contenido del enlace simbólico en sí.
Por otro lado, las operaciones de metadatos de archivos (como cambiar el nombre o eliminar) generalmente afectarán el enlace simbólico. Pero también hay excepciones aquí: la lstat()
llamada al sistema es similar stat()
, excepto que devuelve información sobre el enlace simbólico en lugar de sobre el FinalFile (2).
(1) Hay un límite en el número de niveles y las cosas se vuelven un poco más complejas si la ubicación en el enlace simbólico es una ruta relativa.
(2) Leer enlace simbólico (7): manejo de enlaces simbólicos para más detalles.man 7 symlink
(3) El rm
comando o la unlink()
llamada al sistema no elimina físicamente un archivo. Elimina la entrada del directorio que apunta al inodo del archivo. El archivo en sí solo se elimina si tanto a) no hay más entradas de directorio (enlaces duros) que se refieren a su inodo yb) ningún proceso tiene el archivo abierto.