Linux下如何查看端口占用情况?

在Linux系统中,口是应用程序与网络通信的入口,查看占用情况是系统管理和故障排查中的常见需求,当某个服务无法启动时,可能是端口被其他进程占用;当排查网络问题时,需要确认特定端口是否处于监听状态,本文将详细介绍Linux系统中查看端口占用的多种方法,包括命令工具的使用、参数解析及输出解读,帮助用户高效定位端口相关信息。

linux如何查看端口占用

使用netstat命令查看端口占用

netstat是Linux系统中传统的网络工具,用于显示网络连接、路由表、接口统计等信息,虽然在新版系统中逐渐被ss替代,但在一些老系统或兼容场景中仍被广泛使用。

基本语法与常用参数

netstat命令的基本语法为netstat [选项],查看端口占用时常用以下参数组合:

  • -t:显示TCP端口
  • -u:显示UDP端口
  • -l:仅显示监听端口(即等待连接的端口)
  • -n:以数字形式显示地址和端口,不解析域名和服务名(加快查询速度)
  • -p:显示占用端口的进程ID(PID)和进程名(需root权限)

示例与输出解读

  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表示监听所有IP)
    • State:端口状态(LISTEN表示监听状态)
  2. 查看监听端口并显示对应进程

    sudo netstat -tulnp

    输出示例(增加PID和进程名):

    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     1/sshd              
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     1234/mysqld         

    通过PID/Program name可快速定位占用端口的进程,如mysqld占用3306端口。

  3. 过滤特定端口
    若需查看8080端口是否被占用,可结合grep过滤:

    netstat -tuln | grep 8080

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

ss是iproute2工具包中的命令,作为netstat的替代品,ss在查询速度和功能上更优,尤其是在处理大量网络连接时效率更高,现代Linux发行版(如Ubuntu、CentOS 7+)默认已安装。

基本语法与常用参数

ss命令的基本语法为ss [选项],常用参数包括:

linux如何查看端口占用

  • -t:TCP端口
  • -u:UDP端口
  • -l:仅显示监听端口
  • -n:数字形式显示,不解析域名
  • -p:显示进程ID和进程名
  • -e:显示详细信息(如TCP状态扩展)
  • -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      50         127.0.0.1:3306                   0.0.0.0:*                  
  2. 显示监听端口及进程信息

    sudo ss -tulnp

    输出示例:

    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port     Process                  
    LISTEN     0      128          0.0.0.0:22                     0.0.0.0:*        users:(("sshd",pid=1,fd=3))  
    LISTEN     0      50         127.0.0.1:3306                   0.0.0.0:*        users:(("mysqld",pid=1234,fd=31))  

    Process字段直接显示进程名和PID,比netstat更直观。

  3. 查看特定端口的占用情况

    ss -tuln | grep 8080

    或直接指定端口:

    ss -tulpn 'sport = :8080'

使用lsof命令查看端口占用

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

基本语法

lsof -i:[端口号]
  • -i:指定网络连接
  • [端口号]:可选,若不指定则显示所有网络连接

示例与输出解读

  1. 查看8080端口占用

    sudo lsof -i:8080

    输出示例:

    linux如何查看端口占用

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx    3456   root    6u  IPv4   12345      0t0  TCP *:8080 (LISTEN)
    nginx    3457 www-data  6u  IPv4   12345      0t0  TCP *:8080 (LISTEN)
    • COMMAND:进程名(如nginx)
    • PID:进程ID
    • NAME:监听地址和端口
  2. 查看所有网络连接及端口

    sudo lsof -i

使用nmap命令扫描本地端口

nmap(Network Mapper)是强大的网络扫描工具,通常用于扫描远程主机端口,但也可用于扫描本机端口占用情况,需先安装nmap(sudo apt install nmapsudo yum install nmap)。

基本语法

nmap -sT -O localhost
  • -sT:TCP连接扫描(非root用户可用)
  • -O:检测操作系统信息
  • localhost:扫描本地主机

示例与输出解读

nmap -sT -p 1-1024 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.000010s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
  • PORT:端口号
  • STATE:状态(open表示端口开放,即被占用)

结合systemctl查看服务与端口关联

对于通过systemd管理的服务(如nginx、mysql),可通过systemctl查看服务状态,间接确认端口占用情况。

示例

# 查看nginx服务状态
sudo systemctl status nginx

输出示例:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-10-01 09:30:00 CST; 1h 30min ago
     Docs: man:nginx(8)
 Main PID: 3456 (nginx)
    Tasks: 2 (limit: 1149)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ├─3456 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─3457 nginx: worker process

通过Main PID可获取进程ID,再结合ss或lsof查看端口:

sudo ss -tulnp | grep 3456

工具对比与选择

工具 核心命令 优点 缺点 适用场景
netstat netstat -tulnp 兼容性好,老系统必备 效率低,输出格式较旧 传统系统、简单查询
ss ss -tulnp 速度快,信息丰富,推荐 部分老系统未预装 现代Linux系统首选
lsof lsof -i:端口号 可查文件句柄,适合复杂场景 命令较长,需root权限 深度排查、文件关联查询
nmap nmap -p 端口号 localhost 功能强大,可扫描远程 需安装,扫描速度较慢 网络扫描、本地端口验证
systemctl systemctl status 服务名 关联服务,管理便捷 需知道服务名 服务管理场景

查看Linux端口占用的方法多样,推荐优先使用ss命令,其高效性和信息丰富性能满足大部分需求;若需兼容老系统,netstat仍是可靠选择;lsof适合深度排查文件句柄关联问题;nmap则更适合网络扫描场景,通过结合进程管理命令(如killsystemctl),可进一步解决端口冲突问题,确保系统服务正常运行。

相关问答FAQs

Q1: 如何终止占用端口的进程?
A: 若需终止占用端口的进程,可通过进程ID(PID)或进程名操作,首先通过ss -tulnpnetstat -tulnp找到PID,然后使用kill PID正常终止进程(如kill 1234);若进程无响应,可强制终止kill -9 PID,通过进程名终止则使用killall 进程名(如killall nginx),注意:终止关键进程可能导致服务异常,操作前需确认进程安全性。

Q2: 端口被占用但找不到对应进程怎么办?
A: 可能原因包括:① 进程已结束但端口未释放(TIME_WAIT状态),可等待或调整内核参数(如net.ipv4.tcp_tw_reuse=1);② 进程以root权限运行,普通用户无法查看,需使用sudo执行命令;③ 容器或虚拟机端口映射冲突,检查容器配置(如Docker的-p参数)或虚拟机网络设置;④ 内核模块占用,可通过dmesg | grep 端口号查看内核日志,若仍无法解决,尝试重启相关服务或系统释放端口。

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

(0)
酷番叔酷番叔
上一篇 2025年9月29日 12:13
下一篇 2025年9月29日 12:27

相关推荐

  • Linux系统如何安装GDB调试工具?

    在Linux系统中,GDB(GNU Debugger)是功能强大的调试工具,广泛应用于C/C++等程序的调试,安装GDB的方法因Linux发行版的不同而有所差异,以下是几种常见的安装方式及详细步骤,使用包管理器安装(推荐大多数用户)大多数Linux发行版通过官方包管理器即可直接安装GDB,操作简单且能自动依赖管……

    2025年8月27日
    3100
  • Linux如何安装vim?详细步骤与方法指南

    Vim(Vi IMproved)是一款功能强大的文本编辑器,源自经典的Vi编辑器,支持语法高亮、插件扩展、多窗口编辑等高级功能,是Linux系统管理员和开发者的常用工具,默认情况下,多数Linux系统可能未预装Vim,或仅安装了简化版(如Vi),因此需要手动安装完整版,以下是不同Linux发行版的安装步骤及后续……

    2025年8月28日
    3300
  • 两个Linux系统之间如何传输文件?

    在Linux系统管理中,跨系统传输文件是常见需求,如服务器数据迁移、日志备份、文件共享等,本文将详细介绍几种主流的传输方法,涵盖其原理、操作步骤及适用场景,帮助用户根据实际需求选择最优方案,常用传输方法详解scp(Secure Copy)基于SSH协议,通过加密通道传输文件,简单易用,命令格式为scp [选项……

    2025年9月8日
    2400
  • linux如何上传jar包

    Linux中,可使用scp命令上传jar包,格式如

    2025年8月10日
    3700
  • Linux下如何查看文件的大小?

    在Linux系统中,查看文件大小是日常运维和开发中的常见需求,不同命令提供了多样化的查看方式,适用于不同场景,本文将详细介绍几种常用命令及其用法,帮助用户高效获取文件大小信息,ls命令:快速查看文件大小ls是Linux中最基础的文件列表命令,配合参数可直观显示文件大小,基础用法ls -l:以长格式显示文件详细信……

    2025年8月22日
    3200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信