¿Qué es Soft Link y Hard Link en Linux?
Un simbólico o enlace suave es un vínculo real al archivo original, mientras que un vínculo físico es una copia espejo del archivo original. Si elimina el archivo original, el enlace suave no tiene ningún valor, porque apunta a un archivo que no existe.
Pero en el caso del enlace duro, es completamente opuesto. Incluso si elimina el archivo original, el enlace duro aún tendrá los datos del archivo original. Porque el enlace duro actúa como una copia espejo del archivo original.
En pocas palabras, un vínculo suave
- puede cruzar el sistema de archivos,
- le permite enlazar entre directorios,
- tiene un número de inodo y permisos de archivo diferentes a los del archivo original,
- los permisos no se actualizarán,
- solo tiene la ruta del archivo original, no el contenido.
Un enlace duro
- no puede cruzar los límites del sistema de archivos (es decir, un enlace fijo solo puede funcionar en el mismo sistema de archivos),
- no puede vincular directorios,
- tiene el mismo número de inodo y permisos que el archivo original,
- los permisos se actualizarán si cambiamos los permisos del archivo fuente,
- tiene el contenido real del archivo original, por lo que aún puede verlo, incluso si el archivo original se movió o eliminó.
¿Aún no lo entiendes? Bueno, déjame mostrarte algunos ejemplos prácticos.
Cómo crear un enlace suave o un enlace simbólico
Vamos a crear un directorio vacío llamado "test"
.
$ mkdir test
Cambiar a la "test"
directorio:
$ cd test
Ahora, crea un nuevo archivo llamado source.file
con algunos datos como se muestra a continuación.
$ echo "Welcome to OSTechNix" >source.file
Veamos los datos del archivo fuente.
$ cat source.file Welcome to OSTechNix
Bueno, el source.file
ha sido creado.
Ahora, cree un enlace simbólico o suave al source.file
.
Para hacerlo, ejecute:
$ ln -s source.file softlink.file
Comparemos los datos de ambos source.file
y softlink.file
.
$ cat source.file Welcome to OSTechNix
$ cat softlink.file Welcome to OSTechNix
Como puede ver en el resultado anterior, softlink.file
muestra los mismos datos que source.file
.
Revisemos los inodos y permisos de softlink.file
y source.file
.
$ ls -lia
Salida de muestra:
total 12 11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:39 . 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 .. 11665731 lrwxrwxrwx 1 sk sk 11 Oct 17 11:39 softlink.file -> source.file 11665692 -rw-rw-r-- 1 sk sk 21 Oct 17 11:39 source.file
Como vemos en la captura de pantalla anterior, el número de inodo (11665731
vs 11665692
) y permisos de archivo (lrwxrwxrwx
vs -rw-r--r--
) son diferentes , aunque el softlink.file
tiene el mismo contenido que source.file
. Por lo tanto, se prueba que el enlace suave no comparte el mismo número de inodo y permisos del archivo original.
Ahora, elimine el archivo original (es decir, source.file
) y ver qué sucede.
$ rm source.file
Verifique el contenido del softlink.file
usando el comando:
$ cat softlink.file
Salida de muestra:
cat: softlink.file: No such file or directory
Como puede ver arriba, no existe tal archivo o directorio llamado softlink.file
después de que eliminamos el archivo original (es decir, source.file
).
Entonces, ahora entendemos que el enlace suave es solo un enlace que apunta al archivo original. El enlace suave es como un acceso directo a un archivo. Si elimina el archivo, el acceso directo es inútil.
Como ya sabe, si elimina el enlace suave, el archivo original seguirá estando disponible.
Lectura sugerida:
- Cómo listar enlaces simbólicos en Linux
- Cómo encontrar enlaces simbólicos rotos y eliminarlos en Linux
Cómo crear un enlace duro
Cree un archivo llamado source.file
con algunos contenidos como se muestra a continuación.
$ echo "Welcome to OSTechNix" >source.file
Verifiquemos el contenido del archivo.
$ cat source.file Welcome to OSTechNix
El source.file
se ha creado ahora.
Ahora, vamos a crear el enlace duro al source.file
como se muestra a continuación.
$ ln source.file hardlink.file
Comprueba el contenido de hardlink.file
:
$ cat hardlink.file Welcome to OSTechNix
Ves el hardlink.file
muestra los mismos datos que source.file.
Revisemos el inodo y los permisos de hardlink.file
y source.file
.
$ ls -lia
Salida de muestra:
total 16 11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 . 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 .. 11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file 11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file
Ahora, vemos que tanto hardlink.file
y source.file
tienen el mismo número de inodes (11665692
) y permisos de archivo (-rw-r--r--
) . Por lo tanto, se prueba que el archivo de enlace duro comparte el mismo número de inodos y permisos del archivo original.
Aviso: Si cambiamos los permisos en source.file
, se aplicará el mismo permiso al hardlink.file
también.
Ahora, elimine el archivo original (es decir, source.file
) y ver qué sucede.
$ rm source.file
Comprobar el contenido de hardlink.file
usando el comando:
$ cat hardlink.file
Salida de muestra:
Como ve arriba, incluso si eliminé el archivo fuente, puedo ver el contenido del hardlink.file
. Por lo tanto, se prueba que el enlace duro comparte el mismo número de inodo, los permisos y los datos del archivo original.
Entonces, ¿cuál es la diferencia entre el enlace duro y el archivo copiado normal?
Quizás se pregunte por qué crearíamos un enlace duro mientras podemos copiar y pegar fácilmente el archivo original. Crear un vínculo físico a un archivo es diferente a copiarlo.
Si copia un archivo, simplemente duplicará el contenido. Entonces, si modifica el contenido de un archivo (ya sea original o enlace duro), no tiene efecto en el otro.
Sin embargo, si crea un enlace fijo a un archivo y cambia el contenido de cualquiera de los archivos, el cambio se verá en ambos.
Echemos un vistazo al archivo fuente.
$ cat source.file Welcome to OSTechNix
El archivo fuente tiene una sola línea que dice:Bienvenido a OSTechNix.
Agregue una nueva línea, por ejemplo, "Bienvenido a Linux" en source.file
o hardlink.file
.
$ echo "Welcome to Linux" >>source.file
Ahora verifique el contenido de ambos archivos.
$ cat hardlink.file Welcome to OSTechNix Welcome to Linux
$ cat source.file Welcome to OSTechNix Welcome to Linux
¿Ver? Los cambios que acabamos de hacer en source.file
se actualizan en ambos archivos. Significado:ambos archivos (fuente y enlace duro) se sincronizan.
Cualquier cambio que haga en cualquier archivo se reflejará en otro. Si normalmente copia/pega el archivo, no verá ningún cambio nuevo en otro archivo.
Para obtener más detalles, consulte las páginas man.
$ man ln
Conclusión
En esta guía, hemos discutido qué es un enlace suave y un enlace duro en Linux, cómo crear un enlace suave y un enlace duro con comandos de ejemplo y, finalmente, explicamos la diferencia entre un enlace duro y un archivo copiado normal.
Espero que tenga una idea básica de cómo usar un enlace simbólico o suave y un enlace duro en Linux.