馬哥教育網絡班21期+第10周課程練習

1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)

POST(Power On Self Test):

檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常。

加載BIOS(Basic Input and Output System):

根據在BIOS中設置的系統啟動順序來搜索用于啟動系統的驅動器(硬盤、光盤、U盤等)。在平時的啟動過程中,大多為硬盤啟動,基于此,BIOS會讀取硬盤的第0磁道的第1扇區(MBR)的內容來引導啟動。

BOOT Sequence:

按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備

MBR(Master Boot Record):

馬哥教育網絡班21期+第10周課程練習

三部分組成,分別是主引導程序(Bootloader)、硬盤分區表DPT(Disk Partition Table)和magic number。

Bootloader:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核。

在Linux中常用的主引導程序有LILO(LInux LOader)和GRUB(GRand Uniform Bootloader),此處以GRUB引導為例。

啟動引導程序GRUB:

stage1:stage1的代碼直接存在于MBR,是后續引導的入口,無識別文件系統的能力。
stage1.5: MBR之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統,具有識別文件系統的能力。
stage2:加載磁盤分區(/boot/grub/)

啟動內核:

當stage2被載入內存執行時,首先會解析grub的配置文件/boot/grub/grub.conf,然后加載內核鏡像到內存中,并將控制權轉交給內核。而內核會立即作自身初始化。
  • 探測可識別的所有硬件設備

  • 加載硬件驅動程序(可能會借助于ramdisk加載驅動)

  • 以只讀方式掛載rootfs

  • 運行用戶空間的第一個應用程序:/sbin/init

運行init程序

  • CentOS 5:SysV

  • CentOS 6:Upstart

  • CentOS 7:Systemd

設置默認運行級別

  • CentOS 5:/etc/inittab

  • CentOS 6:/etc/inittab,/etc/init/*.conf

  • CentOS 7:default.target–>/usr/lib/systemd/system/*.target

運行系統初始腳本,完成系統初始化

/etc/rc.d/rc.sysinit

啟動內核模塊

/etc/modules.conf /etc/modules.d/*

關閉對應級別下應關閉的服務,啟動需要啟動的服務

/etc/rc.d/rc#.d/*

執行自定義引導程序

/etc/rc.d/rc.local

設置登陸終端

/sbin/mingetty

2、為運行于虛擬機上的CentOS 6添加一塊新硬盤,提供兩個主分區;

(1)為硬盤新建兩個主分區,并為其安裝grub;

(2)為硬盤的第一個主分區提供內核和ramdisk文件,為第二個主分區提供rootfs;

(3)為rootfs提供bash、ls、cat程序及依賴的庫文件;

(4)為grub提供配置文件;

(5)將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

# mkfs -t ext4 /dev/sdb1 && mkfs -t ext4 /dev/sdb2
# mount /dev/sdb1 /media/boot
# grub-install --root-directory=/media /dev/sdb
# cp /boot/vmlinuz-2.6.32-358.el6.i686 /media/boot/vmlinuz
# cp /boot/initramfs-2.6.32-358.el6.i686.img /media/boot/initrmfs.img
# vim /media/boot/grub/grub.conf
default=0
timeout=5
title centos (express)
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2
    initrd /initrmfs.img
# mount /dev/sdb2 /mnt/sysroot
# sh cpcom.sh 
Enter a command:bash
Enter a command:ls
Enter a command:cat
Enter a command:quit
Quit
新建虛擬機,以新建虛擬磁盤為引導,可以正常啟動!

3、制作一個kickstart文件以及一個引導鏡像,描述其過程;

可使用system-config-kickstart圖形化工具可視化操作完成生成ks文件
制作鏡像:# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/

4、寫一個腳本

(1)能接受四個參數:start、stop、restart、status

start:輸出“starting 腳本名 finished”

(2)其他任意參數,均報錯退出;

#!/bin/bash
read -p "Please enter start,stop,restart or status:" option
case $option in 
start) 
    echo "Starting $0 finished"
    ;;
stop)
    echo "Stopped $0 finished"
    ;;
status)
    echo "The status of $0"
    ;;
restart)
    echo "Restart $0"
    ;;
*)
    echo "Wrong option" && exit 1
    ;;
esac

5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;

(1)如果登錄了,則顯示用戶登錄,腳本終止;

(2)每三秒鐘,查看一次用戶是否登錄

#!/bin/bash
read -p "Please enter a user:" user
while true; do
    if who | grep "^$user" &> /dev/null; then
        break
    fi
    sleep 3 && echo "$user not log."
done
echo "$user logged."

6、寫一個腳本,顯示用戶選定要查看的信息;

cpu) display CPU info

men) dispaly memory info

disk) display disk info

quit) quit

非此四項選擇,則提示錯誤,并請求用戶重新選擇,直到其給出正確的選擇為止;

#!/bin/bash
cat << EOF
cpu) show cpu info;
mem) show memory info;
disk) show disk info;
quit) Quit
=======================
EOF
read -p "Please enter an option:" option 
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
    read -p "Wrong option,enter again:" option
done
case "$option" in 
cpu)
    lscpu
    ;;
mem)
    cat /proc/meminfo
    ;;
disk)
    fdiskc -l
    ;;
quit)
    echo "Quit!" && exit 0
    ;;
esac

7、寫一個腳本

(1)用函數實現返回一個用戶的UID和SHELL,用戶名通過參數傳遞而來;

(2)提示用戶輸入一個用戶名或者輸入“quit”退出;

當輸入的是用戶名,則調用函數顯示用戶信息;

當用戶輸入quit,則退出腳本;進一步的,顯示鍵入的用戶的相關信息后,再次提醒輸出用戶名或quit

#!/bin/bash
userinfo() {
    uid=`id -u $user`
    shell=`finger root -l | grep -o 'Shell.*' | cut -d' ' -f2`
    id $user &> /dev/null
    if [ $? -ne 0 ]; then
     echo "No such user!" && exit 1
    else 
    echo "$user UID :$uid"
    echo "$user SHELL:$shell"
    fi
}
cat << EOF
You could enter a user or string of "quit":
a user:show the uid and shell;
quit:quit the script.
===========================================
EOF
while true; do
read -p "Please enter something:" option
    if [[ $option == "quit" ]]; then 
        echo "Quit!" && exit 0
    else
        user=$option
    fi
    userinfo $user
done

8、寫一個腳本,完成下列功能(使用函數)

(1)提示用戶輸入一個可執行命令的名字,獲取此命令依賴的所有庫文件;

(2)復制命令文件至/mnt/sysroot目錄下的對應rootfs的路徑上,例如,如果復制的文件路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;

(3)復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs路徑上;規則同上面命令相關的要求;

#!/bin/bash
options() {
    for i in $*; do
        dirname=`dirname $i`
    [ -d /mnt/sysroot$dirname ] || mkdir -p /mnt/sysroot$dirname
    [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dirname/
    done
}
while true; do
    read -p "Enter a command:" pidname
    [[ "$pidname" == "quit" ]] && echo "Quit" && exit 0
    bash=`which --skip-alias $pidname`
    if [[ -x $bash ]]; then
        options `/usr/bin/ldd $bash | grep -o "/.*[[:space:]]\{1,\}"`
    options $bash
    else
    echo "No such command!"
    fi
done

原創文章,作者:Jeason,如若轉載,請注明出處:http://www.www58058.com/44521

(0)
JeasonJeason
上一篇 2016-09-08 18:55
下一篇 2016-09-08 18:56

相關推薦

  • Linux Basics-Linux Bash歷史和其概念名詞解釋part1

    Linux Basics-Linux Bash歷史和其概念名詞解釋part1 閱讀本文你將知道:查看更多BashFAQ.pdf   Bash的歷史及其特性   Bash的如何工作   Bash的概念解釋   前提知識:      對linux有一定基礎而且了解Bash的…

    Linux干貨 2016-10-29
  • 編譯安裝lamp框架

    一、 先說說啥叫lamp     1. lamp簡介: Linux Apache Mysql PHP(Python, Perl)的簡稱,下面說說他們之間的關系         Linux:系統運行平臺    &…

    Linux干貨 2015-06-18
  • Linux基礎命令 -管道密切配合使用 tee

    基礎命令和管道密切配合使用  tee     基礎命令:tee   tee命令 功能: 把命令1的STDOUT保存在文件名中,然后管道輸入給命令2; 補充說明:tee指令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件。 使用場景: 1.保存不同階段的輸出 2.復雜管道的故障排除 3.同時查看和記錄…

    Linux干貨 2016-08-03
  • DHCP服務

    dhcp server: DHCP:Dynamic Host Configuration Protocol     arp –> address resolving Protocol     &nbsp…

    Linux干貨 2016-11-01
  • ansible運維自動化工具

      ansible簡介 運維工具分類:         agent:基于專用的agent程序完成管理功能,puppet, func, zabbix, …        agent…

    Linux干貨 2016-11-11
  • 計算機編程簡史圖

       這個圖片太經典了,本來想翻譯的,后來覺得這么經典的圖片可能早已被人翻譯了,簡單的Google一下,果然有人翻譯了。那我就把英文版和中文版都轉過來吧。我們可以看到,其中很大一部分人都和Unix有著不解之緣(參見《Unix傳奇上篇,Unix傳奇下篇》) 英文原版 中文翻譯版 什么也不說了,直接上圖(圖片比較大,單擊圖片看大圖) 計算機編…

    Linux干貨 2015-04-02
欧美性久久久久