myfreax

Linux 运行级别

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

11 min read
By myfreax
Linux 运行级别
Linux 运行级别

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

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

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

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

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

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

这使我们能够完全控制我们的系统在那些运行级别访问哪些服务。

什么是Linux 运行级别

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

相反,您需要检查运行级别在不同的Linux发行版的工作方式。在大多数情况下,下面的列表展示了Linux发行版的运行级别与能力.

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

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

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

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

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

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

查看当前运行级别

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

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

Nnone的缩写,表示系统之前的运行级别与现在运行级别相同。5表示我们的系统当前处于运行级别5

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

runlevel
N 5

更改运行级别

您可以使用telinit命令更改系统的当前运行级别。要更改Linux的运行级别您必须以root或者具有sudo权限用户才能运行telinit命令。

例如,要将CentOS运行级别更改为3,请运行命令sudo telinit 3。注意,运行级别在Debian和Ubuntu的工作方式不同。

例如,即使没有启动 GUI,Ubuntu也会启动到运行级别 5。

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

如果我们再次运行命令runlevel,我们会看到现在处于运行级别 3,并且之前的运行级别是 5,因为我们刚刚更改运行级别,所以不是None

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

运行级别 0是poweroff.target。运行级别 1是rescue.target。运行级别 2是multi-user.target。

运行级别 3是multi-user.target。运行级别 4是multi-user.target。运行级别 5是graphical.target。运行级别 6是reboot.target。

在使用SystemD作为初始化系统的Linux发行版中,设置运行级别的命令是systemctl isolate

sudo systemctl isolate multi-user.target # or runlevel3.target
sudo systemctl isolate graphical.target # or runlevel5.target

更改默认运行级别

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

过去,需要编辑/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

sudo systemctl get-default
sudo systemctl set-default multi-user.target # or runlevel3.target
sudo systemctl set-default graphical.target # or runlevel5.target
sudo systemctl get-default

如果你需要查看其他可用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。

sudo ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
sudo systemctl get-default

因此下次重新启动时,我们的系统将处于运行级别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替换为您需要查看的目标的名称。

sudo systemctl list-dependencies graphics.target

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

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

我们的SSH服务运行在multi-user.target。如果我们还希望它在我们启动到图形界面时启动时,也就是运行级别 5/graphical.target。请运行命令systemctl enable sshd.service

sudo systemctl show -p WantedBy sshd.service

Linux运行级别与安全

正如我们在本文前面所说的,Linux运行级别的目的是让管理员控制在特定条件下运行的服务。

对系统进行这种精细控制可以增强安全性,因为您可以确定没有无关的服务在运行。

当管理员不知道究竟运行了哪些服务时,就会出现问题,因此他不会费心保护这些攻击面。

您可以使用本教程中的方法来配置默认运行级别并控制运行的应用程序。这些做法不仅可以释放系统资源,还可以让您的服务器更加安全。

请记住只使用您需要的运行级别。例如,如果您只打算使用终端,则启动运行级别 5图形界面是没有意义的。

更改为不同的运行级别将引入多个新服务,其中一些可能完全在后台运行,您可能会忘记保护它们。

运行级别选择

确定最适合您的运行级别取决于具体情况。通常,您可能会定期使用运行级别3和5。

如果您熟悉命令行并且不需要图形界面,那么运行级别 3将是最适合您的,在大多数发行版上。

这将阻止不必要的服务运行。另一方面,如果您想要更多的桌面体验和图形界面来使用各种应用程序等,那么运行级别5将是您首选的运行级别。

如果您需要在生产服务器上执行维护,运行级别1非常适合这种情况。您可以使用此运行级别来确保您是服务器上的唯一一个用户。

在极少数情况下,您甚至可能需要使用运行级别 4。这仅适用于您或系统管理员具有自定义配置的运行级别的特定情况。我们将在下一节介绍如何做到这一点。

正如您可能假设的那样,您不会,也不能在运行级别0或6中运行您的系统,但可以切换到它们只是为了重新启动或关闭电源。

通常你不需要这样做,因为还有其他命令可以为我们这样做。

Linux创建运行级别

在Linux中创建一个新的运行级别是可能的,但您极不可能需要这样做。如果您仍然决定这样做。

您可以首先复制现有的systemd target的其中一个,然后使用您自己的自定义进行编辑。这些目标都位于/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目录中。

cp /usr/lib/systemd/system/graphical.target \ 
/usr/lib/systemd/system/mynew.target

sudo mkdir /etc/systemd/system/mynew.target.wants

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