在启动Linux系统时,用户通常会看到一连串的系统信息,这些信息来自于系统的各个启动过程。实际上,Linux的启动流程并不像很多人想象的那样复杂。它大致可以分为五个主要阶段:
加载内核
执行init进程
系统初始化
启动终端
用户登录
init进程的不同类型:
SysV(init):这种类型在CentOS 5及之前版本中使用,配置文件通常位于/etc/inittab。
Upstart(init):这种类型在CentOS 6中使用,配置文件包括/etc/inittab和/etc/init/.conf。
Systemd(systemd):自CentOS 7开始使用,配置文件路径为/usr/lib/systemd/system和/etc/systemd/system。
当计算机开机后,首先进行的是BIOS自检,接着根据BIOS设置的启动顺序(通常是硬盘)加载操作系统。
操作系统接管硬件控制后,它首先会读取/boot目录下的内核文件,将内核载入内存。
init进程的作用与启动
init进程是Linux系统中所有其他进程的祖先,所有进程都是由init启动的。如果没有init进程,其他任何进程都无法启动。init进程首先会读取/etc/inittab配置文件,以此来决定接下来启动哪些程序。
Linux系统需要开机启动许多程序,这些程序在Windows系统中被称作“服务”,在Linux中则称为“守护进程”。init进程的一个主要任务就是根据配置启动这些守护进程。
需要注意的是,不同的使用场景需要启动不同的程序。例如,当Linux系统用于服务器时,可能会需要启动Apache等服务,而在桌面环境中则不需要。Linux通过“运行级别”(runlevel)来管理这些程序。根据不同的运行级别,系统会决定启动哪些守护进程。
Linux系统共有七个运行级别:
运行级别0:系统停机状态,不能设为默认运行级别,否则系统无法正常启动。
运行级别1:单用户模式,仅允许root用户登录,用于系统维护,禁止远程登录。
运行级别2:多用户模式,不支持NFS。
运行级别3:完全多用户模式,支持NFS,登录后进入命令行模式。
运行级别4:保留状态,未被使用。
运行级别5:多用户模式,支持图形界面,进入X11控制台。
运行级别6:系统重启,不能设为默认运行级别,否则系统无法启动。
在init的配置文件中,有一行指定了要调用/etc/rc.d/rc.sysinit脚本,rc.sysinit是一个bash脚本,负责完成系统初始化任务。这个脚本会激活交换分区、检查磁盘、加载硬件驱动模块等操作。每个运行级别都会首先执行这个初始化脚本。
此后,rc.d/rc脚本会根据运行级别执行相应目录下的启动脚本。例如,如果运行级别为5,/etc/rc.d/rc会执行/etc/rc.d/rc5.d/目录下的所有启动脚本。实际上,这些脚本是符号链接,指向/etc/rc.d/init.d/目录中的真实脚本。这些启动脚本能够接受如start、stop、restart、status等参数,用以控务的启动与停止。
当rc脚本执行完成后,系统基本的环境设置和守护进程就已经启动。init进程会继续打开6个虚拟终端,等待用户登录。
虚拟终端的启动与用户登录
init会配置6个虚拟终端,使得用户可以通过这些终端进行登录。这些终端的设置在/etc/inittab文件中,通过mingetty程序来创建终端并设置登录界面。具体来说,在运行级别2、3、4、5中,mingetty会以respawn的方式不断运行,确保系统中始终有可用的终端供用户登录。
当你看到文本登录界面时,实际上是mingetty程序的输出,用户在此界面输入用户名后,系统会调用login程序验证用户名和密码。
Linux的账户验证由login程序处理。它首先检查用户输入的用户名。如果用户名存在且不是root,并且/etc/nologin文件存在,login会显示该文件内容并终止登录,通常这种情况发生在系统维护期间,用于阻止非root用户登录。只有在/etc/securetty文件中列出的终端上,root用户才被允许登录。
终端切换与图形界面
在默认情况下,Linux提供了六个命令行终端窗口,分别是tty1、tty2、tty3、tty4、tty5和tty6。你可以通过按下Ctrl+Alt+F1到F6键在这些终端之间切换。如果你安装了图形界面,系统启动时通常会进入图形化界面,此时你仍然可以通过Ctrl+Alt+F1到F6进入命令行终端。
如果你需要返回到图形界面,可以按下Ctrl+Alt+F7。对于使用VMware虚拟机的用户,命令行终端切换的快捷键为Alt+Space+F1到F6,而从图形界面切换到命令行界面的快捷键是Alt+Shift+Ctrl+F1到F6。
关机与重启
在Linux环境中,服务器通常不需要频繁关机,除非进行硬件维护或系统升级。关闭系统的正确流程通常是:sync > shutdown > reboot > halt。
关机命令是shutdown,你可以通过man shutdown查看详细的帮助文档。常见的关机命令示例包括:shutdown -h now、halt和poweroff,而重启系统则可以通过shutdown -r now或reboot命令实现。
不论是关机还是重启系统,首要任务是先使用sync命令,将内存中的数据保存到磁盘,确保数据的完整性。