2023-08-16 13:57:55
在Linux系统中,排查端口被哪个进程占用可通过netstat或ss命令实现,两者功能类似但各有特点。以下是具体实践指南:

netstat是老牌网络统计工具,通过参数组合可显示端口对应的进程信息。
基本命令:
sudo netstat -tulnp-t:显示TCP协议连接
-u:显示UDP协议连接
-l:仅显示监听状态的连接
-n:不解析服务名称(加快显示速度)
-p:显示进程ID和名称(需root权限)
输出示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp6 0 0 :::80 :::* LISTEN 1234/nginx最后一列显示进程号和程序名。
注意事项:
无权限时看不到PID/Program name,建议加sudo。
查找特定端口(如80)可附加管道过滤:sudo netstat -tulnp | grep :80
ss(Socket Statistics)是新一代网络工具,执行速度更快,尤其适合高并发环境。
基本命令:
sudo ss -tulnp参数含义与netstat类似,输出格式稍有不同:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Porttcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6))显示进程名、PID和文件描述符信息。
优势:
启动速度快,适合高并发场景。
支持更灵活的过滤方式,例如:ss -lntup 'sport = :80' # 仅显示80端口的监听情况
若已知端口号(如3000),需快速找到占用进程:
使用netstat:
sudo netstat -tulnp | grep :3000使用ss:
sudo ss -lntup | grep :3000若不确定协议类型,可去掉-t(TCP)或-u(UDP)参数。
输出示例:
tcp LISTEN 0 10 *:3000 *:* users:(("node",pid=5678,fd=20))显示PID为5678的node进程占用了3000端口。
未安装netstat:
新版Linux系统可能默认未安装net-tools包,通过包管理器安装:sudo apt install net-tools # Debian/Ubuntusudo yum install net-tools # CentOS
找不到进程名:
可能是权限不足或进程已退出。尝试用ps命令结合PID查看详情:ps -p 1234
端口被占用但无运行服务:
可能是服务异常退出导致端口未释放。可等待几分钟重试,或修改服务配置更换端口。

熟悉上述命令后,可快速定位端口占用问题,提升排查效率。