Project Icon

kmon

Linux内核模块管理与监控的文本界面工具

kmon是一个用于Linux内核管理和监控的开源工具。它提供文本用户界面,支持加载、卸载和查看内核模块信息,实时监控内核活动。kmon整合了多个Linux工具的功能,让用户可在单个终端窗口完成内核相关任务。该工具支持模块搜索、排序和黑名单等功能,操作界面简洁,快捷键丰富,适合Linux系统管理员使用。


Linux 内核管理器和活动监视器 🐧💻


内核是操作系统的一部分,负责协调硬件和软件组件之间的交互。在大多数系统中,它在启动时由引导加载程序加载,并处理I/O请求以及键盘、显示器、网络适配器和扬声器等外围设备。通常,内核负责内存管理进程管理设备管理系统调用安全

应用程序使用系统调用机制向操作系统请求服务,大多数情况下,这个请求通过操作系统提供的库传递给内核,以调用相关的内核函数。当内核执行这些底层任务时,它驻留在内存的一个单独部分,称为受保护的内核空间,应用程序和系统的其他部分无法访问。相比之下,浏览器、文本编辑器、窗口管理器或音视频播放器等应用程序使用内存的另一个单独区域,即用户空间。这种分离防止用户数据和内核数据相互干扰并导致不稳定和速度变慢,同时也防止运行不正常的应用程序使整个操作系统崩溃。

由于管理系统调用和资源的方式不同,存在着不同的内核设计。例如,宏内核为了速度将所有操作系统指令运行在同一地址空间,而微内核为了模块化在不同的空间运行用户和内核服务。除此之外,还有混合内核纳内核外内核。混合内核架构基于结合微内核和宏内核的特点。

Linux内核是开源的、宏内核的、类Unix操作系统内核,用于Linux发行版、各种嵌入式系统(如路由器)以及所有基于Android的系统。Linus Torvalds于1991年构思并创建了Linux内核,至今仍有成千上万的开发者在开发它。它是自由开源软件的突出例子,也用于其他自由软件项目,尤其是GNU操作系统

尽管基于Linux的操作系统主导了大部分计算领域,但它仍然存在一些在Linux早期就有争议的设计缺陷。例如,与其他类型的内核相比,它具有最大的占用空间最高的复杂性。但这是宏内核固有的设计特征。这些设计问题促使开发者为Linux内核添加了其他内核没有的新功能和机制。

与标准宏内核不同,Linux内核也是模块化的,接受可加载内核模块(LKM),通常用于添加新硬件支持(作为设备驱动程序)和/或文件系统,或添加系统调用。由于LKM可以在运行时加载和卸载到系统中,它们具有无需重启和重新编译就能扩展内核的优势。因此,模块提供的内核功能在不使用时不会占用内存,相关模块可以卸载以释放内存和其他资源。

可加载内核模块位于Linux的/lib/modules目录下,扩展名为.ko(内核对象)。可以使用lsmod命令列出已加载的内核模块,使用modprobeinsmod/rmmod加载或卸载内核模块。insmod/rmmod用于独立于modprobe的模块,无需安装到/lib/modules/$(uname -r)

以下是一个简单的Linux内核模块示例,在加载和卸载时打印消息。使用Makefile构建和安装模块的步骤如下。

make                         # 构建
sudo make install            # 安装
sudo modprobe lkm_example    # 加载
sudo modprobe -r lkm_example # 卸载

下面使用dmesg命令检索内核的消息缓冲区。

[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.

kmon提供了一个基于文本的用户界面,用于管理Linux内核模块和监控内核活动。管理指的是加载、卸载、黑名单和显示模块信息。可以通过kmon的实时活动监视器跟踪内核模块的这些更新、硬件日志和其他内核消息。由于Linux中这些任务需要使用不同的工具,如dmesgkmod,kmon旨在将它们集中在一个终端窗口中,尽可能简化使用,同时保持功能性。 kmon 使用 Rust 编写,并使用 Ratatuitermion 库实现其基于文本的用户界面。

目录

安装

打包状态

Cargo

如果已安装 Rust,可以使用 Cargo 从 crates.io 安装 kmon

cargo install kmon

最低支持的 Rust 版本 (MSRV) 为 1.70.0

Arch Linux

可以从 Arch Linux 官方仓库 安装 kmon

pacman -S kmon

AUR 上也有开发版本的软件包。使用你喜欢的 AUR 助手 进行安装。例如,

paru -S kmon-git

Nixpkgs

可以使用 Nix 包管理器nixpkgs-unstable 频道安装 kmon

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。在启用 community 仓库 后,可以通过 apk 安装。

apk add kmon

Docker

Docker Hub 构建状态

docker run -it --cap-add syslog orhunp/kmon:标签名

构建

docker build -t kmon .

运行

docker run -it --cap-add syslog kmon

手动安装

  1. releases 部分下载最新的二进制文件,并选择 glibcmusl-libc 二进制文件。
  2. 要下载使用 glibc 编译的软件包,请运行:
wget https://github.com/orhun/kmon/releases/download/v[版本]/kmon-[版本]-x86_64-unknown-linux-gnu.tar.gz
  1. 要下载使用 musl-libc 编译的软件包,请运行:
wget https://github.com/orhun/kmon/releases/download/v[版本]/kmon-[版本]-x86_64-unknown-linux-musl.tar.gz
  1. 解压文件。
tar -xvzf kmon-*.tar.gz
  1. 进入新文件夹。
cd kmon-[版本]
  1. 运行二进制文件。
./kmon
  1. 将二进制文件移动到 /usr/local/bin/,以便从终端使用 kmon 命令运行它。

  2. 手册页和 shell 补全在构建时生成于 target 目录中。

注意

应安装 libxcb 以使用 X11 的复制/粘贴命令。

例如:对于 Debian/Ubuntu* 安装 libxcb1-dev 包,对于 Fedora/openSUSE/Void Linux 安装 libxcb-devel 包。

使用方法

kmon [选项] [命令]

选项

-a, --accent-color <颜色>  设置强调色,使用十六进制值或颜色名称 [默认: 白色]
-c, --color <颜色>         设置主色,使用十六进制值或颜色名称 [默认: 深灰色]
-t, --tickrate <毫秒>      设置终端刷新率 [默认: 250]
-r, --reverse              反转内核模块列表
-u, --unicode              使用Unicode符号显示区块标题
-h, --help                 打印帮助信息
-V, --version              打印版本信息

命令

sort  排序内核模块

排序

kmon sort [选项]

选项:

-s, --size       按大小排序模块
-n, --name       按名称排序模块
-d, --dependent  按依赖模块数量排序模块
-h, --help       打印帮助信息

快捷键

[?], 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]跳转到依赖模块
[\], tab, backtab显示下一个内核信息
[/], s, enter搜索内核模块
[+], i, insert加载内核模块
[-], u, backspace卸载内核模块
[x], b, delete将内核模块加入黑名单
ctrl-r, alt-r重新加载内核模块
m, o显示选项菜单
y/n执行/取消命令
c/v复制/粘贴
r, F5刷新
q, ctrl-c/d, ESC退出

功能

帮助

运行终端UI时按 '?' 键查看快捷键。

帮助

导航和滚动

使用 方向键 在区块间导航和滚动。

导航和滚动

滚动内核活动

某些内核消息可能太长而无法完全显示在内核活动区块中,因为它们没有自动换行。在这种情况下,可以使用 alt-h 和 alt-l 键水平滚动内核活动。垂直滚动机制与其他区块相同。

滚动内核活动

平滑滚动

使用 alt-j 和 alt-k 键可以慢速滚动内核活动和模块信息区块。

平滑滚动

选项菜单

mo 键可用作内核管理操作的快捷键。按下时,将提供一个选项菜单用于管理当前选中的内核模块。

选项菜单

区块大小

使用 alt-e 和 alt-s 键可以展开/收缩选中的区块。

区块大小

区块位置

使用 ctrl-x 键可以更改区块的位置。

区块位置

内核信息

使用 \, tab, backtab 键之一切换内核发行版、版本和平台信息。

内核信息

模块信息

选中时显示内核模块的状态。

模块信息

显示依赖模块

使用 d, alt-d 键之一显示选中模块的所有依赖模块。

显示依赖模块

跳转到依赖模块

要从父模块跳转到依赖内核模块,可以使用 数字键 (1-9) 指定 Used By 列中模块的索引。

依赖信息

搜索模块

使用方向键或 /, s, enter 键之一切换到搜索区域,并输入模块名称的搜索查询。

搜索模块

加载模块

要向Linux内核添加模块,使用 +, i, insert 键之一切换到加载模式,并提供要加载的模块名称。然后使用 y/n 确认/取消执行加载命令。

加载模块

用于加载模块的命令:

modprobe <模块名称> || insmod <模块名称>.ko

卸载模块

使用 -, u, backspace 键之一从Linux内核中移除选中的模块。

卸载模块

用于移除模块的命令:

modprobe -r <模块名称> || rmmod <模块名称>

将模块列入黑名单

列入黑名单是一种阻止内核模块加载的机制。要将所选模块列入黑名单,请使用 x、b、delete 键之一并确认执行。

将模块列入黑名单

用于将模块列入黑名单的命令:

if ! grep -q <模块名称> /etc/modprobe.d/blacklist.conf; then
  echo 'blacklist <模块名称>' >> /etc/modprobe.d/blacklist.conf
  echo 'install <模块名称> /bin/false' >> /etc/modprobe.d/blacklist.conf
fi

重新加载模块

使用 ctrl-ralt-r 键重新加载所选模块。

重新加载模块

用于重新加载模块的命令:

modprobe -r <模块名称> || rmmod <模块名称> && modprobe <模块名称> || insmod <模块名称>.ko

清除内核环形缓冲区

可以使用 ctrl-l/u、alt-c 键之一清除内核环形缓冲区。

清除环形缓冲区

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 选项设置默认文本颜色。

支持的颜色

支持的终端颜色有 黑色、红色、绿色、黄色、蓝色、洋红色、青色、灰色、深灰色、浅红色、浅绿色、浅黄色、浅蓝色、浅洋红色、浅青色、白色

kmon --color red

支持的颜色

使用自定义颜色

提供要使用的颜色的十六进制值。

kmon --color 19683a

使用自定义颜色

更改强调色

在某些具有透明度的主题上,默认文本颜色可能会导致可读性问题。可以使用 -a, --accent-color 选项,类似于 -c, --color 选项,来解决此问题。

kmon --color 6f849c --accent-color e35760

更改强调色

Unicode 符号

使用 -u, --unicode 标志显示块标题的 Unicode 符号。

kmon --unicode

Unicode 符号

设置终端刷新率

-t, --tickrate 选项可用于以毫秒为单位设置终端 UI 的刷新间隔。

设置终端刷新率

路线图

kmon 的目标是成为一个标准的 Linux 内核管理工具,同时支持大多数 Linux 发行版。

可访问性

为实现此目标,kmon 应该可以从不同的包管理器(如 Snap*RPM)访问。

依赖项

系统需要有如 dmesgkmod 等基本工具,以便 kmon 能按预期工作。因此,下一步将是仅使用系统资源来实现这些功能。

功能

kmon 应该能够执行有关 Linux 内核的管理操作,以最大限度地减少对命令行和其他工具的依赖。

测试

应在不同的架构上测试和报告 kmon,以进一步开发和支持。

资源

关于项目

文章

媒体报道

图库

Fedora 31Debian 10Manjaro 19
kmon在Fedora上kmon在Debian上kmon在Manjaro上
Ubuntu 18.04openSUSEVoid Linux
kmon在Ubuntu上kmon在openSUSE上kmon在Void Linux上

社交媒体

资助

GitHub

通过在GitHub赞助上支持我来支持我项目的开发。

Patreon

Patreon按钮

Open Collective

Open Collective支持者 Open Collective赞助商

通过成为支持者赞助商来支持开源开发工作。

Open Collective按钮

许可证

GNU通用公共许可证(3.0

版权

版权所有 © 2020-2024,Orhun Parmaksız

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号