netstat查不到进程名需用sudo netstat -tulnp,因-p需root权限;若命令不存在则安装net-tools;替代方案ss -tulnep更高效可靠。

netstat 查不到进程名?先确认权限和选项组合
普通用户运行 netstat -tuln 只能看到监听端口,但无法显示 PID 和进程名;必须加 -p 才能关联进程,而该选项需要 root 权限(或 cap_net_admin 能力)。直接执行 netstat -tulp 会报错:Permission denied 或提示 can't identify protocol。
- 正确做法:用
sudo netstat -tulnp(-n避免 DNS 解析拖慢响应) - 若系统禁用了
netstat(如较新 Ubuntu/Debian),会提示command not found—— 此时应安装net-tools包:sudo apt install net-tools -
-p必须与-t、-u、-l等状态选项共用,单独netstat -p无效
只看某个进程的连接?用 grep 过滤 PID 或进程名
netstat 本身不支持按进程名直接过滤,得靠文本处理。关键不是记命令,而是理解输出字段顺序:第 7 列是 pid/program name,格式为 1234/nginx 或 5678/java。
- 查 nginx 的所有连接:
sudo netstat -tulnp | grep nginx - 查 PID 为 8901 的连接:
sudo netstat -tulnp | grep ':8901/'(注意加冒号和斜杠,避免匹配到端口号) - 想区分 LISTEN 和 ESTABLISHED?加
-a并配合grep -E '(LISTEN|ESTABLISHED)'
netstat 显示的 PID 不可信?检查 /proc 是否挂载且可读
即使加了 -p,有时也看到 - 或空值,常见原因是:/proc 文件系统未挂载、权限受限,或目标进程已退出但连接残留(如 TIME_WAIT 状态)。
- 验证:
ls -l /proc/1/exe应返回类似/sbin/init;若报No such file or directory,说明/proc异常 - 容器内运行时,宿主机
netstat看不到容器进程(PID 命名空间隔离),需进容器执行或改用ss -tulnp+nsenter - 某些 setuid 程序(如
sudo启动的守护进程)会隐藏 PID,此时netstat仅显示-
替代方案:ss 比 netstat 更快更可靠,但语法不同
现代 Linux 发行版默认推荐 ss(来自 iproute2),它不依赖 /proc/net/* 的文本解析,延迟低、结果更准,且对高并发连接更友好。但参数名不兼容:netstat -tulnp 对应 ss -tulnep(注意是小写 e,不是 p)。
-
ss -tulnep:等效于netstat -tulnp,-e输出详细信息含 PID -
ss -tnp state established '( dport = :8080 )':只看连向 8080 的 ESTABLISHED 连接 - 注意:
ss的-p同样需要 root,且部分精简版容器镜像可能没装 iproute2
真正卡住的地方往往不是命令怎么写,而是 /proc 不可读、权限没给够、或者压根没意识到 netstat 在多数新系统里已被弃用 —— 动手前先 which netstat 和 ss --version 看一眼,比硬试三次 grep 有用得多。


















