macOS无法直接用终端命令添加菜单栏网速项,但可通过脚本+Stats或eul实现:用netstat -ib提取收发字节,差值计算KB/s并格式化输出,再由Stats/eul渲染到菜单栏。
macos 本身不支持直接用终端命令往菜单栏“添加”一个自定义网速显示项,但可以通过终端配合脚本+第三方工具(如 stats 或 eul)实现菜单栏实时显示自定义计算的网络吞吐量。整个过程本质是:用终端提取原始流量数据 → 计算单位时间增量 → 输出为工具可读格式 → 由工具渲染到菜单栏。
用 ifconfig + shell 脚本提取并计算实时速率
macOS 的网络接口(如 en0 表示 Wi-Fi,en1 或 en7 可能是有线)每秒收发字节数藏在 ifconfig 输出中。需通过两次采样做差值来算出速率:
- 运行
ifconfig en0 | awk '/bytes.*received/ {print $2}'可提取「接收字节数」(注意 macOS 输出格式为bytes:123456789,需进一步清洗) - 推荐使用更稳定的字段:
ifconfig en0 | awk '/inet / {print $2}'; ifconfig en0 | awk '/RX packets/ {print $5}'不适用;应改用netstat -ib | grep 'en0' | awk '{print $7, $10}'($7 是接收字节,$10 是发送字节) - 写一个循环脚本,间隔 1 秒读取两次
netstat -ib数据,相减后除以 1024 得 KB/s,再四舍五入,输出类似↓1.2 MB/s ↑0.4 MB/s的单行文本
接入 Stats 实现菜单栏显示
Stats(开源免费,GitHub 可下载)支持通过「Shell Script」类型的小部件,将任意终端命令的 stdout 显示在菜单栏:
- 安装 Stats 后,在设置中添加新模块 → 选择「Shell Script」→ 粘贴你写好的网速计算脚本路径(如
~/bin/net-speed.sh) - 设置刷新间隔为
1s,启用「Show in menu bar」,可选字体大小和颜色 - 脚本输出必须是纯文本、单行、无 ANSI 转义符,否则 Stats 无法正确渲染
- 示例脚本开头建议加
#!/bin/zsh,并确保有执行权限:chmod +x ~/bin/net-speed.sh
替代方案:用 eul(专为 macOS 设计的轻量监控工具)
eul 原生支持网络模块,且配置更直观,也允许自定义脚本扩展:
- 下载安装 eul 后,在「Network」设置页可一键开启菜单栏显示上传/下载速度,单位、接口、刷新率均可调
- 若需特殊逻辑(如只监控某进程流量、排除 Docker 接口),可配合
lsof -i -P -n或sudo tcpdump -i en0 -c 10提取特定流,再用 awk 过滤后喂给 eul 的自定义脚本入口(需启用「Advanced Mode」) - eul 的优势在于自动处理接口切换(Wi-Fi ⇄ 有线)、休眠唤醒重连、以及多接口聚合,比纯 shell 方案更稳
注意事项与常见问题
终端自定义方案不是“系统级原生”,而是依赖外部工具托管显示。实际使用中要注意:
- 脚本需用
sudo才能读取某些底层统计(如netstat -ib通常无需,但ipfw或pfctl流量则需要),频繁提权会影响体验,建议优先用netstat -ib - macOS 不同版本接口名可能变化(如 Ventura 后部分 Mac 的 Wi-Fi 变为
en0,M系列芯片可能用enX动态分配),脚本里最好先用networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}'动态获取接口名 - 菜单栏空间有限,建议脚本输出控制在 20 字符内,例如:
↓1.8↑0.3或DL:1.8MB UL:0.3MB - Stats 和 eul 都支持暗色模式适配,脚本无需额外处理颜色逻辑


















