简介
在这个实验中,你将学习如何使用 systemd
检查 Linux 系统中的服务是否被屏蔽。屏蔽服务可以防止其启动,这是系统管理和故障排除的关键概念。你将使用 systemctl is-masked
命令检查特定服务的屏蔽状态,并使用 systemctl list-unit-files
命令更全面地查看 systemd 单元文件。最后,你将探索 systemd 配置目录,了解这些设置的存储位置。
在这个实验中,你将学习如何使用 systemd
检查 Linux 系统中的服务是否被屏蔽。屏蔽服务可以防止其启动,这是系统管理和故障排除的关键概念。你将使用 systemctl is-masked
命令检查特定服务的屏蔽状态,并使用 systemctl list-unit-files
命令更全面地查看 systemd 单元文件。最后,你将探索 systemd 配置目录,了解这些设置的存储位置。
在这一步中,我们将开始探索 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 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
:单元的启用状态(例如 static
、enabled
、disabled
、masked
)。以下是一些常见状态的简要说明:
enabled
:该单元被配置为在系统启动时自动启动。disabled
:该单元未被配置为在系统启动时自动启动。static
:该单元不能被启用或禁用,其启动由另一个单元控制。masked
:该单元被完全禁用,无法启动。你可以使用终端的滚动条滚动查看输出,或者将输出通过管道传递给 less
等分页器。例如:
systemctl list-unit-files | less
在 less
中,你可以使用箭头键滚动,按空格键向下翻页,按 q
退出。
这个命令对于查看系统上安装了哪些服务以及它们的启动配置非常有用。
点击 继续 进入下一步。
在前面的步骤中,我们使用 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
管理的所有单元文件。这些单元文件是代表各种系统资源和服务的配置文件。该命令提供了单元及其状态的完整列表,让你对系统配置有更广泛的了解,而不仅仅局限于单个服务的检查。