一、物理直连登陆过程
初始化进程init
会根据直接连接的字符终端设备,打开getty程序,并关联在字符终端设备上tty1/2/3/4/5/6/7....上,在不同的终端设备上提示用户输入信息,等待终端登陆
getty打开login 进程,0-1-2文件描述符关联到tty1上
login会读取用户信息,查询出登陆shell
登陆成功,启动shell,开始读取shell启动文件 /etc/profile ~/profile /etc/bashrc ~/.bashrc
我们可以修改这些启动文件,添加自己的环境变量和修改PATH
shell启动后,默认有0、1、2文件描述符,关联到字符终端设备tty1/2/3/4/...上
默认环境变量:USERNAME,LOGINNAME,....
二、网络连接登陆
网络登陆时,init进程无法确切知道谁要来连接,只能等待网卡驱动传来的连接,并启动login进行登陆。
当有网络登陆请求到达时,远程登陆服务(telnet/sshd)会启动gettty,并关联pts/0.1...系统伪终端到gettty。
远程登陆服务sshd会关联到这个pts伪终端进行读取和写入。gettty会启动login进程并关联到pts伪终端,sshd接受客户端的输入写入pts伪终端进行登陆。
登陆成功后,启动shell也会关联 到这个伪终端设备,远程客户端就是通过发送指令到sshd,sshd再读写pts进行与服务主机的系统通信