馬哥教育21期網絡班—第10周課程+練習—-成長進行時–不退步

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

POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定默認運行級別 --> 系統初始化腳本 --> 關閉或啟動對應級別下的服務 --> 啟動終端
POST:
加電自檢;
ROM:CMOS
BIOS:Basic Input and Output System :基本輸入輸出系統
主機先激活CPU
ROM+RAM
檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常Boot Sequence(BIOS) 
按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備;bootloader: 引導加載器,程序Boot Loader (MBR)446: bootloader64: fat2: 55AAGRUB: 
stage1:stage1的代碼直接存在于MBR,是后續引導的入口,無識別文件系統的能力。
stage1.5: MBR之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統,具有識別文件系統的能力。
stage2:加載磁盤分區(/boot/grub/)
kernel:
        自身初始化:
        探測可識別到的所有硬件設備;
        加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)
        以只讀方式掛載根文件系統;
        運行用戶空間的第一個應用程序:/sbin/init
init程序的類型:
          SysV: init, CentOS 5
            配置文件:/etc/inittab
          Upstart: init, CentOS 6
            配置文件:/etc/inittab, /etc/init/*.conf          Systemd:systemd, CentOS 7 自己能加載服務
            配置文件:/usr/lib/systemd/system, /etc/systemd/systemramdisk --> ramfs            CentOS 5: initrd,  工具程序:mkinitrd           CentOS 6: initramfs, 工具程序:mkinitrd, dracutsh
設置運行級別
運行級別:為了系統的運行或維護等應用目的而設定;          0-6:7個級別            0:關機            1:單用戶模式(root, 無須登錄), single, 維護模式;            2: 多用戶模式,會啟動網絡功能,但不會啟動NFS;維護模式;            3:多用戶模式,正常模式;文本界面;            4:預留級別;可同3級別;            5:多用戶模式,正常模式;圖形界面;            6:重啟
/etc/rc.d/rc.sysinit: 系統初始化腳本
          (1) 設置主機名;
          (2) 設置歡迎信息;
          (3) 激活udev和selinux; 
          (4) 掛載/etc/fstab文件中定義的文件系統;
          (5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統;
          (6) 設置系統時鐘;
          (7) 激活swap設備;
          (8) 根據/etc/sysctl.conf文件設置內核參數;
          (9) 激活lvm及software raid設備;
          (10) 加載額外設備的驅動程序;
          (11) 清理操作;
  • 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文件以及一個引導鏡像。描述其過程。

創建kickstart文件的方式:
      (1) 直接手動編輯;
        依據某模板修改;
      (2) 可使用創建工具:system-config-kickstart (CentOS 6)
        依據某模板修改并生成新配置;
檢查ks文件的語法錯誤:ksvalidator
      # ksvalidator /PATH/TO/KICKSTART_FILE
創建引導光盤:
      # 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) 每3秒鐘,查看一次用戶是否登錄; #!/bin/bash

#!/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 mem) display memory info disk) display disk info quit) quit 非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;

#!/bin/bash
        #
        cat << EOF
        cpu) show cpu information;
        mem) show memory information;
        disk) show disk information;
        quit) quit
        ============================
        EOF

        read -p "Enter a option: " option
        while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
            read -p "Wrong option, Enter again: " option
        done

        if [ "$option" == 'cpu' ]; then
            lscpu
        elif [ "$option" == 'mem' ]; then
            cat /proc/meminfo
        elif [ "$option" == 'disk' ]; then
            fdisk -l
        else
            echo "Quit"
            exit 0
        fi
  • 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

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

(0)
N21_ DominicN21_ Dominic
上一篇 2016-09-15
下一篇 2016-09-15

相關推薦

  • linux系統啟動流程

    linux系統啟動流程 CentOS(5、6)系統啟動流程 具體流程: 加載BIOS的硬件信息與進行自我測試,并依據設置取得第一個可啟動的設備; 讀取并執行第一個啟動設備內MBR的boot Loader 依據boot Loader的設置加載Kernel,Kernel會開始檢測硬件與加載驅動程序 硬件驅動成功后,Kernel會主動調用init進程,而init會…

    Linux干貨 2016-09-11
  • 馬哥教育21期網絡班—第12周課程+練習—-LAMP練習

    1、請描述一次完整的http請求處理過程; (1) 建立或處理連接:接收請求或拒絕請求 (2) 接收請求: 接收來自于網絡的請求報文中對某資源的一次請求的過程; 持久連接:接收到請求不會斷開這個請求 非持久連接:一個連接請求斷開一次 并發訪問響應模型(Web I/O): 單進程I/O結構:啟動一個進程處理用戶請求,而且一次只處理…

    Linux干貨 2016-09-26
  • 基于CentOS7實現LAMP(上)

    基于CentOS7實現LAMP(上)   情景模式: (1)php以模塊方式運行  提供兩個虛擬主機;                    &nbs…

    Linux干貨 2016-08-22
  • 系統自動化安裝

    系統自動化安裝:實現同時部署多臺操作系統,批量進行安裝linux系統 CentOS系統安裝     系統啟動流程:       bootloader–>kernel(initaramfs)–>rootfs–>/sbi…

    Linux干貨 2016-09-22
  • vsftpd基于mysql實現用戶認證

    一、前言   ftp介紹:     ftp全程是File Transfer Protocol(文件傳輸協議),方便于實文件交換;但是在文件傳輸以及賬號密碼發送時都是以明文傳輸,因此是一個明文協議 ftp是C/S方式:   常見的客戶端有:     GUI方式:browers、FileZilla-cl…

    Linux干貨 2015-06-15
  • M20 – 1- 第二周(2):硬鏈接與軟鏈接的區別

    在講硬鏈接與軟鏈接的區別之前,我們首先了解inode,了解inode讓我們更容易理解何為硬鏈接和軟鏈接。 inode概念        何為inode,inode就是索引節點,而inode表中存放著文件的元數據,何為元數據,元數據就是文件名稱、大小、時間戳、所有者、權限、inode等信息,而文件中的內容就是文件的數據,…

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