1、内核设计风格:
单内核: 把所有功能统统都做进内核(Linux)(在Linux系统上,线程被称为"轻量级进程LWP")
模块化设计=核心+各种外部内核模块(ko,内核专用模块)
扩展:so,共享对象(用户空间中各种进程所用到的共享模块)
核心可以动态加载任何的外围内核模块
微内核: 内核很小,只是一个核心,他那各种的外围程序都做成他的子系统,需要用到哪个子系统,由内核去调动(Windows)
Redhat (红帽) : 核心(核心很小,但核心上布满了孔洞,任何一个模块需要的时候,只需要把它装载进他所在的位置就可以)
这就是动态加载(我用到哪个模块,模块本身我把它放在外围的路径下,当我们需要时,让核心自动去装载这个功能)
模块位置(红帽系列) :1、在/lib/modules/“内核版本号命名的目录”/
2、内核的命名:vmlinux-版本号
详解
arch :跟你的平台相关的,驱动你的CPU的
crypto :加密解密相关的模块
drivers :驱动
fs :文件系统
kerne :内核自身额外的其他功能
lib :库
net :网络
sound :声卡
ldd :显示共享库的依赖关系,显示的结果是: 库名称 库路径
ramfs :把内存模拟成磁盘来用, (用来识别对应设备的驱动)
chroot :创建一个伪根,语法:chroot 伪根目录 /bin/bash
2、运行级别(启动的服务不同,判定的级别不同)
/etc/inittab
0 :halt 关机
1 :单用户模式(直接登录管理员,不需要密码)或使用s
2 :多用户模式,不启用NFS
3 :正常多用户模式(文本模式)
4 :预留
5 :图形界面
6 :reboot重启
3、详解启动过程
bootloader (MBR):由系统安装程序提供
Linux常用的bootloader有两种
LILO:Linux loader,在8G以上的分区不能引导,在嵌入式系统上使用
GRUB:统一的bootloader
GRUB分为两个阶段:
stage1 :被装在MBR中,目的用于引导第二阶段
stage1.5 : 帮助我们识别系统的文件系统,用与支持下一阶段
stage2 :真正用于引导操作系统,位于内核所在的分区,/boot/grub/
/etc/grub.conf
default=0 --->设定默认启用的title的编号
timeout=5 --->等待用户选择的超时时间(秒)
splashimage=(hd0,0)/grub/splash.xpm.gz --->指定grub背景图片
hiddenmenu --->隐藏菜单
title CentOS (2.6.32-358.el6.i686) --->标题,用于定义当前系统的不同版本的内核(可自由修改)
root (hd0,0) --->内核文件所在的设备,对grub而言,所有的硬盘类型一律认为hd, 前面为第几块硬盘,后面为分区,用逗号隔开
kernel /vmlinuz-2.6.32-358.el6.i686 ro root=/dev/mapper/vg_pc-lv_root rd_ --->内核文件路径及传递给内核的参数
NO_LUKS rd_LVM_LV=vg_pc/lv_swap crashkernel=128M rd_NO_MD rd_LVM_LV=vg_pc/lv_root --->
LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.i686.img --->ramfs文件路径,"initrd",安装操作系统最后一步生成的。
4、grub界面应用
敲e键 :编辑
敲a键 :修改内核参数
敲c键 :进入命令行界面
选择我的内核敲e键进行编辑,进入二级菜单!
这个时候我们想编辑某一行直接敲e键就可以
对着kernel敲e键,进入编辑界面,可以修改运行级别,编辑完成之后敲回车。
删除一行用d键,新增一行用o
完成之后敲b键,启动系统!
4.1、grub密码
1、使用 grub-md5-crypt命令 ,生成一个用md5加密的字符串
2、复制生成的字符串到/etc/grub.conf文件中,粘贴在title上面,
3、重启之后,敲p键输入密码,才能编辑内核
4、想要输入密码才启动系统就把密码复制到title下面。
查看运行级别
第一个是上一次的运行级别
第二个是现在的运行级别
或者 who -r 命令
查看内核版本号
uname -r 简单显示
uname -a 显示详细
4.2 、修复grub
1、使用命令把boot的分区中的grub破坏掉 if=/dev/zero of=/dev/sda count=1 bs=400
2、使用光盘进入系统安装界面,选择 Rescue Install system,进入救援模式。
3、选择语言以及键盘类型,随后问你需不需要开启网络
4、进入Rescue界面,选择Countinue,
5、三个选项(shell:进入命令行模式、fakd:诊断模式、reboot:重启电脑)选择shell
6、进入命令行模式之后输入grub,进入grub界面。
7、grub> root (hd0,0) --->指定内核分区
8、grub>setup (hd0) --->安装grub到指定分区,只需要写磁盘位置就好,不需要分区。
9、grub>find (hd0,0)/ --->搜索内核文件
5.1、kernel初始化过程
设备探测
驱动初始化(可能从initramfs文件中装载驱动模块)
以只读方式挂载根文件系统(若以读写模式挂载文件系统,任何一个bug都会导致文件系统崩溃)
装在第一个进程init(PID号1)
5.2、init(sbin/init)
init是/sbin/init,他要读取的配置文件是/etc/init。
在红帽6.0之后,这个init程序不再使用传统的init 程序(执行速度慢),换成了upstart,,但是文件名依然是init.
upstart:由Ubuntu公司开发的,实现并行启动好多进程,使用d-bus,这是一种系统内部各子系统之间IPC的机制(IPC:进程间通信)
基于事件来完成系统之间启动(事件驱动)
它是由一堆配置文件来协助工作的(有一个目录/etc/init/,都以.conf结尾的,他们都是基于事件驱动的方式来编写的)
systemd:比upstart还要好的init程序,纯粹完整意义上并行启动多个程序的机制
ACTION(红帽5中/etc/init文件详解)
initdefault:设置默认级别
sysinit:系统初始化
wait:等待级别切换至此级别是执行
respawn:一旦程序终止(....tty...),会重新启动
5.3、/etc/rc.d/rc.sysinit完成的任务
激活udev和seLinux;
根据/etc/sysctl.conf文件,来设定内核参数;
设定系统时钟;
装载键盘映射;
启用交换分区;
设置主机名;
根文件系统检测,并以读写方式重新挂载
激活软RAID和LVM设备
启用磁盘配额
清理过期的锁和PID文件
专业书籍、问题答疑、教学视频、在线实验平台等服务请移步:www.noylinux.com《零基础趣学Linux》
如果此文章有帮助到您,还请麻烦动动您的小手点个赞,谢谢~
Linux运维技术交流q:962822359
标签:操作系统,grub,汇总,---,etc,init,内核,Linux From: https://blog.51cto.com/u_10784316/6047361