30 个版本 (稳定)
1.6.5 | 2024 年 4 月 12 日 |
---|---|
1.6.4 | 2023 年 10 月 27 日 |
1.6.3 | 2023 年 4 月 6 日 |
1.6.2 | 2022 年 10 月 2 日 |
0.3.3 | 2020 年 3 月 23 日 |
#55 在 操作系统 中
每月 128 次下载
110KB
2.5K SLoC
内核 是操作系统中用于硬件和软件组件之间交互的部分。在大多数系统中,它在引导加载程序之后启动时加载,并处理 I/O 请求以及键盘、显示器、网络适配器和扬声器等外围设备。通常,内核负责 内存管理、进程管理、设备管理、系统调用 和 安全性。应用程序使用 系统调用 机制从操作系统请求服务,并且大多数情况下,此请求通过操作系统提供的库传递给内核以调用相关内核函数。当内核执行这些低级任务时,它驻留在称为 受保护的内核空间 的单独内存部分,该空间对应用程序和其他系统部分不可访问。相比之下,浏览器、文本编辑器、窗口管理器或音频/视频播放器等应用程序使用不同的单独内存区域,称为 用户空间。这种分离防止用户数据和内核数据相互干扰,导致不稳定和缓慢,以及防止故障应用程序崩溃整个操作系统。
由于管理系统调用和资源的方式不同,存在不同的内核设计。例如,虽然 单一内核 为了速度而在相同的地址空间中运行所有操作系统指令,但 微内核 为了模块化而在用户和内核服务之间使用不同的空间。除此之外,还有 混合内核、纳米内核 和 外核。混合内核架构基于结合微内核和单一内核的特点。
Linux内核是开源的、单一的和类Unix操作系统的内核,用于Linux发行版、各种嵌入式系统(如路由器)以及所有基于Android的系统。林纳斯·托瓦兹于1991年构想并创建了Linux内核,至今仍由成千上万的开发者共同开发。它是自由和开源软件的突出例子,并在其他自由软件项目中使用,特别是在著名的GNU操作系统中。尽管基于Linux的操作系统在计算领域占据主导地位,但它仍然保留了一些在Linux早期引起广泛讨论的设计缺陷。例如,与其他类型的内核相比,它具有最大的体积和最强的复杂度。但这却是单一内核固有的设计特征。这类设计问题导致开发者为Linux内核添加了其他内核所不具备的新功能和机制。
与标准单一内核不同,Linux内核也是模块化的,可以接受用于添加对新硬件(如设备驱动程序)和/或文件系统的支持,或用于添加系统调用的可加载内核模块(LKM)。由于LKMs可以在系统运行时加载和卸载,因此它们可以扩展内核而不需要重新启动和重新编译。因此,模块提供的内核功能在不使用时不会驻留在内存中,并且可以卸载相关模块以释放内存和其他资源。
可加载内核模块位于/lib/modules
,以.ko
(内核对象)扩展名在Linux中。虽然可以使用lsmod命令列出已加载的内核模块,但使用modprobe或insmod/rmmod来加载或卸载内核模块。insmod/rmmod用于独立于modprobe的模块,并且不需要安装到/lib/modules/$(uname -r)
。
以下是一个简单的Linux内核模块示例,当模块加载和卸载时会打印一条消息。下面展示了使用模块的Makefile构建和安装步骤。
make # build
sudo make install # install
sudo modprobe lkm_example # load
sudo modprobe -r lkm_example # unload
以下使用dmesg命令检索内核的消息缓冲区。
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon提供了一个用于管理Linux内核模块和监控内核活动的基于文本的用户界面。管理包括加载、卸载、黑名单和显示模块信息。这些内核模块的更新、硬件日志和其他内核消息可以使用kmon中的实时活动监控器跟踪。由于在Linux中执行这些任务需要使用不同的工具(如dmesg和kmod),kmon旨在将它们聚合到一个终端窗口中,并尽可能简化使用,同时保持其功能。
kmon是用Rust编写的,并使用tui-rs & termion库为其基于文本的用户界面。
目录
安装
Cargo
kmon 可以通过 crates.io 使用 Cargo 安装,前提是已安装 Rust。
cargo install kmon
最小支持的 Rust 版本 (MSRV) 是 1.70.0
。
Arch Linux
kmon 可以从 Arch Linux 的 官方仓库 安装。
pacman -S kmon
在 AUR 上还有一个开发包。使用您喜欢的 AUR 辅助工具 进行安装。例如,
paru -S kmon-git
Nixpkgs
kmon 可以通过 Nix 包管理器 从 nixpkgs-unstable
通道安装。
nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update nixpkgs
nix-env -iA nixpkgs.kmon
在 NixOS
nix-channel --add https://nixos.org/channels/nixos-unstable
nix-channel --update nixos
nix-env -iA nixos.kmon
Alpine Linux
kmon 可用于 Alpine Edge。启用 社区仓库 后,可以通过 apk 安装。
apk add kmon
Docker
docker run -it --cap-add syslog orhunp/kmon:tagname
构建
docker build -t kmon .
运行
docker run -it --cap-add syslog kmon
手册
wget https://github.com/orhun/kmon/releases/download/v[VERSION]/kmon-[VERSION]-x86_64-unknown-linux-gnu.tar.gz
- 要下载使用 musl-libc 编译的包,请运行
wget https://github.com/orhun/kmon/releases/download/v[VERSION]/kmon-[VERSION]-x86_64-unknown-linux-musl.tar.gz
- 提取文件。
tar -xvzf kmon-*.tar.gz
- 进入新文件夹。
cd kmon-[VERSION]
- 运行二进制文件。
./kmon
-
将二进制文件移动到
/usr/local/bin/
,以便通过kmon
命令从终端运行。 -
在构建时,在
target
目录中生成了手册页和 shell 完成项。
注意
要使用 X11 的复制/粘贴命令,应安装 libxcb。
例如:为 Debian/Ubuntu 安装 libxcb1-dev
包,为 Fedora/openSUSE/Void Linux 安装 libxcb-devel
包。
用法
kmon [OPTIONS] [COMMAND]
选项
-a, --accent-color <COLOR> Set the accent color using hex or color name [default: white]
-c, --color <COLOR> Set the main color using hex or color name [default: darkgray]
-t, --tickrate <MS> Set the refresh rate of the terminal [default: 250]
-r, --reverse Reverse the kernel module list
-u, --unicode Show Unicode symbols for the block titles
-h, --help Print help information
-V, --version Print version information
命令
sort Sort kernel modules
排序
kmon sort [OPTIONS]
选项
-s, --size Sort modules by their sizes
-n, --name Sort modules by their names
-d, --dependent Sort modules by their dependent modules
-h, --help Print help information
键绑定
[?], F1 |
帮助 |
右键/左键,h/l |
在块之间切换 |
上/下,k/j,alt-k/j |
向上/向下滚动 [选定块] |
pgup/pgdown |
向上/向下滚动 [内核活动] |
</> |
向上/向下滚动 [模块信息] |
alt-h/l |
向右/向左滚动 [内核活动] |
ctrl-t/b,home/end |
滚动到顶部/底部 [模块列表] |
alt-e/s |
展开/缩小选定块 |
ctrl-x |
更改块位置 |
ctrl-l/u,alt-c |
清除内核环形缓冲区 |
[d],alt-d |
显示依赖模块 |
[1]..[9] |
跳转到依赖模块 |
[\],标签页,后退标签页 |
显示下一个内核信息 |
[/],s,回车键 |
搜索内核模块 |
[+],i,插入 |
加载内核模块 |
[-],u,退格键 |
卸载内核模块 |
[x],b,删除键 |
将内核模块加入黑名单 |
ctrl-r,alt-r |
重新加载内核模块 |
m,o |
显示选项菜单 |
y/n |
执行/取消命令 |
c/v |
复制/粘贴 |
r, F5 |
刷新 |
q,ctrl-c/d, ESC |
退出 |
功能
帮助
在运行终端用户界面时按下 '?
' 可查看键绑定。
导航 & 滚动
箭头键
用于在块之间导航和滚动。
滚动内核活动
某些内核消息可能足够长,无法适应内核活动块,因为它们没有被包装。在这种情况下,可以使用alt-h & alt-l
键水平滚动内核活动。垂直滚动机制与其他块相同。
平滑滚动
alt-j & alt-k
键可以用来缓慢滚动内核活动和模块信息块。
选项菜单
m
和o
键可以用作内核管理操作的快捷键。按下时,将提供一个选项菜单来管理当前选定的内核模块。
块大小
alt-e & alt-s
键可以用来扩展/缩小选定的块。
块位置
ctrl-x
键可以用来改变块的位置。
内核信息
使用\, tab, backtab
键中的一个来在内核版本、版本和平台信息之间切换。
模块信息
在选中时显示内核模块的状态。
显示依赖模块
使用d, alt-d
键中的一个来显示选定模块的所有依赖模块。
跳转到依赖模块
要从父模块跳转到依赖内核模块,可以使用数字键
(1-9)来指定模块在“由”列中的索引。
搜索模块
使用箭头键或使用/, s, enter
中的一个来切换到搜索区域,并输入模块名称作为搜索查询。
加载模块
要将模块添加到Linux内核中,使用+, i, insert
键中的一个来切换到加载模式,并输入要加载的模块名称。然后使用y/, n
来确认/取消加载命令的执行。
用于加载模块的命令
modprobe <module_name> || insmod <module_name>.ko
卸载模块
使用-, u, backspace
键中的一个来从Linux内核中移除选定的模块。
用于移除模块的命令
modprobe -r <module_name> || rmmod <module_name>
黑名单模块
黑名单是一种防止内核模块加载的机制。要黑名单选定的模块,使用x, b, delete
键中的一个并确认执行。
用于黑名单模块的命令
if ! grep -q <module_name> /etc/modprobe.d/blacklist.conf; then
echo 'blacklist <module_name>' >> /etc/modprobe.d/blacklist.conf
echo 'install <module_name> /bin/false' >> /etc/modprobe.d/blacklist.conf
fi
重新加载模块
使用ctrl-r
或alt-r
键来重新加载选定的模块。
用于重新加载模块的命令
modprobe -r <module_name> || rmmod <module_name> && modprobe <module_name> || insmod <module_name>.ko
清除环形缓冲区
可以使用 ctrl-l/u, alt-c
或 ctrl-c/ctrl-v
键来清除内核环形缓冲区。
dmesg --clear
复制 & 粘贴
复制/粘贴操作设置为 c/v
键。
在输入模式下,使用 ctrl-c/ctrl-v
进行复制和粘贴。
排序/反转内核模块
可以使用 sort
子命令按名称、大小或依赖模块对内核模块进行排序。
kmon sort --name
kmon sort --size
kmon sort --dependent
此外,使用 -r, --reverse
标志来反转内核模块列表。
kmon --reverse
自定义颜色
kmon 默认使用终端颜色,但可以使用 -c, --color
选项指定突出显示颜色。或者,可以通过 -a, --accent-color
选项设置默认文本颜色。
支持的颜色
支持的终端颜色有:black, red, green, yellow, blue, magenta, cyan, gray, darkgray, lightred, lightgreen, lightyellow, lightblue, lightmagenta, lightcyan, white
。
kmon --color red
使用自定义颜色
为颜色提供十六进制值。
kmon --color 19683a
更改突出显示颜色
默认文本颜色可能会导致某些具有透明度的主题的可读性问题。可以使用 -a, --accent-color
选项类似地使用 -c, --color
选项来解决这个问题。
kmon --color 6f849c --accent-color e35760
Unicode符号
使用 -u, --unicode
标志来显示块标题的 Unicode 符号。
kmon --unicode
设置终端滴答率
可以使用 -t, --tickrate
选项来设置终端 UI 刷新间隔(以毫秒为单位)。
路线图
kmon 旨在成为 Linux 内核管理的一个标准工具,同时支持大多数 Linux 发行版。
可访问性
为了实现这个目标,kmon 应该可以通过不同的软件包管理器访问,例如 Snap* 和 RPM。
依赖
为了 kmon 正常工作,系统上需要安装 dmesg 和 kmod 等基本工具。因此,下一步是使用系统资源来实现这些功能。
功能
关于 Linux 内核的管理操作应在 kmon 中适用,以最小化对命令行和其他工具的依赖。
测试
kmon 应在不同架构上进行测试和报告,以进行进一步的开发和支持。
资源
关于本项目
文章
媒体
- 使用 Kmon 管理和监控 Linux 内核模块 ( OSTechNix)
- Kmon Linux 内核管理和监控软件 (YouTube上的Brodie Robertson)
相册
Fedora 31 | Debian 10 | Manjaro 19 |
---|---|---|
Ubuntu 18.04 | openSUSE | Void Linux |
---|---|---|
社交媒体
- 在Twitter上关注 @kmonitor_
- 关注作者 作者
资助
GitHub
通过在GitHub Sponsors上支持我,来支持我的项目开发。
Patreon
Open Collective
许可
GNU通用公共许可证 (3.0)
版权
版权所有 © 2020-2024, Orhun Parmaksız
依赖
~7.5MB
~125K SLoC