登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  linux

ss 查看监听端口与进程归属的过滤方法

来源:17golang原创

时间:2026-09-29 05:48:56 326浏览 收藏

在 Linux 上确认“哪个服务正在监听 8080 端口”,我通常先用 ss,而不是把 netstat、ps 和文本过滤串成一长串。它能一次显示协议、监听地址、端口以及进程归属。最小可用命令是 sudo ss -lntup;如果只查 TCP 8080,则用 sudo ss -lntp '( sport = :8080 )'。

速查结论
  • -l 只看监听,-n 保留数字地址和端口,-t/-u 区分 TCP/UDP。
  • -p 显示进程名、PID 和 fd;看不到归属时先补 sudo。
  • 过滤器要写清协议和端口,最后再核对 IPv4、IPv6 与容器网络。

先用 ss 建立监听清单

盘点主机时,先分别看 TCP 和 UDP。-l 把已建立连接排除掉,-n 防止服务名解析让结果变慢或改变展示形式,-H 可去掉表头,适合后续脚本处理。

ss 展示监听协议地址端口和进程信息的原创结构图
图1:从监听状态、地址族、端口到进程归属的 ss 信息层次。
# 同时查看 TCP/UDP 监听,并保留数字地址与进程信息
sudo ss -lntup

# 只查看 TCP 或 UDP 监听,便于区分同一端口的不同协议
sudo ss -lntp
sudo ss -lnup

输出中的 Local Address:Port 是本机绑定的地址和端口,Peer Address:Port 在监听场景通常不是排查重点。0.0.0.0:8080 表示监听所有 IPv4 地址,[::]:8080 表示 IPv6 通配地址;不能只看到端口数字就认定两者一定是同一个监听对象。

让端口行显示进程归属

加上 -p 后,常见结果会出现类似 users:(("nginx",pid=2140,fd=7)) 的信息:进程名帮助快速判断服务,pid 用于继续查启动参数,fd 则表示该进程持有的套接字文件描述符。普通用户权限不足时,端口仍可能列出来,但进程归属字段可能为空或不完整。

# 用 PID 继续核对启动命令;变量只接收人工确认过的数字 PID
pid=2140
ps -p "$pid" -o pid=,ppid=,user=,comm=,args=

# 查看某个进程打开的网络文件描述符,辅助确认端口归属
sudo ls -l "/proc/$pid/fd" 2>/dev/null | grep 'socket:'

如果多个进程都显示同一个服务名,不要直接杀进程。先用 ps 看父进程和启动参数,再结合 systemd、容器或 supervisor 的管理关系判断应该重载、停止还是修正配置。

用过滤表达式锁定目标端口

ss 的过滤表达式比简单的 grep 8080 更稳,因为它能把端口放在协议字段中匹配。TCP 监听可以这样写,外层引号用于让 shell 不改写括号:

ss 按协议端口和地址族过滤的原创决策图
图2:按 TCP/UDP、端口和 IPv4/IPv6 地址族逐层缩小 ss 结果。
# 精确查看 TCP 本地源端口 8080 的监听项
sudo ss -lntp '( sport = :8080 )'

# 查 UDP 8080;UDP 没有 TCP 的 LISTEN 状态,但仍可查看本地绑定
sudo ss -lnup '( sport = :8080 )'

# 只看 IPv4 或 IPv6,排除地址族造成的误判
sudo ss -4lntp '( sport = :8080 )'
sudo ss -6lntp '( sport = :8080 )'

如果目标服务绑定的是具体地址,例如 127.0.0.1:8080,远程客户端无法直接访问并不等于端口没有监听。相反,绑定 0.0.0.0 只说明 socket 接受所有 IPv4 本地地址,是否能从外部访问还要看防火墙、安全组和网络命名空间。

权限、容器与结果边界

排查宿主机服务时优先使用 sudo,并把命令输出保存为一次性的证据,而不是反复刷新后凭印象判断。若宿主机看不到容器内进程,先确认端口是否通过发布规则映射到宿主机;进入容器或对应网络命名空间后再执行同样的 ss 查询。

# 记录一次带时间的监听清单,便于和发布前后结果对比
date -Is
sudo ss -H -lntup | sort

# 只在确认服务由 systemd 管理后查看状态,避免把 PID 当成服务名
systemctl status nginx --no-pager

最后按四项复查:协议是否正确、监听地址是否符合预期、进程 PID 是否仍存活、访问路径是否还受防火墙或容器映射影响。这样即使 ss 显示了端口,也不会把“本机有监听”误判成“外部一定可访问”。

相关问题

为什么能看到端口却看不到进程?

最常见原因是没有足够权限,先用 sudo ss -lntp 重试;如果仍为空,再检查是否查询了正确的网络命名空间。

ss 和 grep 过滤有什么区别?

grep 只是匹配显示文本,可能把远端端口或进程参数中的数字一并匹配;ss 过滤器直接作用于 socket 字段,更适合精确排查。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>