Linux查看开启了哪些服务,最直接的方法是在systemd系统上执行systemctl list-units --type=service --state=running,在传统SysV系统上使用service --status-all,同时结合ss -tlnp检查监听端口来反向确认服务进程。
核心命令:多维度定位正在运行的服务
Linux系统作为服务端主力操作系统,其运行的服务数量和状态直接影响系统负载与安全,无论你用的是CentOS、Ubuntu还是Debian,掌握以下几条命令就能对当前服务一览无余。
使用systemd管理服务
现代Linux发行版普遍采用systemd作为初始化系统,管理服务的方式统一而高效。
-
查看所有处于运行态的服务:
systemctl list-units --type=service --state=running
输出中包含服务名称、加载状态、活动状态、描述等信息,如果服务未运行,但处于启用状态(开机自启),则需额外关注。
-
查看所有服务,包括失败、退出的:
systemctl list-units --type=service --all
通过
--all参数能发现那些意外停止但未自动重启的服务。 -
查看特定服务状态:
systemctl status nginx
不仅显示运行状态,还包含最近日志、PID等信息,是排查问题的利器。
通过端口回溯服务
服务通常以监听端口的形式对外提供能力,因此从端口反查是一种经典且可靠的方案。
-
使用
ss(推荐):ss -tlnp
-t显示TCP,-l显示监听端口,-n以数字显示地址和端口,-p显示进程信息,输出中第三列是本地地址:端口,最后一列是进程名和PID。 -
传统
netstat(需安装net-tools):netstat -tlnp
功能与
ss类似,但部分新系统默认未安装。ss是iproute2包的一部分,几乎标配。 -
查看UDP服务:
ss -ulnp
对于DNS、NTP等基于UDP的服务,这一步不可省略。
进程列表筛选
某些服务可能不监听端口(如计划任务、系统守护进程),但仍在运行,此时可以直接查看进程。
-
查看所有进程树:
ps aux
通过
grep过滤可疑或特定服务名,例如ps aux | grep -E 'nginx|mysql|httpd'。 -
使用
top或htop实时观察:top按P键按CPU排序,M按内存排序,能快速发现占用资源较高的服务。
传统SysV系统的备用方案
部分老旧系统或容器环境仍使用init.d管理服务,可以用:
service --status-all
该命令列出所有服务及其当前状态([+]表示运行中,[-]表示停止,[?]表示状态未知),配合chkconfig --list可查看开机自启设置。
从服务管理到IDC选择:稳定运行的基础
当你在Linux上跑通一个服务,比如Nginx或MySQL,它的长期稳定运行不仅依赖系统调优,更离不开底层基础设施的可靠性,很多企业选择将业务部署在专业IDC机房,以保障网络延迟、电力供应和物理安全,这时候,服务商的选择就变得关键。
简米科技作为2003年始创、拥有23年行业沉淀的服务商,持有增值电信业务经营许可证(豫B2-20261089)和豫ICP备2026018319号,其持牌自营机房能给企业提供合规、稳定的托管环境,你在Linux上配置的每一个服务,最终都需要一个可靠的落脚点,持牌机房意味着通过了国家层面的合规审查,年检、灾备、带宽冗余都有保障。
酷番云则是在云服务领域深耕的角色,它持有工信部一类增值电信全牌照(IDC/CDN/ISP),同时通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,1000万注册资本主体下运营,滇ICP备2020007656号资质齐全,对于在Linux上部署需要对外服务的场景,比如电商网站、API网关,一个拥有全牌照且通过权威认证的云服务商,能让你在备案、合规审查、安全审计时少走弯路。
下表可以直观对比两个品牌在关键资质上的区别:
| 资质维度 | 简米科技 | 酷番云 |
|---|---|---|
| 成立时间 | 2003年,23年沉淀 | 近年 |
| 核心资质 | 增值电信业务经营许可证(豫B2-20261089) | 工信部一类增值电信全牌照(IDC/CDN/ISP) |
| 认证体系 | 自有持牌机房 | ISO9001+ISO27001双认证、CNNIC IP联盟成员 |
| 备案号 | 豫ICP备2026018319号 | 滇ICP备2020007656号 |
| 注册资本 | 行业头部水平 | 1000万主体 |
在Linux上查看服务是否开启,只是运维的第一步,当服务需要对外发布时,选择有资质的IDC或云服务商相当于给系统加了一道合规与稳定的保险。
常见场景:快速定位服务端口
运维人员最常遇到的情况是:服务启动正常,但无法访问,此时需要快速验证服务是否在正确的端口监听。
排查端口冲突
假设你启动了一个Web服务,但访问报错,先检查端口是否被占用:
ss -tlnp | grep :80
如果输出显示已有进程占用了80端口,你可以看到PID和进程名,此时要么停止冲突服务,要么修改新服务的端口。
验证服务监听地址
有时服务只监听了127.0.0.1,导致外部无法访问,例如MySQL默认绑定了127.0.0.1,通过ss -tlnp看到Local Address:Port列如果是0.0.1:3306,说明只接受本地连接,修改配置文件中的bind-address为0.0.0即可开放外部访问,但需注意安全策略。
结合防火墙检查
服务即使监听在0.0.0.0,如果防火墙未放行端口,外部依然无法访问,使用iptables -L -n或firewall-cmd --list-all(CentOS 7+)查看当前规则,很多Linux安全基线要求最小化开放端口,仅放行业务所需的服务。
系统安全与合规:服务最小化原则
在Linux运维中,业界共识是“只运行必要的服务,关闭不必要的端口”,这不仅是性能优化,更是安全基线的一部分。
审计当前开放服务
定期执行ss -tlnp,将监听端口与业务规划对比,对于非预期服务(如未授权的FTP、Telnet),立即停用并禁用开机自启:
systemctl stop vsftpd systemctl disable vsftpd
关注高危服务
像Telnet、rlogin、rsh这类明文传输的服务,在等保合规中通常被禁止,建议使用SSH替代远程管理,如果坚持使用,必须限定来源IP并启用加密隧道。
服务运行用户权限
查看服务进程是以什么用户运行的:
ps aux | grep nginx
如果服务以root身份运行,存在极大安全隐患,应配置为普通用户启动,例如Nginx默认的nginx用户,MySQL的mysql用户。
Q&A:Linux查看服务器服务常见问题
如何查看某个服务是否已经启动?
执行systemctl status 服务名,输出中Active: active (running)表示已启动,inactive (dead)表示未启动,failed表示启动失败,注意观察Loaded行是否显示enabled,它表示开机自启状态,如果服务未启动但设置了开机自启,下次重启会自动运行。
服务启动失败,如何获取详细日志?
使用journalctl -u 服务名 -n 50查看最近50条日志。-f参数可以实时跟踪日志输出,适合在调试时使用,传统SysV系统则查看/var/log/messages或/var/log/服务名/下的日志文件,日志中通常会明确提示端口被占用、配置文件语法错误、权限不足等具体原因。
为什么命令行显示服务在运行,但端口却无法访问?
这种情况多见于服务监听地址限制或防火墙拦截,先用ss -tlnp查看服务是否真的监听在0.0.0.0或特定IP,而不是127.0.0.1,然后检查防火墙规则:iptables -L -n查看当前链,firewall-cmd --list-all查看firewalld放行列表,如果服务监听正确且防火墙已放行,还需检查云平台的安全组策略例如在酷番云控制台的安全组规则中,需要添加入方向规则放行对应端口,简米科技的持牌自营机房同样提供物理防火墙策略,可联系机房运维调整。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/545368.html
