Enlaces en Linux: Enlaces duros (Hard Links)

En los sistemas Linux, existe el concepto de “enlace” o “link”. Pero este no es un concepto único, ya que existen dos familias de enlaces, los simbólicos o suaves y los duros. Ambos tipos se crean de forma similar, pero operan de forma muy diferente. Hoy les hablaré de los enlaces duros y próximamente veremos los simbólicos.

Los enlaces duros (Hard Links)

En los sistemas de archivo de Linux, como ext3 y ext4 existe la tabla de inodos. Cada archivo en el sistema posee un inodo, los cuales no se repiten y están guardados en dicha tabla junto algunos datos como los permisos y atributos del archivo. El nombre del archivo no se guarda en esa tabla.

El comando stat nos dice que valores posee el archivo:

[bash]sebastian@multivac ~> stat archivo1.pdf
Fichero: «archivo1.pdf»
Tamaño: 1258291 Bloques: 2464 Bloque E/S: 4096 fichero regular
Dispositivo: 805h/2053d Nodo-i: 4592435 Enlaces: 1
Acceso: (0664/-rw-rw-r–) Uid: ( 1000/sebastian) Gid: ( 1000/sebastian)
Acceso: 2014-10-28 10:19:13.179306312 -0300
Modificación: 2014-05-06 15:48:50.599318152 -0300
Cambio: 2014-05-07 12:19:22.968632519 -0300

[/bash]

Entonces, cada archivo en realidad podemos decir que es la suma entre los datos más el inodo más el nombre del mismo. Algo como Dato + Inodo + Nombre = Archivo.txt y acá es donde puedo crear yo los enlaces duros.

Un enlace duro, es simplemente otro “nombre” que apunta al mismo inodo. Es decir yo tengo:

  • (Dato+Inodo)+nombre1
  • (Dato+Inodo)+nombre2

En este caso, (Dato+Inodo) es lo mismo, por lo que tengo simplemente 2 nombres que apuntan al mismo inodo y por ende al mismo dato. Estos son enlaces. Todo archivo tiene al menos un enlace duro, su propio nombre y luego puede tener varios más.

Cuando hacemos un LS -L

[bash]-rw-rw-r– 1 sebastian sebastian 1258291 may 6 15:48 archivo1.pdf
-rw-rw-r– 1 sebastian sebastian 16829100 sep 16 16:45 archivo1.pru[/bash]

La segunda columna nos dice la cantidad de enlaces que tiene dicho archivo. En este caso es 1. Un archivo, no es “eliminado” hasta que no se borran todos los enlaces que apunten a él. Es decir que en nuestro ejemplo anterior, si yo borro nombre1, el archivo sigue existiendo como nombre2. Cuando elimine nombre2, el archivo ya no tendrá ningún enlace, ergo se lo considera eliminado y se libera el inodo de la tabla.

Lógicamente como ambos apuntan al mismo inodo, ambos tienen los mismos permisos y siempre que modifique 1, como en el disco los “datos” son los mismos, se modificará para todos los enlaces. Usando una analogía, los enlaces duros son como puertas diferentes para entrar a la misma habitación (datos).

Como la tabla de inodos es propia de cada sistema de archivos, los enlaces duros solamente funcionan dentro de la misma partición de disco y sistema de archivos.

Creados de enlaces duros

Para crear un enlace duro, se hace con el comando ln, y la sintaxis es sencilla:

[bash]ln archivo_original nombre_enlace[/bash]

Entonces tendremos un nuevo enlace llamado nombre_enlace apuntando al mismo inodo de archivo_original.

Un comentario sobre “Enlaces en Linux: Enlaces duros (Hard Links)

Los comentarios están cerrados.