Linux如何查看端口是否被占用?

在Linux系统中,端口是网络通信的入口,每个端口对应一个服务或进程,当服务启动失败、网络连接异常或需要排查安全问题时,查看端口是否被占用是常见的操作,本文将详细介绍Linux系统中查看端口占用的多种方法,包括常用命令、参数解析及实际应用场景,帮助用户高效掌握端口状态排查技巧。

linux如何查看端口是否被占用

使用netstat命令查看端口占用

netstat是Linux系统中传统的网络工具,用于显示网络连接、路由表、接口状态等信息,虽然在新版系统中逐渐被ss替代,但仍有广泛的兼容性,尤其适用于较老的Linux发行版。

基本语法

netstat [选项] [参数]

常用选项及功能

选项 功能
-t 显示TCP端口
-u 显示UDP端口
-l 只显示监听端口(即正在被进程占用的端口)
-n 以数字形式显示地址和端口号,不解析域名和服务名(提高查询速度)
-a 显示所有端口,包括监听和非监听端口
-p 显示占用端口的进程ID(PID)和进程名(需root权限)
-i 显示网络接口信息,可结合端口过滤

实际应用示例

  1. 查看所有监听的TCP和UDP端口

    netstat -tuln

    输出结果中,Local Address列显示本地IP和端口,State列显示端口状态(监听端口为LISTEN),

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN  
    tcp6       0      0 :::80                   :::*                    LISTEN  
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           

    其中0.0.0:22表示所有IP地址的22端口(SSH服务)被监听,::80表示IPv6的80端口(HTTP服务)被监听。

  2. 查看指定端口是否被占用
    例如检查80端口是否被占用:

    netstat -tuln | grep :80

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

  3. 查看端口对应的进程信息
    加上-p参数(需root权限)可查看占用端口的进程:

    sudo netstat -tulnp | grep :80

    输出示例:

    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1234/nginx: master process  

    其中1234是进程ID,nginx: master process是进程名。

  4. 查看所有网络连接(包括非监听端口)

    netstat -an

    可通过grep过滤特定状态,如ESTABLISHED(已连接)、TIME_WAIT(等待关闭)等。

使用ss命令查看端口占用(推荐)

ss是iproute2工具包中的命令,用于替代netstat,其查询速度更快,尤其是在高并发场景下,因为它直接从内核获取网络连接信息,而非解析/proc文件。

基本语法

ss [选项] [参数]

常用选项及功能

选项 功能
-t 显示TCP端口
-u 显示UDP端口
-l 只显示监听端口
-n 数字形式显示地址和端口
-a 显示所有端口
-p 显示进程ID和进程名(需root权限)
-4 只显示IPv4端口
-6 只显示IPv6端口

实际应用示例

  1. 查看所有监听端口

    linux如何查看端口是否被占用

    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          5                    0.0.0.0:80                 0.0.0.0:*  
  2. 查看指定端口及对应进程

    sudo ss -tulnp | grep :3306

    输出示例(MySQL默认端口3306):

    LISTEN     0          128          127.0.0.1:3306             0.0.0.0:*      users:(("mysqld",pid=5678,fd=11))  

    其中users:(("mysqld",pid=5678,fd=11))明确指出进程名为mysqld,PID为5678。

  3. 过滤IPv4或IPv6端口
    查看IPv4的监听端口:

    ss -4tuln

    查看IPv6的监听端口:

    ss -6tuln
  4. 查看端口统计信息

    ss -s

    输出显示TCP、UDP、监听端口的总数及连接状态分布,

    Total: 1234 (kernel 2567)  
    TCP:   567 (estab 123, closed 23, orphaned 0, synrecv 0, timewait 23/0), ports 123  
    UDP:   45  
    RAW:   0  
    IPSEC: 0  

使用lsof命令查看端口占用

lsof(list open files)用于列出系统打开的文件,在Linux中,一切皆文件,网络端口也被视为文件,因此可通过lsof查询端口占用情况。

基本语法

lsof [选项] [参数]

常用选项及功能

选项 功能
-i 指定网络条件,如-i:80表示80端口,-iTCP:80表示TCP的80端口
-P 不解析端口号为服务名(显示数字端口号)
-n 不解析主机名(显示IP地址)
-p 指定进程ID,查看该进程打开的端口

实际应用示例

  1. 查看指定端口是否被占用

    lsof -i:80

    若端口被占用,输出进程信息,

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
    nginx    1234   root    6u  IPv4   12345      0t0  TCP *:http (LISTEN)  
    nginx    1235 www-data   7u  IPv4   12346      0t0  TCP *:http (LISTEN)  

    其中COMMAND是进程名,PID是进程ID,NAME列显示端口和状态(LISTEN表示监听)。

  2. 查看所有监听端口

    linux如何查看端口是否被占用

    lsof -i -P -n | grep LISTEN

    -i表示网络端口,-P -n避免解析名称,提高速度,grep LISTEN过滤监听状态。

  3. 查看进程占用的所有端口
    例如查看PID为1234的进程占用的端口:

    lsof -p 1234 -i

使用nmap命令远程/本地扫描端口

nmap(Network Mapper)是网络扫描和主机检测工具,不仅可以远程扫描目标主机的端口状态,也可用于本地端口检查,尤其适合安全审计场景。

基本语法

nmap [选项] [扫描目标]

常用选项及功能

选项 功能
-sT TCP连接扫描(完整扫描,需目标主机响应)
-sU UDP扫描
-p 指定端口范围,如-p 1-100-p 80,443,8080
-PN 跳过主机发现,直接扫描端口(适用于防火墙阻拦场景)
-sV 探测端口服务的版本信息
-oG 输出结果为Grepable格式,方便后续处理

实际应用示例

  1. 本地扫描所有TCP端口

    nmap -sT -p 1-65535 localhost

    输出显示每个端口的状态(open表示开放,closed表示关闭,filtered表示被防火墙过滤)。

  2. 扫描本地指定端口

    nmap -p 80,443 localhost

    输出示例:

    Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-01 10:00 CST  
    Nmap scan report for localhost (127.0.0.1)  
    Host is up (0.000012s latency).  
    PORT    STATE SERVICE  
    80/tcp  open  http  
    443/tcp open  https  
  3. 远程扫描目标主机的端口

    nmap -sT -p 22 192.168.1.100

端口占用排查流程总结

当需要排查端口占用问题时,可按以下步骤操作:

  1. 确认端口类型:确定是TCP还是UDP端口(如HTTP为80/tcp,DNS为53/udp)。
  2. 选择合适命令
    • 快速查看监听端口:ss -tuln(推荐)或netstat -tuln
    • 查看端口对应进程:ss -tulnplsof -i:端口号
    • 远程扫描:nmap -p 端口号 目标IP
  3. 分析结果
    • 若端口状态为LISTEN,表示被进程占用,记录PID和进程名。
    • 若端口状态为ESTABLISHED,表示有连接建立,需结合业务判断是否正常。
  4. 处理冲突:若端口被非预期进程占用,可通过kill PID终止进程,或修改服务配置使用其他端口。

相关问答FAQs

Q1:为什么在Linux中使用ss命令比netstat更高效?
A:ss命令的效率更高,主要原因在于它直接从内核的网络栈获取连接信息,通过读取/proc/net/tcp/proc/net/udp等内核文件或使用netlink套接字,避免了netstat中需要遍历/proc目录下所有进程文件的开销,在高并发场景下(如数千个连接),ss的查询速度可能是netstat的数倍,且资源占用更低,ss的输出格式更简洁,默认显示更关键的信息(如状态、地址、进程ID),适合快速排查问题。

Q2:如何查看某个端口被哪个具体的程序占用,并强制终止该进程?
A:以80端口为例,分两步操作:

  1. 查看占用端口的进程
    使用sslsof命令,推荐sudo ss -tulnp | grep :80,输出中会显示进程名和PID,

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

    sudo lsof -i:80,结果类似。

  2. 终止进程
    若确认该进程可终止,使用kill命令发送信号:

    • 正常终止:kill 1234(发送SIGTERM信号,允许进程清理资源后退出)。
    • 强制终止:kill -9 1234(发送SIGKILL信号,立即结束进程,可能导致数据丢失,非必要不使用)。
      若进程名已知,也可使用killall命令,如killall nginx,通过进程名终止所有相关进程。

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

(0)
酷番叔酷番叔
上一篇 2025年9月28日 23:56
下一篇 2025年9月29日 00:17

相关推荐

  • 副业月入过万可能吗

    人工智能是模拟人类智能的技术系统;应用于医疗、交通、制造等领域;正深刻改变人类生活和工作方式。

    2025年7月5日
    5000
  • linux中如何修改字符集

    Linux中,可通过修改`/etc/locale.

    2025年8月14日
    3600
  • 如何将Linux系统ISO镜像文件完整写入移动硬盘制作启动盘?

    将Linux的ISO镜像复制到移动硬盘是一个常见的需求,无论是用于制作启动盘、备份系统镜像还是离线安装,整个过程需要确保移动硬盘格式兼容、操作步骤正确,并验证文件完整性,以下是详细的操作步骤和注意事项,准备工作在开始操作前,需确保以下条件就绪:硬件:一个容量足够的移动硬盘(建议至少8GB,具体取决于ISO大小……

    2025年8月27日
    3400
  • linux 如何往上翻

    Linux 中,可通过键盘上的“Page Up”键或“Ctrl + B”组合键

    2025年8月10日
    3900
  • Linux如何查看系统配置文件?常用命令与方法详解

    Linux系统中,配置文件是系统运行的核心,记录了用户账户、网络设置、服务启动、硬件参数等关键信息,掌握查看系统配置文件的方法,是管理和维护Linux系统的基础能力,本文将详细介绍Linux系统中常见配置文件的存储位置、查看方式及相关工具使用,帮助用户高效获取系统配置信息,常见系统配置文件及存储位置Linux系……

    2025年9月11日
    2500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信