Linux 引导过程与服务控制
1 Linux 操作系统引导过程
系统引导是指操作系统运行的开始,在用户能够正常登录到系统之前,Linux 操作系统的引导过程将完成一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。
1.1 Linux操作系统引导过程总览
1.1.1 开机自检
- 检测出第一个能够引导系统的设备,比如硬盘或者光驱
- 服务器主机开机以后,将根据主板BIOS中的设置对CPU(Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
1.1.2 MBR引导
- 运行放在MBR扇区里的启动GRUB引导程序
- 当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如GRUB)。
1.1.3 GRUB菜单
- GRUB引导程序通过读取GRUB配置文件来获取内核和镜像文件系统的设置和路径位置
- 对于 Linux 操作系统来说,GRUB(GRandUnifiedBootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。
- 系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS 7 采用的是GRUB2 启动引导器。
1.1.4 加载Linux内核
- 把内核和镜像文件系统加载到内存中
- Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。
- 内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
1.1.5 init进程初始化
- 加载硬件驱动程序,内核把init进程加载到内存中运行
- 为了完成进一步的系统引导过程,Linux 内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。
1.2 系统初始化进程(init 进程)及文件
- Linux 操作系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。
- 在引导Linux 操作系统的过程中,**“/sbin/init”是内核第一个加载的程序,因此init 进程对应的PID号总是为1 **。
- init 进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程。反过来说,init 进程是这些进程的父进程。
- 当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。
- 从上述可以看出,init 进程是维持整个Linux操作系统运行的所有进程的“始祖”,因此init 进程是不允许被轻易终止的。
- 需要切换不同的系统运行状态时,可以向init进程发送正确的执行参数,由init 自身来完成相关操作。
1.3 MBR扇区故障
1.3.1 故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
1.3.2 故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
1.3.3 解决思路
- 应提前作好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
1.4 GRUB引导故障
1.4.1 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf文件丢失、引导配置有误
1.4.2 故障现象
- 系统引导停滞,显示“grub>”提示符
1.4.3 解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向 MBR 扇区中重建grub程序
1.5 修复GRUB引导故障
- 修复GRUB引导故障可以通过手动输入引导命令来完成
- 启动进入Live CD/USB
- 使用可启动的Ubuntu Live CD或USB启动计算机
- 选择 “Try Ubuntu” 而不是 “Install Ubuntu”
- 打开终端
- 在Live环境中打开终端
- 可以尝试通过按 Ctrl + Alt + T 快捷键来打开
- 挂载根文件系统
- 找到根分区并将其挂载到/mnt目录下(通常是sda1)
- sudo mount /dev/sdXn /mnt
- 绑定必要的文件系统
- 绑定/proc, /sys, 和/dev文件系统以便 chroot 环境可以正常工作
- sudo mount --bind /dev /mnt/dev
- sudo mount --bind /proc /mnt/proc
- sudo mount --bind /sys /mnt/sys
- 绑定/proc, /sys, 和/dev文件系统以便 chroot 环境可以正常工作
- chroot 到安装环境
- 使用chroot 命令切换到Ubuntu安装环境
- sudo chroot /mnt
- 重新安装GRUB
- 使用grub-install命令重新安装GRUB到MBR(主引导记录)
- grub-install /dev/sdX
- 替换sdX 为硬盘设备名,例如sda
- 更新GRUB配置
- 使用update-grub命令更新GRUB配置文件
- lupdate-grub
- 卸载之前挂载的所有文件系统
- sudo umount /mnt/dev
- sudo umount /mnt/proc
- sudo umount /mnt/sys
- sudo umount /mnt
- 重启系统
2 Linux系统备份
系统备份是指将计算机操作系统、应用程序和系统设置等重要信息复制并存储到其他存储介质中,以防止因系统故障、病毒攻击、硬件损坏或人为误操作等原因导致的数据丢失或系统无法正常运行。
2.1 备份系统
备份系统是一个重要的任务,可以在系统出现问题时恢复到之前的稳定状态。
2.1.1 备份方法
- 方法一:使用 tar 命令进行文件级备份
- 方法二:使用 dd 命令进行磁盘级备份
- 方法三:使用工具进行磁盘镜像备份
- 如 Clonezilla,Timeshift等
2.1.2 备份类型
- 系统备份:备份整个操作系统,包括系统文件、注册表、驱动程序等,以便在系统崩溃时能够快速恢复到备份时的状态。
- 数据备份:备份用户数据,如文档、图片、视频、数据库等,以防止数据丢失。
2.1.3 备份形式
- 完整备份:备份所有选定的数据,包括系统和用户数据。
- 增量备份:只备份自上次备份以来发生变化的数据。
- 差异备份:备份自上次完整备份以来发生变化的数据。
建议至少每周进行一次完整系统备份,用户数据根据重要性每日/每周备份
2.2 使用tar命令进行文件级备份
2.2.1 准备外部存储设备
插入一个足够大的外部硬盘或USB 设备来存储备份文件。
2.2.2 挂载外部存储设备
# 假设设备为/dev/sdb1
sudo mount /dev/sdb1 /mnt
2.2.3 创建备份目录
# 在外部存储设备上创建一个目录来存放备份文件
mkdir /mnt/backup
2.2.4 使用tar命令进行备份
# 使用 tar 命令备份整个根文件系统
# 排除不必要的目录,如/proc,/sys,/tmp,/run,/media,/lost+found等
sudo tar -cvpzf /mnt/backup/ubuntu_backup_$(date +%F).tar.gz \
--exclude=/mnt/backup \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/run \
--exclude=/media \
--exclude=/var/log \
--exclude=/var/cache/apt/archives /
2.2.5 验证备份
# 解压备份文件以验证其完整性(可选)
tar -tzf /mnt/backup/ubuntu_22.04_backup.tar.gz
2.2.6 卸载外部存储设备
# 备份完成后,安全地卸载外部存储设备
sudo umount /mnt
2.2.7 备份恢复
# 通过 Live USB 启动后操作
sudo mkdir /mnt/root
# sdX#为原系统分区
sudo mount /dev/sdX# /mnt/root
sudo tar -xvpzf /path/to/backup.tar.gz -C/mnt/root--numeric-owner
sudo umount /mnt/root
2.3 dd命令磁盘镜像备份
适用场景: 严格镜像整个磁盘(慎用!需充足存储空间)
2.3.1 备份系统
sudo dd if=/dev/sdX of=/path/to/backup.imgbs=4M status=progress
- l if=/dev/sda: 输入文件(这里是源设备)
- of=backup.img: 输出文件(这里是目标镜像文件)
- bs=4M: 块大小为 4MB,可以根据需要调整以优化性能
- status=progress: 显示进度信息
2.3.2 恢复系统
# 从 backup.img 文件恢复到硬盘/dev/sda
sudo dd if=backup.img of=/dev/sdabs=4Mstatus=progress
- if=backup.img: 输入文件(这里是源镜像文件)
- of=/dev/sda: 输出文件(这里是目标设备)
- bs=4M: 块大小为 4MB,与备份时保持一致
- status=progress: 显示进度信息
2.3.3 注意事项
- 确保有足够的空间
在执行备份操作之前,请确保输出文件的存储位置有足够的空间。 - 小心选择输入输出路径
错误的选择可能导致数据丢失,仔细核对 if 和 of 参数。 - 关闭正在运行的服务
为了保证备份的一致性,建议在备份期间关闭不必要的服务或进入单用户模式。 - 权限要求
通常需要超级用户权限才能读写磁盘分区。
2.4 使用Clonezilla 进行磁盘镜像备份
- 下载并创建 Clonezilla 启动USB/DVD
- 访问 Clonezilla 官方网站下载ClonezillaISO文件。
- 使用 Rufus 或 Etcher 创建Clonezilla 启动USB/DVD。
- 启动到 Clonezilla
- 插入 Clonezilla 启动介质并重启计算机。
- 在启动时进入 BIOS 设置并将启动顺序调整为首先从USB/DVD 启动。
- 保存设置并退出 BIOS。
- 计算机将从 Clonezilla 启动并显示Clonezilla主界面。
- 选择语言和地区
- 选择语言和地区,然后点击"OK"。
- 选择模式
- 选择 “Start_Clonezilla” 并点击"Enter"。
- 选择磁盘到磁盘克隆
- 选择 “device-device” 模式进行磁盘到磁盘克隆,或者选择 “disk-to-image” 模式进行磁盘到映像文件的克隆。
- 选择源磁盘和目标磁盘
- 如果选择 “device-device” 模式,选择源磁盘和目标磁盘。
- 如果选择 “disk-to-image” 模式,选择源磁盘和目标位置(通常是外部存储设备上的某个分区)。
- 开始克隆
- 按照提示完成克隆过程。
- 完成备份
- 克隆完成后,关闭 Clonezilla 并移除启动介质。
- 重启系统以恢复正常操作。
- Clonezilla 是一个强大的工具,可以进行精确的磁盘镜像备份,但需要小心操作以避免数据丢失。
- 在进行磁盘到磁盘克隆时,目标磁盘必须有足够的空间,并且建议先备份重要数据。
2.5 Timeshift
2.5.1 备份系统
- 适用场景: 系统级备份,可恢复系统设置、已安装软件和配置文件
- 安装 Timeshift:
- sudo apt update && sudo apt install timeshiftp
- 运行 Timeshift:
- sudo timeshift --create
- 首次使用向导配置
- 选择备份类型:RSYNC(推荐)或BTRFS(仅支持Btrfs文件系统)
- 选择备份目标位置(外部硬盘或网络存储)
- 设置备份频率(每日/每周/每月)
2.5.2 回复系统
- 前提: 已通过 Live USB 启动Ubuntu
- 挂载原有系统分区(假设根分区为/dev/sda1)
- sudo mount /dev/sda1 /mnt
- 安装 Timeshift
- sudo apt install timeshift
- 运行 Timeshift,选择之前备份的快照恢复
2.6 用户数据备份
- 用推荐工具 Deja Dup
- 适用场景: 仅备份个人文件(文档、图片、下载等)
- 安装 Deja Dup(默认可能已安装)
sudo apt install deja-dup - 打开 Deja Dup -> 设置备份位置(云存储或本地磁盘)
- 手动触发备份:点击立即备份
- 安装 Deja Dup(默认可能已安装)
3 Linux root用户密码遗忘
3.1 遗忘root用户密码
- 故障原因: 遗忘root用户的密码
- 故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用帐号,将无法登录系统
- 解决思路:进入急救模式,重设密码
3.2 修复过程
3.2.1 首先开机按住shift按键进入GRUB模式
- GRUB(Grand Unified Bootloader)是一个流行的引导加载程序,它负责在计算机启动时加载并运行操作系统。它充当了计算机硬件和操作系统之间的桥梁。
- Ubuntu。这是启动 Ubuntu 操作系统的默认选项,会使用预设的标准内核和启动参数。选择这个选项会直接启动到正常的Ubuntu桌面环境。大多数情况下都是默认选择这个选项。
- Ubuntu 高级选项。这个选项会展开一个子菜单,提供更多启动Ubuntu 的选项,当需要对 Ubuntu 的启动过程进行更精细的控制时,例如选择不同的内核、修复系统问题、进行内存测试等,可以使用这个选项。
3.2.2 选择第二项高级选项->恢复模式
3.2.3 进入恢复菜单后
- 用箭头键选择「dpkg」,按Tab键选中「OK」,然后按回车确认
- Resume
这个选项会退出_recovery mode_并尝试正常启动Ubuntu。它会从当前状态恢复到正常的启动过程,如果觉得问题已经解决或不需要进一步的维护,可以选择这个选项。 - Clean
这个选项会清理系统中的旧安装文件和不必要的包,以释放磁盘空间。它特别有用当的系统由于磁盘空间不足而无法正常启动时。 - Dpkg
这个选项会使用 dpkg 工具修复系统中的破损包。如果的系统升级或安装过程被中断,这个选项可以帮助恢复和修复包管理器的问题 - Fsck
这个选项会执行文件系统检查(File SystemCheck),检查并尝试修复文件系统中的错误。特别适用于系统在突然断电后可能出现的文件系统问题 - Grub
这个选项会更新 GRUB 引导加载程序,扫描SSD或其他存储设备上的可用操作系统,并将它们添加到GRUB启动菜单中。注意,这个操作需要小心,因为如果破坏了GRUB,可能会失去访问_recovery mode_的能力 - Network
这个选项会启用网络功能,允许通过互联网访问资源,但这并不意味着它会自动连接到无线网络。需要手动配置网络连接 - Root
这个选项会进入 root 终端 shell,给以超级用户权限执行命令的能力。可以使用这个 shell 来安装或卸载软件,编辑配置文件,手动修复 GRUB 等高级维护任务 - System-summary
这个选项会显示的系统的概要信息,包括硬件和软件配置。如果需要向 IT 管理员或技术支持人员提供系统信息,可以使用这个选项
- Resume
3.2.4 选择「Yes」继续
3.2.5 系统将更新包缓存
- 当系统询问是否升级时,选择忽略并输入 d 查看详情。
3.2.6 进入shell终端
- 包的详细信息会显示出来,此时输入命令进入root Shell
- !/bin/bash
- !/bin/bash
3.2.7 修改root密码
- 现在我们就拿到了root 访问权限,可以使用命令重置 root 密码:
- passwd
- 系统会要求输入两次新密码进行确认。出于安全考虑,输入的密码不会显示出来。
- 完成后,使用reboot命令重启系统,就可以用新密码登录 root 用户账户了
4 Linux服务控制
4.1 Systemd简介
- systemd 是一种用于Linux 操作系统的系统和服务管理器,被设计为 init 系统的替代品。它负责在系统启动时启动系统组件,以及在系统运行期间管理系统进程。
- 自从 Linux 内核 2.6.32 版本后,许多主流的Linux发行版,如 Fedora、Ubuntu、Debian和CentOS,都采用了 systemd 作为默认的初始化系统。
4.2 Systemd核心概念
4.2.1 单元(Units)
systemd 以单元为基本管理对象,每个单元代表系统中的一个资源或服务
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的任务调度) |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元 |
4.2.2 单元文件
- 定义单元的行为和配置,通常位于/lib/systemd/system/ 或/etc/systemd/system/目录下。
- 单元文件的基本结构包括[Unit]、[Service]、[Install]等。
- 文件主要有四种类型:.mount、.service、.target、.wants
- .mount文件
- 定义了一个挂载点,[Mount]节点里配置了What,Where,Type三个数据项。
- 等同于:mount -t hugetlbfs /dev/hugepages hugetlbfs
- .service文件
- 定义了一个服务,分为[Unit],[Service],[Install]三个小节
- [Unit]
- Description:描述
- After:在network.target,auditd.service启动后才启动
- ConditionPathExists:执行条件
- [Service]
- EnvironmentFile:变量所在文件
- ExecStart:执行启动脚本
- Restart:fail时重启
- [Install]
- Alias:服务别名
- WangtedBy:多用户模式下需要的
- .target
- 定义了一些基础的组件,供.service文件调用
- .wants文件/目录
- 定义了要执行的文件集合
- 每次执行,.wants文件夹里面的文件都会执行
- .mount文件
4.2.3 依赖关系
- 单元之间可以通过依赖关系(如Requires、Wants、Before、After)来定义启动顺序和条件。
4.3 系统服务控制
- 服务:特殊的应用程序,一般在后台一直执行
- 系统服务:给系统提供服务功能
- 应用服务:给人提供服务
- 通过systemctl 命令工具可以实现对指定系统服务的控制
- 语法:systemctl 控制类型 服务名称
- 常见控制类型:
- start(启动):运行指定的系统服务程序,实现服务功能。
- stop(停止):终止指定的系统服务程序,关闭相应的功能。
- restart(重启):先退出,再重新运行指定的系统服务程序。
- reload(重载):不退出服务程序,只是刷新配置。在某些服务中与restart 的操作相同。
- status(查看状态):查看指定的系统服务的运行状态及相关信息。
4.3.1 管理服务
- 启动服务:systemctl start 服务名.service
- 停止服务:systemctl stop 服务名.service
- 重启服务:systemctl restart 服务名.service
- 重新加载服务配置(不重启服务):systemctl reload 服务名.service
- 查看服务状态:systemctl status 服务名.service
4.3.2 启用/禁用服务自启动
- 设置服务开机自启动:systemctl enable 服务名.servicep
- 取消服务开机自启动:systemctl disable 服务名.servicep
- 查看服务是否设置为开机自启动:systemctl is-enabled 服务名.service
4.3.3 查看系统状态
- 查看系统所有已启动的服务和单元:systemctl list-units
- 查看所有可用的单元:systemctl list-unit-files
- 查看启动失败的服务:systemctl --failed
4.4 示例
- 控制类型“restart”用在需要释放旧的资源全部从头开始的情况,它会先关闭相应的服务程序,然后重新运行。
- 例如:当在网卡的配置文件中设置了新的IP地址以后,为了激活新的 IP 地址,可以重新启动名称为network的系统服务。
- systemctl restart networkd-dispatcher.service
- 注意
- 对于在实际生产环境中运行的服务器,不要轻易执行stop或restart 操作,以免造成客户端访问中断,带来不必要的损失。
- 若只是要为系统服务启用新的配置,可以采用相对温和一些的“reload”参数重新加载配置,而不是生硬地执行“restart”。
- 例如,对正在为用户提供Web 访问的httpd服务,当需要应用新的配置时
- 建议执行:systemctl reloadhttpd.service 命令来重新载入配置
- 而不是执行:systemctl restart httpd.service
- 当使用systemctl status 服务名.service时,可以查看服务的当前状态
- Loaded(服务状态):表示服务单元配置文件是否已加载,并显示服务对应的绝对路径以及是否启用。可能的状态包括:
- enabled:服务已启用,将在开机时自动启动
- disabled:服务已禁用,开机时不会自动启动
- static:服务不能自行启动,但可能被其他启用的服务唤醒
- masked:服务已被屏蔽,无法启动,通常是因为存在指向 /dev/null 的符号链接
- Active:表示服务的当前活动状态,可能的状态包括:
- active (running):服务正在运行
- active (exited):服务已成功执行完毕并退出,通常用于一次性任务
- active (waiting):服务正在运行,但正在等待其他事件才能继续处理
- inactive:服务当前未运行
- Main PID:显示服务的主进程ID(PID),可用于进一步监控或管理服务进程。
- CGroup:显示服务所属的控制组(CGroup)信息,控制组用于资源管理和限制。
- Memory:内存使用信息
- CPU:CPU使用信息
- 日志信息:显示服务的日志输出,包括启动信息、运行状态和可能的错误消息,有助于了解服务的运行情况和排查问题。
- Loaded(服务状态):表示服务单元配置文件是否已加载,并显示服务对应的绝对路径以及是否启用。可能的状态包括:
4.5 特殊模式
- 进入暂停模式:systemctl suspend
- 进入休眠模式:systemctl hibernate
- 强制进入救援模式:systemctl rescue
- 强制进入紧急救援模式:systemctl emergency
5 Linux运行级别
- 运行级别(Runlevel)是Linux系统中用于定义系统启动和运行状态的一种机制。
- 系统根据不同的运行级别启动不同的服务和程序,以满足不同的使用需求。
5.1 运行级别的定义和用途
Linux系统共有7个运行级别,每个级别都有特定的用途:
- 运行级别0:所有进程被终止,机器将有序地停止,通常用于关机。
- 运行级别1:单用户模式,仅启动必要的系统服务,用于系统维护和修复。
- 运行级别2:多用户模式,但不启动图形界面。
- 运行级别3:完全多用户模式,启动图形界面,但不启动图形化管理器。
- 运行级别4:系统未使用,保留级别。
- 运行级别5:启动图形界面,用户可以登录并进行操作。
- 运行级别6:系统正常关闭并重启。
5.2 systemd中的Target概念
- 在systemd系统中,传统的“运行级别”概念被更灵活的“target”替代。每个target代表系统应当达到的一种服务/功能层级。
运行级别 | Systemd的Target | 说明 |
---|---|---|
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
- 不同的 target 代表系统不同的运行状态,所启用的服务或程序也不一样。
- 例如,对于互联网中的网站、电子邮件等服务器来说,只需要运行在文本模式就可以了,无须启用图形桌面程序。
5.3 查看运行级别
- runlevel命令
- systemctl工具
runlevel
systemctl get-default
5.4 切换运行级别
- 当用户需要将系统转换为其他的target 时,可以通过传统的 init 程序进行,只要使用与运行级别相对应的数字(0~6)作为命令参数即可,或者使用systemctl命令进行目标切换。
- 例如,为了节省系统资源,将系统运行的target由图形模式
5
切换为字符模式3
,可以执行- init 3 或 systemctl isolate multi-user.target
- 命令查看系统中默认有多少种target
- systemctl list-units --type=target -all
- 通过切换 target 的操作,还可以实现两个特殊的功能,那就是关机和重启。
- 运行级别 0、6 分别对应关机、重启这两个特殊模式,因此只要执行“init 0”与“init 6”命令就可以实现相应的关机、重启操作了
- init 0 //关闭当前系统
- init 6 //重启当前系统
- 而运行级别 0、6 又分别对应着systemd的“poweroff.target”和“reboot.target”目标,因此执行“systemctl poweroff”与“systemctlreboot”命令也可以实现相应的关机、重启操作
- systemctl poweroff //关闭当前系统
- systemctl reboot //重启当前系统
- 运行级别 0、6 分别对应关机、重启这两个特殊模式,因此只要执行“init 0”与“init 6”命令就可以实现相应的关机、重启操作了
5.5 永久切换运行级别
- 上述内容中的运行级别切换均为临时切换,若要永久切换运行级别,可通过ln(链接)命令指定当前系统的默认运行级别。
- 执行如下命令可将当前系统的开机默认运行级别从graphical.target 更改为multi-user.target。
- ln -sf /lib/systemd/system/multi-user.target/etc/systemd/system/default.target
- -s 选项表示创建软链接
- -f 表示强行删除任何已存在的目标文件
完
- ln -sf /lib/systemd/system/multi-user.target/etc/systemd/system/default.target