¿Hay alguna diferencia entre hardlinking con cp -l o ln?

15

Estoy implementando un esquema de respaldo usando rsync y enlaces duros. Sé que puedo usar link-dest con rsync para hacer los enlaces duros, pero vi mención de usar "cp -l" antes de que "link-dest" se implementara en rsync. Otro método de hardlinking que conozco es "ln".

Entonces mi pregunta es, por curiosidad: ¿hay alguna diferencia en hacer enlaces duros usando "cp -l" en comparación con el uso de "ln"?

twan163
fuente
Los enlaces son indistinguibles.
rici
¿Quieres decir que no hay diferencia? ¿Se podrían usar indistintamente?
twan163
Realicé una pequeña prueba yo mismo, pero a primera vista no pude ver ninguna diferencia entre los dos.
twan163
cp: illegal option -- l¿estás seguro de que cp tiene una opción l?
Tom

Respuestas:

16

Los resultados de ambos tienen que ser los mismos, ya que se crea un enlace duro al archivo original.

La diferencia está en el uso previsto y, por lo tanto, en las opciones disponibles para cada comando. Por ejemplo, cppuede usar la recursión mientras lnque no puede:

cp -lr <src> <target>

creará enlaces duros <target>a todos los archivos en <src>. (crea nuevos directorios; no enlaces) El resultado será que la estructura de árbol de directorios debajo <target>se verá idéntica a la que está debajo <src>. Será diferente de cp -r <src> <target>que el uso de este último copiará cada archivo y carpeta y le dará a cada uno uno nuevo, inodemientras que el primero solo usa enlaces duros en los archivos y, por lo tanto, simplemente aumenta su Linksrecuento.

Cuando se usa para copiar un solo archivo, como en su ejemplo, los resultados serán idénticos.

garethTheRed
fuente
si entiendo correctamente, "cp -lr" creará enlaces duros para todos los archivos, pero si faltan directorios en <target>, ¿se crearán como nuevos (es decir, no habrá enlaces duros a directorios en <target>)?
twan163
Si eso es correcto. No puede crear enlaces duros a directorios. Por lo tanto, para mantener la estructura de archivo / directorio, se convierte en enlaces duros para archivos dentro de directorios 'reales'.
garethTheRed
con respecto al comportamiento de "cp -lr": enlaces duros para archivos ... nuevos directorios para directorios. Parece un poco extraño, pero supongo que este comportamiento "extraño" es un efecto secundario de las restricciones (no puede tener enlaces duros de directorios). ||| también para su información aquí hay algunos enlaces a información sobre enlaces duros no permitidos para directoreis ref1 de askubuntu y ref2 de unix.stackexchange .
Trevor Boyd Smith
2

link usa la menor cantidad de llamadas al sistema, seguido de ln y finalmente cp :

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410
Steven Penny
fuente