Linux 服务管理

LinuxLinuxBeginner
立即练习

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

简介

欢迎参加本次关于 Linux 服务管理的实践实验。Linux 中的服务是处理关键系统功能(如网络连接、日志记录、打印等)的后台进程。高效管理这些服务是 Linux 管理员必备的技能。

在本次实验中,你将学习如何使用 systemctl 命令,它是 systemd 套件的一部分,而 systemd 是大多数现代 Linux 发行版的标准初始化系统和服务管理器。你将练习检查服务状态、通过启动和停止服务来控制它们,以及在系统启动时配置服务行为。

在本次实验结束时,你将掌握 Linux 服务管理的基础知识,从而能够在 Linux 环境中有效控制系统服务。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/InputandOutputRedirectionGroup(["Input and Output Redirection"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/InputandOutputRedirectionGroup -.-> linux/redirect("I/O Redirecting") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") subgraph Lab Skills linux/echo -.-> lab-271377{{"Linux 服务管理"}} linux/cat -.-> lab-271377{{"Linux 服务管理"}} linux/redirect -.-> lab-271377{{"Linux 服务管理"}} linux/service -.-> lab-271377{{"Linux 服务管理"}} end

理解和检查系统服务状态

在这一步中,你将学习如何使用 systemctl 命令检查系统服务的状态。了解服务状态是有效管理服务的第一步。

什么是系统服务?

系统服务(或守护进程)是在后台运行以执行各种系统任务的程序。它们通常在系统启动时启动,并持续运行直到系统关闭。例如,Web 服务器、数据库服务器、SSH 服务器和打印服务等。

检查服务状态

让我们从检查 SSH 服务(sshd)的状态开始,该服务通常用于远程访问 Linux 系统:

  1. 在 LabEx 虚拟机环境中打开一个终端。你应该已经位于默认目录 /home/labex/project

  2. 运行以下命令来检查 SSH 服务的状态:

    systemctl status sshd

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

    ● ssh.service - OpenBSD Secure Shell server
      Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
      Active: active (running) since Wed 2023-10-25 08:15:00 UTC; 1h 30min ago
        Docs: man:sshd(8)
              man:sshd_config(5)
     Process: 1234 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
    Main PID: 1235 (sshd)
       Tasks: 1 (limit: 4915)
      Memory: 5.6M
         CPU: 500ms
      CGroup: /system.slice/ssh.service
              └─1235 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

    此输出提供了有关该服务的重要信息:

    • Loaded:显示服务是否已加载,以及是否已启用在系统启动时启动
    • Active:显示服务当前是否正在运行
    • Process/Main PID:显示服务的进程 ID
    • Memory/CPU:显示资源使用情况
    • Logs:与该服务相关的最近日志条目
  3. 如果你需要检查其他服务的状态,可以将 sshd 替换为该服务的名称。例如,要检查 Apache Web 服务器(如果已安装)的状态:

    systemctl status apache2

列出所有服务

你可以使用以下命令列出系统上的所有服务:

  1. 列出所有活动的服务:

    systemctl list-units --type=service --state=active

    此命令将显示系统上当前所有活动的服务。

  2. 列出所有服务,无论其状态如何:

    systemctl list-units --type=service --all

创建服务列表文件

现在,让我们创建一个文件来存储系统上所有正在运行的服务的列表:

  1. 在当前目录中创建一个名为 services_list.txt 的文件,运行以下命令:

    systemctl list-units --type=service --state=running > ~/project/services_list.txt

    此命令执行 systemctl list-units 并将其输出重定向到项目目录中名为 services_list.txt 的文件。

  2. 验证文件是否已创建并包含数据:

    cat ~/project/services_list.txt

    你应该会看到系统上所有正在运行的服务的列表。

在这一步中,你学习了如何检查服务的状态以及如何创建系统上所有正在运行的服务的列表。这些信息对于了解哪些服务处于活动状态以及它们的配置方式非常有价值。

控制系统服务:启动、停止和重启

在这一步中,你将学习如何启动、停止和重启系统服务。这些操作对于服务维护、故障排除和应用配置更改至关重要。

启动和停止服务

让我们练习控制 SSH 服务:

  1. 首先,检查 SSH 服务的当前状态:

    systemctl status sshd

    注意该服务当前是处于活动状态还是非活动状态。

  2. 现在,停止 SSH 服务:

    sudo systemctl stop sshd

    此命令会立即停止该服务。如果操作成功,此命令不会有输出。

  3. 验证服务是否已停止:

    systemctl status sshd

    输出现在应该显示该服务为“inactive (dead)”:

    ● ssh.service - OpenBSD Secure Shell server
      Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
      Active: inactive (dead) since Wed 2023-10-25 10:15:00 UTC; 5s ago
  4. 再次启动该服务:

    sudo systemctl start sshd
  5. 验证服务是否已启动:

    systemctl status sshd

    输出应该显示该服务再次处于“active (running)”状态。

重启服务

重启服务是一项常见操作,尤其是在更改其配置之后:

  1. 要重启 SSH 服务:

    sudo systemctl restart sshd

    此命令会先停止服务,然后再启动它。

  2. 要验证重启情况,检查服务状态:

    systemctl status sshd

    查看“Active”行,了解服务最后一次启动的时间。

创建服务控制命令参考文件

让我们创建一个包含你所学命令的参考文件:

  1. 在你的项目目录中创建一个名为 service_control.txt 的文件:

    echo "Service Control Commands:" > ~/project/service_control.txt
    echo "Start a service: sudo systemctl start <service_name>" >> ~/project/service_control.txt
    echo "Stop a service: sudo systemctl stop <service_name>" >> ~/project/service_control.txt
    echo "Restart a service: sudo systemctl restart <service_name>" >> ~/project/service_control.txt
  2. 验证文件内容:

    cat ~/project/service_control.txt

在这一步中,你学习了如何通过启动、停止和重启服务来控制它们。这些操作是 Linux 系统中服务管理和维护的基础。

管理服务启动行为:启用和禁用

在这一步中,你将学习如何配置服务在系统启动时是否自动启动。这对于确保系统重启后所需服务无需手动干预即可使用非常重要。

理解服务启动配置

服务可以配置为在系统启动时自动启动(启用),也可以配置为需要手动启动(禁用)。此配置与服务的当前运行状态无关。

检查服务是否已启用

  1. 要检查 SSH 服务是否配置为在系统启动时启动:

    systemctl is-enabled sshd

    输出将是“enabled”(在系统启动时启动)或“disabled”(在系统启动时不启动)。

禁用服务

当你禁用一个服务时,你是在配置它在系统启动时不自动启动:

  1. 禁用 SSH 服务:

    sudo systemctl disable sshd

    你应该会看到一条消息,表明符号链接已被移除:

    Removed /etc/systemd/system/multi-user.target.wants/ssh.service.
  2. 验证该服务现在是否已被禁用:

    systemctl is-enabled sshd

    输出应该是“disabled”。

  3. 请注意,禁用服务并不会停止当前正在运行的服务。检查当前状态:

    systemctl status sshd

    即使该服务现在已被禁用,下次系统启动时不会自动启动,但它可能仍然处于活动状态。

启用服务

当你启用一个服务时,你是在配置它在系统启动时自动启动:

  1. 重新启用 SSH 服务:

    sudo systemctl enable sshd

    你应该会看到一条消息,表明符号链接已被创建:

    Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
  2. 验证该服务现在是否已启用:

    systemctl is-enabled sshd

    输出应该是“enabled”。

组合命令

你还可以在一个命令中组合启用/禁用和启动/停止操作:

  1. 要在一个命令中禁用并停止一个服务:

    sudo systemctl disable --now sshd
  2. 要在一个命令中启用并启动一个服务:

    sudo systemctl enable --now sshd

创建服务启动配置参考文件

让我们创建一个包含你所学命令的参考文件:

  1. 在你的项目目录中创建一个名为 service_boot.txt 的文件:

    echo "Service Boot Configuration Commands:" > ~/project/service_boot.txt
    echo "Check if a service is enabled: systemctl is-enabled <service_name>" >> ~/project/service_boot.txt
    echo "Enable a service to start at boot: sudo systemctl enable <service_name>" >> ~/project/service_boot.txt
    echo "Disable a service from starting at boot: sudo systemctl disable <service_name>" >> ~/project/service_boot.txt
    echo "Enable and immediately start a service: sudo systemctl enable --now <service_name>" >> ~/project/service_boot.txt
    echo "Disable and immediately stop a service: sudo systemctl disable --now <service_name>" >> ~/project/service_boot.txt
  2. 验证文件内容:

    cat ~/project/service_boot.txt

在这一步中,你学习了如何通过启用和禁用服务来管理服务的启动行为。这对于配置哪些服务在系统启动时自动启动至关重要,可确保必要的服务可用,同时避免不必要的服务消耗资源。

总结

在本次实验中,你学习了使用 systemctl 命令进行 Linux 服务管理的基础知识。你练习了每个 Linux 管理员都应该掌握的基本技能:

  1. 检查服务状态:你学习了如何查看服务的当前状态,这对于监控和故障排除至关重要。
  2. 控制服务:你练习了启动、停止和重启服务,这些都是进行维护和配置更改所需的基本操作。
  3. 管理启动行为:你学习了如何在系统启动时启用和禁用服务,从而可以控制哪些服务在重启后自动运行。

这些技能为在 Linux 环境中进行有效的服务管理奠定了基础。随着你继续使用 Linux 系统,你会发现这些命令对于维护系统稳定性和性能至关重要。

请记住,正确的服务管理对于系统安全、资源优化以及确保必要功能在需要时可用至关重要。你在本次实验中获得的知识将为更高级的 Linux 管理任务打下基础。