Linux中排查端口占用需用ss、lsof、netstat、fuser等工具:ss高效查监听端口及进程;lsof精准定位进程详情;netstat兼容旧系统;fuser可快速终止占用进程;ps配合可交叉验证PID信息。

如果您在Linux系统中启动服务时提示端口已被占用,或需排查网络服务异常,必须确认该端口正被哪个进程监听或连接。以下是多种直接有效的查询方法:
一、使用ss命令查看端口及关联进程
ss(socket statistics)是现代Linux中性能最优的端口状态查询工具,执行速度快、输出简洁,能高效显示监听与非监听状态的套接字,并在权限允许时直接显示进程信息。
1、列出所有正在监听的TCP和UDP端口(不含进程名):
执行命令:ss -tuln
2、精确查找指定端口(如8080)并显示对应进程(需root权限):
执行命令:sudo ss -tulnp | grep :8080
3、仅筛选TCP监听端口且绑定到IPv4地址(排除IPv6干扰):
执行命令:sudo ss -tlnp | grep ':8080'
二、使用lsof命令精准定位占用进程
lsof将网络端口视为“打开的文件”,因此可提供最直观的进程级详情,包括COMMAND、PID、USER、TYPE、NODE等字段,特别适合快速识别冲突源头。
1、检查特定端口(如3306)被哪个进程占用:
执行命令:sudo lsof -i :3306
2、列出所有处于LISTEN状态的TCP端口及其进程(不解析主机名和服务名,提升响应速度):
执行命令:sudo lsof -iTCP -sTCP:LISTEN -P -n
3、若已知进程名(如nginx),反查其监听端口:
执行命令:sudo lsof -i -a -p $(pidof nginx)
三、使用netstat命令兼容旧系统环境
netstat虽在新发行版中逐渐弃用,但在未预装ss或lsof的嵌入式系统、容器基础镜像或老旧服务器中仍具不可替代性,其参数语义清晰,易于记忆和调试。
1、显示全部监听中的TCP/UDP端口及进程(需root权限获取PID和程序名):
执行命令:sudo netstat -tulnp
2、过滤出指定端口(如22)的占用行:
执行命令:sudo netstat -tulnp | grep :22
3、仅以数字形式显示地址与端口,避免DNS解析延迟:
执行命令:sudo netstat -tuln | grep :22
四、使用fuser快速获取并终止占用进程
fuser专为文件与套接字设计,无需解析完整连接状态,可单步获取PID甚至一键终止,适用于运维脚本或紧急释放端口场景。
1、直接输出占用某端口的进程ID(例如80端口):
执行命令:sudo fuser 80/tcp
2、显示详细信息,包括用户、访问类型和命令名:
执行命令:sudo fuser -v 80/tcp
3、强制终止所有占用该端口的进程(慎用):
执行命令:sudo fuser -k 80/tcp
五、组合ps与netstat/ss进行交叉验证
当权限受限无法直接显示进程名时,可通过PID反向查询进程全路径与启动参数,避免误判僵尸进程或残留子进程。
1、先通过netstat获取目标端口对应的PID(例如5623):
执行命令:netstat -pan | grep :5623
2、根据PID查找完整进程信息:
执行命令:ps -fp 5623
3、进一步查看该进程打开的所有文件与网络连接:
执行命令:lsof -p 5623










