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...] [<initrd-image>] <kernel-version> –with=:除了默认的模块之外需要装载至initramfs中的模块; –preload=:initramfs所提供的模块需要预先装载的模块; 示例:~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (2)dracut命令 该命令用于CentOS6和CentOS7,生成initramfs镜像的更为底层的工具。 # dracut [OPTION...] [<image> [<kernel version>]] 示例:~]# 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/目录下。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券