上一篇                     
               
			  Linux端口被占用怎样查?
- Linux
- 2025-06-08
- 3528
 在Linux中查看端口被占用,使用命令如 netstat -tuln(列出监听端口)、lsof -i :端口号(指定端口)或 ss -tuln(现代替代),这些工具显示占用进程,运行需root权限查看所有信息。
 
在Linux系统中,端口占用是常见问题,可能导致服务启动失败或网络异常,以下是专业、高效且详细的排查方案,所有操作需root权限执行(命令前加sudo):
4种核心排查工具
netstat命令(经典工具)
 
netstat -tuln | grep :端口号
- 参数解析: 
  - -t:TCP端口
- -u:UDP端口
- -l:仅监听状态的端口
- -n:显示数字地址(不解析域名)
 
- 示例:查看80端口占用 netstat -tuln | grep :80 输出关键字段: tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
 → 进程ID:1234,进程名:nginx 
ss命令(netstat升级版,速度更快)
 
ss -ltnp | grep :端口号
- 参数解析:
 -l(监听端口)-t(TCP)-u(UDP)-n(数字格式)-p(显示进程)
- 示例:检查3306端口 ss -ltnp | grep :3306 输出示例: LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=889,fd=21))
lsof命令(查看文件与进程关联)
 
lsof -i :端口号
- 直接定位进程: lsof -i :22 # 检查SSH端口 输出关键字段: sshd 789 root 3u IPv4 19186 0t0 TCP *:ssh (LISTEN)
 → 进程名:sshd,PID:789 
fuser命令(通过端口查进程ID)
 
fuser 端口号/tcp # 指定协议类型(tcp/udp)
- 示例: fuser 8080/tcp 输出: 8080/tcp: 5678→ 进程PID:5678
- 强制结束占用(慎用): fuser -k 8080/tcp # 终止占用8080端口的进程 
️ 端口占用处理步骤
- 定位进程: ss -tulnp | grep :80 # 确认PID及进程名 
- 验证进程用途: ps aux | grep PID # 替换为实际PID 
- 安全处理: 
  - 重启服务:systemctl restart 服务名
- 终止进程:kill -9 PID(强制结束)
- 停用服务:systemctl stop 服务名
 
- 重启服务:
排查技巧
- 查看所有监听端口: ss -tuln # 快速扫描全部开放端口 
- 检测外部连接: netstat -antp # 查看所有活跃连接(含远程IP) 
- 常见服务端口参考: 
  - 22 → SSH
- 80/443 → HTTP/HTTPS
- 3306 → MySQL
- 5432 → PostgreSQL
 
| 命令 | 适用场景 | 速度 | 
|---|---|---|
| netstat | 兼容旧系统,基础检查 | 较慢 | 
| ss | 新系统首选,信息全面 | 极快 | 
| lsof | 查看进程详情 | 中等 | 
| fuser | 直接关联协议与进程 | 快 | 
️ 操作前务必确认进程用途!强制结束系统关键进程可能导致服务崩溃。
引用说明:
本文方法基于Linux内核文档(kernel.org)及以下工具手册: 

- netstat:net-tools 2.10+
- ss:iproute2 5.10+
- lsof:v4.93+
- fuser:psmisc 23.4+
 
  
			