我读过此链接,现在我只想知道为什么/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/中找到。
发布于 2018-03-06 06:09:55
git链接与路径无关,它们是节省空间的措施。
一般来说,在大多数情况下,对于“安装”软件,硬链接在可能的情况下比符号链接更可取,因为它们更高效和更有弹性。您将在/usr/bin中看到很多带有硬链接的二进制文件,包括perl,这很好。
git包确实倾向于使用符号链接,因为涉及到大量的链接和可能引起的问题。如果您从源代码安装git,它将默认使用硬链接(如果可能的话);您可以通过将NO_INSTALL_HARDLINKS=1添加到make install命令的参数中来禁用该链接。
发布于 2018-03-06 06:20:01
通常,一个具有多个相关函数的二进制文件有多个硬链接,以便让每个函数都有一个独特的、令人难忘的命令,并且仍然不会重复所有这些函数可能具有的任何代码。
将单个二进制的各种函数显示为不同的命令也是一种简单的、与shell无关的方法,可以使函数TAB -可完成:例如,在bash中,如果您只记得某个命令的前几个字母,只需键入您记得的字母并按TAB两次:您将得到带有这些大写字母的所有命令的列表。
也可以使用符号链接,但是如果所有链接都位于同一个目录中,那么硬链接是最节省空间的解决方案:与其复制整个文件,或者像符号链接那样消耗额外的inode (在某些文件系统上),硬链接只占用一个目录条目。
如果您愿意,您也可以轻松地使脚本表现为这样:
#!/bin/sh
case "${0##*/}" in
name1)
# do something
;;
name2)
# do something else
;;
*)
# output an error message, or perhaps usage instructions
;;
esachttps://unix.stackexchange.com/questions/428407
复制相似问题