【转】Linux 终端及终端登录过程简介

版权声明:本文为CSDN博主「li_zs」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qi184/article/details/12706141

Linux 终端及终端登录过程简介

shell是系统的用户界面,它提供了用户与内核交互的接口。它接收用户输入的命令并把它送入内核执行,再将执行结果显示给用户。

Linux终端使用基础:

显示器和键盘合称为终端,因为它们可以对系统进行控制,所以又称为控制台(物理控制台)。如果在一台计算机上用软件的方法实现了多个互不干扰、独立工作的控制台界面,就是实现了多个虚拟控制台。用户以文本方式登录的话,用户通过键盘输入命令,通过Linux终端对系统进行控制。通常情况下,Linux默认启动6个虚拟终端(tty1~6)。如果启动方式选择直接启动X Window,那么X Window在第7个虚拟终端上。

假设用户现在处于图形界面下,虚拟控制台的选择可以通过按下Ctrl+Alt键和功能键Fn(n=1~6)来实现。例如,用户登录后,按Ctrl+Alt+F2组合键,用户又可以看到“login:”提示符,此时看到的是第二个虚拟控制台。如果此时再按Alt+F1组合键,就可以回到第一个虚拟控制台。

虚拟控制台使得Linux成为一个真正的多用户操作系统。在不同的控制台上,可以同时接受多个用户登录,也允许一个用户进行多次登录。用户可以在某一个虚拟控制台上的工作尚未结束时,切换到另一虚拟控制台开始另一项工作。
在X Window图形操作界面中按Alt+Ctrl+Fn组合键(n=1~6)就可以进入控制台字符操作界面。这就意味着用户可以同时拥有X Window以及6个控制台操作界面,在控制台操作界面中按Alt+Ctrl+F7组合键即可回到刚才的X Window图形操作界面。也就是说,用Alt+Ctrl+Fn组合键即可实现字符界面与X Window界面的快速切换。

Linux终端登录简介:

  1. 当系统启动时,内核创建进程ID为1的进程也就是init进程,init进程使系统进入多用户状态。init进程根据配置文件/etc/inittab确定需要打开哪些终端,对每一个允许登录的终端设备,init调用一次fork,它所生成的子进程则执行getty(exec)程序。(不同操作系统配置文件可能不同)

  2. getty为终端设备调用open函数,以读写方式将终端打开。然后getty输出“longin:”之类的信息,并等待用户键入用户名。

  3. 当用户键入用户名后,getty工作完成。然后调用login程序:execle(“/bin/login”,”login”,”-p”,username,(char *)0,envp)

  4. 密码验证无误后,login将切换目录到用户的home目录,改变该终端设备的权限,login进程改变为登录用户ID并调用改用户的登录shell:execl(“/bin/sh”,”-sh”,(char *)0)

  5. 登录shell读取其启动文件(Bourne shell)和Korn shell。

从getty开始exec到login,再exec到bash,其实都是同一个进程,因此控制终端没变,文件描述符0、1、2也仍然指向控制终端。由于fork会复制PCB信息,所以由Shell启动的其它进程也都是如此。

你可能感兴趣的:(【转】Linux 终端及终端登录过程简介)