lsmod-查看内核模块信息
lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。
Linux操作系统的核心具有模块化的特性,应此在编译核心时,可以不用把全部的功能都放入核心,而是将这些功能编译成一个个单独的模块,待需要时再分别载入使用。
命令的输出如下:
1 2 3 4 5 6 7 | [root@lvs001 modprobe.d]# lsmod Module Size Used by iptable_nat 5923 0 nf_nat 22676 1 iptable_nat nf_conntrack_ipv4 9186 3 iptable_nat,nf_nat nf_conntrack 79537 3 iptable_nat,nf_nat,nf_conntrack_ipv4 nf_defrag_ipv4 1483 1 nf_conntrack_ipv4 |
1 2 3 4 5 | [root@lvs001 modprobe.d]# lsmod | grep ip_vs ip_vs_rr 1420 0 ip_vs 126705 2 ip_vs_rr libcrc32c 1246 1 ip_vs ipv6 336368 913 ip_vs,ib_ipoib,ib_addr |
说明:
- 第1列:表示模块的名称。
- 第2列:表示模块的大小。
- 第3列:表示该模块调用其他模块的个数
- 第4列:显示该模块被其他什么模块调用
通常在使用lsmod命令时,都会采用类似lsmod | grep -i ipvs
这样的命令来查询当前系统是否加载了某些模块。
modinfo-查看内核模块信息
modinfo会显示kernel模块的对象文件,以显示该模块的相关信息。
modinfo列出Linux内核中命令行指定的模块的信息。若模块名不是一个文件名,则会在/lib/modules/version 目录中搜索,就像modprobe一样。
modinfo默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname : value。
1 2 3 4 5 6 | 参 数: -a或--author 显示模块开发人员。 -d或--description 显示模块的说明。 -h或--help 显示modinfo的参数使用方法。 -p或--parameters 显示模块所支持的参数。 -V或--version 显示版本信息。 |
1 2 3 4 5 6 7 | [root@lvs001 modprobe.d]# modinfo ip_vs filename: /lib/modules/2.6.32-696.el6.x86_64/kernel/net/netfilter/ipvs/ip_vs.ko license: GPL srcversion: 0FB85919D62C4255E412E5C depends: ipv6,libcrc32c vermagic: 2.6.32-696.el6.x86_64 SMP mod_unload modversions parm: conn_tab_bits:Set connections' hash size (int) |
注意,使用lsmod不能看到内核的相关参数配置,而使用modinfo命令则可以显示
rmmod-卸载内核模块
rmmod命令 用于从当前运行的内核中移除指定的内核模块。
执行rmmod指令,可删除不需要的模块。
1 2 3 4 5 | 选项信息: -v:显示指令执行的详细信息; -f:强制移除模块,使用此选项比较危险; -w:等待着,直到模块能够被除时在移除模块; -s:向系统日志(syslog)发送错误信息。 |
1 2 | [root@lvs001 modprobe.d]# rmmod ip_vs ERROR: Module ip_vs is in use by ip_vs_rr |
使用rmmod卸载模块的时候,提示信息会比使用modprobe -r 的输出更详细,此时会显示该模块的被调用情况
insmod-载入内核模块
insmod(install module)命令用于载入模块。
Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
语法:
1 | insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值] |
1 2 3 4 5 6 7 8 9 10 11 | 参数说明: -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。 -k 将模块设置为自动卸除。 -m 输出模块的载入信息。 -o<模块名称> 指定模块的名称,可使用模块文件的文件名。 -p 测试模块是否能正确地载入kernel。 -s 将所有信息记录在系统记录文件中。 -v 执行时显示详细的信息。 -x 不要汇出模块的外部符号。 -X 汇出模块所有的外部符号,此为预设置。 |
在Linux中,modprobe和insmod都可以用来加载module,不过现在一般都推荐使用modprobe而不是insmod了。
modprobe和insmod的区别是什么呢?
- modprobe可以解决load module时的依赖关系,比如load moudleA就必须先load mouduleB之类的,它是通过/lib/modules//modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题。
- modprobe默认会去/lib/modules/目录下面查找module,而insmod只在给它的参数中去找module(默认在当前目录找)。
但是insmod也有它的有用之处,举个例子吧。
有/root/my-mod.ko这个module,cd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert这个module了,
但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)却提示”FATAL: Module my-mod.ko not found”,这就是因为modprobe是到/lib/modules/uname -r
/下去找module的,如果没找到就是这样了。
depmod-分析模块依赖性
modprobe-内核模块操作
modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。
modprobe可载入指定的个别模块,或是载入一组相依的模块。
modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
1 2 3 4 5 6 7 8 9 10 11 | 参数选项 -a或--all:载入全部的模块/指定模块; -c或--show-conf:显示所有模块的设置信息; -d或--debug:使用排错模式; -l或--list:显示可用的模块; -r或--remove:卸载模块; -t或--type:指定模块类型; -v或--verbose:执行时显示详细的信息; -V或--version:显示版本信息; -help:显示帮助。 |
例如:
1 2 | 卸载:modprobe -r ip_vs 载入:modprobe -a ip_vs |
get_module
需要安装sysfsutils包之后才能产生该命令
1 | yum -y install sysfsutils |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@lvs001 modprobe.d]# get_module ip_vs initstate : live refcnt : 2 srcversion : 0FB85919D62C4255E412E5C Parameters: conn_tab_bits : 12 Sections: .altinstr_replacement : 0xffffffffa039c2b8 .altinstructions : 0xffffffffa039ef98 .bss : 0xffffffffa03a1c60 .data : 0xffffffffa039ff00 .data.cacheline_aligned : 0xffffffffa03a1580 .data.read_mostly : 0xffffffffa03a1040 .exit.text : 0xffffffffa039c40e .gnu.linkonce.this_module : 0xffffffffa03a1a20 .init.text : 0xffffffffa03aa000 .note.gnu.build-id : 0xffffffffa039c454 .rheldata : 0xffffffffa039fee0 .rodata : 0xffffffffa039c480 .rodata.str1.1 : 0xffffffffa039d6e8 .rodata.str1.8 : 0xffffffffa039dc90 .smp_locks : 0xffffffffa039eb68 .strtab : 0xffffffffa03ae2f8 .symtab : 0xffffffffa03aa4d0 .text : 0xffffffffa038a000 __kcrctab_gpl : 0xffffffffa039f540 __kcrctab : 0xffffffffa039fe80 __ksymtab_gpl : 0xffffffffa039f4f0 __ksymtab_strings : 0xffffffffa039f590 __ksymtab : 0xffffffffa039fdc0 __mcount_loc : 0xffffffffa039f6e8 __param : 0xffffffffa039f568 __verbose : 0xffffffffa03a1980 |