En informática , un enlace simbólico (también enlace simbólico o enlace suave ) es un archivo cuyo propósito es apuntar a un archivo o directorio (llamado "destino") especificando una ruta al mismo. [1]
Los enlaces simbólicos son compatibles con POSIX y con la mayoría de los sistemas operativos tipo Unix , como FreeBSD , Linux y macOS . También existe soporte limitado en Windows 7 y Windows Vista , y hasta cierto punto en Windows 2000 y Windows XP en forma de archivos de acceso directo. CTSS en IBM 7090 tenía archivos vinculados por nombre en 1963. [2] [3] [4] En 1978, los sistemas operativos para minicomputadoras de DEC y el RDOS de Data General incluían enlaces simbólicos.
Un enlace simbólico contiene una cadena de texto que el sistema operativo interpreta y sigue automáticamente como una ruta a otro archivo o directorio. Este otro archivo o directorio se llama "destino". El enlace simbólico es un segundo archivo que existe independientemente de su destino. Si se elimina un enlace simbólico, su destino no se ve afectado. Si un enlace simbólico apunta a un objetivo, y algún tiempo después ese objetivo se mueve, se le cambia el nombre o se elimina, el enlace simbólico no se actualiza ni se elimina automáticamente, sino que continúa existiendo y aún apunta al antiguo objetivo, que ahora es una ubicación inexistente o archivo. Los enlaces simbólicos que apuntan a objetivos movidos o inexistentes a veces se denominan rotos , huérfanos , muertos o colgantes .
Los enlaces simbólicos son diferentes de los enlaces físicos . Los enlaces físicos no vinculan rutas en diferentes volúmenes o sistemas de archivos , mientras que los enlaces simbólicos pueden apuntar a cualquier archivo o directorio independientemente de los volúmenes en los que residen el enlace y el destino. Los enlaces físicos siempre hacen referencia a un archivo existente, mientras que los enlaces simbólicos pueden contener una ruta arbitraria que no apunta a nada.
Los enlaces simbólicos funcionan de forma transparente para muchas operaciones: los programas que leen o escriben en archivos nombrados por un enlace simbólico se comportarán como si operaran directamente en el archivo de destino. Sin embargo, tienen el efecto de cambiar un sistema de archivos jerárquico de un árbol a un gráfico dirigido, lo que puede tener consecuencias para operaciones tan simples como determinar el directorio actual de un proceso. Incluso el estándar Unix para navegar al directorio principal de un directorio ya no funciona de manera confiable frente a los enlaces simbólicos. Algunos shells intentan heurísticamente mantener la ilusión de una jerarquía en forma de árbol, pero cuando lo hacen, esto hace que produzcan resultados diferentes a los de otros programas que manipulan nombres de rutas sin esa heurística, confiando en su lugar en el sistema operativo. [5] Los programas que necesitan manejar enlaces simbólicos especialmente (por ejemplo, shells y utilidades de respaldo) necesitan identificarlos y manipularlos directamente.
Algunas distribuciones de Unix y Linux utilizan ampliamente enlaces simbólicos en un esfuerzo por reordenar la jerarquía del sistema de archivos. Esto se logra con varios mecanismos, como enlaces simbólicos variantes que dependen del contexto. Esto ofrece la oportunidad de crear un árbol de directorios más intuitivo o específico de la aplicación y reorganizar el sistema sin tener que rediseñar el conjunto principal de funciones y utilidades del sistema.
En los sistemas operativos compatibles con POSIX , los enlaces simbólicos se crean con la llamada al sistema symlink
[6] . El ln
comando de shell normalmente utiliza la llamada al sistema link
[7] , que crea un vínculo físico . Cuando se especifica la bandera, se utiliza la llamada al sistema symlink(), creando un enlace simbólico. Los enlaces simbólicos se introdujeron en 1982 en 4.1a BSD Unix de UC Berkeley . [8]ln -s
El siguiente comando crea un enlace simbólico en la interfaz de línea de comandos (shell):
ln -s ruta_destino ruta_enlace
target_path es la ruta relativa o absoluta a la que debe apuntar el enlace simbólico. Normalmente el objetivo existirá, aunque se pueden crear enlaces simbólicos a objetivos inexistentes. link_path es la ruta del enlace simbólico.
Después de crear el enlace simbólico, se pueden utilizar algunas operaciones para tratarlo como un alias para el destino. Sin embargo, las operaciones lstat
, [9] lchown
[10] y readlink
[11] son exclusivas de los enlaces simbólicos y no se aplican al destino; Al utilizar esas llamadas al sistema, los programas que examinan el sistema de archivos (por ejemplo, ls
, find
) pueden informar sobre enlaces simbólicos (en lugar de sus objetivos, si los hay). Debido a que las llamadas al sistema rename
y unlink
están codificadas para operar directamente en enlaces simbólicos, los comandos de administración del sistema de archivos (por ejemplo, rm
, mv
) afectan el enlace simbólico en sí (en lugar de aplicarse al destino del enlace simbólico, si lo hay). El rm
comando (eliminar archivo) elimina el enlace en sí, no el archivo de destino. Del mismo modo, el mv
comando mueve o cambia el nombre del enlace, no del destino. El cp
comando tiene opciones que permiten copiar el enlace simbólico o el destino. Los comandos que leen o escriben el contenido del archivo accederán al contenido del archivo de destino.
La aplicación de listado de directorios POSIX, ls
denota enlaces simbólicos con una flecha después del nombre, que apunta al nombre del archivo de destino (consulte el siguiente ejemplo), cuando se solicita la lista larga de directorios ( -l
opción). Cuando se solicita una lista de directorio de un enlace simbólico que apunta a un directorio, sólo se mostrará el enlace en sí. Para obtener una lista del directorio vinculado, la ruta debe incluir un carácter separador de directorio final ('/', barra diagonal).
Nota: En el siguiente ejemplo, no cree el directorio "tres" antes de crear el enlace en el directorio /tmp.
$ mkdir -p /tmp/uno/dos $ echo "test_a" >/tmp/one/two/a $ echo "test_b" >/tmp/one/two/b $ cd /tmp/one/two $ ls -l -rw-r--r-- 1 grupo de usuarios 7 ene 01 10:01 a -rw-r--r-- 1 grupo de usuarios 7 ene 01 10:01 b $ cd /tmp $ ln -s /tmp/one/two three $ ls -l three lrwxrwxrwx 1 grupo de usuarios 12 22 de julio 10:02 /tmp/tres -> /tmp/one/two $ ls -l tres/ -rw -r--r-- 1 grupo de usuarios 7 01 de enero 10:01 a -rw-r--r-- 1 grupo de usuarios 7 01 de enero 10:01 b$ cd tres $ ls -l -rw-r--r-- 1 grupo de usuarios 7 01 de enero 10:01 a -rw-r--r-- 1 grupo de usuarios 7 01 de enero 10:01 b $ cat a test_a $ gato /tmp/uno/dos/a prueba_a $ echo "prueba_c" >/tmp/uno/dos/a $ gato /tmp/uno/dos/a prueba_c $ gato a prueba_c
Las primeras implementaciones de enlaces simbólicos almacenaron la información del enlace simbólico como datos en archivos normales. El archivo contenía la referencia textual al destino del enlace y los bits del modo de archivo indicaban que el tipo de archivo es un enlace simbólico.
Este método era lento y suponía un uso ineficiente del espacio en disco en sistemas pequeños. Una mejora, llamada enlaces simbólicos rápidos , permitió el almacenamiento de la ruta de destino dentro de las estructuras de datos utilizadas para almacenar información de archivos en el disco ( inodos ). Este espacio normalmente almacena una lista de direcciones de bloques de disco asignadas a un archivo. Por lo tanto, se accede rápidamente a los enlaces simbólicos con rutas de destino cortas. Los sistemas con enlaces simbólicos rápidos a menudo recurren al método original si la ruta de destino excede el espacio de inodo disponible. El estilo original se denomina retroactivamente enlace simbólico lento . También se utiliza para la compatibilidad del disco con otras versiones o versiones anteriores de sistemas operativos.
Aunque almacenar el valor del enlace dentro del inodo ahorra un bloque de disco y una lectura del disco, el sistema operativo aún necesita analizar el nombre de la ruta en el enlace, lo que siempre requiere leer inodos adicionales y generalmente requiere leer otros directorios, potencialmente muchos, y procesarlos. tanto la lista de archivos como los inodos de cada uno de ellos hasta que encuentre una coincidencia con los componentes de la ruta del enlace. Sólo cuando un enlace apunta a un archivo en el mismo directorio los "enlaces simbólicos rápidos" proporcionan un rendimiento significativamente mejor que otros enlaces simbólicos.
La gran mayoría de las implementaciones compatibles con POSIX utilizan enlaces simbólicos rápidos. Sin embargo, el estándar POSIX no requiere que se implemente para los enlaces simbólicos todo el conjunto de información de estado de archivo común a los archivos normales. Esto permite que las implementaciones utilicen otras soluciones, como almacenar datos de enlaces simbólicos en entradas de directorio.
No se utilizan los permisos del sistema de archivos de un enlace simbólico; los modos de acceso del archivo de destino están controlados por los propios permisos del archivo de destino. Algunos sistemas operativos, como FreeBSD, ofrecen la posibilidad de modificar los permisos de archivos y los atributos del sistema de archivos de un enlace simbólico, a través de lchmod
[12] y lchflags
[13] llamadas al sistema respectivamente.
El tamaño informado de un enlace simbólico es la cantidad de caracteres en la ruta a la que apunta.
Un sistema de archivos Unix tradicional tiene una estructura de árbol, [14] sin embargo, los enlaces simbólicos le permiten contener bucles. [5]
NTFS 3.1 introdujo soporte para enlaces simbólicos para cualquier tipo de archivo. Se incluyó con Windows XP , pero solo estaba habilitado de forma predeterminada para aplicaciones en modo kernel. Windows Vista y versiones posteriores de Windows permitieron la compatibilidad con enlaces simbólicos a aplicaciones en modo de usuario. El mklink
comando interno del símbolo del sistema de Windows puede crear enlaces simbólicos. Se requieren controladores de terceros para habilitar la compatibilidad con enlaces simbólicos NTFS en Windows XP. [15] A diferencia de los puntos de unión , un enlace simbólico también puede apuntar a un archivo o a una ruta de red remota del Bloque de mensajes del servidor (SMB). Además, la implementación del enlace simbólico NTFS proporciona soporte completo para enlaces entre sistemas de archivos. Sin embargo, la funcionalidad que permite enlaces simbólicos entre hosts requiere que el sistema remoto también los admita.
Los enlaces simbólicos están diseñados para ayudar en la migración y la compatibilidad de aplicaciones con sistemas operativos POSIX . Microsoft pretendía que los enlaces simbólicos de Windows Vista "funcionaran como enlaces UNIX". [16] Sin embargo, la implementación difiere de los enlaces simbólicos de Unix en varios aspectos. Por ejemplo, los usuarios de Windows Vista deben indicar manualmente al crear un enlace simbólico si se trata de un archivo o un directorio. [17] Windows 7 y Vista admiten un máximo de 31 puntos de análisis (y por lo tanto enlaces simbólicos) para una ruta determinada (es decir, cualquier ruta determinada puede tener como máximo 31 direcciones indirectas antes de que Windows se dé por vencido). [18] Solo los usuarios con el nuevo privilegio Crear enlace simbólico , que solo los administradores tienen de forma predeterminada, pueden crear enlaces simbólicos. [19] Si este no es el comportamiento deseado, se debe cambiar en la consola de administración de la Política de seguridad local. Además, los enlaces simbólicos NTFS a archivos son distintos de los enlaces simbólicos NTFS a directorios y, por lo tanto, no se pueden usar indistintamente, a diferencia de POSIX, donde el mismo enlace simbólico puede hacer referencia a archivos o directorios.
En Windows Vista y versiones posteriores, cuando la ruta del directorio de trabajo termina con un enlace simbólico, la referencia de la ruta principal actual, ..
se referirá al directorio principal del enlace simbólico en lugar de al de su destino. Este comportamiento también se encuentra a nivel de shell en al menos algunos sistemas POSIX, incluido Linux , pero nunca en el acceso a archivos y directorios a través de llamadas al sistema operativo. Por ejemplo, bash comandos integrados pwd
y cd
opere en el directorio lógico actual. pwd
se utiliza a menudo en scripts para determinar el directorio de trabajo actual real. Cuando se utiliza cualquier ruta con una llamada al sistema, cualquier uso de ..
utilizará el sistema de archivos principal real del directorio que contiene la ..
entrada del pseudodirectorio. Entonces, cd ..; cat something
y cat ../something
puede arrojar resultados completamente diferentes.
Los siguientes ejemplos crean un enlace simbólico llamado "Descargas" en "E:\" que apunta a la carpeta Descargas en el perfil del usuario actual.
mklink
es un comando interno.mklink /D E:\Downloads %UserProfile%\Downloads
New-Item -Path 'E:\Downloads' -ItemType 'SymbolicLink' -Value "$Env:UserProfile\Downloads"
La versión Windows 2000 de NTFS introdujo puntos de análisis , que permitieron, entre otras cosas, el uso de puntos de montaje de volumen y puntos de unión. Los puntos de unión son únicamente para directorios y, además, únicamente para directorios locales; Los puntos de unión a recursos compartidos remotos no son compatibles. [20] Los kits de recursos de Windows 2000 y XP incluyen un programa llamado linkd para crear puntos de unión; Mark Russinovich de Sysinternals distribuyó uno más potente llamado Junction .
No todas las aplicaciones estándar admiten puntos de análisis. Lo más notable es que Backup sufre este problema y emitirá un mensaje de error 0x80070003 [21] cuando las carpetas de las que se va a realizar la copia de seguridad contienen un punto de análisis.
Los accesos directos , que son compatibles con los exploradores gráficos de archivos de algunos sistemas operativos, pueden parecerse a enlaces simbólicos, pero difieren en varios aspectos importantes. Una diferencia es qué tipo de software puede seguirlos:
Los mecanismos también tienen diferentes capacidades:
Casi como atajos, pero transparentes para el shell de Windows. [24] Se implementan como carpetas normales (que deben tener el atributo de solo lectura y/o sistema [25] ) que contienen un acceso directo llamado target.lnk que hace referencia al destino y un escritorio.ini (oculto) con (al menos ) los siguientes contenidos:
[.ShellClassInfo] CLSID2 = {0AFACED1-E828-11D1-9187-B532F1E9575D}
Los accesos directos a carpetas se crean y utilizan desde el shell de Windows en el entorno de la red , por ejemplo.
Los objetos de shell [26] o carpetas de shell se definen en el registro de Windows y también pueden usarse para implementar una especie de enlace simbólico. Al igual que los accesos directos a carpetas, son transparentes para el shell de Windows.
Una implementación mínima es (el CLSID {00000000-0000-0000-0000-000000000000} se utiliza como marcador de posición):
[ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}] @ = "nombre para mostrar" [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\DefaultIcon] @ = "..." ; ruta al icono [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\InProcServer32] @ = "%SystemRoot%\\System32\\ShDocVw.Dll" "ThreadingModel" = "Apartamento" [ HKEY_CLASSES_ROOT \CLSID\{ 00000000-0000-0000-0000-000000000000}\Instancia] "CLSID" = "{0AFACED1-E828-11D1-9187-B532F1E9575D}" [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000- 000000000000}\Instancia\InitPropertyBag ] "Atributos" = hexadecimal : 15,00,00,00 "Objetivo" = "..."; absoluto (SIN "TargetKnownFolder" o "TargetSpecialFolder" solamente) ; o ruta relativa al destino "TargetKnownFolder" = "{guidguid-guid-guid-guid-guidguidguid}"; GUID de la carpeta de destino, Windows Vista y posterior "TargetSpecialFolder" = "0x00xy"; CSIDL del objetivo [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\ShellFolder] "Atributos" = hexadecimal : 00,00,00,00
La carpeta Mis documentos en el Escritorio , así como las carpetas Fuentes y Herramientas administrativas en el Panel de control son ejemplos de objetos de shell redirigidos a carpetas del sistema de archivos.
Cygwin simula enlaces simbólicos compatibles con POSIX en el sistema de archivos de Microsoft Windows. Utiliza interfaces de programación y utilidades de usuario idénticas a las de Unix (ver arriba), pero crea accesos directos de Windows (archivos .lnk) con información adicional utilizada por Cygwin en el momento de la resolución del enlace simbólico. Los enlaces simbólicos de Cygwin cumplen con el estándar POSIX en términos de cómo se resuelven y con los estándares de Windows en términos de su representación en el disco.
Además, Cygwin se puede configurar para admitir enlaces simbólicos nativos de Windows que se pueden usar desde Cygwin sin restricciones. [27] Esto requiere:
Sin embargo, existen algunas diferencias. Cygwin no tiene forma de especificar información relacionada con los accesos directos, como el directorio de trabajo o el icono, ya que no hay lugar para dichos parámetros en el ln -s
comando. Para crear archivos .lnk estándar de Microsoft, Cygwin proporciona las utilidades mkshortcut
y readshortcut
. [28]
La Guía del usuario de Cygwin tiene más información sobre este tema. [27] MSYS2 , que está basado en Cygwin, tiene un conjunto similar de configuraciones de enlaces winsymlinks pero por defecto copia los archivos. [29]
Implementaciones de características similares a enlaces simbólicos.
Sistema de tiempo compartido compatible con el MIT c. 1963 y Incompatible Timesharing System tienen archivos vinculados donde el nombre del archivo de destino se especifica en una entrada de directorio. [2] [3] [4]
El comando que crea enlaces simbólicos es makelink
, que también se utiliza para enlaces físicos. Internamente, dos.library devuelve un código de error que indica que un destino es un enlace suave si intenta realizar acciones en él que solo son legales para un archivo, y las aplicaciones que desean seguir el enlace simbólico deben realizar una llamada explícita a siga el enlace y vuelva a intentar la operación. El shell de AmigaDOS seguirá los enlaces automáticamente.
En Mac OS, las aplicaciones o los usuarios también pueden emplear alias , que tienen la característica adicional de seguir al objetivo, incluso si se mueve a otra ubicación en el mismo volumen. Esto no debe confundirse con el alias del comando de shell .
En el sistema operativo OS/2 , los enlaces simbólicos se parecen un poco a las sombras del Workplace Shell gráfico . Sin embargo, las sombras, debido al modelo de objetos del sistema totalmente orientado a objetos, son considerablemente más poderosas y robustas que un simple enlace. Por ejemplo, las sombras no pierden sus capacidades cuando se les cambia el nombre o cuando se reubica el objeto o sujeto del enlace. [31]
Los enlaces simbólicos pueden implementarse de forma variable o dependiente del contexto, de modo que el enlace apunte a objetivos variables dependiendo de un parámetro de configuración, un parámetro de tiempo de ejecución u otra condición instantánea.
Un enlace simbólico variable o variante es un enlace simbólico que tiene un nombre de variable incrustado. Esto permite cierta flexibilidad en el orden del sistema de archivos que no es posible con un enlace simbólico estándar. Las variables incrustadas en un enlace simbólico pueden incluir información específica del usuario y del entorno.
Los sistemas operativos que utilizan enlaces simbólicos variantes incluyen NetBSD , DragonFly BSD y Domain/OS . [32] [33] [5] Tru64 utiliza un enlace simbólico dependiente del contexto donde el contexto es el número de miembro del clúster.
El sistema operativo OSx de Pyramid Technology implementó enlaces simbólicos condicionales que apuntaban a diferentes ubicaciones dependiendo del universo en el que se ejecutaba un programa. Los universos admitidos eran SysV.3 de AT&T y Berkeley Software Distribution (BSD 4.3). Por ejemplo: si el comando ps se ejecutara en el universo att , entonces el enlace simbólico para el directorio /bin apuntaría a /.attbin y se ejecutaría el programa /.attbin/ps . Mientras que si el comando ps se ejecutara en el universo ucb , entonces /bin apuntaría a /.ucbbin y se ejecutaría /.ucbbin/ps . También se crearon enlaces simbólicos condicionales similares para otros directorios como /lib , /usr/lib , /usr/include . [34]
A medida que CTSS se desarrolló, proporcionamos formas para que los usuarios compartieran sus archivos en el disco, a través de "archivos comunes" y "vínculos".
Entradas UFD que apuntan a otras entradas UFD en lugar del archivo mismo
Enlace: El formato es similar a Copiar. El archivo especificado no se copia
También incluye algunas otras características que pueden resultarle útiles, como
enlaces simbólicos
y un esquema de grupo mejorado.