一、Linux初始化init系统
Linux操作系统的启动首先从BIOS开始,接下来Linux引导程序将内核映像加载到内存,进行内核初始化,内核初始化的最后一步就是启动PID为1的init进程。
init系统就是一个能够定义、管理和控制init进程的行为,并负责组织和运行许多独立的或相关的初始化工作,从而让系统进入一个用户设定的运行模式中的系统。
大多数Linux发行版的init系统是和System V相兼容的,因此称为sysvinit。在CentOS7.x发行版本之前的系统中都采用sysvinit。为了能更快的启动系统,开发者进行不断改进,先后出现了upstart和systemd两个主要的init系统。
二、runlevel到target的改变
sysvinit用术语“runlevel”来定义系统运行级别。在CentOS7.x版本之前的系统中,通常有7种运行级别,这些运行级别均在/etc/inittab文件中指定,sysvinit程序通过检查/etc/inittab文件中是否含有“initdefault”项来启动一个默认的运行级别。
0:表示关机模式
1:表示单用户模式,单用户模式下只有系统管理员可以登录
2:表示多用户模式,不支持文件共享
3:表示完全的多用户模式,支持NFS服务,默认登录到字符界面
4:表示基本不用的用户模式,可以实现某些特定的登录请求
5:表示完全多用户模式,默认登录到图形界面
6:表示重启模式
这些运行级别和Linux中的init程序相互对应
在CentOS7.x版本中,由于采用了systemd管理体系,因此以前运行级别的概念被新的运行目标所取代。在新的systemd管理体系里,默认的target通过软链接来实现
要查看运行级别与target的对应关系,可以通过命令查看
[root@localhost ~]# ll /lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 3月 6 04:00 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 3月 6 04:00 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 3月 6 04:00 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 3月 6 04:00 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 3月 6 04:00 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 3月 6 04:00 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 3月 6 04:00 /lib/systemd/system/runlevel6.target -> reboot.target
有5种target模式。poweroff.target对应runlevel0,表示关机模式;rescue.target对应runlevel1,表示单用户模式或救援模式;multi-user.target对应runlevel2、runlevel3、runlevel4,表示多用户模式;graphical.target对应runlevel5,表示图形界面多用户模式;reboot.target对应runlevel6,表示重启系统模式
三、系统关机过程
1、shutdown命令
shutdown命令是用shell编写的程序,必须由超级用户才能执行。shutdown命令执行后,会以广播的形式通知正在系统中工作的所有用户,系统将在指定时间内关闭。此时login指令被冻结,新的用户不能登录。当所有用户从系统中注销或者指定时间已到时,shutdown就发送信号给init程序,要求init程序改变系统运行级别。接着init程序根据shutdown指令传递的参数,相应的改变运行级别
(1)详细语法
shutdown [-fFhknrc(参数名称)] [-t 秒数] 时间 [警告信息]
各参数含义如下:
-f:重新启动时不执行fsck
-F:重新启动时执行fsck
-h:将系统关机
-n:不调用init程序关机,而是由shutdown自己进行
-r:shutdown之后重新启动系统
-c:取消前一个shutdown命令
-t<秒数>:发送警告信息和关机信号之间要延迟多少秒
[时间]:设置多久时间后执行shutdown命令。参数有hh:mm或+m两种模式。now表示立即执行
[警告信息]:要传送给所有登录用户的信息
(2)应用举例
立即关机重启
shutdown -r now
立即关机
shutdown -h now
设定5分钟后关机,同时发送警告信息给登录的用户
shutdown +5 "系统将在5分钟后关机"
2、halt命令
将终止所有应用程序,然后调用系统指令sync。sync将所有内存信息通过文件系统写入硬盘,然后停止内核
语法格式
halt [-finp]
halt指令在执行时,会首先检测系统的运行级别,如果运行级别为0或6,则立即关闭系统,否则调用shutdown来关闭系统
参数含义
[-f]:不管当前系统出于何种运行级别,都不调用shutdown而强制关机
[-i]:关机之前,关掉所有的网络接口
[-n]:halt执行时,不调用系统指令sync
[-p]:关机时调用poweroff
3、reboot命令
reboot命令的执行过程与halt基本类似,不同的是halt用于关机,而reboot用于关机后系统重启
4、init命令
init程序主要用于系统不同运行级别之间的切换,切换的工作是立即完成的