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如何用命令行刻录光盘?

    准备工作硬件检查确认光驱支持刻录功能(设备名通常为 /dev/sr0 或 /dev/cdrom),插入空白光盘(CD-R、DVD±R、BD-R 等),安装刻录工具根据发行版选择安装命令:# Debian/Ubuntusudo apt install wodim brasero k3b growisofs# Fe……

    2025年7月28日
    15700
  • Linux C如何获取摄像头视频流?

    Linux系统下通过C语言访问摄像头通常依赖Video for Linux Two(V4L2)框架,这是Linux内核提供的视频设备接口标准,广泛应用于USB摄像头、内置摄像头等视频输入设备,V4L2通过设备文件(如/dev/video0)与用户程序交互,支持视频捕获、格式设置、帧缓冲管理等功能,本文将详细介绍……

    2025年10月2日
    12200
  • 如何把平板刷成Linux系统?详细操作步骤与方法指南

    将平板刷入Linux系统可以赋予设备更强的定制性和开发潜力,但操作过程需谨慎,不同品牌型号的平板可能存在差异,以下以通用安卓平板(如支持解锁Bootloader的设备)为例,详细说明操作步骤及注意事项,前期准备工作确认设备兼容性查看平板是否支持Linux系统,可通过查阅开源社区(如XDA Developers……

    2025年9月16日
    1.9K00
  • Linux如何设置锁屏时间与系统时间?

    在Linux系统中,系统时间与锁屏时间的设置是日常使用中常见的操作,前者关系到系统日志、任务调度等功能的准确性,后者则影响设备的安全性与使用便捷性,本文将详细讲解Linux系统时间设置与锁屏时间设置的具体方法,涵盖不同发行版和桌面环境的操作步骤,并提供实用注意事项,Linux系统时间设置Linux系统时间管理涉……

    2025年9月20日
    14000
  • Linux中如何查看后台运行的所有进程及其详细信息?

    在Linux系统中,后台进程是指在系统中运行但不直接与用户交互的进程,它们通常在后台持续提供服务或执行特定任务,如系统服务、守护进程、用户提交的后台任务等,掌握查看后台进程的方法是Linux系统管理和日常运维的基础技能,本文将详细介绍多种查看后台进程的命令及其使用场景,帮助用户全面掌握进程监控技巧,基础命令:p……

    2025年8月28日
    13300

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信