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 |