查看 macOS 的套接字、路由表、接口统计和协议计数器。
netstat 在 macOS 上仍是主要工具,常用的有 -an 看所有套接字、-rn 看路由、-i 看接口计数、-s 看协议统计。和 Linux 不同,macOS 的 netstat 没有 -t、-u 这类按协议筛选的短选项,也没有把套接字映射到 PID 的能力;列监听端口通常用 netstat -an | grep LISTEN,要 PID 则换 lsof。
macOS 的 -l 不是 Linux 的 “listening”,而是完整打印 IPv6 地址;-L 才显示监听队列长度。地址族用 -f inet 或 -f inet6 过滤。BSD 风格输出里,本地地址写成 192.168.3.19.57694 或 *.8080,最后一段是端口,不是 IP 的一部分。
netstat 只读,不需要 sudo;它看到的是内核套接字表,不显示进程名。Linux 上 netstat 已被 ss 取代,macOS 没有 ss,也没有 /proc/net,排障时不要照搬 Linux 的参数组合。
# 查看所有套接字,输出可能很长,先截断
% netstat -an | head -20
# 列出本机所有监听端口
% netstat -an | grep LISTEN
# 只看 IPv4 的监听端口
% netstat -an -f inet | grep LISTEN
# 查看路由表和默认网关
% netstat -rn
# 查看 IPv6 路由
% netstat -rn -f inet6
# 查看接口的收发包、错误和丢包计数
% netstat -i
# 查看 TCP 协议统计,定位重传、连接失败
% netstat -s -p tcp | head -30
# 查看监听队列长度和套接字缓冲区
% netstat -anL | grep LISTEN
% netstat -m | head -20
netstat -tlnp 会报 illegal option;macOS 用 netstat -an | grep LISTEN,PID 用 sudo lsof -nP -iTCP -sTCP:LISTEN。*.8080 表示监听所有地址,127.0.0.1.8080 表示只监听回环;看到前者不要误以为“外网一定可达”,还要看防火墙和路由器。TIME_WAIT 通常不是泄漏,而是短连接正常关闭后的等待状态;持续增长应查连接池和主动关闭方,而不是调小系统参数。netstat -rn 里 Gateway 显示 link#5 表示直连网段,没有经过路由器;U 是可用、G 是网关、S 是静态路由,缺 U 的路由不会生效。lsof -nP -iUDP 或抓包。-n 必须加,否则 netstat 会反向解析地址,DNS 慢时看起来像卡住;脚本更应固定用 -n。-l 的含义,监听判断始终以状态列 LISTEN 为准。合上页面,先回答,再展开对照。
netstat -rn 输出里的 U、G、S 分别表示什么?netstat -an | grep LISTEN,需要只看 IPv4 时加 -f inet;要 PID 则用 sudo lsof -nP -iTCP -sTCP:LISTEN。U 表示路由可用(up),G 表示经由网关,S 表示静态路由;缺少 U 的路由不会被使用。lsof -i 才能看到 PID 和进程名。
小程序版
微信扫码,随时查命令