上一篇
Linux端口被占用怎样查?
- Linux
- 2025-06-08
- 4021
在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+