当前位置:首页 > Linux > 正文

Linux端口被占用怎样查?

在Linux中查看端口被占用,使用命令如 netstat -tuln(列出监听端口)、lsof -i :端口号(指定端口)或 ss -tuln(现代替代),这些工具显示占用进程,运行需root权限查看所有信息。

在Linux系统中,端口占用是常见问题,可能导致服务启动失败或网络异常,以下是专业、高效且详细的排查方案,所有操作需root权限执行(命令前加sudo):


4种核心排查工具

netstat命令(经典工具)

netstat -tuln | grep :端口号
  • 参数解析
    • -t:TCP端口
    • -u:UDP端口
    • -l:仅监听状态的端口
    • -n:显示数字地址(不解析域名)
  • 示例:查看80端口占用
    netstat -tuln | grep :80

    输出关键字段
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
    → 进程ID:1234,进程名:nginx

    Linux端口被占用怎样查?  第1张


ss命令(netstat升级版,速度更快)

ss -ltnp | grep :端口号
  • 参数解析
    -l(监听端口) -t(TCP) -u(UDP) -n(数字格式) -p(显示进程)
  • 示例:检查3306端口
    ss -ltnp | grep :3306

    输出示例
    LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=889,fd=21))


lsof命令(查看文件与进程关联)

lsof -i :端口号
  • 直接定位进程
    lsof -i :22  # 检查SSH端口

    输出关键字段
    sshd 789 root 3u IPv4 19186 0t0 TCP *:ssh (LISTEN)
    → 进程名:sshd,PID:789


fuser命令(通过端口查进程ID)

fuser 端口号/tcp  # 指定协议类型(tcp/udp)
  • 示例
    fuser 8080/tcp

    输出8080/tcp: 5678 → 进程PID:5678

  • 强制结束占用(慎用):
    fuser -k 8080/tcp  # 终止占用8080端口的进程

端口占用处理步骤

  1. 定位进程
    ss -tulnp | grep :80  # 确认PID及进程名
  2. 验证进程用途
    ps aux | grep PID  # 替换为实际PID
  3. 安全处理
    • 重启服务:systemctl restart 服务名
    • 终止进程:kill -9 PID(强制结束)
    • 停用服务:systemctl stop 服务名

排查技巧

  • 查看所有监听端口
    ss -tuln  # 快速扫描全部开放端口
  • 检测外部连接
    netstat -antp  # 查看所有活跃连接(含远程IP)
  • 常见服务端口参考
    • 22 → SSH
    • 80/443 → HTTP/HTTPS
    • 3306 → MySQL
    • 5432 → PostgreSQL

命令 适用场景 速度
netstat 兼容旧系统,基础检查 较慢
ss 新系统首选,信息全面 极快
lsof 查看进程详情 中等
fuser 直接关联协议与进程

️ 操作前务必确认进程用途!强制结束系统关键进程可能导致服务崩溃。


引用说明
本文方法基于Linux内核文档(kernel.org)及以下工具手册:

  1. netstat:net-tools 2.10+
  2. ss:iproute2 5.10+
  3. lsof:v4.93+
  4. fuser:psmisc 23.4+
0