馬哥教育網絡班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
下一篇 2016-09-08

相關推薦

  • 為什么新建文件時,所在文件系統還有大量剩余空間,卻提示此文件系統空間已滿??

    一:答疑解惑:    這是因為該文件所在分區的inode號被用盡,雖然分區的剩余容量還有很多。 二:基本原理:   inode為何物block又為何物?以及,inode都有哪些特征?   ①我們知道,在linux文件系統中,文件名只是計算機用來給人看,而計算機本身只識別文件所對應的數字或編號,而這個編號或數字…

    2017-07-22
  • 淺談編譯kernel+busybox構建擁有遠程ssh登錄和web功能最小linux系統(一)

    實驗環境win7+VM11.1 大致過程總攬 1,硬件準備以及查看硬件設備型號(不用擔心,這些都是VM虛擬出來的) 2,編譯環境的配置以及下載內核源碼以及編譯內核 3,編譯busybox,以及提供系統正常運行的配置文件,初步運行linux系統 4,編譯安裝dropbear提供ssh服務 5,安裝nginx;提供web服務 一,硬件準備以及查看硬件設備型號 由…

    Linux干貨 2015-09-22
  • Linux 基礎(三)——用戶管理&正則表達式

    1、  列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d " " -f1 | uniq 2、  取出最后登錄到當前系統的用戶的相關信息。 last -1 | cut -d " " -f1 | head -1 | id 3、  …

    Linux干貨 2016-11-08
  • 計算機和linux基礎

    計算機的組成及其功能 計算機硬件主要由5部分組成:運算器 、控制器、存儲器、input、output。 但是這和我們平時見到的計算機不一樣?我們平時見到的計算機有CPU,內存,硬盤,顯示器,鼠標鍵盤,顯卡、主板等。這些東西也都歸在以上五類設備中。下面我們簡單介紹一下計算機這五個組成部分。 運算器: 運算器是計算機中做運算的部分,可以執行各種指令,加減乘除,與…

    Linux干貨 2016-09-16
  • SElinux 管理

    SELinux: Secure Enhanced Linux(安全強化的linux) SElinux安全上下文是由五個元素組成的: ①User:指示登錄系統的用戶類型,如root,user_u,system_u,多數本地進程都屬于自由(unconfined)進程 ②Role:定義文件,進程和用戶的用途:文件:object_r,進程和用戶:syste…

    Linux干貨 2016-09-26
  • 8.5_Linux習題練習和作業

    課堂練習題 1、找出ifconfig命令結果中本機的所有IPv4地址 # ifconfig | grep -oE "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|2…

    Linux干貨 2016-08-10
欧美性久久久久