如何在 Linux 中检查系统服务是否被屏蔽

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 systemd 检查 Linux 系统中的服务是否被屏蔽。屏蔽服务可以防止其启动,这是系统管理和故障排除的关键概念。你将使用 systemctl is-masked 命令检查特定服务的屏蔽状态,并使用 systemctl list-unit-files 命令更全面地查看 systemd 单元文件。最后,你将探索 systemd 配置目录,了解这些设置的存储位置。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") subgraph Lab Skills linux/ls -.-> lab-558770{{"如何在 Linux 中检查系统服务是否被屏蔽"}} linux/less -.-> lab-558770{{"如何在 Linux 中检查系统服务是否被屏蔽"}} linux/cd -.-> lab-558770{{"如何在 Linux 中检查系统服务是否被屏蔽"}} linux/service -.-> lab-558770{{"如何在 Linux 中检查系统服务是否被屏蔽"}} end

使用 systemctl is-masked 检查服务屏蔽状态

在这一步中,我们将开始探索 systemd,它是像 Ubuntu 这样的现代 Linux 发行版中的系统和服务管理器。systemd 负责启动、停止和管理服务(如 Web 服务器、数据库等)以及其他系统资源。

systemd 中的一个重要概念是“屏蔽”服务。屏蔽服务可以防止它被启动,即使是手动启动或由其他服务启动。这是一种完全禁用服务的方法。

我们可以使用 systemctl is-masked 命令来检查服务是否被屏蔽。让我们来检查一个常见服务 apache2 的状态。Apache 是一个流行的 Web 服务器。

如果终端尚未打开,请打开它。记住,你可以在桌面左侧找到 Xfce 终端 图标。

输入以下命令并按回车键:

systemctl is-masked apache2

你应该会看到类似以下的输出:

inactive

这个输出表明 apache2 服务未被屏蔽。如果它被屏蔽了,输出将是 masked

让我们尝试检查一个在这个环境中通常默认被屏蔽的服务,比如 systemd-udevd-kernel.socket。这是一个底层系统服务。

输入以下命令并按回车键:

systemctl is-masked systemd-udevd-kernel.socket

输出应该是:

masked

这证实了 systemd-udevd-kernel.socket 服务确实被屏蔽了。

了解服务是否被屏蔽对于系统故障排除和管理至关重要。如果一个服务无法启动,检查其屏蔽状态通常是首要步骤之一。

点击 继续 进入下一步。

使用 systemctl list-unit-files 列出单元文件

在上一步中,我们使用 systemctl is-masked 检查了单个服务的状态。现在,让我们更全面地了解 systemd 所管理的所有单元文件。

systemd 管理着各种类型的“单元”,这些单元是定义服务、挂载点、设备、套接字等的配置文件。最常见的单元类型是 .service 单元,它定义了如何运行一个后台进程(即服务)。

systemctl list-unit-files 命令会显示所有已安装的单元文件及其“启用”状态。启用状态表示一个单元是否被配置为在系统启动时自动启动。

在终端中输入以下命令并按回车键:

systemctl list-unit-files

这个命令会输出一长串单元文件列表。输出内容大致如下(仅展示一小部分):

UNIT FILE                                  STATE
proc-sys-fs-binfmt_misc.automount          static
dev-hugepages.mount                        static
dev-mqueue.mount                           static
proc-sys-fs-binfmt_misc.mount              static
sys-fs-fuse-connections.mount              static
sys-kernel-config.mount                    static
sys-kernel-debug.mount                     static
sys-kernel-tracing.mount                   static
...
apache2.service                            disabled
...

输出有两列:

  • UNIT FILE:单元文件的名称(例如 apache2.service)。
  • STATE:单元的启用状态(例如 staticenableddisabledmasked)。

以下是一些常见状态的简要说明:

  • enabled:该单元被配置为在系统启动时自动启动。
  • disabled:该单元未被配置为在系统启动时自动启动。
  • static:该单元不能被启用或禁用,其启动由另一个单元控制。
  • masked:该单元被完全禁用,无法启动。

你可以使用终端的滚动条滚动查看输出,或者将输出通过管道传递给 less 等分页器。例如:

systemctl list-unit-files | less

less 中,你可以使用箭头键滚动,按空格键向下翻页,按 q 退出。

这个命令对于查看系统上安装了哪些服务以及它们的启动配置非常有用。

点击 继续 进入下一步。

查看 /etc/systemd 中的 systemd 配置

在前面的步骤中,我们使用 systemctl 命令与 systemd 进行交互。现在,让我们来看看 systemd 存储其配置文件的位置。

systemd 配置文件的主要目录是 /etc/systemd。该目录包含不同类型的单元文件和配置设置的子目录。

让我们使用 ls 命令列出 /etc/systemd 目录的内容。记住,/etc 是 Linux 中用于存储配置文件的标准目录。

在终端中输入以下命令并按回车键:

ls /etc/systemd/

你会看到一个目录和文件列表,类似于以下内容:

journald.conf  logind.conf  networkd.conf  resolved.conf  system  system.conf  timesyncd.conf  user  user.conf

这里最重要的子目录是 /etc/systemd/system。系统范围的单元文件通常会被放置或链接到这个目录。让我们查看一下这个目录的内容。

使用 cd 命令将当前目录更改为 /etc/systemd/system

cd /etc/systemd/system

现在,列出这个目录的内容:

ls

你会看到一个文件和目录列表,其中许多是符号链接 (->),指向位于其他位置(通常是 /lib/systemd/system)的实际单元文件。这就是服务启用或禁用的方式 —— 通过创建或删除这些符号链接。

例如,你可能会看到类似以下的内容:

multi-user.target.wants -> /lib/systemd/system/multi-user.target.wants
sockets.target.wants -> /lib/systemd/system/sockets.target.wants
...

.wants 目录包含指向在达到该目标时应启动的服务的符号链接。例如,multi-user.target.wants 包含指向在系统处于多用户状态(如启动后)时应运行的服务的链接。

让我们查看 multi-user.target.wants 目录的内容。

ls multi-user.target.wants/

你会看到一个在多用户目标中启用启动的服务列表。

anacron.service -> ../anacron.service
apache2.service -> ../../apache2.service
...

这表明 apache2.service 在此处被链接,意味着它已启用,会在多用户目标启动时启动。

探索 /etc/systemd/system 目录有助于你了解 systemd 如何组织和管理系统上的服务。

点击 继续 完成本次实验。

总结

在本次实验中,我们开始探索 Linux 中的 systemd,重点学习了如何判断系统服务是否被“屏蔽(masked)”。屏蔽服务是一种完全禁用服务的方法,可防止其在任何情况下启动。我们学会了使用 systemctl is-masked 命令来检查特定服务的屏蔽状态,发现 apache2 未被屏蔽,而 systemd-udevd-kernel.socket 被屏蔽了。了解服务的屏蔽状态是排查服务启动问题的基础步骤。

接着,我们使用 systemctl list-unit-files 命令,以更全面地了解 systemd 管理的所有单元文件。这些单元文件是代表各种系统资源和服务的配置文件。该命令提供了单元及其状态的完整列表,让你对系统配置有更广泛的了解,而不仅仅局限于单个服务的检查。