Linux 端口占用查看指南 🔍

📖 目录导航
🌟 简介
本指南将介绍在 Linux 系统中查看端口占用情况的多种方法,帮助您快速识别和管理网络连接。无论是排查网络问题、检查服务状态还是安全审计,掌握端口查看技巧都是系统管理员的必备技能。
📦 1. 安装网络工具
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| sudo apt update && sudo apt install -y net-tools
sudo yum install -y net-tools
sudo apt install -y iproute2
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
| sudo netstat -tulnp
sudo netstat -tlnp
sudo netstat -ulnp
sudo netstat -anp
sudo netstat -4 -tulnp
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
sudo ss -tlnp
sudo ss -ulnp
sudo ss -anp
sudo ss -4 -tulnp
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
sudo lsof -i TCP
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
| sudo netstat -tulnp | grep "0.0.0.0"
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
| sudo netstat -tulnp | grep ":8090"
sudo ss -tulnp | grep ":8090"
sudo lsof -i :8090
sudo nmap -p 8090 127.0.0.1
|
查看特定协议的端口
1 2 3 4 5 6 7 8
| sudo netstat -tlnp | grep ":8090"
sudo netstat -ulnp | grep ":8090"
sudo netstat -slnp 2>/dev/null | grep ":8090" || echo "SCTP 可能不支持"
|
🎯 4. 实用示例
示例 1:查看所有 HTTP 相关端口
1 2 3 4 5
| sudo netstat -tulnp | grep -E ":80|:443|:8080|:8090|:8000|:3000"
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"
sudo netstat -tlnp | grep ":3306"
sudo netstat -tlnp | grep ":5432"
sudo netstat -tlnp | grep ":27017"
sudo netstat -tlnp | grep ":6379"
|
示例 3:查看 SSH 端口
1 2 3 4
| sudo netstat -tlnp | grep ":22"
sudo ss -tlnp | grep sshd
|
示例 4:按进程名查找端口
1 2 3 4 5 6 7 8 9 10 11
| sudo netstat -tulnp | grep nginx
sudo netstat -tulnp | grep apache
sudo lsof -i -P -n | grep $(pgrep nginx)
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
| watch -n 2 'sudo netstat -tulnp | head -20'
watch -n 1 'sudo netstat -tulnp | grep ":8090"'
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 :
sudo ss -tulnp | sort -n -k 4 -t :
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
sudo netstat -st
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
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. 检查防火墙规则:"
sudo iptables -L -n | grep "dpt:$PORT" || echo "无相关 iptables 规则"
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
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
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 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
| 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 netstat -tulnp sudo ss -tulnp sudo lsof -i
ls -l /proc/$(pgrep sshd)/exe
sudo aa-status sudo sestatus
|
如果端口显示但服务不可用
1 2 3 4 5 6 7 8 9 10 11
| sudo iptables -L -n | grep <端口号>
sudo lsof -i :<端口号>
telnet 127.0.0.1 <端口号>
nc -zv 127.0.0.1 <端口号>
|
📚 10. 扩展学习
查看端口对应的服务
1 2 3 4 5 6 7 8 9 10 11
| grep "8090" /etc/services
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
| sudo iptables -L -n -v
sudo iptables -t nat -L -n -v
sudo ufw status verbose
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 \ 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
|
🚀 通过掌握这些端口查看技巧,您将能够快速诊断网络问题、排查端口冲突,并更好地管理您的 Linux 系统服务!无论是开发调试还是系统维护,这些技能都将大大提高您的工作效率。