netstat需手动安装net-tools包,常用命令为netstat -tuln查看监听端口,-p选项需root权限显示进程,ss是更快更现代的替代工具但缺少协议统计等功能。

netstat 已在绝大多数现代 Linux 发行版中预装,但若缺失,需手动安装 net-tools;它不是“必须用”的工具——ss 更快更现代,但 netstat 仍因可读性强、参数直白被广泛用于排查和教学场景。
确认 netstat 是否可用及安装方法
直接运行 netstat --version 或 which netstat。如果提示 command not found,说明未安装。
- Ubuntu/Debian 系统:执行
sudo apt update && sudo apt install net-tools - CentOS/RHEL 8+(已弃用
netstat默认):需启用 EPEL 或直接安装net-tools,命令为sudo dnf install net-tools - Alpine Linux:
apk add net-tools
注意:netstat 属于 net-tools 包,不是单独的可执行文件;某些最小化安装或容器镜像(如 scratch、distroless)默认不带,不能靠 apt search netstat 找包名,必须查 net-tools。
查看所有监听端口(最常用场景)
监听端口即服务正在等待连接的入口,比如 Web 服务监听 80 或 443,SSH 监听 22。只看监听状态,避免被大量 ESTABLISHED 连接干扰。
-
netstat -tuln是黄金组合:-t(TCP)、-u(UDP)、-l(listening)、-n(数字地址,跳过 DNS 解析,提速且防卡顿) - 加
-p查进程:但需 root 权限,否则会显示-或报 “Permission denied” —— 即便你 own 该进程,Linux 内核默认禁止非 root 查看其他用户进程的 socket 信息 - 输出中
0.0.0.0:80表示监听本机所有 IPv4 地址;[::]:80表示监听所有 IPv6 地址;127.0.0.1:3306表示仅允许本地访问 MySQL
快速定位某个端口是否被占用
排查服务启动失败(如 “Address already in use”)时,最有效的一行命令是:
netstat -tuln | grep ':80'
注意冒号::80 能精准匹配端口字段,避免误中 PID 或 IP 段含 80 的行(比如 192.168.0.80)。其他常见写法风险:
-
grep 80→ 可能匹配到 PID 为 8080、18000 的进程 -
grep :80$→ 更严谨,但netstat输出列宽固定,末尾空格不一致,有时失效 - 若想同时看到进程名:
sudo netstat -tulpn | grep ':80',但要注意-p和-n共存时,部分旧版内核可能丢进程名(建议优先试ss -tulpn)
netstat 和 ss 的关键差异与取舍
ss(socket statistics)是 iproute2 套件的一部分,从内核直接读取 socket 信息,比 netstat(依赖 /proc/net/ 接口)更快、更轻量,且在高并发下更稳定。
-
netstat -tuln≈ss -tuln,功能几乎等价 -
ss不支持-e(扩展 UID 信息),也不显示路由表(-r)或接口统计(-i)——这些是netstat独有 - 如果你只关心“谁占了 3000 端口”,
ss -tulpn | grep ':3000'比netstat快 3–5 倍,尤其在千级连接的服务器上 - 但
netstat -s显示的协议统计(如 TCP 重传次数、连接失败数)目前仍是网络调优不可替代的参考
真正容易被忽略的是:很多脚本或文档硬编码 netstat,但在新版 CentOS Stream / Rocky 9+ 中,netstat 已被标记为 deprecated;生产环境应逐步迁移到 ss,仅保留 netstat -s 用于深度诊断。


















