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

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

CentOS主機按以下順序啟動
(1)POST     加電自檢        
(2)BIOS     讀取CMOS中的BIOS設置的參數來識別基礎硬件,尋找到啟動設備        
(3)MBR          (1)讀取啟動設備MBR中前446字節的bootloader        
                (2)讀取MBR后的扇區用來識別grub以及內核kernel所在的區域        
                (3)啟動grub        
(4)GRUB     顯示菜單界面,選擇運行內核kernel;配置文件是/boot/grub/grub.conf        
                (1) 提供菜單、并提供交互式接口    
                (2) 加載用戶選擇的內核或操作系統    
                (3) 為菜單提供了保護機制    
(5)KERNEL   自身初始化        
                (1)探測可識別到的所有硬件設備;    
                (2)加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)    
                (3)以只讀方式掛載根文件系統;    
                (4)運行用戶空間的第一個應用程序:/sbin/init    
(6)INIT     運行/sbin/init程序,配置文件/etc/inittab和/etc/init/*.conf        
            設置默認運行級別    如:id:3:initdefault:
            運行系統初始腳本    如:si::sysinit:/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) 清理操作;    
            關閉對應的腳本中需要關閉的服務,啟動需要啟動服務(實際服務命令位于/etc/rc.d/init.d)        
                l0:0:wait:/etc/rc.d/rc 0    
                l1:1:wait:/etc/rc.d/rc 1    
                ...    
                l6:6:wait:/etc/rc.d/rc 6    
            設置登錄終端         
                tty1:2345:respawn:/usr/sbin/mingetty tty1    
                tty2:2345:respawn:/usr/sbin/mingetty tty2    
                ...    
                tty6:2345:respawn:/usr/sbin/mingetty tty6

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

添加一塊硬盤
~]# fdisk /dev/sdb                                               //將新硬盤sdb分為2個主區
~]# mke2fs -t ext4 /dev/sdb{1,2}                                //格式化分區
~]# mount /dev/sdb1 /mnt                                         //掛載分區1到/mnt目錄
~]# grub-install --root-directory=/mnt /dev/sdb                  //安裝grub到分區1上
~]# cp /boot/initramfs-2.6.32-504.el6.i686.img /mnt/initramfs    //復制內核文件
~]# cp /boot/vmlinuz-2.6.32-504.el6.i686 /mnt/vmlinuz            //復制ramdisk文件
~]# vim /mnt/boot/grub/grub.conf                                 //創建grub.conf文件
    default=0
    timeout=5
    title CentOS6(test)
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
    initrd /initramfs
~]# umount /dev/sdb1                                              //卸載分區1
~]# mount /dev/sdb2 /mnt                                          //掛載分區2
~]# mkdir -p /mnt/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp}
~]# mkdir -p /mnt/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux}
~]# cp /bin/{bash,ls,cat} /mnt/bin
~]# cp `ldd /bin/{bash,ls,cat}|grep -eo "/lib.*[[:space:]]"|
    sort -u` /mnt/lib                                             //復制lib文件
~]# sync                                                          //同步
~]# init 6                                                        //重啟主機
重啟后進入bios設置 調整硬盤啟動順序后保存退出。

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

可以直接手動編輯或使用創建工具在桌面模式下用system-config-kickstart (CentOS 6)來創建ks.cfg
#命令段
firewall --disabled                                    //禁用防火墻
install	                                               //執行新安裝
cdrom	                                               //用光盤安裝
rootpw --iscrypted $1$TxkJ7T6B$obLELgEGcn0uzgA3QTAPl/  //管理員加密密碼
auth  --useshadow  --passalgo=sha512                   //屏蔽密碼算法
graphical                                              //安裝圖形環境
firstboot --disable                                    //首次引導禁用代理
keyboard us                                            //安裝鍵盤類型
lang en_US                                             //默認語言
selinux --enforcing                                    //激活selinux
logging --level=info                                   //信息等級
timezone  Asia/Hong_Kong                               //系統時區
bootloader --location=mbr                              //在MBR上安裝引導程序
clearpart --all                                        //刪除所有現存分區  
part /boot --fstype="ext4" --size=500                  //分區掛載
part / --fstype="ext4" --size=10000
#腳本段
%pre	                                               //安裝前腳本
echo "start"
%end
%post	                                               //安裝后腳本
echo "end"
%end
#程序包段
%packages
@chinese-support                                       //中文支持
@development                                           //開發工具
@graphical-admin-tools                                 //圖形化工具
@remote-desktop-clients	                               //遠程桌面客戶端
git
-ibus-table-cangjie
-ibus-table-erbi
-ibus-table-wubi
%end

簡單引導鏡像光盤制作:

    (1)復制系統安裝光盤/Packages /repodata外的所有目錄下的所有文件到一自制目錄中(/tmp/myiso/)
    (2)創建引導光盤:把myiso目錄創建為光盤鏡像boot.iso

    ~]# 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 /tmp/myiso/

簡單自動安裝系統光盤制作:

    (1)復制系統安裝光盤的所有目錄下的所有文件和ks.cfg文件到一自制目錄中(/tmp/myiso/)
    (2)在/tmp/myiso/isolinux/isolinux.cfg文件中 append initrd=initrd.img 條目后
       添加ks文件讀取路徑 ks=cdrom:/ks.cfg
    (3)創建引導光盤:把myiso目錄創建為光盤鏡像boot.iso

    ~]# 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 /tmp/myiso/

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

#!/bin/bash
#
if [ $# -eq 1 ];then
    case $1 in
    start)
        echo "starting $0 finished."
        ;;
    stop)
        echo "stopping $0 finished."
        ;;
    restart)
        echo "restart $0 finished."
        ;;
    status)
        echo "status $0 finished."
        ;;
    *)
        echo "error 2"
        exit 1
        ;;
    esac
else
    echo "error 1"
fi

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

#!/bin/bash
#
if id $1 &>/dev/null && [ $# -eq 1 ] ;then    
    until  w |grep "^$1\>" &>/dev/null;do
        sleep 3
        echo "seaching..."    
    done
    echo "$1 is online."
else
    echo "UserId is error."
fi

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
read -p "Enter a option: " option
until [ "$option" == 'cpu' -o "$option" == "mem" -o "$option" == "disk" -o "$option" == "quit" ];do
    read -p "Wrong option, Enter again: " option
done

case "$option" in 
cpu)
    lscpu
    ;;
mem)
    cat /proc/meminfo
    ;;
disk)
    fdisk -l
    ;;
*)
    echo "Quit..."
    exit 0
    ;;
esac

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

#!/bin/bash
#
function userInfo {
uId=`grep "^$1\>" /etc/passwd | cut -d: -f3`
uShell=`grep "^$1\>" /etc/passwd | cut -d: -f7`
}
read -p "Input a user name or quit: " option
until [ "$option" == "quit" ];do
    if id $option &>/dev/null;then
        userInfo $option
        echo -e "User:\t$option\nUID:\t$uId\nSHELL:\t$uShell"
    else
        echo "Id is wrong."
    fi
    read -p "Input a user name or quit: " option
done

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

#!/bin/bash
#
declare dirName="/mnt/sysroot"
function load_lib {
    ldd $1 |grep -o "/.*[[:space:]]"
}
function cp_file {
    fDir=`dirname $1`
    mkdir -p "$dirName$fDir"
    cp -f $1 "$dirName$fDir"
}
function cp_lib {
    for file in `ldd $1 |grep -o "/.*[[:space:]]"`;do
        lDir=`dirname $file`
        mkdir -p "$dirName$lDir"
        cp -f $file "$dirName$lDir"
    done
}
read -p "Input a command with path: " command
mkdir -p $dirName
if [ -f $command -a -x $command ];then
    load_lib $command
    cp_file $command
    cp_lib $command
else
    echo "Input command is wrong."
fi

原創文章,作者:N23_夕立時雨,如若轉載,請注明出處:http://www.www58058.com/22566

(0)
N23_夕立時雨N23_夕立時雨
上一篇 2016-07-07 10:51
下一篇 2016-07-07 10:51

相關推薦

  • 蕭田國給你五個2017GOPS北京站的參會理由!

    2017年7月28日,GOPS全球運維大會即將開幕,發起人蕭田國將在主會場發表題為《運維如何延續自己的職業生涯》演講,參加第七屆北京站您會有哪些收益? 收益一: 【長達半天時間的培訓式演講】讓您系統性掌握頂級互聯網自動化運維體系 收益二: 【騰訊智能運維】傳奇背后的細節,聽了才知道 收益三: 與Facebook、Twitter、BATJ等運維大咖【面對面深度…

    Linux干貨 2017-07-24
  • shell腳本語言的for循環使用方法和案例

    在shell語言中bash是用的最多的,其語法簡單。以指令為核心快速解決常用的問題。所有語言中邏輯控制是必不可少的,它可以幫助我們減少不必要的重復性工作。今天我們就來說說所有語言都會使用的神奇的for循環,學了它以后不僅知道如果規避重復的工作,還能理解程序的運行原理。         for循環是什么?&nb…

    Linux干貨 2017-04-16
  • 用戶和組的簡介

     在第二周的學習中,關于用戶和組是一個難點,也是重點,本篇博客則是對用戶和組的簡單闡述,如有錯誤或不足還請各位大牛指出,在此謝過! 1、用戶 # 1.1用戶的定義      通過前面對Linux 多用戶的理解,我們明白Linux 是真正意義上的多用戶操作系統,所以我們能在Linux系統中建若干用戶(…

    Linux干貨 2017-07-22
  • 網絡N22期-第三周作業

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

    Linux干貨 2016-08-29
  • 計算機基礎知識

    計算機系統 計算機系統組成的兩大部分 硬件系統     主機         中央處理器CPU{運算器,控制器}         內存儲器{ROM,RAM} &…

    Linux干貨 2016-08-04
  • 自動化運維跟安全配置

    安全相關工具rpm -qf /usr/bin/sshopenssh semanage port -a -t ssh_port_t -p tcp #PORTNUMBER/端口9527修改ssh的默認端口,ssh默認只能用22端口多臺主機互聯免口令1 ssh-keygen三臺主機各自生成私鑰公鑰2 ssh-copy-id IP7三臺主機各自復制公鑰到同一臺主機3…

    2018-02-06

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-07-07 11:01

    寫的很好,排版也很棒,有的需要用while true寫,在檢查一下加油

欧美性久久久久