馬哥教育網絡班21期第10周課程練習

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

POST加電自檢——
根據bios設定,順序查找引導設備——
讀取引導設備MBR(共512字節,前446為bootloader,后64表示分區信息,后2表示bootloader有效性),加載bootloader程序——
以grub為例,grub1.0階段將零磁道一扇區加載到內存,grub1.5階段加載文件系統驅動,grub2.0讀取/boot/grub/grub.conf,根據配置文件加載內核——
加載內核(通過ramdisk加載硬件驅動,并以只讀方式掛載根文件系統)——運行/sbin/init——準備系統初始化(讀取/etc/inittab,使用文件中配置啟動相應級別)——
系統初始化,運行/etc/rc.d/rc.sysinit——
以讀寫方式重新掛載根文件系統,設置主機名,啟動udev/selinux,掛載/etc/fstab文件中文件系統,激活swap設備,設置系統時鐘,根據/etc/sysctl.conf文件設置內核參數,激活lvm和raid,加載額外的設備驅動,清理操作,將系統啟動log寫入/etc/log/dmesg——
根據運行級別運行/etc/rc.d/rc.#——
運行/etc/rc.d/rc.local腳本——
啟動終端,打印登錄提示符

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
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2
    initrd /initrmfs.img
    
defaut=0
timeout=5
title CenOS
        root (hd0,0)
        kernel /vmlinuz-2.6.32-l42.el6.i686 ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs-2.6.32-642.el6.i686.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)
				依據某模板修改并生成新配置;

			http://172.16.0.1/centos6.x86_64.cfg

		檢查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 input one order:" ordername
case $ordername in
    start)
        echo "starting $0 finished"
        exit 0
        ;;
    stop)
        echo "stopping $0 finished"
        exit 0
        ;;
    restart)
        echo "restarting $0 finished"
        exit 0
        ;;
    status)
        echo "statusing $0 finished"
        exit 0
        ;; 
    *)
        echo "Wrong"
        exit 1
        ;;        
esac

5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;

  (1) 如果登錄了,則顯示用戶登錄,腳本終止;

  (2) 每3秒鐘,查看一次用戶是否登錄;

#!/bin/bash
#
#

read -p "Enter a user name: " username
until who | grep "^$username" &> /dev/null; do
    sleep 3
done    
echo "$username logged on." 
    exit 0

6、寫一個腳本,顯示用戶選定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;

#!/bin/bash
#
#

read -p "Enter a choice: " 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)
        fdisk -l
        ;;
    *)
        echo "Quit..."
        exit 0
        ;;       
esac

7、寫一個腳本

  (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;

  (2) 提示用戶輸入一個用戶名或輸入“quit”退出;

    當輸入的是用戶名,則調用函數顯示用戶信息;

    當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:

#!/bin/bash
#
#

func1() {
    useruid=$(grep "^$1" /etc/passwd|cut -d: -f3)
    usershell=$(grep "^$1" /etc/passwd|cut -d: -f7)
    echo -e -n "user $1 UID is :$useruid\n SHELL is :$usershell\n"
}
read -p "please input a user name or \"quit\" :" option
while [ $option != "quit" ];do
    id $option &> /dev/null && result=0 || result=1
    case $result in 
        0)
            func1 $option
            ;;
        1)
            read -p "please input a username or \"quit\":" option
            continue
            ;; 
    esac
    read -p "please input a user name or \"quit\" again:" option           
done
echo "quit..."

8、寫一個腳本,完成如下功能(使用函數)

   (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;

   (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;

   (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;

#!/bin/bash
#
#

target=/mnt/sysroot
[ -d $target ] || mkdir /mnt/sysroot
 
read -p "please input a command which you want to cp to /mnt/sysroot,and \"quit\" is over:" cmdname
 
libcp() {
    for lib in $(ldd $1 |  grep -o "[^[:space:]]*/lib[^[:space:]]*"); do
        libdir=$(dirname $lib)
        [ -d $target$libdir ] || mkdir -p $target$libdir
        [ -f $target$lib ] || cp $lib $target$lib
    done
}
 
while [ "$cmdname" != 'quit' ]; do
    if ! which $cmdname &> /dev/null; then
        read -p "No such command, enter again: " cmdname
        continue
    fi
    cmdname=$(which --skip-alias $cmdname)
    cmnddir=$(dirname $cmdname)
 
    [ -d $target$cmnddir ] || mkdir -p $target$cmnddir
    [ -f $target$cmdname ] || cp $cmdname $target$cmdname
    libcp $cmdname
    read -p "Another command(quit): " cmdname
done

原創文章,作者:N21-孟然,如若轉載,請注明出處:http://www.www58058.com/47526

(0)
N21-孟然N21-孟然
上一篇 2016-10-24
下一篇 2016-10-24

相關推薦

  • 初識 vi/vim文本編輯器

    我們操作文件,終究離不開編輯文件,對文件內容的編輯,Linux系統下,我們通常使用VI/VIM來編輯文件。VI是每個Linux都會自帶的文本編輯器,VIM是VI的增強版,現在的最新版都已自帶,但是可能有些發行版本沒有自帶,可以使用sudo apt-get install vim命令安裝vim。 可以使用vi或者vim命令直接進入新的文本文件,或者vim 文件…

    Linux干貨 2017-07-29
  • Linux Sysadmin–part3

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現 #!/bin/bash for i in `cut -d’:’ -f7 /etc/passwd`;do if [ $i == “/sbin/nologin…

    2017-09-19
  • 自制linux和內核編譯

    自制linux和內核編譯 1、分區并創建文件系統 fdisk /dev/sdb分兩個必要的分區/dev/sdb1對應/boot /dev/sdb2對應根/mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2 2、掛載boot mkdir/mnt/bootmount /dev/sdb1 /mnt/boot 3、安裝grub grub-i…

    Linux干貨 2016-09-23
  • 權限管理

    linux文件權限:     在linux系統中,每個文件或目錄都包含有相應的權限,這些權限決定了哪些用戶或組能夠對此文件做哪些操作,如讀取、刪除、寫入等操作 文件權限分為三類:r,w,x     應用于文件:      &nbs…

    Linux干貨 2016-08-07
  • shell腳本編程和位置變量

    編程基礎 程序:指令+數據    程序編程風格:       過程式:以指令為中心,數據服務于指令       對象式:以數據為中心,指令服務于數據    shell:提供了編程能…

    Linux干貨 2016-08-16
  • rsyslog應用舉例

    rsyslog+mysql+loganalyzer 1、yum install mariadb-server php-gd rsyslog-mysql ##連接到mysql需要的驅動程序,用來保存信息 2、登錄數據庫并給rsyslog賦權,設置密碼,重讀授權表 3、以rsyslog用戶身份登錄數據庫,此時創建Syslog庫,注意此處數據庫名稱要與rsyslo…

    Linux干貨 2016-10-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-10-25 12:35

    每一個問題的解答過程,要寫關鍵步驟

欧美性久久久久