简单来说,linux的启动流程为:
1,加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备
2,读取并执行第一个启动设备内MBR的boot loader(即grub或者spfdisk等)
3,依据boot loader的设置加载kernel,kernel会开始检测硬件与加载驱动程序
4,在硬件驱动成功后,kernel会主动调用init进程,而init会取得run-level信息
5,init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络,时区等)
6,init执行run-level的各个服务的启动(script方式)
7,init执行/etc/rc.d/rc.local文件
8,init执行终端机模拟程序mingetty来启动login进程,最后等待用户登录
====多重启动原理====
linux的boot loader主要功能如下:
× 提供菜单:用户可以选择不同的启动选项,这也是多重引导的重要功能!
× 加载内核文件:直接指向可启动程序区段来开始操作系统
× 转交其他loader:将引导装载功能转交给其他loader负责
而windows的boot loader是没有第三个功能,也就是转交功能,所以要先安装windows,再安装linux才行。
====第一个进程init====
先解释下run-level,总共有7各等级:
× 0 – halt(系统直接关机)
× 1 – single user mode(单用户维护模式,用在系统出问题时的维护)
× 2 – Multi-user,without NFS(类似下面的runlevel3,但是没有NFS服务)
× 3 – Full multi-user mode(完整含有网络功能的纯文本模式)
× 4 – unused(系统保留功能)
× 5 – X11(与runlevel3类似,但多了各X Window,图形界面)
× 6 – reboot(重启)
这个init读取的配置文件为/etc/inittab,直接vim打开后查看,里面的内容很简单,不解释。
取得runlevel后,会立即执行/etc/rc.d/rc.sysinit脚本,大致要做的工作是:
1,取得网络环境与主机类型,读取配置文件/etc/sysconfig/network
2,测试与挂载内存设备/proc以及USB设备/sys
3,决定是否启动SELinux
4,启动系统随机数生成器
5,设置终端机console字体
6,设置显示于启动过程中的欢迎界面textbanner
7,设置系统时间clock与时区设置,读取/etc/sysconfig/clock配置文件
8,接口设备检测与Plug and Play即插即用参数测试
9,用户自定义模块加载:用户可以在/etc/sysconfig/modules/*.modules中加入自定义模块,则此时会被加载到系哦中去
10,加载内核相关设置:系统会主动读取/etc/sysctl.conf这个文件的设置值,使得内核功能称为我们想要的样子
11,设置主机名与初始化电源管理模块ACPI
12,初始化软件磁盘阵列:主要是通过/etc/mdadm.conf来设置好的
13,初始化LVM的文件系统功能
14,以fsck检测文件系统,进行filesystem check
15,进行磁盘配额quota的转换(非必要)
16,重新以可读写模式挂载系统磁盘(为了加速开机流程,开始是以只读模式挂载根目录)
17,启动quota功能:所以我们不需要自定义quotaon的操作
18,启动系统伪随机数生成器(pseudo-random)
19,清除启动过程中的临时文件
20,将启动相关信息加载/var/log/dmesg文件中
====启动系统服务====
以runlevel5的例子讲解,在/etc/inittab文件中:
l5:5wait:/etc/rc.d/rc 5
意义是这样的:
× 通过外部第一号参数($1)取得想要执行的脚本目录,即由/etc/rc.d/rc 5 可以取得/etc/rc5.d/这个目录来准备处理相关的脚本程序
× 找到/etc/rc5.d/K??*开头的文件,并进行/etc/rc5.d/K??*stop操作
× 找到/etc/rc5.d/S??*开头的文件,并进行/etc/rc5.d/S??*start的操作
====用户自定义开机启动程序====
就是/etc/rc.d/rc.local这个目录下,只要你把script放到这个里面来,开机就会自动执行
====重要的启动配置文件====
设备与模块对应文件:/etc/modprobe.conf
主配置文件目录:/etc/sysconfig/*:
× authconfig – 身份认证机制
× clock – 设置linux主机的时区
× i18n – 语系的设置,默认会被选择zh_CN.UTF8,命令行模式下,如果日期显示乱码,可以设置LC_TIME为en即可
× keyboard & mouse
× network – 可设置是否启用网络,以及设置主机名还有网关gateway这两个重要信息
× network-scripts/ – 在这里面的文件,主要用于设置网卡。
====内核与内核模块====
内核与内核模块放置的位置:
× 内核 – /boot/vmlinuz 或者是 /boot/vmlinuz-version
× 内核加压缩所需RAMDisk – /boot/initrd 或者是 /boot/initrd-version
× 内核模块:/ib/modules/$(uname -r)/kernel
× 内核源码 – /usr/src/linux 或者 /usr/src/kernels (要安装才有的)
如果内核被顺利加载到系统,那么就会有几个信息被记录下来:
× 内核版本:/proc/version
× 系统内核功能:/proc/sys/kernel
如果想要加入新的硬件,偏偏操作系统不支持,那么需要两步:
1,重新编译内核,计入最新的硬件驱动程序源码
2,将该硬件的驱动程序编译成模块,在启动时候加载该模块
内核模块依赖性:
# depmod [-Ane]
内核模块查看:
# lsmod
查看每一个模块的信息:
# modinfo [-adln] [module-name | filename]
内核模块的加载与删除:
# modprobe [-lcfr] module-name
-c:列出目前系统所有的模块
-l:列出目前在/lib/modules/$(uname -r)/kernel中所有模块完整文件名
-f:强制加载模块
-r:类似rmmod,删除某模块
内核模块的额外参数配置文件:/etc/modprobe.conf
====grub的配置文件====
/boot/grub/menu.lst中的磁盘代号:
第一块 | (hd0)(hd0,0)(hd0,1)… |
第二块 | (hd1)(hd1,0)(hd1,1)… |
第三块 | (hd2)(hd2,0)(hd2,1)… |
====root密码忘记时候的处理====
重启,开机进入grub菜单后,在要进入的菜单上点击e进入详细编辑模式,将光标移动到kernel那一行的末尾,加入空格和single,然后按下enter,再按下b就能进入单人维护模式,直接执行passwd,重建新的密码即可。
而如果/etc/inittab文件出错,跟上面一样,不过是把single修改成init=/bin/bash,让系统不以init进程初始化,然后:
# mount -o remount,rw /
# mount -a
====================END====================
本人博客已搬家,新地址为:http://yidao620c.github.io/
相关推荐
《企鹅智酷年度报告:移动时代创业黄金法则》是一份深入探讨移动互联网时代创业规律的重要文献。报告全面分析了在当前技术飞速发展、移动设备普及的背景下,创业者们如何抓住机遇,遵循黄金法则成功开创事业。以下将...
《帝企鹅日记》是一部揭示南极洲帝企鹅生存之道的纪录片,影片通过细腻的镜头语言,展现了这个物种在极端环境下的坚韧与智慧。以下是从影片中提炼出的一些关键知识点: 1. 团结协作:帝企鹅面对南极的恶劣环境,...
《帝企鹅日记》是一部揭示南极生态与帝企鹅生存智慧的纪录片,通过观影,我们可以深入了解到这种生活在地球最寒冷之地的生物所展现出的惊人生命力和团队精神。 首先,帝企鹅的生存策略是一个生动的生物学案例。在...
在零下四十度的低温下,雄企鹅坚守职责,承受着饥饿和严寒,直至小企鹅孵化出来。这一过程是对父爱的深度诠释,也是对生死承诺的坚守。 雌企鹅的觅食之旅充满危险,海洋中的捕食者、严酷的气候都在考验着它们。即便...
《帝企鹅日记》是一部描绘南极洲帝企鹅生存与繁衍的纪录片,以其深情的叙述和震撼的影像展现了生命在极端环境中的坚韧与伟大。影片揭示了帝企鹅面对严寒、饥饿和天敌挑战时所展现出的无尽耐力和亲情之深。 在南极的...
《帝企鹅日记2—召唤》是一部记录片,展现了帝企鹅从繁衍到成长的艰辛历程,同时也是对生命坚韧不拔精神的颂扬。影片通过讲述帝企鹅的生活习性,传递了许多关于生存、亲情和勇气的知识点。 首先,影片揭示了帝企鹅...
### PS练习猫和企鹅知识点详解 #### 一、项目概述 本教程旨在通过实际案例——猫和企鹅的图片合成,详细介绍Adobe Photoshop(简称PS)的基本操作技巧及高级合成技术。通过本教程的学习,读者将能够掌握如何利用PS...
《帝企鹅日记》是一部揭示南极生态与生命坚韧的纪录片,通过观察帝企鹅的生活,展现了大自然中一种非凡的生命力。观影后的感受深深触动了观众的心灵,引发了对生命、团结和坚韧精神的深刻思考。 首先,影片让我们...
企鹅智酷:互联网+九大传统行业转型报告
在这个版本中,企鹅CMS显然对用户体验和内容获取流程进行了优化,旨在提供一个更便捷、更自动化的平台。 首先,我们看到`.htaccess`文件,这是一个非常重要的Apache服务器配置文件,用于控制网站的访问权限和URL...
企鹅与怪兽:互联时代的合作共享与创新模式
数据集包含了对南极洲不同地区生活的企鹅种群的研究数据,主要用于数据探索和可视化,以及分类任务。数据说明penguins_size.csv :经过简化的原始数据英文字段名中文字段名描述species种类巴布亚企鹅、阿德利企鹅、...
通过深入分析"戳企鹅游戏源码",我们可以学习到游戏开发的基础知识,包括Cocos2d-x引擎的使用、lua脚本编程、游戏逻辑设计以及资源和事件的管理。对于希望在游戏开发领域提升自己的人来说,这是一个很好的实践案例。
5. **数据结构和状态管理**:为了实现企鹅的不同状态(如饥饿、快乐等),需要定义相应的数据结构存储宠物的状态,并根据这些状态决定企鹅的行为和用户界面的反馈。 6. **文件操作**:源码可能包含了读取和保存宠物...
企鹅智酷:2019-2020中国互联网趋势报告.pdf
一路发_常规驱动模块2.46[ 兼容企鹅 和 64位系统 ]
4. 更新策略:个体在移动过程中考虑邻近企鹅的信息,以及距离最优解的远近,动态调整移动方向和速度。 5. 停止条件:当达到预设的迭代次数或者满足其他停止条件时,算法结束,返回当前最优解。 二、Matlab实现 ...
企鹅 :penguin: Penguin是一款多功能Discord机器人,在编写时就考虑了Discord社区。 目前,该机器人尚处于早期阶段,并且仍在开发中,尚无法使用。 任何人都可以为这个项目做贡献。 如果您愿意,只需发送请求请求,...
打企鹅系列之二123456
Linux小企鹅输入法,全称为Fcitx输入框架,是一款专门为Linux操作系统设计的开源输入法引擎。在Linux世界中,Fcitx以其轻量级、高效和高度可定制性而受到用户喜爱。版本4.0.0是该输入法框架的最新迭代,带来了诸多...