10.1. 通过终端登录

第 2.3.2 节 展示了如何通过终端登录。首先,init 确保终端连接(或控制台)有一个 getty 程序。getty 监听终端并等待用户通知他已准备好登录(这通常意味着用户必须输入一些内容)。当它注意到用户时,getty 输出欢迎消息(存储在/etc/issue),并提示输入用户名,最后运行 login 程序。login 将用户名作为参数,并提示用户输入密码。如果用户名和密码匹配,login 启动为用户配置的 shell;否则它会退出并终止进程(可能在给用户另一次输入用户名和密码的机会之后)。init 注意到进程已终止,并为终端启动一个新的 getty

图 10-1。通过终端登录:initgettylogin 和 shell 之间的交互。

请注意,唯一的新进程是由 init 创建的(使用fork系统调用);gettylogin 仅替换进程中运行的程序(使用exec系统调用)。

对于串行线路,需要一个单独的程序来注意用户,因为当终端变为活动状态时,注意到这一点可能很复杂(并且传统上是这样)。getty 还可以适应连接的速度和其他设置,这对于拨号连接尤其重要,在拨号连接中,这些参数可能会因呼叫而异。

目前正在使用几个版本的 gettyinit,它们各有优缺点。最好了解您系统上的版本以及其他版本(您可以使用 Linux 软件地图来搜索它们)。如果您没有拨号连接,您可能不必担心 getty,但 init 仍然很重要。