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 日

#2774命令行工具

Download history 4/week @ 2024-04-13 1/week @ 2024-05-25 5/week @ 2024-06-29 71/week @ 2024-07-06

每月 71 次下载

MIT/Apache

190KB
3K SLoC

systeroid — sysctl(8) 的更强大替代品。

sysctl(8) 是一个在类 Unix 操作系统上使用的工具,用于读取和修改内核属性,如版本号、最大限制和安全设置*systeroid 是 "sysctl 加强版"。它可以做 sysctl 所能做的所有事情,甚至更多。它提供了一种更安全、性能更高、用户友好的 CLI/TUI,用于在运行时管理内核参数。





systeroid 使用 procfs 实现,procfs 是在引导时通常映射到名为 /proc 的挂载点的虚拟文件系统。这意味着检查某些内核参数的值需要在此虚拟文件系统中打开一个文件,读取其内容,解析它们,然后关闭文件。在 Linux 中,这些动态可配置的内核选项位于 /proc/sys 下,其中包含表示内核各部分的目录和可读/写虚拟文件。例如,要启用/禁用 IP 转发,可以在 /proc/sys/net/ipv4/ip_forward 中写入 10,或者可以使用 systeroid ip_forward=1 命令来更改参数的值。

尽管 systeroid 不需要显式指定参数部分,但了解各部分及其影响区域很重要。以下是根据 Linux 内核文档 可用的内核部分

部分 路径 描述
abi /proc/sys/abi/ 执行域与个性
fs /proc/sys/fs/ 文件系统设置
内核 /proc/sys/kernel/ 全局内核信息/杂项设置
net /proc/sys/net/ 网络设置
sunrpc /proc/sys/sunrpc/ SUN远程过程调用设置
user /proc/sys/user/ 用户命名空间限制
vm /proc/sys/vm/ 内存管理调整、缓冲区和缓存管理设置
dev /proc/sys/dev/ 特定设备信息
debug /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

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环境变量来禁用缓存机制。

这是由于不同系统可能安装了不同版本的内核,因此如果systeroid捆绑固定集的参数描述,则文档可能太新或太旧。通过解析方法,文档始终保持最新。

但是,这意味着你需要

  • 安装内核文档包(基于您的发行版)
    • 在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

TUI

用法

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-l, f2 显示日志
r, f5 刷新
esc 取消/退出
q, ctrl-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

运行命令

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

命令 描述
:帮助 显示帮助
:搜索 启用搜索
:选择 选择列表中的当前参数
:设置<名称> <> 设置参数值
:保存<名称> <> 将参数值保存到文件
:滚动[区域] [方向] <数量> 滚动列表或文本
- 区域:list, docs, section
- 方向:up, down, top, bottom, right, left
:复制 复制到剪贴板
:日志 显示日志
:刷新 刷新值
: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_

媒体

资助

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

Support me on Patreon Support me on Patreon

贡献

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

除非您明确声明,否则根据Apache 2.0许可证定义的,您有意提交以包含在作品中的任何贡献,均应按上述方式双许可,不附加任何额外条款或条件。

许可证

在您选择的情况下,根据Apache许可证第2版MIT许可证进行许可。

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

依赖关系

~20–30MB
~303K SLoC