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

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Configuración de directorios y archivos de ejemplo
  • Entendiendo los enlaces duros
  • Trabajar con enlaces simbólicos
  • Conclusió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 lncomando.

    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 sudoprivilegios 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 lncomando

    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 mkdircomando 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/:

    1. mkdir -p /tmp/symlinks/{one,two}

    Navega hasta el nuevo symlinks/directorio:

    1. 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.txtdentro del one/subdirectorio cuyo único contenido es una sola línea que dice one:

    1. echo "one" ./one/one.txt

    De manera similar, este comando crea un archivo llamado two.txtdentro del two/subdirectorio cuyo único contenido es una sola línea que dice two:

    1. echo "two" ./two/two.txt

    Si tuviera que ejecutar treeen este punto para mostrar el contenido de todo el /tmp/symlinksdirectorio y todos los subdirectorios anidados, su salida se vería así:

    1. tree
    Output.├── one│   └── one.txt└── two    └── two.txt2 directories, 2 files

    Nota : Si treeno 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:

    1. 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 lncomando 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 gitrepositorio, ya que pueden causar confusión.

    Para asegurarse de que está creando enlaces simbólicos, puede pasar la opción -so --symbolical lncomando.

    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 lnpara ln -s:

    1. 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 threeque apunte al onedirectorio que creó anteriormente:

    1. 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 lscomando para imprimir el contenido del directorio de trabajo actual:

    1. ls
    Outputone  three  two

    Ahora hay tres directorios dentro del symlinks/directorio. Según el sistema, puede significar que threese 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 -largumento a lspara determinar a dónde apunta realmente el enlace simbólico:

    1. 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 threeenlace apunta al onedirectorio 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.txtarchivo desde threeel twodirectorio:

    1. ln -s three/one.txt two/one.txt

    Ahora deberías tener un archivo con nombre one.txtdentro del twodirectorio. Puedes comprobarlo con el siguiente lscomando:

    1. 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 twodirectorio no contiene un threedirectorio con el one.txtarchivo.

    Afortunadamente, puedes remediar esta situación indicando lnque se cree el enlace simbólico relativo a la ubicación del enlace utilizando el argumento -ror --relative.

    Sin embargo, incluso con la -rbandera, 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 -for :--force

    1. ln -srf three/one.txt two/one.txt

    Con esto, ahora tienes two/one.txtlo que estaba vinculado a three/one.txtlo 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 treecomando, el destino del enlace que se muestra es en realidad el de la ubicación del archivo original y no el enlace en sí:

    1. 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 catcomando para imprimir el contenido del one.txtarchivo en cada uno de los tres directorios que ha creado en esta guía:

    1. cat {one,two,three}/one.txt
    Outputoneoneone

    A continuación, actualice el contenido del one.txtarchivo original desde el one/directorio:

    1. echo "1. One" one/one.txt

    A continuación, vuelva a comprobar el contenido de cada archivo:

    1. 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.txtarchivo dentro del three/directorio:

    1. echo "One and done" three/one.txt

    A continuación, vuelva a comprobar el contenido de cada archivo:

    1. 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.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion