/bin/sh 一直是符号链接吗?

/bin/sh 一直是符号链接吗?

在 Ubuntu 中,/bin/sh是指向 的符号链接/bin/dash

是否存在一个 Unix 或类 Unix 操作系统,其中/bin/sh有一个实际的 shell,而不是指向 shell 的符号链接?

答案1

在 Ubuntu 中,它不是总是指向 的符号链接dash。Ubuntu 6.10 发布时发生了这种情况。可以找到一份详尽的文档来解释这一变化的原因这里

从该文件:

切换默认 shell 的主要原因是效率。 bash 是一个优秀的全功能 shell,适合交互式使用;事实上,它仍然是默认的登录 shell。然而,与dash相比,其体积较大且启动和运行速度较慢。大量 shell 实例作为 Ubuntu 引导过程的一部分启动。 Ubuntu 核心开发团队认为最好简单地进行更改,而不是单独更改它们中的每一个以在 /bin/dash 下显式运行,这种更改需要大量的持续维护,并且如果不密切关注,可能会出现退化。默认外壳。 Ubuntu 6.10 中的启动速度改进常常被错误地归因于 Upstart,它是 init 系统未来开发的一个很好的平台,但在 Ubuntu 6.10 中主要以 System V 兼容模式运行,只有很小的行为变化。这些改进实际上很大程度上归功于 /bin/sh 的更改。

答案2

sh不可能总是符号链接,因为符号链接仅在 4.2 BSD (1977) 及更早的版本中引入Unix 第六版

$ tar tvzf v6root.tar.gz  | grep 5888
-rwxrwxr-x  0 3      3        5888 May 13  1975 ./bin/sh
$ 

今天您可以看到没有/bin/sh符号链接的 BSD。举些例子:

  • 在 OpenBSD 上,它是到 Korn shell(OpenBSD 的变体)的硬链接pdksh

    $ ls -il /bin/{,k,rk}sh
    26004 -r-xr-xr-x 3 根 bin 469976 2016 年 2 月 26 日 /bin/ksh
    26004 -r-xr-xr-x 3 根 bin 469976 2016 年 2 月 26 日 /bin/rksh
    26004 -r-xr-xr-x 3 根 bin 469976 2016 年 2 月 26 日 /bin/sh
    $
  • 在 FreeBSD 上,它是 Almquist shell 的后代:

    % ls -il /bin/sh
    561595 -r-xr-xr-x 1 根轮 143432 2017 年 1 月 7 日 /bin/sh
    %

相关内容