第十周

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

1.開啟電源后,POST自檢:檢查硬件設備,通過后交給BIOS
2.BIOS加載可選擇的啟動設備,尋找可引導的啟動設備的記錄:MBR
3.MBR:硬盤的主引導記錄,存在于0磁道0扇區,共512字節.其中Bootloader占用446字節,分區表占用64字節,magic num占用2字節,MBR加載Bootloader去開始后面的工作
4.常用的內核加載器是grub。
    1)1st stage:位于MBR中,為了引導2nd stage
    2) 1.5 stage:位于boot基本磁盤分區中,為識別內核文件所在的文件系統提供文件系統識別擴展
    3) 2nd stage:位于boot基本磁盤分區中,GRUB的引導程序
5.通過grub加載內核后,內核開始自我解壓并工作,通過虛擬根文件系統initrfs調用init工作
6./sbin/init程序被內核第一個調用,PID為1。init調用期配置文件和啟動腳本,從而啟動各個子進程

2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;

(1) 為硬盤新建兩個主分區;并為其安裝grub;
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
(4) 為grub提供配置文件;
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
1)
[root@localhost ~]# fdisk /dev/sdb
(n;p;+10G;w)
[root@localhost ~]# partx -a /dev/sdb
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb2
[root@localhost ~]# mkdir /mnt/{boot,rootfs}
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/rootfs/
[root@localhost ~]# grub-install --root-directory=/mnt/ /dev/sdb
2)
[root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/vmlinuz
[root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img
3)
[root@localhost ~]# mkdir -p /mnt/rootfs/{bin,lib64}
[root@localhost ~]# cp -r /bin/{bash,ls,cat} /mnt/rootfs/bin/
[root@localhost ~]# cp $(ldd /bin/bash | awk '$3~/^\/lib64/{print $3}') /mnt/rootfs/lib64/
[root@localhost ~]# cp $(ldd /bin/ls | awk '$3~/^\/lib64/{print $3}') /mnt/rootfs/lib64/ 
[root@localhost ~]# cp $(ldd /bin/cat | awk '$3~/^\/lib64/{print $3}') /mnt/rootfs/lib64/ 
4)
[root@localhost ~]# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS 6.6 (Test)
root (hd0,0)
kernel /vmlinuz ro root=/dev/sdb2 selinux=0 init=/bin/bash
initrd /initramfs.img
5)
在BIOS中選擇sdb作為啟動盤

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

 (1)制作一個kickstart文件

安裝system-config-kickstart
#yum install -y system-config-kickstart
#system-config-kickstart


打開一個ks文件



根據需要配置好相關的內容,將文件另存為myks.cfg

(2)創建引導鏡像

在/tmp 目錄下創建目錄myiso ,在myiso 目錄下創建isolinux 目錄;

#mkdir -p /tmp/myiso/isolinux

將光盤上的isolinux 下的文件都拷貝到新建的目錄下;

#cp /media/isolinux/* /tmp/myiso/isolinux/  
將myks.cfg文件復制到/tmp/myiso 目錄下;



創建ISO文件系統
# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.8 x86_64 boot" -b /tmp/myiso/isolinux/isolinux.bin -c /tmp/myiso/isolinux/boot.cat -o /root/boot.iso myiso

4、寫一個腳本

(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
(2) 其它任意參數,均報錯退出;
#!/bin/bash
if [ $# -ne 1 ];then
    echo "only one argument"
    exit 1
else
    case $1 in
        start)
            echo "starting $0 finished."
        ;;
        stop)
            echo "stoping $0 finished."
        ;;
        restart)
            echo "restart $0 finished."
        ;;
        *)
            echo "error,exit!"
            exit 1
        ;;
    esac
fi

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

(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash
if [ $# -ne 1 ];then
    echo "only one argument"
    exit 1
fi

if `id $1 &> /dev/null`;then
    while true;do
        if `w | grep "^$1" &> /dev/null`;then
            echo  "$1 is login."
            exit 0
        else
            echo "$1 is not loging,waiting..."
            sleep 3
        fi
    done
else
    echo "argument is not username"
fi

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

cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash
while true;do
    echo "please input a option:" 
    echo "input 'cpu' display cpu info"
    echo "input 'mem' display memory info"
    echo "input 'disk' display disk info"
    echo "input 'quit' exit this script"
    read test
  case $test in
      cpu)
          echo "`cat /proc/cpuinfo`"
          ;;
      mem)
          echo "`cat /proc/meminfo`"
          ;;
      disk)
          fdisk -l
          ;;
      quit)
          exit 0
          ;;
      *)
          echo "input error options" 
          continue
          ;;
    esac
done

7、寫一個腳本

(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash
function user {
    if `id $username &> /dev/null`;then
        echo "userid : `id -u $username`"
        echo "shell : `grep "^$username\>" /etc/passwd | cut -d: -f 7`"
    else
        echo "username is wrong" 
    fi
}
while true;do
    read -p "Please input a username or quit:" username
    if [ $username == "quit" ];then
        exit 0
    else
        user $username
    fi
done

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

(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
#!/bin/bash
function lib_cp {
    lib_path=`whereis $1 | cut -d' ' -f2`
    for i in $(ldd $lib_path | grep -o "/[^[:space:]]*");do
        libdir=$(dirname $i)
        [ -d $path$libdir ] || mkdir $path$libdir
        [ -f $path$i ] || cp $i $path$libdir
    done
}
function cmd_cp {
    cmd_path=$(which $1 | grep -v "^alias" | grep -o "/.*/")
    [ -d $path$cmd_path ] || mkdir -p $path$cmd_path
    [ -f $path/$1 ] || cp $cmd_path/$1 $path$cmd_path
}
path=/mnt/sysroot
[ -d $path ] || mkdir -p $path

read -p "input any command :" cmd
lib_cp $cmd
cmd_cp $cmd

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

(0)
N21_smileN21_smile
上一篇 2016-10-17 08:35
下一篇 2016-10-17 08:36

相關推薦

  • LVS工作原理淺析

    一、什么是LVS         LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。         LVS集群采用IP負載均衡技術和基于內容…

    Linux干貨 2016-11-29
  • 馬哥教育網絡班第21期+第四周課程作業

    1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp -r /etc/skel /home/tuser1 chmod –R 700 /home/tuser1 2. 編輯/etc/group文件,添加組hadoop。 echo &q…

    Linux干貨 2016-08-01
  • DHCP及自動化安裝Linux

    主機IP配置: 靜態指定 靜態IP 動態獲取: bootp:bootprotocol MAC與IP一一靜態對應 DHCP: Dynamic Host Configuration Protocol 動態主機配置協議基于UTP協議 主要用途:自動化分配IP地址,實現集中管理,解決IP地址不足的問題。 DHCP的4種報文 DHCP DISCOVER OFFER R…

    2017-09-18
  • bash腳本基礎認知

    編程基礎:程序:指令+數據                過程式:以指令為中心,數據服務于指令              &nbs…

    Linux干貨 2017-03-02
  • sed

    sed Stream EDitor, 行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非使用重定向存儲輸出。 Sed主要用來自動…

    Linux干貨 2017-04-26
  • 網絡管理(二)之IP地址劃分子網、多塊網卡共用單一IP

    網絡管理(二)IP地址   一、認識學習IP地址的組成: 1、它們可唯一標識IP 網絡中的每臺設備 2、IP地址由兩部分組成: 網絡ID:標識網絡;每個網段分配一個網絡ID 主機ID:標識單個主機;由組織分配給各設備 3、點分十進制計法表示IPv4地址: 4、如下圖,將系統中的IP地址用二進制表示,再通過轉換合成的十進制數,使用ping命令可得出:…

    Linux干貨 2016-09-05

評論列表(1條)

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

    啟動流程可以更詳細一些,具體都做了那些工作。

欧美性久久久久