第十周-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 16:07

相关推荐

  • DNS实验

      建立DNS服务器(正向解析) linux没有缓存 windows有dns缓存 权威结果,非权威结果 无论是正向解析数据库还是反向解析数据中  写管理员邮件地址或完整域名(FQDN)都要再后面加上点。否则系统会自动不上区域名称。 实验环境先清理防火墙规则,关闭防火墙. centos7 systemctl disabl…

    Linux干货 2016-11-01
  • Linux操作系统发展史

    内容摘要:Linux操作系统的诞生,Linux 的发展,Linux的特性决定其迅猛发展,Linux的应用领域与发展前景 关键词:Linux的发展  前景   1.  Linux操作系统的诞生 在1981年到1991年十年间,微软公司的MS-DOS系统一直主宰操作系统的市场,其价格十分昂贵,另一个操作系统UNIX的经销商为了高利润…

    Linux干货 2016-10-14
  • FHS文件系统各目录功能

        FHS文件系统各目录功能 前言                  FHS (Files system Hiserarchy Standard)…

    Linux干货 2016-10-17
  • 磁盘配额、阵列与逻辑卷

    一、磁盘配额 在内核中执行以文件系统为单位启用对不同组或者用户的策略不同 根据块或者节点进行限制执行软限制(soft limit)硬限制(hard limit) 步骤一:获得文件系统支持临时有效:mount -o remount,usrquota,grpquota {mount_point|device}永久有效:写入配置文件 /etc/fstab 中检查文…

    Linux干货 2016-08-29
  • 2016/10/26作业:用户和组的相关配置文件

    linux系统是通过文件来保存配置的,其中关于用户和组的配置文件包括以下几个: /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/login.defs /etc/default/useradd /etc/passwd 存放用户信息的配置文件,其基本格式如下 root:x:0:0:root:/root:/…

    Linux干货 2016-10-26
  • M22 xfs文件系统命令总结

    Centos6.0及之前的默认文件系统是ext系列的,而在最新的Centos7上却使用了xfs作为默认的文件系统。在Centos7中xfs文件系统包括如下命令: xfs_admin:修改xfs文件系统的参数,需要先卸载分区 用法:xfs_admin [ -eflpu ] [ -c 0|1 ] [ -L label ] [ -U uuid ] device x…

    Linux干货 2017-03-16