![/bin/sh 一直是符号链接吗?](https://linux22.com/image/125061/%2Fbin%2Fsh%20%E4%B8%80%E7%9B%B4%E6%98%AF%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E5%90%97%EF%BC%9F.png)
在 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 %