第十周-Centos启动流程及Shell脚本编程

一、CentOS启动流程

POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 设定运行级别 –> 系统初始化脚本 –> 关闭或启动对应级别下的服务 –> 启动终端

1.POST:加电自检,检查硬件设备是否存在

用于实现POST的代码在主板上ROM(CMOS)芯片上

BIOS:Basic Input and Output System 基本上输入输出系统,固化在ROM芯片上

2.Boot Sequence:

按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备;

bootloader:引导加载器,程序;

提供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;

(1)Windows上引导加载器:ntloader

(2)Linux上引导加载器:

LILO:短小精悍的linux加载器,1024柱面之后无法加载,现在多用于安卓手机启动

GRUB:Grand Uniform Bootloader统一引导加载器

GRUB 0.X(CentOS 5/6):Grub Legacy

GRUB 1.X(CentOS 7):Grub2,完全重写,设计理念上很大改变

3.Kernel实现功能

kernel自身初始化,实现功能

—> 探测可识别到的所有硬件设备;

—> 加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

—> 以只读方式挂载根文件系统;

—> 运行用户空间的第一个应用程序:/sbin/init

4./sbin/init管理用户空间服务进程

init程序的在不同CentOS版本上类型:

CentOS 5及以前:SysV init 配置文件:/etc/inittab

CentOS 6:Ubantu研发的Upstart 配置文件:/etc/inittab /etc/init/*.conf

CentOS 7:Systemd 配置文件:/usr/lib/systemd/system/, /etc/systemd/system/

二、为运行于虚拟机上的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/                                                  #第二个分区为rootfs
mkdir -v /mnt/minilinux/{etc,bin,sbin,lib,lib64,var,proc,usr,sys,boot,dev,tmp}   #创建rootfs所需目录
mount /dev/sdb1 /mnt/minilinux/boot/                                             #挂载第一分区为启动分区
grub-install --root-directory=/mnt/minilinux /dev/sdb                            #安装grub
[root@N5 桌面]# ls /mnt/minilinux/boot/grub/                                     #查看grub是否安装成功
device.map     iso9660_stage1_5   stage1           xfs_stage1_5
e2fs_stage1_5  jfs_stage1_5       stage2
fat_stage1_5   minix_stage1_5     ufs2_stage1_5
ffs_stage1_5   reiserfs_stage1_5  vstafs_stage1_5

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

cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/minilinux/boot/initramfs.img   #复制ramdisk文件
cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/minilinux/boot/vmlinuz               #复制kernel文件

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/         #复制程序依赖库文件
[root@N5 桌面]# chroot /mnt/minilinux/                                           #chroot测试
bash-4.1# ls
bin  boot  dev  etc  lib  lib64  lost+found  proc  sbin  sys  tmp  usr  var
bash-4.1# exit

4.为grub提供配置文件

vi /mnt/minilinux/boot/grub/grub.conf           #创建grub配置文件,并写入如下配置;
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

注:如不在内核启动参数里写入selinux=0,可能会导致无法开机

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

新建一个虚拟机并设置硬盘为现有硬盘 第十周-Centos启动流程及Shell脚本编程

启动后Grub正常 第十周-Centos启动流程及Shell脚本编程

正常开机 第十周-Centos启动流程及Shell脚本编程

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

1.制作Ks文件

yum -y install system-config-kickstart #安装Kickstart程序
[root@N4 桌面]# system-config-kickstart #使用Kickstart图形化工具
设置为http方式安装系统

第十周-Centos启动流程及Shell脚本编程

2.创建引导镜像

[root@N4 桌面]# mkdir /root/miniboot
[root@N4 桌面]# cp -r /media/CentOS_6.5_Final/isolinux/ /root/miniboot/
[root@N4 桌面]# cp /root/ks.cfg /root/miniboot/
[root@N4 桌面]# vi /root/miniboot/isolinux/isolinux.cfg 
#将第一个label修改为如下配置
label linux
  menu label ^Auto Ks Network Install
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg
#创建iso镜像文件
[root@N4 桌面]# 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/

3.新建一个虚拟机进行测试

可以看到第一项已经被改为Auto Ks Network Install,回车进入

第十周-Centos启动流程及Shell脚本编程

已经开始自动安装了

第十周-Centos启动流程及Shell脚本编程

四、写一个脚本

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

start: 输出“starting 脚本名 finished.” …

(2) 其它任意参数,均报错退出; #!/bin/bash

case $1 in
  start)
 echo "starting $0 finished"
  ;;
  stop)
 echo "stop $0 finished"
  ;;
  restart)
 echo "restart $0 finished"
  ;;
  status)
 echo "status"
  ;;
  *)
 echo "error"
 exit 1
  ;;
esac

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

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

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

#!/bin/bash

if [ $# -lt 1 ];then
echo "please input '$0 username'"
exit 1
fi
while true;do
  if who | grep $1 &>/dev/null ;then
     echo "user $1 is loggin"
     exit 0
  fi
 sleep 3
done

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

cpu) display cpu info

mem) display memory info

disk) display disk info

quit) quit

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

#!/bin/bash
cat <<EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF
echo
read -p "please input your choice: " input

while true;do

        case $input in
        cpu)
           lscpu
           exit 0
            ;;
        mem)
           free -m
           exit 0
            ;;
        disk)
           fdisk -l
           exit 0
            ;;
        quit)
           exit 0
            ;;
        *)
           echo "argument error"
           read -p "please input your choice: " input
            ;;
        esac
done

七、写一个脚本

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

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

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

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

#!/bin/bash

userinfo () {
   echo
   grep $user /etc/passwd | awk -F: '{print "Uid is "$3" Shell is "$7}'
   echo
}

while true;do
 read -p "Please input username or quit: " user
   if [ $user == "quit" ];then
      exit 0
   elif id $user &>/dev/null;then
      userinfo
   else
      echo "user not exist,input agin"
   fi
done

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87812

(0)
N27_whatN27_what
上一篇 2017-10-14 17:51
下一篇 2017-10-15

相关推荐

  • 进程和计划任务

    进程概念 内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能等 Process:运行中的程序的一个副本,是被载入内存的一个指令集和     进程ID(Process ID,PID)号码被用来标记各个进程     UID,GID和SELinux语境决定对文件系统…

    Linux干货 2016-09-13
  • 计算机组成原理

    计算机组成原理 计算机概述 计算机的基本组成: ·         存储器:     实现记忆功能的部件用来存放计算程序及参与运算的各种数据 ·         运算器:     负责数据的算术运算和…

    Linux干货 2016-10-31
  • 系统自动化安装

    本章内容 系统安装过程配置anaconda自动化安装系统 安装程序 CentOS系统安装 系统启动流程: bootloader–>kernel(initramfs)–>rootfs–>/sbin/init anaconda: 系统安装程序 tui: 基于图形库curses的文本窗口 gui:图形窗口 安装程序启动过程 MBR…

    Linux干货 2016-09-19
  • 网络配置的常用工具

    一、网络配置的常用工具     例如:                ifcfg:ifconfig、route、netstat    &nb…

    Linux干货 2016-09-09
  • 简述动静分离

        今天来简述一下如何实现wordpress的动静分离以及读写分离      首先来放出大图。   1.来看图说话     首先来介绍一下这张图    最前端的两台机器是  负责调度后端主机请求动…

    2017-05-18
  • lvs 基本概念

    LVS(linux virtual machine) 的简写,是一个虚拟的服务器集群系统,主要用于4层负载均衡。 宗旨: 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器. 很好的可伸缩性(Scalability) 很好的可靠性(Reliability),应该还是高可用吧 很好的可管理性(Manageability…

    Linux干货 2015-09-14