为什么/usr中有很多硬链接

为什么/usr中有很多硬链接

我读了这个链接,现在我只想知道为什么里面有很多硬链接/usr

例如,在我的 Ubuntu 服务器中,安装了git,我在这里找到了命令git/usr/bin/git。我执行ls -l /usr/bin/git并得到如下输出:

-rwxr-xr-x 119 root root 11178080 Mar  6 03:48 /usr/bin/git

正如你所看到的,有 119 个硬链接......

为什么这里需要 119 个硬链接?更一般地说,既然我们已经有了环境变量PATH,并且已经放入了可执行文件/usr/bin/,而且出于某种兼容性的原因,我们可以创建软链接,我们可以随时随地执行它们,为什么里面会有一些硬链接usr呢?

的部分输出find /usr -samefile /usr/bin/git

/usr/libexec/git-core/git-prune
/usr/libexec/git-core/git-diff-index
/usr/libexec/git-core/git-ls-remote
/usr/libexec/git-core/git-merge-recursive
/usr/libexec/git-core/git-push
/usr/libexec/git-core/git-update-index
/usr/libexec/git-core/git-check-mailmap
/usr/libexec/git-core/git-interpret-trailers
/usr/libexec/git-core/git-archive
/usr/libexec/git-core/git-upload-archive
/usr/libexec/git-core/git-rev-parse
/usr/libexec/git-core/git-ls-files
/usr/libexec/git-core/git-am

的所有硬链接都/usr/bin/git可以在 中找到/usr/libexec/git-core/

答案1

这些git链接与路径无关,它们是一种节省空间的措施。

一般来说,在大多数情况下,对于“已安装”的软件,如果可能的话,硬链接比符号链接更可取,因为它们更高效、更有弹性。您会看到很多/usr/bin带有硬链接的二进制文件,包括perl,这很好。

git包确实倾向于使用符号链接,因为涉及大量链接并且可能导致的问题。如果您git从源代码安装,如果可能的话,它将默认使用硬链接;您可以通过添加NO_INSTALL_HARDLINKS=1make install命令的参数来禁用它。

答案2

通常,具有多个相关函数的单个二进制文件具有多个硬链接,以便让每个函数都有一个独特的、易于记忆的命令,并且仍然不会重复所有这些函数可能共有的任何代码。

使单个二进制文件的各种函数显示为不同的命令也是一种简单的、独立于 shell 的方法,可以使函数可完成 TAB:例如,在 中bash,如果您只记得某个命令的前几个字母,只需键入这些字母您记住并按 TAB 两次:您将获得包含这些首字母的所有命令的列表。

符号链接也可以用于此目的,但如果所有链接的命令都预计位于同一目录中,则硬链接是最节省空间的解决方案:而不是复制整个文件,或者仅使用额外的索引节点(如符号链接可能会这样做(在某些文件系统上),硬链接仅占用一个目录条目。

如果您愿意,您也可以轻松地使脚本表现得像这样:

#!/bin/sh

case "${0##*/}" in
    name1)
        # do something
        ;;
    name2)
        # do something else
        ;;
    *)
        # output an error message, or perhaps usage instructions
        ;;
esac

相关内容