使用 cp -l 或 ln 进行硬链接有区别吗?

使用 cp -l 或 ln 进行硬链接有区别吗?

我正在使用 rsync 和硬链接实现备份方案。我知道我可以将 link-dest 与 rsync 一起使用来执行硬链接,但我看到在 rsync 中实现“link-dest”之前提到使用“cp -l”。我知道的另一种硬链接方法是“ln”。

所以我的问题是,出于好奇:使用“cp -l”创建硬链接与使用“ln”相比是否有区别?

答案1

两者的结果必须相同,因为创建了到原始文件的硬链接。

区别在于预期用途以及每个命令可用的选项。例如,cp可以使用递归,但ln不能:

cp -lr <src> <target>

将创建<target>指向 中所有文件的硬链接<src>。 (它创建新目录;而不是链接)结果将是下面的目录树结构<target>看起来与 下的目录树结构相同<src>。它的不同之处在于cp -r <src> <target>,使用后者将复制每个文件和文件夹并为每个文件和文件夹提供一个新的inode,而前者仅使用文件上的硬链接,因此只会增加它们的Links数量。

当用于复制单个文件时(如您的示例所示),结果将是相同的。

答案2

关联使用最少的系统调用,其次是最后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

相关内容