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日 |
#803 in Unix APIs
被 2 crates 使用
85KB
1.5K SLoC
systeroid
— sysctl(8) 的更强大替代品。
8
是一个在类 Unix 操作系统上使用的实用程序,用于读取和修改内核属性,如版本号、最大限制和安全设置*。 systeroid 是 "sysctl on steroids"。它可以做 sysctl 所能做的任何事情,甚至更多。它提供了一个更安全、性能更高、用户友好的 CLI/TUI,用于在运行时管理内核参数。
systeroid 使用 procfs 实现,这是一个虚拟文件系统,通常在启动时映射到名为 /proc
的挂载点。这意味着检查某些内核参数需要在此虚拟文件系统中打开一个文件,读取其内容,解析它们,然后关闭文件。在 Linux 中,这些可动态配置的内核选项位于 /proc/sys
下,该目录包含表示内核各部分的目录和可读/写虚拟文件。例如,要启用/禁用 IP 转发,可以在 /proc/sys/net/ipv4/ip_forward
或使用 systeroid ip_forward=1
命令来更改参数的值。
尽管 systeroid 不需要显式指定参数部分,但了解这些部分及其影响范围很重要。以下是根据 Linux 内核文档 可用的内核部分。
部分 | 路径 | 描述 |
---|---|---|
abi | /proc/sys/abi/ |
执行域与个性 |
文件系统 | /proc/sys/fs/ |
文件系统设置 |
内核 | /proc/sys/kernel/ |
全局内核信息/杂项设置 |
网络 | /proc/sys/net/ |
网络设置 |
sunrpc | /proc/sys/sunrpc/ |
SUN远程过程调用设置 |
用户 | /proc/sys/user/ |
用户命名空间限制 |
虚拟内存 | /proc/sys/vm/ |
内存管理调整、缓冲区和缓存管理设置 |
设备 | /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
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
的访问受到限制。这就是为什么在容器内调整内核参数是不可能的(也不推荐)。*
构建
自定义Docker镜像可以从以下Dockerfile构建。
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 许可证版本 2.0 或 MIT 许可证。
版权
版权所有 © 2022-2023,Orhun Parmaksız
依赖项
~7–17MB
~221K SLoC