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

use*_*325 -1 linux shell history

在 Ubuntu 中,/bin/sh是一个符号链接,指向/bin/dash.

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

Dop*_*oti 6

在 Ubuntu 中,它并不总是指向dash. 这发生在 Ubuntu 6.10 的发布中。可在此处找到解释更改原因的详尽文档。

从该文件:

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


thr*_*rig 5

sh不可能一直是符号链接,因为符号链接仅在 4.2 BSD (1977) 中引入,而旧的Unix 第六版

$ tar tvzf v6root.tar.gz  | grep 5888
-rwxrwxr-x  0 3      3        5888 May 13  1975 ./bin/sh
$ 
Run Code Online (Sandbox Code Playgroud)

今天您可以看到没有/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
    %

  • 我可以把日期推迟一点。第二版的[登录](http://www.tuhs.org/cgi-bin/utree.pl?file=V2/cmd/login.s)程序称为“/bin/sh”。BSD 中的符号链接至少可以追溯到 [4.1c](http://www.tuhs.org/cgi-bin/utree.pl?file=4.1cBSD/usr/man/man2/symlink.2) (3认同)