N22-第十周作業

第十周    
1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
    POST–>BootSequence(BOIS)–>BootLoader(MBR)–>Kernel(ramfs或者ramdisk)–>rootfs–>rootfsswitch–>/sbin/init–>/etc/inittab,/etc/init/*.conf–>設定默認運行的級別–>系統初始化腳本–>關閉和開啟對應級別下的服務–>啟動終端
    POST:檢測硬件設備,包括硬盤內存等等
    BootSequence:主要是設定BIOS的啟動順序。
    BootLoader:根據BIOS設定的啟動順序去加載啟動文件,位于磁盤中的MBR部分
    Kernel:把ram空間當成磁盤空間使用,形成一個小的rootfs,然后去加載內核文件
    rootfs:加載真正的根文件系統
    rootswitch:完成兩個根的轉換。
    /sbin/init:執行第一個用戶空間程序,這個程序會引導以后的用戶空間的初始化過程
    /etc/inittab,/etc/init/*.conf:加載init級別加載/etc/init/*.conf 這些配置文件。
    設定默認運行的級別:根據加載的inittab文件設定的init級別去定義init級別
    系統初始化腳本:
    關閉和開啟對應級別下的服務:開啟和關閉當前init級別下的服務信息
    啟動終端:啟動終端
    
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
  (1) 為硬盤新建兩個主分區;并為其安裝grub;
  (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
  (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
  (4) 為grub提供配置文件;
  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
  # fdisk /dev/sdb
  # partx -a /dev/sdb
  # mount /dev/sdb1 /mnt/boot
  # mount /dev/sdb2 /mnt/sysroot
  # grub-install –root-directory=/mnt/sysroot /dev/sdb
  # cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz
  # cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img
  # cp /boot/grub/grub.conf /mnt/boot/grub/grub.conf
  # vim /mnt/boot/grub/grub.conf
            default=0
            timeout=5
            hiddenmenu
            title CentOS 6 (test new)
            root (hd0,0)
            kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
            initrd /initramfs.img
  # mkdir -pv /mnt/sysroot/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp}
  # cp /bin/{bash,ls,cat} /mnt/bin
  # cp `ldd /bin/{bash,ls,cat}|grep -eo "/lib.*[[:space:]]"| sort -u` /mnt/lib
  # sync
  # init 6
  創建一個新的虛擬機掛載掛載新的硬盤然后啟動。
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
4、寫一個腳本
  (1) 能接受四個參數:start, stop, restart, status
   start: 輸出“starting 腳本名 finished.”
   …
  (2) 其它任意參數,均報錯退出;
    #!/bin/bash
    #
    case $1 in
    start)
            echo "starting $0 finished."
            ;;
    stop)
            echo "stoping $0 finished."
            ;;
    restart)
            echo "restarting $0 finished."
            ;;
    status)
            echo "show $0 status."
            ;;
    *)
            echo "The para error"
            exit
    esac

5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
  (1) 如果登錄了,則顯示用戶登錄,腳本終止;
  (2) 每3秒鐘,查看一次用戶是否登錄;
    #!/bin/bash
    #
    while [ 0 -eq 0 ];do
            if who|grep "magedu" &>/dev/null;then
                    echo "The user magedu login already"
                    exit 44
            fi
            sleep 3
            echo "wait user magedu login"
    done
    或者
    #!/bin/bash
    #
    until [ 1 -eq 2 ];do
            if who|grep "magedu" &> /dev/null;then
                    exit 22
            fi
            sleep 3

    done

6、寫一個腳本,顯示用戶選定要查看的信息;
   cpu) display cpu info
   mem) display memory info
   disk) display disk info
   quit) quit
   非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
    #!/bin/bash
    #
    echo -e "cpu) display cpu info\nmem) display memory info\ndisk) display disk info\nquit) quit\n"
    while [ 0 -eq 0 ];do
    read -p "please input you choice: " i
    case $i in
    "cpu")
            lscpu
            break
            ;;
    "mem")
            free -m
            break
            ;;
    "disk")
            df -lh
            break
            ;;
    "quit")
            echo "quit"
            break
            ;;
    *)
            echo "Eror choice,please input again"           
            ;;
    esac
    done

7、寫一個腳本
  (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
  (2) 提示用戶輸入一個用戶名或輸入“quit”退出;
    當輸入的是用戶名,則調用函數顯示用戶信息;
    當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
    #!/bin/bash
    #
    function User {
            echo "UID=`id -u $yonghu`"
            SHELL=`grep $yonghu /etc/passwd|awk -F: '{printf $7}'`
            echo "SHELL=$SHELL"
    }
    while [ 0 -eq 0 ];do
    read -p "please input a para(A user or quit): " yonghu
    if id $yonghu&>/dev/null;then
            User
    elif [ $yonghu == "quit" ];then
            break
    else
            echo -e "no such this user\n"
    fi
    done
    echo "End"

8、寫一個腳本,完成如下功能(使用函數)
   (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
   (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
   (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
    #!/bin/bash
    #
    sys=/mnt/sysroot
    read -p "Input a command: " comd
    path=`whereis $comd|awk '{print $2}'`
    if [ -d `dirname ${sys}${path}` ];then
            cp $path ${sys}${path}
    else
            mkdir -p ${sys}${path}
            cp $path ${sys}${path}
    fi
    for i in $(ldd $path|grep -o "/.*lib.*\.so.*\.[^[:space:]]");do
            if [ -d `dirname ${sys}$i` ];then
                    cp -r $i `dirname ${sys}$i`
            else
                    mkdir -p ${sys}`dirname ${sys}$i`
                    cp -r $i `dirname ${sys}$i`
            fi
    done

   

原創文章,作者:N22-北京-喜歡就好,如若轉載,請注明出處:http://www.www58058.com/56922

(0)
N22-北京-喜歡就好N22-北京-喜歡就好
上一篇 2016-11-07 10:02
下一篇 2016-11-07 10:05

相關推薦

  • 第十六周

    1、源碼編譯安裝LNMP架構環境;  安裝必要的包組和依賴的包 yum groupinstall “Development Tools” “Development Libraries”  yum install wget openssl-devel ncurses-devel cmake p…

    Linux干貨 2017-08-15
  • shell腳本編程之if條件判斷與for、while、until循環

    一、if語句 語法: if 測試條件1 ; then        分支1 elif  測試條件2; then        分支2 … else&nbsp…

    Linux干貨 2015-08-24
  • 程序包管理之yum:yum源\庫配置以及源碼編譯安裝

    程序包管理之yum yum概念 什么是yum 由yellow dog這一發行版的開發者Terra Soft研發。 使用rpm命令安裝軟件包時,解決不了依賴關系,就會很麻煩,使用yum可以自行解決依賴關系。 刪除某個安裝包,如果是用rpm刪除,就卸載掉某個依賴關系從而導致其他軟件包不能使用。 yum特點 可同時配置多個軟件倉庫 簡潔的配置文件/etc/yum.…

    Linux干貨 2016-11-22
  • 命令read

    read命令是一個bash命令,它用于從鍵盤或標準輸入中讀取文本.我們可以使用read以交互的形式讀取來自用戶的輸入.并且read還提供一種不需要按回車就能夠輸入參數的方法. read可以從標準輸入中讀取單獨的一行,或者使用-u選項,從文件描述符FD中讀取.并且這單獨的行被分隔成多個域,第一個詞被賦值給第一個變量,第一個賦值給第二個變量,以此類推,直到剩下的…

    Linux干貨 2016-08-12
  • 第二周作業

    # 第二周作業 ##1.文件管理類命令 ###cp   復制 * 單元復制 如果目標文件不存在,會自動創建 如果已經存在,會覆蓋 * 多源復制 目標必須是目錄,分別復制每個文件至目標目錄中,并保持原名 > -i: 交互提醒 > -f: 強制覆蓋,不交互 > -r: 遞歸復制目錄 > -d: 如果復制的是符號鏈接,不找源文件,…

    Linux干貨 2016-12-09
  • 深入了解正則表達式與grep應用

    剛開始學習正則表達式時候,感覺和看無字天書沒什么分別,迷茫了一段時間后,仔細去理解,慢慢你會發現也沒什么的。認真去鉆研了,多練習,是可以理解他們的含義的。也許正如老師所言,學習linux ,入門的確很陡峭,對于我這個基礎薄弱,智商低于80的人來說的確很吃力。關于正則概念的就不去描述了,說起來真的不好表達,下面通過一些實例來進行深入理解吧。 1.顯示當前系統上…

    2017-11-01

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-10 13:23

    寫的還是比較詳細的,有個地方 需要注意下 while [ 0 -eq 0 ] 其實就是 while true 做循環. 還有那個until 的用法也需要看下。加油~

欧美性久久久久