10 de mayo, 2017 – 5 min read

Hola de nuevo. En esta introducción a los enlaces duros y a los enlaces simbólicos, primero intentaremos aprender y definir qué significa cada uno. Luego discutiremos cuáles son las diferencias entre ambos.

¿Qué es un enlace duro y qué hace exactamente en el shell?

Un enlace duro es simplemente un nombre adicional para un archivo existente en Linux u otros sistemas operativos tipo Unix.

Se puede crear cualquier número de enlaces duros, y por lo tanto cualquier número de nombres, para cualquier archivo. También se pueden crear enlaces duros a otros enlaces duros. Sin embargo, no pueden ser creados para directorios, y no pueden cruzar los límites del sistema de archivos o atravesar las particiones.

Tal vez la aplicación más útil para los enlaces duros es permitir que los archivos, programas y scripts (es decir, programas cortos) sean fácilmente accesibles en un directorio diferente del archivo original o archivo ejecutable (es decir, la versión lista para ser ejecutada de un programa). Al escribir el nombre del enlace duro, el programa o script se ejecutará de la misma manera que si se utilizara su nombre original. (http://www.linfo.org/hard_link.html)

¿Quieres leer esta historia más tarde? Guárdalo en Journal.

¿Y qué significa realmente esta definición? Bueno, puedes crear un enlace duro a un archivo existente utilizando el comando ln nombre_archivo enlace_duro. He proporcionado un ejemplo a continuación de la creación de un enlace duro en acción. En el ejemplo de abajo he creado un hardlink alias un acceso directo al archivo llamado archivo1 con el hardlink llamado hlink1.

Ahora vamos a ls -i. Para que liste todos los archivos con inodo.

INODO Definición: El inodo es una estructura de datos en un sistema de archivos estilo Unix que describe un objeto del sistema de archivos como un archivo o un directorio. Cada inodo almacena los atributos y la ubicación de los bloques de disco de los datos del objeto. Los atributos del objeto del sistema de archivos pueden incluir metadatos (horas de último cambio, acceso, modificación), así como datos de propietario y permiso.

Los directorios son listas de nombres asignados a los inodos. Un directorio contiene una entrada para sí mismo, su padre y cada uno de sus hijos. (https://en.wikipedia.org/wiki/Inode)

Si miras el archivo1 y el hlink1 puedes ver que el inodo del lado izquierdo es el mismo. En esencia, los enlaces duros actúan como un acceso directo a ese archivo que está vinculado duro.

Ahora pasando a los «enlaces blandos»

Los enlaces blandos son un tipo especial de archivo que apunta a otro archivo, muy parecido a un acceso directo. A diferencia de un enlace duro, un enlace simbólico no contiene los datos del archivo de destino. Simplemente apunta a otra entrada en algún lugar del sistema de archivos. Esta diferencia da a los enlaces simbólicos ciertas cualidades que los enlaces duros no tienen, como la capacidad de enlazar con directorios, o con archivos en ordenadores remotos conectados en red a través de NFS. Además, cuando se elimina un archivo de destino, los enlaces simbólicos a ese archivo quedan inutilizados, mientras que los enlaces duros conservan el contenido del archivo. (https://kb.iu.edu/d/abbe)

Ahora vamos a crear un enlace blando para compararlo con el enlace duro que hemos creado anteriormente.

Así que vamos a abrir un terminal. Ir al buscador o la búsqueda y la terminal de entrada debe aparecer haga clic en él y open.

Para nuestro ejemplo vamos a crear primero un archivo. Si escribimos touch example1 pulse enter. Podemos crear un archivo. Ahora para crear el enlace suave.

Si escribimos en el shell ln -s example1 softlink1 creamos un enlace suave entre los archivos. Ver el ejemplo de abajo.

softlink

Ahora si escribiéramos ls -i también nos daremos cuenta que solo el archivo hardlink tiene el mismo inodo que el hardlink mientras que el archivo soft link tiene diferentes inodos.

¿Cuáles son las diferencias entre los enlaces duros y los enlaces blandos?

Un enlace blando no contiene los datos del archivo de destino.

Un enlace blando apunta a otra entrada en algún lugar del sistema de archivos.

Un enlace blando tiene la capacidad de enlazar con directorios, o con archivos en ordenadores remotos conectados en red a través de NFS.

La eliminación de un archivo de destino para un enlace simbólico hace que ese enlace sea inútil.

Un enlace duro conserva el contenido del archivo.

Un enlace duro no puede crearse para directorios, y no pueden cruzar los límites del sistema de archivos ni atravesar particiones.

En un enlace duro se puede utilizar cualquiera de los nombres de enlace duro creados para ejecutar un programa o script de la misma manera que el nombre original dado.

En esencia:

«Bajo el sistema de archivos los archivos están representados por inodos

Un archivo en el sistema de archivos es básicamente un enlace a un inodo.
Un enlace duro entonces sólo crea otro archivo con un enlace al mismo inodo subyacente.

Cuando se elimina un archivo se elimina un enlace al inodo subyacente. El inodo sólo se borra (o se puede borrar/sobreescribir) cuando se han borrado todos los enlaces al inodo.

Un enlace simbólico es un enlace a otro nombre en el sistema de archivos.

Una vez que se ha hecho un enlace duro el enlace es al inodo. borrar renombrar o mover el archivo original no afectará al enlace duro ya que se enlaza al inodo subyacente. Cualquier cambio en los datos del inodo se refleja en todos los archivos que hacen referencia a ese inodo.

Nota: Los enlaces duros sólo son válidos dentro del mismo Sistema de Archivos. Los enlaces simbólicos pueden abarcar sistemas de archivos, ya que son simplemente el nombre de otro archivo.»

(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)

Examinando el Shell y cómo ejecuta un comando

  • El shell lee su entrada desde un archivo, desde una cadena o desde el terminal del usuario.
  • La entrada se divide en palabras y operadores, obedeciendo las reglas de citación. Estos tokens están separados por metacaracteres. Se realiza la expansión de alias.
  • El shell analiza (analiza y sustituye) los tokens en comandos simples y compuestos.
  • El shell realiza varias expansiones del shell, rompiendo los tokens expandidos en listas de nombres de archivos y comandos y argumentos.
  • Se realiza la redirección si es necesario, los operadores de redirección y sus operandos se eliminan de la lista de argumentos.
  • Se ejecutan los comandos.
  • Opcionalmente el shell espera a que el comando se complete y recoge su estado de salida.

.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.