Linux 端口占用查看指南 🔍 📖 目录导航 🌟 简介
Linux 端口占用查看指南 🔍
📖 目录导航
🌟 简介
本指南将介绍在 Linux 系统中查看端口占用情况的多种方法,帮助您快速识别和管理网络连接。无论是排查网络问题、检查服务状态还是安全审计,掌握端口查看技巧都是系统管理员的必备技能。
📦 1. 安装网络工具
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. 注意事项
-
权限要求:查看进程信息需要 root 权限
1
2
3
4
|
# 使用 sudo 获取权限
sudo netstat -tulnp
sudo ss -tulnp
sudo lsof -i
|
-
IPv6 地址:注意 ::
表示 IPv6 的所有地址,相当于 IPv4 的 0.0.0.0
-
端口状态:
LISTEN
:端口正在监听连接
ESTABLISHED
:已建立连接
TIME_WAIT
:连接正在关闭
CLOSE_WAIT
:远程端已关闭连接
-
工具选择:
netstat
:传统工具,功能全面
ss
:更快速,推荐使用
lsof
:功能强大,可以查看文件和其他资源
nmap
:专业的端口扫描工具
-
安全考虑:
- 在生产环境中谨慎使用端口扫描
- 注意不要违反组织的安全政策
- 敏感端口的扫描可能需要额外授权
🔄 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 系统服务!无论是开发调试还是系统维护,这些技能都将大大提高您的工作效率。