2017-05-24 201 views
-1

我一直在寻找一段时间,我无法理解为什么符号链接的md5校验和等于它指向的文件。在我的理解a symbolic link is still a file。鉴于它是空的,我期望一个符号链接有一个md5的d41d8cd98f00b204e9800998ecf8427e。 (见here为什么符号链接的md5校验和等于原始文件

然而在实践中检验:

echo Hello World > test 
ln -s test test_symlink 

然后运行:

md5deep test test_symlink 

产量:

e59ff97941044f85df5297e1c302d260 /tmp/test 
e59ff97941044f85df5297e1c302d260 /tmp/test_symlink 

有谁知道我在这里失踪?

+0

符号链接的全部*点*可用作目标的透明*指针*,即您可以对其进行操作,就像操作目标一样(打开和读取数据,检查元数据等)。有些调用可以识别象'ls'这样的符号链接和工具。 'md5deep'工具显然没有被打扰,可能是因为没有人对此感兴趣。 –

+0

与'cat test'和'cat test_symlink'打印相同的输出的原因相同。 – Barmar

回答

1

符号链接对于几乎都是透明的文件系统操作;这就是它的重点。当你使用符号链接open时,它实际上会打开目标文件,并且它是获取MD5'd的目标文件的内容。只有readlinklstat(以及更常用的lchown,lutimesopen(..., O_PATH|O_NOFOLLOW))能够“看到”符号链接而不是其后面的文件。

+0

我看到md5s确实是平等的。实际上,我应该意识到这个工具并没有将symlink的性质考虑为删除目标文件,并试图在断开的链接上计算md5会产生'md5sum:test_symlink:没有这样的文件或目录。感谢您的解释。 – Adonis