N25-第10周博客作业

  1. 请详细描述CentOS的启动流程

    启动第一步–加载BIOS 

       当打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PNP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。在BIOS将系统的控制权交给硬盘第一个扇区之后,就开始由Linux来控制系统了。

    启动第二部–读取MBR         

      硬盘上第0磁道第一扇区被称为MBR,也就是Master Boot Record,即主导记录,它的大小是512字节,可里面却存放了预启动信息、分区表信息。可分为两部分:第一部分为引导去,占了446个字节;第二部分为分区表,共66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动的分区,并将活动分区的引导读入内存。       系统找到BIOS所指定的硬盘MBR后,就会将其复制到0*7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

    启动第二部–读取MBR         

      硬盘上第0磁道第一扇区被称为MBR,也就是Master Boot Record,即主导记录,它的大小是512字节,可里面却存放了预启动信息、分区表信息。可分为两部分:第一部分为引导去,占了446个字节;第二部分为分区表,共66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动的分区,并将活动分区的引导读入内存。       系统找到BIOS所指定的硬盘MBR后,就会将其复制到0*7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

    启动第四步–加载内核      

      根据grub设定的内核映象所在路径, 系统读取内存映象,并进行解压缩操作。此时,屏幕一般会输出”Uncompressing Linux“的提示。当解压缩内核完成后,屏幕输出”OK,booting the kernel”。    系统将压缩后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的出事化函数并初始化各种设备,完成Linux核心环境的建立,至此Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。    Start_kernel()定义在init/main.c中,它就类似于一般可执行程序中的main()函数,系统在此之前所做的仅仅是一些能让内核程序最低限度执行的初始化操作,真正的内核初始化过程是从这里才开始。函数start_kerenl()将会调用一系列的初始化函数,用来完成内核本身的各方面设置,目的是最终建立起基本完整的Linux核心环境。    在start_kenrel()的结尾,内核通过kenrel thread()创建出第一个系统内核线程(即1号进程),该线程执行的是内核中的init()函数,负责的是下一阶段的启动任务。最后调用cpues_idle()函数,进入了系统主循环体口默认将一直执行default_idele()函数中的指令,即CPU的halt指令,直到就绪队列中存在其他进程需要被调度是才会转向执行其他函数,此时,系统中唯一存在就绪状态的进程就是由kernel_hread()创建的init进程(内核线程),所以内核并不进入default_idle()函数,而是转向init()函数继续启动过程。

    启动第五步–用户层init依据inittab文件来设定运行等级   

      内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据文件来进行初始化工作。    其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:  0:关机  1:单用户模式  2:无网络支持的多用户模式 3:有网络支持的多用户模式 4:保留,未使用  5:有网络支持有X-Window支持的多用户模式 6:重新引导系统,即重启

    启动第六步–Init进程执行rc.sysinit    

      在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.sysinit脚本  程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。线程init的最终完成状态是能够使得一般的用户程序可以正常地被执行,从而真正完成可供应用程序运行的系统环境。准备好以上一切之后,系统开始进入用户层的初始化阶段。内核通过系统调用execve()加载执行相应的用户层初始化程序,依次尝试加载程序”/sbin/init”,”/etc/init”、“/bin/init”,和“/bin/sh”.只要其中有一个程序加载获得成功,那么系统就将开始用户层的初始化,而不会再回到init()函数段中。至此,init()函数结束,Linux内核的引导部分也到此结束。

    启动第七步–启动内核模块      

      具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

    启动第八步–执行不同运行级别的脚本程序     

      根据运行级别的不同,系统会运行rc0.d到rc6.d中的响应的脚本程序,来完成相应的初始化工作和启动相应的服务。

    启动第九步–执行/etc/rc.d/rc.local     

      rc.lacal就是在一切初始化工作后,Linux留给用户进行个性化的地方,可以把设置和启动的东西放到这里

    启动第十步–执行/bin/login程序,进入登录状态     

      此时,系统已经进入到了等待用户输入username和password的时候了,已经可以用自己的帐号登入系统了。

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;

  (1) 为硬盘新建两个主分区;并为其安装grub;

  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

  (4) 为grub提供配置文件;

  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

3、制作一个kickstart文件以及一个引导镜像。描述其过程。

4、写一个脚本

  (1) 能接受四个参数:start, stop, restart, status

   start: 输出“starting 脚本名 finished.

   …

  (2) 其它任意参数,均报错退出;

blob.png

    

5、写一个脚本,判断给定的用户是否登录了当前系统;

  (1) 如果登录了,则显示用户登录,脚本终止;

  (2) 每3秒钟,查看一次用户是否登录;

blob.png

6、写一个脚本,显示用户选定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

blob.png

7、写一个脚本

  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

  (2) 提示用户输入一个用户名或输入“quit”退出;

    当输入的是用户名,则调用函数显示用户信息;

    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit: 

    blob.png

8、写一个脚本,完成如下功能(使用函数)

   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求; 

blob.png

原创文章,作者:oranix,如若转载,请注明出处:http://www.178linux.com/70909

(0)
oranixoranix
上一篇 2017-03-10 15:15
下一篇 2017-03-10 16:38

相关推荐

  • 萧田国给你五个2017GOPS北京站的参会理由!

    2017年7月28日,GOPS全球运维大会即将开幕,发起人萧田国将在主会场发表题为《运维如何延续自己的职业生涯》演讲,参加第七届北京站您会有哪些收益? 收益一: 【长达半天时间的培训式演讲】让您系统性掌握顶级互联网自动化运维体系 收益二: 【腾讯智能运维】传奇背后的细节,听了才知道 收益三: 与Facebook、Twitter、BATJ等运维大咖【面对面深度…

    Linux干货 2017-07-24
  • Acheng学习宣言

    我是Acheng,我参加了马哥Linux运维网络班,从2016年9月开始我将跟随马哥学习Linux技术。我的学习宣言是:再努力也不为过!朝着活学活用,做到做精的方向努力吧! 

    Linux干货 2016-10-25
  • Bind编译安装详解

    Bind编译安装详解 Bind是一款开放源码的DNS服务器软件,由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服…

    Linux干货 2016-07-22
  • python练习实例

    #依次输出五位数的每一位(由低位到高位)i=12345for a in range(5):j=i%10i=i//10print(j) #依次输出五位数的每一位(由高位到低位)i=12345for a in range(5,0,-1):j=i//10**(a-1)i=i%10**(a-1)print(j) #打印菱形for i in range(-3,4):j…

    Linux干货 2018-03-25
  • Varnish基础进阶

    Varnish基础进阶 前言 互联网早已惠及全人类, 我们可以通过网络与家人、朋友进行实时通信, 也能通过网络随时随地在各大电商站点上购物, 我们访问web站点的速度也越来越快, 这背后都是有很多精巧的架构以及各种先进的技术来支撑的, 我们就今天主要聊聊Web的缓存技术, 对于当今的互联网来说, Cahe Is King, 缓存真的有那么神奇么? 就由我来带…

    Linux干货 2016-04-19
  • 一起学DNS系列(十四)DNS查询工具之DIG的使用(1)

      这几节主要讲2个常用的DNS的命令行诊断工具,分别是linux下的DIG和windows下的NSLOOKUP,我们首先来说DIG工具。 DIG,全称Domain Information Groper。原本是Linux平台上BIND服务器诊断的工具(已上传至附件),现在已经有了windows的版本,这节就是利用此工具在windows环境下来做一些…

    2015-03-17