1、 Linux内核组成部分:
1> kernel : 内核核心,一般为bzimage格式的压缩文件,通常位于/boot目录,名称为’vmlinuz-VERSION-release’;
2> kernel object : 内核对象(内核模块),一般位于/lib/modules/VERSION-release;
3> ramdisk : 辅助性文件,是否需要加载,取决于内核是否能直接驱动rootfs所在的设备;
备注:内核模块所在路径的路径名称必须与内核文件名称的版本号信息一致;
加载内核模块的3种表现方式:
[ ] 不编译、不启用此模块功能 , excluded;
[M] 编译成模块 , module;
[*] 编译进内核核心 , built-in;
<> module capable ;
rootfs所在设备的类型:硬件设备驱动、逻辑设备驱动、文件系统;
ramdisk是一个简装版的根文件系统;
2、获取内核信息
~]# uname -r 查看内核的release号;
~]# uname -n 查看主机名,相当于’hostname’命令;
~]# uname -a 查看内核的release号、主机名、内核版本号(内核封装发行的日期)等;
3、模块信息的获取与模块的装载、卸载
查看:
———
lsmod命令:
Show the status of modules in the Linux Kernel
~]# lsmod 列出当前内核已加载的所有内核模块,查看到的信息是从’/proc/modules/’目录中获取的;
modinfo命令:
Show information about a Linux Kernel module
查询指定内核模块的详细信息;
~]# modinfo -n MODULE_NAME 查看指定模块名称的文件名(文件的完整路径);
[root@kouyuushinn ~]# modinfo btrfs filename: /lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/fs/btrfs/btrfs.ko.xz license: GPL alias: devname:btrfs-control alias: char-major-10-234 alias: fs-btrfs retpoline: Y rhelversion: 7.4 srcversion: E068A967C56C68932E2B7E5 depends: raid6_pq,xor intree: Y vermagic: 3.10.0-693.21.1.el7.x86_64 SMP mod_unload modversions signer: CentOS Linux kernel signing key sig_key: 03:DA:60:92:F6:71:13:21:B5:AC:E1:2E:84:5D:A9:73:36:F7:67:4D sig_hashalgo: sha256 [root@kouyuushinn ~]#
装载与卸载:
—————
modprobe命令:
Add and remove modules from the Linux Kernel;
从内核中装载和卸载模块;
~]# modprobe MODULE_NAME 装载模块;
~]# modprobe -r MODULE_NAME 卸载模块;
备注:对于正在使用的模块,禁止卸载;
depmod命令:
depmod – Generate modules.dep and map files;
内核模块依赖关系文件的生成工具;
模块的装载和卸载的另一组命令;
insmod命令:
Simple program to insert a module into the Linux Kernel;
装载模块,后面接模块对应的完整名称;此命令无法解决依赖关系;
~]# insmod MODULE_FILE_NAME
rmmod命令:
Simple program to remove a module from the Linux Kernel;
卸载指定模块,后面接模块名称;
~]# rmmod NODULE_NAME
4、ramdisk文件管理
CentOS 5 :
—————
mkinitrd命令:
is a compat wrapper , which calls dracut to generate an initramfs;
为当前使用中的内核重新创建ramdisk文件;
–with=<module> 指定除了默认的模块之外,需要装载至initramfs中的其他模块;
–preload=<module> 在加载其他内核模块之前,在initramfs中预加载其他内核模块;
~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
CentOS 6/7 :
——————
dracut命令:
low-level tool for generating an initramfs image;
底层工具,为当前使用中的内核重新创建ramdisk文件;
~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)
5、伪文件系统
/proc 目录 : 内核状态和统计信息的输出接口;提供一个配置接口’/proc/sys’;
>> /proc有2类参数:
只读参数:只用来做信息输出;
可写参数:可接受用户指定的一个”新值”来实现对内核某功能或特性的配置;
>> 修改’/proc/sys/’目录下内核参数值的2中方法:
>>> 命令方式:只对当前shell有效,重启无效;
sysctl命令说明:
configure kernel parameters at runtime;运行时修改内核参数;
~]# sysctl -a 显示当前系统所有可用的内核参数,并显示当前内核参数值;
~]# sysctl variable 显示指定内核参数的值;
~]# sysctl -w variable=value 修改指定内核参数的值;
‘variable’的写法:比如内核参数’net.ipv4.ip_forward’;
cat,echo命令:
~]# cat /proc/sys/PATH/TO/VARIABLE 查看指定内核参数的值;
~]# echo value > /proc/sys/PATH/TO/VARIABLE 重定向覆盖修改内核参数值;
‘/PATH/TO/VARIABLE’是内核参数映射到伪文件系统中的完整的文件路径;
比如:内核参数’net.ipv4.ip_forward’,映射到伪文件系统的完整文件路径为’/proc/sys/net/ipv4/ip_forward’;
>>> 修改配置文件:修改后重读配置文件,永久有效;
编辑配置文件/etc/sysctl.conf;
~]# sysctl -p [/etc/sysctl.conf] 重读配置文件;文件路径不指定时,默认读取’/etc/sysctl.conf’;
>> 举例几个内核参数:
net.ipv4.ip_forward 核心转发参数;
net.ipv4.icmp_echo_ignore_all 忽略所有发往本机的ping操作;
kernel.hostname 主机名参数;
查看主机名;
~]# sysctl kernel.hostname
~]# cat /proc/sys/kernel/hostname
命令方式修改:
~]# sysct -w kernel.hostname=lucifer.kouyuushinn.cn
~]# echo “lucifer.kouyuushinn.cn” > /proc/sys/kernel/hostname
配置文件方式修改:
~]# echo “kernel.hostname = lucifer.kouyuushinn.cn” >> /etc/sysctl.conf
~]# sysctl -p
/sys 目录 :
sysfs : 输出内核识别出的各硬件设备的相关信息,也有内核对硬件特性的可设置参数;对这些参数的修改可定制硬件设备的工作特性;
udev : 通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件;
udev是用户空间程序;
可用专用工具创建:devadmin,hotplug;
udev为设备创建设备文件时,会读取其事先定义的规则文件,规则文件一般在’/etc/udev/rules.d/’目录下,以及’/usr/lib/udev/rules.d/’目录下;