为什么符号link的md5校验和等于原始文件

Why is the md5 checksum of a symbolic link is equal to the original file

我找了一段时间,我不明白为什么符号 link 的 md5 校验和等于它指向的文件。据我了解a symbolic link is still a file. Given that it is empty I would expect a symlink to have an md5 of d41d8cd98f00b204e9800998ecf8427e. (see here)

然而在实践中测试:

echo Hello World > test
ln -s test test_symlink

然后运行:

md5deep test test_symlink

产量:

e59ff97941044f85df5297e1c302d260  /tmp/test
e59ff97941044f85df5297e1c302d260  /tmp/test_symlink

有人知道我在这里遗漏了什么吗?

符号link对几乎所有文件系统操作都是透明的;这就是重点。当你 open 一个 symlink 时,它实际上打开了目标文件,并且是目标文件的内容得到了 MD5。只有 readlinklstat(以及很少使用的 lchownlutimesopen(..., O_PATH|O_NOFOLLOW))能够 "see" 一个 symlink 而不是它后面的文件。