Enlaces duros (hard links) en Linux explicados
Concepto, creación y usos prácticos de enlaces duros en sistemas de archivos Linux, diferencias con enlaces simbólicos y ejemplos reales.
0.1 Cómo Crear un Enlace Duro (Hard Link) en Linux
0.2 Introducción
Los enlaces duros o hard link asocian dos o más ficheros compartiendo el mismo inodo, esto hace que cada enlace duro sea una copia exacta del resto de los ficheros enlazados, tanto en los datos como en los permisos, propietario, grupo, etc. Cuando se modifica uno de los enlaces o el fichero original, los cambios afectan al resto de los enlaces.
Nota: Los enlaces duros no pueden hacerse contra directorios y tampoco fuera del propio sistema de ficheros.
En sistemas linux también existen los enlaces simbolicos, también conocidos como enlaces blandos o Symlinks.
0.3 Características principales de los enlaces duros
- Solo se pueden hacer entre ficheros. No se pueden hacer entre directorios.
- No se pueden hacer entre distintos sistemas de ficheros.
- Comparten el número de inodo
- Si se borra el fichero original la información no se pierde.
- Son copias exactas del fichero original. Los cambios aplicados a uno de ellos o al fichero original, afectan a todos.
0.4 Creando un enlace duro (hard link)
La sintaxis genérica para crear un enlace duro es la siguiente:
ln TARGET LINK_NAME- TARGET: Nombre del archivo existente al que le crearemos el enlace duro.
- LINK_NAME: Nombre del enlace duro.
Veamos un ejemplo:
ln test.txt enlace-duro-a-test.txtSi listamos ambos archivos con el comando ls -li,
ls -liObservamos que ambos comparten el mismo inodo
786433 -rw-r--r-- 2 achalma achalma 0 jun 21 21:27 enlace-duro-a-test.txt
786433 -rw-r--r-- 2 achalma achalma 0 jun 21 21:27 test.txtSe observa en la primera columna que ambos, archivo y enlace, comparten el mismo número de inodo (786433). La tercera columna indica cuantos enlaces duros tiene el fichero, en este caso 2, el archivo original más el enlace.
Si modificamos uno de ellos, los cambios afectan a todos. Por ejemplo, vamos a conceder permiso de ejecución al propietario en el archivo test.txt y veamos que pasa con el enlace:
chmod u+x test.txtSi volvemos a listar ambos archivos vemos que el cambio ha afectado a ambos, al fichero original y al enlace:
$ ls -li
786433 -rwxr--r-- 2 achalma achalma 0 jun 21 21:27 enlace-duro-a-test.txt
786433 -rwxr--r-- 2 achalma achalma 0 jun 21 21:27 test.txtSi editásemos el archivo o el enlace, los cambios realizados en el contenido afectarían a ambos. ## Generar varios
Para crear 35 enlaces duros de _metadata.yml puedes usar un simple bucle for en la terminal de Linux:
for i in {1..35}; do ln _metadata.yml "_metadata$i.yml"; doneEste comando hace lo siguiente:
for i in {1..35}: Esto establece un bucle que itera desde 1 hasta 35.ln _metadata.yml "_metadata$i.yml": Dentro del bucle, se ejecuta el comandolnpara crear un enlace duro de_metadata.ymlcon el nombre_metadataX.yml, dondeXes el valor actual deien el bucle.
Finalmente, se generarán los 35 enlaces duros.
Cómo citar
Achalma, E. (2022, 14 de agosto). Enlaces duros (hard links) en Linux explicados. Chaska. https://chaska-x.netlify.app/cursos/linux/crear-enlaces-duros-o-hard-link-en-linux/