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

Linux如何查端口占用情况?

在Linux中查看端口占用情况,常用命令:,1. netstat -tuln | grep ,2. lsof -i : ,3. ss -tuln | grep ,若返回结果则被占用,无输出表示空闲。

Linux 系统中,查看端口占用情况是网络管理和故障排查的关键操作,以下是 6 种专业方法及其详细操作指南,适用于所有主流的 Linux 发行版(Ubuntu、CentOS、Debian 等):


方法一:使用 netstat 命令(经典工具)

sudo netstat -tuln | grep ":端口号"
  • 参数解析
    -t(TCP)-u(UDP)-l(仅监听端口)-n(显示数字端口)
  • 示例:检查 80 端口
    sudo netstat -tuln | grep ":80"
  • 输出解读
    tcp6   0   0 :::80   :::*    LISTEN   1234/nginx

    表示 80 端口被 Nginx 进程(PID 1234)占用。

    Linux如何查端口占用情况?  第1张

️ 注意:部分新系统需安装 net-toolssudo apt install net-tools(Debian/Ubuntu)或 sudo yum install net-tools(CentOS/RHEL)


方法二:使用 ss 命令(推荐,更高效)

sudo ss -tuln | grep ":端口号"
  • 优势:比 netstat 更快,直接读取内核数据
  • 示例:检查 3306 端口
    sudo ss -tuln | grep ":3306"
  • 输出关键列
    Local Address:Port → 本地监听地址
    Process → 进程名/PID(需加 -p 参数)

️ 方法三:使用 lsof 命令(查看进程详情)

sudo lsof -i :端口号
  • 直接定位进程:显示占用端口的程序路径、用户、PID
  • 示例:检查 22 端口(SSH)
    sudo lsof -i :22
  • 典型输出
    sshd   1234  root    3u  IPv4  23456      0t0  TCP *:22 (LISTEN)

    → 进程名:sshd,PID:1234,用户:root


方法四:使用 nmap 扫描本地端口

sudo nmap -sT -p 端口号 localhost
  • 适用场景:验证端口开放状态(即使无监听进程)
  • 安装命令
    sudo apt install nmap      # Debian/Ubuntu
    sudo yum install nmap      # CentOS/RHEL
  • 示例:扫描 8080 端口
    sudo nmap -sT -p 8080 localhost
  • 结果解读
    open → 端口被占用
    closed → 端口未被占用

方法五:使用 telnetnc 测试连通性

telnet localhost 端口号
# 或
nc -zv localhost 端口号
  • 间接判断逻辑
    连接成功 → 端口被占用(或有服务响应)
    连接拒绝 → 端口未被占用
  • 示例:测试 6379(Redis)
    nc -zv 127.0.0.1 6379
    Connection to 127.0.0.1 6379 port [tcp/*] succeeded!  # 端口占用

方法六:查看 /proc/net 系统文件

grep -r ":端口号" /proc/net/tcp /proc/net/udp
  • 底层原理:直接读取内核网络堆栈信息
  • 端口转换
    需将十进制端口转为十六进制(如 80 → 0050
  • 示例:查找十六进制端口 1F90(8080)
    grep -r ":1F90" /proc/net/tcp

最佳实践总结

场景 推荐命令 优势
快速检查端口占用 ss -tuln 速度快,无需安装
需查看进程详细信息 lsof -i :端口号 显示进程路径、用户、PID
确认端口开放状态 nmap localhost 精确识别过滤状态
兼容旧系统 netstat -tuln 广泛支持

操作注意

  1. 普通用户可能无权限查看系统进程,请使用 sudo
  2. 检查 UDP 端口需显式指定 -u 参数(如 ss -uln
  3. 云服务器需同步检查安全组/防火墙规则

️ 端口占用冲突解决方案

若发现端口被占用,可通过以下步骤释放:

  1. 终止进程
    sudo kill -9 PID              # 强制终止(根据 lsof/ss 获取的 PID)
  2. 更改服务配置
    修改对应服务的配置文件(如 Nginx 的 /etc/nginx/nginx.conflisten 指令)
  3. 检查僵尸进程
    ps aux | grep defunct         # 清理僵尸进程释放资源

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

  • ss(8) – iproute2 工具集
  • lsof(8) – LiSt Open Files
  • netstat(8) – net-tools 手册
  • nmap(1) – 网络探测工具官方指南
0