Y a-t-il une différence entre le hardlinking avec cp -l ou ln?

15

J'implémente un schéma de sauvegarde à l'aide de rsync et de liens physiques. Je sais que je peux utiliser link-dest avec rsync pour faire les hardlinks, mais j'ai vu la mention d'utiliser "cp -l" avant que "link-dest" ne soit implémenté dans rsync. Une autre méthode de hardlinking que je connais est "ln".

Donc, ma question est, par curiosité: y a-t-il une différence entre créer des liens physiques en utilisant "cp -l" et en utilisant "ln"?

twan163
la source
Les liens sont indiscernables.
rici
Tu veux dire qu'il n'y a pas de différence? Ils pourraient être utilisés de manière interchangeable?
twan163
J'ai fait un petit test moi-même, mais je n'ai pas vu de différence entre les deux, à première vue.
twan163
cp: illegal option -- lêtes-vous sûr que cp a une option l?
Tom

Réponses:

16

Les résultats des deux doivent être les mêmes, dans la mesure où un lien dur est créé vers le fichier d'origine.

La différence réside dans l'utilisation prévue et donc les options disponibles pour chaque commande. Par exemple, cppeut utiliser la récursion alors lnqu'il ne peut pas:

cp -lr <src> <target>

va créer des liens durs <target>vers tous les fichiers <src>. (il crée de nouveaux répertoires, pas des liens) Le résultat sera que l'arborescence des répertoires sous <target>sera identique à celle sous <src>. Il sera différent du fait cp -r <src> <target>que l'utilisation de ce dernier copiera chaque fichier et dossier et leur donnera un nouveau inodetandis que le premier utilise simplement des liens durs sur les fichiers et augmente donc simplement leur Linksnombre.

Lorsqu'il est utilisé pour copier un seul fichier, comme dans votre exemple, les résultats seront identiques.

garethTheRed
la source
si je comprends bien, "cp -lr" créera des liens physiques pour tous les fichiers, mais s'il manque des répertoires dans <target>, ceux-ci seront créés comme nouveaux (c'est-à-dire pas de liens physiques vers des répertoires dans <target>)?
twan163
Oui c'est correct. Vous ne pouvez pas créer de liens durs vers des répertoires. Par conséquent, afin de conserver la structure du fichier / répertoire, il devient des liens physiques pour les fichiers à l'intérieur des répertoires «réels».
garethTheRed
concernant le comportement de "cp -lr": liens durs pour les fichiers ... nouveaux répertoires pour les répertoires. semble un peu étrange mais je suppose que ce comportement "étrange" est un effet secondaire des contraintes (ne peut pas avoir de liens durs de répertoires). ||| aussi FYI pour référence voici quelques liens vers des informations sur les liens durs non autorisés pour directoreis ref1 de askubuntu et ref2 de unix.stackexchange .
Trevor Boyd Smith
2

link utilise le moins d'appels système, suivi de ln et enfin 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
la source