全新安裝的 Linux 系統預設啟動數十個後台服務,許多對特定用途 (如純 Web 伺服器、嵌入式裝置、桌面工作站) 並非必要。停用無用服務能降低記憶體佔用、減少攻擊面、縮短啟動時間。
# systemd
systemctl list-unit-files --type=service --state=enabled
systemctl list-units --type=service --state=running
# SysVinit
chkconfig --list | grep '3:on'
ls /etc/rc3.d/S*
systemctl cat servicename、man servicename、搜尋套件說明。| 服務 | 功能 | 建議停用場景 |
|---|---|---|
| cups | 列印服務 | 無列印機的伺服器/嵌入式 |
| bluetooth | 藍牙堆疊 | 無藍牙硬體的桌面/伺服器 |
| avahi-daemon | mDNS/Zeroconf | 不需服務自動發現的環境 |
| ModemManager | 數據機管理 | 無 3G/4G 模組的裝置 |
| postfix/sendmail | 郵件傳輸代理 | 非郵件伺服器 (改用外部 SMTP) |
| nfs-server/rpcbind | NFS 分享 | 不提供 NFS 服務 |
| samba/smbd/nmbd | SMB/CIFS 分享 | 不提供 Windows 分享 |
| chronyd/ntpd | 時間同步 | 已有硬體時鐘/外部 NTP (保留一個即可) |
| auditd | 審計守護程式 | 非合規要求環境 (高負載影響效能) |
| abrtd | 自動錯誤回報 | 生產環境已有集中監控 |
| packagekit | 軟體更新守護程式 | 手動管理更新的伺服器 |
# systemd
systemctl stop servicename
systemctl disable servicename
systemctl mask servicename # 徹底禁用,防止被其他單元拉起
# SysVinit
service servicename stop
chkconfig servicename off
systemd-analyze blame # 啟動耗時排序
systemd-analyze critical-chain # 關鍵路徑
free -h # 記憶體使用
ps aux --sort=-%mem | head # 佔用記憶體前列進程
systemctl list-unit-files --state=enabled > enabled.bak。精簡服務不是盲目關閉,而是依據角色建立標準化「最小啟動集」,納入基礎鏡像構建流程,實現基礎設施即代碼的安全基線。