Conceptos básicos de la línea de comandos: enlaces simbólicos

Introducción
Los enlaces simbólicos permiten vincular archivos y directorios con otros archivos y directorios. Tienen muchos nombres, como enlaces simbólicos, enlaces de shell, enlaces suaves, accesos directos y alias. Desde la perspectiva del usuario, los enlaces simbólicos son muy similares a los archivos y directorios normales. Sin embargo, cuando interactúa con ellos, en realidad interactuarán con el objetivo en el otro extremo. Piense en ellos como agujeros de gusano para su sistema de archivos.
Esta guía proporciona una descripción general de qué son los enlaces simbólicos y cómo crearlos desde una línea de comandos de Linux utilizando el ln
comando.
Prerrequisitos
Para seguir esta guía, necesitarás tener acceso a una computadora que ejecute un sistema operativo basado en Linux. Puede ser un servidor privado virtual al que te hayas conectado mediante SSH o tu máquina local. Ten en cuenta que este tutorial se validó con un servidor Linux que ejecuta Ubuntu 20.04, pero los ejemplos que se dan deberían funcionar en una computadora que ejecute cualquier versión de cualquier distribución de Linux.
Si planea utilizar un servidor remoto para seguir esta guía, le recomendamos que primero complete nuestra guía de configuración inicial del servidor . Al hacerlo, obtendrá un entorno de servidor seguro (que incluye un usuario no root con sudo
privilegios y un firewall configurado con UFW) que puede utilizar para desarrollar sus habilidades en Linux.
Configuración de directorios y archivos de ejemplo
La llamada al sistema necesaria para crear enlaces simbólicos suele estar disponible en sistemas operativos compatibles con POSIX y similares a Unix. El comando que usaremos para crear los enlaces es el ln
comando
Puede utilizar archivos existentes en su sistema para practicar la creación de enlaces simbólicos, pero esta sección proporciona algunos comandos que configurarán un entorno de práctica que puede usar para seguir los ejemplos de esta guía.
Comience por crear un par de directorios dentro del /tmp/
directorio. /tmp/
es un directorio temporal , lo que significa que todos los archivos y directorios que contenga se eliminarán la próxima vez que se inicie el servidor. Esto será útil para los fines de esta guía, ya que puede crear tantos directorios, archivos y enlaces como desee sin tener que preocuparse de que obstruyan su sistema más adelante.
El siguiente mkdir
comando crea tres directorios a la vez. Crea un directorio llamado symlinks/
dentro del /tmp/
directorio y dos directorios (uno llamado one/
y otro llamado two/
) dentro de symlinks/
:
- mkdir -p /tmp/symlinks/{one,two}
Navega hasta el nuevo symlinks/
directorio:
- cd /tmp/symlinks
Desde allí, crea un par de archivos de muestra, uno para cada subdirectorio dentro de symlinks/
. El siguiente comando crea un archivo llamado one.txt
dentro del one/
subdirectorio cuyo único contenido es una sola línea que dice one
:
- echo "one" ./one/one.txt
De manera similar, este comando crea un archivo llamado two.txt
dentro del two/
subdirectorio cuyo único contenido es una sola línea que dice two
:
- echo "two" ./two/two.txt
Si tuviera que ejecutar tree
en este punto para mostrar el contenido de todo el /tmp/symlinks
directorio y todos los subdirectorios anidados, su salida se vería así:
- tree
Output.├── one│ └── one.txt└── two └── two.txt2 directories, 2 files
Nota : Si tree
no está instalado en tu equipo de forma predeterminada, puedes instalarlo usando el administrador de paquetes de tu sistema. En Ubuntu, por ejemplo, puedes instalarlo con apt
:
- sudo apt install tree
Con estos documentos de muestra, estás listo para practicar la creación de enlaces simbólicos.
Entendiendo los enlaces duros
De forma predeterminada, el ln
comando creará enlaces duros en lugar de enlaces simbólicos o blandos.
Digamos que tienes un archivo de texto. Si creas un enlace simbólico a ese archivo, el enlace solo apunta al archivo original. Si eliminas el archivo original, el enlace se romperá porque ya no tendrá nada a lo que apuntar.
Un enlace físico es, en cambio, una copia reflejada de un archivo original con exactamente el mismo contenido. Al igual que los enlaces simbólicos, si editas el contenido del archivo original, esos cambios se reflejarán en el enlace físico. Sin embargo, si eliminas el archivo original, el enlace físico seguirá funcionando y podrás verlo y editarlo como lo harías con una copia normal del archivo original.
Los enlaces duros cumplen su propósito en el mundo, pero se deben evitar por completo en algunos casos. Por ejemplo, se debe evitar el uso de enlaces duros cuando se vincula dentro de un git
repositorio, ya que pueden causar confusión.
Para asegurarse de que está creando enlaces simbólicos, puede pasar la opción -s
o --symbolic
al ln
comando.
Nota : Debido a que los enlaces simbólicos suelen usarse con más frecuencia que los enlaces físicos, algunas personas pueden encontrar beneficioso utilizar un alias ln
para ln -s
:
- alias ln="ln -s"
Es posible que esto solo ahorre unas pocas pulsaciones de teclas, pero si crea muchos enlaces simbólicos, esto podría sumar mucho dinero.
Trabajar con enlaces simbólicos
Como se mencionó anteriormente, el enlace simbólico es básicamente como crear un archivo que contiene el nombre y la ruta del archivo de destino. Debido a que un enlace simbólico es solo una referencia al archivo original, cualquier cambio que se realice en el original estará disponible inmediatamente en el enlace simbólico.
Un posible uso de los enlaces simbólicos es crear directorios locales en el directorio de inicio de un usuario que apunten a archivos que se están sincronizando con una aplicación externa, como Dropbox. Otro uso podría ser crear un enlace simbólico que apunte a la última versión de un proyecto que se encuentra en un directorio con nombre dinámico.
Usando los archivos y directorios de ejemplo de la primera sección, continúe e intente crear un enlace simbólico llamado three
que apunte al one
directorio que creó anteriormente:
- ln -s one three
Ahora debería tener 3 directorios, uno de los cuales apunta a otro. Para obtener una descripción más detallada de la estructura de directorios actual, puede utilizar el ls
comando para imprimir el contenido del directorio de trabajo actual:
- ls
Outputone three two
Ahora hay tres directorios dentro del symlinks/
directorio. Según el sistema, puede significar que three
se trata de un enlace simbólico. Esto se hace a veces representando el nombre del enlace en un color diferente o agregándole un @
símbolo.
Para obtener aún más detalles, puede pasar el -l
argumento a ls
para determinar a dónde apunta realmente el enlace simbólico:
- ls -l
Outputtotal 8drwxrwxr-x 2 sammy sammy 4096 Oct 30 19:51 onelrwxrwxrwx 1 sammy sammy 3 Oct 30 19:55 three - onedrwxrwxr-x 2 sammy sammy 4096 Oct 30 19:51 two
Observe que el three
enlace apunta al one
directorio como se esperaba. Además, comienza con l
, lo que indica que es un enlace. Los otros dos comienzan con d
, lo que significa que son directorios normales.
Los enlaces simbólicos también pueden contener enlaces simbólicos. Por ejemplo, vincule el one.txt
archivo desde three
el two
directorio:
- ln -s three/one.txt two/one.txt
Ahora deberías tener un archivo con nombre one.txt
dentro del two
directorio. Puedes comprobarlo con el siguiente ls
comando:
- ls -l two/
Outputtotal 4lrwxrwxrwx 1 sammy sammy 13 Oct 30 19:58 one.txt - three/one.txt-rw-rw-r-- 1 sammy sammy 4 Oct 30 19:51 two.txt
Según la configuración de su terminal, el enlace (resaltado en este ejemplo de salida) puede aparecer en texto rojo, lo que indica que el enlace está roto. Aunque se creó el enlace, la forma en que este ejemplo especificó la ruta era relativa. El enlace está roto porque el two
directorio no contiene un three
directorio con el one.txt
archivo.
Afortunadamente, puedes remediar esta situación indicando ln
que se cree el enlace simbólico relativo a la ubicación del enlace utilizando el argumento -r
or --relative
.
Sin embargo, incluso con la -r
bandera, no podrá reparar el enlace simbólico roto. La razón de esto es que el enlace simbólico ya existe y no podrá sobrescribirlo sin incluir también el argumento -f
or :--force
- ln -srf three/one.txt two/one.txt
Con esto, ahora tienes two/one.txt
lo que estaba vinculado a three/one.txt
lo que es un enlace a one/one.txt
.
Anidar enlaces simbólicos como este puede volverse confuso rápidamente, pero muchas aplicaciones están equipadas para hacer que estas estructuras de enlace sean más comprensibles. Por ejemplo, si ejecutara el tree
comando, el destino del enlace que se muestra es en realidad el de la ubicación del archivo original y no el enlace en sí:
- tree
Output.├── one│ └── one.txt├── three - one└── two ├── one.txt - ../one/one.txt └── two.txt3 directories, 3 files
Ahora que todo está conectado correctamente, puedes comenzar a explorar cómo funcionan los enlaces simbólicos con los archivos modificando el contenido de estos archivos de muestra.
Para tener una idea de lo que contienen sus archivos, ejecute el siguiente cat
comando para imprimir el contenido del one.txt
archivo en cada uno de los tres directorios que ha creado en esta guía:
- cat {one,two,three}/one.txt
Outputoneoneone
A continuación, actualice el contenido del one.txt
archivo original desde el one/
directorio:
- echo "1. One" one/one.txt
A continuación, vuelva a comprobar el contenido de cada archivo:
- cat {one,two,three}/one.txt
Output1. One1. One1. One
Como indica esta salida, cualquier cambio que realice en el archivo original se reflejará en cualquiera de sus enlaces simbólicos.
Ahora pruebe lo contrario. Ejecute el siguiente comando para cambiar el contenido de uno de los enlaces simbólicos. Este ejemplo cambia el contenido del one.txt
archivo dentro del three/
directorio:
- echo "One and done" three/one.txt
A continuación, vuelva a comprobar el contenido de cada archivo:
- cat {one,two,three}/one.txt
OutputOne and doneOne and doneOne and done
Dado que el enlace simbólico que usted modificó es simplemente un puntero a otro archivo, cualquier cambio que realice en el enlace se reflejará inmediatamente en el archivo original, así como en cualquiera de sus otros enlaces simbólicos.
Conclusión
Los enlaces simbólicos pueden ser increíblemente útiles, pero tienen ciertas limitaciones. Tenga en cuenta que si mueve o elimina el archivo o directorio original, todos los enlaces simbólicos existentes que apuntan a él se romperán. No hay actualizaciones automáticas en ese escenario. Sin embargo, siempre que tenga cuidado, puede encontrar muchos usos para los enlaces simbólicos a medida que continúa trabajando con la línea de comandos.
Deja una respuesta