必须用 sudo ss -tln 直读内核socket表以100%覆盖全部TCP监听端口,-t限TCP、-l限LISTEN、-n禁DNS解析;sudo lsof -iTCP -sTCP:LISTEN -P -n 可精准定位进程,-P与-n缺一不可防卡顿。

要快速确认当前系统所有正在等待连接的TCP端口,必须绕过DNS解析、避开用户态卡顿、直读内核socket表,否则可能漏掉root进程或返回空结果。
用ss命令直接查内核监听表
执行 sudo ss -tln,这是唯一能100%覆盖全部TCP监听端口的命令。它不查/etc/services、不反向解析IP、不走用户态缓冲,输出即内核真实状态。
注意:不加 sudo 时,只显示当前用户启动的监听进程,systemd服务、nginx、mysql等默认不可见。
这条命令里的 -t 表示只看 TCP 协议,-l 限定为 LISTEN 状态,-n 关闭端口名解析(比如不会把 3306 显示成 mysql),三者缺一不可。
用lsof精准定位每个监听进程
方法一:列出所有TCP监听套接字及其归属进程
执行 sudo lsof -iTCP -sTCP:LISTEN -P -n,输出字段清晰:COMMAND、PID、USER、DEVICE(即 IP:PORT)一目了然。
方法二:只看端口和PID,方便脚本调用
执行 sudo lsof -t -iTCP -sTCP:LISTEN,每行一个PID,可直接用于 kill 或 ps 查看详情。
提示:-P 和 -n 必须同时使用,否则在无 /etc/services 或 DNS 异常的容器里,lsof 会卡住或显示 *:http 而非 *:80。
验证某个端口是否真在监听
第一步:用 ss 快速筛查
执行 sudo ss -tln | grep ':8080',若输出中 State 列为 LISTEN,且 LocalAddress:Port 匹配目标(如 0.0.0.0:8080 或 127.0.0.1:8080),则确认监听。
第二步:交叉验证进程归属
执行 sudo lsof -nP -iTCP:8080 -sTCP:LISTEN,比单纯 grep 更可靠——它过滤掉 ESTABLISHED 连接,避免把已建立的连接误判为监听端口。
第三步:检查绑定地址是否允许外部访问
如果 LocalAddress 是 127.0.0.1:8080,说明只接受本地连接;若是 0.0.0.0:8080 或具体外网IP,才表示可被远程访问。


















