14 个版本
0.4.4 | 2023 年 9 月 19 日 |
---|---|
0.4.2 | 2023 年 6 月 17 日 |
0.3.1 | 2023 年 1 月 28 日 |
0.3.0 | 2022 年 9 月 17 日 |
0.1.1 | 2022 年 4 月 19 日 |
#1 在 #sysctl
每月 68 次下载
140KB
2K SLoC
systeroid
— sysctl(8) 的更强大替代品。
sysctl(8)
是一个在类 Unix 操作系统中使用的工具,用于读取和修改内核属性,例如版本号、最大限制和安全设置*。 systeroid 是 "sysctl on steroids"。它可以做 sysctl 做的所有事情,甚至更多。它提供了一个更安全、更高效、更友好的 CLI/TUI,用于在运行时管理内核参数。
systeroid 使用 procfs 实现,它是在引导时通常映射到名为 /proc
的挂载点的虚拟文件系统。这意味着检查某些内核参数的值需要在此虚拟文件系统中打开一个文件,读取其内容,解析它们,然后关闭文件。在 Linux 中,这些动态可配置的内核选项位于 /proc/sys
下,它包含表示内核各部分的目录和可读/可写虚拟文件。例如,要启用/禁用 IP 转发,可以在 /proc/sys/net/ipv4/ip_forward
中写入 1
或 0
,或使用 systeroid ip_forward=1
命令来更改参数的值。
尽管 systeroid 不需要显式指定参数部分,但了解各个部分及其影响区域很重要。以下是根据 Linux 内核文档 可用的内核部分
部分 | 路径 | 描述 |
---|---|---|
abi | /proc/sys/abi/ |
执行域 & 性格 |
fs | /proc/sys/fs/ |
文件系统设置 |
kernel | /proc/sys/kernel/ |
全局内核信息 / 杂项设置 |
net | /proc/sys/net/ |
网络设置 |
sunrpc | /proc/sys/sunrpc/ |
SUN 远程过程调用设置 |
user | /proc/sys/user/ |
用户命名空间限制 |
vm | /proc/sys/vm/ |
内存管理调整缓冲区和缓存管理设置 |
dev | /proc/sys/dev/ |
设备特定信息 |
调试 | /proc/sys/debug/ |
- |
要求
安装运行时依赖项
- 在 Arch Linux 上:
pacman -S libxcb libxkbcommon linux-docs
- 在 Debian/Ubuntu 上:
apt-get install libx11-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev linux-doc
- 在 Fedora 上:
dnf install libX11-devel kernel-doc
安装
Cargo
systeroid 可在 crates.io 上找到
cargo install systeroid
cargo install systeroid-tui
Arch Linux
systeroid 可通过 社区仓库 使用 pacman 安装
pacman -S systeroid
Alpine Linux
systeroid 可在 Alpine Edge 上使用。启用 社区仓库 后,可通过 apk 安装。
apk add systeroid
二进制发行版
从源码构建
# clone the repository
git clone https://github.com/orhun/systeroid && cd systeroid/
# binaries will be located at:
# - target/release/systeroid
# - target/release/systeroid-tui
CARGO_TARGET_DIR=target cargo build --release
另见 要求。
Docker
镜像
Docker 构建是 自动化的,以下注册表中提供了镜像
用法
以下命令可用于交互式查看选定参数的文档
docker run --rm -it "orhunp/systeroid:${TAG:-latest}" --tui
Docker 容器共享宿主系统的内核及其设置,因此出于安全考虑对 /proc
和 /sys
的访问受限。这就是为什么在容器内调整内核参数(不推荐)不可行。 *
构建
可以基于Dockerfile构建自定义Docker镜像。
docker build -t systeroid .
用法
systeroid [options] [variable[=value] ...] --load[=<file>]
选项
-a, --all display all variables (-A,-X)
-T, --tree display the variables in a tree-like format
-J, --json display the variables in JSON format
--deprecated include deprecated variables while listing
-e, --ignore ignore unknown variable errors
-N, --names print only variable names
-n, --values print only variable values
-b, --binary print only variable values without new line
-p, --load read values from file (-f)
-S, --system read values from all system directories
-r, --pattern <expr>
use a regex for matching variable names
-q, --quiet do not print variable after the value is set
-w, --write only enable writing a value to variable
-E, --explain provide a detailed explanation for variable
-D, --docs <path> set the path of the kernel documentation
-P, --no-pager do not pipe output into a pager
-v, --verbose enable verbose logging
--tui show terminal user interface
-c, --config <path> set the path of the configuration file
-h, --help display this help and exit (-d)
-V, --version output version information and exit
大多数参数/标志都继承自sysctl
,因此它们具有相同的功能。
示例
列出参数
# list all parameters
systeroid -A
# list parameters in a tree-like format
systeroid -T
# list parameters in JSON format
systeroid -J
要禁用颜色,设置环境变量NO_COLOR
。
按节筛选
# only list parameters in the "kernel" section
systeroid kernel
# only list parameters in the "vm" and "user" sections
systeroid vm user
显示值
# print the name and value of a parameter (in "name=value" format)
systeroid kernel.hostname
# print only the value of a parameter
systeroid -n kernel.hostname
# print the name and values of the multiple parameters
systeroid kernel.hostname user.max_user_namespaces
设置值
# set the value of a parameter
systeroid kernel.domainname="example.com"
# set the values of multiple parameters and ignore errors
systeroid -e kernel.dmesg_restrict=0 vm.panic_on_oom=1 unknown_param="test"
# set the values of multiple parameters and enforce the "name=value" format
systeroid -w fs.dir-notify-enable=1 net.mptcp.enabled=1 vm.oom_kill_allocating_task
从文件加载值
参数值可以设置在INI文件中。
sysctl.conf
:
# Use kernel.sysrq = 1 to allow all keys.
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html for a list
# of values and keys.
kernel.sysrq = 16
# Append the PID to the core filename
kernel.core_uses_pid = 1
; Enable hard and soft link protection
; (If a line begins with a single '-', any attempts to set the value that fail will be ignored.)
-fs.protected_hardlinks = 1
fs.protected_symlinks = 1
要加载它
systeroid --load sysctl.conf
如果没有指定文件,则默认从/etc/sysctl.conf
加载值
systeroid --load
指定“-”作为文件名表示从标准输入读取数据
systeroid --load -
从系统目录加载值
以下列出了默认系统目录
/etc/sysctl.d
/run/sysctl.d
/usr/local/lib/sysctl.d
/usr/lib/sysctl.d
/lib/sysctl.d
/etc/sysctl.conf
使用--system
标志来加载这些目录中扩展名为“.conf”的文件
systeroid --system
搜索参数
# search parameters using regex patterns
systeroid -r 'net.ipv4.conf.(eth|wlan)0.arp'
systeroid -r '^net.ipv6'
搜索和列表组合的示例输出
$ systeroid --names --pattern 'kernel.*_max$' --tree
kernel
├── ngroups_max
├── pid_max
└── sched_util_clamp_max
显示参数信息
systeroid可以从内核文档中转储参数信息。如果您不知道某个参数的用途,这很有用。
# show information about a parameter
systeroid --explain oom_dump_tasks
在首次启动时,解析应位于以下路径之一
/usr/share/doc/linux
/usr/share/doc/linux-doc
/usr/share/doc/linux-docs
/usr/share/doc/kernel-doc-*/Documentation
然后解析的数据将缓存在$HOME/.cache/systeroid-core
中,并在文档未更新时从那里使用。可以通过设置环境变量NO_CACHE
来禁用缓存机制。
这是出于这样一个事实,即不同的系统上可能安装了不同版本的内核,因此如果将固定的参数描述捆绑在一起,文档可能太新或太旧。采用解析方法,文档始终保持最新。
然而,这意味着您需要
- 安装内核文档包(基于您的发行版)
- 在Arch Linux上:
pacman -S linux-docs
- 在Debian/Ubuntu上:
apt-get install linux-doc
- 在Fedora上:
dnf install kernel-doc
- 在Arch Linux上:
- 或明确指定内核文档的路径。
# specify the kernel documentation path explicitly
# (not needed if you have the kernel documentation installed as a package)
systeroid -E user.max_user_namespaces --docs /usr/share/doc/linux
要更改默认的分页器(less(1)
),您可以使用环境变量PAGER
。您还可以简单地使用--no-pager
标志来禁用它。
systeroid -E kernel.ctrl-alt-del --no-pager
也可以检索多个参数的信息
systeroid -E --pattern '.*ipv4.*' --no-pager
详细日志
使用--verbose
标志可以启用详细日志记录
systeroid --verbose
还可以相应地设置环境变量RUST_LOG
来根据不同的日志级别进行过滤。
RUST_LOG=trace systeroid
文本用户界面
用法
systeroid-tui [options]
-t, --tick-rate <ms>
set the tick rate of the terminal [default: 250]
-D, --docs <path> set the path of the kernel documentation
--save-path <path>
set the path for saving the changed parameters
-s, --section <section>
set the section to filter
-q, --query <query> set the query to search
--bg-color <color>
set the background color [default: black]
--fg-color <color>
set the foreground color [default: white]
-n, --no-docs do not show the kernel documentation
--deprecated include deprecated variables while listing
-c, --config <path> set the path of the configuration file
-h, --help display this help and exit
-V, --version output version information and exit
键绑定
键 | 操作 |
---|---|
?,f1 | 显示帮助 |
上/下,k/j,pgup/pgdown | 滚动列表 |
t/b | 滚动到顶部/底部 |
左/右,h/l | 滚动文档 |
tab,` | 下一个/上一个部分 |
: | 命令 |
/ | 搜索 |
回车 | 选择/设置参数值 |
s | 保存参数值 |
c | 复制到剪贴板 |
ctrl-l,f2 | 显示日志 |
r,f5 | 刷新 |
Esc | 取消 / 退出 |
q, ctrl-c/ctrl-d | 退出 |
示例
启动
只需运行 systeroid-tui
即可启动终端用户界面。或者,您可以使用 systeroid --tui
命令(如果它在 PATH
中找到,则实际上运行 systeroid-tui
)。
显示帮助
通过按 ? 可以显示帮助菜单和键绑定。
滚动
使用 上/下 键滚动参数列表。或者,使用 t/b 向上/向下滚动到顶部/底部。
使用 左/右 键滚动参数文档。
切换内核节
按 tab 或 ` 切换内核部分,以过滤参数列表中的条目。
部分的顺序是 all
-abi
-fs
-kernel
-net
-sunrpc
-user
-vm
。
可以使用 --section
参数以指定的部分启动 systeroid-tui 进行过滤。
systeroid-tui --section kernel
搜索
按 / 并输入您的查询以搜索参数。
或者,您可以使用 --query
参数使用预定义的搜索查询启动 systeroid-tui。
systeroid-tui --query "fs.quota"
设置值
按 enter 选择一个参数,并通过命令提示符设置其值。
按 r 刷新参数列表中的值。
保存值
按 s 通过命令提示符设置参数值并将其保存到通过 --save-path
指定的文件中。
默认保存路径是 /etc/sysctl.conf
,并且可以通过 systeroid --load
加载这些值。
$ systeroid-tui --save-path /etc/sysctl.d/custom.conf
$ systeroid --system
运行命令
按 : 打开命令提示符以运行命令。可用命令有
命令 | 描述 |
---|---|
:帮助 |
显示帮助 |
:搜索 |
启用搜索 |
:选择 |
选择列表中的当前参数 |
:设置<名称> <值> |
设置参数值 |
:保存<名称> <值> |
将参数值保存到文件 |
:滚动[区域] [方向] <数量> |
滚动列表或文本 - 区域: list , docs , section - 方向: up , down , top , bottom , right , left |
:复制 |
复制到剪贴板 |
:日志 |
显示日志 |
:刷新 |
刷新值 |
:quit , :q |
退出 |
复制到剪贴板
按 c 显示选项菜单,用于复制所选参数的名称、值或文档。
* systeroid-tui 应该使用 clipboard
功能进行构建,以启用剪贴板支持。
更改颜色
使用 --bg-color
和 --fg-color
参数来自定义终端用户界面的颜色。
# use a color name for setting the foreground color
systeroid-tui --fg-color blue
# use hexadecimal values for setting foreground/background colors
systeroid-tui --bg-color ffff99 --fg-color 003366
查看参数文档
要查看在列表中选择参数时显示的文档,应按照 "显示有关参数的信息" 部分中的说明解析内核文档。可以通过 --docs
参数或 KERNEL_DOCS
环境变量提供特定路径,如果默认检查的其中一个位置找不到,则使用。
要完全禁用此功能,请使用 --no-docs
标志。
设置刷新率
可以通过 --tick-rate
参数指定以毫秒为单位的值来调整终端的刷新率,这在需要更好性能的情况下可能很有必要。
systeroid-tui --tick-rate 500
日志
要查看日志消息,请按 ctrl-l。这将打开 TUI 中的一个面板,用于分析日志。
此面板由两部分组成。左侧是目标选择器,右侧是向上滚动的日志消息视图。
目标选择器控制:
- 日志记录器捕获日志消息。
- 在日志消息视图中选择显示的级别。
两列有以下含义
- 代码
EWIDT
:E
代表错误,W
代表警告,同样 Info、Debug 和 Trace 也是如此。- 视图中的倒置字符(EWIDT)是启用的日志级别。
- 普通字符表示每个目标启用的捕获的日志级别。
- 如果 EWIDT 中有任何未显示,则相应的日志级别不会被捕获。
此日志记录器面板有以下快捷键,并且仅在显示日志时激活
键 | 操作 |
---|---|
h | 切换目标选择器小部件的隐藏/可见状态 |
f | 仅将焦点切换到所选目标 |
上 | 在目标选择器小部件中选择上一个目标 |
下 | 在目标选择器小部件中选择下一个目标 |
左 | 减少显示(!)日志消息的级别 |
右 | 增加显示(!)日志消息的级别 |
- | 减少捕获(!)日志消息的级别 |
+ | 增加捕获(!)日志消息的级别 |
pageup | 进入页面模式并在日志历史记录中向上滚动约半页 |
pagedown | 仅在页面模式中:在日志历史记录中向下滚动 10 个事件 |
escape | 退出页面模式并返回滚动模式 |
space | 切换隐藏设置为关闭的日志目标 |
要保存日志到文件,可以使用 --log-file
参数
systeroid-tui --log-file systeroid.log
可以使用 RUST_LOG
环境变量来设置相应的日志级别。
RUST_LOG=debug systeroid-tui
配置
systeroid 可以通过使用 INI 格式 的配置文件进行配置。可以通过 --config
或 SYSTEROID_CONFIG
环境变量指定。它也可以放置在以下全局位置之一
$HOME/.config/systeroid/systeroid.conf
$HOME/.systeroid/systeroid.conf
# set the config path via argument
systeroid --config config/systeroid.conf
# set the config path via env
SYSTEROID_CONFIG=config/systeroid.conf systeroid
# use a global path
mkdir -p "$HOME/.config/systeroid"
cp config/systeroid.conf "$HOME/.config/systeroid"
systeroid
请参阅配置选项的示例 systeroid.conf。
资源
参考
徽标
systeroid 徽标最初由 Ryan Tippery 作为 Compositions 艺术收藏的一部分绘制,并使用 Filled Spots 字体组合而成。感谢 Ryan 允许我使用他的画作作为徽标! <3 点赞!
社交媒体链接
媒体中
赞助
如果您觉得 systeroid 和/或我在 GitHub 个人资料 上的其他项目有用,请考虑在 GitHub Sponsors 上支持我或 成为赞助者!
贡献
请参阅我们的 贡献指南,并在与项目的所有互动中遵循 行为准则。
除非您明确表示,否则您提交给工作以包含在内的任何有意贡献,根据 Apache 2.0 许可证的定义,应按上述方式双重许可,不附加任何其他条款或条件。
许可
根据您的选择,本软件受Apache License 2.0或MIT许可证的许可。
版权
版权所有 © 2022-2023,Orhun Parmaksız
依赖项
约8-17MB
约219K SLoC