¿Cuál es la diferencia entre enlaces duros y archivos copiados?

22

Entiendo que los enlaces duros incluyen una copia del archivo original y que podría eliminar un archivo enlazado en un directorio, y aún existiría en el otro directorio.

Si ese es el caso, ¿por qué querría usar enlaces duros? ¿Por qué no solo tener dos archivos separados?

Mike B
fuente

Respuestas:

29

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.

El Ingeniero Significante
fuente
3
Para archivos muy grandes, ¿crear un enlace duro siempre es más rápido que copiar el archivo original?
Jorge Bucaran
14

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

Peter
fuente
44
Gracias por la pronta respuesta. Entonces, ¿por qué querría usar un enlace rígido en lugar de un enlace blando?
Mike B
55
Un enlace suave es básicamente un puntero a otro archivo. Entonces, si elimina el archivo original, el softlink seguirá existiendo pero se romperá. Un enlace duro son 2 nombres para el mismo archivo, por lo que se pueden eliminar individualmente.
Peter
19
La explicación de Peter es buena, pero ha dejado de lado el "conteo de enlaces". En el inodo del archivo (en los metadatos del disco) hay un recuento de enlaces. Un enlace duro incrementa el recuento de enlaces, un enlace suave no. El núcleo puede eliminar el contenido de un archivo si el recuento de enlaces cae a cero.
Bruce Ediger
44
Creo que la respuesta de Alan a esto tiene un punto importante: cambiar un archivo cambia todos sus enlaces duros, con una copia tendrían contenido diferente.
donothings exitosamente
6

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 -iinterruptor al lscomando.

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á.

rjmunro
fuente
0

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 lvmejecutable.

JRFerguson
fuente
Esto no tiene nada que ver con la pregunta.
rjmunro
1
@rjmunro ruego diferir. El OP preguntó: "¿por qué querría usar enlaces duros?"
JRFerguson
No entiendo el último ejemplo. Una vez, había enlaces duros a muchos ejecutables, ahora hay enlaces suaves a un ejecutable. ¿Cómo se distinguen esos enlaces blandos?
Emanuel Berg
@EmanuelBerg Mi punto fue que, independientemente de si se usan enlaces duros o blandos, es el nombre con el que se invoca el ejecutable lo que determina las opciones y argumentos que son válidos para la ejecución.
JRFerguson
1
@EmanuelBerg TMTOWTDI
JRFerguson