前言
Hello,各位码友,刚刚过完一个小长假,今天是开工的打好日子,阳光明媚,多云转晴。不知道有没有想起我(容我自恋一下),哈哈。
假期已过,是时候该收收心好好学习了,今天我们一起学习一下Linux的内核模块。
内核模块
Linux的内核采用的是模块化技术,这样的设计使得系统内核可以保持最小化,同时确保了内核的可扩展性和可维护性,模块化设计允许我们在需要时才将模块加载到内核,从而实现动态内核的调整。
内核模块的存放位置
Linux内核模块文件的命名方式通常为<模块名称.ko>,CentOS 7系统的内核模块被击中存放在/lib/modules/uname -r
/目录下。
查看已加载内核模块
lsmod命令用来显示当前Linux内核模块状态,不适用任何参数会显示当前已经加载的所有内核模块。输出的三列信息分贝为模块名称、占用内存大小、是否正在被使用,如果第三列为0,则该模块可以随时卸载,非0则无法执行modprobe删除模块。
[root@centos ~]# lsmod
Module Size Used by
tcp_lp 12663 0
nls_utf8 12557 1
isofs 39844 1
rfcomm 69552 2
fuse 100463 3
xt_CHECKSUM 12549 1
ipt_MASQUERADE 12678 3
nf_nat_masquerade_ipv4 13430 1 ipt_MASQUERADE
tun 32026 1
bridge 151336 0
stp 12976 1 bridge
llc 14552 2 stp,bridge
devlink 60067 0
ip6t_rpfilter 12595 1
ip6t_REJECT 12625 2
nf_reject_ipv6 13717 1 ip6t_REJECT
ipt_REJECT 12541 4
nf_reject_ipv4 13373 1 ipt_REJECT
xt_conntrack 12760 12
ebtable_nat 12807 1
ip6table_nat 12864 1
nf_conntrack_ipv6 18935 7
nf_defrag_ipv6 35104 1 nf_conntrack_ipv6
nf_nat_ipv6 14131 1 ip6table_nat
ip6table_mangle 12700 1
ip6table_security 12710 1
ip6table_raw 12683 1
iptable_nat 12875 1
nf_conntrack_ipv4 15053 7
加载与卸载内核模块
modprobe命令可以动态加载与卸载内核模块:
[root@centos ~]# modprobe ip_vs #动态加载ip_vs模块
[root@centos ~]# lsmod |grep ip_vs #查看模块是否加载成功
[root@centos ~]# modprobe -r ip_vs #动态卸载ip_vs模块
modinfo命令可以查看内核模块信息:
[root@centos ~]# modinfo ip_vs
filename: /lib/modules/3.10.0-1062.el7.x86_64/kernel/net/netfilter/ipvs/ip_vs.ko.xz
license: GPL
retpoline: Y
rhelversion: 7.7
srcversion: 9ECAE51AC692A803424A686
depends: nf_conntrack,libcrc32c
intree: Y
vermagic: 3.10.0-1062.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: 51:08:4E:41:88:03:02:BE:5C:B0:74:AC:0D:A3:FE:10:23:3B:7F:1C
sig_hashalgo: sha256
parm: conn_tab_bits:Set connections' hash size (int)
通过上述modprobe方式加载的内核模块仅在当前有效,计算机重启后并不会再次加载该模块,如果希望系统开机自动挂载内核模块,则需要将modprobe命令写入/ect/rc.d/rc.local文件夹中,或者通过修改/etc/modprobe.d/目录下的相关配置文件实现。
[root@centos ~]# echo "modprobe ip_vs >> /etc/rc.local
当内核模块不再需要时,可以通过将/etc/rc.d/rc.local文件中对应的modprobe命令删除,但需要重启计算机才能生效。此时,可以通过modprobe -r命令来立即删除内核模块:
[root@centos ~]# modprobe -r ip_vs
修改内核参数
临时调整内核参数
Linux内核参数随着系统的启动会被写入内存中,我们可以直接修改/proc目录下的大量文件来调整内核参数,并且这种调整会立即生效。
开启内核路由转发功能(通过0或1设置开关):
[root@centos ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
禁止所有的icmp回包(禁止其他主机ping本机)功能
[root@centos ~]# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
调整所有的进程可以打开的文件总数量(当大量的用户访问网站资源时,可能会因该数字过小而导致错误):
[root@centos ~]# echo "108248" >/proc/sts/fs/file-max
永久调整内核参数
通过man proc可以获得大量关于内核参数的描述信息。但以上通过直接修改/proc相关文件的方式在系统重启后将不再有效,如果希望设置参数并永久有效,可以修改/etc/sysctl.conf文件,文件格式为“选项=值”,我们通过vim修改该文件将前面三个实例参数设置为永久有效;
[root@centos ~]# vim /etc/sysctl.conf
注意:
通过sysctl.conf文件修改的内核参数不会立刻生效,修改完成后,使用sysctl -p命令可以使这些设置立刻生效。
今天的分享就到这里,你学废了吗?
喜欢的话点个一键三连支持一下呗,感激不尽。
希望有所帮助!!!