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

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

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命令查看端口占用

ss是iproute2工具包中的命令,旨在替代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

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

命令对比与适用场景

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

命令 查询速度 功能特点 兼容性 适用场景
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 :8080或lsof -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系统下当前如何查看守护进程的运行状态及详细信息?

    守护进程(Daemon)是Linux系统中在后台持续运行的进程,它们没有控制终端,主要用于提供系统服务,如Web服务、数据库服务、日志记录等,管理员需要定期检查守护进程的运行状态,确保服务正常可用,同时排查异常问题,本文将详细介绍Linux系统中查看守护进程的多种方法,包括基础命令、系统管理工具及状态分析技巧……

    2025年9月18日
    26400
  • linux如何开启超线程

    nux 开启超线程需在 BIOS 中设置,启用 Intel Hyper-Threading 或 AMD 类似选项,

    2025年8月15日
    25100
  • Linux如何设置开机自启?具体实现步骤与方法有哪些?

    Linux开机自启是运维和开发中常见的需求,无论是服务程序、脚本任务还是自动化流程,都需要在系统启动时自动运行,本文将详细介绍Linux下实现开机自启的多种方法,涵盖主流的Systemd、传统init.d脚本、rc.local以及crontab等场景,并对比不同方法的适用场景和操作步骤,帮助用户根据实际需求选择……

    2025年9月16日
    21500
  • 为什么我的Linux进不了桌面?

    前提条件已安装桌面环境常见桌面环境:GNOME(Ubuntu默认)、KDE Plasma(Kubuntu)、XFCE(Xubuntu)、Cinnamon(Linux Mint)等,验证是否安装:终端执行 ls /usr/share/xsessions/,若返回 .desktop 文件(如 gnome.deskt……

    2025年6月22日
    26400
  • Linux终端如何翻页查看长文本内容?

    在Linux终端操作中,当输出内容超过一屏时,翻页查看是常见需求,掌握多种翻页方法能显著提升操作效率,无论是查看日志、配置文件还是命令输出,合适的翻页工具都能让信息浏览更顺畅,本文将详细介绍Linux终端中常用的翻页方式,涵盖命令行工具、终端快捷键及进阶技巧,帮助用户根据场景灵活选择,基础分页命令:more与l……

    2025年9月25日
    25800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信