Linux 运行级别

您可以将Linux运行级别视为操作系统运行的不同模式。这些模式或运行级别中的每一个都有其打开或关闭的进程和服务列表

11 min read
By myfreax
Linux 运行级别

您可以将Linux运行级别视为操作系统运行的不同模式。这些模式或运行级别中的每一个都有其打开或关闭的进程和服务列表。

从Linux启动开始,它就始终处于某个运行级别。随着您继续使用计算机,此运行级别可能会发生变化,具体取决于操作系统需要访问的服务类型。

例如,使用图形用户界面运行Linux机器将需要不同的运行级别,而不是仅在系统上运行命令行。

这是因为图形用户界面需要访问命令行根本不需要的各种服务。为了让系统确定需要打开或关闭哪些服务,它会根据需要更改运行级别。

您可能已经使用Linux多年,却没有意识到存在不同的运行级别。这是因为大多数服务器管理员不需要经常配置它。

但是,Linux运行级别确实使管理员能够更好地控制他们管理的系统。您可以更改系统所在的运行级别,在运行级别内运行着不同的服务。

这使我们能够完全控制我们的系统在任何指定定时间可以访问哪些服务。

什么是Linux运行级别

在Linux中有七种不同的运行级别,从0到6。不同的发行版可能会以不同的方式使用这七个运行级别,因此编制一份运行级别功能的明确列表并不容易。

相反,您需要检查运行级别在您使用的特定发行版上的工作方式。在大多数情况下,下面的列表代表了Linux发行版通常如何配置运行级别.

运行级别 0时则会关闭系统。运行级别 6重新引导系统。

运行级别 1是单用户模式,用于维护或管理任务。您可能还会看到这种模式被称为S运行级别。这个用户是root用户。

运行级别 2多用户模式。此运行级别不能够使用任何网络服务。

运行级别 3是具有网络功能的多用户模式。您使用的系统将不能引导至 GUI图形用户界面或者桌面环境,这是服务器首选的运行级别。

运行级别 4用户可以根据自己的目的自定义此运行级别,我们将在本文后面介绍如何执行此操作。

运行级别 5与运行级别 3相同,但它还启动了一个显示管理器。如果您使用引导至 GUI或者具有桌面环境的系统,这就是您正在使用的运行级别。

您只需在终端中键入命令runlevel即可查看大多数发行版的当前运行级别。

当你输入runlevel命令时,它会给你两个不同的数字。第一个数字是您的系统之前运行的运行级别,第二个数字是您系统的当前运行级别。

Nnone的缩写,表示系统之前没有处于任何不同的运行级别。5表示我们的系统当前处于运行级别 5。

在这个例子中,我们运行的是CentOS,它直接启动到图形界面,因此系统直接进入运行级别 5。

更改运行级别

您可以使用telinit命令更改系统的当前运行级别。例如,要在CentOS上更改为运行级别 3。你可运行命令telinit 3命令。

请记住,您必须是root用户才能执行此命令。注意,运行级别在Debian和Ubuntu 上的工作方式不同——例如,即使没有启动 GUI,Ubuntu也会启动到运行级别 5。

如果您按照上面的示例进行操作,您的屏幕可能会变为空白。这是因为你留在了现在是空的tty。只需在键盘上按 Alt+F1即可进入终端工作。

如果我们再次使用runlevel命令,我们会看到我们现在处于运行级别 3,并且之前的运行级别被列为 5,因为我们刚刚更改了它。

近年来,systemd 已经取代了长期存在的System V初始化系统。它仍然以基本相同的方式工作,但使用了一些新命令,并且将运行级别称为target

运行级别 0 = poweroff.target,也就是关机。运行级别 1 = rescue.targe。运行级别 2 = multi-user.target

运行级别 3 = multi-user.target。运行级别 4 = multi-user.target。运行级别 5 = 图形.target。运行级别 6 = reboot.target。

更改默认运行级别

您可能希望启动到不同的运行级别的原因有很多。例如,系统管理员通常会启动命令行,并且仅在认为必要时启动图形界面。

对于此功能,您需要确保将默认运行级别设置为 3,而不是 5。

过去,需要编辑/etc/inittab文件以在启动时定义默认运行级别。在某些发行版上,您可能仍然会发现这种情况。

截至 2016 年,大多数主要Linux发行版已逐步淘汰/etc/inittab文件以支持systemd-target。我们将在本文后面介绍差异。

您可能会发现您的系统根本没有/etc/inittab文件,或者您的inittab文件可能会建议您使用systemd代替。

在CentOS系统中。当你打开/etc/inittab文件文件时,第一行将提示你一个消息ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM

也就是,你在此编辑的任何配置都不会影响你系统。也就相当于废弃了。并告诉你获取系统默认运行级别的命令是sudo systemctl get-default。设置系统默认运行级别命令sudo systemctl set-default TARGET.target

如果你需要查看其他可用systemd-target及其关联的运行级别,你可运行命令ls -l /lib/systemd/system/runlevel*

这些符号链接告诉我们systemd目标的运行方式几乎与运行级别相同。那么,我们也可以通过修改/etc/systemd/system/default.target的符号链接修改默认运行级别或目标。

ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target此命令会将我们的默认运行级别更改为 3。

因此下次重新启动时,我们的系统将处于运行级别3而不是5。如果您想要不同的运行级别,您只需用不同的数字代替命令中的3

作为参考,ln命令中的-f选项指示应在创建新链接之前删除目标文件。您也可以先使用rm 命令将其删除。

您可以再次使用systemctl get-default命令确认更改是否成功。

运行级别3与运行级别5

您将听到并使用最多的两个运行级别将是3和5。基本上可以总结为:运行级别3是命令行,运行级别5是图形用户界面。

当然,并不是每个发行版都遵循这个约定,在您的系统可以由管理员配置,以便这些运行级别有更多差异。

但是,总的来说,它就是这样工作的。如果您想查看在这两个运行级别上启用了哪些服务,我们将在下一节中介绍。

列出运行级别服务

直到最近几年,systemd是列出在不同运行级别启用的服务的命令。如果您的操作系统是最新的,该命令可能会给您一个错误或将让你使用chkconfig –list

如果我们想查看启动到图形模式,运行级别 5时将启动哪些服务,我们可以运行命令systemctl list-dependencies graphics.target

要查看默认在其他运行级别上运行的服务,只需将graphical.target替换为您需要查看的目标的名称。

如果您想查看指定的服务运行在哪个运行级别,可以使用命令systemctl show -p WantedBy [服务名称]

例如,如果您想查看 SSH服务将在哪个运行级别运行,您可以运行命令systemctl show -p WantedBy sshd.service

如上所示,我们的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/目录中。

如果您想基于graphics.target/运行级别 5建立新的运行级别/目标,你可以使用命令cp /usr/lib/systemd/system/graphical.target /usr/lib/systemd/system/mynew.target创建graphical.target的副本。

然后,创建一个新的wants目录mkdir /etc/systemd/system/mynew.target.wants。然后从/usr/lib/systemd/system/graphics.target.wants目录中复制符号链接到你运行级别目录的wants目录中。

我希望你觉得这个教程很有用。继续回来。