Linux之内核模块—知识详解

前言

​ 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命令可以使这些设置立刻生效。

今天的分享就到这里,你学废了吗?


喜欢的话点个一键三连支持一下呗,感激不尽。

希望有所帮助!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7旅病娘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值