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