/usr/bin
对于位于和 中的链接/usr/local/bin
,它们是硬链接还是符号链接更好?好像都是象征性的?为什么?
答案1
当链接放入/usr/bin
or时/usr/local/bin
,这通常是因为实际的二进制文件位于其他地方。为什么它住在别的地方?通常是因为它是一组文件的一部分,通常位于其自己的子目录中,它依赖于该子目录来运行。为什么不能将所有这些文件转储到/usr/bin
or中/usr/local/bin
?由于这些位置仅适用于二进制文件,因此二进制文件位于这些目录的顶层,并且不允许有子目录。
那么,我们为什么不在那里使用硬链接呢?因为文件的硬链接被认为与原始文件具有相同的地位(它共享相同的索引节点),并且当存在硬链接时该文件不会被删除。相反,符号链接只是指向“真实事物”的指针。实际上,将硬链接放置到位于其他位置的二进制文件没有多大意义,因为如果删除其他位置/子目录中的其他文件,该文件将无法自行运行。
一个例子是各种 TeX 实用程序,它们位于/usr/bin
.如果您查看它们,您会发现其中许多都指向实际位于/usr/share/texlive/texmf-dist/scripts/
.例如,您可以通过执行 来查看这些内容ls -la | grep texmf
。
正如 muru 提到的,另一个原因是硬链接不能跨文件系统工作。
链接用于Debian 替代系统中的文件的另一种情况是/usr/bin
或。/usr/local/bin
在这种情况下,二进制文件可能是指向 中的符号链接的符号链接/etc/alternatives
,然后该符号链接指向实际的二进制文件,通常又指向 中的本身/usr/bin
。
例子:
ls -la /usr/bin/awk
lrwxrwxrwx 1 root root 21 Jul 31 2013 /usr/bin/awk -> /etc/alternatives/awk
ls -la /etc/alternatives/awk
lrwxrwxrwx 1 root root 13 Aug 11 2013 /etc/alternatives/awk -> /usr/bin/gawk
在这种情况下,很明显符号链接是正确的机制,因为它指向任何可能的二进制文件范围。