jueves, 10 de mayo de 2018

10 - Enlaces simbólicos y Enlaces duros

Estructura de archivo

Los archivos y directorios están formados básicamente por tres elementos:
  • datos. En el caso de ser un directorio, en realidad es un archivo especial con un listado de nombres a mas archivos y directorios.
  • i-nodo que es un identificador único que identifica a esos datos.
  • nombre de archivo o directorio asociado al i-nodo.

El tercer punto es interesante porque es posible crear varios nombres que estén asociados a un mismo i-nodo que obviamente apunta a los mismos datos.


Información que contiene un inodo

Cada uno de los diferentes nombres asociados a un mismo i-nodo se denomina Enlace duro o físico (Hard Link) y tiene como gran ventaja que si borramos el archivo original (el primero que se creó), si existen otros Hard Links, sus datos siguen estando accesibles a través de ellos porque son nombres que apuntan al mismo i-nodo. Por desgracia esto solo funciona con archivos y no con directorios.

Existe otro tipo de link conocido como Enlace blando ó simbólico (Symbolic o Soft Link) que es un nombre asociado a una ruta completa de otro archivo o directorio y no al i-nodo de los datos (por lo tanto posee un i-nodo diferente). Este tipo de link es similar a un archivo de acceso directo de Windows, es decir, si borras el archivo original, el link deja de funcionar.

Para crear links se utiliza el programa ln.
  • para hard: ln original destino
  • para soft: ln -s original destino

Diferencia gráfica entre Enlace simbólico y duro, N1 y N2 son i-nodos diferentes

Entendiendo el funcionamiento


Vamos ahora a comprobar de forma práctica la teoría:


Mostrando inodo del fichero original.txt


Creando un enlace duro y otro blando (simbólico) al fichero anterior. El enlace duro y el fichero original comparten el mismo i-nodo y ambos apuntan a los mismos datos, sin embargo el enlace blando tiene un i-nodo diferente porque apunta a la misma ruta del archivo original no a los datos.

El contenido de los tres ficheros es el mismo. Si borro el fichero original el enlace duro no se altera porque es independiente y sigue apuntando a los mismos datos, pero si borro el simbólico como apuntaba a la propia ruta del original y ya no existe deja de estar disponible. 







Si volvemos a crear el fichero original con otro contenido, el enlace simbólico vuelve a funcionar ya que la ruta a la que apunta vuelve a existir, eso si ahora el contenido es el del nuevo fichero. El enlace duro no se ve afectado por esta última operación y sigue manteniendo el i-nodo original y por tanto su contenido













Observaciones

  • A través de los enlaces (duros y blandos) podemos modificar la zona de datos del fichero al que apuntan.
  • Los enlaces simbólicos se pueden hacer con ficheros y directorios mientras que los duros solo entre ficheros.
  • Los enlaces simbólicos se pueden hacer entre distintos sistemas de ficheros o volúmenes, los duros no.
  • Los enlaces duros comparten el número de i-nodo, los simbólicos no.
  • Los enlaces simbólicos pierden su significado si se borra el fichero al que apuntan, en cambio en los enlaces duros, los datos siguen estando accesibles mientras exista al menos uno.
  • Los enlaces duros son el mismo i-nodo, es decir nombres diferentes para los mismos datos, los simbólicos son ficheros distintos con otro i-nodo cuyos datos apuntan al nombre del fichero.
  • Los enlaces simbólicos aparecen con los bit de permisos todos encendidos dado que no son usados ya que los permisos efectivos son los del archivo al que se esta apuntando.

Uso de los enlaces


Los
enlaces duros permiten crear enlaces con distintos permisos o propietarios para acceder a los mismos datos. De esta forma, por ejemplo, un enlace puede permitir acceso de escritura, mientras que otro ofrezca sólo de lectura, pudiéndose crear distintas combinaciones para distintos grupos o usuarios.

Los enlaces blandos permiten abreviar rutas y enlazar ficheros y directorios desde cualquier parte, por ejemplo en programación son ampliamente usados para las librerías compartidas.