
昨天凌晨2点,我运维的香港服务器 CPU 使用率飙升到了 100%,网络带宽也出现了莫名的占用。登录系统后,我发现几个不常用的服务居然在后台运行,占据了大量资源。
作为一名 DevOps 工程师,我深知“少即是多”的道理。Linux 系统默认会启动很多服务,其中一部分并非我们业务所需,甚至在某些场景下可能带来安全隐患。因此,我决定彻底梳理系统服务,并永久禁用那些“不该存在”的进程。这篇文章就是我在排查、停用、禁用这些服务过程中的完整实操记录。
一、前置准备:识别正在运行的服务
我们首先要明确:当前系统有哪些服务正在运行?哪些是必须的?哪些是不需要的?
1. 查看所有活跃服务(基于 systemd 系统)
systemctl list-units --type=service --state=running
这个命令会列出所有正在运行的服务。输出中重点关注那些你不熟悉的服务名,例如 avahi-daemon.service、cups.service、bluetooth.service 等,这些通常用于桌面环境,在服务器上并不常用。
2. 查看所有已启用的服务(开机自启)
systemctl list-unit-files --type=service | grep enabled
配合前一条命令可以判断:哪些服务是“当前正在运行且设为开机自启”的,我们可以优先处理这些。
二、实际操作:停止并禁用不需要的服务
我们以 cups.service(打印服务,服务器中基本用不到)为例,执行停用流程:
1. 停止服务(当前生效)
sudo systemctl stop cups.service
这一步立即终止服务运行。
2. 禁用服务(下次启动不再自动运行)
sudo systemctl disable cups.service
这个操作会移除开机启动项,确保下次重启不会再次激活该服务。
3. 若彻底移除(可选)
sudo apt purge cups -y # Debian/Ubuntu
sudo yum remove cups -y # RHEL/CentOS
如果你确认永远不需要该服务,可以将其完全卸载。
三、批量操作技巧:一次性禁用多项服务
有些服务器启动了多个无用服务,我们可以批量处理。以下是我用过的一段 Bash 脚本,用于停用多个目标服务:
#!/bin/bash
# unwanted-services.sh
services=(
"cups.service"
"avahi-daemon.service"
"bluetooth.service"
"ModemManager.service"
)
for svc in "${services[@]}"; do
echo "Stopping and disabling $svc ..."
systemctl stop "$svc"
systemctl disable "$svc"
done
执行方式:
chmod +x unwanted-services.sh
sudo ./unwanted-services.sh
四、附加说明:如何防止服务被意外重新启动
有些服务即使被停用,在依赖更新或某些错误操作下可能会重新启用。为避免这种情况,可以使用 mask:
sudo systemctl mask bluetooth.service
这会将该服务链接到 /dev/null,彻底阻止它被启动。若以后想恢复,可以:
sudo systemctl unmask bluetooth.service
五、验证结果:确保服务状态已改变
使用以下命令确认服务状态:
systemctl is-active cups.service # inactive
systemctl is-enabled cups.service # disabled
六、附录:常见可禁用服务列表(仅供参考)
| 服务名 | 功能说明 | 适合禁用的场景 |
|---|---|---|
| cups.service | 打印服务 | 无打印需求的服务器 |
| avahi-daemon.service | 本地网络发现协议 | 无局域网广播需求 |
| bluetooth.service | 蓝牙连接 | 无蓝牙设备 |
| ModemManager.service | 管理拨号调制解调器 | 固定网络服务器 |
| rpcbind.service | NFS 和 RPC 支持 | 未启用相关功能 |
| snapd.service | Snap 应用管理 | 无使用 Snap 应用 |
⚠️ 请务必根据你系统实际应用场景判断是否禁用,某些服务可能是依赖组件的一部分。
七、小服务,大安全
这次停用无用服务的经历让我意识到:系统最可怕的不是“明显的异常”,而是“沉默的隐患”。通过逐一梳理和管理服务,我的系统空闲资源大幅提升,潜在攻击面也被有效收缩。
以下是对 “停止并禁用 Linux 系统中不需要的服务” 教程的补充,分别针对 Ubuntu 22.04 与 CentOS 7 的差异化操作细节与注意事项,方便你在不同发行版上精准实施:
八、Ubuntu 22.04 操作细节
Ubuntu 22.04 默认使用 systemd,但其生态中仍保留了一些特有服务管理工具(如 service 命令、snap 框架)。以下是具体建议:
1. 服务管理建议使用 systemctl 替代 service
尽管 service 命令依然存在,但推荐统一使用 systemd 方式:
sudo systemctl stop apache2.service
sudo systemctl disable apache2.service
2. 移除 Snap 服务(若未使用)
Ubuntu 22.04 默认启动 snapd.service 和多个 Snap 应用的后台服务(如 snapd.apparmor.service)。如果你不使用 Snap 应用(如 Firefox Snap 版),可考虑彻底移除:
sudo systemctl stop snapd.service
sudo systemctl disable snapd.service
sudo apt purge snapd -y
⚠️ 注意:Snap 相关服务依赖深,如卸载前需确认无必要组件依赖 Snap。
3. 常见可安全禁用服务
| 服务名 | 默认状态 | 是否可禁用 | 禁用命令 |
|---|---|---|---|
bluetooth.service |
已启用 | ✅ 是 | systemctl disable --now bluetooth.service |
avahi-daemon.service |
已启用 | ✅ 是 | systemctl disable --now avahi-daemon.service |
cups.service |
已启用 | ✅ 是 | systemctl disable --now cups.service |
snapd.service |
已启用 | ⚠️ 需确认 | 见上文 Snap 部分 |
九、CentOS 7 操作细节
CentOS 7 同样使用 systemd,但其包管理系统为 yum(非 apt),默认服务集与 Ubuntu 有较大差异。
1. 使用 systemctl 停止和禁用服务
标准命令与 Ubuntu 类似:
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
2. 卸载服务使用 yum
以禁用并卸载 cups 服务为例:
sudo yum remove cups -y
3. firewalld 和 NetworkManager 注意事项
在 CentOS 7 服务器上,如果你使用的是 iptables 或已配置固定网络,以下两个服务可考虑禁用:
- firewalld.service(前提是已手动配置防火墙或仅内网使用)
- NetworkManager.service(如果是用 ifcfg-ethX 静态配置)
禁用示例:
sudo systemctl disable --now NetworkManager.service
4. 常见可禁用服务推荐
| 服务名 | 默认状态 | 是否可禁用 | 禁用命令 |
|---|---|---|---|
cups.service |
启用 | ✅ 是 | systemctl disable --now cups.service |
bluetooth.service |
启用 | ✅ 是 | systemctl disable --now bluetooth.service |
ModemManager.service |
启用 | ✅ 是 | systemctl disable --now ModemManager.service |
firewalld.service |
启用 | ⚠️ 需评估 | systemctl disable --now firewalld.service |
NetworkManager.service |
启用 | ⚠️ 需评估 | systemctl disable --now NetworkManager.service |
⚠️ 务必在网络配置手动完成的前提下禁用 NetworkManager,否则可能会导致网络中断。
| 操作项 | Ubuntu 22.04 | CentOS 7 |
|---|---|---|
| 包管理器 | apt |
yum |
| 默认网络服务 | netplan + NetworkManager |
network + NetworkManager |
| 可安全禁用服务 | cups, avahi, snapd, bluetooth |
cups, bluetooth, ModemManager |
| 服务管理命令 | systemctl |
systemctl |
| 开机启动配置路径 | /etc/systemd/system/ |
/usr/lib/systemd/system/ |
以下是 基于特定发行版的完整服务清单禁用脚本,我分别为 Ubuntu 22.04 和 CentOS 7 提供了版本,适合用于初步系统瘦身或生产环境中关闭无用服务。你可以根据业务实际情况增删服务项。
十、Ubuntu 22.04 – 批量禁用常见无用服务脚本
适用于无桌面环境、纯服务器用途场景。脚本使用 systemctl 批量关闭并禁用部分默认启用但非必要的服务。
#!/bin/bash
# disable-unwanted-services-ubuntu2204.sh
# Ubuntu 22.04 常见可禁用服务列表
services=(
bluetooth.service
cups.service
avahi-daemon.service
ModemManager.service
snapd.service
ufw.service # 替换为 iptables 的用户可以关闭它
)
echo "⏳ 开始禁用以下 Ubuntu 22.04 服务..."
for svc in "${services[@]}"; do
if systemctl list-units --full -all | grep -q "$svc"; then
echo "🔧 停止并禁用: $svc"
systemctl stop "$svc"
systemctl disable "$svc"
systemctl mask "$svc"
else
echo "⚠️ 服务不存在: $svc(已跳过)"
fi
done
echo "✅ 所有目标服务已处理完毕。"
执行方式:
chmod +x disable-unwanted-services-ubuntu2204.sh
sudo ./disable-unwanted-services-ubuntu2204.sh
十一、CentOS 7 – 批量禁用常见无用服务脚本
适用于企业版 Linux(RHEL 7/CentOS 7)的服务器场景:
#!/bin/bash
# disable-unwanted-services-centos7.sh
# CentOS 7 常见无用服务
services=(
bluetooth.service
cups.service
avahi-daemon.service
ModemManager.service
NetworkManager.service # 如已配置 network-scripts 静态IP
firewalld.service # 如改用 iptables 或处于可信内网
)
echo "⏳ 正在批量停用 CentOS 7 的无用服务..."
for svc in "${services[@]}"; do
if systemctl list-units --full -all | grep -q "$svc"; then
echo "🔧 停止并禁用: $svc"
systemctl stop "$svc"
systemctl disable "$svc"
systemctl mask "$svc"
else
echo "⚠️ 服务不存在: $svc(已跳过)"
fi
done
echo "✅ 所有服务已完成处理。"
🔒 加固建议:设置不可被激活
如需彻底防止服务被错误启用(即便通过依赖激活),请保留 mask 命令:
systemctl mask servicename.service
要恢复:
systemctl unmask servicename.service
📝 温馨提示
不要盲目禁用所有“你不认识的服务”,关键服务如 cron, ssh, rsyslog, systemd-logind 等必须保留。
建议在测试环境先运行,确保系统无副作用再部署到生产。
可结合 chkservice(图形化 TUI 工具)手动确认哪些服务已启用。











