在Linux系统中,查看网络端口占用情况是系统管理和故障排查中的核心技能,无论是服务启动失败、端口冲突还是安全审计,都需要准确掌握端口的使用状态,本文将详细介绍Linux中查看网络端口占用的三大主流命令——netstat、ss和lsof,通过具体示例和对比分析,帮助用户在不同场景下高效完成端口查询任务。

使用netstat命令查看端口占用
netstat是Linux系统中传统的网络工具,功能全面,兼容性好,几乎在所有发行版中默认安装,它能够显示网络连接、路由表、接口统计等信息,是排查端口问题的“老牌”工具。
常用选项及含义
-t:仅显示TCP端口(Transmission Control Protocol,面向连接的协议);-u:仅显示UDP端口(User Datagram Protocol,无连接协议);-l:仅显示监听端口(即等待客户端连接的端口,如Web服务器的80端口);-n:以数字形式显示地址和端口号,避免DNS解析,提升查询速度;-p:显示占用端口的进程ID(PID)和进程名称,便于定位问题进程;-a:显示所有端口,包括监听和非监听端口(如已建立的连接)。
示例命令
-
查看所有监听的TCP和UDP端口
执行以下命令,可快速获取系统中所有服务正在监听的端口:netstat -tuln
输出结果如下(示例):
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:68 0.0.0.0:*Proto:协议类型(TCP/UDP);Local Address:本地IP地址和端口号,0.0.0表示监听所有网卡;State:端口状态,LISTEN表示监听状态。
-
查看端口对应的进程信息
若需定位占用端口的进程,添加-p选项:netstat -tulnp
输出结果会额外显示进程ID和名称,
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld通过
PID/Program name可明确知道22端口被SSH服务(sshd)占用,3306端口被MySQL服务(mysqld)占用。 -
过滤特定端口
若只想检查某个端口(如8080)是否被占用,可通过grep过滤:netstat -tuln | grep :8080
若输出包含
8080,则表示端口被占用;无输出则表示端口空闲。
使用ss命令查看端口占用
ss是iproute2工具包中的命令,旨在替代netstat,其查询速度更快,尤其是在处理大量连接时优势明显,目前主流Linux发行版(如Ubuntu、CentOS 7+)已默认将ss作为首选网络工具。

常用选项及含义
-t/-u/-l/-n/-p:选项含义与netstat完全一致;-a:显示所有套接字(包括TCP、UDP);-4/-6:仅显示IPv4/IPv6连接。
示例命令
-
查看所有监听端口
ss -tuln
输出格式与
netstat类似,但信息更简洁高效:State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* UNCONN 0 0 0.0.0.0:68 0.0.0.0:*State:套接字状态(LISTEN监听、UNCONN未连接、ESTABLISHED已建立连接等)。
-
查看TCP连接状态
若需分析TCP连接的详细状态(如大量TIME_WAIT连接可能导致端口耗尽),可执行:ss -t -a
输出会包含
ESTABLISHED(已连接)、TIME_WAIT(等待关闭)、CLOSE_WAIT(等待服务器关闭)等状态,帮助定位网络问题。 -
结合进程信息排查问题
ss -tulnp | grep :80
可快速定位80端口的占用进程,
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3456,fd=6))
使用lsof命令查看端口占用
lsof(list open files)是Linux中强大的“打开文件”列表工具,其核心逻辑是“一切皆文件”——网络端口在系统中也被视为文件,因此可通过lsof查看端口占用情况。
常用选项及含义
-i:指定网络地址,格式为[协议]:[端口]或@[IP地址];-P:不显示端口号的服务名称(如80不显示为http);-n:不解析主机名(提升速度);-p:指定进程ID,查看该进程占用的所有端口。
示例命令
-
查看特定端口占用
例如检查8080端口:lsof -i :8080
输出结果包含进程详细信息:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 7890 root 3u IPv6 12345 0t0 TCP *:8080 (LISTEN)COMMAND:进程名(如Java应用);PID:进程ID;NAME:监听的地址和端口。
-
查看所有监听端口
lsof -i -P -n | grep LISTEN
可过滤出所有处于监听状态的端口及其进程,适合批量排查。
-
查看进程占用的所有端口
若需确认某个进程(如PID为1234)是否占用多个端口,可执行:lsof -p 1234 | grep IPv
输出该进程的所有网络连接信息。
命令对比与适用场景
为帮助用户快速选择合适的工具,以下从性能、功能、兼容性三个维度对比netstat、ss和lsof:
| 命令 | 查询速度 | 功能特点 | 兼容性 | 适用场景 |
|---|---|---|---|---|
netstat |
较慢 | 功能全面,支持协议广泛 | 所有Linux系统 | 老系统或需要兼容性的环境 |
ss |
快 | 高效,支持最新网络协议 | 需iproute2 |
新版Linux,大规模端口查询 |
lsof |
中等 | 可查看进程打开的所有文件 | 需单独安装 | 需结合进程信息排查复杂问题 |
注意事项
- 权限问题:使用
-p选项查看进程信息时,普通用户只能查看自己的进程,root用户可查看所有进程; - 端口状态:
LISTEN表示服务正常监听,ESTABLISHED表示有客户端连接,TIME_WAIT是连接正常关闭的临时状态,无需担心; - 端口范围:Linux端口分为三类:0-1023(系统保留端口,需root权限)、1024-49151(用户端口)、49152-65535(动态端口)。
相关问答FAQs
问题1:为什么ss命令在查询大量端口时比netstat快?
解答:ss命令直接从内核获取套接字信息,并通过哈希表等高效数据结构存储数据,减少了netstat中需要遍历/proc文件系统和解析内核数据的步骤,在1万个连接的场景下,ss的查询速度可能是netstat的5-10倍,尤其适合高并发服务器环境。
问题2:如何通过端口占用情况快速定位并结束异常进程?
解答:假设发现8080端口被未知进程占用,操作步骤如下:
- 查看进程信息:
ss -tulnp | grep :8080或lsof -i :8080,获取PID(如PID=9999); - 确认进程:通过
ps -ef | grep 9999查看进程详情,确认是否为异常进程; - 结束进程:若为异常进程,先用
kill 9999正常终止,若无响应再用kill -9 9999强制结束(注意:强制结束可能导致数据丢失,需谨慎)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/14131.html