第十周-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.www58058.com/87812

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

相關推薦

  • 高級文件系統管理之mdadm與lvm的創建

    ※配置配額系統 磁盤配額就是管理員可以為用戶所能使用的磁盤空間進行配額限制,每一用戶只能使用最大配額范圍內的磁盤空間,比如一些網盤就是基于這個功能來做的,分配給用戶固定的空間,花錢買,可以將空間設置的更大。 功能作用 磁盤配額可以限制指定賬戶能夠使用的磁盤空間,這樣可以避免因某個用戶的過度的使用磁盤空間造成其它用戶無法運行或工作甚至影響系統運行。這個功能不止…

    Linux干貨 2016-08-27
  • 磁盤陣列RAID

    磁盤陣列RAID 什么是RAID RAID的全稱是Redundant Array of Inexpensive Disks 可以釋義為 廉價磁盤冗余陣列,后來的RAID里的字母I被認為是Independent,即獨立的磁盤冗余陣列。 RAID的作用 由于服務器中磁盤讀寫率太大,所以磁盤經常損壞,raid可以讓壞了一塊磁盤時,服務器不至于巖機。當然這只是其中的…

    Linux干貨 2017-06-18
  • N22-℡浮生.若夢 ╮第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel/ /home/tuser1 ~]# chmod -R 700 /home/tuser1 ~]#&nbsp…

    Linux干貨 2016-09-19
  • 馬哥教育網絡班22期+第5周課程練習 忍者亂太郎喻成

    1、顯示當前系統上root、fedora或user1用戶的默認shell;   以root為例 awk -F':' '$1 ~ /root/ {print $7} ' /etc/passwd 2、找出/etc/rc.d/…

    Linux干貨 2016-10-09
  • linux中數組的定義與使用

            我們常說,程序=指令+數據,往細一點的方向說,指令具體指的有哪些?數據又有哪些? 總結一下: 指令大概包括,編程語言中的語法關鍵字(如bash編程中的關鍵字有for,while,case,if,until,continue,break),還包括系統中的命令,和一些自己編寫的函數,這些…

    2017-05-23
  • N26-第五周

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@localhost test]# cat /etc/passwd | grep -E “^(root|fedora|user1)\>” |cut -d: -f  1,7 root:/bin/bash user1:/bin/bash …

    Linux干貨 2017-02-26
欧美性久久久久