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

Download history 173/week @ 2024-04-02 19/week @ 2024-04-09 1/week @ 2024-04-16 9/week @ 2024-04-23 1/week @ 2024-05-28 68/week @ 2024-07-02

每月 68 次下载

MIT/Apache

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 中写入 10,或使用 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

安装

打包状态

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

这是出于这样一个事实,即不同的系统上可能安装了不同版本的内核,因此如果将固定的参数描述捆绑在一起,文档可能太新或太旧。采用解析方法,文档始终保持最新。

然而,这意味着您需要

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

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

目标选择器控制:

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

两列有以下含义

  • 代码 EWIDTE 代表错误,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 License 2.0MIT许可证的许可。

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

依赖项

约8-17MB
约219K SLoC