Creación de enlaces en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En los sistemas Linux, los enlaces (links) proporcionan una forma poderosa de hacer referencia a archivos y directorios. Estos enlaces crean conexiones entre los nombres de archivo y los datos reales almacenados en el disco. Comprender cómo usar los enlaces de manera efectiva es una habilidad esencial para los usuarios de Linux y los administradores de sistemas.

Esta práctica (lab) lo guiará a través de la creación y el uso de dos tipos de enlaces en Linux:

  1. Enlaces Físicos (Hard Links): Estos son entradas de directorio adicionales que apuntan al mismo inodo (datos en el disco). Cuando crea un enlace físico, esencialmente le está dando otro nombre a los mismos datos.

  2. Enlaces Simbólicos (Symbolic Links, también llamados enlaces blandos): Estos son archivos especiales que apuntan a otros archivos por nombre. A diferencia de los enlaces físicos, los enlaces simbólicos pueden apuntar a directorios y pueden abarcar diferentes sistemas de archivos.

Al final de esta práctica, entenderá cómo crear ambos tipos de enlaces utilizando el comando ln y aprenderá sus aplicaciones prácticas en un entorno Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cp("File Copying") linux/BasicFileOperationsGroup -.-> linux/mv("File Moving/Renaming") linux/BasicFileOperationsGroup -.-> linux/ln("Link Creating") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") subgraph Lab Skills linux/echo -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/ls -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/cp -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/mv -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/ln -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/cat -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/cd -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/pwd -.-> lab-271321{{"Creación de enlaces en Linux"}} linux/mkdir -.-> lab-271321{{"Creación de enlaces en Linux"}} end

Creación de un Directorio de Trabajo

En este paso, crearemos una estructura de directorios y archivos que utilizaremos para practicar la creación de enlaces (links).

Primero, verifiquemos nuestra ubicación actual para asegurarnos de que estemos en el directorio correcto. Ejecute el siguiente comando:

pwd

Debería ver /home/labex/project como salida. Si está en un directorio diferente, navegue al directorio del proyecto:

cd /home/labex/project

Ahora, creemos un nuevo directorio llamado linklab donde almacenaremos nuestros archivos:

mkdir /home/labex/project/linklab

Naveguemos a este directorio:

cd /home/labex/project/linklab

Ahora, creemos dos archivos de texto que utilizaremos para practicar la creación de enlaces:

echo "This is the original file for our link examples." > original.txt

Verifiquemos que nuestro archivo se haya creado correctamente:

ls -l

Debería ver una salida similar a la siguiente:

-rw-r--r-- 1 labex labex 46 [date and time] original.txt

Examinemos también el contenido del archivo:

cat original.txt

Debería ver el texto que ingresó anteriormente mostrado en la terminal:

This is the original file for our link examples.

Creación de Enlaces Físicos (Hard Links)

Un enlace físico (hard link) es otro nombre que apunta a exactamente los mismos datos en el disco que el archivo original. Tanto el archivo original como el enlace físico comparten el mismo número de inodo (inode), lo que significa que son esencialmente el mismo archivo con diferentes nombres.

Para crear un enlace físico, utilizamos el comando ln. Creemos un enlace físico al archivo original.txt:

ln /home/labex/project/linklab/original.txt /home/labex/project/linklab/hardlink.txt

Este comando crea un nuevo archivo llamado hardlink.txt que es un enlace físico a original.txt. Ahora, verifiquemos que nuestro enlace físico se haya creado correctamente:

ls -li

La opción -i muestra el número de inodo para cada archivo. Debería ver que original.txt y hardlink.txt tienen el mismo número de inodo, lo que indica que son el mismo archivo.

La salida debería ser similar a la siguiente:

[inode number] -rw-r--r-- 2 labex labex 46 [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex 46 [date and time] original.txt

Note que el número 2 después de los permisos del archivo indica el número de enlaces físicos que apuntan al inodo. Tanto original.txt como hardlink.txt muestran un recuento de enlaces de 2, porque ahora hay dos archivos que apuntan a los mismos datos.

Demostremos que modificar un archivo afecta al otro, ya que son esencialmente el mismo archivo:

echo "This is an added line." >> original.txt
cat hardlink.txt

Debería ver ambas líneas mostradas en la salida:

This is the original file for our link examples.
This is an added line.

Esto confirma que los cambios en original.txt se reflejan en hardlink.txt.

Del mismo modo, si modificamos hardlink.txt, los cambios se reflejarán en original.txt:

echo "Another line added through the hard link." >> hardlink.txt
cat original.txt

La salida ahora debería mostrar las tres líneas:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.

Creación de Enlaces Simbólicos (Symbolic Links)

Los enlaces simbólicos (también conocidos como enlaces blandos o symlinks) son diferentes de los enlaces físicos (hard links). Un enlace simbólico es un archivo separado que simplemente apunta a otro archivo por su nombre. No comparte el mismo inodo (inode) con el archivo objetivo.

Para crear un enlace simbólico, utilizamos el comando ln con la opción -s. Creemos un enlace simbólico al archivo original.txt:

ln -s /home/labex/project/linklab/original.txt /home/labex/project/linklab/symlink.txt

Este comando crea un nuevo archivo llamado symlink.txt que es un enlace simbólico a original.txt. Ahora, verifiquemos que nuestro enlace simbólico se haya creado correctamente:

ls -li

La salida debería ser similar a la siguiente:

[inode number] -rw-r--r-- 2 labex labex  [size] [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex  [size] [date and time] original.txt
[inode number] lrwxrwxrwx 1 labex labex  [size] [date and time] symlink.txt -> /home/labex/project/linklab/original.txt

Note la l al principio de los permisos de symlink.txt, lo que indica que es un enlace simbólico. Además, la salida muestra la ruta a la que apunta el enlace simbólico. También puede ver que original.txt y symlink.txt tienen números de inodo diferentes, lo que confirma que son archivos separados.

Veamos el contenido del enlace simbólico:

cat symlink.txt

Debería ver el mismo contenido que en original.txt:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.

Agreguemos otra línea a través del enlace simbólico:

echo "This line was added through the symbolic link." >> symlink.txt
cat original.txt

La salida ahora debería incluir las cuatro líneas:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.

Esto confirma que los cambios realizados a través del enlace simbólico afectan al archivo objetivo.

Ahora, veamos qué sucede cuando eliminamos el archivo objetivo:

mv original.txt original.txt.bak
cat symlink.txt

Debería ver un mensaje de error como el siguiente:

cat: symlink.txt: No such file or directory

Esto se debe a que el enlace simbólico todavía apunta a /home/labex/project/linklab/original.txt, que ya no existe. Esta es una diferencia clave entre los enlaces físicos y los enlaces simbólicos.

Restaurémos el archivo original:

mv original.txt.bak original.txt
cat symlink.txt

El enlace simbólico funciona de nuevo porque el archivo objetivo existe una vez más.

Comprendiendo las Diferencias entre Enlaces Físicos y Simbólicos

Ahora que hemos creado tanto enlaces físicos (hard links) como enlaces simbólicos (symbolic links), comparemos sus diferencias clave:

Enlaces Físicos (Hard Links):

  1. Comparten el mismo inodo (inode) que el archivo original.
  2. No se pueden enlazar a directorios.
  3. No pueden cruzar los límites del sistema de archivos.
  4. Siguen funcionando incluso si el archivo original se elimina o se mueve.
  5. Los cambios en el contenido se reflejan en todos los enlaces físicos.

Enlaces Simbólicos (Symbolic Links):

  1. Tienen su propio inodo, diferente del archivo objetivo.
  2. Pueden enlazar a directorios.
  3. Pueden cruzar los límites del sistema de archivos.
  4. Se rompen si el archivo objetivo se elimina o se mueve.
  5. Son esencialmente archivos punteros que contienen la ruta al archivo objetivo.

Demostremos algunas de estas diferencias con ejemplos:

Primero, intentemos crear un enlace físico a un directorio, lo cual no está permitido:

mkdir testdir
ln testdir testdir_hardlink

Debería ver un mensaje de error como el siguiente:

ln: testdir: hard link not allowed for directory

Ahora, intentemos crear un enlace simbólico a un directorio, lo cual está permitido:

ln -s testdir testdir_symlink

Verifiquemos nuestro enlace simbólico de directorio:

ls -la

Debería ver testdir_symlink -> testdir en la salida, lo que indica que testdir_symlink es un enlace simbólico a testdir.

Podemos crear un archivo dentro del directorio original:

echo "This is a test file in the directory." > testdir/testfile.txt

Y acceder a él a través del enlace simbólico:

cat testdir_symlink/testfile.txt

Debería ver el contenido:

This is a test file in the directory.

Esto demuestra que los enlaces simbólicos pueden apuntar a directorios y se pueden utilizar para acceder a su contenido.

Otra diferencia importante es que eliminar el archivo original rompe un enlace simbólico pero no un enlace físico. Ya hemos visto esto con nuestro ejemplo de enlace simbólico. Demostremos esto con nuestro enlace físico:

rm original.txt
cat hardlink.txt

Debería seguir viendo las cuatro líneas:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.

El enlace físico sigue funcionando porque los datos todavía existen en el disco y el enlace físico todavía apunta a esos datos.

Sin embargo, nuestro enlace simbólico ahora está roto:

ls -l symlink.txt
cat symlink.txt

Debería ver que symlink.txt todavía existe pero apunta a un archivo que ya no existe, y tratar de leerlo produce un error.

Recreeemos el archivo original a partir de nuestro enlace físico:

cp hardlink.txt original.txt
cat symlink.txt

El enlace simbólico funciona de nuevo porque el archivo al que apunta existe una vez más.

Resumen

En este laboratorio, has aprendido sobre los dos tipos de enlaces en Linux: enlaces físicos (hard links) y enlaces simbólicos (soft links). Has practicado la creación de estos enlaces utilizando el comando ln y has explorado sus diferencias clave.

Puntos clave cubiertos en este laboratorio:

  1. Enlaces Físicos (Hard Links):

    • Se crean utilizando el comando ln sin opciones.
    • Comparten el mismo inodo (inode) que el archivo original.
    • No se pueden enlazar a directorios ni cruzar los límites del sistema de archivos.
    • Siguen funcionando incluso si el archivo original se elimina.
    • Los cambios en el contenido se reflejan en todos los enlaces físicos.
  2. Enlaces Simbólicos (Symbolic Links):

    • Se crean utilizando el comando ln -s.
    • Tienen su propio inodo, diferente del archivo objetivo.
    • Pueden enlazar a directorios y cruzar los límites del sistema de archivos.
    • Se rompen si el archivo objetivo se elimina o se mueve.
    • Son archivos punteros que contienen la ruta al archivo objetivo.
  3. Aplicaciones Prácticas:

    • Los enlaces son útiles para crear atajos a archivos y directorios.
    • Se pueden utilizar para mantener múltiples versiones de archivos.
    • Los administradores de sistemas utilizan enlaces para la gestión de configuración.
    • Los enlaces ayudan a organizar archivos sin duplicar datos.

Comprender cómo crear y utilizar enlaces de manera efectiva es una habilidad esencial para los usuarios de Linux. Estas herramientas permiten una gestión y organización eficientes de archivos dentro de un sistema de archivos Linux.