服务器测评网
我们一直在努力

Linux下如何查看进程占用哪些端口号?

在Linux系统中,查看进程与端口号的对应关系是系统管理和网络排查的常见需求,通过命令行工具,管理员可以快速定位占用特定端口的进程、分析网络连接状态,或进行安全审计,本文将详细介绍几种主流方法,涵盖基础命令到高级技巧,帮助用户高效掌握进程与端口的查询逻辑。

Linux下如何查看进程占用哪些端口号?

基础命令:netstat——传统而全面的网络工具

netstat是Linux系统中经典的网络状态查看工具,虽然在新版系统中逐渐被ss替代,但其兼容性强,仍被广泛使用,要查看进程与端口的映射关系,可结合-tulpn参数:

netstat -tulpn

参数解析:

  • -t:显示TCP连接
  • -u:显示UDP连接
  • -l:仅显示监听状态的端口
  • -p:显示进程ID(PID)和进程名称
  • -n:以数字形式显示地址和端口,避免DNS解析,加快速度

执行后,终端会输出类似如下信息:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd  
tcp6       0      0 :::80                   :::*                    LISTEN      5678/nginx  

其中Local Address列显示监听地址和端口,PID/Program name列直接对应进程信息,若需过滤特定端口,可通过管道结合grep

netstat -tulpn | grep ':80'

现代替代:ss——更高效的新一代工具

ssiproute2包中的工具,旨在替代netstat,其查询速度更快,尤其在高并发场景下优势明显,基本用法与netstat类似:

ss -tulpn

参数含义与netstat基本一致,-t(TCP)、-u(UDP)、-l(监听)、-p(进程)、-n(数字形式),例如查看所有监听的TCP端口及进程:

ss -tlnp

ss还支持更复杂的过滤条件,如仅显示IPv4连接:

ss -4tulpn

相比netstatss在处理大量连接时性能更优,建议在Linux发行版默认使用ss的场景下优先选择。

Linux下如何查看进程占用哪些端口号?

进阶技巧:lsof——精准定位文件与端口关联

lsof(list open files)是一个功能强大的工具,不仅能查看端口,还能显示进程打开的所有文件(包括网络连接、设备文件等),通过lsof可以更灵活地查询端口与进程的关联:

lsof -i :端口号

例如查看80端口对应的进程:

lsof -i :80

输出结果会包含进程ID、命令名、用户、TCP状态等信息:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx     567 root    6u  IPv6  12345      0t0  TCP *:http (LISTEN)  
nginx     569 www-data 6u  IPv6  12345      0t0  TCP *:http (LISTEN)  

若需查看某进程的所有端口占用,可通过进程ID过滤:

lsof -i -P | grep PID

其中-P参数表示不显示端口号的服务名称(如http),直接显示数字端口。

综合场景:结合ps与grep——多维度进程分析

有时需结合ps命令查看进程详细信息,再通过端口定位,先通过ssnetstat找到PID,再用ps查看进程详情:

# 1. 查找占用8080端口的PID
ss -tulpn | grep ':8080' | awk '{print $7}'
# 输出类似:pid=1234,java  
# 2. 通过PID查看进程详细信息
ps -ef | grep 1234

ps -ef显示所有进程的完整信息,grep用于过滤目标PID,若需反向查询(通过进程名找端口),可结合awkgrep

ps -ef | grep java | awk '{print $2}' | xargs -I {} ss -tulpn | grep {}

该命令会先找到java进程的所有PID,再查询每个PID占用的端口。

Linux下如何查看进程占用哪些端口号?

注意事项与常见问题

  1. 权限问题:查看所有进程的端口信息通常需要root权限,普通用户可能无法查看其他用户的进程,可通过sudo提权:

    sudo ss -tulpn
  2. 端口范围过滤:若需查看特定端口范围(如1000-2000),可使用awkgrep

    ss -tulpn | grep ':\(1000\|1001\|1002\)'
  3. 僵尸进程与TIME_WAIT状态TIME_WAIT状态的端口是正常连接关闭后的临时状态,无需担心;若发现大量LISTEN状态的异常端口,需警惕恶意程序。

  4. 命令替代选择:在CentOS 7+、Ubuntu 18.04+等新版系统中,ss已默认安装,优先推荐使用;旧系统若未安装iproute2,可使用yum install iprouteapt-get install iproute2安装。

Linux查看进程与端口的工具各有侧重:netstat适合传统环境,ss性能更优,lsof则在文件与端口关联分析上更灵活,管理员可根据实际需求选择命令,或通过管道组合实现复杂查询,掌握这些工具不仅能提升系统管理效率,也是排查网络问题、保障服务器安全的基础技能,在日常操作中,建议结合pstop等进程管理工具,形成从端口到进程再到系统资源的完整监控链路。

赞(0)
未经允许不得转载:好主机测评网 » Linux下如何查看进程占用哪些端口号?