Respuestas:
Si copia un archivo, duplicará el contenido. Entonces, si modifica el contenido de un solo archivo, eso no tiene efecto en el otro.
Si crea un enlace duro, creará un archivo que apunte al mismo contenido. Entonces, si cambia el contenido de cualquiera de los archivos, el cambio se verá en ambos.
Un enlace duro es básicamente un segundo nombre de archivo para el mismo archivo. Entonces, si vincula un archivo, solo estará una vez en el sistema de archivos y, por lo tanto, solo ocupará espacio una vez. Por lo tanto, desea usar esto si desea ahorrar espacio en disco
En los sistemas de archivos Unix, cada nombre de archivo es en realidad un enlace rígido a la ubicación de los datos en el disco, llamado inodo. Si crea un nuevo enlace duro a un archivo existente, no ocupará espacio adicional en el disco, ya que es solo otro puntero a los mismos datos. Si edita los datos mediante uno u otro enlace (o edita el inodo directamente), ambos archivos cambiarán.
El sistema lleva un recuento de cuántos enlaces duros tiene cada inodo. Cuando el recuento de enlaces es 0, ya no se puede acceder al archivo y los datos se marcan como seguros para sobrescribirse. Entonces, dado un archivo con 2 enlaces duros, si elimina cualquiera de los enlaces, los datos no se eliminarán. Solo si elimina ambos, los datos desaparecerán.
Puede ver los números de inodo de los archivos con el -i
interruptor al ls
comando.
Un enlace suave, por otro lado, apunta a otro archivo por su nombre de archivo. Si mueve o elimina el archivo original, el enlace se romperá.
Con referencia a la parte de la pregunta que preguntaba, "¿por qué querría usar enlaces duros?":
Los archivos vinculados (o, en realidad, los vinculados (simbólicos) ofrecen una forma útil de tener un único archivo ejecutable que se puede enmascarar para diferentes propósitos.
Es decir, el nombre por el cual se invoca el código se puede examinar para determinar qué opciones están disponibles para la ejecución. Esto permite el desarrollo y empaquetado de un gran código con toda la funcionalidad compartida necesaria para propósitos ligeramente diferentes. Desde la perspectiva del usuario, la especificación de "qué" ejecutar (por nombre) limita las opciones y la presentación a un subconjunto de opciones más manejable.
Un ejemplo clásico es LVM. Hubo un tiempo en que HP-UX utilizaba archivos vinculados para los diversos ejecutables (p vgdisplay
. Ej vgcreate
. vgextend
, Etc.). Hoy, como Linux, estos comandos son en realidad enlaces simbólicos (suaves) al lvm
ejecutable.