Dmi*_*ich 10 hard-link utilities symlink
我了解符号链接和硬链接之间的技术差异,这是一个关于它们在实践中使用的问题,特别是我很想知道为什么两者都在看似相似的条件下使用:/bin
目录。
这是它在我的系统上的列表的片段:
~$ ls -lai /bin
total 10508
32770 drwxr-xr-x 2 root root 4096 Jun 14 11:47 .
2 drwxr-xr-x 28 root root 4096 Sep 6 13:15 ..
119 -rwxr-xr-x 1 root root 959120 Mar 28 22:02 bash
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bunzip2
127 -rwxr-xr-x 1 root root 1832016 Nov 16 2012 busybox
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzcat
6191 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzcmp -> bzdiff
5640 -rwxr-xr-x 1 root root 2140 Dec 15 2011 bzdiff
5872 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzegrep -> bzgrep
3520 -rwxr-xr-x 1 root root 4877 Dec 15 2011 bzexe
6184 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzfgrep -> bzgrep
5397 -rwxr-xr-x 1 root root 3642 Dec 15 2011 bzgrep
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzip2
2851 -rwxr-xr-x 1 root root 10336 Dec 15 2011 bzip2recover
6189 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzless -> bzmore
5606 -rwxr-xr-x 1 root root 1297 Dec 15 2011 bzmore
Run Code Online (Sandbox Code Playgroud)
我将硬链接缩进到同一个 inode 以获得更好的可见性。所以在的情况下使用符号连接bzcmp
,bzegrep
,bzfgrep
,bzless
和在硬连接的情况下bzip2
,bzcat
,bunzip2
?
它们都是常规文件(不是目录),驻留在一个文件系统中,是系统实用程序,甚至用于处理相同的事情:bzip 档案。在这种特殊情况下使用硬链接/符号链接的原因是纯粹的历史还是我遗漏了什么?
澄清我的问题:
我不是问:
这些问题已在 SO 的其他主题中解决。我试图理解为什么在特定情况下会做出不同的决定:针对一组相关的系统实用程序。从技术上讲,它们都可以是符号链接,也可以是硬链接,这两种选项都可以使用(在这两种情况下,程序仍然可以弄清楚它是如何通过 调用的argv[0]
)。如果有的话,我想了解这里的意图。
有关的:
在这种情况下,与符号链接相比,使用硬链接主要有 3 个优点。
硬链接
符号链接
之所以存在这些链接,是因为许多可执行文件的行为因它们的调用方式而异。例如,2级的命令bzless
和bzmore
实际上是一个可执行文件,bzmore
。根据用于调用它的名称,可执行文件的行为会有所不同。
这样做有多种原因。以下是一些比较明显的:
在这个特定的应用程序中,选择哪一个是没有实际意义的。两者都可以促进充当别名的功能,以便可以重载单个可执行文件。这确实是这里各种程序的开发人员正在利用的关键功能。
在查看FHS(文件系统层次结构标准)时甚至以这种方式指定它,它可以是。
摘抄
如果 /bin/sh 不是真正的 Bourne shell,则它必须是指向真实 shell 命令的硬链接或符号链接。
这背后的基本原理是因为 sh 和 bash 可能不一定以相同的方式运行。使用符号链接还可以让用户轻松看出 /bin/sh 不是真正的 Bourne shell。
...
...
如果 gunzip 和 zcat 程序存在,它们必须是 gzip 的符号或硬链接。/bin/csh 可能是 /bin/tcsh 或 /usr/bin/tcsh 的符号链接。
似乎您正试图从现有实践中找出是否有非技术规则告诉您要使用哪种链接。(我说非技术性是因为您已经知道使用一种而不是另一种的技术原因。)
答案是,没有其他规则。你从 Ubuntu 的bzip2
包中指出的这个例子只是表明许多开发人员在没有充分考虑的情况下混合使用它们。这是因为除了技术差异之外没有强有力的指导,而且这些差异很小。
就我个人而言,我总是更喜欢使用符号链接,因为我愿意为它们的微不足道付出代价,以换取它们的自我记录性质。
其他开发人员将选择硬链接,因为他们提供的效率极低。
这个问题很像空格与制表符或动态与静态类型或Emacs 与 vi,只是它不够有趣,不足以引发一场圣战。就像更有趣的战斗一样,选择任何一个选项都是有理由的,但除非有人告诉您使用哪个选项,否则您可以选择对您更有意义的选项。