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 nmap或sudo 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则更适合网络扫描场景,通过结合进程管理命令(如kill、systemctl),可进一步解决端口冲突问题,确保系统服务正常运行。

相关问答FAQs

Q1: 如何终止占用端口的进程?
A: 若需终止占用端口的进程,可通过进程ID(PID)或进程名操作,首先通过ss -tulnp或netstat -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系统中,Makefile是自动化构建软件项目的核心工具,它通过定义依赖关系和构建规则,显著提升编译效率,以下内容将详细解析Makefile的编写方法,结合最佳实践与专业技巧,Makefile基础结构一个完整的Makefile由规则、变量和指令组成:[TAB]命令1[TAB]命令2目标文件 (Targ……

    2025年6月20日
    23300
  • Linux系统如何正确读取脚本文件内容?

    在Linux系统中,脚本是一组预先编写的命令集合,通常以.sh为扩展名,通过解释器(如bash、sh等)读取并执行,以实现自动化任务或复杂操作,要正确读取并执行Linux脚本,需理解脚本的创建、权限设置、解释器调用、参数传递及错误处理等核心环节,以下从基础到进阶详细说明Linux如何读取脚本,脚本的创建与编辑脚……

    2025年10月6日
    27100
  • Linux中如何将Nginx安装到指定目录?

    在Linux系统中将Nginx安装到指定目录,需通过源码编译方式实现,因为官方提供的二进制包通常固定安装路径,以下是详细步骤,涵盖环境准备、依赖安装、源码编译及配置验证,确保Nginx准确部署到目标目录,环境准备与依赖安装Nginx编译依赖基础开发工具和库文件,需提前安装,不同Linux发行版的依赖包名称略有差……

    2025年9月23日
    21400
  • linux如何删除link

    Linux中,使用rm命令删除链接文件,rm 文件名。

    2025年8月15日
    20600
  • Linux系统如何对根分区进行扩容操作?

    Linux系统根分区(/)空间不足时,会影响系统正常运行,甚至导致服务异常或无法登录,扩容根分区需根据当前磁盘分区类型(LVM或普通分区)选择不同方法,操作前务必备份重要数据,避免因操作失误导致数据丢失,以下是详细的扩容步骤及注意事项,检查当前磁盘及分区情况确认根分区挂载点及文件系统类型使用df -h命令查看根……

    2025年10月4日
    24900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信