内核是操作系统的一部分,负责协调硬件和软件组件之间的交互。在大多数系统中,它在启动时由引导加载程序加载,并处理I/O请求以及键盘、显示器、网络适配器和扬声器等外围设备。通常,内核负责内存管理、进程管理、设备管理、系统调用和安全。
应用程序使用系统调用机制向操作系统请求服务,大多数情况下,这个请求通过操作系统提供的库传递给内核,以调用相关的内核函数。当内核执行这些底层任务时,它驻留在内存的一个单独部分,称为受保护的内核空间,应用程序和系统的其他部分无法访问。相比之下,浏览器、文本编辑器、窗口管理器或音视频播放器等应用程序使用内存的另一个单独区域,即用户空间。这种分离防止用户数据和内核数据相互干扰并导致不稳定和速度变慢,同时也防止运行不正常的应用程序使整个操作系统崩溃。
由于管理系统调用和资源的方式不同,存在着不同的内核设计。例如,宏内核为了速度将所有操作系统指令运行在同一地址空间,而微内核为了模块化在不同的空间运行用户和内核服务。除此之外,还有混合内核、纳内核和外内核。混合内核架构基于结合微内核和宏内核的特点。
Linux内核是开源的、宏内核的、类Unix操作系统内核,用于Linux发行版、各种嵌入式系统(如路由器)以及所有基于Android的系统。Linus Torvalds于1991年构思并创建了Linux内核,至今仍有成千上万的开发者在开发它。它是自由开源软件的突出例子,也用于其他自由软件项目 ,尤其是GNU操作系统。
尽管基于Linux的操作系统主导了大部分计算领域,但它仍然存在一些在Linux早期就有争议的设计缺陷。例如,与其他类型的内核相比,它具有最大的占用空间和最高的复杂性。但这是宏内核固有的设计特征。这些设计问题促使开发者为Linux内核添加了其他内核没有的新功能和机制。
与标准宏内核不同,Linux内核也是模块化的,接受可加载内核模块(LKM),通常用于添加新硬件支持(作为设备驱动程序)和/或文件系统,或添加系统调用。由于LKM可以在运行时加载和卸载到系统中,它们具有无需重启和重新编译就能扩展内核的优势。因此,模块提供的内核功能在不使用时不会占用内存,相关模块可以卸载以释放内存和其他资源。
可加载内核模块位于Linux的/lib/modules
目录下,扩展名为.ko
(内核对象)。可以使用lsmod命令列出已加载的内核模块,使用modprobe或insmod/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中这些任务需要使用不同的工具,如dmesg和kmod,kmon旨在将它们集中在一个终端窗口中,尽可能简化使用,同时保持功能性。 kmon 使用 Rust 编写,并使用 Ratatui 和 termion 库实现其基于文本的用户界面。
如果已安装 Rust,可以使用 Cargo 从 crates.io 安装 kmon。
cargo install kmon
最低支持的 Rust 版本 (MSRV) 为 1.70.0
。
可以从 Arch Linux 官方仓库 安装 kmon。
pacman -S kmon
AUR 上也有开发版本的软件包。使用你喜欢的 AUR 助手 进行安装。例如,
paru -S kmon-git
可以使用 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
kmon 可用于 Alpine Edge。在启用 community 仓库 后,可以通过 apk 安装。
apk add kmon
docker run -it --cap-add syslog orhunp/kmon:标签名
docker build -t kmon .
docker run -it --cap-add syslog kmon
wget https://github.com/orhun/kmon/releases/download/v[版本]/kmon-[版本]-x86_64-unknown-linux-gnu.tar.gz
wget https://github.com/orhun/kmon/releases/download/v[版本]/kmon-[版本]-x86_64-unknown-linux-musl.tar.gz
tar -xvzf kmon-*.tar.gz
cd kmon-[版本]
./kmon
将二进制文件移动到 /usr/local/bin/
,以便从终端使用 kmon
命令运行它。
手册页和 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
键可以慢速滚动内核活动和模块信息区块。
m
和 o
键可用作内核管理操作的快捷键。按下时,将提供一个选项菜单用于管理当前选中的内核模块。
使用 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-r
或 alt-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
使用 -u, --unicode
标志显示块标题的 Unicode 符号。
kmon --unicode
-t, --tickrate
选项可用于以毫秒为单位设置终端 UI 的刷新间隔。
kmon 的目标是成为一个标准的 Linux 内核管理工具,同时支持大多数 Linux 发行版。
为实现此目标,kmon 应该可以从不同的包管理器(如 Snap* 和 RPM)访问。
系统需要有如 dmesg 和 kmod 等基本工具,以便 kmon 能按预期工作。因此,下一步将是仅使用系统资源来实现这些功能。
kmon 应该能够执行有关 Linux 内核的管理操作,以最大限度地减少对命令行和其他工具的依赖。
应在不同的架构上测试和报告 kmon,以进一步开发和支持。
Fedora 31 | Debian 10 | Manjaro 19 |
---|---|---|
![]() | ![]() | ![]() |
Ubuntu 18.04 | openSUSE | Void Linux |
---|---|---|
![]() | ![]() | ![]() |
通过在GitHub赞助上支持我来支持我项目的开发。
GNU通用公共许可证(3.0)
版权所有 © 2020-2024,Orhun Parmaksız
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号