Contents

Linux 端口占用查看方法完整指南

Linux 端口占用查看方法完整指南

概述

在Linux系统管理和故障排查中,查看端口占用情况是一项基本且重要的技能。本文将详细介绍多种查看端口占用的方法,以及各自的优缺点和使用场景。

常用查看命令

1. 使用 ss 命令(推荐)

ss 命令是 netstat 的现代替代品,执行速度更快,效率更高:

# 查看所有端口占用情况
sudo ss -tulnp

# 查看特定端口(如80端口)
sudo ss -tulnp | grep :80

# 只查看监听状态的端口
sudo ss -tlnp

# 查看TCP端口
sudo ss -tnp

# 查看UDP端口
sudo ss -unp

2. 使用 netstat 命令(传统方法)

netstat 是传统的网络状态查看工具,在新系统中可能需要手动安装:

# 查看所有端口占用情况
sudo netstat -tulnp

# 查看特定端口
sudo netstat -tulnp | grep :22

# 查看监听状态的端口
sudo netstat -tlnp

参数说明:

  • -t:显示TCP端口
  • -u:显示UDP端口
  • -l:只显示监听状态的端口
  • -n:以数字形式显示地址和端口
  • -p:显示占用端口的进程信息

3. 使用 lsof 命令

lsof 可以列出打开的文件,包括网络连接:

# 查看所有端口占用
sudo lsof -i

# 查看特定端口
sudo lsof -i :80

# 查看TCP端口
sudo lsof -i tcp

# 查看UDP端口
sudo lsof -i udp

# 只显示进程PID
sudo lsof -ti :80

4. 使用 fuser 命令

fuser 专门用于识别使用文件或套接字的进程:

# 查看占用特定端口的进程
sudo fuser 80/tcp

# 查看详细信息
sudo fuser -v 80/tcp

# 杀死占用端口的进程(谨慎使用)
sudo fuser -k 80/tcp

输出结果解读

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=1234,fd=3))
LISTEN   0        128              0.0.0.0:80             0.0.0.0:*       users:(("nginx",pid=5678,fd=6))

各字段含义:

  • State:连接状态(LISTEN、ESTABLISHED等)
  • Recv-Q:接收队列长度
  • Send-Q:发送队列长度
  • Local Address:Port:本地地址和端口
  • Peer Address:Port:远程地址和端口
  • Process:占用端口的进程信息

实用技巧和最佳实践

1. 快速定位冲突端口

# 检查端口是否被占用
port=8080; sudo ss -tlnp | grep -q ":$port" && echo "端口 $port 被占用" || echo "端口 $port 可用"

2. 实时监控端口变化

# 每2秒刷新一次端口状态
watch -n 2 'sudo ss -tulnp'

# 监控特定端口
watch -n 2 'sudo ss -tulnp | grep :80'

3. 查找占用端口的进程详情

# 获取占用80端口的进程PID
pid=$(sudo ss -tlnp | grep :80 | awk '{print $7}' | cut -d',' -f2 | cut -d'=' -f2)

# 查看进程详细信息
ps -p $pid -f

4. 批量检查常用端口

# 检查常用服务端口
ports="22 80 443 3306 6379 8080"
for port in $ports; do
    if sudo ss -tlnp | grep -q ":$port"; then
        echo "端口 $port: 占用"
    else
        echo "端口 $port: 可用"
    fi
done

常见端口号参考

端口服务说明
22SSH远程登录
80HTTPWeb服务
443HTTPS加密Web服务
3306MySQL数据库服务
6379Redis缓存服务
8080HTTP备用常用备用Web端口
3000Node.js常见开发端口
5000FlaskPython Web框架
8000DjangoPython Web框架

故障排查场景

场景1:服务启动失败

当服务无法启动并提示端口被占用时:

# 1. 检查端口占用
sudo ss -tlnp | grep :目标端口

# 2. 获取进程信息
sudo lsof -i :目标端口

# 3. 决定是否终止进程
sudo kill -9 进程PID

场景2:安全审计

检查异常端口开放情况:

# 查看所有监听端口
sudo ss -tlnp

# 查找非标准端口
sudo ss -tlnp | grep -v -E ':(22|80|443|3306|6379)'

# 查看外部可访问的端口
sudo ss -tlnp | grep '0.0.0.0:'

性能对比

不同命令的性能差异:

  • ss:最快,现代系统推荐
  • netstat:中等速度,传统工具
  • lsof:较慢,但功能丰富
  • fuser:快速定位特定端口

注意事项

  1. 权限要求:大多数命令需要 sudo 权限才能显示完整的进程信息
  2. 命令可用性:某些系统可能需要安装 net-tools 包来获取 netstat
  3. 结果准确性:确保使用最新数据,特别是在高并发环境下
  4. 安全考虑:谨慎使用进程终止命令,避免影响重要服务

总结

在现代Linux系统中,推荐使用 ss 命令来查看端口占用情况,它结合了速度和功能性的优势。对于特定的故障排查场景,可以结合使用 lsoffuser 来获取更详细的进程信息。掌握这些命令将大大提高系统管理和故障排查的效率。