Linux系统排查中,高效查询进程及端口占用需掌握关键命令,使用lsof -i:端口号可快速定位特定端口对应的进程ID;利用netstat -tunlp或ss -tunlp可列出所有网络连接及进程详情,结合ps命令,运维人员能迅速解决端口冲突问题,提升故障排查效率。
在Linux服务器的日常运维和故障排查中,最常见的需求之一就是查询进程以及该进程具体绑定了哪个端口号,这通常用于解决端口冲突、排查服务异常占用、或进行安全审计。
虽然 ps 命令可以查看进程,但它不直接显示端口信息,为了快速、准确地获取“进程”与“端口”的对应关系,Linux 提供了几个非常强大的工具,本文将详细介绍三种最常用的方法。
使用 netstat 命令(经典方法)
netstat 是最老牌的网络状态查看工具,几乎在所有 Linux 发行版中都已预装。

命令格式:
netstat -tunlp
参数详解:
-t(tcp):显示 TCP 协议的连接。-u(udp):显示 UDP 协议的连接。-n(numeric):以数字形式显示 IP 地址和端口号,而不是尝试解析为主机名或服务名(这通常是我们需要的,能提高速度)。-l(listening):仅显示处于监听状态的端口。-p(process):显示进程 ID (PID) 和进程名称。
示例:
如果你想查看 8080 端口被哪个进程占用,可以结合 grep 使用:
sudo netstat -tunlp | grep 8080
输出示例:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1234/java
这表示进程 ID 为 1234 的 java 进程正在监听 8080 端口。
使用 ss 命令(推荐方法)
ss (Socket Statistics) 是现代 Linux 系统(如 CentOS 7+, Ubuntu 16.10+)推荐使用的工具,它的速度比 netstat 快得多,因为它直接读取 /proc 下的内核信息。
命令格式:
ss -tunlp
参数含义与 netstat 完全一致,用法也完全相同。
示例: 查找占用 3306 端口(通常是 MySQL)的进程:
sudo ss -tunlp | grep 3306
输出示例:
LISTEN 0 128 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=15))
使用 lsof 命令(进程文件打开工具)
lsof (List Open Files) 的功能非常强大,它可以列出当前系统打开的所有文件,在网络连接中,它被视为“网络文件”,因此可以列出网络端口。
命令格式:
lsof -i -P -n
参数详解:
-i:列出网络连接。-P:不将端口号转换为服务名(如将 80 转换为 http),只显示数字,方便查看。-n:不将 IP 地址转换为主机名,提高速度。
示例: 查找占用端口的进程:
sudo lsof -i -P -n
如果你知道 PID,想看它占用了哪些端口:
sudo lsof -p <PID>
总结与实战技巧
在实际工作中,为了提高效率,通常会结合 grep 进行过滤:
-
按端口号查询进程:
sudo ss -tunlp | grep :8080
-
按进程名查询端口:
sudo ss -tunlp | grep nginx
-
杀掉占用端口的进程: 如果确认该进程不需要,可以使用
kill命令(需要先通过上述命令获取 PID):sudo kill -9 <PID>
建议: 在新系统中,优先使用 ss 命令,因为它更快且是系统内置工具,不会因为依赖库缺失而报错。

