N22-第十周作業

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

(1)POST:加電自檢,利用COMS里記錄的配置信息檢測硬件是否都工作正常

(2)Boot Sequence: 按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備

Grub引導程序:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本, 把用戶選定的內核裝載到RAM中的特定空間中,解壓,展開,而后把系統控制權移交給內核

(3)kernel:自身初始化,探測可識別到的所有硬件設備 ,加載硬件驅動程序:(有可能會借助于randisk加載驅動),以只讀方式掛載文件系統 ,運行用戶空間的第一個應用程序:/sbin/init

(4)/sbin/init:設置歡迎信息,激活udev和selinux;掛載/etc/fstab文件中的文件系統 ,檢查根文件系統,并以讀寫方式重新掛載根文件系統;設置系統時鐘,根據/etc/sysctl.conf文件來設置內核參數,激活lvm和軟raid設備,  加載額外設備的驅動程序,清理操作  

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

創建分區:

[root@localhost ~]# fdisk /dev/sdb

重讀分區表:

[root@localhost ~]# partx -a /dev/sdb

格式化文件系統:

[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb2

掛載分區:

[root@localhost ~]#mkdir -pv /mnt/boot /mnt/sysroot
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/

[root@localhost ~]# cp -a /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz
[root@localhost ~]# cp -a /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img

安裝grub:

[root@localhost ~]# grub-install –root-directory=/mnt /dev/sdb

[root@localhost sysroot]#mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media

復制bash,ls,cat,所依賴的庫文件:

[root@localhost sysroot]#mkdir -pv bin lib64
[root@localhost sysroot]# cp /bin/bash /bin/ls /bin/cat /mnt/sysroot/bin/
[root@localhost sysroot]# cp `ldd /bin/bash | sed '1d'| grep -Eo "/.*[0-9] "` /mnt/sysroot/lib64/
[root@localhost sysroot]# cp `ldd /bin/ls | sed '1d'| grep -Eo "/.*[0-9] "` /mnt/sysroot/lib64/
[root@localhost sysroot]# cp `ldd /bin/cat | sed '1d'| grep -Eo "/.*[0-9] "` /mnt/sysroot/lib64/

配置grub:

[root@localhost sysroot]#vim /mnt/boot/grub/grub.conf

default=0

timeout=5
title CentOS (Expres)
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img

再把sdb磁盤設置成第一啟動項

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

anaconda的配置方式:
    (1) 交互式配置方式;
    (2) 通過讀取事先給定的配置文件自動完成配置;
    a)按特定語法給出的配置選項;
       kickstart文件;
      b)安裝引導選項:
        text: 文本安裝方式
        method: 手動指定使用的安裝方法
      c)與網絡相關的引導選項:
        ip=IPADDR
        netmask=MASK
        gateway=GW
        dns=DNS_SERVER_IP
        ifname=NAME:MAC_ADDR      d)與遠程訪問功能相關的引導選項:
        vnc
        vncpassword='PASSWORD'      e)指明kickstart文件的位置
        ks=
        DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
        Hard drive: ks=hd:/device/drectory/KICKSTART_FILE
        HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
        FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
        HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
      f)啟動緊急救援模式:
        rescue
kickstart文件的格式:
      a)命令段:指明各種安裝前配置,如鍵盤類型等;
      b)程序包段:指明要安裝的程序包組或程序包,不安裝的程序包等;
            %packages
            @group_name
            package
            -package
            %end
      c)腳本段:
            %pre: 安裝前腳本    d)運行環境:運行于安裝介質上的微型Linux環境
           %post: 安裝后腳本
       運行環境:安裝完成的系統;
     
   命令段中的命令:
       必備命令
            authconfig: 認證方式配置
            authconfig –useshadow  –passalgo=sha512
            bootloader:bootloader的安裝位置及相關配置
            bootloader –location=mbr –driveorder=sda
                        –append="crashkernel=auto
                        crashkernel=auto rhgb rhgb quiet quiet"
            keyboard: 設定鍵盤類型
            lang: 語言類型
            part: 創建分區
            rootpw: 指明root的密碼
            timezone: 時區
        可選命令
            install OR upgrade
            text: 文本安裝界面
            network
            firewall
            selinux
            halt
            poweroff
            reboot
            repo
            user:安裝完成后為系統創建新用戶
            url: 指明安裝源
創建kickstart文件的方式:
   (1) 直接手動編輯;
       依據某模板修改;
   (2) 可使用創建工具:system-config-kickstart (CentOS 6)
       依據某模板修改并生成新配置;
檢查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.8 x86_64 boot”  -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/
[root@localhost ~]# yum install system-config-kickstart
[root@localhost ~]# system-config-kickstart # 進入圖形界面

4、寫一個腳本
  (1) 能接受四個參數:start, stop, restart, status

   start: 輸出“starting 腳本名 finished.”

   …

  (2) 其它任意參數,均報錯退出;

#!/bin/bash
#
case $1 in
start)
    echo "starting file8.sh finished.";;
stop)
    echo "stop file8.sh finished.";;
restart)
    echo "restart file8.sh finished.";;
status)
    echo "status file8.sh finished.";;
*)
    echo "argument wrong" || exit 1
esac
測試結果:

[root@localhost ~]# bash file9.sh start
starting file8.sh finished.
[root@localhost ~]# bash file9.sh stop
stop file8.sh finished.
[root@localhost ~]# bash file9.sh restart
restart file8.sh finished.
[root@localhost ~]# bash file9.sh status
status file8.sh finished.
[root@localhost ~]# bash file9.sh ls
argument wrong

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

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

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

#!/bin/bash
#
while true; do
        if ! id $1 &> /dev/null; then
                echo "The user not exist."      
                break
        elif who |grep "^$1\>" &>/dev/null; then
                echo "This user already login"
                break
        else
                sleep 3
        fi
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

read -p "Enter your option: " option

while [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ];do
        echo "cpu,mem,disk,quit"
        read -p "Enter your option again: " option
done

case $option in
cpu)
        lscpu ;;
mem)
        free -m ;;
disk)
        fdisk -l /dev/[hs]d[a-z] ;;
*)
        echo "quit"
        exit 0 ;;
esac

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

#!/bin/bash
#
userinfo(){
        grep "^$option\>" /etc/passwd | awk -F: '{print $1,$7}'
}

read -p "Enter your username or quit :" option

while id "$option" &> /dev/null; do
        userinfo
        read -p "Enter your username or quit :" option
done

if [ "$option" == quit ]; then
        exit 0
else
        echo "The user not exist." || exit 1

fi

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

#!/bin/bash
#
ldd_function(){
        local dirname1=$(echo "$commond" |grep -o "^/.*/")

        if [ -d /mnt/sysroot"$dirname1" ]; then
                cp -r "$commond" /mnt/sysroot"$dirname1"
        else
                mkdir -p /mnt/sysroot"$dirname1"
                cp -r "$commond" /mnt/sysroot"$dirname1"
        fi
}

commond_function(){
        for i in $(ldd "$commond" |grep -o "/.*[[:space:]]\+"); do

                local dirname2=$(echo "$i" |grep -o "^/.*/")

                if [ -d /mnt/sysroot"$dirname2" ]; then
                        cp -r "$i" /mnt/sysroot"$dirname2"
                else
                        mkdir -p /mnt/sysroot"$dirname2"
                        cp -r "$i" /mnt/sysroot"$dirname2"
                fi
        done
}

read -p "Input exec commond :" option

commond=$(which "$option")
ldd_function
commond_function

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

(0)
heianyangguoheianyangguo
上一篇 2016-10-25
下一篇 2016-10-25

相關推薦

  • linux 使用者管理 (9月底)

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。     ~]#w | cut -d ' ' -f 1 |uniq -u 2、取出最后登錄到當前系統的用戶的相關信息。 ~]# last -1(數字1) 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 ~]#…

    Linux干貨 2016-10-02
  • 硬鏈接與軟鏈接的區別

    硬鏈接(Hard Link):   硬連接指通過索引節點來進行鏈接(即一個指針指向文件索引節點)。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種鏈接就是硬鏈接。硬鏈接的作用是允許一個文件擁有多個有效路徑…

    Linux干貨 2016-10-20
  • Shell——Linux基本命令(2)

    1.Shell Shell是Linux系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令并把它送入內核去執行. shell也被稱為LINUX的命令解釋器(commandinterpreter). vshell是一種高級程序設計語言. 2.bash shell GNUBourne-AgainShell(bash)是GNU計劃中重要的工…

    2017-07-13
  • centos7 root密碼忘記怎么修改

           對于事務繁忙或者容易忘東忘西的朋友說,想要記著一些事情總感覺比登天還要難,特別是像密碼之類的。可能要記憶的密碼太多,總是不經意間就把密碼忘記或者把密碼混淆。總之這種站的比例還是有點分量的,例如我剛剛接觸Linux時 ,第一把centos7裝到電腦上沒有多久,就把root密碼忘記了,費了好時間,也請教了很多…

    Linux干貨 2017-04-03
  • LINUX下的RPM應用

    一 前言 在進入RPM的應用前,關于可執行程序的一些基本知識有必要說明一下: 1 ABI:application binary interface,這是應用程序與系統間的協議,大家都知道同一個程序在不同的操作系統平臺可能會無法執行,很大程度上就是因為ABI的不同,因此,對于可執行程序,選擇對應操作系統平臺是第一步 2 API:application prog…

    Linux干貨 2017-04-17
  • N22-妙手-第二周博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示     mkdir: 創建目錄         使用方法:mkdir [OPTION]… DIRECTORY…   &n…

    Linux干貨 2016-08-29
欧美性久久久久