最简洁有效的方式是用 ss -tuln | wc -l 统计当前监听的 TCP/UDP 端口总数,若需排除表头则加 grep -v "^Netid";仅统计 TCP 监听端口可用 ss -tln | wc -l;LISTEN 状态才代表端口被真正占用。

直接统计系统当前正在监听的端口数量,最简洁有效的方式是用 ss 或 netstat 配合 wc -l 计数,关键在于只统计处于 LISTEN 状态的端口行。
统计所有监听中的 TCP/UDP 端口总数
推荐使用 ss(速度快、现代系统默认预装):
-
ss -tuln | wc -l—— 输出数字即为监听端口总行数 - 若需排除表头(某些旧版本 ss 会带标题),可加
grep -v "^Netid":ss -tuln | grep -v "^Netid" | wc -l
只统计 TCP 监听端口数(不含 UDP)
很多服务只用 TCP,单独统计更精准:
ss -tln | wc -l- 或用
netstat(需已安装 net-tools):netstat -tln | grep "LISTEN" | wc -l
查看具体有哪些端口在用(辅助验证)
光看数字不够直观,建议顺手查一下实际占用情况:
-
ss -tuln | sort -k5—— 按本地地址+端口排序,便于识别重复或异常端口 -
ss -tuln | awk '{print $5}' | cut -d':' -f2 | sort -n | uniq | grep -v "\*" | head -20—— 提取并去重纯端口号,显示前20个
注意:LISTEN 才算“被使用”的端口
所谓“已使用的端口”,在运维语境中特指有进程主动调用 bind()+listen() 正在等待连接的端口,即状态为 LISTEN。已建立连接(ESTABLISHED)、关闭中(FIN_WAIT)、等待重传(TIME_WAIT)等状态不计入“端口占用数”——它们属于连接状态,不是端口监听资源本身。


















