惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
U
Unit 42
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
IT之家
IT之家
MyScale Blog
MyScale Blog
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
I
InfoQ
博客园 - 司徒正美

博客园 - 人艰不拆_zmc

15000mAh 到底是什么概念?一篇看懂电池容量 go2_ros2_sdk 到底是干什么的?从 Go2、官方 SDK、ROS2 一路讲到 SLAM 和 Nav2 买了宇树 Go2 以后怎么二次开发?写给第一次做机器狗项目的人 买了一块 NVIDIA Jetson,怎么在上面安装 ROS2?从 JetPack 到 ROS2 的完整入门指南 NVIDIA Jetson 到底是什么?写给第一次接触机器人和边缘 AI 的人 ROS / ROS2 到底是什么?写给第一次接触机器人开发的人 大模型到底能同时多少人用?一篇看懂并发、排队与容量估算 大模型为什么有快有慢?一篇看懂响应速度背后的关键因素 技术小白也能看懂:大模型里的量化、蒸馏到底是什么意思? Codex 使用技巧:从“会聊天”到“真正能干活” 我终于搞懂了:Codex 对话中插件和 Skill 到底怎么用 我终于搞懂了 Agent Spec:它其实就是 Agent 的“标准设计图” 我终于搞懂了 Tool:原来不只是 Function Calling 里的函数 Skill 里的 Python 脚本,到底是不是 Tool? 我终于搞懂了 Codex 的 Plugin 和 Skill:顺便把 App、MCP 一次理清 我终于搞懂了 Codex 的“应用”:App 到底是什么,怎么添加和维护? 我终于搞懂了 Tool、Function Calling 和 MCP:大模型到底怎么知道该调哪个接口? 我终于搞懂了 MCP:从 HTTP API 到 ERP MCP Server 的完整入门 我终于搞懂了 Codex 的“记忆”是怎么回事 Codex 用久了越来越慢?我的上下文管理小技巧 我终于搞懂了 Codex 里的 Thread、Turn 和 Session 从 Qwen3.8-27B 到 FP8、NVFP4、MoE:一次搞懂几个常见大模型概念 FPS 是什么意思?简单理解 60 FPS、25 FPS 和视频帧率 DeepSeek Harness 明明像 AI Coding 工具,为什么又能用来构建各种 Agent? 使用 Codex 开发项目,怎么才能节约 Token? 模型里的 32K、128K、256K 是什么意思?简单聊聊上下文限制 Codex 一次对话到底会给模型发送什么?以 Spring Boot 项目为例讲清 Context、代码读取与 Token 消耗 AI Agent 中的 Rule 是什么?以 Codex 为例,小白也能看懂 我终于搞懂了 Harness:它不是论文,也不是标准,更不是 Codex 独有 小白也能看懂:RTSP 到底是什么?
快速了解Linux中的lsmod及其相关命令
人艰不拆_zmc · 2025-11-25 · via 博客园 - 人艰不拆_zmc

1、概述

在Linux世界中,内核模块就像是系统的“即插即用”组件,它们允许内核在运行时动态扩展功能,而无需重新启动计算机。无论是硬盘驱动、网络协议还是显卡驱动,都常常以模块形式存在。那么,如何查看当前有哪些模块正在运行呢?答案就是使用 lsmod​ 命令。

2、什么是lsmod?

简单来说,lsmod是一个用于快速列出当前已加载到Linux内核中的所有模块的简单工具。它就像是系统的“模块任务管理器”,能让你一目了然地看到所有活跃的内核模块。

它的语法非常直接,直接在终端输入命令即可,不需要任何参数:

3、解读lsmod的输出

执行命令后,你会看到一个类似这样的表格:

Module                  Size  Used by
veth                   13458  0 
xt_nat                 12681  25 
xt_conntrack           12760  3 
ipt_MASQUERADE         12678  16 
nf_nat_masquerade_ipv4    13463  1 ipt_MASQUERADE
nf_conntrack_netlink    36396  0 
nfnetlink              14519  2 nf_conntrack_netlink
iptable_nat            12875  4 
nf_conntrack_ipv4      15053  4 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26583  3 nf_nat_ipv4,xt_nat,nf_nat_masquerade_ipv4
nf_conntrack          139264  6 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
xt_addrtype            12676  2 
iptable_filter         12810  1 
.......

我们来分解一下各列的含义:

  • Module(模块名):第一列显示已加载模块的名称,例如 nf_conntrack;
  • Size(大小):第二列显示该模块所占用的内存大小,单位是字节(Bytes);
  • Used by(被…使用):这是最关键的一列,它说明了模块的依赖和使用情况。
    • 如果显示为 0,表示该模块当前没有被任何其他模块使用;
    • 如果显示为数字,表示该模块被多少个其他模块依赖;
    • 如果显示为模块名称列表,则具体指出了是哪些模块在依赖它。例如,上表中的 nf_conntrack 模块被 nf_nat,nf_nat_ipv4等6个模块使用。

4、实用技巧示例

lsmod本身很简单,但结合其他命令能发挥更大作用:

4.1 查找特定模块你可以使用grep命令来快速过滤结果,检查某个模块(比如nf_conntrack连接追踪)是否已加载

lsmod | grep -i nf_conntrack

4.2 获取模块的详细信息

lsmod只提供基本信息。如果你想了解某个模块的详细描述、版本、作者等,需要使用modinfo命令。

# modinfo nf_conntrack
filename:       /lib/modules/3.10.0-1160.el7.x86_64/kernel/net/netfilter/nf_conntrack.ko.xz
license:        GPL
retpoline:      Y
rhelversion:    7.9
srcversion:     8B9F3AAA206BFFB785D7D0C
depends:        libcrc32c
intree:         Y
vermagic:       3.10.0-1160.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        E1:FD:B0:E2:A7:E8:61:A1:D1:CA:80:A2:3D:CF:0D:BA:3A:A4:AD:F5
sig_hashalgo:   sha256
parm:           tstamp:Enable connection tracking flow timestamping. (bool)
parm:           acct:Enable connection tracking flow accounting. (bool)
parm:           nf_conntrack_helper:Enable automatic conntrack helper assignment (default 1) (bool)
parm:           expect_hashsize:uint

5、相关命令简介

lsmod是内核模块管理工具链中的一员。了解它与其它命令的关系有助于更好地进行系统管理。

命令功能与 lsmod的关系
modprobe 智能加载/卸载模块,能自动处理依赖关系。 使用 sudo modprobe <模块名>加载新模块后,可用 lsmod验证是否成功。
insmod 低级模块加载器,需要指定模块文件的完整路径,不处理依赖。 更推荐使用 modprobe
rmmod 卸载模块,但需确保模块未被使用。 卸载前用 lsmod检查 "Used by" 列;卸载后用 lsmod确认。

5.1 临时性加载

modprobe和 insmod命令的作用是动态地将模块的代码和数据加载到当前正在运行的 Linux 内核的内存空间中。这个过程只影响本次开机后的系统状态。当服务器关闭或重启时,内存中的所有数据(包括已加载的模块)都会被清除。下次启动时,内核会以一个“干净”的状态开始,只会加载其内置的驱动和明确配置为启动时加载的模块。可以将内核内存想象成一块白板,modprobe和 insmod是在上面写字,而重启就像是把白板擦干净。

5.2 持久化加载

如果某个内核模块需要每次开机都自动加载,您必须进行持久化配置。具体方法因 Linux 发行版而异,下面以 CentOS / RHEL / Fedora 系统为例:

 在 /etc/modules-load.d/目录下创建一个新的 .conf配置文件。

# 创建一个新的配置文件,比如叫 mymodules.conf
sudo nano /etc/modules-load.d/mymodules.conf

# 在文件中添加模块名
nf_conntrack

# 保存并退出

如果模块加载时需要传递参数(例如 nf_conntrack模块可能需要设置 nf_conntrack_max),则需要将配置写在 /etc/modprobe.d/目录下的文件中。

# 编辑或创建一个modprobe配置文 件
sudo nano /etc/modprobe.d/my-module-options.conf

# 使用 options 关键字指定参数
options nf_conntrack nf_conntrack_max=1000000

注意:修改永久加载配置后,通常不需要立即重启服务器,新的配置会在下次系统启动时自动生效。如果您希望配置立即生效,也可以手动加载模块而无需重启。

6、总结

总的来说,lsmod是一个简单而强大的基础命令,是系统管理员和开发者排查硬件驱动问题、了解系统内核组件运行状态的首选工具。无论你是要确认驱动是否正常加载,还是检查模块间的依赖关系,lsmod通常都是高效的第一步。