En informática , un enlace simbólico (también enlace simbólico o enlace flexible ) es un término para cualquier archivo que contiene una referencia a otro archivo o directorio en forma de ruta absoluta o relativa y que afecta la resolución de la ruta. [1]
Los enlaces simbólicos ya estaban presentes en 1978 en los sistemas operativos de miniordenadores de DEC y RDOS de Data General . Hoy en día son compatibles con el estándar del sistema operativo POSIX , la mayoría de los sistemas operativos similares a Unix , como FreeBSD , Linux y macOS . También existe un soporte limitado en los sistemas operativos Windows como Windows Vista , Windows 7 y, hasta cierto punto, en Windows 2000 y Windows XP en forma de archivos de acceso directo.
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 denomina "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 en algún momento después ese objetivo se mueve, cambia de nombre o se elimina, el enlace simbólico no se actualiza o elimina automáticamente, pero sigue existiendo y sigue apuntando al objetivo antiguo, ahora una ubicación inexistente o expediente. Los enlaces simbólicos que apuntan a objetivos movidos o inexistentes a veces se denominan rotos , huérfanos , muertos o colgando .
Los enlaces simbólicos son diferentes de los enlaces físicos. Los enlaces físicos no enlazan 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 se refieren a un archivo existente, mientras que los enlaces simbólicos pueden contener una ruta arbitraria que no apunta a nada.
Los enlaces simbólicos operan 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 padre 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 los nombres de ruta sin esa heurística, confiando en el sistema operativo en su lugar.[2] 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 enlaces simbólicos extensivamente en un esfuerzo por reordenar la jerarquía del sistema de archivos . Esto se logra con varios mecanismos, como enlaces simbólicos variantes dependientes del contexto. Esto ofrece la oportunidad de crear un árbol de directorios más intuitivo o específico de la aplicación y de reorganizar el sistema sin tener que rediseñar el conjunto básico 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
[3] . El ln
comando de shell normalmente usa la llamada al sistema link
[4] , que crea un vínculo físico . Cuando se especifica la bandera, se usa la llamada al sistema symlink () en su lugar, creando un enlace simbólico. Los enlaces simbólicos se introdujeron en 4.2BSD Unix de UC Berkeley .ln -s
El siguiente comando crea un enlace simbólico en la interfaz de línea de comandos (shell):
ln -s ruta_de_destino ruta_vínculo
target_path es la ruta relativa o absoluta a la que debe apuntar el enlace simbólico. Por lo general, 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, generalmente se puede tratar como un alias para el destino. Cualquier comando de administración del sistema de archivos (por ejemplo cp
, rm
) puede usarse en el enlace simbólico. Los comandos que leen o escriben el contenido del archivo accederán al contenido del archivo de destino. El rm
comando (borrado de archivos), sin embargo, elimina el enlace en sí, no el archivo de destino. Del mismo modo, el mv
comando mueve o cambia el nombre del enlace, no el objetivo.
La aplicación de lista de directorios POSIX ls
, indica enlaces simbólicos con una flecha después del nombre, que apunta al nombre del archivo de destino (ver 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, solo 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).
Nota: En el ejemplo siguiente, no cree el directorio "tres" antes de crear el enlace en el directorio / tmp.
$ mkdir -p / tmp / uno / dos $ echo "prueba_a" > / tmp / uno / dos / a $ echo "prueba_b" > / tmp / uno / dos / b $ cd / tmp / uno / dos $ 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$ cd / tmp $ ln -s / tmp / uno / dos tres $ ls -l tres lrwxrwxrwx 1 grupo de usuarios 12 22 de julio 10:02 / tmp / tres -> / tmp / uno / dos $ 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 de enero de 01 10:01 a -rw-r - r-- 1 grupo de usuarios 7 de enero de 01 10:01 b $ cat a test_a $ cat / tmp / uno / dos / a test_a $ echo "test_c" > / tmp / uno / dos / a $ cat / tmp / uno / dos / a test_c $ cat a test_c
Las primeras implementaciones de enlaces simbólicos almacenaban la información del enlace simbólico como datos en archivos regulares. El archivo contenía la referencia textual al destino del enlace y los bits del modo de archivo indicaron que el tipo de archivo es un enlace simbólico.
Este método era lento y un uso ineficiente del espacio en disco en sistemas pequeños. Una mejora, denominada 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 inodos disponible. El estilo original se denomina retroactivamente un enlace simbólico lento . También se utiliza para la compatibilidad del disco con otras versiones o versiones anteriores de los sistemas operativos.
Aunque almacenar el valor del enlace dentro del inodo ahorra un bloque de disco y una lectura de 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, y potencialmente muchos, directorios, procesamiento 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 todo el conjunto de información de estado de archivo común a los archivos normales se implemente para los enlaces simbólicos. Esto permite que las implementaciones utilicen otras soluciones, como almacenar datos de enlaces simbólicos en entradas de directorio.
Los permisos del sistema de archivos no se utilizan 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 archivo y los atributos del sistema de archivos de un enlace simbólico, mediante llamadas al sistema lchmod
[5] y lchflags
[6] respectivamente.
El tamaño informado de un enlace simbólico es el número de caracteres en la ruta a la que apunta.
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 .
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 los programas en modo kernel; Windows Vista y las versiones posteriores de Windows también permitieron la compatibilidad con enlaces simbólicos a aplicaciones en modo de usuario y proporcionaron la utilidad de línea de comandos mklink
para crearlas. Se requieren controladores de terceros para habilitar la compatibilidad con enlaces simbólicos NTFS en Windows XP. [7] A diferencia de los puntos de unión , un enlace simbólico también puede apuntar a un archivo o bloque de mensajes del servidor remoto(SMB) ruta de red. 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 los 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 los sistemas operativos POSIX . Microsoft apuntó a que los enlaces simbólicos de Windows Vista "funcionen como enlaces UNIX". [8] Sin embargo, la implementación varía de los enlaces simbólicos de Unix de varias formas. Por ejemplo, los usuarios de Windows Vista deben indicar manualmente al crear un enlace simbólico si es un archivo o un directorio. [9] 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 indirecciones antes de que Windows se rinda). [10] Solo usuarios con el nuevo vínculo Crear vínculo simbólicoEl privilegio, que solo los administradores tienen de forma predeterminada, puede crear enlaces simbólicos. [11] Si este no es el comportamiento deseado, debe cambiarse en la consola de administración de la Política de seguridad local. Además, los enlaces simbólicos de NTFS a archivos son distintos de los enlaces simbólicos de NTFS a directorios y, por lo tanto, no se pueden usar indistintamente, a diferencia de POSIX, donde el mismo enlace simbólico puede referirse 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 al acceder a archivos y directorios a través de llamadas al sistema operativo. Por ejemplo, bash comandos incorporados pwd
y cd
operan en el directorio lógico actual. pwd
se utiliza a menudo en scripts para determinar el directorio de trabajo actual real. Cuando se usa cualquier ruta con una llamada al sistema, cualquier uso de ..
usará el padre del sistema de archivos real del directorio que contiene la ..
entrada del pseudodirectorio. Entonces, cd ..; cat something
ycat ../something
puede devolver resultados completamente diferentes.
PS > mklink /D "$env:LOCALAPPDATA\Plex Media Server" "G:\Plex Media Server"
PS > New-Item -Path C:\TargetPath -ItemType SymbolicLink -Value F:\SourcePath
La versión de 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 solo para directorios y, además, solo para directorios locales; los puntos de unión a recursos compartidos remotos no son compatibles. [12] Los kits de recursos de Windows 2000 y XP incluyen un programa llamado linkd para crear puntos de unión; uno más potente llamado Junction fue distribuida por Sysinternals ' Mark Russinovich .
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 [13] cuando las carpetas a respaldar contienen un punto de análisis.
Los accesos directos , que son compatibles con los navegadores 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:
Otra diferencia son las capacidades del mecanismo:
Casi como atajos, pero transparentes para el shell de Windows. [15] Se implementan como carpetas ordinarias (que deben tener el atributo de solo lectura y / o del sistema [16] ) que contienen un acceso directo llamado target.lnk que se refiere al destino y un desktop.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 [17] o carpetas de shell se definen en el registro de Windows y también se pueden utilizar 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 usa 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} \ Instance \ InitPropertyBag] "Atributos" = hex : 15,00,00,00 "Destino" = "..."; 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 de destino [ HKEY_CLASSES_ROOT \ CLSID \ {00000000-0000-0000-0000-000000000000} \ ShellFolder] "Atributos" = hex : 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 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 disco.
Además, Cygwin se puede configurar para admitir enlaces simbólicos nativos de Windows que se pueden usar fuera de Cygwin sin restricciones. [18] 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 tales parámetros en el ln -s
comando. Para crear archivos .lnk estándar de Microsoft, Cygwin proporciona las utilidades mkshortcut
y readshortcut
. [19]
La Guía del usuario de Cygwin tiene más información sobre este tema. [18] MSYS2 , que se basa en Cygwin, tiene un conjunto similar de configuraciones de winsymlinks pero por defecto copia los archivos. [20]
Propiedad / Acción | Enlace simbólico | Unión | Enlace duro | |
---|---|---|---|---|
Cuando se elimina el enlace | El objetivo permanece sin cambios | El objetivo se elimina (excepto cuando se utilizan herramientas especiales) | El contador de referencia se reduce; cuando llega a 0, el objetivo se elimina | |
Cuando el objetivo se mueve | El enlace simbólico deja de ser válido | El cruce se vuelve inválido | El enlace duro sigue siendo válido | |
Camino relativo | Permitido | No permitido (al guardar, se convierte en una ruta absoluta) | N / A | |
Cruzando los límites del sistema de archivos | Soportado | Soportado | No compatible (el destino debe estar en el mismo sistema de archivos) | |
Ventanas | Para archivos | Windows Vista y posterior [21] (se requieren derechos de administrador) | No | sí |
Para carpetas | sí | No | ||
Unix | Para archivos | sí | N / A | sí |
Para directorios | sí | N / A | Parcial [22] |
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 objetivo es un enlace flexible 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 el sistema operativo OS / 2 , los enlaces simbólicos se asemejan de alguna manera a sombras en el Shell de trabajo 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 el sujeto del enlace. [23]
Los enlaces simbólicos pueden implementarse de forma variable o dependiente del contexto, de modo que el enlace apunte a objetivos variables en función 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 en él. 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 , Domain / OS . [24] [25] [2] Tru64 usa 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 según el 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 ejecutó en el universo att , el enlace simbólico del directorio / bin apuntaría a /.attbin y se ejecutaría el programa /.attbin/ps . Mientras que si el comando ps se ejecutó en el universo ucb , entonces / binapuntaría a /.ucbbin y /.ucbbin/ps se ejecutaría. También se crearon enlaces simbólicos condicionales similares para otros directorios como / lib , / usr / lib , / usr / include . [26]
|website=
( ayuda )Wikilibros tiene un libro sobre el tema: comandos de Linux |
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.