一、命令简介
rmmod(remove module)命令用于从当前正在运行的 Linux 内核中卸载指定的可加载内核模块。该命令是 Linux 内核模块管理工具集的一部分,通常用于动态移除不再需要或用于调试的模块。Linux 内核采用模块化设计,允许在运行时加载和卸载功能模块,而无需重新编译或重启内核。
二、语法格式
基本语法:
bash
运行
rmmod [选项] 模块名…
或使用长格式:
bash
运行
rmmod [选项] 模块名称 [模块名称…]
说明:
命令后直接跟一个或多个要卸载的模块名称。 模块名称是必需的参数,且不应包含模块文件的路径或扩展名(如 .ko)。 可以同时指定多个模块名,按顺序尝试卸载。
三、常用选项及说明
表格
| -v | –verbose | 详细模式。显示命令执行过程中的详细信息,有助于调试。 |
| -f | –force | 强制移除模块。此选项非常危险,它会尝试强制卸载模块,即使内核认为该模块正在被使用或处于忙碌状态。可能导致系统不稳定或崩溃,仅应在明确知道后果且无其他选择时使用。 |
| -w | –wait | 等待模式。如果模块因被占用而无法立即卸载,此选项将使 rmmod 等待,直到模块变为可卸载状态(例如,引用计数降为零)后再执行卸载。 |
| -s | –syslog | 将错误信息记录到系统日志(syslog)中,而非仅输出到标准错误(stderr)。这在脚本或后台任务中很有用。 |
| -h | –help | 显示帮助信息并退出。 |
| -V | –version | 显示命令版本信息并退出。 |
四、示例用法
示例 1:卸载单个模块
卸载名为 raid1 的软件 RAID 模块。
bash
运行
sudo rmmod raid1
操作前验证:
bash
运行
lsmod | grep raid1
操作后验证:再次执行上述 lsmod 命令,应无输出,表示模块已卸载。
示例 2:详细模式卸载
卸载模块 usb_storage 并显示详细信息。
bash
运行
sudo rmmod -v usb_storage
输出可能类似于:
plaintext
rmmod: ERROR: Module usb_storage is in use by: uas, usb_storage
这表明模块正在被其他模块使用,无法直接卸载。
示例 3:等待模块变为可用后卸载
如果模块 my_module 暂时被占用,等待直到可以安全卸载。
bash
运行
sudo rmmod -w my_module
命令将阻塞,直到模块的引用计数为零,然后执行卸载。
示例 4:强制卸载模块(危险操作)
警告:仅在极端调试或恢复场景下使用,可能引发内核恐慌(Kernel Panic)。
bash
运行
sudo rmmod -f problematic_module
示例 5:卸载多个模块
尝试依次卸载 module_a 和 module_b。
bash
运行
sudo rmmod module_a module_b
示例 6:将错误信息记录到系统日志
卸载模块并确保任何错误信息被记录到系统日志(如 /var/log/syslog 或 journalctl)。
bash
运行
sudo rmmod -s some_module
五、注意事项
- lsmod:列出当前已加载的所有模块。
- insmod:手动加载一个内核模块到运行中的内核。
- modprobe:智能加载或卸载模块,自动处理依赖。
- modinfo:显示内核模块的详细信息。


