我知道任何 *nix 操作系统的“层”架构都是 kernel-shell-utility(“从内到外”)。
如果我们安装了 Debian-Server 并附带了一些 CLI 实用程序,
那么所有这些实用程序是否应该与所有 shell(Bash、Dash、Korn 等)都一样?
换句话说,Linux 实用程序(我假设它依赖于内核)是否也依赖于 shell?
我知道任何 *nix 操作系统的“层”架构都是 kernel-shell-utility(“从内到外”)。
如果我们安装了 Debian-Server 并附带了一些 CLI 实用程序,
那么所有这些实用程序是否应该与所有 shell(Bash、Dash、Korn 等)都一样?
换句话说,Linux 实用程序(我假设它依赖于内核)是否也依赖于 shell?
它不是。一切都在内核之上运行,非 shell 脚本的“实用程序”不需要 shell,因此不依赖于特定的 shell。
有些程序确实需要其他程序,例如 Wayland 客户端需要 Wayland 合成器。但是没有涉及贝壳的一般分层。
我假设“shell”是指您用作 Unix 系统登录 shell 的特定 shell。
您机器上的软件很可能依赖于特定的shell,但它不会依赖于您用作个人登录shell 的shell(即它不会仅仅因为它是您的登录shell 而依赖于登录shell)。
碰巧作为脚本(或部分作为脚本)实现的实用程序可能会使用 eg或其他一些 shell 来执行某些操作,但如果您的登录 shell 是、or或一些更深奥的 shell
/bin/sh
,它将以完全相同的方式工作,就像 Python 脚本对每个人都一样,无论他们使用什么 shell。bash
zsh
yash
请记住,Unix 是一个多用户操作系统,因此,无论用户使用什么命令行 shell(“管道”,即启动实用程序的语法),命令行实用程序和图形应用程序都可以正常工作, 可能略有不同,但在任何用户的 shell 中都是一致的)。
有关使用shell 脚本的实用程序示例,请参见例如
firefox
某些系统上的可执行文件(这可能是启动实际firefox
二进制文件的 shell 脚本)。某些类型的编译器,例如 OpenMPI,被实现为围绕实际编译器的 shell 脚本包装器。同样,无论用户使用什么 shell 作为他们的登录 shell,执行此操作的程序都可以正常工作。另一方面,为 eg 编写的 shell 脚本在由另一个 shell 执行时
zsh
将无法可靠地工作。这应该不足为奇,因为用另一个解释器替换任何脚本的解释器很可能会破坏该脚本(例如,使用 Ruby 解释器运行 Perl 脚本很可能会失败)。