Linux rmmod 命令及实际示例

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将探索 Linux 的 rmmod 命令,该命令用于从正在运行的系统中移除内核模块。内核模块是可以根据需要加载和卸载到内核中的代码片段,提供了一种扩展内核功能的方式。本实验将涵盖理解 rmmod 命令的用途、使用 rmmod 移除内核模块,以及探索其实际使用场景。我们将首先使用 lsmod 命令列出当前加载的内核模块,然后演示如何使用 rmmod 移除特定模块。

Linux 命令速查表


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") subgraph Lab Skills linux/sudo -.-> lab-422894{{"Linux rmmod 命令及实际示例"}} end

理解 rmmod 命令的用途

在这一步中,我们将探讨 Linux 操作系统中 rmmod 命令的用途和用法。rmmod 命令用于从正在运行的系统中移除内核模块。

内核模块是可以根据需要加载和卸载到内核中的代码片段,而无需重启整个系统。它们提供了一种扩展内核功能的方式,允许你添加对新硬件、文件系统、网络协议等的支持。

rmmod 命令用于从系统中移除内核模块。当你不再需要某个特定模块提供的功能,或者需要用新版本替换某个模块时,这个命令非常有用。

让我们首先使用 lsmod 命令列出当前加载的内核模块:

sudo lsmod

示例输出:

Module                  Size  Used by
vboxsf                 106496  1
vboxguest              454656  0
snd_hda_codec_realtek   114688  1
snd_hda_codec_generic    86016  1 snd_hda_codec_realtek
snd_hda_intel           53248  0
snd_hda_codec          135168  3 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel
snd_hda_core            90112  5 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec
snd_hwdep               16384  1 snd_hda_codec
snd_pcm                106496  4 snd_hda_intel,snd_hda_codec
snd_timer               32768  1 snd_pcm
snd                     98304  21 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer
soundcore               16384  1 snd

此输出显示了当前加载的内核模块。要移除一个模块,你可以使用 rmmod 命令后跟模块名称。例如,要移除 vboxsf 模块,你可以运行:

sudo rmmod vboxsf

运行此命令后,你可以通过再次运行 lsmod 来验证模块是否已被移除:

sudo lsmod

示例输出:

Module                  Size  Used by
vboxguest              454656  0
snd_hda_codec_realtek   114688  1
snd_hda_codec_generic    86016  1 snd_hda_codec_realtek
snd_hda_intel           53248  0
snd_hda_codec          135168  3 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel
snd_hda_core            90112  5 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec
snd_hwdep               16384  1 snd_hda_codec
snd_pcm                106496  4 snd_hda_intel,snd_hda_codec
snd_timer               32768  1 snd_pcm
snd                     98304  21 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer
soundcore               16384  1 snd

你可以看到 vboxsf 模块不再列出,表明它已成功被移除。

使用 rmmod 移除内核模块

在这一步中,我们将学习如何使用 rmmod 命令移除内核模块。

首先,让我们使用 lsmod 命令列出当前加载的内核模块:

sudo lsmod

示例输出:

Module                  Size  Used by
vboxguest              454656  0
snd_hda_codec_realtek   114688  1
snd_hda_codec_generic    86016  1 snd_hda_codec_realtek
snd_hda_intel           53248  0
snd_hda_codec          135168  3 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel
snd_hda_core            90112  5 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec
snd_hwdep               16384  1 snd_hda_codec
snd_pcm                106496  4 snd_hda_intel,snd_hda_codec
snd_timer               32768  1 snd_pcm
snd                     98304  21 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer
soundcore               16384  1 snd

假设我们想要移除 vboxguest 模块。为此,我们可以使用 rmmod 命令:

sudo rmmod vboxguest

运行此命令后,让我们通过再次检查 lsmod 的输出来验证模块是否已被移除:

sudo lsmod

示例输出:

Module                  Size  Used by
snd_hda_codec_realtek   114688  1
snd_hda_codec_generic    86016  1 snd_hda_codec_realtek
snd_hda_intel           53248  0
snd_hda_codec          135168  3 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel
snd_hda_core            90112  5 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec
snd_hwdep               16384  1 snd_hda_codec
snd_pcm                106496  4 snd_hda_intel,snd_hda_codec
snd_timer               32768  1 snd_pcm
snd                     98304  21 snd_hda_codec_generic,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer
soundcore               16384  1 snd

你可以看到 vboxguest 模块不再列出,表明它已成功被移除。

探索使用 rmmod 的实际场景

在这最后一步中,我们将探讨一些 rmmod 命令可能派上用场的实际场景。

一个常见的场景是当你需要更新内核模块时。例如,假设你安装了一个新的显卡驱动,并希望替换旧的驱动。你可以使用 rmmod 命令移除旧的驱动模块,然后安装新的驱动。

首先,让我们列出当前加载的内核模块:

sudo lsmod

示例输出:

Module                  Size  Used by
nvidia_drm             106496  0
nvidia_modeset        1028096  0
nvidia              28540928  1 nvidia_modeset
drm_kms_helper        184320  1 nvidia_drm
drm                   516096  4 nvidia_drm,drm_kms_helper

在这个例子中,我们可以看到 nvidia 模块当前已加载。要移除它,我们可以使用 rmmod 命令:

sudo rmmod nvidia

运行此命令后,我们可以验证模块是否已被移除:

sudo lsmod

示例输出:

Module                  Size  Used by
nvidia_drm             106496  0
nvidia_modeset        1028096  0
drm_kms_helper        184320  1 nvidia_drm
drm                   516096  4 nvidia_drm,drm_kms_helper

现在,你可以继续安装新的显卡驱动模块。

另一个使用 rmmod 的实际场景是当你需要排查系统问题时。如果你怀疑某个特定的内核模块导致了问题,你可以尝试移除它,看看问题是否得到解决。

例如,如果你遇到网络连接问题,可以尝试移除网络驱动模块,然后检查问题是否解决。

sudo rmmod e1000e

移除模块后,你可以测试网络连接,看看问题是否已解决。

请记住,在移除内核模块时,你应始终确保该模块未被使用,并且移除它不会导致任何关键系统组件停止运行。如果你不确定,最好查阅文档或向有经验的系统管理员寻求帮助。

总结

在本实验中,我们探讨了 Linux 操作系统中 rmmod 命令的用途和用法。我们了解到,内核模块是可以根据需要加载和卸载到内核中的代码片段,而 rmmod 命令用于从正在运行的系统中移除内核模块。我们还练习了使用 lsmod 命令列出当前加载的内核模块,然后使用 rmmod 命令移除 vboxsf 模块。这使我们能够通过根据需要添加或移除模块来管理内核的功能。

Linux 命令速查表