bottom 配置文件 [flags] 详解:从命令行参数到 TOML 配置的完整映射指南
【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom
本指南以 bottom(一个跨平台图形化进程/系统监控工具,命令名为btm)的配置文件 Flags 章节为骨架,系统讲解[flags]配置表的作用、全部字段含义、与命令行参数的对应关系以及弃用字段的迁移路径。读完本文,你将掌握如何用一份持久化的 TOML 配置文件替代频繁敲击的命令行参数,并理解 bottom 内部“命令行参数 > 配置节 > 弃用字段”的三级优先级解析机制。
为什么需要 [flags] 配置表
bottom 的大部分行为都可以通过命令行参数控制(例如btm -a隐藏平均 CPU、btm -b进入 basic 模式),但每次启动都手动输入参数既繁琐又容易出错。为此,bottom 提供了配置文件机制:你可以在配置文件的[flags]表中声明与命令行参数等价的选项,从而让偏好设置持久化生效。
关于配置文件本身(默认查找位置、自动创建等),可参考 配置文件总览;完整的命令行参数清单见 命令行选项。
快速上手:在 [flags] 表中写入选项
[flags]是配置文件中的一个顶层 TOML 表,配置方式非常直接——字段名与命令行参数一一对应,值为布尔、整数或字符串。例如:
[flags] hide_avg_cpu = true这等价于启动时执行btm -a。
一个更完整的示例:
[flags] dot_marker = true # 图表使用圆点标记而非默认的盲文标记 rate = "1s" # 刷新率 1 秒 retention = "10m" # 保留最近 10 分钟的数据 temperature_type = "c" # 温度单位:摄氏度 expanded = true # 启动时展开默认组件 table_gap = "space" # 表头与数据行之间的间隔仓库自带的 默认配置模板 中,[flags]段所有选项默认以注释形式存在,取消注释即可启用,并附有中文注释说明与“Deprecated - use xxx”的迁移提示。
优先级规则:命令行参数覆盖配置文件
[flags]中的设置并不是"唯一"生效的。从 默认配置模板 的注释可以确认:运行时显式传入的命令行参数(如btm -a)会覆盖配置文件中相同选项的设置。这一规则同样体现在源码中:src/options.rs定义了一系列宏(如is_flag_enabled!、enabled_option_with_deprecated!),其判断顺序均为"先查 CLI 参数,再查对应配置节,最后回退到默认值"。
[flags] 全部字段详解
下表完整覆盖原文档中[flags]支持的全部字段(约 40 项),并按功能分组,便于查阅。除原文档说明外,补充了默认值与取值范围等实操细节(依据 命令行选项 与 参数定义源码)。
图表与界面外观
| 字段 | 类型 | 说明 |
|---|---|---|
dot_marker | Boolean | 图表使用圆点标记而非默认的盲文(braille)标记。对应-m/--dot_marker。 |
basic | Boolean | 隐藏图表,使用更简洁的界面(受 htop 设计启发)。对应-b/--basic。 |
use_old_network_legend | Boolean | 已废弃,使用旧的网络图例样式。对应--use_old_network_legend。 |
show_table_scroll_position | Boolean | 在表格组件的标题中显示列表滚动位置指示器。 |
show_table_scroll_bar | Boolean | 在表格组件右边缘显示滚动条。 |
table_gap | String("none"/"space"/"line") | 控制表头与数据行之间的间隔,默认"space"。源码中由TableGap枚举(见 flags.rs)定义:none高度为 0,space与line高度为 1 行。 |
autohide_time | Boolean | 在图表中临时显示时间刻度(缩放时短暂出现后自动隐藏);若同时设置了hide_time则无效。对应--autohide_time。 |
hide_time | Boolean | 完全隐藏时间刻度。对应--hide_time。 |
expanded | Boolean | 启动应用时展开默认组件;在 basic 模式下无效。对应-e/--expanded。 |
刷新率与时间刻度
| 字段 | 类型 | 说明 |
|---|---|---|
rate | Unsigned Int(毫秒)或 String(人类可读时间) | 数据刷新间隔。默认1s(1000ms),最小250ms,值越小系统资源占用越高。对应-r/--rate。 |
default_time_value | Unsigned Int(毫秒)或 String(人类可读时间) | 图表默认时间窗口。默认60s,最小30s。对应-t/--default_time_value。 |
time_delta | Unsigned Int(毫秒)或 String(人类可读时间) | 每次缩放时时间窗口的变化量。默认15s,最小1s。对应-d/--time_delta。 |
retention | String(人类可读时间,如"10m"、"1h") | 一次最多存储多长时间的历史数据。默认10m,最小1m,值越大内存占用越高。对应--retention。 |
上述时间类字段在源码中统一由StringOrNum枚举(config.rs)解析:既可以传纯毫秒数字,也可以传"1s"、"10m"、"1h"这类人类可读格式,这与命令行参数的行为完全一致。
温度与图例位置
| 字段 | 类型 | 说明 |
|---|---|---|
temperature_type | String("k"/"f"/"c"/"kelvin"/"fahrenheit"/"celsius") | 温度单位,默认"c"(摄氏度)。命令行对应-c/-f/-k。 |
memory_legend | String(九宫格位置之一,见下) | 已废弃,改用memory_graph.legend_position或memory.legend_position。 |
network_legend | String(九宫格位置之一,见下) | 已废弃,改用network_graph.legend_position或network.legend_position。 |
图例位置枚举(9 个合法值)在 命令行选项 与 参数定义源码 中一致定义为:"none"、"top-left"、"top"、"top-right"、"left"、"right"、"bottom-left"、"bottom"、"bottom-right"。
默认组件(Widget)选择
| 字段 | 类型 | 说明 |
|---|---|---|
default_widget_type | String("cpu"/"proc"/"net"/"temp"/"mem"/"disk",与布局选项一致) | 设置启动时的默认选中组件类型。默认布局下为"proc"(进程组件);自定义布局下为第一个遇到的组件。命令行对应--default_widget_type。 |
default_widget_count | Unsigned Int | 设置第 N 个同类型组件作为默认。需与default_widget_type配合,从左到右、从上到下计数,默认值 1。对应--default_widget_count。 |
例如一个布局中有 4 个 CPU 组件,default_widget_type = "cpu"搭配default_widget_count = 3会选择第 3 个 CPU 组件作为启动时的默认选中项。
进程相关(大多已迁移至 [processes] 节)
| 字段 | 类型 | 说明 |
|---|---|---|
current_usage | Boolean | 已废弃,改用processes.current_usage。将进程 CPU% 基于当前 CPU 使用率计算。对应-u/--current_usage。 |
group_processes | Boolean | 已废弃,改用processes.default_grouped。默认将同名进程分组;设置树形模式时无效。对应-g/--group_processes。 |
case_sensitive | Boolean | 已废弃,改用processes.case_sensitive。默认开启搜索大小写敏感。对应-S/--case_sensitive。 |
whole_word | Boolean | 已废弃,改用processes.whole_word。默认开启整词匹配。对应-W/--whole_word。 |
regex | Boolean | 已废弃,改用processes.regex。默认开启正则搜索。对应-R/--regex。 |
process_memory_as_value | Boolean | 已废弃,改用processes.default_memory_value。默认以数值而非百分比显示进程内存。 |
tree | Boolean | 已废弃,改用processes.default_tree。默认以树形模式显示进程组件。对应-T/--tree。 |
process_command | Boolean | 已废弃,改用processes.process_command。默认以完整命令而非进程名显示。 |
disable_advanced_kill | Boolean | 已废弃,改用processes.disable_advanced_kill。禁用向进程发送信号的扩展终止能力;仅 Linux、macOS、FreeBSD 可用。 |
unnormalized_cpu | Boolean | 已废弃,改用processes.unnormalized_cpu。进程 CPU% 不按核心数归一化。对应-n/--unnormalized_cpu。 |
hide_k_threads | Boolean | 已废弃,改用processes.hide_k_threads。隐藏内核线程。 |
tree_collapse | Boolean | 已废弃,改用processes.tree_collapse。默认折叠进程树。 |
内存与网络(大多已迁移至对应组件节)
| 字段 | 类型 | 说明 |
|---|---|---|
enable_cache_memory | Boolean | 已废弃,改用memory.cache_memory。启用缓存与缓冲内存统计(Windows 不可用)。 |
free_arc | Boolean | 已废弃,改用memory.free_arc。从内存用量中扣除可释放的 ARC 内存(ZFS,需编译时启用zfs特性)。 |
network_use_binary_prefix | Boolean | 已废弃,改用network_graph.use_binary_prefix。网络组件使用二进制前缀(如 Ki 而非 k)。 |
network_use_bytes | Boolean | 已废弃,改用network_graph.use_bytes。网络组件以字节显示(默认是比特)。 |
network_use_log | Boolean | 已废弃,改用network_graph.use_log。网络组件使用对数刻度。 |
安全、GPU 与其他
| 字段 | 类型 | 说明 |
|---|---|---|
disable_click | Boolean | 禁用鼠标点击交互。对应--disable_click。 |
disable_keys | Boolean | 禁用键盘快捷键,包括退出 bottom 的快捷键,请谨慎使用。对应--disable_keys。 |
read_only | Boolean | 禁止任何影响系统的操作(例如终止进程)。对应--read_only。 |
no_write | Boolean | 禁止写入配置文件(不更新/不创建配置)。 |
disable_gpu | Boolean | 禁用 NVIDIA 与 AMD GPU 数据采集。对应--disable_gpu。 |
battery | Boolean | 在非自定义布局中显示电池组件。对应--battery。 |
hide_avg_cpu | Boolean | 已废弃,改用cpu.hide_avg_cpu。隐藏平均 CPU 使用率条目。对应-a/--hide_avg_cpu。 |
cpu_left_legend | Boolean | 已废弃,改用cpu.left_legend。将 CPU 图表图例放在左侧。对应-l/--cpu_left_legend。 |
average_cpu_row | Boolean | 已废弃,改用cpu.basic_average_cpu_row。在 basic 模式下将平均 CPU 条目移到独立一行。 |
弃用字段(Deprecated Flags)与迁移机制
从上表可见,[flags]中有大量字段已被标记为Deprecated,这是 bottom 配置体系演进的结果:随着组件级配置节([cpu]、[memory_graph]、[network_graph]、[processes]等)逐步完善,旧的扁平字段被迁移到语义更明确的组件节中。
如果你仍在配置文件中使用旧字段,bottom 不会拒绝加载,但会在启动时向 stderr 输出形如:
Warning: The config option 'hide_avg_cpu' is deprecated and will eventually be removed. Please use 'cpu.hide_avg_cpu' instead.的警告。该机制实现在 options.rs 的deprecated_warning/deprecated_warning_with_alias函数中,并由enabled_option_with_deprecated!宏在读取配置时触发(options.rs)。触发条件有两点:一是 CLI 参数未设置,二是对应新配置节字段也未设置,此时才回退读取旧字段并告警。
配套的集成测试可以佐证这一行为:tests/valid_configs/empty_flags.toml是一个只含空[flags]表的配置,其注释明确指出"不应触发任何弃用警告"——说明仅当旧字段被实际使用时才会告警。
迁移建议:将所有 Deprecated 字段替换为表格中标注的新路径,例如:
# 旧写法(会告警) [flags] hide_avg_cpu = true # 新写法 [cpu] hide_avg_cpu = trueGeneralConfig结构体(flags.rs)同时保留新旧字段正是为了平滑过渡,但旧字段最终会被移除,尽早迁移可以避免未来升级时配置失效。
与命令行参数的映射速查
[flags]的核心设计目标就是"避免每次重复输入命令行参数"。二者的完整对应关系已在 命令行选项 中列出,这里给出常用映射速查(格式:配置文件字段 ↔ 命令行参数):
| 配置文件字段 | 命令行参数 |
|---|---|
hide_avg_cpu | -a,--hide_avg_cpu |
basic | -b,--basic |
dot_marker | -m,--dot_marker |
expanded | -e,--expanded |
rate | -r,--rate |
default_time_value | -t,--default_time_value |
time_delta | -d,--time_delta |
retention | --retention |
hide_time | --hide_time |
autohide_time | --autohide_time |
disable_click | --disable_click |
disable_keys | --disable_keys |
read_only | --read_only |
show_table_scroll_position | --show_table_scroll_position |
default_widget_type | --default_widget_type |
default_widget_count | --default_widget_count |
disable_gpu | --disable_gpu |
battery | --battery |
case_sensitive | -S,--case_sensitive |
current_usage | -u,--current_usage |
group_processes | -g,--group_processes |
regex | -R,--regex |
tree | -T,--tree |
unnormalized_cpu | -n,--unnormalized_cpu |
whole_word | -W,--whole_word |
tree_collapse | --tree_collapse |
process_command | --process_command |
process_memory_as_value | --process_memory_as_value |
hide_k_threads | --hide_k_threads |
disable_advanced_kill | --disable_advanced_kill |
temperature_type("c"/"f"/"k") | -c/--celsius、-f/--fahrenheit、-k/--kelvin |
memory_legend | --memory_legend |
network_legend | --network_legend |
network_use_bytes | --network_use_bytes |
network_use_binary_prefix | --network_use_binary_prefix |
network_use_log | --network_use_log |
use_old_network_legend | --use_old_network_legend |
enable_cache_memory | --enable_cache_memory |
free_arc | --free_arc |
命令行参数在 args.rs 中通过 clap 定义,支持下划线(--hide_avg_cpu)与连字符(--hide-avg-cpu)两种写法(源码中为每个含下划线的长参数显式注册了连字符别名,并有catch_missing_hyphen_alias测试保证这一点)。另外需注意:并非所有命令行参数都有配置文件对应项——例如--theme(主题)、--get_threads(收集线程信息)、--process_default_sort(进程默认排序列)、--show_packets、--network_start_zeroed、--short_gpu_names等属于组件节或专用参数,应直接查阅对应章节(如 进程组件配置、内存图配置)或使用btm --help查看完整说明。
配置文件位置与 Schema 支持
使用[flags]前,需确认配置文件所在位置。若未通过-C/--config_location指定,bottom 会在以下默认位置查找(不存在时自动以默认值创建):
| 操作系统 | 默认配置位置 |
|---|---|
| macOS | $HOME/Library/Application Support/bottom/bottom.toml、$HOME/.config/bottom/bottom.toml、$XDG_CONFIG_HOME/bottom/bottom.toml |
| Linux | $HOME/.config/bottom/bottom.toml、$XDG_CONFIG_HOME/bottom/bottom.toml |
| Windows | C:\Users\<USER>\AppData\Roaming\bottom\bottom.toml |
配置查找逻辑在 options.rs 中实现:优先使用-C指定路径;其次为兼容旧版本,若~/.config/bottom/bottom.toml已存在则沿用;否则使用系统配置目录下的bottom/bottom.toml;macOS 下还会额外检查$XDG_CONFIG_HOME。
此外,配置文件支持 JSON Schema,可在支持 Schema 的编辑器/IDE 中获得补全与校验。仓库的 schema 目录按版本存放了对应的bottom.json(例如 v0.14.7 版 Schema),可配置到你的编辑器中辅助编写[flags]及其他所有配置节。
小结与自查清单
[flags]是 bottom 配置体系中"命令行参数的持久化替身",掌握它意味着:
- 用
[flags]表声明偏好,避免每次启动重复敲参数; - 牢记优先级:命令行参数 > 新组件配置节 > 弃用字段 > 默认值;
- 优先使用非 Deprecated 字段,将旧字段迁移到
[cpu]、[processes]、[memory_graph]、[network_graph]等组件节; - 时间类字段既支持毫秒数字也支持人类可读格式(
rate、default_time_value、time_delta、retention); - 结合 默认配置模板 与 JSON Schema 快速搭建自己的配置。
如需更深入的组件级配置(进程、CPU、内存、网络、磁盘、温度等),可从 配置目录 进入对应章节继续阅读。
【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考