用 ss——它是每个现代 Linux 发行版的现行标准,而 netstat 在那里是遗留品:在 Ubuntu、Fedora 和 Debian 上,这个二进制如今装在可选的 net-tools 包里,而 ss is built into 内置于 iproute2,处处都装着。 在繁忙的服务器上也更快,因为它直接从内核读套接字统计,而不是逐个文件去翻 /proc。麻烦在语法——所以这一页就是那份翻译。

■ the answer first 先给答案

用 ss——每个现代发行版的现行标准;netstat 在那里是遗留品,甚至常常根本没装。

旗标一一对应:netstat -tlpn → ss -tlpn, netstat -tulpna → ss -tulpna。路由和接口搬去了 ip route / ip -s link.

一行揪出端口:sudo ss -ltnp 'sport = :8080'——进程名和 PID 直接返回。

翻译对照手册

老手册里的每一条 netstat 命令,以及它变成了什么——每行从左往右读:

监听 TCP + 进程netstat -tlpn→全部 TCP + UDP 连接
all TCP + UDP connectionsnetstat -tulpna→ss -tulpna
路由表netstat -r→ip route
接口统计netstat -i→ip -s link
内核套接字摘要—— netstat 无此能力 ——→ss -s
按端口过滤,在内核里grep 加祈祷→ss -tnp 'sport = :22'

头两行完全相同——碰巧 ss 的短旗标在常见场景下与 netstat 对齐,所以肌肉记忆大多能在搬家后幸存

netstat 被废弃了吗?

在 Linux 上,实际上是的。net-tools 包——netstat, ifconfig, route — has not tracked modern kernel features for years and is no longer installed by default on any major distribution. It still exists, still runs, and there is nothing to uninstall, but new features land only in iproute2 (the package behind ss and ip——多年没有跟进现代内核特性,在任何主流发行版上都不再默认安装。它还在、还能跑,但新特性只落在

三个实际后果:
  1. 全新安装里没有。 默认的 Ubuntu 24.04 或 Fedora 服务器上没有任何 netstat,除非你手动安装 net-tools——这就是为什么那么多人搜“netstat 的等价物”:那个二进制干脆不在了。
  2. 没有现代套接字信息。 netstat 早于 TCP fast open、子流级套接字统计和 cgroup 套接字归属。ss 原生支持这些。
  3. Windows 例外。 在 Windows 上,netstat 活得好好的——netstat -ano 仍是把 PID 对应到监听端口的标准做法。只有 Linux 这边算废弃。

主力命令,逐旗标拆解

意为“套接字统计”:内核对每个 TCP、UDP 和 Unix 套接字的视角——状态、地址、端口、进程、计时器、队列深度。 means "socket statistics": the kernel's view of every TCP, UDP and Unix socket — state, addresses, ports, processes, timers, queue depths.

# 所有监听中的,连同属主进程
sudo ss -tulpn

逐旗标:TCP(-t)、UDP(-u)、仅监听(-l)、显示进程(-p)、数字输出——不做 DNS 查询(-n)。sudo 对 -p 很重要:没有 root 你能看到端口,但拿不到不属于自己的套接字的进程名。再给两条覆盖大部分工作的单行命令:

# 与端口 443 之间的所有已建立连接,带进程
sudo ss -tnp 'sport = :443 or dport = :443'

# 汇总表:每种状态各有多少套接字
ss -s

这套过滤语法相对 netstat 的“grep 加祈祷”是货真价实的升级——它在内核里执行,所以是精确匹配,不是文本对碰。

谁占着 8080 端口?

伸手拿这两样工具最常见的理由:

sudo ss -ltnp 'sport = :8080'
State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN  0       511     *:8080              *:*               users:(("node",pid=214113,fd=18))

那个 users:(...) 字段直接给出进程名和 PID——不用敲第二条命令。端口被占却看不到进程?你多半在看一个属于另一个网络命名空间的套接字——一个容器。从宿主机上,sudo ss -ltnp shows the port with an empty process column; match it with docker ps or nsenter into the container's namespace. Prefer a dedicated tool? 干同样的活,而且在 macOS 和多数 BSD 上表现一致,所以它还能留在手册里——但在 Linux 上, does the same job and works identically on macOS and most BSDs, which is why it survives in runbooks — but on Linux, 本来就在。 is already there.

验证:sudo ss -ltnp 'sport = :8080' → users:(("node",pid=…)) · 换成任何 1–65535 的端口都行

为什么提示 ss 命令未找到?

因为你要么在很老的发行版上(2007 年前、iproute2 还没成标准),要么——可能性大得多——根本不在 Linux 上。ss 不是 macOS 命令;macOS 自带 lsof and netstat 但没有 ss,多数 BSD 同样如此。Windows 上用:netstat -ano or PowerShell's (PowerShell)。如果你确实在 Linux 上且缺了它,装 iproute2:. If you genuinely are on Linux and it is missing, install iproute2: sudo apt install iproute2 (Debian/Ubuntu) or sudo dnf install iproute2(Fedora/RHEL)。

验证:ss -V → 第一行出现版本字符串

netstat 什么时候还配得上自己那一行

两个诚实的情形。可移植性:在 Linux、AIX、老 BSD 混编的机队里,netstat 是唯一到处都在的语法。肌肉记忆的延续——老手册里写着 netstat -tlpn 而机器装了 net-tools,它照常工作。否则默认用 ss 并更新手册——顶上那张翻译对照表才值得贴在显示器上。而你找到的端口属于一个起不来的服务时,那是 systemd 的故事,不是套接字的故事。

■ 诚实印章 实测环境:Ubuntu 24.04 · Fedora · Debian · iproute2 ss · Windows netstat -ano。 首发于 2026-09-05,记录更新于 2026-10-04。每条命令都是 iproute2/net-tools 的标准行为,照原样运行;上方的 ss -ltnp 示例输出来自一台开发机的真实抓取(:8080 上的 node 进程),重新键入而非杜撰。

翻译对照手册到此为止 · 未取一分毫 · 一切皆本地