在Linux系统中,查看端口与进程的对应关系是网络故障排查和系统运维中的核心操作。以下为您整理最专业且常用的几种方法,覆盖了从传统工具到现代工具的完整解决方案。

方法一:使用 ss 命令(推荐,现代系统首选)
ss 是 iproute2 套件中的工具,用于转储套接字统计信息,它比 netstat 更快且输出更准确。要查看监听端口对应的进程,请使用以下命令:
sudo ss -tulnp
参数解释:
-t:显示TCP套接字;-u:显示UDP套接字;-l:仅显示监听状态的套接字;-n:以数字形式显示端口号(不进行DNS反向解析);-p:显示使用该套接字的进程信息。
输出示例中,Local Address:Port 列显示了端口号,Process 列显示了进程名称和PID(例如:users:(("nginx",pid=1234,fd=6)))。如果只想查看特定端口,可以使用 grep 过滤:sudo ss -tulnp | grep :80。
方法二:使用 netstat 命令(传统工具)
netstat 是经典的网络统计工具,属于 net-tools 软件包。虽然较老,但依然广泛应用于旧版本系统或脚本中。查看端口和进程的命令为:
sudo netstat -tulnp
参数解释:
-t:TCP连接;-u:UDP连接;-l:仅监听状态;-n:数字显示;-p:显示程序对应的PID和名称。
输出结果中,Local Address 列的格式通常是 0.0.0.0:端口 或 [::]:端口,PID/Program name 列直接显示对应的进程。
注意:现代发行版(如CentOS 7+、Ubuntu 20.04+)默认可能未安装 netstat,需要先通过 yum install net-tools 或 apt install net-tools 进行安装。
方法三:使用 lsof 命令(面向文件描述符)
lsof(List Open Files)是一个强大的诊断工具,它列出当前系统打开的所有文件,包括网络套接字。要查看特定端口对应的进程,命令如下:
sudo lsof -i :80
参数解释:
-i:选择网络文件;:80:指定端口号。也可以结合TCP/UDP协议,例如 lsof -iTCP:80 -sTCP:LISTEN 可以更精确地查看TCP监听状态。
输出中,COMMAND 列是进程名,PID 列是进程号,USER 列是运行用户,NAME 列显示具体的IP地址和端口。
方法四:使用 fuser 命令(快速定位)
fuser 用于标识使用特定文件或套接字的进程。如果只想快速知道哪个进程占用了某个端口,可以使用:
sudo fuser 80/tcp
此命令会直接输出占用TCP 80端口的进程PID。如果想要看到更详细的进程信息(如进程名),可以结合 -v 参数:
sudo fuser -v 80/tcp
反向查询:已知PID查端口
如果已经知道进程PID,想要查看它监听了哪些端口,可以使用 ss 或 lsof 配合PID过滤:
sudo lsof -p PID | grep LISTEN
或者使用 ss 命令:
sudo ss -tulnp | grep "pid=PID"
专业提示与权限说明
在Linux中,查看所有进程的端口占用情况通常需要root权限(使用sudo)。如果以普通用户身份运行,ss 或 netstat 的 -p 参数可能只能显示属于当前用户的进程信息,无法查看其他用户(如nginx、mysql)的进程详情。此外,如果端口被内核本身占用(如某些内核模块),输出中进程列可能显示为 -,这属于正常现象。
综合来看,ss -tulnp 是当前最推荐的方法,因为它不仅输出简洁,而且不依赖过时的工具包;而 lsof -i :端口 在需要精确查看特定端口与进程关系时也非常高效。

查看详情

查看详情