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

Linux 怎么查询指定端口由哪个进程监听

来源:17golang原创

时间:2026-09-06 08:08:50 111浏览 收藏

Linux 上想知道“8080 到底被谁占了”,首选不是盯着一长串进程列表,而是先查询监听 socket,再把端口对应到进程。最小可用命令是 sudo ss -ltnp 'sport = :8080'-l 只看监听,-t 限定 TCP,-n 保留数字地址和端口,-p 显示使用该 socket 的进程。若没有结果,再分别检查 UDP、IPv6 和权限,不要直接把“查不到”理解成“端口空闲”。

要点速览
  • 查 TCP 监听:sudo ss -ltnp 'sport = :端口'
  • 查 UDP 监听:sudo ss -lunp 'sport = :端口';需要时同时看 TCP 和 UDP。
  • Local Address:Port 说明绑定范围,users 字段用于确认进程名、PID 和文件描述符。
日常操作Linux系统排查服务端口占用问题的时候,想要找到指定端口是被哪个进程监听,完全可以用系统自带的常用命令直接查询,不用额外安装复杂工具就能拿到进程ID、进程名这类核心信息。
没有特殊依赖需求的场景下,推荐优先用ss命令查询,绝大多数主流Linux发行版都默认预装了这个工具,查询速度快返回信息全;部分旧系统没有ss的话,用netstat、lsof也可以快速得到想要的结果。

先用 ss 看清监听 socket 与进程

ss 是 iproute2 提供的 socket 统计工具。它默认不会只列出监听 socket,所以定位服务时要显式加 -l;端口映射又需要进程信息,因此还要加 -p。直接查看本机 TCP 监听可以这样写:

# 只看 TCP 监听,并显示进程归属
sudo ss -ltnp

输出中的 Local Address:Port 是监听地址和端口,users 部分通常会给出进程名、pidfd。例如绑定到 127.0.0.1:8080 的服务只能从本机回环地址访问;绑定到 0.0.0.0:8080 则表示监听所有 IPv4 地址。这里先看绑定地址,再判断“端口被占用”是否真的影响了外部访问。

如果只知道协议而不知道端口,先用这条命令建立范围;如果已经知道端口,直接加过滤器会更快。-n 很有用,它避免把端口转换成服务名称,让你看到明确的数字,便于复制到后续排查命令。

Linux ss 查询中监听 socket、TCP UDP、IPv4 IPv6、端口过滤与 PID 进程名的静态关系图
图1:监听 socket 是端口定位的入口,协议和地址条件决定查询范围,进程名与 PID 用来确认归属。

按端口过滤,再回到服务管理层

例如排查 8080 端口时,推荐把过滤表达式交给 ss,比先输出全部结果再用文本匹配更清楚:

# 只查本机 TCP 源端口为 8080 的监听 socket
sudo ss -ltnp 'sport = :8080'

这里的 sport 表示源端口;对监听 socket 来说,它就是服务绑定的本地端口。端口前的冒号表示不限定本地地址。若要同时限定地址,可以写成 src 127.0.0.1:8080,但 IPv4 和 IPv6 条件混用时要谨慎,先分别查询通常更容易解释结果。

UDP 服务没有 TCP 的连接状态,查询时换成 -u

# 只查 UDP 监听,并显示进程信息
sudo ss -lunp 'sport = :8080'

也可以用 sudo ss -lntup 'sport = :8080' 同时覆盖 TCP 和 UDP。若看到了 PID,下一步不要凭进程名猜服务,先确认完整命令行,再判断它由哪个服务管理单元启动:

# 用 PID 查看完整命令行;把 1234 换成 ss 输出里的真实 PID
tr '\0' ' ' 

ss 负责回答“哪个进程持有监听 socket”,/procsystemctl 负责补充“这个进程从哪里启动、属于哪个服务”。这两个层次不要混为一谈。

Linux 指定端口查询中目标端口、sport 过滤器、sudo 权限、PID 与服务管理单元的边界关系图
图2:端口过滤只负责缩小 socket 集合,权限决定能否看到进程信息,最终仍要结合 PID 和服务管理层判断服务归属。

查不到结果时,按协议、地址和权限排查

现象优先检查处理方式
TCP 查询为空协议或端口是否判断错误改用 -lunp 查 UDP,并确认端口数字
只看到 IPv6服务是否绑定 ::分别用 -4-6 缩小地址族
有监听但没有进程名当前用户权限sudo 重试,避免把权限问题当成空闲端口
本机能访问,外部不能访问绑定地址和防火墙先看 Local Address,再检查防火墙和云安全策略

如果只关心 IPv4 或 IPv6,可以把条件写得更明确:

# 只查 IPv4 TCP 监听
sudo ss -4ltnp 'sport = :8080'

# 只查 IPv6 TCP 监听
sudo ss -6ltnp 'sport = :8080'

最后记住,ss 看到的是当前网络命名空间里的 socket。容器、网络命名空间或宿主机之间互相隔离时,宿主机上的一次查询未必能代表容器内部;这时要进入对应的命名空间或容器再查。

常见问题

为什么 ss -ltn 能看到端口,却看不到进程?

因为 -p 才请求显示使用 socket 的进程信息,而且查看其他用户的进程通常需要更高权限。先用 sudo ss -ltnp 重试。

sslsof -i 应该选哪个?

按端口和协议筛选时,ss 更直接;需要从打开的文件反查进程、用户和文件描述符时,可以再用 lsof -nP -i :8080 交叉确认。

为什么 8080 没有 TCP 监听,但服务仍然可用?

它可能监听的是 UDP、IPv6、Unix socket,或者服务实际运行在另一个容器和网络命名空间。先用 TCP/UDP、-4/-6 和容器内查询逐项缩小范围。

本文依据 ss(8) Linux 手册中的选项与过滤语法组织示例;生产环境执行关闭或重启前,先确认 PID、命令行和服务单元,避免误操作。

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