在运维 Linux 服务器时,经常会遇到这样的问题:
系统里注册了大量 systemd 服务,但其中绝大多数属于操作系统自带组件,而真正由管理员后期安装、配置过的服务却被淹没在其中。
如果无法区分这两类服务,就很难判断哪些服务是业务依赖,哪些是历史遗留或冗余组件。

本文以一台 Ubuntu 服务器为例,系统性地展示如何识别「用户自行安装的服务」,包括正在运行和已经停用但仍然存在的部分。


一、为什么 running 列表不够用

很多人会使用:

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

来查看系统当前运行的服务。
这个命令只能回答一个问题:

“现在有哪些服务在跑?”

但它完全无法反映以下信息:

  • 过去安装过、现在未运行的服务(如 V2Ray、FRP)
  • 被禁用但仍然存在的代理、守护进程
  • 旧环境残留的 unit 文件

因此,仅依赖 running 视图会得出错误结论,例如误以为系统“只有 Apache 和 MySQL”。


二、真正的总清单:所有已注册的服务

systemd 中,所有服务的定义都存放在 unit files 中,可以通过:

systemctl list-unit-files --type=service

获得完整列表。
这个列表显示:

  • 所有 systemd 认识的服务
  • 是否 enabled / disabled / static / masked

在示例服务器中,共列出了 249 个 unit 文件。

但其中绝大多数是 Linux 与 Ubuntu 自带组件(systemd、udev、networkd、fsck、plymouth 等),需要进一步过滤。


三、用服务内容反推系统画像

通过分析 unit 文件,可以反推出这台服务器的历史和用途:

1. Web 与数据库业务

apache2.service
apache-htcacheclean.service
mysql.service
ssl-cert.service
phpsessionclean.service

这是一套典型的 LAMP Web 服务器栈。

2. 代理与内网穿透(管理员自行安装)

v2ray.service
v2ray@.service
frpc.service

这些服务在当前并未运行,但它们的 unit 文件仍然存在,说明该系统曾被用作代理或内网穿透节点。

3. 虚拟机环境

open-vm-tools.service
vgauth.service
vmtoolsd.service

说明系统运行在 VMware 虚拟化环境中,或至少从 VMware 镜像迁移而来。

4. 树莓派生态

rpi-eeprom-update.service

该服务仅在 Raspberry Pi 或其镜像系统中存在,说明系统基于 RPi 生态构建。

5. Ubuntu Cloud / Pro 组件

cloud-init.service
cloud-config.service
cloud-final.service
ubuntu-advantage.service
ua-reboot-cmds.service
ua-timer.service

表明系统来自 Ubuntu cloud 镜像,并启用了 Pro / Advantage 框架。

6. Snap 子系统

snapd.service
snapd.apparmor.service
snapd.seeded.service
snapd.system-shutdown.service
snapd.autoimport.service
snapd.core-fixup.service
…

Snap 是 Canonical 提供的独立包管理体系,它引入了后台守护进程和 loop 挂载设备,并非 Linux 核心组件。


四、什么是“系统自带”,什么是“管理员安装”

在本次分析中,已明确排除了以下类别作为系统自带:

  • 所有 systemd-*
  • 所有 dbus-*
  • 所有 getty*
  • 所有 udev*
  • 所有 networkd / resolved / timesyncd
  • 所有 fsck / initrd / tmpfiles
  • 所有 lvm / mdadm / cryptdisks
  • 所有 wpa_supplicant
  • 所有 avahi / polkit / rsyslog / cron
  • 所有 motd / logrotate / man-db
  • 所有 xfs_scrub / e2scrub

这些构成了操作系统的“骨架”。

剩下的部分,就是该服务器在其生命周期中被人为添加的功能层。


五、这台服务器的真实结构

通过 systemd 服务反推,该服务器并不是一台“纯净 Ubuntu”,而是:

Ubuntu Cloud 镜像

  • VMware 虚拟机
  • Raspberry Pi 生态
  • Apache / MySQL Web 服务
  • 曾启用 V2Ray 与 FRP
  • 启用了 Snap 子系统

这也解释了为什么系统中会同时存在:

  • cloud-init
  • vmtools
  • rpi-eeprom
  • v2ray/frpc
  • snapd

六、结语

systemctl list-units 只能看到“现在在跑什么”,
systemctl list-unit-files 才能看清“这台机器经历过什么”。

对一台长期运行、迁移过环境、承担过多种角色的服务器来说,
真正重要的是识别:

哪些服务是当前业务必须的,
哪些是历史残留,
哪些正在悄悄占用资源或制造不确定性。

这一步,是将系统从“能用”升级为“可控”的关键。

Leave a Reply

Your email address will not be published. Required fields are marked *