netstat 本身不支持直接按 UID 过滤,但可通过 sudo netstat -tulnep 获取含 UID 的完整信息后用 awk 或 grep 筛选;UID 通常在第 8 列,如 sudo netstat -tulnep | awk '$8 == 1001',或改用更稳定的 ss 命令:sudo ss -tulnep | grep 'uid:1001'。

netstat 本身不支持直接按 UID 过滤进程连接,但可以通过组合权限、输出字段和文本处理实现目标——关键在于先获取含 UID 的完整信息,再筛选。
必须用 sudo + -e 参数才能看到 UID
普通用户运行 netstat 无法显示 UID;-e(扩展信息)选项会添加 UID、Inode 等字段,但它依赖 root 权限。正确命令是:
- sudo netstat -tulnep:显示所有监听的 TCP/UDP 套接字,并附带 UID、PID 和程序名
- sudo netstat -tunep:若只关心活跃连接(非仅监听),去掉 -l
- 注意:-e 和 -p 必须同时使用,-e 提供 UID,-p 关联进程;单独 -e 不显示进程名,单独 -p 不显示 UID
用 awk 或 grep 提取指定 UID 的行
netstat -tulnep 输出中,UID 出现在倒数第二列(PID/Program name 前一列),格式为 UID。例如:
PID/Program name UID 1234/nginx 0 5678/java 1001
筛选 UID 为 1001 的连接:
- sudo netstat -tulnep | awk '$8 == 1001'(多数发行版 UID 在第 8 列)
- sudo netstat -tulnep | grep ' 1001/'(用空格+UID+斜杠定位,避免匹配到 PID 中的数字)
- 列号可能因系统略有差异,可先执行 sudo netstat -tulnep | head -1 查看表头对齐
替代方案:ss 更稳定且字段明确
ss 是现代推荐工具,其 -e 输出包含 uid 字段,结构更清晰:
- sudo ss -tulnep | awk '$7 ~ /uid:/ {if ($7 ~ /uid:1001/) print}'
- 或更简洁:sudo ss -tulnep | grep 'uid:1001'
- ss 的 uid 字段固定在每行靠前位置,不易错位;且不依赖 /proc/net/* 文本解析,结果更可靠
补充说明:UID 显示异常的常见原因
即使加了 -e,有时仍看到 - 或空 UID,可能是:
- /proc 文件系统未正常挂载(检查 mount | grep proc)
- 目标进程由 setuid 程序启动(如某些特权守护进程),内核隐藏真实 UID
- 容器环境中,宿主机 netstat 无法读取容器内进程的 UID(需进入容器或用 nsenter)

















