Linux系统中,如何查看网络端口占用情况及对应的占用进程?

Linux系统中,查看网络端口占用情况是系统管理和故障排查中的核心技能,无论是服务启动失败、端口冲突还是安全审计,都需要准确掌握端口的使用状态,本文将详细介绍Linux中查看网络端口占用的三大主流命令——netstatsslsof,通过具体示例和对比分析,帮助用户在不同场景下高效完成端口查询任务。

linux如何查看网络端口占用

使用netstat命令查看端口占用

netstat是Linux系统中传统的网络工具,功能全面,兼容性好,几乎在所有发行版中默认安装,它能够显示网络连接、路由表、接口统计等信息,是排查端口问题的“老牌”工具。

常用选项及含义

  • -t:仅显示TCP端口(Transmission Control Protocol,面向连接的协议);
  • -u:仅显示UDP端口(User Datagram Protocol,无连接协议);
  • -l:仅显示监听端口(即等待客户端连接的端口,如Web服务器的80端口);
  • -n:以数字形式显示地址和端口号,避免DNS解析,提升查询速度;
  • -p:显示占用端口的进程ID(PID)和进程名称,便于定位问题进程;
  • -a:显示所有端口,包括监听和非监听端口(如已建立的连接)。

示例命令

  1. 查看所有监听的TCP和UDP端口
    执行以下命令,可快速获取系统中所有服务正在监听的端口:

    netstat -tuln

    输出结果如下(示例):

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     
    udp        0      0 0.0.0.0:68              0.0.0.0:*                          
    • Proto:协议类型(TCP/UDP);
    • Local Address:本地IP地址和端口号,0.0.0表示监听所有网卡;
    • State:端口状态,LISTEN表示监听状态。
  2. 查看端口对应的进程信息
    若需定位占用端口的进程,添加-p选项:

    netstat -tulnp

    输出结果会额外显示进程ID和名称,

    Active Internet connections (only servers)
    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           
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      5678/mysqld         

    通过PID/Program name可明确知道22端口被SSH服务(sshd)占用,3306端口被MySQL服务(mysqld)占用。

  3. 过滤特定端口
    若只想检查某个端口(如8080)是否被占用,可通过grep过滤:

    netstat -tuln | grep :8080

    若输出包含8080,则表示端口被占用;无输出则表示端口空闲。

使用ss命令查看端口占用

ssiproute2工具包中的命令,旨在替代netstat,其查询速度更快,尤其是在处理大量连接时优势明显,目前主流Linux发行版(如Ubuntu、CentOS 7+)已默认将ss作为首选网络工具。

linux如何查看网络端口占用

常用选项及含义

  • -t/-u/-l/-n/-p:选项含义与netstat完全一致;
  • -a:显示所有套接字(包括TCP、UDP);
  • -4/-6:仅显示IPv4/IPv6连接。

示例命令

  1. 查看所有监听端口

    ss -tuln

    输出格式与netstat类似,但信息更简洁高效:

    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port    
    LISTEN     0      128          0.0.0.0:22                     0.0.0.0:*        
    LISTEN     0      128         127.0.0.1:3306                   0.0.0.0:*        
    UNCONN     0      0           0.0.0.0:68                     0.0.0.0:*        
    • State:套接字状态(LISTEN监听、UNCONN未连接、ESTABLISHED已建立连接等)。
  2. 查看TCP连接状态
    若需分析TCP连接的详细状态(如大量TIME_WAIT连接可能导致端口耗尽),可执行:

    ss -t -a

    输出会包含ESTABLISHED(已连接)、TIME_WAIT(等待关闭)、CLOSE_WAIT(等待服务器关闭)等状态,帮助定位网络问题。

  3. 结合进程信息排查问题

    ss -tulnp | grep :80

    可快速定位80端口的占用进程,

    LISTEN     0      128          0.0.0.0:80                     0.0.0.0:*        users:(("nginx",pid=3456,fd=6))

使用lsof命令查看端口占用

lsof(list open files)是Linux中强大的“打开文件”列表工具,其核心逻辑是“一切皆文件”——网络端口在系统中也被视为文件,因此可通过lsof查看端口占用情况。

常用选项及含义

  • -i:指定网络地址,格式为[协议]:[端口]@[IP地址]
  • -P:不显示端口号的服务名称(如80不显示为http);
  • -n:不解析主机名(提升速度);
  • -p:指定进程ID,查看该进程占用的所有端口。

示例命令

  1. 查看特定端口占用
    例如检查8080端口:

    lsof -i :8080

    输出结果包含进程详细信息:

    linux如何查看网络端口占用

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java     7890   root    3u  IPv6   12345      0t0  TCP *:8080 (LISTEN)
    • COMMAND:进程名(如Java应用);
    • PID:进程ID;
    • NAME:监听的地址和端口。
  2. 查看所有监听端口

    lsof -i -P -n | grep LISTEN

    可过滤出所有处于监听状态的端口及其进程,适合批量排查。

  3. 查看进程占用的所有端口
    若需确认某个进程(如PID为1234)是否占用多个端口,可执行:

    lsof -p 1234 | grep IPv

    输出该进程的所有网络连接信息。

命令对比与适用场景

为帮助用户快速选择合适的工具,以下从性能、功能、兼容性三个维度对比netstatsslsof

命令 查询速度 功能特点 兼容性 适用场景
netstat 较慢 功能全面,支持协议广泛 所有Linux系统 老系统或需要兼容性的环境
ss 高效,支持最新网络协议 iproute2 新版Linux,大规模端口查询
lsof 中等 可查看进程打开的所有文件 需单独安装 需结合进程信息排查复杂问题

注意事项

  1. 权限问题:使用-p选项查看进程信息时,普通用户只能查看自己的进程,root用户可查看所有进程;
  2. 端口状态LISTEN表示服务正常监听,ESTABLISHED表示有客户端连接,TIME_WAIT是连接正常关闭的临时状态,无需担心;
  3. 端口范围:Linux端口分为三类:0-1023(系统保留端口,需root权限)、1024-49151(用户端口)、49152-65535(动态端口)。

相关问答FAQs

问题1:为什么ss命令在查询大量端口时比netstat快?
解答:ss命令直接从内核获取套接字信息,并通过哈希表等高效数据结构存储数据,减少了netstat中需要遍历/proc文件系统和解析内核数据的步骤,在1万个连接的场景下,ss的查询速度可能是netstat的5-10倍,尤其适合高并发服务器环境。

问题2:如何通过端口占用情况快速定位并结束异常进程?
解答:假设发现8080端口被未知进程占用,操作步骤如下:

  1. 查看进程信息:ss -tulnp | grep :8080lsof -i :8080,获取PID(如PID=9999);
  2. 确认进程:通过ps -ef | grep 9999查看进程详情,确认是否为异常进程;
  3. 结束进程:若为异常进程,先用kill 9999正常终止,若无响应再用kill -9 9999强制结束(注意:强制结束可能导致数据丢失,需谨慎)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/14131.html

(0)
酷番叔酷番叔
上一篇 2天前
下一篇 2天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信