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


15

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

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


链接是无法区分的。
rici 2014年

您的意思是说没有区别?它们可以互换使用吗?
twan163

我对自己进行了一些测试,但是乍看之下看不到两者之间的任何区别。
twan163

cp: illegal option -- l您确定cp有l选项吗?
汤姆(Tom)

Answers:


16

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

不同之处在于预期用途,因此每个命令可用的选项不同。例如,cp可以使用递归,而ln不能:

cp -lr <src> <target>

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

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


如果我理解正确,“ cp -lr”将为所有文件创建硬链接,但是如果<target>中缺少目录,这些目录将被创建为新目录(即,没有到<target>中目录的硬链接)吗?
twan163

对,那是正确的。您无法创建目录的硬链接。因此,为了保持文件/目录结构,它成为“真实”目录中文件的硬链接。
garethTheRed 2014年

关于“ cp -lr”的行为:文件的硬链接...目录的新目录。似乎有点奇怪,但我想这种“奇怪”的行为是约束的副作用(不能具有目录的硬链接)。||| 仅供参考,这是一些指向硬链接信息的链接,这些链接不允许来自askubuntu的 directoreis ref1来自unix.stackexchange的ref2
Trevor Boyd Smith,

2

链接使用最少的系统调用,其次是ln,最后是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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.