为什么在/ bin中混合使用符号链接和硬链接?


10

我了解符号链接和硬链接之间的技术区别,这是有关它们在实践中使用的问题,尤其是我很好奇地知道为什么两者都在看似相似的条件下使用:/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

我将硬链接缩进到相同的inode以获得更好的可见性。所以在的情况下使用符号连接bzcmpbzegrepbzfgrepbzless和在硬连接的情况下bzip2bzcatbunzip2

它们都是常规文件(不是目录),驻留在一个文件系统中,是系统实用程序,甚至还可以用于处理同一内容:bzip存档。在这种特殊情况下使用硬链接/符号链接的原因是纯粹出于历史原因还是我遗漏了一些东西?

澄清我的问题:

不是在问:

  • 符号链接和硬链接之间的技术区别
  • 它们各自的理论优点和缺点

这些问题已在SO的其他线程中得到了解决。我试图了解为什么在特定情况下会做出不同的决定:针对一组相关的系统实用程序。从技术上讲,它们全都可能是符号链接,或者全都可能是硬链接,这两个选项都可以工作(并且在两种情况下,程序仍然可以弄清楚如何通过调用argv[0])。我想了解这里的意图。

有关:


我认为这取决于软件包维护者的决定。fe我运行gentoo,在我/bin的第三栏中,ls -lai始终是gentoo,1因此似乎只使用软链接。您使用什么发行版?
重播

我使用Ubuntu 12.04
Dmitry Pashkevich 2013年

1
乍一看,它似乎是某种类型的规则:“二进制的硬链接,脚本/包装的符号链接”
彼得

Answers:


5

为什么要使用硬链接与符号链接

在这种情况下,相对于符号链接,使用硬链接主要有3个优点。

硬链接

  1. 通过硬链接,链接直接指向索引节点。
  2. 硬链接就像拥有可执行文件的多个副本,但仅使用一个磁盘空间一样。
  3. 您可以重命名硬链接的任何一个分支而不会破坏任何内容。

符号链接

  1. 链接指向对象(然后依次指向对象节点)。
  2. 它们可以跨越文件系统,而硬链接则不能。

一般链接的优点

之所以存在这些链接,是因为许多可执行文件的调用方式不同。例如,这两个命令bzlessbzmore实际上是一个可执行文件bzmore。可执行文件的行为会有所不同,具体取决于用来调用它的名称。

这样做有多种原因。以下是一些较明显的方法:

  1. 更容易开发单个可执行文件,而不是多个
  2. 节省磁盘空间
  3. 易于部署

为什么两者都被使用?

在这个特定的应用中,任何一个的选择都是没有意义的。任何一种都可以促进充当别名的功能,从而可以使单个可执行文件超载。这确实是这里各种程序的开发人员所利用的关键功能。

在查看FHS(文件系统层次结构标准)时,甚至以这种方式指定了它,可以是任何一种。

摘抄

如果/ bin / sh不是真正的Bourne shell,则它必须是到实际shell命令的硬链接或符号链接。

其背后的理由是因为sh和bash不一定以相同的方式表现。使用符号链接还使用户可以轻松地看到/ bin / sh不是真正的Bourne shell。

...

...

如果存在gunzip和zcat程序,则它们必须是gzip的符号链接或硬链接。/ bin / csh可能是/ bin / tcsh或/ usr / bin / tcsh的符号链接。

参考文献


是的,我知道,谢谢,但是为什么有时使用符号链接,有时使用硬链接?你所描述的工作会在两种情况下以同样的方式
梅德Pashkevich

@DmitryPashkevich-好的,我已经重构了答案,让我知道是否更好。
slm

也许我问的是一个愚蠢的问题,但我仍然没有回答:)是的,我熟悉这两种链接的技术区别以及优点/缺点。我正在尝试了解一个特定情况:为什么我的/bin/目录中同时看到硬链接和符号链接?这些实用程序的开发人员为什么不坚持一种链接类型?
Dmitry Pashkevich 2013年

编辑了我的原始问题以(希望)加以澄清
Dmitry Pashkevich

@DmitryPashkevich-添加了一些其他内容。让我知道是否有帮助。
slm

5

似乎您正在尝试从现有实践中找出是否存在非技术性规则来告诉您要使用哪种链接。(我说这是非技术性的,因为您已经知道使用一种技术而非另一种技术的原因。)

答案是,没有其他规则。您从Ubuntu bzip2软件包中指出的该示例只是表明,许多开发人员在没有太多预见的情况下将它们混合在一起。这是因为除了技术上的差异以外没有其他强有力的指导,而且这些差异很小。

就我个人而言,我总是喜欢使用符号链接,因为我愿意为它们的细微开销付费,以换取它们的自我记录性质。

其他开发人员将为他们提供的微小效率选择硬链接。

这个问题很像空格与制表符动态与静态键入Emacs与vi一样,只是它的趣味性不足以引发一场神圣的战争。像更有趣的战斗一样,有理由选择任一选项,但是除非有人告诉您使用哪个选项,否则您必须选择对您更有意义的选项。


1
感谢您分享您的观点!我认为符号链接的“自我记录”性质经常被忽略
Dmitry Pashkevich
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.