bashtop 路线图与继任者 btop++:为什么作者要用 C++ 重写这个 Bash 监控工具?
【免费下载链接】bashtopLinux/OSX/FreeBSD resource monitor项目地址: https://gitcode.com/gh_mirrors/ba/bashtop
bashtop是一个用纯 Bash 编写的终端系统资源监控工具,可实时显示 Linux / macOS / FreeBSD 上的 CPU、内存、磁盘、网络与进程数据。2021 年 9 月,作者宣布其 C++ 重写版本btop++正式可用。本文将从功能特性、路线图与语言瓶颈三个角度,讲清楚这场"换引擎"背后的原因。
🖥️ 它是什么:一个"纯 Bash"跑起来的监控面板
bashtop 的定位很直接——在游戏风格菜单里查看系统资源使用率:
- CPU:每核使用率 + 温度 + 实时曲线图;
- 内存 / Swap:已用、缓存、可用明细;
- 磁盘:各挂载点使用率与读写速度;
- 网络:下载/上传速度自动缩放曲线;
- 进程列表:支持过滤、多种排序、树状视图,并可发送 SIGTERM / SIGKILL / SIGINT 结束进程。
主界面一览无余:
而几乎所有设置都能通过 UI 菜单直接修改,配置保存在$HOME/.config/bashtop中,配套 9 款配色主题(nord、monokai、gruvbox 等)位于 themes/ 目录,主题清单见 themes/index.txt。
⚡ Bash 的"轻"背后的代价:4 个重写动机
主脚本 bashtop 约有 5300 行,功能虽强,但 Bash 的特性带来了天然瓶颈:
1️⃣ 数据采集依赖一堆外部命令
Linux 下读取/proc需要 grep、sed、awk、ps(procps-ng)甚至 iostat 协作;macOS/FreeBSD 下则另起一套——通过 coprocess 管道调用 src/bashtop.psutil.py 这个 Python 脚本采集数据。每次刷新都意味着大量 fork/exec,更新间隔低于 2 秒时 CPU 开销肉眼可见。
2️⃣ 输入响应曾是老大难问题
翻看 CHANGELOG.md 能直观感受到痛:v0.8.24 将键盘输入从read换成dd才解决输入卡死,v0.9.19 又引入 bash 5 的$EPOCHREALTIME来省掉频繁调用外部date——这些都是与"外部进程开销"作斗争的痕迹。
3️⃣ 跨平台适配成本高
macOS 需要 GNU coreutils/sed,终端还要支持 24 位真彩和 Braille 字符块;SSH 场景下 Dropbear 的 locale 问题也让维护者不胜其烦。
4️⃣ 单维护者的维护负担
作者在 README 中坦言自己是全职工业工作者,业余时间维护近 5300 行的复杂 Bash 脚本(含大量正则与转义边界情况),新功能只能慢慢补。
🗺️ bashtop 路线图:作者留下的 TODO 清单
README 的 TODO 章节 记录了未完成的规划,其中几项恰是 Bash 的短板:
| 计划功能 | 备注 |
|---|---|
| GPU 温度与使用率 | "If feasible" |
| Docker 容器 CPU/内存统计 | "If feasible" |
| 日志文件 tail 窗口 | 可选面板 |
| 所有窗口可拖拽调大小 | 交互增强 |
| 命令行参数解析 | 至今标为 not yet implemented |
| 内置自动更新器 / zram 支持 | 依赖社区 PR |
| Python 移植 | 已启动,作为过渡 |
这张清单本身就是一个信号:路线图上的功能(GPU、Docker、更流畅的交互)在 Bash 里要么"视可行性而定",要么干脆做不动——于是重写成了理性选择。
🔧 继任者 btop++:换引擎不换手感
2021 年 9 月 18 日,README 顶部正式宣布(见 README.md):
The C++ version of bashtop - btop++ is available.
对普通用户来说,换到 C++ 意味着什么?
- 单文件二进制:不再需要 bash 4.4+、GNU 全家桶或 python3+psutil,装上就能跑;
- 更低的 CPU 占用:数据采集不再 fork 外部命令,更短的刷新间隔也不卡 UI;
- 更快的输入响应:告别
read/dd这类输入 workaround; - 继承全部精华:游戏风格菜单、进程过滤/排序/树状视图、主题系统、信号操作等 bashtop 的招牌体验得以延续并继续迭代。
简而言之:bashtop 验证了产品形态,btop++ 则用合适的语言把它"跑满血"。
📦 快速上手:安装与常用路径
源码安装(需要 clone 时使用):
git clone https://gitcode.com/gh_mirrors/ba/bashtop cd bashtop sudo make installMakefile 会将脚本装到/usr/local/bin。此外 bashtop 已进入 Debian 11+、Ubuntu 20.10+、Fedora、Arch(AUR)、FreeBSD ports 与 Guix 官方仓库,直接apt/dnf/pkg/guix install bashtop即可;Debian 系用户也可以进入 DEB/ 目录运行./build快速打包(打包脚本见 DEB/DEBIAN/control)。
终端要求:支持 24 位真彩、UTF-8 locale,并覆盖 Braille 字符块(U+2800–U+28FF)的字体。
📚 延伸阅读:仓库里的关键文件
- bashtop:主脚本,约 5300 行 Bash;
- src/bashtop.psutil.py:macOS/FreeBSD 与 Linux 可选的 Python 数据采集脚本;
- CHANGELOG.md:从 v0.8 到 v0.9.25 的完整演进史,能清楚看到与 Bash 瓶颈搏斗的过程;
- test/basic_test.bats 与 test.sh:基于 BATS 的测试基座(vendored 于 test/libs/);
- requirements.txt:数据采集依赖
psutil的版本声明。
结语
bashtop 证明了纯 Bash 也能造出惊艳的终端监控工具,但 5300 行脚本、成串的外部命令调用和跨平台适配成本,最终让作者选择了 C++。对于想"零依赖、低占用、响应快"的用户,直接上 btop++ 是当前更优解;而 bashtop 的路线图,则是一份理解"监控工具该怎么做"的好教材。🚀
【免费下载链接】bashtopLinux/OSX/FreeBSD resource monitor项目地址: https://gitcode.com/gh_mirrors/ba/bashtop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考