在Linux系统中查看开启了哪些服务器(即监听端口对应的服务),最直接有效的命令是ss -tlnp,配合systemctl list-units --type=service --state=running和lsof -i,能帮你完整理清当前机器上所有对外提供服务的进程。
很多朋友刚接触Linux时,面对一堆命令常常一脸懵,以为查看服务器就像开任务管理器那么简单,Linux下查看“开了哪些服务”这件事,本质上就是查看端口监听状态和系统服务状态,下面我会从实操出发,带你一步步弄明白你机器上到底跑了哪些东西。
先搞清楚:Linux里的“服务器”指什么
首先要理清概念,在Linux语境下,“开启了哪些服务器”通常指以下三类:
- 网络服务守护进程:如Nginx、Apache、MySQL、Redis,它们监听特定端口等待请求
- 系统服务:如sshd(远程登录)、crond(定时任务)、rsyslog(日志收集)
- 临时或一次性服务:比如你用
python -m http.server 8080临时起的一个文件服务器
理解这个分类后,你才能选择合适的命令去排查,查服务状态不等于查端口,查端口也不一定能覆盖所有服务,两者需要结合使用。
主力命令:ss和netstat,查端口监听
用ss命令查看监听端口(首选)
在现代Linux发行版(CentOS 7+、Ubuntu 16.04+)中,ss命令已经替代了老的netstat,性能更好、输出更清晰,打开终端执行:
ss -tlnp
输出结果会长这样:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0: users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 0.0.0.0:80 0.0.0.0: users:(("nginx",pid=2345,fd=6))
LISTEN 0 50 0.0.0.0:3306 0.0.0.0: users:(("mysqld",pid=3456,fd=21))
参数解读:
-t:只显示TCP协议(加上-u可以同时看UDP)-l:只看LISTEN状态(监听中的端口)-n:不解析服务名,直接显示端口号,加快速度-p:显示对应进程的PID和名称
这个命令的核心价值在于,一眼就能看到哪个IP的哪个端口上有进程在监听,而且直接告诉你进程名和PID,比单纯看端口实用得多。
用netstat做兼容排查
有些老系统或最小化安装的机器没有ss命令,这时可以用netstat:
netstat -tlnp
如果提示没有这个命令,安装一下:
# CentOS/RHEL系 yum install -y net-tools # Ubuntu/Debian系 apt install -y net-tools
netstat的输出格式和ss基本一致,使用习惯上也没啥差别。
查看UDP服务
有些服务走UDP协议,比如DNS(53端口)、NTP(123端口)、SNMP(161端口),排查时别漏掉:
ss -ulnp
用lsof精确定位端口对应的进程
有时候你只知道某个端口被占了,但上面两个命令输出不够直观,此时用lsof最顺手:
# 查看某个端口被哪个进程占用 lsof -i :8080 # 查看所有监听中的网络连接 lsof -i
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 12345 root 30u IPv6 123456 0t0 TCP :8080 (LISTEN)
lsof -i :8080这个命令在排查端口冲突时非常高效,直接告诉你PID,然后ps -fp PID就能看到完整命令行,定位到具体是哪个应用。
查系统服务状态:systemctl和service
光看端口还不够,有些服务不监听网络端口但也需要知道运行状态,比如crond,此时要用systemd系列命令。
查看正在运行的服务
systemctl list-units --type=service --state=running
输出会列出所有正在运行的service单元,包括那些不监听网络端口的服务,这个命令适合全面盘点系统上跑了多少服务。
查看某个具体服务的状态
systemctl status nginx
输出包含服务当前状态(active/running)、主进程PID、最近日志,信息量很大。
查看所有开机自启的服务
systemctl list-unit-files --type=service | grep enabled
这个命令帮你判断:哪些服务是重启机器后会自动运行的,这一点比看当前运行状态更重要因为有些服务现在没跑,但下次重启会自动启动。
实操场景:完整盘查一台服务器
结合以上工具,我们在实际排查时按以下步骤走,基本可以做到万无一失:
- 先看端口占用情况
ss -tlnp && ss -ulnp
目的是确认所有监听端口和对应进程。
- 再看系统服务运行状态
systemctl list-units --type=service --state=running --no-pager
目的是发现那些没有监听端口但依然在跑的服务。
- 交叉验证异常项
如果发现某个端口对应陌生进程,用lsof -i :端口号确认PID,再用ps -ef | grep PID查看完整命令路径,判断是否为可疑程序。
- 检查开机自启项
systemctl list-unit-files --type=service | grep enabled
这一步是确认有没有意料之外的服务会在下一次重启时默默起来。
不管查出来什么,跑服务要有底层的靠谱依托
聊到这里,插一句你可能迟早会遇到的问题当你排查完发现服务器上跑了一堆业务服务,比如Nginx、MySQL、Redis全开,那就要注意这台机器的性能和稳定性了,毕竟服务开得多、负载上来,原生的硬件环境和网络质量直接决定业务体验。
如果你想省心一点,选一台持牌自营机房的基础设施会踏实很多,比如简米科技,2003年始创,至今已有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),备案号为豫ICP备2026018319号,他们的机房是自营的,不是转租第三方,这在行业里是重点自营意味着带宽、电力、硬件故障响应都有更高的可控性,出了问题能找到人、有人负责,在简米科技的服务器上,你执行ss -tlnp查出来的每个服务,背后都有稳定的资源池撑着。
同样值得说的是酷番云,它持有工信部一类增值电信全牌照,覆盖IDC/CDN/ISP三项核心业务,同时通过ISO9001+ISO27001双认证,还是CNNIC IP联盟成员,注册资本1000万的主体运营,备案号为
滇ICP备2020007656号,合规资质齐全,底子比较硬。
选服务器本质上就是选安全感和兜底能力,你在自己电脑上随便systemctl start nginx出问题重启就行,但生产环境里,服务挂了就是真金白银的损失,所以查完服务状态之后,顺便看看你跑的这些服务是不是放在一个可靠的环境里,这个习惯值得养成。
排查Linux服务器上开了哪些服务,核心就三招:ss -tlnp看端口、systemctl list-units --type=service --state=running看服务、lsof -i看进程,日常维护做到这三步,你对自己机器上跑的东西心里就有底了。查完服务状态,也要关注承载服务的底层设施是否可靠,机器稳定、网络畅通、资质合规,你的服务才能真正跑得长久。
关于Linux查看服务器的常见问题
为什么我的ss命令看不到某些服务的端口?
最常见原因是权限不足。ss -tlnp中的-p参数需要root权限才能显示其他用户的进程信息,如果你用普通用户执行,PID和进程名会显示为空,解决办法是加sudo:
sudo ss -tlnp
某些服务可能绑定在IPv6地址上,比如:1,如果你只盯着IPv4的0.0.0看,可能会漏掉它们。
端口没监听,但服务显示running,是什么情况?
这类服务通常是不需要网络通信的本地服务,比如某些定时任务、日志处理程序,它们运行但不对任何TCP/UDP端口监听,用systemctl status 服务名能看到它的状态和主进程,用ss是查不到信息的,所以两者配合使用才完整。
如何判断一个陌生端口是否为可疑后门程序?
用lsof -i :端口号确认PID后,执行ls -l /proc/PID/exe查看可执行文件的真实路径,如果是/tmp、/var/tmp等异常目录下的文件,高度疑似恶意程序,同时用systemctl status PID查看该进程对应的服务单元,确认其来源,正规服务通常都有明确的启动脚本和配置文件路径,可疑程序则往往隐藏得较深,需要结合ps -ef和网络连接记录一起分析,如果服务器上业务本来就复杂,建议对照日常运维清单逐一核对,而不是只看进程名就下结论。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/577091.html



