modprobe
modprobe
这个命令是用来往内核中加载(或者移除)模块用的,我很奇怪加载不应该是 insmod
的么?然后查了一下,他们是有区别的,虽然都可以用来往内网中加载模块:
insmod
:指定哪个模块就是哪个模块,不会加载依赖的模块modprobe
:指定哪个模块,不仅可以加载该模块,还会自动加载依赖的其他模块
如果 modprobe
在加载过程中发生错误,会卸载整组的模块。modprobe
寻找模块的位置是:/lib/modules/<uname -r>
,但是不会加载 /etc/modprobe.conf
和 /etc/modprobe.d/
中配置的排除内容。
当然,modprobe
的依赖分析不是天马行空来的,而是通过 depmod
生成的。
- 内核模块相关命令
lsmod
:显示已经加载到内核中的模块的状态信息;rmmod
:从内核中移除指定模块(modprobe 也是和 insmod 对应的效果);dmesg
:查看加载或者卸载过程中的错误日志;bmodinfo
:显示给定模块的详细信息;
ldconfig
ldconfig
这个命令的作用就是在指定的位置查找动态链接库,然后加载进系统的内存(内核空间还是用户空间?没有深究)。所以,一般这个命令是在系统启动的时候运行的,这样,在我们升级或者自己编译新的动态链接库之后,就需要自己手动执行一遍 ldconfig
才能让新的动态链接库生效。
ldconfig
查找动态链接库的位置有:
/lib
/usr/lib
- 配置文件
/etc/ld.so.conf
里面列举的目录 - 环境变量 LD_LIBRARY_PATH 对应的目录
一些注意事项:
ldconfig
会将加载的动态链接库的记录都存放在一个文件中,该文件位于:/etc/ld.so.cache
;ldconfig
做的事情都是和运行程序时相关,跟编译时一点关系都没有,编译的时候该加-L
还是得加,不要混淆;- 动态链接库文件里面是会包含库的元数据信息的,因此仅通过修改文件名以冒充某已被识别的库是行不通的;