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)
酷番叔酷番叔
上一篇 2025年8月22日 00:43
下一篇 2025年8月22日 00:54

相关推荐

  • Linux运行脚本的具体步骤和方法是什么?

    在Linux系统中,脚本是将一系列命令按特定逻辑组织起来的文本文件,通过执行脚本可以自动化完成重复性任务,提高工作效率,运行脚本的流程涉及脚本创建、权限设置、执行方式选择等关键步骤,本文将详细说明整个过程,脚本的创建与编辑脚本的本质是文本文件,因此创建脚本需使用文本编辑器(如vim、nano、gedit等),以……

    2025年8月26日
    2900
  • 在Linux操作系统中,如何正确解压RAR格式压缩文件的详细方法?

    Linux系统默认支持多种压缩格式,如tar.gz、zip、bz2等,但对于Windows下广泛使用的RAR格式,由于RAR是私有压缩格式,Linux默认不包含解压工具,需额外安装第三方软件,本文将详细介绍在Linux中解压RAR文件的方法,包括工具安装、命令行操作及常见问题处理,安装RAR解压工具由于RAR格……

    2025年9月20日
    2800
  • Linux如何以root权限登录?详细操作步骤与方法说明

    在Linux系统中,root账户是超级用户,拥有对系统的完全控制权限,包括修改系统文件、安装卸载软件、管理用户和进程等,由于root权限过高,误操作可能导致系统崩溃或安全风险,因此多数Linux发行版默认限制直接root登录,但特定场景下仍需掌握root权限的登录方法,以下是Linux中以root权限登录的详细……

    2025年8月23日
    3700
  • Linux系统如何查看CPU与内存的使用情况?

    在Linux系统中,监控CPU和内存的使用情况是系统管理和性能优化的基础工作,通过合理的命令和工具,管理员可以实时了解系统资源状态,及时发现瓶颈并采取应对措施,本文将详细介绍Linux查看CPU和内存信息的多种方法,包括常用命令、参数解析及实际应用场景,查看CPU信息的方法CPU作为系统的核心组件,其使用率、核……

    2025年9月22日
    1800
  • 如何检查运行中的FTP进程?

    在Linux系统中关闭FTP服务是提升服务器安全性的重要操作,尤其考虑到FTP协议使用明文传输敏感数据(如用户名、密码),存在被嗅探的风险,以下是详细操作指南,涵盖主流Linux发行版(Ubuntu/Debian/CentOS)和常见FTP服务软件(vsftpd/proftpd/pure-ftpd):确认当前运……

    2025年7月17日
    4800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信