当我们安装完ubunut的时候,在ubuntu的启动页面上,我们会看到很多的启动信息。这些启动信息,就展示了系统是通过读取哪些文件来启动的。
大致来说,系统的启动到用户的使用,过程可以分为四个阶段:
内核的加载
当计算机打开电源之后,计算机的主板BIOS程序开始开机自检,并按照BIOS中设置的启动设备(通常是硬盘)来启动。读取对应启动设备 /boot 目录下的内核文件。
以我的虚拟机为例,/boot 目录下面有这样一些文件:
有兴趣深入了解该目录下文件的,可以参看以下文章:
/boot目录下的文件解释
运行init进程
当系统内核加载完成后,就会启动系统的1号进程 init ,init 进程根据当前系统设置的运行级别,去启动相应的程序。
运行级别:系统的启动的时候,会根据设置的默认运行级别,来启动该运行级别下需要系统的程序,不同的运行级别,会对应不同的程序清单,init 进程会将程序按照顺序启动起来。
我们在虚拟机中运行起来的ubunut现在的运行级别是5,可以使用runlevel命令查看,运行级别5是提供了一个GUI图形模式的,所以才会有我们看到的系统操作桌面:
Linux预置七种运行级别介绍如下(0-6)。
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
所有的运行级别启动程序的清单,是保存在系统配置中的,以ubuntu为例,/etc 目录下面有六个文件,这六个文件就保存了各个运行级别程序启动的清单,rc是run command(运行程序),最后的d表示directory(目录):
以rc5.d为例,以下就是他的程序启动清单:
我们可以看到清单中的每一个名称都是由S或者K开头的,S是start的意思,表示启动该程序,K是kill,表示从其他运行级别切换到当前运行级别时,需要关闭的程序。后面的数字,表示启动或关闭的顺序,init 在加载该运行级别程序清单中的这些程序的时候,会按照数字的大小来按顺序启动所有的程序,当所有程序都启动完成后。(后续还需要完善rc.d与/etc/init.d目录下文件的关系)
使用终端登录系统
用户的登录系统的方式有三种:
(1)命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码(Debian还会再多运行一个身份核对程序/etc/pam.d/login)。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。
(2)ssh登录:这时系统调用sshd程序(Debian还会再运行/etc/pam.d/ssh ),取代getty和login,然后启动shell。(这里分享一个特别好用的软件,功能强大,操作简单 https://mobaxterm.mobatek.net/)
(3)图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),然后用户输入用户名和密码。如果密码正确,就读取/etc/gdm3/Xsession,启动用户的会话。
系统关机
系统关机需要了解以下命令:
sync 将数据由内存同步到硬盘中。
shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
shutdown –h now 立马关机
shutdown –h 20:25 系统会在今天20:25关机
shutdown –h +10 十分钟后关机
shutdown –r now 系统立马重启
shutdown –r +10 系统十分钟后重启
reboot 就是重启,等同于 shutdown –r now
halt 关闭系统,等同于shutdown –h now 和 poweroff