为什么某些程序或系统依赖符号链接?

为什么某些程序或系统依赖符号链接?

语境

当我在文件系统中导航以从已安装的 docker 卷中查找持久文件时,我发现很难解开无穷无尽ls/cd/tree的目录,只是为了找到更多符号链接......也许这是一个错误的问题,因为我的搜索没有产生令人满意的答案

问题

为什么某些程序或系统依赖符号链接?

这里有历史课吗,类似于Rob Pike 关于点文件起源的故事

我读过维基百科页面文件系统符号链接,这彻底解释了什么,但不是为什么

例子

在 macOS 上,以下目录完全是符号链接

  • /usr/local/bin
  • /usr/local/var/homebrew/linked

答案1

许多系统依靠符号链接本质上是为了处理默认设置

程序名称和应运行的代码之间的关系并不总是双义的(一对一的关系):

1 对多:因为任何常用程序的不同实现都可以在系统上共存,并且用户和历史脚本不需要/不想关心......并且只需触发一些常用命令名称,因此管理员需要符号链接:

想想最基本的sh命令。只存在许多贝壳bash、csh、ksh、zsh...pffff…并且只有许多相关的二进制文件可以在系统上共存。当简单要求时应该启动其中哪一项sh

在我的系统上,任意决定很简单:

616457 0 lrwxrwxrwx 1 root root 4 14 mai     2021 /bin/sh -> bash

当然,我们立即想到,sh但同样的情况也会发生在许多常用的命令名称上(awk、bzip2、bc、cpio、gzip、lex、tar、yacc...)在我的系统上:

616450 0 lrwxrwxrwx 1 root root 15  8 juil.   2020 /bin/awk -> ../usr/bin/gawk
484973 0 lrwxrwxrwx 1 root root 10  8 juil.   2020 /usr/bin/yacc -> yacc.bison
484674 0 lrwxrwxrwx 1 root root 4 27 nov.   02:14 /usr/bin/lex -> flex

当然,当同一程序的不同版本共存时,所有这一切都会相似。主要考虑编译器、语言解释器,更不用说运行内核的源代码了。在我的系统上:

484470 0 lrwxrwxrwx 1 root root 43 26 nov.   23:43 /usr/bin/gcc -> /usr/x86_64-pc-linux-gnu/gcc-bin/10.4.0/gcc
485883 0 lrwxrwxrwx 1 root root 19  7 déc.  01:41 /usr/src/linux -> linux-5.4.225-0707a

多对一:另一个需要依靠符号链接适用于非常特殊的文件系统,例如/sys信息驻留在一个唯一的伪文件中,在搜索它时可以方便地通过多个路径进行访问。

相关内容