¿Cuándo sería útil crear un enlace duro?

11

Básicamente, existen dos limitaciones principales con los enlaces duros:

  1. Los enlaces duros normalmente requieren que el enlace y el archivo residan en el mismo sistema de archivos.
  2. Solo el superusuario puede crear un enlace rígido a un directorio.

Por lo tanto, se introdujeron enlaces simbólicos para sortear las limitaciones de los enlaces duros. Entonces, la pregunta es, ¿todavía se necesitan enlaces duros? ¿Podría haber una situación en la que sean más útiles?

Pirooz
fuente
3
1) Algunos servidores HTTP no siguen los enlaces simbólicos 2) Los enlaces duros se pueden usar para copias de seguridad 3) Puede compartir sockets unix entre chroots 4) Puede eliminar cualquier versión de un enlace duro sin afectar a los demás
Dietrich Epp
¿Pueden esos servidores HTTP usar un enlace duro que apunta a un enlace simbólico? o estoy hablando tonterías?
arana

Respuestas:

11

Los enlaces duros nos ayudan a organizar nuestro sistema de archivos de una manera mucho más flexible. Básicamente, los enlaces duros nos permiten tomar un archivo y tener varios lugares en el sistema de archivos a la vez. Piensa en un escenario en el que eres fotógrafo y tienes muchas fotos (¡este es un ejemplo de mi vida!). Puede organizarlos por las personas que aparecen en ellos, porque a veces la gente le pide fotos de ellos. Pero también es posible que desee organizarlos por ubicación y por fecha. No hay una forma real de anidar estas tres cosas, son ejes de organización totalmente separados. Por lo tanto, puede crear tres jerarquías diferentes para estas tres cosas diferentes, y tener cada foto presente en las tres, sintener que guardar cada foto tres veces. Esa es la magia de los enlaces duros. Desvincular enlaces simbólicos, no debemos preocuparnos por dónde está el "archivo real", porque son todos el archivo real. Podemos eliminar y mover a voluntad, porque el archivo se mantendrá hasta que ya no haya ninguna referencia a él, y se eliminará cuando elimine el último enlace duro. Es simple y no requiere que hagas un seguimiento de mucho.

jcrawfordor
fuente
1
O uno podría tener un programa que se quiere invocar por los tres nombres gzip, gunzipy zcat.
JdeBP
8

El contenido de un archivo no se eliminará hasta que se hayan borrado todos los enlaces duros (sí, todos los nombres de archivos son enlaces duros, incluso el primero) y se haya cerrado el archivo. Como tal, puede ser útil cuando se requiere un archivo en varios lugares, pero se puede eliminar de cualquiera de ellos en cualquier momento, por ejemplo, entre ~/Downloads/coolsong.mp3y ~/Music/Cool Song.mp3.

Ignacio Vazquez-Abrams
fuente
3
Eso es correcto. Lo uso para seguir reproduciendo un torrent mientras tengo el archivo con el nombre correcto en mi carpeta de película limpia. Es mucho más fácil que mover y renombrar archivos que se están sembrando, y simplemente puedo eliminar la carpeta torrent cuando haya terminado de sembrar. Así es también como lo hace Couch Potato.
Nicolas Bouliane
1

Una ventaja no muy importante de un enlace rígido sobre un enlace simbólico es que cuando alcanza el inodo para un enlace rígido, el núcleo no tiene que procesar nada más para acceder al archivo. Cuando encuentra un enlace simbólico, el núcleo debe leer el valor del enlace y continuar atravesando la estructura del directorio antes de llegar al inodo del archivo. Esto lleva más tiempo, aunque la diferencia no necesariamente se mide fácilmente. Se vuelve realmente divertido cuando uno de los elementos en el valor del enlace simbólico es en sí mismo un enlace simbólico.

Jonathan Leffler
fuente
Excelente punto En Solaris, uno podría crear bucles usando enlaces simbólicos, cuyo procesamiento es aún más divertido :-)
1

Hay varias razones para los enlaces duros

  1. mantener referencias a un archivo hasta que la última referencia desaparezca (como señaló Ignacio)
  2. cuando vincula los archivos, solo ocupan el espacio de un archivo en el sistema de archivos (ambas referencias al archivo comparten los mismos nodos i). Por lo tanto, los enlaces duros deben estar en el mismo sistema de archivos.

Entonces, una razón para usar enlaces duros es posiblemente ahorrar mucho espacio ...

Puede agregar a cualquiera de las referencias y los datos van al archivo compartido. También puede agregar un descriptor de archivo mientras lee del otro (por ejemplo, con tail -f)

Tilo
fuente
0

Muchos de los ejemplos dados aquí son válidos, pero funcionarían igualmente bien con enlaces blandos (por ejemplo, el problema "necesita un archivo en varios lugares").

Un buen ejemplo de dónde los enlaces duros son realmente útiles es el software de respaldo Dirvish :

Dirvish es un sistema de copia de seguridad de red rápido, giratorio y basado en disco.

Con dirvish puede mantener un conjunto de imágenes completas de sus sistemas de archivos con creación y caducidad desatendidas. Una bóveda de respaldo dirvish es como una máquina del tiempo para sus datos.

Dirvish crea copias de seguridad a nivel de sistema de archivos (es decir, copia archivos, no crea imágenes), copiando archivos en un sistema de archivos separado (copia de seguridad) (como un disco duro USB). Cada vez que realice una copia de seguridad, dirvish creará una copia completa y separada del árbol de directorios que se guardará.

El truco es que si dirvish detecta que ya hay una copia de seguridad más antigua del árbol que está guardando, reutilizará automáticamente los archivos que no han cambiado, creando un enlace rígido en el árbol nuevo al archivo en el árbol viejo.

De esa manera, cada copia de respaldo es una copia completa y autónoma del árbol de directorios, pero al mismo tiempo, solo los archivos modificados realmente ocupan espacio en el sistema de archivos. En otras palabras, obtiene los beneficios de copias de seguridad incrementales (ahorro de espacio) y copias de seguridad completas (recuperación fácil) al mismo tiempo.

Esto solo es posible porque los enlaces duros son completamente transparentes para las herramientas de espacio de usuario.

Esto probablemente también funcionaría con enlaces simbólicos (aunque tendría problemas al hacer una copia de seguridad de los datos que usan enlaces simbólicos en sí), pero una ventaja posible solo con enlaces duros es:

Si desea deshacerse de las copias de seguridad antiguas, simplemente puede eliminar el árbol del directorio de copias de seguridad correspondiente. El sistema de archivos elimina automáticamente los archivos vinculados desde ese árbol (porque se elimina su último enlace duro), pero los archivos que también aparecen en otras copias permanecen en el disco.

sleske
fuente
Suena como rsnapshot.
Ignacio Vazquez-Abrams
0

Un caso útil es, por ejemplo, cuando tiene un programa (o script) que necesita descargar un gran tarball temporal y después de extraerlo, su programa lo eliminará de inmediato.

Si por alguna razón desea conservar ese tarball para uso futuro, la mejor manera es hacerlo ln /tmp/tarball.tgz ~mientras el tarball aún se está descargando. Entonces no necesitas hacer nada.

Cuando finaliza la descarga, e incluso después de que su programa eliminó el 'original', la copia exacta aún debe estar en su directorio de inicio.

navigaid
fuente
0

Utilizo 'Enlaces duros' para hacer una copia de seguridad de algunos de mis 'HowTos' y fragmentos

Tengo un directorio llamado 'Documentos compartidos' en mi usuario / raíz. En ese directorio tengo 'enlaces duros' a mis consejos, trucos, fragmentos, instrucciones que viven en sus directorios apropiados; php, mysql, css, regex, formulas, linux, etc., tenerlos en 'un lugar' hace que sea mucho más fácil de usar, actualizarlos que tener que saltar en mis documentos / directorios buscando estos documentos que uso a menudo.

Hace mucho tiempo, usaba enlaces simbólicos. Realmente haría una copia de seguridad de este directorio común de 'Documentos compartidos' en mi servidor. El problema es, enlaces simbólicos o 'enlaces blandos', si se copian (cp -auv) o tar'ed y copiados, SOLO haga una copia de seguridad o copie el 'enlace' y NO el contenido del documento. Entonces, tendría que atravesar los directorios y copiar cada una de las 2 docenas de archivos de su ubicación real.

Con HARD LINKS, puedo copiar, tar, rsync el directorio 'Documentos compartidos' y, de hecho, hacer una copia de seguridad de esos documentos ampliamente dispersos con confianza, el contenido está respaldado. Realmente fue una mierda para mí, cuando me di cuenta de que había estado haciendo una copia de seguridad de 0 'archivos de enlace' y no la información.

La desventaja de usar 'Enlaces duros' es que hacer ls en un directorio no le da una indicación de que un archivo está 'vinculado' con otro archivo o dónde ese archivo puede coexistir. Hay formas de encontrarlos, pero digo que no es obvio con un simple ls -l -> apunta a ... Entonces, generalmente agrego una nota al comienzo del documento que indica en qué directorio / archivos está este archivo 'es' compartido 'con

Landis

Landis Reed
fuente