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 在 命令行工具
每月 71 次下载
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
中写入 1
或 0
,或者可以使用 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
安装
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
- 在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
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/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 点赞!
社交媒体链接
媒体
资助
如果您觉得我的GitHub个人资料上的Systeroid和其他项目有用,请考虑在GitHub Sponsors上支持我或成为赞助商!
贡献
除非您明确声明,否则根据Apache 2.0许可证定义的,您有意提交以包含在作品中的任何贡献,均应按上述方式双许可,不附加任何额外条款或条件。
许可证
在您选择的情况下,根据Apache许可证第2版或MIT许可证进行许可。
版权
版权所有 © 2022-2023,Orhun Parmaksız
依赖关系
~20–30MB
~303K SLoC