Featured image of post Linux 端口占用查看指南 🔍

Linux 端口占用查看指南 🔍

Linux 端口占用查看指南 🔍 📖 目录导航 🌟 简介

Linux 端口占用查看指南 🔍

Linux Networking


📖 目录导航


🌟 简介

本指南将介绍在 Linux 系统中查看端口占用情况的多种方法,帮助您快速识别和管理网络连接。无论是排查网络问题、检查服务状态还是安全审计,掌握端口查看技巧都是系统管理员的必备技能。


📦 1. 安装网络工具

安装 net-tools 包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Debian/Ubuntu 系统
sudo apt update && sudo apt install -y net-tools

# CentOS/RHEL 系统
sudo yum install -y net-tools

# 或者使用更现代的替代方案
sudo apt install -y iproute2

# 安装 lsof 工具
sudo apt install -y lsof

# 安装网络诊断工具集
sudo apt install -y net-tools iproute2 lsof nmap tcpdump

验证工具安装

1
2
3
4
5
# 检查工具是否安装成功
which netstat && echo "netstat 已安装" || echo "netstat 未安装"
which ss && echo "ss 已安装" || echo "ss 未安装"
which lsof && echo "lsof 已安装" || echo "lsof 未安装"
which nmap && echo "nmap 已安装" || echo "nmap 未安装"

📊 2. 查看端口占用的多种方法

方法一:使用 netstat 命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看所有 TCP 和 UDP 端口监听情况
sudo netstat -tulnp

# 仅查看 TCP 端口
sudo netstat -tlnp

# 仅查看 UDP 端口
sudo netstat -ulnp

# 查看所有连接(包括已建立的)
sudo netstat -anp

# 查看 IPv4 连接
sudo netstat -4 -tulnp

# 查看 IPv6 连接
sudo netstat -6 -tulnp

参数说明:

  • -t:TCP 协议
  • -u:UDP 协议
  • -l:仅显示监听中的端口
  • -n:以数字格式显示(不解析主机名和服务名)
  • -p:显示进程信息
  • -a:显示所有连接(监听和非监听)
  • -4:仅显示 IPv4 连接
  • -6:仅显示 IPv6 连接

方法二:使用 ss 命令(推荐,更现代)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看所有端口监听情况
sudo ss -tulnp

# 查看 TCP 端口
sudo ss -tlnp

# 查看 UDP 端口
sudo ss -ulnp

# 查看所有连接(包括已建立的)
sudo ss -anp

# 查看 IPv4 连接
sudo ss -4 -tulnp

# 查看 IPv6 连接
sudo ss -6 -tulnp

# 查看监听端口并按端口号排序
sudo ss -tulnp | sort -n -k 4 -t :

方法三:使用 lsof 命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看所有网络连接
sudo lsof -i

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

# 查看 TCP 连接
sudo lsof -i TCP

# 查看 UDP 连接  
sudo lsof -i UDP

# 查看特定进程的网络连接
sudo lsof -i -a -p <PID>

# 查看特定用户的网络连接
sudo lsof -i -u <username>

方法四:使用 nmap 命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 扫描本地主机开放端口
sudo nmap -sS -O 127.0.0.1

# 扫描特定端口范围
sudo nmap -p 1-1000 127.0.0.1

# 快速扫描常用端口
sudo nmap -F 127.0.0.1

# 扫描特定端口
sudo nmap -p 22,80,443,3306,8080,8090 127.0.0.1

🔍 3. 精确查看端口占用

查看所有监听在 0.0.0.0 的端口

1
2
3
4
5
6
7
8
# 使用 netstat
sudo netstat -tulnp | grep "0.0.0.0"

# 使用 ss 命令
sudo ss -tulnp | grep "0.0.0.0"

# 查看监听在所有接口的端口
sudo ss -tulnp | grep -E "0.0.0.0|\*:\*"

精确查看 8090 端口占用情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 使用 netstat
sudo netstat -tulnp | grep ":8090"

# 使用 ss 命令
sudo ss -tulnp | grep ":8090"

# 使用 lsof 命令
sudo lsof -i :8090

# 使用 nmap 命令
sudo nmap -p 8090 127.0.0.1

查看特定协议的端口

1
2
3
4
5
6
7
8
# 查看 TCP 8090 端口
sudo netstat -tlnp | grep ":8090"

# 查看 UDP 8090 端口
sudo netstat -ulnp | grep ":8090"

# 查看 SCTP 端口(如果支持)
sudo netstat -slnp 2>/dev/null | grep ":8090" || echo "SCTP 可能不支持"

🎯 4. 实用示例

示例 1:查看所有 HTTP 相关端口

1
2
3
4
5
# 查看常用 Web 端口
sudo netstat -tulnp | grep -E ":80|:443|:8080|:8090|:8000|:3000"

# 或者使用 ss 命令
sudo ss -tulnp | grep -E ":80|:443|:8080|:8090|:8000|:3000"

示例 2:查看数据库端口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看常用数据库端口
sudo netstat -tlnp | grep -E ":3306|:5432|:27017|:6379"

# MySQL/MariaDB
sudo netstat -tlnp | grep ":3306"

# PostgreSQL
sudo netstat -tlnp | grep ":5432"

# MongoDB
sudo netstat -tlnp | grep ":27017"

# Redis
sudo netstat -tlnp | grep ":6379"

示例 3:查看 SSH 端口

1
2
3
4
sudo netstat -tlnp | grep ":22"

# 或者查看 sshd 进程
sudo ss -tlnp | grep sshd

示例 4:按进程名查找端口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查找 nginx 使用的端口
sudo netstat -tulnp | grep nginx

# 查找 Apache 使用的端口
sudo netstat -tulnp | grep apache

# 使用 pgrep + lsof
sudo lsof -i -P -n | grep $(pgrep nginx)

# 使用 ss 按进程名过滤
sudo ss -tulnp | grep -E "(nginx|apache|httpd)"

📋 5. 输出结果解读

典型的 netstat -tulnp 输出示例:

1
2
3
4
5
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5678/nginx
tcp6       0      0 :::443                  :::*                    LISTEN      5678/nginx
udp        0      0 0.0.0.0:68              0.0.0.0:*                           91011/dhclient

各字段含义:

  • Proto:协议类型(TCP/UDP)
  • Recv-Q:接收队列中的字节数
  • Send-Q:发送队列中的字节数
  • Local Address:本地地址和端口
  • Foreign Address:远程地址和端口
  • State:连接状态(LISTEN, ESTABLISHED, TIME_WAIT 等)
  • PID/Program name:进程ID和程序名称

常见连接状态:

  • LISTEN:端口正在监听连接
  • ESTABLISHED:已建立连接
  • TIME_WAIT:连接正在关闭
  • CLOSE_WAIT:远程端已关闭连接
  • SYN_SENT:正在尝试建立连接

💡 6. 高级技巧

实时监控端口变化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 每2秒刷新一次端口状态
watch -n 2 'sudo netstat -tulnp | head -20'

# 实时监控特定端口
watch -n 1 'sudo netstat -tulnp | grep ":8090"'

# 使用 ss 命令实时监控
watch -n 2 'sudo ss -tulnp'

# 使用顶部风格的实时监控
sudo apt install -y nethogs
sudo nethogs

查看建立连接的端口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看所有已建立的连接
sudo netstat -tnp | grep ESTABLISHED

# 查看连接到特定端口的客户端
sudo netstat -tnp | grep :8090 | grep ESTABLISHED

# 查看外部连接到本机的连接
sudo netstat -anp | grep ESTABLISHED | grep -v 127.0.0.1

# 统计连接数
sudo netstat -an | grep ESTABLISHED | wc -l

按端口号排序查看

1
2
3
4
5
6
7
8
# 按端口号排序
sudo netstat -tulnp | sort -n -k 4 -t :

# 使用 ss 命令并按端口排序
sudo ss -tulnp | sort -n -k 4 -t :

# 按进程ID排序
sudo netstat -tulnp | sort -n -k 7 -t /

查看端口使用统计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看端口使用概况
sudo netstat -s

# 查看 TCP 统计信息
sudo netstat -st

# 查看 UDP 统计信息
sudo netstat -su

# 查看网络接口统计
sudo netstat -i

# 查看路由表
sudo netstat -r

🛠️ 7. 实用脚本

创建端口检查脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
# port_check.sh

# 检查是否提供了端口参数
if [ $# -eq 0 ]; then
    echo "用法: $0 <端口号>"
    echo "示例: $0 8090"
    exit 1
fi

PORT=$1

echo "=== 检查端口 $PORT 占用情况 ==="
echo ""

echo "1. netstat 结果:"
sudo netstat -tulnp | grep ":$PORT" || echo "未找到相关进程"

echo ""
echo "2. ss 命令结果:"
sudo ss -tulnp | grep ":$PORT" || echo "未找到相关进程"

echo ""
echo "3. lsof 结果:"
sudo lsof -i :$PORT || echo "未找到相关进程"

echo ""
echo "4. nmap 扫描结果:"
sudo nmap -p $PORT 127.0.0.1 | grep "$PORT/" || echo "端口未开放"

echo ""
echo "5. 检查防火墙规则:"
# 检查 iptables
sudo iptables -L -n | grep "dpt:$PORT" || echo "无相关 iptables 规则"
# 检查 ufw
sudo ufw status | grep "$PORT" || echo "无相关 ufw 规则"

使用方法:

1
2
chmod +x port_check.sh
sudo ./port_check.sh 8090

端口扫描脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
# port_scan.sh

# 定义要扫描的端口范围
PORTS="22 80 443 3306 5432 6379 27017 8080 8090 9000"

echo "开始扫描常用端口..."
echo ""

for port in $PORTS; do
    result=$(sudo netstat -tulnp 2>/dev/null | grep ":$port " || echo "关闭")
    if [[ $result != "关闭" ]]; then
        echo "端口 $port: 开放 - $result"
    else
        echo "端口 $port: 关闭"
    fi
done

echo ""
echo "扫描完成!"

网络连接监控脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# network_monitor.sh

echo "开始网络连接监控,按 Ctrl+C 停止..."
echo ""

# 设置刷新间隔(秒)
INTERVAL=2

while true; do
    clear
    echo "=== 网络连接监控 - $(date) ==="
    echo ""
    
    # 显示监听端口
    echo "监听中的端口:"
    sudo netstat -tulnp | grep LISTEN | head -10
    
    echo ""
    echo "建立的连接:"
    sudo netstat -tnp | grep ESTABLISHED | head -10
    
    echo ""
    echo "按 Ctrl+C 停止监控"
    
    sleep $INTERVAL
done

⚠️ 8. 注意事项

  1. 权限要求:查看进程信息需要 root 权限

    1
    2
    3
    4
    
    # 使用 sudo 获取权限
    sudo netstat -tulnp
    sudo ss -tulnp
    sudo lsof -i
    
  2. IPv6 地址:注意 :: 表示 IPv6 的所有地址,相当于 IPv4 的 0.0.0.0

  3. 端口状态

    • LISTEN:端口正在监听连接
    • ESTABLISHED:已建立连接
    • TIME_WAIT:连接正在关闭
    • CLOSE_WAIT:远程端已关闭连接
  4. 工具选择

    • netstat:传统工具,功能全面
    • ss:更快速,推荐使用
    • lsof:功能强大,可以查看文件和其他资源
    • nmap:专业的端口扫描工具
  5. 安全考虑

    • 在生产环境中谨慎使用端口扫描
    • 注意不要违反组织的安全政策
    • 敏感端口的扫描可能需要额外授权

🔄 9. 故障排除

如果命令不存在

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 检查 net-tools 是否安装
which netstat || echo "netstat 未安装"

# 安装必要的工具包
if ! command -v netstat &> /dev/null; then
    echo "安装 net-tools..."
    sudo apt update && sudo apt install -y net-tools
fi

if ! command -v ss &> /dev/null; then
    echo "安装 iproute2..."
    sudo apt update && sudo apt install -y iproute2
fi

if ! command -v lsof &> /dev/null; then
    echo "安装 lsof..."
    sudo apt update && sudo apt install -y lsof
fi

如果看不到进程信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 使用 sudo 获取完整权限
sudo netstat -tulnp
sudo ss -tulnp
sudo lsof -i

# 检查权限问题
ls -l /proc/$(pgrep sshd)/exe  # 示例:检查 sshd 进程权限

# 检查 AppArmor/SELinux 限制
sudo aa-status  # AppArmor
sudo sestatus   # SELinux

如果端口显示但服务不可用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 检查防火墙是否阻止
sudo iptables -L -n | grep <端口号>

# 检查服务是否真正监听
sudo lsof -i :<端口号>

# 尝试本地连接
telnet 127.0.0.1 <端口号>

# 或者使用 netcat
nc -zv 127.0.0.1 <端口号>

📚 10. 扩展学习

查看端口对应的服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看 /etc/services 中的端口定义
grep "8090" /etc/services

# 或者使用 getent
getent services 8090

# 查看所有已注册的服务端口
less /etc/services

# 搜索特定服务
grep -i "http" /etc/services

查看防火墙规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看 iptables 规则
sudo iptables -L -n -v

# 查看 NAT 规则
sudo iptables -t nat -L -n -v

# 查看 ufw 状态
sudo ufw status verbose

# 查看 firewalld
sudo firewall-cmd --list-all

# 查看端口转发规则
sudo iptables -t nat -L PREROUTING -n -v

网络诊断工具

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 安装额外网络工具
sudo apt install -y \
    netcat-openbsd \    # netcat 工具
    traceroute \        # 路由跟踪
    mtr \               # 高级路由跟踪
    tcpdump \           # 网络抓包
    wireshark \         # 图形化抓包工具
    iftop \             # 带宽监控
    nload \             # 网络负载监控
    bmon                # 带宽监控和速率估计

网络性能测试

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 安装性能测试工具
sudo apt install -y \
    iperf3 \        # 网络性能测试
    speedtest-cli \ # 网速测试
    netperf \       # 网络性能测试
    sockperf        # 套接字性能测试

# 使用 iperf3 测试带宽
# 服务器端: iperf3 -s
# 客户端: iperf3 -c <服务器IP>

🚀 通过掌握这些端口查看技巧,您将能够快速诊断网络问题、排查端口冲突,并更好地管理您的 Linux 系统服务!无论是开发调试还是系统维护,这些技能都将大大提高您的工作效率。

最后更新于 2025-09-28