查看Linux服务器网络端口号,最高效直接的方式是使用ss -tlnp命令,它能清晰列出所有TCP监听端口及占用进程,而netstat和lsof则是互补的常用工具。
在实际运维中,你面临的往往不是“不知道命令”,而是“命令输出看不懂”或“查出来了不知道下一步该干什么”,以下内容会从基础命令到实战排查,帮你建立起一套完整的端口查看与问题处理思路。
linux查看端口占用情况命令有哪些核心工具
Linux环境下查看端口,绕不开三个核心命令:ss、netstat和lsof,三者的原理和适用场景有明确区分,掌握它们之间的差异,能让你在不同服务器环境下都能游刃有余。
ss命令:当代服务器查看监听端口的第一选择
ss是iproute2工具包的一部分,数据直接从内核的socket表读取,速度极快,输出信息也比netstat更完整,在较新版本的CentOS、Ubuntu、Debian系统中,ss命令默认可用。
基础用法:查看所有监听中的TCP端口
ss -tlnp
这段命令的含义是:
-t:仅显示TCP连接-l:仅显示正在监听的socket-n:以数字形式显示端口和IP,不解析服务名-p:显示占用端口的进程PID和名称
输出结果中,State列为LISTEN的就是服务器正在监听的端口,Local Address:Port列显示的是本机IP和端口号,Process列对应具体进程,例如输出0.0.0:8080代表在所有网卡上监听8080端口,0.0.1:3306仅允许本机访问。
如果你想同时查看UDP端口,只需将-t换成-u,对于排查linux服务器端口占用问题,ss -tlnp给出的信息已经足够精确。
netstat命令:老牌工具在排查网络连接时依然可靠
netstat是传统网络工具包net-tools中的经典命令,虽然在新系统中默认未安装,但只要执行yum install net-tools或apt install net-tools即可使用,它的优势在于,输出格式直观,很多老运维习惯用它。
查看所有端口及服务状态的完整命令:
netstat -antp
参数说明:
-a:显示所有连接和监听端口-n:不解析域名,直接显示IP-t:TCP协议-p:显示进程
对比ss,netstat能同时显示已建立的连接(ESTABLISHED)和等待的连接(TIME_WAIT、CLOSE_WAIT),在分析如何查看linux端口是否连通以及连接状态是否健康时,netstat的输出更加直观。
lsof命令:从进程反向定位端口,排查疑难杂症
lsof(List Open Files)不是专门的网络工具,但Linux中一切皆文件,socket也是文件,它的核心价值在于:当你已经知道是哪个进程占用了资源,却不知道它开了哪些端口时,用lsof可以一举抓获,排查linux查看端口监听 netstat lsof这类问题时,lsof往往能提供意外线索。
按端口查进程:
lsof -i:8080
按进程查端口:
lsof -i -P | grep nginx
-i表示列出所有网络连接,-P禁用端口名解析,这条命令会完整展示nginx进程所监听的每一个端口及其IP绑定情况。
以下是三种工具的特性对比,你可根据具体场景选用:
| 工具 | 核心优势 | 适用场景 | 是否默认安装 |
|---|---|---|---|
| ss | 速度快,信息全,内核直读 | 日常端口状态查看、监听确认 | 多数新系统自带 |
| netstat | 连接状态分类清晰,兼容性强 | 排查TCP连接异常、状态分析 | 部分系统需要手动安装 |
| lsof | 按进程/文件反查端口 | 定位进程占用的所有端口 | 需单独安装 |
对于刚接触Linux服务器的用户,优先记住ss -tlnp,行业共识认为,ss命令在输出效率和对内核状态的表现力上,已经全面超越了netstat。
如何查看linux端口是否连通与监听状态
查看端口号只是第一步,你真正关心的是服务是否可用、邻居或外部访问方是否能连上,这需要分两层来看:本地监听状态和外部连通性。
本地监听状态深度解读:分清LISTEN和ESTABLISHED
本地执行ss -tlnp看到端口出现在LISTEN状态,只代表服务已经启动并绑定端口,但它是否真正对外提供服务,还要看绑定的IP地址。
- 绑定0.0.0.0:监听所有IPv4地址,外网IP可以访问,这是绝大多数服务(如nginx、tomcat)的默认配置。
- 绑定127.0.0.1:仅监听本机回环地址,外网和局域网其他机器无法访问,常用于数据库(如MySQL)的安全配置,只允许本机应用调用。
- 绑定具体内网IP:仅在该网卡的IP地址上监听,适合多网卡服务器的定向暴露。
当你在本地执行测试时,可以使用telnet命令模拟客户端请求验证服务响应:
telnet 127.0.0.1 3306
如果端口已开放,屏幕会显示连接成功提示以及数据库的版本信息;如果连接拒绝,则说明服务未启动或端口被防火墙拦截。
从外部验证端口连通性:本地通不等于外部通
很多运维新手常犯一个错误,在服务器上ss查看端口明明在监听,但用户反馈“网页打不开”,此时需要从外部视角检查。
使用nc(netcat)探测外网端口
在你自己的电脑(非服务器)上执行:
nc -vz 服务器公网IP 端口号
-v显示详细过程,-z表示只扫描不发送数据,连接成功会返回open或succeeded,失败则提示timed out或refused。
检查云平台安全组规则
国内云服务器厂商的弹性IP都默认有防火墙安全组,即使系统内防火墙已关闭,安全组未放行对应端口,外部机器依然无法访问,你需要登录云控制台,在“安全组”配置中添加入方向规则,放行TCP端口。
系统内防火墙状态确认
对于CentOS 7以上版本,执行以下命令检查firewalld是否放行端口:
systemctl status firewalld firewall-cmd --list-ports
对于Ubuntu系统,则检查iptables规则:
iptables -L -n
一个端口从服务进程启动到真正可以被公网访问,链条是:进程绑定端口 → 系统防火墙放行 → 云平台安全组放行,任何一环缺失,都会导致端口不通。
实战场景:线上服务器端口异常如何快速定位
启动服务时提示端口已被占用
这是最常见的报错,比如你启动Tomcat时提示Port 8080 was already in use,按照以下步骤逐步处理:
第一步:找到占用8080端口的进程
ss -tlnp | grep 8080
输出结果最后一列会显示users:(("java",pid=12345,fd=188)),此时你知道了PID是12345,进程名是java。
第二步:确认该进程是否为已知业务
执行ps aux | grep 12345查看完整命令行,确认是另一个业务实例重复启动,还是残留的后台进程。
第三步:针对性处理
- 如果是残留进程:
kill -9 12345强制终止,然后重新启动业务服务 - 如果是业务需要换端口:修改应用配置文件,将端口改为空闲端口,再重启服务
服务器连接数异常增多,排查对外建立的端口连接
当你发现服务器负载异常,疑似被扫描或攻击时,需要查看当前对外建立的连接情况:
ss -ant | grep ESTABLISHED
或者按连接状态统计数量:
ss -ant | awk '{print $1}' | sort | uniq -c
输出中如果出现大量SYN_RECV状态,说明可能有SYN Flood攻击;大量TIME_WAIT则说明短连接请求量很大,属于高并发后的正常现象,你可以根据来源IP的分布,结合ss -ant | grep ESTABLISHED | awk '{print $4}'按端口汇总,找出异常流量集中在哪个端口上。
查看某个端口是哪个程序在监听,避免误杀进程
有时候端口被占用了,你不敢轻易kill进程,这时用lsof确认程序路径,再判断是否可以处理:
lsof -i:8080
输出中的COMMAND、PID、NAME字段能明确告诉你,该端口属于什么程序,具体绑定在哪个网卡上,如果发现属于系统核心服务(如sshd的22端口),则需要谨慎核对后再行动。
核心误区:端口未在列表出现但业务正常,是怎么回事
有时你执行ss -tlnp,发现某个应用的配置端口居然不在LISTEN列表中,但应用访问正常,这个现象通常涉及以下原因:
- 端口类型为UDP而非TCP:
ss -tlnp只查TCP,dnsmasq、ntpd等UDP服务需要ss -ulnp查看。 - 进程通过IPv6监听:如果程序只监听了
[::]:8080,而你的查看过滤条件是IPv4,注意ss -tlnp默认会同时显示IPv6映射,但某些工具可能不显示。 - 反向代理转发规则:nginx的
proxy_pass转发到后端端口,若后端端口配置错误,nginx仍会在报错后报警,但对外暴露的端口始终是80或443,你看到的是nginx在监听,而后端端口可能实际未监听。
遇到此类情况,优先用ss -uap查看UDP端口,同时检查应用日志中的“listening on”相关记录,日志中通常会明确标注实际绑定的IP和端口号。
端口查看结果异常时如何判断是防火墙还是服务问题?常见问题解答
Q:服务器上k8s容器映射的端口,在宿主机上查不到监听怎么办?
容器服务(如Docker、Kubernetes)默认使用iptables规则进行端口转发,宿主机上不会直接看到容器进程监听端口,但你可以通过ss -tlnp | grep kube-proxy或iptables -t nat -L -n查看转发规则,网络连接情况则通过docker port 容器名确认映射关系,这类环境中,端口是否连通必须用curl或telnet从宿主机主动验证,而非依赖端口监听列表。
Q:使用ss -tlnp查看端口时报错you are not allowed to show these processes,如何解决?
该报错是因为当前系统用户权限不足,无法获取其他进程的PID信息,解决方法是使用sudo ss -tlnp重新执行,若依然报错,则说明你的账户未在sudoers列表中,需要联系管理员权限;或者使用ss -tln不附加进程信息,至少能确认端口是否处于监听状态。
Q:如何查看linux端口是否连通,但服务器上没装telnet和nc?
最简单的做法是使用系统自带的curl命令验证TCP连通性。curl -v telnet://IP:端口会主动与目标建立一次TCP连接,连接成功会返回Connected to提示,失败则会报Connection refused或timed out,对于HTTP服务,直接执行curl -I http://IP:端口即可通过HTTP响应码确认服务是否正常,无需安装额外工具。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/797605.html


