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

相关推荐

  • netstat

    netstat命令 netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等 1 常用选项: -a :(all)显示所有选项,默认不显示LISTEN相关 -t :(tcp)仅显示tcp相关选项 -u :(…

    Linux干货 2017-05-07
  • 第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;   (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]# fdis…

    Linux干货 2017-07-04
  • keepalived单主模型和nginx双主模型

    主程序:keepalived 主配置文件:/etc/keepalived/keepalived.conf 单主模型ipvs: global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.…

    Linux干货 2017-08-08
  • 三次握手,四次挥手

    TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。 在谈及TCP建立连接和释放连接过程,先来简单认识一下TCP报文段首部格式的的几个名词(这里只是简单说明,具体请查看相关教程)下面是TCP报文格式图:     序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的…

    2017-09-03
  • OpenStack私有云部署

    前言 相信你一定对“云主机”一词并不陌生吧,通过在Web页面选择所需主机配置,即可快速定制一台属于自己的虚拟主机,并实现登陆操作,大大节省了物理资源。但这一过程是如何实现的呢?本文带来OpenStack Icehouse私有云实战部署。 OpenStack 简介 OpenStack是由网络主机服务商Rackspace和美国宇航局联合推出的一个开源项目,Ope…

    2016-12-19
  • 权限解析

    一、文件权限        用户的创建的每个文件,都有自己特定的属性信息,比如文件类型,文件的权限,文件的所有者和所属组,以及文件的修改日期等属性组成。        文件的权限即是指文件本身赋予了用户什么样的权力,也就…

    2017-05-30