gtop 1.1.5 常用 CLI 命令与工具详解
把 gtop 1.1.5 的全部命令面一次讲透——它只有 1 个启动命令加 5 个交互键(p/c/m 排序、q/Esc/Ctrl+C 退出),本文逐键实测键位行为(含表头排序箭头的实时迁移、退出码验证)、给出 tmux 会话托管与抓屏验证方法,并对界面七图块逐一解读、与 uptime/free/df 的系统真实值交叉核对。全部命令与回显均在 Debian 12(Node.js v22.23.4 + gtop 1.1.5)实测通过。
gtop 1.1.5 常用 CLI 命令与工具详解
目标:把 gtop 1.1.5 的全部命令面一次讲透——它只有 1 个启动命令加 5 个交互键(p/c/m 排序、q/Esc/Ctrl+C 退出),本文逐键实测键位行为(含表头排序箭头的实时迁移、退出码验证)、给出 tmux 会话托管与抓屏验证方法,并对界面七图块逐一解读、与 uptime/free/df 的系统真实值交叉核对。全部命令与回显均在 Debian 12(Node.js v22.23.4 + gtop 1.1.5)实测通过。
一、环境信息
- 操作系统:Debian 12(bookworm),x86_64,12 核 CPU、32 GB 内存(
free -m实测Mem: 32050) - Node.js:v22.23.4(npm 10.9.9)
- gtop:1.1.5(npm 全局安装,入口
/usr/local/bin/gtop) - 终端环境:tmux 3.3a(TERM=xterm-256color、LANG=C.UTF-8)
- 参考基准:gtop 官方 man 手册源 CLI.md(随 v1.1.5 npm 包分发)与包内源码 lib/gtop.js、lib/monitor/proc.js
二、工具概览
gtop 的命令面极小,这是它的设计取向:一个命令进入仪表盘,之后的一切交互都在键盘上完成。官方 CLI.md(/usr/local/lib/node_modules/gtop/CLI.md,随包分发)对命令面的完整声明如下(原文照录):
GTOP
=====
> gtop - System monitoring dashboard for terminal
## SYNOPSIS
`gtop`
## DESCRIPTION
gtop is a system monitoring dashboard for terminal much like htop, top, etc...
## INTERACTIVE COMMANDS
The following commands are supported while in gtop:
- `p` sort the process table by Process Id
- `c` sort the process table by CPU usage
- `m` sort the process table by Memory usage
即官方声明:SYNOPSIS 只有裸命令 gtop(无任何选项),交互命令只有 p/c/m 三个排序键。结合包内源码(lib/gtop.js 中 screen.key(['escape', 'q', 'C-c'], ...))与本文实测,gtop 完整键位速查如下:
| 输入 | 作用 | 生效范围 | 实测结果 |
|---|---|---|---|
gtop | 启动全屏仪表盘 | shell 命令行 | 启动 TUI(本文 4.1) |
p | 进程表按 PID 排序 | 运行中界面 | 表头箭头移至 PID(4.3) |
c | 进程表按 CPU 占用排序 | 运行中界面 | 表头箭头移至 %CPU(4.3) |
m | 进程表按内存占用排序 | 运行中界面 | 表头箭头移至 %MEM(4.3) |
q / Esc / Ctrl+C | 退出 gtop | 运行中界面 | 退出码 0(4.2) |
不存在的东西(均实测确认,详见 4.1 与 4.4):命令行参数/子命令、非交互模式、配置文件。
三、前置条件
- 已安装 gtop 1.1.5 并通过
which gtop验证(安装过程见 《Ubuntu 24.04 安装 gtop 1.1.5 指南》); - 一个真实的交互终端(本机 tty、SSH 会话或 tmux/screen 会话),locale 为 UTF-8、TERM 为真实终端类型(环境变量细节见 《gtop 1.1.5 配置参数详解》第四节);
- 本文的抓屏验证用 tmux,未安装时先执行
apt-get install -y tmux。
四、gtop 命令与交互键详解
4.1 启动命令 gtop:不带任何参数
官方 SYNOPSIS 就是裸命令。启动:
gtop
进入全屏仪表盘(画面构成见「六、界面解读」)。需要特别实测确认的是:gtop 会忽略一切命令行参数——--help、--version 之类写什么都照常进入 TUI,不会打印帮助文本或版本号。实测(用伪终端执行并统计输出字节数,与正常 TUI 输出同量级即证明 TUI 已启动):
timeout 5 script -q -c "stty cols 120 rows 40; gtop --help" /dev/null </dev/null | wc -c
timeout 5 script -q -c "stty cols 120 rows 40; gtop --version" /dev/null </dev/null | wc -c
实测回显:
8552
8579
两次输出分别约 8.5 KB(与正常运行的屏幕输出一致),证明参数被无视、TUI 照常渲染。查版本号的正确姿势是 npm 层面:npm ls -g gtop(实测回显 gtop@1.1.5)。源码依据:入口脚本 bin/gtop 仅三行 require('../lib/gtop').init(),无任何 argv 解析。
4.2 退出:q / Esc / Ctrl+C,退出码 0
三个键等价,源码绑定在同一处理器上(lib/gtop.js 实查):
screen.key(['escape', 'q', 'C-c'], function(ch, key) {
return process.exit(0);
});
实测按 q 的完整验证(tmux 会话内启动,注入 q,检查退出码与终端恢复):
tmux new-session -d -s gtop -x 120 -y 40 'gtop'
sleep 5
tmux send-keys -t gtop q
sleep 1
tmux ls
实测回显:
no server running on /tmp/tmux-0/default
tmux 会话随 gtop 进程消失而自动关闭,说明 gtop 已退出;同一验证在 script 伪终端下重复,script 记录的子进程退出码为 0(COMMAND_EXIT_CODE="0"),且抓屏尾部可见终端恢复序列(退出备用屏缓冲 ^[[?1049l、恢复光标 ^[[?25h)——q 退出后终端状态正常还原,退出码 0。
4.3 进程表排序:p / c / m(含反向排序)
进程表(Processes 图块)默认按 %CPU 降序展示,表头当前排序列带实心下三角标记。启动后立即抓取表头行:
tmux capture-pane -t gtop -p | grep PID
实测回显(初始状态,箭头在 %CPU):
x xxPID Command %CPU▼ %MEM x
按 m(按内存排序),等 3 秒让界面重绘后再抓:
tmux send-keys -t gtop m && sleep 3 && tmux capture-pane -t gtop -p | grep PID
实测回显(箭头移到 %MEM):
x xxPID Command %CPU %MEM▼ x
再按 p(按 PID 排序):
tmux send-keys -t gtop p && sleep 3 && tmux capture-pane -t gtop -p | grep PID
实测回显(箭头移到 PID):
x xxPID▼ Command %CPU %MEM x
反向排序:源码(lib/monitor/proc.js)对"重复按同一键"的处理是 that.reverse = !that.reverse——即再按一次相同的键就反转升降序(默认降序 → 反转后升序)。配合 c 键即得"按 CPU 升序/降序"来回切换。键位与官方 CLI.md 声明一致,行为细节以源码与上述实测为准。
4.4 没有非交互模式(实测结论与替代验证法)
gtop 没有批处理/非交互运行方式:参数被忽略(4.1),且在无 tty 的环境里直接崩溃退出。实测在管道重定向下执行:
gtop --version 2>&1 | head -3
实测回显(退出码 1):
Error: Width must be multiple of 2!
at new Canvas (/usr/local/lib/node_modules/gtop/node_modules/drawille-blessed-contrib/index.js:10:11)
at new Context (/usr/local/lib/node_modules/gtop/node_modules/drawille-canvas-blessed-contrib/index.js:11:18)
替代验证法:要在脚本里拿到 gtop 的"当前画面",用 tmux 抓屏而非给 gtop 传参数——先起 tmux 会话跑 gtop,再 tmux capture-pane -t gtop -p(本文全部实测回显即由此法取得)。
五、tmux 会话托管(推荐的常驻方式)
gtop 是交互式 TUI,断开 SSH 即退出。长时驻留用 tmux 托管(screen 同理,本文以 tmux 为准逐条实测):
# 1. 新建命名会话并指定尺寸启动 gtop(-d 后台建立,不立即进入)
tmux new-session -d -s gtop -x 120 -y 40 'gtop'
# 2. 进入/离开会话
tmux attach -t gtop # 进入(Ctrl+B 再按 D 可脱离会话,gtop 继续运行)
# 3. 抓取当前画面文本(脚本化巡检用)
tmux capture-pane -t gtop -p
# 4. 向会话注入按键(本文排序/退出实测均用此法)
tmux send-keys -t gtop m # 等价于人在界面里按 m
# 5. 会话管理
tmux ls # 列出会话
tmux kill-session -t gtop # 强制结束(等价于杀掉 gtop 进程)
说明:-x 120 -y 40 在后台建立会话时锁定尺寸,避免"后台会话无尺寸导致 gtop 报错"(gtop 前置要求见 《gtop 1.1.5 配置参数详解》4.3);attach 进去后尺寸随终端自适应并触发 gtop 重排(源码注册了 screen.on('resize') 处理)。
六、界面解读与数据核对
6.1 全屏实拍(120×40,tmux 抓屏原样照录)
lqCPU Historyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x ⡇ x
x 80 ⡇ lqqqqqqqqqqqqqk x
x 60 ⡇ xCPU1 4.1% x x
x ⡇ xCPU2 5.1% x x
x 40 ⡇ xCPU3 18.4% x x
x ⡇ xCPU4 6.3% x x
x 20 ⡇ xCPU5 6.1% x x
x 0 ⡇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⡼xCPU6 8.2% x x
x ⠓⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒xCPU7 9.3% x x
x xCPU8 5.2% x x
x xCPU9 6.2% x x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqxCPU10 5.1% xqj
lqMemory and Swap HistoryqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqMemoryqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x ⡇ ⡇ xx ⣾⡿⠉ ⠈⠹⣿⡆ x
x 80 ⡇ ⢸lqqqqqqqqk xx ⣿⣧ 60%⣿⡇ x
x 60 ⡇ ⢸xMemory x xx ⠈⠻⢿⣶⣾⠿⠋ x
x ⡇ ⣸xSwap x xx x
x 40 ⡇ ⣿mqqqqqqqqj xmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
x ⡇ ⡟ x
x 20 ⡇ ⢠⡇ xlqSwapqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x 0 ⡇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸ xx ⣾⡿⠉ ⠈⠹⣿⡆ x
x ⠓⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒ xx ⣿⣧ 99%⣿⡇ x
x xx ⠈⠻⢿⣶⣾⠿⠋ x
x xx x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
lqNetwork HistoryqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqProcessesqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x xxPID Command %CPU▼ %MEM x
xReceiving: 0.00 B/s xx x
xTotal received: 15.40 MiB: xx 21187 node 0.1 0.2 x
x▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁xx 1261 node 0.1 0.3 x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjx 1 sleep infinity 0.0 0.0 x
x 139 sh 0.0 0.0 x
lqDisk usageqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx 141 node 0.0 0.0 x
x ⣾⡿⠉ ⠈⠹⣿⡆ xx 339 sh 0.0 0.0 x
x ⣿⣧ 61%⣿⡇ xx 341 node 0.0 0.0 x
x ⠈⠻⢿⣶⣾⠿⠋ xx 707 sh 0.0 0.0 x
x xx 709 node 0.0 0.0 x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
说明:抓屏文本中边框以 lq…k(终端 ACS 线条字符的文本形式)呈现,在真实终端里渲染为连续的制表线条;曲线区为 Braille 盲文字符点阵,实际显示为实线折线与环形图。
6.2 七图块逐块解读
| 图块 | 内容 | 数据来源与刷新 | 解读要点 |
|---|---|---|---|
| CPU History | 逐核使用率折线,纵轴 0–100%,右侧图例逐核显示实时百分比(上例 12 核:CPU1 4.1%、CPU3 18.4% … CPU10 5.1%) | si.currentLoad,1 秒 | 图例百分比即"当前值";曲线保留最近 60 个采样点(源码初始化 61 点数组) |
| Memory and Swap History | 内存/Swap 使用率两条曲线,图例标注 Memory/Swap | si.mem,1 秒 | 与右侧双环形图同一数据源的时序视图 |
| Memory | 内存使用率环形图(上例 60%) | si.mem,1 秒 | 百分比 = 已用/总量(核对见 6.3) |
| Swap | Swap 使用率环形图(上例 99%) | si.mem,1 秒 | 未启用 Swap 的机器会显示 0% 或空 |
| Network History | 默认网卡收发速率迷你图 + 两行文本:Receiving: 0.00 B/s(实时接收速率)与 Total received: 15.40 MiB(开机以来累计接收量) | si.networkStats,1 秒 | 文本行固定在图块内,迷你图为速率序列 |
| Disk usage | 文件系统使用率环形图(上例 61%) | si.fsSize,10 秒 | 多分区机器显示挂载点列表中对应项(单分区即为根分区) |
| Processes | 进程表四列:PID、Command、%CPU、%MEM;表头带排序箭头 | si.processes,3 秒 | 默认 %CPU 降序;p/c/m 换列,同键再按反转升降序(4.3) |
6.3 与系统真实值交叉核对(验证仪表盘可信)
gtop 显示值应能与系统命令对上。以 6.1 全屏实拍所在时刻为例,同机执行:
uptime
nproc
free -m | head -2
df -h / | tail -1
实测回显:
02:26:40 up 3 days, 10:38, 0 user, load average: 1.01, 1.16, 1.20
12
total used free shared buff/cache available
Mem: 32050 19282 309 583 13575 12768
overlay 786G 456G 296G 61% /
逐项对照:
- Memory 环形图 60% ↔
free -m:used 19282 / total 32050 ≈ 60.2%,一致; - Disk usage 环形图 61% ↔
df -h /:使用率 61%,一致; - CPU 图例 12 项(CPU1–CPU12) ↔
nproc= 12,一致; - CPU 逐核低占用、曲线贴地 ↔
load average: 1.01, 1.16, 1.20(12 核机器上平均单核负载 <10%),量级一致。
结论:gtop 各图块数值与系统命令口径吻合(内存按"已用/总量"、磁盘按文件系统使用率、CPU 按逐核瞬时占用),显示可信。
七、注意事项
- 参数会被静默忽略:
gtop --help、gtop -v不会报错也不会给提示,直接进 TUI——写运维脚本时不要依赖参数做判断(实测见 4.1)。 - 必须有人值守的终端:后台/管道执行必崩(实测退出码 1,见 4.4);驻留场景用 tmux 托管(第五节)。
- 排序只影响显示,不作用于系统:gtop 不能 kill/renice 进程,进程管理需求请用 htop。
- Disk usage 每 10 秒才刷新:刚挂载/卸载分区后环形图有最长 10 秒滞后,属源码设定(刷新间隔表见 《gtop 1.1.5 配置参数详解》第五节)。
- 数据自开机起算:Network 的
Total received、CPU 历史曲线的起点都与系统开机时间相关,重启后从零开始。
八、常见问题(FAQ)
Q1:启动报 Error: Width must be multiple of 2!?
环境里没有可用的终端尺寸(stdout 非 tty / 伪终端 0×0)。在真实终端或 tmux 会话内运行即可;完整定位过程与复现命令见 《Ubuntu 24.04 安装 gtop 1.1.5 指南》常见问题 Q1。
Q2:界面出现问号/乱码?
locale 与 TERM 问题:LANG=en_US.utf8 TERM=xterm-256color gtop 启动(官方 README 推荐写法);详细实测对照见《gtop 1.1.5 配置参数详解》4.1/4.2 节。
Q3:man gtop 没有手册页?
npm 全局安装不会把包内 gtop.1 装进系统 manpath(实测 man gtop 无输出)。官方命令文档直接读包内文件:cat /usr/local/lib/node_modules/gtop/CLI.md(内容已在本文第二节照录)。
Q4:怎么把当前仪表盘画面存档?
用 tmux 抓屏:tmux capture-pane -t gtop -p > /var/log/gtop-$(date +%F-%H%M).txt。gtop 自身无导出/截图功能。
Q5:按了 m 之后进程表没变化?
排序变更在下一次数据刷新时生效(进程表刷新间隔 3 秒),等 3 秒再看;本文实测时统一 sleep 3 后抓屏即观察到箭头迁移。另外注意表头箭头位置就是当前排序列,先确认箭头是否已经移动。
九、参考链接
- 官方 man 手册源(随 v1.1.5 npm 包分发):
/usr/local/lib/node_modules/gtop/CLI.md - gtop 项目主页(Usage/Troubleshooting):https://github.com/aksakalli/gtop
- 本系列认知篇:《gtop 介绍与选型指南》
- 本系列安装篇:《Ubuntu 24.04 安装 gtop 1.1.5 指南》
- 本系列配置篇:《gtop 1.1.5 配置参数详解》