Linux内核管理

1、内核基本原理

(1)Linux系统的组成部分是内核+根文件系统。内核负责进程管理、内存管理、网络协议栈、文件系统、驱动程序和安全功能。
运行中的系统环境可分为两层:内核空间(系统空间、系统模式)、用户空间(用户模式)。用户空间运行的是应用程序(进程或线程),内核空间运行的是内核代码(系统调用)。
(2)内核设计流派
1)单内核设计:把所有功能集成于同一个程序,如Linux系统,但充分借鉴了微内核体系的设计的优点,为内核引入了模块化机制。
2)微内核设计:每种功能使用一个单独的子系统实现,如Windows系统Solaris系统。
(3)Linux内核特点
1)支持模块化: .ko (kernel object)
2)支持模块运行时动态装载或卸载。
Linux的对象类文件有两种:.ko(kernel object,内核对象)和.so(shared object,共享对象,供各种应用程序之间共享的功能模块)。
(4)内核的组成部分
1)核心文件:内核核心,一般为bzImage,通常位于/boot目录,名称为/boot/vmlinuz-VERSION-release,其中VERSION是内核版本号,release是本地版本号,制作和编译内核的人加上的版本号。
编译内核时,[ ]:N,表示不要此内核模块,[M]:Module,表示编译成模块,[*]:Y,表示编译进内核核心,内核支持模块的动态装载和卸载。
2)ramdisk:把内存中某一块空间作为磁盘用,用于实现系统初始化的、基于内存的磁盘设备。辅助性文件,并非必须,这取决于内核是否能直接驱动rootfs所在的设备:a) 目标设备驱动,例如SCSI设备的驱动;b) 逻辑设备驱动,例如LVM设备的驱动;c) 文件系统,例如xfs文件系统。ramdisk是一个简装版的根文件系统。CentOS 5,6,7中的ramdisk:
CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img
(由initrd替换成initramfs的原因是避免双缓冲和双缓存,从而达到提速启动的目的)
3)模块文件:/lib/modules/VERSION-release 如果安装了多个内核版本,在/lib/modules目录下将有多个内核文件目录。
4)kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/。内核模块与内核核心版本一定要严格匹配。

2、内核相关命令

(1)内核信息获取
uname命令
该命令用来打印系统信息。
uname [OPTION]...
-r:内核的release号
-n:主机名
-v:编译版本
-a:所有信息
此命令查看的是文件:/boot/vmlinuz-VERSION-release中的系统信息。
(2)模块信息获取和管理
1)lsmod命令
该命令用于显示Linux内核模块的状态信息。显示的内容来自于/proc/modules,包括3个字段:模块名称、模块大小、被引用次数。
2)modinfo命令
该命令用于显示Linux内核模块的信息。
modinfo [-F field] [-k kernel] [modulename|filename...]
-F field: 仅显示指定字段的信息;
-n:显示文件路径;
3)modprobe命令
该命令用于从Linux内核中添加或移除模块。
modprobe [-r] module_name
模块的动态装载:modprobe module_name。
动态卸载:modprobe -r module_name。
通过配置文件来装载和卸载:/etc/modprobe.conf和/etc/modprobe.d/*.conf。
4)depmod命令
该命令用于生成模块.dep和映射文件,是一种内核模块依赖关系文件的生成工具。
模块的装载和卸载的另一组命令:
5)insmod命令
insmod [filename] [module options...]
filename:模块文件的文件路径。
6)rmmod命令
rmmod [module_name]

3、ramdisk文件的管理

(1)mkinitrd命令
该命令用于CentOS5,CentOS6和CentOS7也都有链接。为当前使用中的内核重新制作ramdisk文件:
# mkinitrd [OPTION...] []
–with=:除了默认的模块之外需要装载至initramfs中的模块;
–preload=:initramfs所提供的模块需要预先装载的模块;
示例:~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2)dracut命令
该命令用于CentOS6和CentOS7,生成initramfs镜像的更为底层的工具。
# dracut [OPTION...] [ []]
示例:~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)

4、内核信息输出的伪文件系统

(1)伪文件系统目录
/proc:该目录下的文件为内核状态和统计信息的输出接口,同时,还提供一个配置接口:/proc/sys;
只读参数:信息输出;例如/proc/#/*
可写参数:可接受用户指定一个“新值”来实现对内核某功能或特性的配置,可写参数位于/proc/sys/目录下。
/proc/sys目录下的net/ipv4/ip_forward相当于net.ipv4.ip_forward。
(2)sysctl命令
该命令专用于查看或设定/proc/sys目录下参数的值。
sysctl [options] [variable[=value]]
查看:
# sysctl -a
# sysctl variable
修改其值:
# sysctl -w variable=value
(3)文件系统命令(cat, echo)
查看:
# cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
设定:
# echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE
注意:上述两种方式的设定仅当前运行内核有效;
(4)修改配置文件:/etc/sysctl.conf, /etc/sysctl.d/*.conf
立即生效的方式:sysctl -p [/PATH/TO/CONFIG_FILE]
该命令重读配置文件,并根据配置文件修改内核参数。
(5)内核参数:(/proc/sys目录下)
net.ipv4.ip_forward:核心转发;
vm.drop_caches:手动回收内存,清理一部分buffer/cache;
kernel.hostname:主机名;
net.ipv4.icmp_echo_ignore_all:忽略所有ping操作,禁止别人ping自己,自己也可以ping别人。
(6)/sys目录:
sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的各设置参数, 对此些参数的修改,即可定制硬件设备工作特性。
(7)udev:通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件。udev是用户空间程序,专用工具:devadmin, hotplug。
udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/目录下,以及/usr/lib/udev/rules.d/目录下。

你可能感兴趣的:(Linux,深入Linux系统架构)