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 使用

MIT/Apache

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

安装

打包状态

Packaging status

Cargo

systeroidcrates.io上有可用

cargo install systeroid
cargo install systeroid-tui

Arch Linux

systeroid 可以通过社区仓库使用pacman安装

pacman -S systeroid

Alpine Linux

systeroidAlpine 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
  • 或显式指定内核文档的路径。
# 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/jpgup/pgdown 滚动列表
t/b 滚动到顶部/底部
左/右h/l 滚动文档
tab` 转到下一/前一节
: 命令
/ 搜索
回车 选择/设置参数值
s 保存参数值
c 复制到剪贴板
ctrl-lf2 显示日志
rf5 刷新
esc 取消/退出
qctrl-c/ctrl-d 退出

示例

启动

只需运行 systeroid-tui 即可启动终端用户界面。或者,您可以使用 systeroid --tui 命令(如果它在 PATH 中,则实际上运行 systeroid-tui)。

显示帮助

通过按 ? 键可以显示帮助菜单和快捷键。

Help

滚动

使用 上/下 键滚动参数列表。或者,使用 t/b 滚动到顶部/底部。

Scroll list

使用 左/右 键滚动参数文档。

Scroll documentation

切换内核节

tab` 键切换内核部分,以过滤参数列表中的条目。

部分顺序为 all-abi-fs-kernel-net-sunrpc-user-vm

Toggle section

可以使用 --section 参数以指定的部分启动 systeroid-tui 以进行过滤。

systeroid-tui --section kernel

Section option

搜索

/ 并输入您的查询以搜索参数。

Search

或者,您可以使用 --query 参数以预定义的搜索查询启动 systeroid-tui

systeroid-tui --query "fs.quota"

Query option

设置值

enter 键选择一个参数并通过命令提示符设置其值。

Set value

您可以通过按 r 键刷新参数列表中的值。

保存值

s 键通过命令提示符设置参数值并将其保存到通过 --save-path 指定的文件中。

Save value

默认保存路径为 /etc/sysctl.conf,可以通过 systeroid --load 加载这些值。

$ systeroid-tui --save-path /etc/sysctl.d/custom.conf

$ systeroid --system

运行命令

: 打开命令提示符以运行命令。可用的命令有

命令 描述
:帮助 显示帮助
:搜索 启用搜索
:选择 选择列表中的当前参数
:设置<名称> <> 设置参数值
:保存<名称> <> 将参数值保存到文件
:滚动[区域] [方向] <数量> 滚动列表或文本
- 区域:listdocssection
- 方向:updowntopbottomrightleft
:复制 复制到剪贴板
:日志 显示日志
:刷新 刷新值
:quit:q 退出

复制到剪贴板

c 显示选项菜单以复制选定参数的名称、值或文档。

Copy to clipboard

* 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

Change colors

查看参数文档

要在选择列表上的参数时查看文档,应按 "显示参数信息" 部分中所述解析内核文档。可以通过 --docs 参数或 KERNEL_DOCS 环境变量指定特定的内核文档路径,如果它未在默认检查位置之一中找到。

要完全禁用此功能,请使用 --no-docs 标志。

设置刷新率

可以通过 --tick-rate 参数指定以毫秒为单位的价值以调整终端的刷新率,在某些情况下可能需要更好的性能。

systeroid-tui --tick-rate 500

日志

要查看日志消息,请按 ctrl-l。它将在 TUI 中打开一个用于分析日志的面板。

Logs

此面板由两部分组成。左侧为目标选择器,右侧为日志消息视图,向上滚动。

目标选择器控件

  • 由日志记录器捕获的日志消息。
  • 选择要显示在日志消息视图中的级别。

两列具有以下含义

  • 代码 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 格式 的配置文件进行配置。它可以通过 --configSYSTEROID_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 鼓掌!

  • Follow @systeroid
  • https://orhun.dev
    • Follow @orhun
    • Follow @orhunp_

媒体

资助

如果您觉得 Systeroid 和/或我的其他项目在 GitHub 个人资料 中很有用,请考虑在 GitHub Sponsors 上支持我或 成为赞助商

Support me on Patreon Support me on Patreon

贡献

请参阅我们的 贡献指南,并在与项目的所有互动中遵循 行为准则

除非您明确声明,否则您有意提交的任何贡献,按照 Apache 2.0 许可证定义的工作,应按上述方式双重许可,不附加任何额外条款或条件。

许可

根据您的选择,许可为 Apache 许可证版本 2.0MIT 许可证

版权所有 © 2022-2023,Orhun Parmaksız

依赖项

~7–17MB
~221K SLoC