• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Linux系统启动过程详解(四)

系统管理 彭东稳 9年前 (2015-09-07) 37113次浏览 已收录 0个评论

终端类型

consolePTY物理终端是一个直接连进主机的显示和键盘

UNIX出现时,这是一个多用户、多任务的分时操作系统。当时能够运行UNIX的电脑都很贵,人们在使用的时候都是使用一个廉价的设备连接到这台电脑上共享使用的。UNIX会让使用者以为这个连接设备就是那台昂贵的电脑。这个廉价设备被称为物理终端。

tty:虚拟控制台通常是结合物理控制台通过软件模拟实现的给用户登录的

Linux是一种类UNIX系统,它很自然地继承了UNIX通过终端来使用的特质。但是Linux诞生的年代,电脑已经很便宜了。便宜到比当年的终端还便宜。显然Linux不会在使用物理终端了。但是没有终端又不像UNIX。怎么办呢?假装,假装键盘就是终端的输入,假装显示器就是终端的输出。并命名为虚拟终端。自从Linux有了虚拟终端,原来需要从终端获取的输入,键盘就搞定了;原来需要终端展现的输出,显示器就搞定了。早期的UNIX程序全都能移植过来了。而且Linux为了充分展现这个假的一点都不差,一下假装了很多个。所以你就发现可以通过Ctrl+Alt+F[1-6]组合键切换控制台。切换控制台就是再切换虚拟终端。

Linux上,键盘的输入和屏幕的输出都是通过虚拟终端来完成的。一个虚拟终端被看作是一个设备。在/dev目录下可以查看到这些设备所映射到的文件。所有以tty[0-9]*方式命名的文件就代表着虚拟终端。比如你在文本界面控制台直接登录系统,那么你当前使用的虚拟终端对应的设备应该是/dev/tty1。使用Ctrl+Alt+F[1-6]组合键所切换的虚拟终端会分别于功能键对应。

pts:伪终端

当你通过SSHtelnet远程连接到服务器时,你本地所显示的字符界面都是所谓的为终端。显示为/dev/pts目录下。Linux系统对伪终端的控制是比较随意的,init也不去管他们。那怎么保障安全呢?让每个通过网络登录的用户都必须输入用户名和密码。这个是交给普通程序来处理的。比如使用ssh登录,那么相应的ssh服务器程序——-sshd要负责向系统申请伪终端资源,并要求用户输入用户名和密码。所以如果SSH不安全,使用sshdLinux系统也就不安全。幸好sshd的表现还不错。它的哥哥telnet就没有那么幸运,由于安全性的问题基本上快要退出历史舞台了。

getty命令

根据Linux需要虚拟终端来处理绝大多数程序的输入输出这一事实,init在完成系统的初始化之后,就必然要开启虚拟终端。回到inittab文件,其中就有关于这方面的设定。如:

mingetty命令是getty命令的一个变种。getty命令的变种还有好多,最常见的有agettymingettyfbgettyfgettyrungetty。有这些变种的出现就是因为getty命令本身非常复杂,而且伸缩能力有限。如果直接使用gettyLinux系统要提供图形用户界面就有可能遇到麻烦,比如程序无故退出、X server死锁等问题。这些变种都很好地解决了这些问题。同时也简化了使用上的复杂度。就比如mingetty命令。只需要给定参数是tty1就能启动tty1代表的虚拟终端。

getty系列命令不只是开启虚拟终端,它要干的一个比较重要的事情是调用login程序。login程序比较简单,就是问你要用户名和密码。你输入正确的用户名和密码后,就可以开始使用Linux了。

inittab文件的例子中可以看到,mingetty命令被respawn所修饰,这表明init会坚守着它不会被kill掉。所以不管你采用何种方式,都无法越过输入用户名和渺茫的这道关卡。也正因为这个原因,才将getty系列命令交给init直接调用,而不是让rc脚本去处理它。

细心的人会发现,当登入Linux系统后,使用ps aux,甚至pstree命令都是找不到与所使用虚拟终端对应的mingetty的踪影。这是为什么呢?原来getty系列命令在启动login程序时,是与login融为一体被login取代了。即使用相同的进程号。那么init并不会认为getty已经退出了。而使用ps等命令查看进程时,看到的大多是程序本身的名字。所以能够看到login,却看不到getty。当killlogin后,就会被init发现,重新将getty启动,让你输入用户名和密码。虽然我们看不到getty,但是这一切都是getty在起作用。

Display Manager

DMdisplay manager)称为显示管理器,用途就是提供图形界面的登陆窗口。当前有好多种DM。比如:GNOMEGDMKDEKDM、独立的LightDM等。每种DM都有自己的特性,自然也就会得到不同人群的喜好。所以大多数Linux发行版会提供多种DM供用户选择。也正因为如此,在inittab中往往是指定一个脚本来调用DM们。

图形界面也要使用虚拟终端的。不过它一般不与文本界面争虚拟终端的资源。大多数Linux发行版静tty7分配给图形界面。这样也就使得即使开启了图形界面登陆,也可以通过Ctrl+Alt+F[1-6]来切换到文本界面,保持整体风格的一致。要切换回图形界面就按Ctrl+Alt+F7即可。图形界面使用哪一个虚拟终端,由DM说了算。只是大多数DM不像getty那些变种那么简单。规定它使用哪个虚拟终端一般需要用配置文件来指定。DMgetty相同的地方就是都被initrespawn了。这样谁都杀不死它,所以也就不恩呢该跳过输入用户名和密码的关卡。而且在登陆之后,DM也与Getty一样,消失了。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!