转至:http://www.178linux.com/88910

一、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

第一步:POST加电自检

主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序。

第二步:Boot Sequence(选择启动设备以加载MBR)

主要实现的功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。这一步的实现是这样的:根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后第一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。

第三步:加载bootloader(MBR)

这一步实现起来的步骤比较多,前面的BIOS通过读取并执行启动设备的MBR中的bootloader,而bootloader要实现的功能就是提供一个菜单给用户,让用户去选择要启动的系统或不同的内核版本,然后把用户选择的内核版本加载至RAM中的特定空间,接着在RAM中解压、展开,而后把系统控制权移交给内核。

第四步:Kernel自身初始化

Kerenl在得到系统控制权之后,首先要进行自身初始化

(1)探测可识别到的所有硬件设备;

(2)加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于ramdisk加载驱动);

(3)以只读方式挂载根文件系统;

(4)运行用户空间的第一个应用程序:/sbin/init.

第五步:init管理用户空间服务进程

init可以理解成是内核派来管理用户空间的使者,就好像天使代表上帝来访问人间一样。init这个初始化程序会根据其配置文件执行一系列操作。

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

1.为硬盘新建两个主分区;并为其安装Grub

echo “- – -” > /sys/class/scsi_host/hos0/scan

fdisk /dev/sdb

mkfs.ext4 /dev/sdb1

mkfs.ext4 /dev/sdb2

mount /dev/sdb2 /mnt/minilinux/

mkdir -v /mnt/minilinux/{etc,bin,sbin,lib,lib64,var,proc,usr,sys,boot,dev,tmp}

mount /dev/sdb1 /mnt/minilinux/boot/

grub-install –root-directory=/mnt/minilinux /dev/sdb

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

cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/minilinux/boot/initramfs.img

cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/minilinux/boot/vmlinuz

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

cp /bin/{bash,ls,cat} /mnt/minilinux/bin/

cp $(ldd /bin/{bash,ls,cat} |grep -o “/.*\.[0-9]”) /mnt/minilinux/lib64/

chroot /mnt/minilinux/

4.为grub提供配置文件

vi /mnt/minilinux/boot/grub/grub.conf

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Minilinux

root (hd0,0)

kernel /vmlinuz root=/dev/sda2 selinux=0 init=/bin/bash quiet

initrd /initramfs.img

5.将新的硬盘设为第一启动项并能正常启动目标主机

三、制作一个Kickstart文件以及一个引导镜像,描述其过程

1、制作Ks文件

yum -y install system-config-kickstart

system-config-kickstart

2、创建引导镜像

mkdir /root/miniboot

cp -r /media/CentOS_6.5_Final/isolinux/ /root/miniboot/

cp /root/ks.cfg /root/miniboot/

vim /root/miniboot/isolinux/isolinux.cfg

mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS 6 miniboot” -c isolinux/boot.cat -b isolinux/isolinux.bin -o  /root/boot.iso   /root/miniboot/

四、写一个脚本

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

start:输出”starting脚本名finished”

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

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

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

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

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

cpu)display cpu info

mem)display memory info

disk)display disk info

quit)quit

七、写一个脚本

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

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

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

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

CentOS启动流程及Shell脚本编程练习的更多相关文章

  1. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  2. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  3. Shell脚本编程(一):初识shell script

    Shell简介 Shell是一个命令解释器,它是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核 ...

  4. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  5. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  6. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  7. 【Linux】Shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  8. Shell脚本编程具体解释

    第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l ...

  9. 30分钟快速学习Shell脚本编程

    什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...

随机推荐

  1. golang中结构体中的嵌套

    package main import "fmt" type Base struct { name string } func (b *Base) m1() int { retur ...

  2. Nginx命令(全局配置文件与模块)

    目录 一:Nginx命令 二:Nginx全局配置文件 1.nginx全局配置 2.过滤出Nginx 三:Nginx网址模块(解析) 一:Nginx命令 1.-v : 打印版本号 [root@web01 ...

  3. 如何使用c#编写单片机程序

    ​ 因为个人喜爱想研究单片机,但是不太会c,然后再找资料研究有没有其他的方法发现国外的c# nanoframework 框架可以编写单片机程序,本文我将会用自己踩过的坑来总结一些c#编写单片机的一些经 ...

  4. 源码安装 python3.7

    yum install libffi-devel openssl -y wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz ta ...

  5. SpringBoot整合Nacos自动刷新配置

    目的 Nacos作为SpringBoot服务的注册中心和配置中心. 在NacosServer中修改配置文件,在SpringBoot不重启的情况下,获取到修改的内容. 本例将在配置文件中配置一个 cml ...

  6. hadoop 支持 LZO 压缩配置

    1)hadoop 本身并不支持 lzo 压缩,故需要使用 twitter 提供的 hadoop-lzo 开源组件.hadoop lzo 需依赖 hadoop 和 lzo 进行编译,编译步骤如下. 编译 ...

  7. C++学习Day 1

    c++的函数需要声明才能再写他的定义,声明可以写多次,如果执行在main之前可以不写,全写不会犯错,现在看好像c++的函数定义里没有out,也没有变量的public和private(后面有再改) 声明 ...

  8. vue element InfiniteScroll 无限滚动 入坑记录

    select_law_by_tag() { this.laws_loading.is_loading = true; this.laws_loading.no_more = false; this.e ...

  9. new方法实现原理

    new方法实现原理 完整的创建一个可用的对象:Person *p=[Person new]; new方法的内部会分别调用两个方法来完成3件事情: (1)使用alloc方法来分配存储空间(返回分配的对象 ...

  10. 用maven在MANIFEST.MF文件中的Class-Path中增加当前目录(.)

    Xml代码 <configuration> <archive> <manifest> <mainClass>com.dongwei.test.Main& ...