Linux 查看端口占用的两种常用方法:lsof 与 netstat
在 Linux 系统中,查看端口占用情况是排查网络服务故障(如 “端口已被占用” 错误)的基础操作。常用工具包括 lsof(列出打开的文件)和 netstat(网络状态统计),本文将详细介绍两者的用法及场景。
使用 lsof 查看端口占用
lsof(List Open Files)是一款功能强大的工具,可列出系统中所有打开的文件(Linux 中 “一切皆文件”,包括网络连接)。其核心优势是能直接关联端口与进程的详细信息。
查看指定端口的占用情况
命令格式:
1 | lsof -i :端口号 |
示例:查看 8010 端口的占用情况
1 | lsof -i:8010 |
输出解析:
1 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME |
COMMAND:占用端口的进程名(如nginx);PID:进程 ID(如35653,可用于终止进程);USER:进程所属用户;TYPE:网络类型(如IPv4);NAME:端口状态(如LISTEN表示正在监听)。
扩展用法:通过进程 ID 查看打开的文件
lsof 还可反向查询某个进程打开的所有文件 / 端口:
1 | lsof -p 进程ID |
示例:查看 PID 为 35653 的进程打开的文件
1 | lsof -p 35653 |
输出将包含该进程打开的日志文件、网络连接(端口)、设备文件等,适合分析进程的资源占用。
使用 netstat 查看端口占用
netstat(Network Statistics)是传统的网络状态工具,专注于显示网络连接、路由表、接口统计等信息,查看端口占用时更简洁。
查看指定端口的占用情况
命令格式:
1 | netstat -tunlp | grep 端口号 |
参数说明:
-t:显示 TCP 协议的连接;-u:显示 UDP 协议的连接;-n:直接显示 IP 地址和端口号(不解析域名和服务名,速度更快);-l:仅显示处于监听状态(LISTEN)的连接;-p:显示占用端口的进程 ID(PID)和程序名。
示例:查看 8096 端口的占用情况
1 | netstat -tunlp | grep 8096 |
输出解析:
1 | tcp6 0 0 :::8096 :::* LISTEN 22027/java |
tcp6:表示使用 TCP 协议,支持 IPv6;:::8096:本地监听的端口(::表示所有 IPv6 地址);LISTEN:状态为监听;22027/java:进程 ID 为 22027,进程名为java。
扩展用法:查看所有监听端口
若需列出系统中所有正在监听的端口(不指定具体端口),可省略 grep:
1 | netstat -tunlp |
适合快速了解系统中所有活跃的网络服务(如 SSH、Nginx、MySQL 等)。
两种工具的对比与选择
| 工具 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
lsof |
信息更详细(含用户、文件描述符等);支持反向查询进程打开的文件 | 输出内容较多,需筛选;部分系统默认未安装 | 需要详细进程信息或分析资源占用时 |
netstat |
轻量简洁,专注网络连接;参数组合灵活 | 不支持查看进程打开的非网络文件 | 快速排查端口占用或监听状态时 |
实战:终止占用端口的进程
查找到占用端口的进程后,若需释放端口,可通过 kill 命令终止进程:
1 | # 终止 PID 为 22027 的进程(示例) |
-9表示强制终止(确保进程立即退出)
v1.3.10