在 Ubuntu 中查询“谁在监听这个端口?” — 使用 ss 关联 socket 与进程

Linux・CLI・DevOpsカテゴリを表すパンダのイラスト Linux・CLI・DevOps

关于本文
本文使用生成式 AI 辅助自动化流程创建。我们参考了 Linux 的 ss(8) 手册和 TCP RFC 9293,梳理了将监听端口与进程关联查看的诊断步骤。

验证状态:🧪 已确认第一手资料 · 已在 Debian 13 上验证 0 条结果/非法输入/LISTEN 的逻辑 · 尚未在 Ubuntu 实体机上验证

在 Ubuntu 中查询“谁在监听这个端口?” — 使用 ss 关联 socket 与进程

如果在 Ubuntu 中想查清“是谁在占用 5000 端口?”,可以通过 ss 筛选出 TCP 的 LISTEN socket,并在需要时进一步确认进程信息。

ss -lntpH "sport = :5000"

只需这一行命令,即可筛选出处于 TCP 监听状态、数值显示、包含进程信息、无表头的结果。

拆解选项

选项含义
-l显示处于监听状态的 socket
-n不转换为服务名,以数字形式显示地址和端口
-t显示 TCP socket
-p显示正在使用 socket 的进程信息
-H不显示表头行

使用 -H 不仅能缩短输出外观,在本脚本中,它还便于判定“若对应的 socket 为 0 个则输出为空”。

按 进程 → socket → IP:端口 的顺序查看

flowchart LR
    A[process / PID] --> B[TCP socket]
    B --> C[LISTEN state]
    C --> D[local IP : port]
    D --> E[接続を待つ]

不要只看端口号,将“哪个进程绑定到了哪个本地地址,以及该 socket 是否在监听”这一整条链路串联起来看,会更容易理解。

127.0.0.1 和 0.0.0.0 意义不同

例如,假设 5000 端口呈现如下状态:

127.0.0.1:5000
0.0.0.0:5000
[::]:5000
  • 127.0.0.1:5000 表示在 IPv4 回环地址上监听。通常用于同一台 PC 内部使用的配置。

  • 0.0.0.0:5000 是 IPv4 的未指定地址,用作监听多个本地 IPv4 地址的通配符。

  • [::]:5000 是 IPv6 的未指定地址。是否同时接收 IPv4 连接取决于操作系统和 socket 配置,切勿仅凭显示结果盲目下定论。

仅凭“5000 端口已打开”这一句话,无法得知外部是否能够访问。绑定地址、防火墙、路由等需要另外确认。

有时可能无法看到进程信息

即便带上了 -p,也可能由于执行用户的权限限制,导致无法充分显示其他进程的详情。

遇到这种情况,建议先确认 socket 本身是否存在;如果确实需要进程信息,在权衡权限必要性后,使用 sudo 重新确认。

sudo ss -lntpH "sport = :5000"

与其默认每次都加 sudo,不如分清究竟是哪些信息因为权限不足而未显示,这样会更安全。

当没有输出时

如果此过滤器没有输出任何内容,则可以判断为“在此次检查中,未发现本地正在监听 TCP 5000 端口的 socket”。

不过,以下情况属于别的问题:

  • 正在使用 UDP 5000 端口 → -t 无法显示

  • 位于不同的 network namespace 内部

  • 服务在启动后不久崩溃退出

  • 连接拒绝或通信失败的原因在于防火墙等因素

不能断言“ss 中没有显示 = 应用的配置一定有误”。

本地逻辑确认

于 2026-09-07 在 Debian GNU/Linux 13、Bash 5.2.37、iproute2 6.15.0 环境下,对未使用的端口、非法输入、localhost 的临时 TCP LISTEN 这 3 种情况进行了验证。尚未在 Ubuntu 实体机上进行验证。

GitHub 示例

官方与第一手资料

文档信息

文章??
在 Ubuntu 中查询“谁在监听这个端口?” — 使用 ss 关联 socket 与进程
?布日期
更新日期
来源
https://papanda925.com/?p=15327&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制