您可以将 Linux 运行级别视为操作系统运行的不同“模式”。每种模式或运行级别都有其打开或关闭的进程和服务列表。从 Linux 启动时起,它就始终处于某个运行级别。
当您继续使用计算机时,此运行级别可能会发生变化,具体取决于操作系统需要访问的服务类型。
例如,与仅在系统上运行命令行相比,使用图形用户界面运行 Linux 计算机需要不同的运行级别。
这是因为图形用户界面需要访问各种服务命令行根本就没有。为了让系统确定需要打开(或关闭)哪些服务,它会根据需要更改运行级别。
Linux 运行级别的重要性
您可能已经使用 Linux 多年,但没有意识到有不同的运行级别。这是因为大多数服务器管理员不需要经常配置它。
然而,Linux 运行级别确实使管理员能够更好地控制他们管理的系统。
您可以更改系统所在的运行级别(我们将在本文后面看到如何执行此操作),在运行级别内运行的服务也可以。这使我们能够完全控制我们的系统在任何给定时间可以访问哪些服务。
Linux 有多少个运行级别?
Linux 有七种不同的运行级别,从零到六。不同的发行版可能会以不同的方式使用七个运行级别,因此编制运行级别的明确列表并不容易。
相反,您需要检查运行级别如何在您正在使用的特定发行版上工作。在大多数情况下,下面的列表代表了 Linux 发行版通常如何配置运行级别:
运行级别0关闭系统。
运行级别1是单用户模式,用于维护或管理任务。您可能还会看到这种模式称为运行级别S(S 代表单用户)。
运行级别2是多用户模式。此运行级别不使用任何网络服务。
运行级别 3是一种带网络的多用户模式。如果您使用的系统不启动进入 GUI(图形用户界面),那么这是您习惯的正常运行级别。
运行级别 4未使用。用户可以根据自己的目的自定义此运行级别(我们将在本文后面介绍如何执行此操作)。
运行级别 5与运行级别 3 相同,但它还启动一个显示管理器。如果您使用启动到 GUI 的系统,则这是您正在使用的运行级别。
运行级别 6重新启动系统。
我当前的运行级别是多少?
只需在终端中输入“runlevel”,您就可以在大多数发行版上查看当前的运行级别。
当您输入“runlevel”命令时,它会给您两个不同的数字。第一个数字是系统之前运行的运行级别,第二个数字是系统当前的运行级别。
在上面的屏幕截图中,“N”是“none”的缩写,意味着系统之前没有处于任何不同的运行级别。 “5”表示我们的系统当前处于运行级别 5。
在本例中我们运行的是 CentOS,它直接启动到图形界面,因此系统直接进入运行级别 5。
如何更改当前的运行级别?
您可以使用“telinit”命令更改系统的当前运行级别。例如,要在 CentOS 上更改为运行级别 3,您可以键入:
$ telinit 3
请记住,您必须是 root 用户才能执行此命令。请注意,运行级别在 Debian 和 Ubuntu 上的工作方式不同 - 例如,即使不启动 GUI,Ubuntu 也会启动到运行级别 5。
如果您按照上面的示例操作,您的屏幕可能会变成空白。这是因为你被留在了——现在是空的——tty。只需在键盘上执行 Alt+F1(或其他功能键)即可进入工作终端。
如果我们再次使用“runlevel”命令,我们将看到我们现在处于运行级别 3,并且之前的运行级别被列为 5,因为我们刚刚对其进行了更改。
Linux systemd 目标与运行级别
近年来,systemd 逐渐取代了长期存在的“System V init”(运行级别)系统。它的工作方式基本相同,但使用了一些新命令,并且通常将“运行级别”称为“目标”。
运行级别 0 = poweroff.target (runlevel0.target)
运行级别 1 = 救援.目标 (运行级别1.目标)
运行级别 2 = 多用户.目标 (runlevel2.target)
运行级别 3 = 多用户.目标 (runlevel3.target)
运行级别 4 = 多用户.目标 (runlevel4.target)
运行级别 5 = 图形.目标 (runlevel5.target)
运行级别 6 = restart.target (runlevel6.target)
随着本教程的进展,我们将继续介绍 systemd 以及您需要了解的命令。
如何更改启动时的默认运行级别?
您可能希望启动到不同的运行级别的原因有很多。例如,系统管理员通常会启动到命令行,并且仅在认为必要时才启动图形界面。
对于此功能,您需要确保默认运行级别设置为 3,而不是 5。
过去,需要编辑 /etc/inittab 文件来定义启动时的默认运行级别。您可能仍然会发现某些发行版上仍然存在这种情况。
如果使用几年没有升级的操作系统,您仍然会发现此方法与您相关。
$ vi /etc/inittab
在上面的屏幕截图中,运行级别 5 当前设置为启动的默认运行级别。
截至 2016 年,大多数主要 Linux 发行版已逐步淘汰 /etc/inittab 文件,转而使用 systemd 目标 - 我们将在本文后面介绍这些差异。
您可能会发现您的系统根本没有 /etc/inittab 文件,或者您的 inittab 文件可能会建议您使用 systemd,就像我们 CentOS 系统的屏幕截图所示。
要检查系统当前的默认目标:
$ systemctl get-default
在上面的屏幕截图中,系统返回的回复是“graphical.target”。您可能会猜到,这相当于运行级别 5。
要查看其他可用目标及其关联的运行级别,请键入:
$ ls -l /lib/systemd/system/runlevel*
这些符号链接告诉我们,systemd 目标的运行方式几乎与运行级别相同。那么,我们如何更改启动时的默认运行级别(或目标)呢?我们需要创建一个新的符号链接, 像这样:
$ ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
此命令会将我们的默认运行级别更改为 3,因此下次重新启动时,我们的系统将处于运行级别 3 而不是 5。如果您想要不同的运行级别,只需用不同的数字代替“3”即可命令。
作为参考,该命令中的 -f 开关指示应在创建新链接之前删除目标文件。您也可以先使用简单的方法将其删除rm 命令.
您可以再次使用“systemctl get-default”命令确认更改是否成功。
运行级别 3 与运行级别 5
您最常听到和使用的两个运行级别是 3 和 5。基本上可以归结为:运行级别 3 是命令行,运行级别 5 是图形用户界面。
当然,并非每个发行版都遵循此约定,并且您的系统可以由管理员配置,以便这些运行级别具有更多差异。
但总的来说,这就是它的工作原理。如果您想查看在这两个运行级别上启用了哪些服务,我们将在下一节中介绍。
列出在特定运行级别启用的服务
直到最近几年,“chkconfig –list”还是列出在不同运行级别启用的服务的命令。如果您的操作系统是最新的,该命令可能会给您带来错误或将您推迟到 systemd。
如果我们想查看启动到图形模式(运行级别 5)时将启动哪些服务,我们可以运行以下命令:
$ systemctl list-dependencies graphical.target
要查看默认在其他运行级别上运行的服务,只需将“graphical.target”替换为您需要查看的目标的名称。
进程将在哪个运行级别下运行?
如果您想查看特定服务运行的运行级别,可以使用以下命令:
$ systemctl show -p WantedBy [name of service]
例如,如果您想查看 SSH 守护程序将在哪个运行级别运行,您可以键入:
$ systemctl show -p WantedBy sshd.service
根据上面屏幕截图中的输出,SSH 服务将在运行级别 2、3 和 4 上启动(multi-user.target)
如何更改应用程序的运行级别?
如上所示,我们的 SSH 服务仅在运行级别 2-4 (multi-user.target) 上运行。如果我们还希望它在启动到图形界面时启动——运行级别 5(graphical.target)怎么办?我们可以使用以下命令应用该配置:
$ systemctl enable sshd.service
Linux 中运行级别的安全问题
正如我们在本文前面所说,Linux 运行级别的目的是让管理员控制在特定条件下运行哪些服务。对系统进行这种精细控制可以增强安全性,因为您可以确保没有无关的服务在运行。
当管理员不知道到底正在运行哪些服务,因此他懒得保护这些攻击面时,就会出现问题。
您可以使用本指南中的方法来配置默认运行级别并控制正在运行的应用程序。这些做法不仅可以释放系统资源,还可以使您的服务器更加安全。
请记住仅使用您需要的运行级别。例如,如果您只打算使用终端,则启动运行级别 5(图形界面)是没有意义的。
更改为不同的运行级别将引入多个新服务,其中一些可能完全在后台运行,并且您可能会忘记保护它们。
哪个运行级别最适合我?
确定最适合您的运行级别取决于具体情况。一般来说,您可能会定期使用运行级别 3 和 5。
如果您熟悉命令行并且不需要图形界面,那么运行级别 3(在大多数发行版上)将最适合您。
这将阻止不必要的服务运行。另一方面,如果您想要更多的桌面体验和图形界面来使用各种应用程序等,那么运行级别 5 将是您的首选运行级别。
如果您需要在生产服务器上执行维护,运行级别 1 非常适合这种情况。你可以使用这个运行级别来确保你是服务器上唯一的一个(网络服务甚至没有启动),并且你可以不间断地执行你的维护。
在极少数情况下,您甚至可能需要使用运行级别 4。这只适用于您或系统管理员具有自定义配置的运行级别的特定情况。我们将在下一节中介绍如何做到这一点。
正如您可能假设的那样,您不会(也不能)在运行级别 0 或 6 下运行系统,但可以切换到它们只是为了重新启动或关闭电源。通常不需要这样做,因为还有其他命令可以为我们做到这一点。
我们可以在 Linux 中创建一个新的运行级别吗?
可以在 Linux 中创建新的运行级别,但您几乎不需要这样做。如果您决定无论如何都要这样做,您可以首先复制现有的 systemd 目标之一,然后使用您自己的自定义内容对其进行编辑。
目标位于:
/usr/lib/systemd/system
如果您希望新的运行级别/目标基于graphical.target(运行级别5),请将该目录复制到新的目标目录。
$ cp /usr/lib/systemd/system/graphical.target /usr/lib/systemd/system/mynew.target
之后,创建一个新的“wants”目录,如下所示:
$ mkdir /etc/systemd/system/mynew.target.wants
然后符号链接 /usr/lib/systemd/system 中您想要为新运行级别启用的附加服务。
我希望您觉得本教程有用。继续回来。