馬哥教育網絡班22期+第十周課程練習

1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
    CentOS系統啟動流程為:POST –> BootSequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> rootfs(readonly) –> /sbin/init() –> 設置默認運行級別 –> 運行系統初始化腳本,完成系統初始化 –> 關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務 –> 設置登錄終端[–> 啟動圖形終端]
        1)POST:Power On Self Test,加電自檢;主要檢測系統關鍵硬件設備是否存在物理故障
        2)BootSequence(BIOS)
            BIOS:Basic Input and Output System,基本輸入與輸出系統,存儲于ROM中
            Boot Sequence:引導次序;根據BIOS中的設定,按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備
        3)BootLoader(MBR)
            MBR:Master Boot Record,主引導記錄;前446字節的扇區為bootloader(引導加載器)
            通過讀取設備的MBR啟動GRUB:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本;把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交給內核
        4)Kernel(ramdisk)
            內核初始化:
                探測可識別到的所有硬件設備
                加載硬件驅動程序(有可能會借助于ramdisk加載驅動)
                以只讀方式掛載根文件系統
                運行用戶空間的第一個應用程序:/sbin/init
        5)設置默認運行級別(/etc/inittab)
            例如:id:3:initdefault: 設定默認運行級別為3
        6)運行系統初始化腳本,完成系統初始化(/etc/rc.d/rc.sysinit)
            設置主機名
            設置歡迎信息
            激活udev和selinux
            掛載/etc/fastab文件中定義的所有文件系統
            檢測根文件系統,并以讀寫方式重新掛載根文件系統
            設置系統時鐘
            根據/etc/sysctl.conf文件來設置內核參數
            激活lvm及軟raid設備
            激活swap設備
            加載額外設備的驅動程序
            清理操作
        7)關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務(/etc/inittab)
            去啟動或關閉/etc/rc.d/rc#.d/目錄下的服務腳本所控制的服務:
                K*:要停止的服務;K##*,##表示優先級,數字越小,越是優先關閉;依賴的服務先關閉,而后關閉被依賴的
                S*:要啟動的服務;S##*,##表示優先級,數字越小,越是優先啟動;被依賴的服務先啟動,而依賴的服務后啟動
        8)設置登錄終端(/etc/inittab)
            tty1:2345:respawn:/usr/sbin/mingetty tty1
            ……
            tty6:2345:respawn:/usr/sbin/mingetty tty6

2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
  (1) 為硬盤新建兩個主分區;并為其安裝grub;
  (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
  (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
  (4) 為grub提供配置文件;
  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

在新硬盤sdb上面新增兩個分區sdb1,sdb2,并格式化文件系統
~]# fdisk /dev/sdb
~]# mke2fs -t ext4 /dev/sdb1
~]# mke2fs -t ext4 /dev/sdb2
~]# mount /dev/sdb1 /test/boot
~]# mount /dev/sdb2 /test/rootfs
~]# grub-install --root-directory=/test /dev/sdb 安裝grub
~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /boot/initramfs-2.6.32-642.el6.x86_64.img /test/boot
~]# vim /test/boot/grub/grub.conf
default=0
timeout=5
title CentOS 6 DIY
    root (hd0,0)
    kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/sdb2 selinux=0 init=/bin/bash
    initrd /initramfs-2.6.32-642.el6.x86_64.img
注意:若把sdb設備作為其它機器的第一塊硬盤,root=/dev/sdb2應改為root=/dev/sda2
~]# mkdir -pv /test/rootfs/{bin,dev,etc,home,lib,lib64,media,mnt,proc,root,sbin,sys,tmp,usr,var}
~]# cp /bin/{bash,ls,cat} /test/bin
~]# cp `ldd /bin/{bash,ls,cat} | grep -Eo "/lib[^[:space:]]+"` /test/rootfs/lib64
重啟系統進入BIOS修改第一啟動項為此硬盤,然后保存重啟主機即可

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

安裝system-config-kickstart程序,使用圖形化界面生成kickstart文件
~]# ksvalidator ks.cfg 檢查kickstart文件語法錯誤
~]# mount /dev/cdrom /mnt
~]# cp -r /mnt/isolinux/ /root/myboot/
~]# cp /root/ks.cfg /root/myboot/
~]# vim /root/myboot/isolinux/isolinux.cfg
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg 指明ks文件的位置
~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS6" -c isolinux/boot.cat -b 
isolinux/isolinux.bin -o /root/myboot.iso myboot/ 制作簡易鏡像

4、寫一個腳本
  (1) 能接受四個參數:start, stop, restart, status
   start: 輸出“starting 腳本名 finished.”
   …
  (2) 其它任意參數,均報錯退出;

#!/bin/bash
name=$(basename $0)
case $1 in
start)
    echo "starting $name finished."
    ;;
stop)
    echo "stop $name finished."
    ;;
restart)
    echo "restart $name finished."
    ;;
status)
    echo "status $name finished."
    ;;
*)
    echo "wrong, exit!"
    exit 1
    ;;
esac

5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
  (1) 如果登錄了,則顯示用戶登錄,腳本終止;
  (2) 每3秒鐘,查看一次用戶是否登錄;

#!/bin/bash
while true;do
    if who | grep $1 &> /dev/null;then
        echo "user $1 login!"
        break
    fi
    sleep 3
done

6、寫一個腳本,顯示用戶選定要查看的信息;
   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

while true;do
    read -p "please enter one option: " option
    if [[ $option == "cpu" ]];then
        lscpu
        break
    elif [[ $option == "mem" ]];then
        free -m
        break
    elif [[ $option == "disk" ]];then
        fdisk -l /dev/[sh]d[a-z]
        break
    elif [[ $option == "quit" ]];then
        echo "quit"
        exit 1
    else
        continue
    fi
done

7、寫一個腳本
  (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
  (2) 提示用戶輸入一個用戶名或輸入“quit”退出;
    當輸入的是用戶名,則調用函數顯示用戶信息;
    當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:

#!/bin/bash
fun_user() {
    grep "^$1" /etc/passwd | awk -F: '{printf "UID: %-5s SHELL: %s\n",$3,$7}'
}

while true;do
    read -p "enter one usrname or 'quit': " option
    if [ -z $option ];then
        continue
    elif [[ $option == "quit" ]];then
        echo "quit"
        break
    elif id $option &> /dev/null;then
        fun_user $option
        continue
    else
        echo "this user is not existed!"
        continue
    fi
done

8、寫一個腳本,完成如下功能(使用函數)
   (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
   (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
   (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;

#!/bin/bash
copy_fun() {
    while true;do
        read -p "please input an executable command or 'quit' to exit: " option

        if [ -z "$option" ];then
            continue
        elif [ "$option" == "quit" ];then
            echo "bye!"
            break
        else
            which $option &> /dev/null
            order_state=$?                       
            if [ $order_state -eq 0 ];then
                order_path=$(which $option)
                echo
                echo "the binary file is: $order_path"
                cp --parents $order_path /mnt/sysroot
                echo "the binary file is copy finished!"
                echo
        
                ldd $order_path &> /dev/null
                ldd_state=$?
                if [ $ldd_state -eq 0 ];then
                    echo "shared library dependencies:"
                    declare -a lib_files
                    lib_files=(`ldd $order_path | grep -E -o "/[^[:space:]]+"`)
                    for i in ${!lib_files[*]};do
                        echo ${lib_files[$i]}
                        cp --parents ${lib_files[$i]} /mnt/sysroot
                    done
                    echo "shared library dependencies are copy finished!"
                else
                    echo "no shared library dependencies!"
                fi
                
                echo
                continue
            else
                echo "no this command!"
                continue
            fi
        fi
    done
}

copy_fun

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

(0)
蘿卜蘿卜
上一篇 2016-12-13 14:47
下一篇 2016-12-13 17:02

相關推薦

  • HAProxy 入門及基礎負載應用

    A、首介 。。。         HAProxy——開放源代碼軟件,是一款代理服務器和偽4層的負載均衡軟件解決方案?;赥CP(第四層)和HTTP(第七層)應用的代理軟件,支持高并發鏈接,它的工作模式可以將其簡單而安全地整合到當前的服務架構中,同時可以保護你的WEB服務器不暴露到…

    Linux干貨 2017-05-17
  • 以水滸為例解釋文件權限

    關于文件權限的內容學起來比較繞,稍不注意就會把自己繞暈,這時候不如找一個例子來記憶,這樣記起來比較容易而且還會記憶深刻,接下來就以水滸為例解釋下關于文件權限方面的內容 桃園三結義,兄弟三人組成一個組,選劉備當大哥,兄弟三人都在這個組里 兄弟三人還是居無定所的,要給劉關張兄弟三人造個房子,給兄弟三人一個容身之所,而且給兄弟三人一人一個房間   但建好…

    2017-07-30
  • Apc緩存Opcode

    1、PHP執行 PHP的運行階段也分成三個階段: Parse。語法分析階段。 Compile。編譯產出opcode中間碼。 Execute。運行,動態運行進行輸出。                            …

    Linux干貨 2015-04-10
  • 第二天作業

    一、Linux 文件管理類命令   cd、pwd、mkdir、rmdir、ls、cp、rm、mv、cat、tac、more、less、head、tail、touch     1、目錄類相關命令     cd:change directory 切換目錄     pwd:print …

    Linux干貨 2016-08-22
  • rsync+inotify實時同步備份數據

    rsync同步 rsync+inotify實時同步備份數據 軟件簡介: rsync命令簡介: rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大…

    Linux干貨 2016-10-28
  • 關于大型網站技術演進的思考(十三)–網站靜態化處理—CSI(5)

    原文出處: 夏天的森林   講完了SSI,ESI,下面就要講講CSI了 ,CSI是瀏覽器端的動靜整合方案,當我文章發表后有朋友就問我,CSI技術是不是就是通過ajax來加載數據啊,我當時的回答只是說你的理解有點片面,那么到底什么是CSI技術了?這個其實要和動靜資源整合的角度來定義。 CSI技術其實是在頁面進行動靜分離后,將頁面加…

    2015-03-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-23 00:37

    贊~幾個腳本的例子總結的不錯~~~繼續加油~

欧美性久久久久