Linux rmmod命令介绍
rmmod是remove module的缩写,它的作用是从Linux内核中卸载一个或多个模块。模块是一种可以动态加载和卸载的内核扩展,它可以提供一些特定的功能或驱动一些特定的硬件。模块的优点是可以节省内核空间,提高系统灵活性,方便用户根据需要添加或删除功能。模块的缺点是可能存在兼容性或稳定性的问题,需要用户自己管理模块的依赖关系。
rmmod命令通常只有具有管理员权限的用户才能使用,因为它会直接影响内核的运行。使用rmmod命令时,需要指定要卸载的模块的名称,可以一次卸载多个模块,但是必须保证没有其他模块依赖于要卸载的模块,否则会报错。如果要卸载一个模块及其所有依赖的模块,可以使用modprobe -r命令,它会自动处理模块的依赖关系。
Linux rmmod命令适用的Linux版本
rmmod命令在大多数Linux发行版中都是可用的,它是kmod软件包的一部分,kmod是一个实现了多个用于管理Linux内核模块的程序的二进制文件。不同的Linux发行版可能会有不同的模块管理工具,例如,Debian和Ubuntu使用dkms,Fedora和Red Hat使用akmod,它们都是用于自动编译和安装内核模块的工具。如果要使用rmmod命令,需要先确保系统已经安装了kmod软件包,可以使用以下命令来检查:
[linux@bashcommandnotfound.cn ~]$ dpkg -l | grep kmod # Debian/Ubuntu
[linux@bashcommandnotfound.cn ~]$ rpm -qa | grep kmod # Fedora/Red Hat
[linux@bashcommandnotfound.cn ~]$ pacman -Qs kmod # Arch Linux
如果没有安装kmod软件包,可以使用以下命令来安装:
[linux@bashcommandnotfound.cn ~]$ sudo apt install kmod # Debian/Ubuntu
[linux@bashcommandnotfound.cn ~]$ sudo yum install kmod # Fedora/Red Hat
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S kmod # Arch Linux
Linux rmmod命令的基本语法
rmmod命令的基本语法如下:
rmmod [选项] 模块名...
其中,选项可以是以下几种:
-f, --force:强制卸载一个模块,即使它正在被使用或者不支持卸载,这个选项非常危险,可能会导致系统崩溃,只有在内核编译时设置了CONFIG_MODULE_FORCE_UNLOAD选项才有效。
-w, --wait:隔离一个模块,并等待直到它不再被使用,然后再卸载它,这个选项可以避免因为模块被占用而无法卸载的情况。
-s, --syslog:将错误信息发送到系统日志,而不是标准错误输出。
-v, --verbose:显示详细的信息,通常rmmod只在出错时才输出信息。
-V, --version:显示程序的版本信息,然后退出。
Linux rmmod命令的常用选项说明
rmmod命令的常用选项有以下几个:
选项 | 说明 |
---|---|
-f | 强制卸载模块 |
-w | 等待模块不再被使用后再卸载 |
-v | 显示详细信息 |
-V | 显示版本信息 |
Linux rmmod命令的实例
rmmod命令的实例有以下几个:
如何卸载一个模块
如果要卸载一个模块,只需要指定模块的名称即可,例如,如果要卸载bluetooth模块,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo rmmod bluetooth
如何卸载多个模块
如果要一次卸载多个模块,可以在命令后面依次指定模块的名称,用空格分隔,例如,如果要卸载bluetooth和usb_storage模块,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo rmmod bluetooth usb_storage
如何查看已加载的模块
如果要查看系统中已经加载的模块,可以使用lsmod命令,它会显示模块的名称,大小,引用计数和依赖的模块,例如:
[linux@bashcommandnotfound.cn ~]$ lsmod
Module Size Used by
usb_storage 77824 1 uas
uas 28672 0
bluetooth 647168 12 btrtl,btintel,btbcm,bnep,btusb,rfcomm
ecdh_generic 16384 1 bluetooth
rfkill 28672 4 bluetooth,cfg80211
fuse 139264 3
overlay 135168 0
nls_utf8 16384 1
isofs 49152 1
loop 40960 2
...
如何查看模块的信息
如果要查看一个模块的详细信息,可以使用modinfo命令,它会显示模块的文件名,版本,作者,描述,参数,依赖,别名,许可证等信息,例如:
[linux@bashcommandnotfound.cn ~]$ modinfo bluetooth
filename: /lib/modules/5.10.0-9-amd64/kernel/net/bluetooth/bluetooth.ko
alias: net-pf-31
version: 2.22
description: Bluetooth Core ver 2.22
author: Marcel Holtmann <marcel@holtmann.org>
license: GPL
srcversion: 7E4F0A9C6B9E9D8F8F0B7E3
depends: rfkill,ecdh_generic
intree: Y
name: bluetooth
vermagic: 5.10.0-9-amd64 SMP mod_unload modversions
sig_id: PKCS#7
signer: Debian Secure Boot CA
sig_key: 02:8C:2F:32:9E:92:58:1E:26:6B:13:5C:8E:0C:59:31:9C:56:C5:69
sig_hashalgo: sha256
signature: 1F:AB:BC:0D:02:36:FF:03:55:20:4C:41:28:6A:97:8F:0C:CA:34:
6E:87:4B:17:2E:2F:5C:55:BF:4A:5A:24:25:79:EB:23:26:28:FE:
...
Linux rmmod命令的高级技巧
rmmod命令有一些高级技巧,可以让你更方便地管理模块,例如:
如何查看模块的参数
如果要查看一个模块的参数,可以使用modinfo -p命令,它会显示模块的名称和参数的名称,类型,描述等信息,例如:
[linux@bashcommandnotfound.cn ~]$ modinfo -p bluetooth
bluetooth:Bluetooth Core ver 2.22
disable_ertm:Disable enhanced retransmission mode (bool)
disable_esco:Disable eSCO connection creation (bool)
enable_autosuspend:Enable USB autosuspend by default (bool)
idle_timeout:Set idle timeout (in seconds) of device (uint)
...
如何修改模块的参数
如果要修改一个模块的参数,可以使用modprobe命令,它会先卸载模块,然后重新加载模块,并传递参数给模块,例如,如果要修改bluetooth模块的disable_ertm参数为1,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo modprobe -r bluetooth
[linux@bashcommandnotfound.cn ~]$ sudo modprobe bluetooth disable_ertm=1
如何永久修改模块的参数
如果要永久修改一个模块的参数,可以在/etc/modprobe.d目录下创建一个以.conf结尾的文件,然后在文件中写入模块的名称和参数,例如,如果要永久修改bluetooth模块的disable_ertm参数为1,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo echo "options bluetooth disable_ertm=1" > /etc/modprobe.d/bluetooth.conf
Linux rmmod命令的注意事项
rmmod命令有一些注意事项,需要你在使用时注意,例如:
- 不要随意卸载模块,可能会导致系统不稳定或者丢失功能,只有在确定模块不再需要或者有问题时才卸载模块。
- 不要使用-f选项强制卸载模块,除非你知道你在做什么,这个选项可能会导致系统崩溃或者数据丢失,只有在内核支持并且模块无法正常卸载时才使用这个选项。
- 如果你在使用rmmod命令时遇到了bash: rmmod: command not found的错误,说明你的系统没有安装kmod软件包,你需要先安装kmod软件包,然后再使用rmmod命令。
评论区