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操作系统

Download history 8/week @ 2024-04-21 16/week @ 2024-04-28 6/week @ 2024-05-05 2/week @ 2024-05-12 21/week @ 2024-05-19 4/week @ 2024-05-26 8/week @ 2024-06-02 5/week @ 2024-06-09 4/week @ 2024-06-16 5/week @ 2024-06-23 5/week @ 2024-07-14 123/week @ 2024-07-28

每月 128 次下载

GPL-3.0 许可证

110KB
2.5K SLoC


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


内核 是操作系统中用于硬件和软件组件之间交互的部分。在大多数系统中,它在引导加载程序之后启动时加载,并处理 I/O 请求以及键盘、显示器、网络适配器和扬声器等外围设备。通常,内核负责 内存管理进程管理设备管理系统调用安全性。应用程序使用 系统调用 机制从操作系统请求服务,并且大多数情况下,此请求通过操作系统提供的库传递给内核以调用相关内核函数。当内核执行这些低级任务时,它驻留在称为 受保护的内核空间 的单独内存部分,该空间对应用程序和其他系统部分不可访问。相比之下,浏览器、文本编辑器、窗口管理器或音频/视频播放器等应用程序使用不同的单独内存区域,称为 用户空间。这种分离防止用户数据和内核数据相互干扰,导致不稳定和缓慢,以及防止故障应用程序崩溃整个操作系统。
由于管理系统调用和资源的方式不同,存在不同的内核设计。例如,虽然 单一内核 为了速度而在相同的地址空间中运行所有操作系统指令,但 微内核 为了模块化而在用户和内核服务之间使用不同的空间。除此之外,还有 混合内核纳米内核外核。混合内核架构基于结合微内核和单一内核的特点。

Linux内核是开源的、单一的和类Unix操作系统的内核,用于Linux发行版、各种嵌入式系统(如路由器)以及所有基于Android的系统。林纳斯·托瓦兹于1991年构想并创建了Linux内核,至今仍由成千上万的开发者共同开发。它是自由和开源软件的突出例子,并在其他自由软件项目中使用,特别是在著名的GNU操作系统中。尽管基于Linux的操作系统在计算领域占据主导地位,但它仍然保留了一些在Linux早期引起广泛讨论的设计缺陷。例如,与其他类型的内核相比,它具有最大的体积和最强的复杂度。但这却是单一内核固有的设计特征。这类设计问题导致开发者为Linux内核添加了其他内核所不具备的新功能和机制。

与标准单一内核不同,Linux内核也是模块化的,可以接受用于添加对新硬件(如设备驱动程序)和/或文件系统的支持,或用于添加系统调用可加载内核模块(LKM)。由于LKMs可以在系统运行时加载和卸载,因此它们可以扩展内核而不需要重新启动和重新编译。因此,模块提供的内核功能在不使用时不会驻留在内存中,并且可以卸载相关模块以释放内存和其他资源。
可加载内核模块位于/lib/modules,以.ko内核对象)扩展名在Linux中。虽然可以使用lsmod命令列出已加载的内核模块,但使用modprobeinsmod/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中执行这些任务需要使用不同的工具(如dmesgkmod),kmon旨在将它们聚合到一个终端窗口中,并尽可能简化使用,同时保持其功能。

kmon是用Rust编写的,并使用tui-rs & termion库为其基于文本的用户界面。

目录

安装

Packaging status

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 Hub Build Status

docker run -it --cap-add syslog orhunp/kmon:tagname

构建

docker build -t kmon .

运行

docker run -it --cap-add syslog kmon

手册

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

  2. 在构建时,在 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 退出

功能

帮助

在运行终端用户界面时按下 '?' 可查看键绑定。

Help

导航 & 滚动

箭头键用于在块之间导航和滚动。

Navigating & Scrolling

滚动内核活动

某些内核消息可能足够长,无法适应内核活动块,因为它们没有被包装。在这种情况下,可以使用alt-h & alt-l键水平滚动内核活动。垂直滚动机制与其他块相同。

Scrolling Kernel Activities

平滑滚动

alt-j & alt-k键可以用来缓慢滚动内核活动和模块信息块。

Smooth Scrolling

选项菜单

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

Options Menu

块大小

alt-e & alt-s键可以用来扩展/缩小选定的块。

Block Sizes

块位置

ctrl-x键可以用来改变块的位置。

Block Positions

内核信息

使用\, tab, backtab键中的一个来在内核版本、版本和平台信息之间切换。

Kernel Information

模块信息

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

Module Information

显示依赖模块

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

Displaying the dependent modules

跳转到依赖模块

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

Dependency Information

搜索模块

使用箭头键或使用/, s, enter中的一个来切换到搜索区域,并输入模块名称作为搜索查询。

Searching a module

加载模块

要将模块添加到Linux内核中,使用+, i, insert键中的一个来切换到加载模式,并输入要加载的模块名称。然后使用y/, n来确认/取消加载命令的执行。

Loading a module

用于加载模块的命令

modprobe <module_name> || insmod <module_name>.ko

卸载模块

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

Unloading a module

用于移除模块的命令

modprobe -r <module_name> || rmmod <module_name>

黑名单模块

黑名单是一种防止内核模块加载的机制。要黑名单选定的模块,使用x, b, delete键中的一个并确认执行。

Blacklisting a module

用于黑名单模块的命令

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-ralt-r键来重新加载选定的模块。

Reloading a module

用于重新加载模块的命令

modprobe -r <module_name> || rmmod <module_name> && modprobe <module_name> || insmod <module_name>.ko

清除环形缓冲区

可以使用 ctrl-l/u, alt-cctrl-c/ctrl-v 键来清除内核环形缓冲区。

Clearing the ring buffer

dmesg --clear

复制 & 粘贴

复制/粘贴操作设置为 c/v 键。

Copy & Paste

在输入模式下,使用 ctrl-c/ctrl-v 进行复制和粘贴。

排序/反转内核模块

可以使用 sort 子命令按名称、大小或依赖模块对内核模块进行排序。

kmon sort --name
kmon sort --size
kmon sort --dependent

Sorting the kernel modules

此外,使用 -r, --reverse 标志来反转内核模块列表。

kmon --reverse

Reversing the kernel modules

自定义颜色

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

Supported Colors

使用自定义颜色

为颜色提供十六进制值。

kmon --color 19683a

Using a custom color

更改突出显示颜色

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

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

Changing the accent color

Unicode符号

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

kmon --unicode

Unicode symbols

设置终端滴答率

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

Setting the terminal tick rate

路线图

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

可访问性

为了实现这个目标,kmon 应该可以通过不同的软件包管理器访问,例如 Snap*RPM

依赖

为了 kmon 正常工作,系统上需要安装 dmesgkmod 等基本工具。因此,下一步是使用系统资源来实现这些功能。

功能

关于 Linux 内核的管理操作应在 kmon 中适用,以最小化对命令行和其他工具的依赖。

测试

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

资源

关于本项目

文章

媒体

Fedora 31 Debian 10 Manjaro 19
kmon on fedora kmon on debian kmon on manjaro
Ubuntu 18.04 openSUSE Void Linux
kmon on ubuntu kmon on opensuse kmon on voidlinux

社交媒体

资助

GitHub

通过在GitHub Sponsors上支持我,来支持我的项目开发。

Patreon

Patreon Button

Open Collective

Open Collective backers Open Collective sponsors

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

Open Collective Button

许可

GNU通用公共许可证 (3.0)

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

依赖

~7.5MB
~125K SLoC