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

Linux如何查看占用端口

Linux中通过 netstat、 lsof或更新的 ss命令查看 端口占用情况,常用命令如 sudo ss -tuln 可列出正在监听的TCP/UDP端口及其进程信息, lsof -i :端口号可精确查询指定端口。

端口占用的核心原理

端口是网络通信的虚拟端点,每个监听端口的进程可能对应服务(如Web、数据库)或异常占用,排查端口占用需明确:

  • 关键场景:服务启动失败、端口冲突、安全审计、防火墙配置。
  • 权限要求:部分命令需root权限(使用sudo)才能查看所有进程。


五种端口占用检测方法

以下方法适用于绝大多数Linux发行版(Ubuntu、CentOS、Debian等)。

netstat命令(经典推荐)

最通用的工具,系统预装(若未安装:sudo apt install net-tools)。

# 查看所有监听端口及对应进程 sudo netstat -tuln | grep LISTEN # 检查具体端口(如80) sudo netstat -tuln | grep ':80b'

  • 参数解析
    • -t:TCP端口
    • -u:UDP端口
    • -l:仅显示监听端口
    • -n:禁用域名解析(加速输出)
    • -p:显示进程名(需sudo)

      示例输出

      tcp6 0 0 :::80 :::* LISTEN 1234/nginx

ss命令(netstat的高效替代)

直接读取内核数据,速度更快(现代系统推荐)。

Linux如何查看占用端口 第1张

  • 参数解析
    • sport = :端口号:筛选源端口
    • dport = :端口号:筛选目标端口

lsof命令(精准定位进程)

通过进程视角查看端口占用(需安装:sudo apt install lsof)。

# 查看所有TCP/UDP端口占用 sudo lsof -i -P -n # 检查具体端口(如3306) sudo lsof -i :3306

  • 输出关键列

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

    mysqld 1234 mysql 12u IPv6 0xabcd 0t0 TCP *:3306 (LISTEN)

nmap扫描本地端口(高级检测)

适合安全检查与隐藏进程发现(安装:sudo apt install nmap)。

# 扫描本机开放端口 sudo nmap -sT -p- 127.0.0.1

  • 参数解析
    • -sT:TCP连接扫描
    • -p-:扫描1-65535所有端口(缩短扫描用-p 1-1000)

查看/proc文件系统(底层排查)

直接读取内核信息,无需安装工具。

Linux如何查看占用端口 第2张

# 列出所有TCP连接 cat /proc/net/tcp # 解码端口号(十六进制转十进制) echo "obase=10; ibase=16; PORT_HEX" | bc # 替换PORT_HEX为实际值(如1F90→8080)


端口冲突解决方案

发现占用后,根据进程ID(PID)处理:

  1. 查看进程详情: ps aux | grep 1234 # 替换为实际PID
  2. 安全终止进程: sudo kill 1234 # 正常终止 sudo kill -9 1234 # 强制终止(慎用)


最佳实践与注意事项

  1. 权限管理:始终用sudo执行命令,避免遗漏系统进程。
  2. 组合使用
    • 快速检查用ss或netstat
    • 深度分析用lsof
  3. 安全预警
    • 禁用未知监听端口的进程(可能是恶意软件)。
    • 修改默认服务端口(如SSH从22改为非标准端口)。
  4. 自动化工具: # 一键检测80端口占用(返回进程名) sudo lsof -i :80 -t | xargs ps -p


引用说明: 基于Linux内核文档(kernel.org)、Ubuntu Manpage(manpages.ubuntu.com)及网络管理工具官方指南,所有命令均在Ubuntu 22.04、CentOS 7/8环境下验证通过,确保准确性。

Linux如何查看占用端口 第3张

0