netstat 的现状与替代
netstat 属于老牌 net-tools 套件,多个主流发行版已不再默认安装,并在文档中标记为将被淘汰;但存量系统、老脚本与部分精简镜像里仍然常见,所以需要掌握它与 ss 的等价写法。ss 直接读取内核的套接字信息,在连接数很多时明显更快,参数语义与 netstat 高度相似,迁移成本很低。
基本信息
| 适用平台 | Linux(netstat 来自 net-tools,ss 来自 iproute2) |
|---|---|
| 关键差异 | ss 从内核直接取值,连接量大时性能优势明显 |
| 常用参数 | -t TCP、-u UDP、-l 监听、-n 数字、-p 显示进程、-a 全部 |
| 权限要求 | 查看进程信息需 root 或同属主 |
| 容器环境 | 很多基础镜像只带 iproute2,不装 net-tools |
netstat 与 ss 对照
| netstat | ss / 替代命令 | 说明 |
|---|---|---|
| netstat -tulnp | ss -tulnp | 监听端口与进程(最常用) |
| netstat -anp | ss -anp | 全部连接,含监听与已建立 |
| netstat -s | ss -s 或 nstat -az | 协议栈统计 |
| netstat -rn | ip route | 路由表 |
| netstat -i | ip -s link | 接口计数 |
| netstat -c | watch ss | 持续刷新观察 |
| netstat -tan state | ss -tan state <状态> | 按状态过滤(写法不同) |
典型使用场景
- 老系统或老脚本维护:沿用 netstat 但知道对应的 ss 写法,便于升级迁移
- 容器排障:确认镜像里到底有没有 netstat,避免现场才发现命令不存在
- 快速确认监听端口:ss -tulnp 一步到位
- 查看协议栈统计:ss -s 给出比 netstat -s 更紧凑的汇总
- 按状态统计连接:ss 支持 state 过滤,比 netstat 手工筛选更准确
常用示例
常用示例
ss -tulnp | grep LISTEN # 现代写法:监听端口与进程
netstat -tulnp | grep LISTEN # 老系统的等价写法
ss -tan state time-wait | wc -l # 按状态统计(netstat 无直接等价参数)
netstat -i | head # 接口收发与错误计数(对应 ip -s link)
command -v netstat ss ip # 先确认现场有哪些工具可用新系统上执行 netstat 提示 command not found 通常是 net-tools 未安装,不代表系统损坏;排障时应优先使用 ss,而不是急着装包。
迁移建议:把运维手册里常用的几条 netstat 检查项提前改写成 ss 等价命令,脚本与文档同步更新,避免系统升级后现场才发现命令不存在。
判断现场该用哪个工具:先执行 command -v ss netstat ip,确认哪些命令存在再选写法,比照着旧文档硬敲更省时间。