Linux系统缺省的运行级别

一、运行级别的概念

运行级别是指 Linux 系统在特定状态下启动或关闭一组服务的方式。每个运行级别都有一个编号,通常从 0 到 6,其中每个编号对应一个特定的运行模式。不同的 Linux 发行版可能会对运行级别有不同的定义和使用方式,但大致上的约定是相似的。

二、常见的运行级别

在大多数传统的 SysVinit(System V Init)系统中,运行级别的定义通常如下:

  • 运行级别 0:关机模式(Halt)

    • 当系统进入运行级别 0 时,系统会执行关机操作。此时,所有进程都被终止,所有文件系统都被卸载,系统最终关机。
  • 运行级别 1:单用户模式(Single User Mode)

    • 运行级别 1 是维护模式,通常用于系统维护和修复。此级别启动最少的服务,只允许 root 用户登录,且不启动网络服务。它通常用于修复文件系统或忘记 root 密码的情况下。
  • 运行级别 2:多用户模式,无网络服务(Multi-user Mode without Networking)

    • 在运行级别 2 下,系统启动多用户模式,但不启动网络服务。适用于需要多个用户使用系统但不需要网络连接的环境。
  • 运行级别 3:多用户模式,有网络服务(Multi-user Mode with Networking)

    • 运行级别 3 是完整的多用户模式,启动所有必要的网络服务,并允许多个用户通过网络连接登录系统。这是一个常见的服务器运行级别。
  • 运行级别 4:用户自定义模式(User Defined Mode)

    • 运行级别 4 通常不被系统使用,保留给用户进行自定义配置。用户可以根据需要配置运行级别 4 启动特定的服务。
  • 运行级别 5:多用户模式,带有图形界面(Multi-user Mode with Graphical Interface)

    • 运行级别 5 与运行级别 3 相似,但它还会启动图形用户界面(GUI)。大多数桌面系统默认使用这个运行级别。
  • 运行级别 6:重启模式(Reboot)

    • 当系统进入运行级别 6 时,系统会执行重启操作,所有进程终止,文件系统卸载,系统重新启动。

三、系统缺省的运行级别

系统启动时会进入一个默认的运行级别,这个运行级别通常称为系统的缺省运行级别。这个级别决定了系统在启动时会启动哪些服务,并进入哪种运行模式。对于传统的 SysVinit 系统,缺省的运行级别通常定义在 /etc/inittab 文件中:

示例:/etc/inittab 文件中的缺省运行级别配置

id:5:initdefault:

在这个示例中,initdefault 指令指定了系统的默认运行级别为 5,即系统启动时会进入带有图形界面的多用户模式。

四、系统 V 初始化(SysVinit)与 Systemd

尽管传统的运行级别系统基于 SysVinit 管理,现代的大多数 Linux 发行版已经采用了 systemd 作为初始化系统,取代了传统的 SysVinit。systemd 通过 target 的概念来管理系统状态,它提供了比传统运行级别更细粒度的控制。

1. SysVinit 的运行级别管理

在 SysVinit 系统中,运行级别是通过 /etc/rc.d//etc/init.d/ 目录下的一组脚本来管理的。这些脚本会根据运行级别启动或停止相应的服务。例如,在运行级别 3 下,系统会执行 /etc/rc.d/rc3.d/ 目录中的启动脚本,启动网络和多用户环境。

切换运行级别的命令

init 3   # 切换到运行级别 3
init 5   # 切换到运行级别 5
2. Systemd 中的运行级别与 Target

systemd 使用 target 来替代传统的运行级别。每个 target 对应于一个或多个服务和系统状态,类似于 SysVinit 中的运行级别。

常见的 target

  • poweroff.target:相当于运行级别 0,关机。
  • rescue.target:相当于运行级别 1,单用户模式。
  • multi-user.target:相当于运行级别 3,多用户模式(无图形界面)。
  • graphical.target:相当于运行级别 5,多用户模式(带图形界面)。
  • reboot.target:相当于运行级别 6,重启。

查看当前 target

systemctl get-default

设置默认 target

sudo systemctl set-default graphical.target

这个命令将系统的默认启动模式设置为带有图形界面的多用户模式。

切换 target

sudo systemctl isolate multi-user.target

此命令将系统切换到多用户模式(无图形界面),类似于 SysVinit 的 init 3 命令。

五、自定义和管理运行级别(Target)

在实际运维中,有时需要根据具体的需求定制运行级别或 target,例如在服务器上禁用图形界面以节省资源,或创建一个自定义的 target 以满足特殊应用场景。

1. 创建自定义 Target

你可以通过创建自定义 target 文件来实现特定服务和系统状态的管理。

步骤:

  1. 创建目标文件:在 /etc/systemd/system/ 目录下创建一个自定义的 target 文件,例如 mycustom.target
sudo touch /etc/systemd/system/mycustom.target
  1. 配置目标文件:编辑这个文件,配置它的基本信息和依赖服务。
[Unit]
Description=My Custom Target
Requires=multi-user.target
  1. 启动和设置默认 Target:使用 systemctl 启动并设置默认的 target。
sudo systemctl enable mycustom.target
sudo systemctl set-default mycustom.target
2. 管理运行级别的服务

在传统的 SysVinit 系统中,可以使用 chkconfigupdate-rc.d 来管理各个运行级别中的服务启动项。

在 CentOS/Red Hat 系统中:

chkconfig --level 3 httpd on  # 在运行级别 3 中启动 httpd 服务
chkconfig --level 5 httpd off # 在运行级别 5 中禁用 httpd 服务

在 Debian/Ubuntu 系统中:

update-rc.d apache2 defaults   # 配置 apache2 服务为默认启动
update-rc.d apache2 disable    # 禁用 apache2 服务在所有级别中启动

systemd 中,管理服务启动项更为简单:

sudo systemctl enable httpd    # 启用服务
sudo systemctl disable httpd   # 禁用服务

六、总结

运行级别是 Linux 操作系统启动和运行时的重要概念,不同的运行级别决定了系统将启动哪些服务以及系统的工作模式。在传统的 SysVinit 系统中,运行级别通过编号来表示,每个运行级别代表一种特定的系统状态。随着 systemd 的引入,运行级别被 target 概念所取代,提供了更灵活和更强大的系统状态管理能力。

猜你喜欢

转载自blog.csdn.net/Flying_Fish_roe/article/details/143475764