正确理解 Linux 运行级别

2023-10-25

您可以将 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 中您想要为新运行级别启用的附加服务。

我希望您觉得本教程有用。继续回来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确理解 Linux 运行级别 的相关文章

  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe

随机推荐

  • 如何在 CentOS 8 上安装 R

    R 是一种开源编程语言和免费环境 专门从事统计计算和图形表示 它由 R 统计计算基金会支持 主要供统计学家和数据挖掘人员用于开发统计软件和执行数据分析 本文介绍如何在 CentOS 8 上安装 R 先决条件 在继续本教程之前 请确保您已满足
  • 如何更改 SFTP 端口

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密连接在两台主机之间传输文件 它还允许您对远程文件执行各种文件操作并恢复文件传输 SFTP 可用作旧版 FTP 协议的替代品 它具有 FTP 的所有功能 但连接更安全 本文介绍如
  • 如何在 Ubuntu 18.04 上设置或更改时区

    在 Ubuntu 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 使用正确的时区对于许多与系统相关的任务和流程都很重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于相同的时区 本教程演示如
  • 如何在 Debian 9 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 在本教程中 我们将指导您如何安装Yarn在 Debian 9 系统上
  • 如何在 Ubuntu 18.04 上安装 Django

    Django 是一个免费开源的高级 Python Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 有不同的方法来安装 Django 具体取决于您的需要 它可以在系统范围内安装 也可以使用 pip 安装在 Pyth
  • 如何在 Linux 中添加目录到 PATH

    当您在命令行上键入命令时 您基本上是在告诉 shell 运行具有给定名称的可执行文件 在Linux中 这些可执行程序就像ls find file和其他文件 通常位于系统上的几个不同目录中 存储在这些目录中的任何具有可执行权限的文件都可以从任
  • 如何在 CentOS 8 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程至关重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 在 CentOS 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 本文介绍
  • Python range() 函数

    蟒蛇rangetype 通过定义范围的起点和终点来生成整数序列 它通常与for循环迭代数字序列 range 在 Python 2 和 3 中的工作方式有所不同 在Python 2中 有两个函数可以让你生成整数序列 range and xra
  • Linux 中的正常运行时间命令

    在本教程中 我们将介绍uptime命令 顾名思义 uptime命令显示系统已经运行了多长时间 它还显示当前时间 登录用户数以及过去 1 5 和 15 分钟的系统负载平均值 如何使用正常运行时间命令 uptime 命令的语法如下 uptime
  • 如何在 CentOS 7 上使用 VSFTPD 设置 FTP 服务器

    FTP 文件传输协议 是一种标准的客户端 服务器网络协议 允许用户在远程网络之间传输文件 有多种可用于 Linux 的开源 FTP 服务器 最流行和最广泛使用的是PureFTPd ProFTPD and vsftpd 在本教程中 我们将在
  • Python while 循环

    循环是编程语言的基本概念之一 当您想要多次重复特定的代码块直到满足给定条件时 循环会很方便 Python中有两种基本的循环结构 for and while loops 本教程涵盖了以下基础知识whilePython 中的循环 我们还将向您展
  • NumPy loadtxt 教程(从文件加载数据)

    在之前的教程中 我们讨论过NumPy 数组 我们看到了它如何使读取 解析和对数字数据执行操作的过程变得轻而易举 在本教程中 我们将讨论 NumPy loadtxt 方法 该方法用于解析文本文件中的数据并将其存储在 n 维 NumPy 数组中
  • Linux Bash 脚本编写第 3 部分 – 参数和选项

    到目前为止 您已经了解了如何编写无需用户输入即可完成工作的 Linux bash 脚本 今天我们将继续我们的 Linux bash 脚本系列 如果您想了解我们在谈论什么 我建议您查看之前的帖子 Bash 脚本基础知识 Bash 脚本 For
  • Pythonnamedtuple(将元组提升到一个新的水平)

    在本教程中 我们将深入研究命名元组 它们是什么 如何创建和操作它们 以及何时使用它们 或不使用它们 命名元组是Python内置的一部分收藏模块 并且它们提供了一种将数据捆绑在一个名称下的便捷方法 它们是 Python 内置元组数据类型的子类
  • 使用 Python 处理 CSV:综合教程

    CSV 逗号分隔值 文件是存储和共享表格数据的最常见方法之一 这些文件由行和列组成 其中每行代表一个记录 列包含由分隔符 通常是逗号 分隔的值 Python 提供了多种内置方法来处理 CSV 文件 使您可以高效地读取 写入和操作数据 本教程
  • Linux Bash 脚本编写第 5 部分 – 信号和作业

    在上一篇文章中 我们谈到了输入 输出和重定向在 bash 脚本中 今天我们将学习如何在Linux系统上运行和控制它们 到目前为止 我们只能从命令行界面运行脚本 但这并不是运行 Linux bash 脚本的唯一方法 这篇文章描述了控制 Lin
  • 使用curl命令的SSL/TLS:安全连接指南

    卷曲命令是一种发出网络请求的工具 它在通过 HTTPS 与安全服务器通信时使用 SSL TLS 默认情况下 curl尝试在可用时使用安全连接 但了解如何控制和诊断这些连接至关重要 目录 hide 1 使用客户端证书 2 指定证书类型 3 使
  • 如何使用 tqdm 创建 Python 终端进度条?

    进度条是估算和显示任务所需时间的宝贵工具 这些也可以添加到您的 Python 脚本或代码块中 以指示代码执行所需的时间 Python 中有多种可用的库 例如progressbar and tqdm可以用于此目的 目录 hide 1 什么是
  • 使用 Linux curl 命令管理 Cookie

    与 Web 应用程序交互时 您会遇到处理 cookie 和会话的需要 在本教程中 您将学习如何使用卷曲命令发送 接收和管理 cookie 目录 hide 1 手动发送 Cookie 标头 2 存储从服务器接收到的 Cookie 3 通过请求
  • 正确理解 Linux 运行级别

    您可以将 Linux 运行级别视为操作系统运行的不同 模式 每种模式或运行级别都有其打开或关闭的进程和服务列表 从 Linux 启动时起 它就始终处于某个运行级别 当您继续使用计算机时 此运行级别可能会发生变化 具体取决于操作系统需要访问的