Además de todas las otras respuestas, quiero señalar las siguientes propiedades importantes:
Un softlink es una referencia verdadera, es decir, es un archivo pequeño que contiene un nombre de ruta. La resolución de un enlace suave ocurre de manera transparente para la aplicación: si un proceso abre un archivo, digamos /this/path/here
cuál es un enlace simbólico que apunta, /that/other/path
entonces el sistema /that/other/path
operativo realiza todo el manejo de la apertura . Además, si /that/other/path
resulta ser un enlace simbólico en sí mismo, el SO también se ocupa de esto. De hecho, el sistema operativo sigue la cadena de enlaces simbólicos hasta que encuentra algo más (por ejemplo, un archivo normal) o hasta que alcanza SYMLOOP_MAX
(vea sysconf(3)
) muchas entradas, en cuyo caso el sistema operativo (más precisamente: la llamada al sistema correspondiente) devuelve un error y establece errno
a ELOOP
. Por lo tanto, una referencia circular como xyz -> xyz
no detendrá el proceso. (Para sistemas Linux, ver path_resolution(7)
detalles completos).
Tenga en cuenta que un proceso puede verificar si un nombre de ruta es un enlace simbólico o no mediante el uso de lstat(2)
y puede modificar sus atributos de archivo (almacenados en la tabla de inodo) a través de lchown(2)
y otros (consulte symlink(7)
la historia completa).
Ahora, en términos de permiso, notará que los enlaces simbólicos siempre tienen permisos 777 ( rwxrwxrwx
en notación simbólica). Esto se debe al hecho de que, de todos modos, se pueden omitir otros permisos accediendo al archivo real. Por el contrario, 777 para un enlace simbólico no hace que el archivo con enlace simbólico sea accesible si no estaba accesible en primer lugar. Por ejemplo, un enlace simbólico con permisos 777 que apunta a un archivo con permisos 640 hace que el archivo no sea accesible para "otros" (el público en general). En otras palabras, un archivo xyz
es accesible a través de un enlace simbólico si y solo si es directamente accesible, es decir, sin direccionamiento indirecto. Por lo tanto, los permisos del enlace simbólico no tienen ningún efecto de seguridad.
Una de las principales diferencias visibles entre los enlaces duros y los enlaces simbólicos (también conocidos como enlaces blandos) es que los enlaces simbólicos funcionan en todos los sistemas de archivos, mientras que los enlaces duros están confinados a un solo sistema de archivos. Es decir, un archivo en la partición A se puede vincular simbólicamente desde la partición B, pero no se puede vincular desde allí. Esto queda claro por el hecho de que un enlace duro es en realidad una entrada en un directorio, que consiste en un nombre de archivo y un número de inodo, y que los números de inodo son únicos solo por sistema de archivos.
El término enlace duro es en realidad algo engañoso. Mientras que para los enlaces simbólicos, el origen y el destino son claramente distinguibles (el enlace simbólico tiene su propia entrada en la tabla de inodo), esto no es cierto para los enlaces duros. Si crea un enlace duro para un archivo, la entrada original y el enlace duro no se pueden distinguir en términos de lo que estaba allí primero. (Dado que se refieren al mismo inodo, comparten sus atributos de archivo como propietario, permisos, marcas de tiempo, etc.) Esto lleva a la afirmación de que cada entrada de directorio es en realidad un enlace rígido, y que vincular un archivo solo significa crear un segundo ( o tercero, o cuarto ...) enlace duro. De hecho, cada inodo almacena un contador para el número de enlaces duros a ese inodo.
Finalmente, tenga en cuenta que los usuarios comunes pueden no enlazar directorios. Esto se debe a que esto debe hacerse con la mayor precaución: un usuario incauto puede introducir ciclos en el árbol de archivos, por lo demás estrictamente jerárquico, que todas las herramientas habituales (como fsck
) y el sistema operativo en sí no están preparados para manejar.