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

Linux如何查看占用端口

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

端口占用的核心原理

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

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

五种端口占用检测方法

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

netstat命令(经典推荐)

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

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

# 查看所有监听端口及对应进程
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的高效替代)

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

# 查看所有监听端口
sudo ss -tuln
# 定位占用80端口的进程
sudo ss -tuln sport = :80
  • 参数解析
    • 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文件系统(底层排查)

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

# 列出所有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. 组合使用
    • 快速检查用ssnetstat
    • 深度分析用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环境下验证通过,确保准确性。

0