Enlaces Duros e Enlaces Simbolicos
Enlaces Duros e Enlaces Simbolicos
Enlaces Duros e Enlaces Simbolicos
Para acceder de una manera rápida y cómoda a los programas o ubicaciones de uso
habitual en Linux no existen accesos directos como lo hay en Windows.
En Linux cada fichero y cada carpeta del sistema operativo tienen asignado un número
entero llamado inodo.
Este inodo es único para cada uno de los archivos y cada uno de las carpetas.
La información que almacena cada uno de los inodos de los distintos archivos y
carpetas es la siguiente:
Un enlace duro o Hard Link es un archivo que apunta al mismo contenido almacenado
en disco que el archivo original.
Por lo tanto, los archivos originales y los enlaces duros dispondrán del mismo inodo y
consecuentemente ambos estarán apuntando hacia el mismo contenido almacenado
en el disco duro.
Los enlaces duros o Hard Link creados por defecto con ln (sin opciones) produce dos
entradas de directorio que apuntan al mismo archivo (más concretamente, al mismo
nodo de índice).
Ninguno de los dos nombres es más auténtico que otro por lo que para borrar el
archivo, deberemos de eliminar ambos enlaces de referencia. Otra restricción de los
enlaces duros o Hard Link es que deben referenciar a archivos dentro del mismo
sistema de archivos a bajo nivel, por ejemplo, no podríamos crear un enlace duro o de
referencia (hard link) desde / (raíz) hacia /home, suponiendo que /home esté en una
partición independiente.
Ejemplo 1
Creamos el archivo
touch oficio.txt
Consultamos su inodo
ls -li oficio.txt
El resultado obtenido en mi caso es el siguiente:
También vemos que actualmente solo hay 1 archivo/entrada en el sistema que esté
apuntando al mismo inodo.
Una vez creado el archivo crearemos un enlace duro hacia el archivo que acabamos
de crear introduciendo el siguiente comando en la terminal:
ln oficio.txt enlaceoficio
Cada una de las partes del comando para crear el enlace duro tiene el siguiente
significado:
geekland.txt: Es la ruta o nombre del archivo original que tenemos en nuestro disco
duro.
enlacegeekland: Corresponde a la ruta o nombre del enlace duro que vamos a crear.
Como se puede ver el número de inodo sigue siendo el mismo que antes, pero ahora
hay 2 archivos/entradas apuntando hacia el mismo inodo.
Estos 2 archivos/entradas son el archivo original más el enlace duro que acabamos de
crear.
Seguidamente comprobaremos el número de inodo del enlace duro que hemos creado
ejecutando el siguiente comando en la terminal:
ls -li enlaceoficio
El resultado obtenido es:
Por lo tanto, se puede observar que tanto el enlace duro como el archivo que hemos
creado apuntan al mismo inodo, y consecuentemente apuntan hacia la misma
información almacenada en nuestro disco duro.
Además, tanto el enlace duro como el archivo original disponen de los mismos
permisos, del mismo propietario y forman parte del mismo grupo.
Ejemplo 2
ln -s $HOME/www /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/
Donde:
Con ese enlace simbólico, se consigue tener todos los proyectos web que se irán
creando en nuestro equipo dentro de la carpeta de usuario.
La idea es que si algún día, se cambia de distribución Linux, no se pierda ese trabajo
por un despiste: toda la documentación y proyectos están en el directorio de usuario
($HOME) así no se tendrá que recordar que dentro del sistema de ficheros de Linux
hay cosas que podrían hacer falta.
Cada una de las partes del comando usado para crear los enlaces duros recursivos
tienen el siguiente significado:
cp: Se refiere al comando copy que es el que usamos para crear los enlaces duros de
forma masiva.
-rl: La letra r hace referencia a recursivo y la letra l hace referencia a enlace duro. Por
lo tanto, añadiendo estas 2 opciones hacemos que se copien la totalidad de archivos
de una carpeta a otra mediante la creación de enlaces duros.
Una vez ejecutado este comando habremos creado en una multitud de enlaces duros.
NOTA: Los enlaces de referencia (Enlace duro o Hard Link) normalmente no se pueden
crear a directorios, solo root puede intentarlo si pasa como argumento las opciones -d,
-F o –directory. En la práctica es improbable que esto funcione, ya que la mayoría de
los filesystem no lo soportan, en cambio, esto no supone ningún problema para los
enlaces simbólicos.
Los enlaces simbólicos son parecidos a los accesos directos en Windows y son los
enlaces que todos los usuarios comunes acostumbran a usar de forma habitual.
Acabamos de ver que los enlaces duros apuntan a un archivo almacenado en nuestro
disco duro. En contraposición, tal y como se puede ver representado en la imagen, los
enlaces simbólicos apuntan al nombre de un archivo y posteriormente el archivo
apunta a un contenido almacenado en nuestro disco duro.
Los enlaces simbólicos son un tipo especial de archivo (archivos que contienen
nombres de archivos) cuyo contenido apunta al archivo enlazado. Linux accede al
archivo enlazado (archivo original) cada vez que intenta acceder al enlace simbólico,
por lo que acceder a un enlace simbólico es como acceder al archivo original. Esto nos
permite crear punteros entre sistemas de archivos de bajo nivel.
En la práctica, los enlaces simbólicos son más comunes que los enlaces duros; sus
desventajas son menores y la capacidad de enlazar entre sistemas de archivos
independientes y directorios puede ser importante. Con ellos podemos llamar a un
mismo fichero usando varios nombres, los identificará el sistema operativo por su
número de inodo generado de forma semi aleatoria.
touch geekland.txt
ls -li geekland.txt
Por lo tanto, el inodo del archivo que acabamos de crear es el 1706209. También
vemos que actualmente solo hay 1 archivo/entrada en el sistema que esté apuntando
al mismo inodo.
Una vez creado el archivo crearemos un enlace simbólico hacia el archivo que
acabamos de crear ejecutando el siguiente comando en la terminal:
Cada una de las partes del comando usado para crear el enlace simbólico tienen el
siguiente significado:
-s: Es la parte del comando que indica que el tipo de enlace que queremos crear es un
enlace simbólico.
Nota: A quien no le guste usar la terminal para crear enlaces simbólicos tiene que
saber que también se pueden crear usando el entorno gráfico de su entorno de
escritorio.
Una vez creado el enlace simbólico volveremos a comprobar el número de inodo del
archivo original ejecutando de nuevo el siguiente comando en la terminal:
ls -li carta.txt
Como se puede ver, el número de inodo sigue siendo el mismo que antes, pero, a
diferencia del caso anterior, a pesar de crear el enlace simbólico sigue habiendo
únicamente 1 archivo/entrada apuntando hacia el mismo inodo.
Seguidamente comprobaremos el número de inodo del enlace duro que hemos creado
ejecutando el siguiente comando en la terminal:
ls -li /home/manuel/Escritorio/enlacecarta
Después de estudiar los resultados vemos que el archivo original y el enlace que
hemos creado tienen un inodo diferente.
Por lo tanto no están apuntando hacia el mismo contenido ya que el archivo original
carta.txt está apuntando hacia un contenido almacenado en nuestro disco duro, y el
enlace simbólico está apuntado hacia el nombre del archivo original.
Acabamos de ver cómo crear un enlace simbólico de un único archivo. En el caso que
queramos crear enlaces simbólicos en masa de la totalidad de contenido almacenado
en un directorio también lo podemos realizar muy fácilmente.
Cada una de las partes del comando usado para crear los enlaces simbólicos
recursivos tienen el siguiente significado:
cp: Se refiere al comando copy que es el que usaremos para crear los enlaces
simbólicos de forma masiva.
La utilidad básica que todo el mundo acostumbra a dar a los enlaces simbólicos es la
de crear atajos para acceder a ciertos archivos o a ciertos directorios, pero aparte de
esta utilidad hay otras como por ejemplo las siguientes:
Si en algún momento precisamos eliminar alguno de los enlaces que hemos hemos
creado lo podemos hacer de forma muy fácil. Así por ejemplo si queremos eliminar el
enlace simbólico que creamos anteriormente tan solo tenemos que ejecutar el
siguiente comando en la terminal:
unlink /home/manuel/Escritorio/enlacecarta
Cada una de las partes usadas en el comando para eliminar enlaces tiene el siguiente
significado
Nota:
VÍDEO EXPLICATIVO
Todos los archivos y directorios aparecen debajo del directorio raíz ≪/≫, aun si están
almacenados en dispositivos físicamente diferentes.