Homework Week-10 CentOS啟動相關及bash腳本編程

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

[H$EM46[4W}@T60D(WJM~1L.jpg

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

  (1) 為硬盤新建兩個主分區;并為其安裝grub;

  (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;

  (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;

  (4) 為grub提供配置文件;

  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

————————————————————————–

1.在虛擬機中添加一個新硬盤

shutdown   #在centos關閉的情況下才能添加硬盤

2.啟動centos,查看新添加的硬盤,并對其進行分區格式化

fdisk  -l  /dev/sd[a-z]
fdisk  /dev/sdb
n
p
1
+100M
2
+2G
t
2
82
n
p
+5G
w
partx  -a  /dev/sdb
cat  /proc/partitions
mke2fs -t  ext4  /dev/sdb1
mke2fs -t  ext4  /dev/sdb3
mkswap  /dev/sdb2

3.復制現有內核文件和img文件到新磁盤中

mkdir  /mnt/boot
mount  /dev/sdb1  /mnt/boot/
ls  /mnt/boot/
grub  -install  --root-directory=/mnt  /dev/sdb
ls  /mnt/boot/
cp  /boot/vmlinuz-3.10.0-327.e17.x86_64  /mnt/boot/vmlinuz-3.10.0-327.e17.x86_64   復制內核到boot下
cp /boot/initramfs-3.10.0-327.e17.x86_64.img /mnt/boot/initramfs-3.10.0-327.e17.x86_64.img

4.編輯配置文件

vim  /mnt/boot/grub/grub.conf
default=0
timeout=5
title  centos(express)
     root(hd 1,0)
     kernel  /vmlinuz-3.10.0-327.e17.x86_64  ro  root=/dev/sdb1   init=/bin/bash selinux=0
     initrd  /initramfs-3.10.0-327.e17.x86_64.img

5.創建文件并復制依賴的庫文件

mkdir  /mnt/sysroot
mount  /dev/sdb3  /mnt/sysroot/
cd  /mnt/sysroot/
mkdir  -pr  etc  bin   sbin  lib  lib64  dev  proc  sys tmp  var  usr  home  root  mnt  media
ll
cp  /bin/bash  /mnt/sysroot/bin/
ldd  /bin/ash  bash依賴于哪些庫
cp  /lib64/libtinfo.so.5/mnt/sysroot/lib64
cp  /lib64/libd1.so.2  /mnt/sysroot/lib64
cp  /lib64/libc.so.6  /mnt/sysroot/lib64/
cp  /lib64/ld-linux-x86-64.so.2   /mnt/sysroot/lib64/
cd
ch  root  /mnt/sysroot/
sync

    ————————————————————————

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

    mkdir  myboot
    cd  myboot/
    ls  /media/cdrom
    cp  -r  /media/cdrom/isolinux/  ./
    cd  isolinux/
    chmod  +w  *
    cd  ..
    pwd
    cp  /root/centos6.x86_64.cfg  ks.cfg
    cd  ..  #站在myboot之外
    #創建光盤鏡像
    mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o  /root/boot.iso   myboot/

    4、寫一個腳本

      (1) 能接受四個參數:start, stop, restart, status

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

       …

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

    #!/bin/bash
    #Elephant
    case $1 in
    start)
        echo "starting bash finished."
        ;;
    stop)
        echo "stopped bash finished."
        ;;
    restart)
        echo "restarting bash finished."
        ;;
    status)
        echo "status..."
        ;;
    *)
        echo "Wrong argument."
        exit 2
    esac

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

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

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

    #/bin/bash
    #Elephant
    read -p "Please input a username:" usrname
    while true;do
        if who | grep "^$usrname" &> /dev/null;then
            break
        fi
        sleep 3
    done
    echo "$(date +'''%F %T''') $usrname logged on."

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

       cpu) display cpu info

       mem) display memory info

       disk) display disk info

       quit) quit

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

    #!/bin/bash
    #Elephant
    until ! [ 1 ];do
    
        cat<<EOF
        cpu) display cpu info
        mem) display memory info
        disk) display disk info
        quit) quit
        EOF
        
        read -p "Your choice:" option
        if [[ "$option" == "cpu" ]];then
            lscpu
        elif [[ "$option" == "mem" ]];then
            free -m
        elif [[ "$option" == "disk" ]];then
            fdisk -l /dev/[sh]d[a-z]
        elif [[ "$option" == "quit" ]];then
            echo "Quit"
            exit 4
        else
            echo "Please input 'cpu' 'mem' 'disk' or 'quit'"
        fi
        
    done

    7、寫一個腳本

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

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

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

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

    #!/bin/bash
    #Elephant
    userinfo(){
        if id "$username" &>/dev/null;then
            grep "^$username\>" /etc/passwd | cut -d: -f3,7
        else
            echo "No such user."
        fi
    }
    until ! [ 1 ];do
        read -p "Please input username or 'quit':" username
        if [ $username == "quit" ];then
            echo "Quit"
            exit 2
        else
            userinfo
        fi
    done

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

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

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

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

    #!/bin/bash
    #Elephant
    isornotcmd(){
        if [ "$path1" == "" ];then
            echo "$cmd is not a command."
            exit 2
        fi
    }
    
    copycmd(){
        if [ -f "/mnt/sysroot/usr/bin" ];then
            cp -fr $path1 /mnt/sysroot/usr/bin/
        else
            mkdir -p /mnt/sysroot/usr/bin/
            cp -fr $path1 /mnt/sysroot/usr/bin/
        fi
    }
    
    copycmdrelay(){
        for path in $(ldd $path1 | grep -o "/.*\.so\.[0-9]");do
            if [ -f "/mnt/sysroot/rootfs/" ];then
                cp -LR $path /mnt/sysroot/rootfs/      #-LR復制鏈接文件的源文件
            else
                mkdir -p /mnt/sysroot/rootfs/
                cp -LR $path /mnt/sysroot/rootfs/
            fi
        done
    }
    
    read -p "Please input a command:" cmd
    path1=$(whereis $cmd | grep -o "/.*" | awk '{print $1}')
    isornotcmd
    copycmd
    copycmdrelay

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

    (0)
    N22_ElephantN22_Elephant
    上一篇 2016-10-24 09:09
    下一篇 2016-10-24 09:09

    相關推薦

    • MBR分區結構

      MBR分區結構 一、硬盤主引導記錄MBR由4個部分組成: 1、主引導程序(偏移地址0000H–0088H),它負責從活動分區中裝載,并運行系統引導程序。 2、出錯信息數據區,偏移地址0089H–00E1H為出錯信息,00E2H–01BDH全為0字節。 3、分區表(DPT,Disk Partition Table):含4個分…

      2017-08-20
    • Linux發行版的基礎目錄名稱命名法則及功用規定

      [root@localhost /]# tree -L 1. <—-> 為 / 符號,所有文件的根目錄;├── bin -> usr/bin <—-> 所有用戶可用的基本命令程序文件;├── boot <—-> 引導加載器必須用到的各靜態文件:kernel,initramfs(in…

      2018-02-28
    • yum命令的使用及磁盤管理中命令的使用方法(mkfs ,blkid,e2label等)

      yum      #cd /etc/yum.repos.d          #yum repolist(在 #cd下)其他命令在 #cd /etc/yum.repos.d運行          #yum-config-manag…

      2017-08-19
    • 第五周小練習

      1顯示當前系統上root,fedora或user1用戶的默認shell egrep "^(root|user1|fedora)" /etc/passwd|cut -d ':' -f 1,7 2找出/etc/rc.d/init.d/functions文件中某個單…

      Linux干貨 2016-12-12
    • 馬哥教育網絡班21期+第4周作業

      1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost ~]# cp -r /etc/skel /home/ && mv /home/skel&nbsp…

      Linux干貨 2016-08-02
    • iptables

      Evernote Export   基于本機服務器的iptables: 創建、重命名、刪除自定義chain ~]# iptables -N testchain ~]# iptables -nL Chain INPUT (policy ACCEPT) target     prot opt source    …

      Linux干貨 2016-11-20

    評論列表(1條)

    • 馬哥教育
      馬哥教育 2016-11-02 14:37

      博客寫得非常的好,32個贊,給出了詳細操作步驟,腳本思路清晰,1題能畫一個圖就更完美了,加油!

    欧美性久久久久