当我们安装完ubunut的时候,在ubuntu的启动页面上,我们会看到很多的启动信息。这些启动信息,就展示了系统是通过读取哪些文件来启动的。

大致来说,系统的启动到用户的使用,过程可以分为四个阶段:

ubuntu 命令启动android studio ubuntu20.4启动过程_运行级别

 内核的加载

当计算机打开电源之后,计算机的主板BIOS程序开始开机自检,并按照BIOS中设置的启动设备(通常是硬盘)来启动。读取对应启动设备 /boot 目录下的内核文件。

ubuntu 命令启动android studio ubuntu20.4启动过程_ubuntu_02

以我的虚拟机为例,/boot 目录下面有这样一些文件:

有兴趣深入了解该目录下文件的,可以参看以下文章:

/boot目录下的文件解释

运行init进程

当系统内核加载完成后,就会启动系统的1号进程 init ,init 进程根据当前系统设置的运行级别,去启动相应的程序。

运行级别:系统的启动的时候,会根据设置的默认运行级别,来启动该运行级别下需要系统的程序,不同的运行级别,会对应不同的程序清单,init 进程会将程序按照顺序启动起来。

我们在虚拟机中运行起来的ubunut现在的运行级别是5,可以使用runlevel命令查看,运行级别5是提供了一个GUI图形模式的,所以才会有我们看到的系统操作桌面:

ubuntu 命令启动android studio ubuntu20.4启动过程_重启_03

Linux预置七种运行级别介绍如下(0-6)。

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

运行级别2:多用户状态(没有NFS)

运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

运行级别4:系统未使用,保留

运行级别5:X11控制台,登陆后进入图形GUI模式

运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

所有的运行级别启动程序的清单,是保存在系统配置中的,以ubuntu为例,/etc 目录下面有六个文件,这六个文件就保存了各个运行级别程序启动的清单,rc是run command(运行程序),最后的d表示directory(目录):

ubuntu 命令启动android studio ubuntu20.4启动过程_ubuntu_04

以rc5.d为例,以下就是他的程序启动清单:

ubuntu 命令启动android studio ubuntu20.4启动过程_linux_05

 我们可以看到清单中的每一个名称都是由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