lsof -t 并非标准选项,linux 官方 lsof 不支持;应使用 lsof -itcp/-iudp/-i 等配合 -t 统计连接数,或直接读取 /proc/net/{tcp,udp} 获取更可靠结果。

lsof -T 并不是一个标准的、被广泛支持的 lsof 选项,**Linux 官方 lsof(如 procps-ng 或较新版本)并不识别 -T 参数**。直接运行 lsof -T 通常会报错:lsof: illegal option character: T 或提示未知选项。
你可能混淆了以下几种常见情况:
1. 实际可用的协议连接统计方法(推荐)
要快速统计当前系统中各网络协议(TCP、UDP、UNIX 等)的活动连接句柄总数,应使用 lsof 的 -i(网络文件)配合 -a(AND 逻辑)和 -t(仅输出 PID)或结合 awk 统计:
-
lsof -iTCP -sTCP:ESTABLISHED -t | wc -l—— 统计已建立的 TCP 连接数(句柄数) -
lsof -iUDP -t | wc -l—— 统计 UDP 套接字总数(含监听与已连接) -
lsof -i -t | wc -l—— 所有网络套接字(TCP/UDP/RAW 等)句柄总数 -
lsof -i4 -t | wc -l—— 仅 IPv4 网络句柄数 -
lsof -i6 -t | wc -l—— 仅 IPv6 网络句柄数
2. 按协议类型分组统计(更清晰)
用 lsof -i 输出并提取协议字段,再用 awk 分类计数:
lsof -i -n -P | awk '$9 ~ /^([[:alnum:]]+:\/\/|[^[:space:]]+:[0-9]+)$/ {split($9, a, ":"); proto = tolower(a[1]); if (proto ~ /tcp|udp|raw|unix/) print proto}' | sort | uniq -c | sort -nr
说明:该命令提取 lsof 网络行第 9 列(NAME 字段),粗略分离协议前缀(如 tcp, udp, unix),再计数排序。注意 UNIX 域套接字需额外加 lsof -U 单独统计。
3. 更可靠替代方案:/proc/net/ 直接读取
内核暴露的接口更轻量、无依赖,适合脚本化统计:
-
wc -l /dev/null | awk '{print $1-1}'—— TCPv4 已建立 + 监听等状态总数(减 1 是去掉表头) -
wc -l /dev/null | awk '{print $1-1}'—— UDPv4 套接字总数 -
wc -l /dev/null | awk '{print $1-1}'—— TCPv6 总数 -
ls -1 /proc/[0-9]*/fd/* 2>/dev/null | grep -E '\.sock$' | wc -l—— 所有进程打开的 UNIX 域 socket 句柄数(较慢,慎用于高负载)
4. 关于 “-T” 的可能来源
极少数旧版或定制编译的 lsof(如某些 Solaris 或 AIX 移植版)可能支持 -T 用于显示“终端设备”或“TTY”信息,但与网络协议统计完全无关。Linux 发行版默认 lsof(如 Ubuntu/Debian 的 lsof 包、RHEL/CentOS 的 lsof)均不支持该选项用于协议分类。
想快速获取协议级连接句柄总数,优先用 lsof -i 加管道过滤,或直接查 /proc/net/。别依赖不存在的 -T 选项。











