Linux系统端口占用怎么查
- Linux
- 2025-06-11
- 7
方法1:使用 netstat 命令(经典工具)
netstat 是网络统计工具,可查看所有网络连接和监听端口。
操作步骤:
netstat -tuln | grep <端口号>
- 参数解析
-t:TCP端口
-u:UDP端口
-l:仅显示监听中的端口
-n:以数字形式显示(不解析域名)
-p:显示进程信息(需sudo权限)
示例:
$ netstat -tulnp | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
输出解读:
端口 22 被进程 sshd(PID 1234)占用,协议为TCP。

方法2:使用 ss 命令(netstat 的替代品)
ss(Socket Statistics)更快速高效,语法与 netstat 类似。
操作步骤:
ss -tuln | grep <端口号>
示例:
$ ss -tuln sport = :80 tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
输出解读:
端口 80 处于监听状态(未显示进程时需结合 -p 参数)。

方法3:使用 lsof 命令(查看文件与进程关联)
lsof(List Open Files)可精确查看占用端口的进程。
操作步骤:
sudo lsof -i :<端口号>
示例:
$ sudo lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 5678 mysql 33u IPv6 123456 0t0 TCP *:mysql (LISTEN)
输出解读:
端口 3306 被 mysqld 进程(PID 5678)占用。

方法4:使用 /proc 文件系统(底层排查)
Linux 通过 /proc 目录暴露进程信息,可直接读取网络状态。
操作步骤:
grep -l <端口号> /proc/net/tcp* # 查找TCP端口 cat /proc/<PID>/net/tcp # 根据PID检查
适用场景:
当系统未安装 netstat/ss 时使用(如精简版Docker容器)。
端口占用后的处理建议
- 终止占用进程: sudo kill <PID> # 正常终止 sudo kill -9 <PID> # 强制终止(慎用)
- 修改服务配置:
若需保留原进程,修改应用配置文件更换端口(如Nginx的 listen 指令)。
- 预防冲突:
- 使用 systemctl status <服务名> 检查服务状态。
- 通过 crontab 设置定期端口检查脚本。
方法对比与选择指南
| 方法 | 优势 | 适用场景 |
|---|---|---|
| netstat | 兼容性广(旧系统支持) | 基础检查 |
| ss | 执行速度快,输出简洁 | 高效批量检查 |
| lsof | 进程信息详细,支持过滤 | 精准定位占用源 |
| /proc | 不依赖外部工具 | 极简环境故障排查 |
安全提示:
- 操作需 sudo 权限的命令时,确保理解其风险。
- 生产环境中,终止进程前请确认其作用(如 sshd 占用22端口属正常现象)。
引用说明: 参考 Linux 官方文档(man7.org)及以下工具手册:
- netstat(8), ss(8), lsof(8) 的 man page 文档。
- Linux 内核文档 /proc/net/ 部分(kernel.org)。
- 操作实践基于 Ubuntu 22.04/CentOS 7 测试验证。