是否存在登录脚本不是 shell 一部分的 Linux 系统?

是否存在登录脚本不是 shell 一部分的 Linux 系统?

我提出以下问题是为了了解常识并更好地理解现代 Linux 架构。这个问题的背景是本次会议

我假设如果删除所有 shell,例如(rbash、bash、dash 和 sh),它仍然可以有一些原始/基本的 CLUI(命令行用户界面)用于一些非常简单的任务并与内核交互一个最小的方式。当然,对于现代Linux系统一般来说,我错了,因为控制台只会由 shell 中的登录脚本启动,因此删除所有 shell 也会删除该登录脚本。

但是,如果我们将该登录脚本移到 shell 之外,并使其成为内核的一部分,会怎么样?那么我们仍然可以使用一些原始/基本的控制台吗?

答案1

从根本上来说,shell 下面是一个 TTY。尽管它并不构成所谓的 CLUI。终端接口(文本输入和输出)在 TTY 中实现,而命令处理则由 shell 处理。

在 DOS 中,这更像是批处理命令处理器提示 .bat(ch) 文件。而在 Linux 中,shell 是一种小型编程语言,其中还包括内置的控制结构。

该“登录”脚本实际上是 init 程序,它在加载其 VFS 后由内核自动加载(init 可以合并到 initram 中或等到硬文件系统可访问),并且在加载 ttys 之前运行。事实上,init 程序必须设置 TTY,然后加载服务。 sysvinit 加载解释器 shell,然后使用 init 脚本,而 systemd 使用 INI(类似于它称为单元的配置文件)。在启动过程或登录过程中实际上根本不需要 shell 脚本,但 exec 需要。

TTY 内置于内核中,但无法与用户交互。诸如登录之类的多个命令通过 TTY 与用户交互,但从技术上讲它们并不是命令处理器或 shell。还存在其他基本示例,例如路由器上的重置按钮从技术上讲是与系统交互的最小方式。但是任何附加到 TTY 的程序都可以从 TTY 获取标准输入和输出并处理命令。

忽略您确实需要一个 shell 来与系统进行有意义的交互这一事实,与内核交互的最基本方式是通过系统调用,而传递消息的最基本方式是 exec,这就是传递命令参数的方式。

相关内容