从按下电源键到看到熟悉的登录提示,CentOS系统经历了一个复杂而有序的启动过程,这个过程的终点,也就是用户与系统交互的第一个入口——login
界面,是整个系统初始化工作的最终体现,它不仅是身份验证的关口,更是系统服务、内核模块和硬件资源全部就绪的标志,理解这一界面及其背后的机制,对于系统管理和故障排查至关重要。
启动流程的漫长旅途
在login
提示出现之前,CentOS已经完成了一系列底层工作,这个过程可以大致分为几个关键阶段。
BIOS/UEFI初始化,当计算机通电后,主板上的固件(BIOS或更现代的UEFI)会首先进行自检(POST),检测CPU、内存、显卡等关键硬件是否存在并正常工作,随后,它会根据预设的启动顺序,寻找引导设备,如硬盘、SSD或USB驱动器。
接下来是引导加载程序(GRUB2)的工作,BIOS/UEFI将控制权交给硬盘主引导记录(MBR)或GUID分区表(GPT)中的GRUB2(GRand Unified Bootloader version 2),GRUB2的主要任务是加载Linux内核(vmlinuz
)和一个初始内存盘(initramfs
)到内存中,它还会显示一个菜单,允许用户选择不同的内核版本或启动选项,这在系统调试或多系统环境中非常有用。
随后,Linux内核开始运行,内核解压并初始化自身,探测并驱动系统中的各种硬件设备,如硬盘控制器、网络接口、USB设备等,它挂载initramfs
作为一个临时的根文件系统。initramfs
包含了启动真实根文件系统所必需的驱动程序和工具,例如LVM、RAID或文件系统驱动(如XFS、ext4)。
当内核准备好访问真实的根文件系统后,它会执行initramfs
中的/init
脚本,该脚本会切换根目录(switch_root
)到硬盘上的真实根文件系统,并启动系统中第一个真正意义上的进程——systemd。
systemd:现代系统的核心调度者
在CentOS 7及以后的版本中,systemd
取代了传统的SysVinit
,成为系统的初始化和服务管理器。systemd
采用并行化启动方式,极大地加快了系统启动速度,它会根据systemd
单元(Unit)文件来管理系统的各种资源,包括服务(.service
)、挂载点(.mount
)、设备(.device
)和目标(.target
)。
target
是systemd
中的一个重要概念,它类似于旧的运行级别(runlevel),定义了系统的一种状态,多用户模式”或“图形界面模式”。systemd
会启动默认target
所依赖的所有服务,最终将系统带入一个可用的状态,而login
界面的出现,正是由特定target
下的服务所触发的。
登录界面的两种形态
CentOS的login
界面主要分为两种:字符界面和图形界面,它们由不同的服务负责,适用于不同的应用场景。
字符界面登录
这是最传统、最简洁的登录方式,在服务器环境或需要最小资源占用的场景下非常普遍,当系统启动到multi-user.target
(相当于运行级别3)时,systemd
会在几个虚拟终端(TTY)上启动agetty
或getty
服务(通常为getty@.service
)。
getty
服务的作用是:
- 监听指定的TTY设备(如tty1, tty2)。
- 显示
/etc/issue
文件中定义的系统信息(如CentOS版本、内核版本、主机名等)。 - 输出经典的登录提示:
CentOS Linux 8 (Core) Kernel 5.4.x on an x86_64 hostname login:
- 等待用户输入用户名,并启动
/bin/login
程序进行密码验证。
验证成功后,系统会为用户启动一个Shell(通常是Bash),用户便可以通过命令行与系统交互。
图形界面登录
对于桌面用户,图形化登录提供了更友好的体验,当系统启动到graphical.target
(相当于运行级别5)时,除了启动multi-user.target
下的所有服务外,还会额外启动一个显示管理器(Display Manager),在默认的GNOME桌面环境中,这个管理器是GDM(GNOME Display Manager)。
GDM的功能远比getty
复杂:
- 它管理X.Org Server或Wayland compositor,负责整个图形桌面的显示。
- 提供一个美观的图形登录界面,允许用户选择用户、输入密码,甚至选择不同的桌面会话(如GNOME、GNOME Classic等)。
- 处理用户身份验证,验证成功后,启动用户选择的桌面环境和会话。
下表小编总结了两种登录界面的主要区别:
特性 | 字符界面登录 | 图形界面登录 |
---|---|---|
负责服务 | getty@.service | gdm.service (或其他Display Manager) |
系统目标 | multi-user.target | graphical.target |
资源占用 | 极低 | 较高 |
交互方式 | 命令行 | 图形用户界面 (GUI) |
适用场景 | 服务器、嵌入式系统、开发调试 | 桌面工作站、个人计算机 |
登录之后:用户环境的构建
无论通过哪种方式登录,一旦身份验证通过,系统都会为用户构建一个专属的运行环境,这个过程包括:
- 身份验证:
login
程序或GDM会查询/etc/passwd
获取用户信息(如UID、主目录、默认Shell),并查询/etc/shadow
来验证用户输入的密码。 - 启动Shell:系统会为用户启动其默认的Shell程序。
- 加载配置文件:Shell会依次读取一系列配置文件来设置环境变量、别名、路径等,对于Bash Shell,登录时会读取
/etc/profile
、~/.bash_profile
、~/.bash_login
和~/.profile
。
至此,一个完整的用户会话便开始了,用户可以自由地执行命令或运行图形应用程序。
相关问答FAQs
问题1:我的CentOS服务器启动后直接进入了字符界面,如何让它默认启动到图形界面?
解答: 这是因为系统的默认启动目标被设置为了multi-user.target
,您可以通过以下命令将其更改为graphical.target
,使用systemctl get-default
命令查看当前默认目标,执行sudo systemctl set-default graphical.target
来设置新的默认目标,下次重启系统时,它将自动进入图形登录界面,如果想在当前会话中立即切换,可以使用sudo systemctl isolate graphical.target
命令。
问题2:我忘记了CentOS的root密码,如何通过单用户模式重置?
解答: 重置root密码需要重启系统并进入单用户模式,具体步骤如下:
- 重启服务器,在GRUB2引导菜单出现时,按
e
键编辑选中的内核启动项。 - 使用方向键找到以
linux
或linux16
或linuxefi
开头的那一行。 - 在该行的末尾,添加
init=/bin/bash
或rd.break
,推荐使用rd.break
,因为它更安全。 - 按
Ctrl+x
组合键启动系统,系统将进入一个临时的紧急Shell。 - 如果使用
rd.break
,根文件系统会以只读方式挂载在/sysroot
,需要重新挂载为可读写:mount -o remount,rw /sysroot
。 - 使用
chroot /sysroot
命令将根环境切换到原系统的根目录。 - 执行
passwd root
命令,根据提示输入新的root密码。 - 由于SELinux上下文可能发生变化,需要执行
touch /.autorelabel
来让系统在下次重启时自动重新标记文件。 - 输入
exit
退出chroot环境,再输入reboot
重启系统,系统重启时会进行文件重新标记,之后您就可以用新密码登录了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复