很不错的参考资料,摘自chinaunix 
首先贴上Linux的启动过程:

系统启动

1、系统加电

2、BIOS 自检 → 本地设备枚举和初始化

3、POST 代码从内存中清除,但运行时服务(runtime service)仍然留在内存。

4、BIOS 从 CMOS 的设置中找出第1/2/3 启动设备(可能有第4个),然后逐个尝试,

并在第一个 ”active“状态的硬盘上读入其 MBR

第一阶段引导加载程序

1、MBR 实际上是由3个部分组成 :主引导加载程序(master bootloader code,446 字节)、主分区表 (ppt)、magic nubmer (0xAA55)组成

主分区表有4个记录,对应主分区1-主分区4,共64 字节。最后的 magic number 是 2 字节

2、主引导加载程序搜索主分区表,扫描全部4个分区记录,确保只有1个是被标为”active“ 的(用 fdisk 可以设置某个分区为 active 分区)。

然后读入该分区的引导扇区(前512 字节)。active 分区一般是 C 盘或者 linux 的第一个分区

3、主引导加载程序的作用就是读入第2阶段的引导加载程序

第二阶段引导加载程序

1、第2阶段引导加载程序的目的是加载内核和 initrd 。GRUB 和 LILO 都是把 boot loader 程序分成两部分,一部分在 MBR ,一部分在”active" 分区的引导扇区

2、第2阶段引导加载程序被读入内存后,它读取 root() 命令给出的分区下的 grub/grub.conf ,显示一个菜单,供用户选择

3、GRUB 可以细分为3个阶段,中间的一个是 stage1.5 ,它跟在 stage1 的后面,目的是让 grub 能够识别文件系统的类型

内核

1、内核自解压

2、按照 bootloader 向它提供的 initrd 在内存中的地址,把 /dev/initrd 的内容拷贝到 /dev/ram ,并释放 /dev/initrd 所占用的内存

3、把 /dev/ram 按 rw 的模式挂载为初始根文件系统

4、执行其上面的 /linuxrc 或者 /init 脚本,目的是加载驱动模块

5、在 /linuxrc 和 /init 脚本中,会有 pivot_root ()或者 switchroot 把 /sysroot 下的真正根文件系统设备挂载到 / ,把初始根文件系统挂载到 /initrd 下

6、/linuxrc 和 /init 脚本的后面会 umount /initrd 下的初始根文件系统(即使没有完全卸载,也会在 /etc/rc.d/rc.sysinit 中把它们全部卸载)

7、接下来是启动 init 进程。在 2.4 内核中,这个步骤是由内核完成的。但在 2.6 内核中,这个步骤是由 /init 脚本完成的。

Init

1、init 首先执行 /etc/rc.d/rc.sysinit 进行系统的初始化

2、而 rc.sysint 会先执行 /etc/rc.d/init.d/functions ,获得一些有用的函数,例如 daemon()、action ()、success()、failure()等

3、按照默认运行级别或者 grub 启动时的 kernel 行给出的运行级别运行 /etc/rcN.d/ 下的脚本,先执行 K 开头的(按从低到高),再执行S开头的(从低到高)

这个过程“有可能”是通过执行 /etc/rc.d/rc 脚本实现的。因为 rc 脚本是为改变 runlevel 而做的,那么从关机(level 0)到 正常(level3/5)应该也算是

一种特殊的改变 runlevel 的情况吧

4、按照 /etc/inittab 的要求在指定的虚拟控制台上创建 mingetty 进程,提示输入用户名和密码

5、执行 login 命令,login 命令会做如下工作 :

a)如果存在 ~/.hashlogin ,则以 "quiet" 的方式登录,不显示邮件、不打印 motd

如果存在 /var/log/lastlog ,则打印最后登录时时间

b)设置环境变量,包括 HOME、MAIL、PATH 、SHELL、TERM 等

PATH 值默认是 /usr/local/bin:/bin:/usr/bin (对于普通用户而言), 
对于 root 而言,则是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 。

c)如果不是 quiet login ,则打印用户的邮件数量和 /etc/motd 文件)

d)启动 login shell (默认是 /bin/sh),并执行 ~/.bashprofile

e)~/.bashprofile 会自动执行 ~/.bashrc ,而 ~/.bashrc 又调用 /etc/bashrc

然后就是强人的对Linux /etc/rc.sysinit, /etc/rc.d/rc, /etc/rc.d/functions这些脚本的分析,很到位。文章中标注为红色的是未分析的部分。

/Files/super119/Linux_startup_scripts_hack.rar

转载于:https://www.cnblogs.com/super119/archive/2010/12/18/1909951.html

来自ChinaUnix的对Linux rc.sysinit, rc, functions脚本的分析和Linux启动分析相关推荐

  1. java 脚本启动 linux,linux可运行的shell脚本与设置开机服务启动(自己总结)

    ln :创建连接文件 - 默认创建的是硬连接,好比复制 ,但是两个文件会同步 命令:ln ./java/android/aa.txt aaa - s :创建的是软连接变为指向(类似于windows的快 ...

  2. linux查看告警日志,shell脚本,用于监视Linux中的消息日志(警告,错误和严重)...

    shell脚本,用于监视Linux中的消息日志(警告,错误和严重) 该脚本将检查文件中的"警告,错误和严重",并在/var/log/messages找到与之相关的邮件时触发给指定电 ...

  3. linux shell 域名 ip,Shell脚本一种检查Linux中域名和IP地址所有权信息、检查多个域名的到期日期工具...

    Shell脚本一种检查Linux中域名和IP地址所有权信息.检查多个域名的到期日期工具 jwhois是一个命令行实用程序,可从whois服务器(whois数据库)中获取有关域名所有权的信息. Whoi ...

  4. 【Linux命令行与Shell脚本编程】三,Linux文件系统

    Linux命令行与Shell脚本编程 第三章 Linux文件系统 文章目录 Linux命令行与Shell脚本编程 三.Linux文件系统 3.1,查看文件 3.1.1,ls 命令 选项和参数 3.1. ...

  5. linux更改桌面壁纸的脚本,使用 LSWC 在 Linux 中自动更改壁纸

    原标题:使用 LSWC 在 Linux 中自动更改壁纸 编译自: https://itsfoss.com/little-simple-wallpaper-changer/ 作者: Aquil Rosh ...

  6. linux清理磁盘空间的脚本,在Ubuntu和Linux Mint上释放空间的7种简单方法

    Linux系统空间不足?您可以通过以下几种方式清理系统,释放Ubuntu和其他基于Ubuntu的Linux发行版上的空间. 随着时间的流逝,随着添加和删除程序,任何操作系统都可能变得混乱.如果您拥有T ...

  7. Linux系统脚本分析之rc.sysinit

    Linux系统脚本分析之rc.sysinit #!/bin/bash # # /etc/rc.d/rc.sysinit - run once at boot time #  # # Rerun our ...

  8. linux的裁剪过程,让你的小linux更加完善,赶快试试吧!

    一.系统启动流程: 1.POST-->BIOS(Boot Sequence)--> BootLoader(MBR)--> Kernel(initrd,initramfs)--> ...

  9. linux启停was命令,linux下的启停脚本

    linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...

最新文章

  1. Java与JS代码调试技巧
  2. python3.6 - threading 多线程编程进阶,线程间并发控制(2)
  3. 第四章 Lua模块开发
  4. 快搜浏览器_郑秀晶因腿粗再上热搜:怎么减肥才能不反弹?
  5. RDD, DataFrame or Dataset
  6. cmd弄电脑滚绿代码_windows10点击“此电脑”——“管理”会出现管理员已阻止你运行此应用。有关详细信息。。。...
  7. 播放框架模块:分而治之
  8. ES基础命令(参照mysql)
  9. AbstractSyntax Tree (AST)
  10. Best Coder Lotus and Characters
  11. python标准函数什么意思_python中quote函数是什么意思,怎么用
  12. python md5加密
  13. SQL每日学习——insert into语句
  14. CNCC——多模态会议
  15. HOW2J.CN - 学习笔记(类和对象)
  16. [BUGKU] [MISC]普通的二维码
  17. iTextSharp,将多张图片合并生成PDF文件
  18. python 文件流转base64_详解Python中使用base64模块来处理base64编码的方法
  19. 2021-2025年中国光纤压力传感器行业市场供需与战略研究报告
  20. 怎样获取中国大学MOOC字幕 并制作笔记/可搜索的文档

热门文章

  1. page event
  2. Kettle日常使用汇总整理
  3. springboot启动出错,
  4. VS新建工程或者新建项时 出现未定义标识符号
  5. IBM押注沃森人工智能技术 未来6年或达170亿美元
  6. PHP采集商家信息及采集方法概述(上)
  7. # W3C 中文离线教程 2016 年版
  8. 巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类
  9. 历时八年 HTML5标准终于制定完成
  10. Javascript 两种 function 定义的区别