Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 系统启动与关闭详解(11)

Ubuntu 22.04 系统启动与关闭详解

1 Ubuntu 的启动过程

1.1 BIOS 阶段

计算机加电后,BIOS (基本输入输出系统)首先进行硬件自检(POST),检测CPU、内存、磁盘等关键硬件。随后BIOS根据预设的启动顺序 (如U盘、硬盘、网络)查找可启动设备,并加载该设备首个扇区的主引导记录(MBR)到内存执行。

案例代码:查看BIOS启动顺序(需进入BIOS界面,无直接命令,但可通过系统日志验证):

复制代码
# 查看系统最后一次启动时间,间接验证BIOS阶段完成时间
who -b
# 输出示例:system boot  2025-11-29 09:00

1.2 引导程序阶段(GRUB)

MBR中的代码加载GRUB (GRand Unified Bootloader)引导程序。GRUB的配置文件位于 /boot/grub/grub.cfg(自动生成,不可直接修改),其模板文件为 /etc/default/grub。GRUB提供菜单供用户选择内核版本,并加载对应的内核镜像(vmlinuz)和初始内存盘(initrd)到内存。

案例代码:修改GRUB配置(如将默认启动项改为Windows):

复制代码
# 1. 编辑GRUB配置模板
sudo nano /etc/default/grub
# 修改以下参数(示例:将默认启动项设为第2个菜单项,即Windows)
GRUB_DEFAULT=2  # 0表示首个菜单项,1表示第二个,以此类推
GRUB_TIMEOUT=10 # 菜单显示时间(秒),0表示直接启动默认项

# 2. 更新配置以生成grub.cfg
sudo update-grub
# 输出示例:Found linux image: /boot/vmlinuz-5.15.0-60-generic

注释

  • GRUB_DEFAULT可设为数字(菜单项索引)或菜单标题(如 "Windows Boot Manager")。
  • 若系统为双系统,Windows菜单项通常索引为2(Ubuntu为0,高级选项为1)。

1.3 内核阶段

内核被加载后,初始化硬件设备,并挂载根文件系统。随后启动init进程 (PID 1),该进程是所有系统进程的父进程。在Ubuntu 22.04中,init进程通常为systemd,它接管后续启动流程。

案例代码:查看当前内核版本和运行进程:

复制代码
# 查看内核版本
uname -sr
# 输出示例:Linux 5.15.0-60-generic

# 检查init进程(应为systemd)
ps -p 1 -o comm=
# 输出示例:systemd

1.4 进入系统:运行级别与目标

systemd通过目标(target)管理系统状态,类似传统运行级别。常见目标包括:

  • graphical.target:多用户图形界面(对应运行级别5)

  • multi-user.target:多用户命令行界面(运行级别3)

  • rescue.target:救援模式(运行级别1)

  • poweroff.target:关机(运行级别0) 案例代码:查看和切换目标:

    查看当前目标

    systemctl get-default

    输出示例:graphical.target

    切换到命令行模式

    sudo systemctl isolate multi-user.target

    设置默认启动到命令行

    sudo systemctl set-default multi-user.target

注释 :传统运行级别可通过 init命令切换(如 init 3进入命令行模式),但建议使用systemd目标。

2 引导相关组件

2.1 主引导记录(MBR)

MBR是磁盘首个扇区(512字节),包含:

  • 引导代码(446字节):加载GRUB核心代码。

  • 分区表(64字节):记录磁盘分区信息。

  • 魔数(2字节):标识有效性。 若MBR损坏,系统无法启动。可通过Live USB修复:

    使用Live USB启动后,重装GRUB到磁盘(示例:磁盘为/dev/sda)

    sudo grub-install /dev/sda
    sudo update-grub

2.2 GRUB启动程序

GRUB配置文件详解(/etc/default/grub部分参数):

复制代码
GRUB_TIMEOUT_STYLE=menu     # 显示菜单(hidden表示隐藏)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"  # 内核参数:安静启动+图形动画
GRUB_DISABLE_OS_PROBER=false  # 允许探测其他系统(用于双系统)

案例代码:在GRUB菜单中临时修改启动参数(用于修复启动问题):

  1. 启动时按Shift键显示GRUB菜单,选择Ubuntu项后按 e键。
  2. 找到 linux行,删除 quiet splash,添加 single(单用户模式)。
  3. 按Ctrl+X启动,进入救援模式后重置密码或修复配置。

3 登录过程

3.1 login进程

系统启动完成后,login进程提示用户登录。在图形界面中,由显示管理器(如GDM)提供登录窗口;在命令行界面中,直接提示输入用户名和密码。

3.2 选择Shell

用户登录后,系统根据 /etc/passwd中配置的Shell启动对应解释器(如bash)。

案例代码:查看和更改用户Shell:

复制代码
# 查看当前Shell
echo $SHELL
# 输出示例:/bin/bash

# 更改默认Shell为zsh(需已安装)
chsh -s /bin/zsh

3.3 用户初始化文件

登录后自动执行初始化脚本:

  • 全局配置:/etc/profile/etc/bash.bashrc

  • 用户个性化配置:~/.bashrc~/.profile 案例代码 :在 ~/.bashrc中添加自定义别名:

    编辑用户bashrc

    nano ~/.bashrc

    添加以下行(示例:创建快捷别名)

    alias ll='ls -alF' # ll命令显示详细文件列表
    alias update='sudo apt update && sudo apt upgrade' # 一键更新系统

    重新加载配置

    source ~/.bashrc

4 关闭系统

4.1 shutdown命令

语法shutdown [选项] [时间] [消息]

常用选项

  • -h--poweroff:关机(默认)

  • -r:重启

  • -c:取消计划中的关机

  • -k:仅发送警告消息,不实际关机 案例代码

    立即关机

    sudo shutdown -h now

    10分钟后关机,并通知用户

    sudo shutdown -h +10 "系统将于10分钟后维护关机,请保存工作!"

    定时关机(今晚20:30)

    sudo shutdown -h 20:30

    取消关机计划

    shutdown -c

注释

  • 使用 -k选项可模拟关机(如 shutdown -k +5 "测试警告")向所有用户发送消息但不执行关机。
  • 生产环境中务必提前发送消息,避免数据丢失。

4.2 init命令

通过切换运行级别关机或重启(兼容Systemd):

复制代码
# 关机(运行级别0)
sudo init 0

# 重启(运行级别6)
sudo init 6

# 进入单用户维护模式(运行级别1)
sudo init 1

4.3 其他命令

  • halt:立即停止系统(不断电源)

  • poweroff:立即关机并断电源

  • reboot :立即重启 案例代码

    强制关机(不推荐,可能丢失数据)

    sudo poweroff

    安全重启(推荐)

    sudo reboot

    使用sync确保数据写入磁盘后重启

    sync && sudo reboot

重要提醒 :关机前建议手动运行 sync将内存数据写入磁盘,防止数据丢失。

关键配置文件与日志

  • 启动日志journalctl -b(查看本次启动日志)或 last reboot(重启历史)。
  • 关机记录last shutdown(需systemd-logind支持)。
  • 运行级别who -r查看当前级别。

以上知识点覆盖了Ubuntu 22.04启动关闭的核心流程,结合代码示例可帮助理解操作细节。实际操作时需注意权限问题(如使用sudo),生产环境谨慎执行关机命令。

相关推荐
对方正在长头发丿2 小时前
Numpy学习篇
python·学习·jupyter·pycharm·numpy
machunlin~2 小时前
centos 系统安装相关
linux·运维·docker·centos
hweiyu002 小时前
Linux 命令:bzip2
linux·运维·服务器
小代码20162 小时前
ubuntu vscode docker php 环境搭建
vscode·ubuntu·docker·php·laravel
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 37--测试报告 Allure 前置步骤-配置安装 JDK 详细图文教程
java·开发语言·学习·测试工具
紫小米2 小时前
Qwen微调医疗模型(学习笔记)
笔记·学习
小明和大树2 小时前
JAVA 学习笔记 三
java·笔记·学习
爱吃生蚝的于勒2 小时前
【Linux】深入理解软硬链接
linux·运维·服务器·c语言·数据结构·c++·算法
糕......2 小时前
Java IO流:数据传输的艺术与机制
java·开发语言·网络·学习