Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

miércoles, 5 de agosto de 2015

Enlace simbólico y enlace duro ¿Qué diferencia hay?

Hoy vengo con la intención de explicaros la diferenciación entre dos conceptos muy parecidos, pero que al mismo tiempo son diferentes: Los enlaces "blandos"  o simbólicos y los duros. Normalmente cuando hablamos de enlaces solemos dar por hecho que hablamos del primer tipo de los dos, pero hay veces en las que es necesario crear algo más persistente y duradero; y ahí es donde entran en juego los enlaces duros... Aún cuando los dos conceptos son muy parecidos, lo mejor para entender exactamente de qué trata cada uno es analizarlos por separado.



Enlaces simbólicos

El más famoso de los dos enlaces y el más usado... En mi opinión la mejor forma de entender este concepto es comparándolo con los accesos directos existentes en Windows... Es decir, que el enlace "blando" simplemente se basa en apuntar al fichero original, y aunque se trata de un enlace, éste y el fichero original pueden tener permisos completamente distintos, pertenecer a distintos grupos e incluso encontrarse en distintos sistemas de ficheros. La única "pega" de este enlace es que en caso de ocurrirle algo al fichero original, ya sea que haya sido eliminado o movido de lugar... Los enlaces quedarían rotos y no apuntarían a ninguna parte a menos que sustituyésemos el fichero original perdido con uno nuevo.

Crear el enlace es bien sencillo... Basta con tener una interfaz gráfica que nos ayuda y nos guía prácticamente con la misma facilidad que en Windows o sino podemos recurrir al método más "tradicional" el que más me gusta de los dos: Al uso de la terminal. Toda creación de enlace, ya sea duro o blando se realiza mediante la herramienta ln(link), y siempre tendrá esta estructura...

ln parámetros origen destino

La cuestión es que en este caso, al querer hacer un enlace simbólico, deberemos especificarlo en el comando mediante el parámetro -s(symbolic) para que el sistema sepa diferenciarlo de un enlace "duro". La mejor forma explorar las particularidades de este enlace es creando uno; para ello, crearemos un enlace simbólico del fichero archivo.txt, al que denominaremos symbol; ambos ficheros serían alojados en /usr/src/ Esto sería tan sencillo como escribir lo siguiente:

  1. ln -s /usr/src/archivo.txt /usr/src/enlace

Con el enlace creado, la comprobación inicial sería hacer un listado detallado de la carpeta en la que ambos se alojan para ver exactamente que comportamiento tiene cada fichero; dicho listado detallado se obtendría mediante el comando:

  1. ls -la /usr/src

Dicho comando arrojaría un resultado parecido al siguiente:

Enlace_simbólico

Si observáis atentamente el resultado, veréis que el enlace test, simplemente apunta al fichero original fichero.txt, pero que tiene diferentes permisos y atributos; por ejemplo todo enlace siempre tendrá como primer atributo la letra l(link). Una de las características que tienen los enlaces simbólicos es que en caso de cambiar los atributos en el fichero original, estos cambios no se reflejarían en el resto de elementos de enlace, permitiéndonos jugar así con permisos y con sistemas de ficheros para poner algunas restricciones en su uso. Esto es debido a que cada elemento tiene su propio inodo; es decir su propia estructura de datos independiente. Una buena forma de comprobar el inodo de un archivo es consultando sus metadatos; consulta que se pueda realizar mediante el comando stat; el cual tiene la estructura:

stat fichero

Si ejecutamos el comando sobre nuestros dos ficheros veremos que ambos están vinculados pero que al mismo tiempo son independientes, ya que tienen diferentes inodos.

Inodo_simbólico


La generación de un enlace simbólico podría hacerse tanto para ficheros como directorios, tal y como se puede hacer en Windows, con lo que un enlace de este tipo no tiene dirigirse necesariamente a un fichero.


Enlaces duros

Este enlace es algo menos usado, ya que más que realizar un acceso directo lo que se hace es asociar un fichero con otro que nosotros crearíamos como enlace; Esto quiere decir que ambos compartirían el mismo inodo y que siempre tendrían que ir dentro del mismo sistema de ficheros. Para entender mejor este concepto lo mejor sería crear un enlace duro hacia fichero.txt siguiendo la misma sintaxis que hemos seguido anteriormente para crear el enlace; con la excepción de que en este caso no sería necesario parámetro alguno; es decir:

  1. ln /usr/src/archivo.txt /usr/src/enlace2

Si hacemos un listado detallado de la carpeta, veremos que el nuevo enlace no posee el atributo l, tal y como lo tenía su predecesor, y además comprobaremos que posee exactamente las mismas características que el fichero original (permisos, atributos...):


Podría parecer que hemos hecho una copia del fichero; pero en realidad estaríamos hablando del mismo fichero en dos ubicaciones distintas, y cualquier modificación en uno de estos dos, ya sea en archivo.txt o en enlace2, se aplicaría a su "compañero". Es decir que si por ejemplo el fichero archivo.txt tuviese este texto: "Esto es una prueba de enlaces" y modificásemos dicho texto a"Esto es una prueba" ; si nos dirigiésemos a test veríamos que el texto también ha sido modificado en éste y que aparecería también "Esto es una prueba". 

Otra forma de comprobar que efectivamente comparten el mismo inodo sería usando de nuevo el comando stat, tal y como hemos hecho antes... Allí veríamos que efectivamente comparten inodo:

Inodo_duro

Al tratarse del "mismo" fichero pero con distintas ubicaciones, en caso de borrar uno de los dos; ya sea el original o el que hemos creado mediante ln, su compañero no sufriría el mismo destino; estando a salvo de cualquier intento de borrarlo a menos que se especifique; cosa muy ventajosa para evitar posibles accidentes... Lamentablemente este tipo de enlaces únicamente se pueden realizar con ficheros, siendo imposible aplicarlo con los directorios... Una limitación que no tiene que ser necesariamente molesta en mi opinión.


Conclusión

Visto esto uno diría que cada enlace posee sus ventajas y desventajas y que se debe utilizar uno u otro dependiendo de nuestras necesidades. Un listado general de las diferencias sería:
  1. Los enlaces simbólicos son accesos directos a los ficheros originales mientras que los enlaces duros son copias exactas.
  2. Los enlaces simbólicos pueden alojarse en diferentes sistemas de ficheros mientras que los duros no.
  3. Borrar el fichero original dejaría los enlaces simbólicos inservibles, cosa que no ocurre con los otros.
  4. Un enlace duro comparte el mismo inodo que el original, ya que se podría considerar como el mismo fichero... El enlace simbólico es tratado como un fichero aparte con su propio inodo y sus propios permisos.
  5. El uso de enlaces duros está limitado a ficheros, no como con los simbólicos que pueden aplicarse tanto a ficheros como a directorios.
  6. Los enlaces simbólicos poseen un atributo especial en sus permisos, denominado l.
Espero que os resulte útil.

Saludos.

1 comentario :