前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正确理解Linux运行级别那点事儿

正确理解Linux运行级别那点事儿

作者头像
用户6543014
发布2019-12-17 12:08:59
2.3K0
发布2019-12-17 12:08:59
举报
文章被收录于专栏:CU技术社区

您可以将Linux运行级别视为操作系统运行的不同“模式”。每一种模式或运行级别都有自己的进程和服务列表,这些进程和服务要么被打开,要么被关闭。

您在使用计算机的过程中,此运行级别可能会更改,具体取决于操作系统需要访问的服务类型。

例如,与只在系统上运行命令行的情况相比,使用图形用户界面运行Linux机器将需要不同的运行级别。

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

目录

  1. Linux运行级别的重要性
  2. Linux中有几个运行级别?
  3. 我当前的运行级别是多少?
  4. 如何更改当前运行级别?
  5. Linux systemd targets vs runlevels
  6. 如何在启动时更改默认运行级别?
  7. 运行级别3与运行级别5
  8. 列出在特定运行级别启用的服务
  9. 流程将在哪个运行级别下运行?
  10. 如何更改应用程序的运行级别?
  11. Linux中11个运行级别的安全性问题
  12. 哪个运行级别最适合我?
  13. 我们可以在Linux中创建新的运行级别吗?

Linux运行级别的重要性

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

但是,Linux运行级别确实使管理员能够更好地控制其管理的系统。

系统所在的运行级别可以更改(我们将在本文后面看到如何更改)以及在运行级别内部运行的服务也可以更改。这使我们可以完全控制系统在任何给定时间都可以访问哪些服务。

Linux中有几个运行级别?

Linux中有七个不同的运行级别,从零到六个。不同的发行版可能会以不同的方式使用这七个运行级别,因此要汇总一份运行级别的功能列表并不容易。

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

运行级别0将关闭系统。

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

运行级别2是多用户模式。该运行级别不使用任何网络服务。

运行级别3是具有联网功能的多用户模式。如果您使用的系统无法引导进入GUI(图形用户界面),则这是您惯常使用的运行级别。

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

运行级别5与运行级别3相同,但它还会启动一个显示管理器。如果您使用引导进入GUI的系统,则这是您惯常使用的运行级别。

运行级别6重新启动系统。

我当前的运行级别是多少?

您只需在终端中键入“ runlevel”,即可在大多数发行版中看到当前的运行级别。

当前运行级别输入“运行级别”命令后,它将为您提供两个不同的数字。第一个数字是系统正在运行的先前运行级别,第二个数字是系统的当前运行级别。

在上面的屏幕截图中,“ N”是“ none”的缩写,这意味着该系统以前没有处于任何不同的运行级别。 “ 5”表示我们的系统当前处于运行级别5。

在本示例中,我们正在运行CentOS,该CentOS直接引导到图形界面,因此系统直接进入运行级5。

如何更改当前运行级别?

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

代码语言:javascript
复制
  $ telinit 3

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

如果您按照上面的示例,您的屏幕可能会变黑。只要按Alt+F1(或其他功能键),你的键盘就会被带到一个工作终端。

如果再次使用“runlevel”命令,我们将看到现在处于运行级别3,并且由于我们刚刚对其进行了更改,因此上一个运行级别被列为5。

Linux systemd targets vs runlevels

近年来,systemd已经取代了长期存在的“ System V init”(运行级别)系统。它仍然以基本相同的方式工作,但是使用了一些新命令,并且通常将“runlevels”称为“targets”。

  • Runlevel 0 = poweroff.target (runlevel0.target)
  • Runlevel 1 = rescue.target (runlevel1.target)
  • Runlevel 2 = multi-user.target (runlevel2.target)
  • Runlevel 3 = multi-user.target (runlevel3.target)
  • Runlevel 4 = multi-user.target (runlevel4.target)
  • Runlevel 5 = graphical.target (runlevel5.target)
  • Runlevel 6 = reboot.target (runlevel6.target)

我们将继续学习systemd和本教程中需要了解的命令。

如何在启动时更改默认的运行级别?

有很多原因可能导致您希望启动到另一个运行级别。例如,系统管理员通常会引导进入命令行,并且仅在必要时才启动图形界面。

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

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

如果使用几年未升级的操作系统,您仍然会发现此方法很适合您。

代码语言:javascript
复制
$ vi /etc/inittab

在上面的屏幕截图中,运行级别5当前设置为启动的默认运行级别。

截至2016年,大多数主要的Linux发行版都已淘汰了/ etc / inittab文件,转而使用systemd目标。我们将在本文后面介绍这些差异。

您可能会发现您的系统根本没有/ etc / inittab文件,或者您的inittab文件可能建议您使用systemd,就像这个CentOS系统的截图一样。

要检查系统的当前默认目标:

代码语言:javascript
复制
$ systemctl get-default

在上面的屏幕截图中,从系统返回的回复是“ graphical.target”。您可能会猜到,这等效于运行级别5。

要查看其他可用目标及其关联的运行级别,请输入:

代码语言:javascript
复制
$ ls -l /lib/systemd/system/runlevel*

这些符号链接告诉我们,systemd目标的操作方式几乎与运行级别的操作方式基本相同。那么,如何在启动时更改默认运行级别(或目标)?我们需要创建一个新的符号链接,如下所示:

代码语言:javascript
复制
$ ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target

默认目标此命令会将我们的默认运行级别更改为3,因此,下次重启时,我们的系统将处于运行级别3,而不是5。如果您想要一个不同的运行级别,只需用一个不同的数字代替命令中的“ 3”即可。

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

您可以再次确认使用“ systemctl get-default”命令成功地进行了更改。

运行级别3vs运行级别5

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

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

但是,这就是它的工作原理。如果您想确切了解在这两个运行级别上启用了哪些服务,我们将在下一部分中介绍。

列出在特定运行级别启用的服务

直到最近几年,“ chkconfig –list”是列出将在不同运行级别启用的服务的命令。如果您的操作系统是最新的,则该命令可能会给您带来错误或将您转向systemd。

如果要查看引导到图形模式(运行级别5)时将启动什么服务,可以运行以下命令:

代码语言:javascript
复制
  $ systemctl list-dependencies graphical.target

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

流程将在哪个运行级别下运行?

如果您想查看特定服务在哪个运行级别运行,可以使用以下命令:

代码语言:javascript
复制
$ systemctl show -p WantedBy [name of service]

例如,如果您想查看SSH守护进程将在哪个运行级别运行,请键入:

代码语言:javascript
复制
$ systemctl show -p WantedBy sshd.service

根据以上屏幕截图中的输出,SSH服务将在运行级别2、3和4(multi-user.target)上启动。

如何更改应用程序的运行级别?

如上所示,我们的SSH服务仅在2-4级运行(multi-user.target)。如果我们还希望它在启动图形界面-运行级别5(graphical.target)时启动,该怎么办?我们可以通过以下命令应用该配置:

代码语言:javascript
复制
$ systemctl enable sshd.service

Linux中运行级别的安全性问题

正如我们在本文前面所说的,Linux运行级别的重点是使管理员可以控制在特定条件下运行的服务。对系统进行这种细粒度控制可以增强安全性,因为您可以确保没有多余的服务在运行。

当管理员不知道确切正在运行什么服务时,就会出现问题,因此不必费心保护这些攻击面。

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

记住,只使用所需的运行级别。例如,如果仅打算使用终端,则没有必要启动运行级别5(图形界面)。

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

哪个运行级别最适合我?

确定哪种运行级别对您来说是最好的,取决于具体的情况。通常,您可能会定期使用运行级别3和5。

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

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

如果需要在生产服务器上执行维护,则运行级别1非常适合这种情况。这用于确保您是服务器上的唯一服务器(甚至没有启动网络服务),并且可以不间断地执行维护。

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

如您所料,您不会(也无法)在运行级别0或6上运行系统,但是可以切换到它们以重新启动或关闭电源。通常不需要这样做,因为还有其他命令可以帮助我们完成此任务。

我们可以在Linux中创建新的运行级别吗?

在Linux中创建新的运行级别是可能的,但是您不太可能需要这样做。如果确定要执行此操作,则可以从复制现有的systemd目标之一开始,然后使用自己的自定义进行编辑。

目标位于:

代码语言:javascript
复制
/usr/lib/systemd/system

如果要基于graphical.target(运行级别5)作为新的运行级别/目标,请将该目录复制到新的目标目录。

代码语言:javascript
复制
$ cp /usr/lib/systemd/system/graphical.target /usr/lib/systemd/system/mynew.target

之后,创建一个新的“ wants”目录,如下所示:

代码语言:javascript
复制
$ mkdir /etc/systemd/system/mynew.target.wants

然后从/ usr / lib / systemd / system符号链接为新的运行级别启用其他服务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档