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
    下一篇 2016-10-24

    相關推薦

    • 密碼保護:測試信息, 順便貼上以前年少輕狂的內容.(未整理)

      無法提供摘要。這是一篇受保護的文章。

      Linux干貨 2017-07-11
    • Linux文件類型及顏色標識整理

      前言: 在windows中,我們用不同的后綴名標識不同類型的文件。而在linux中卻沒有這樣的機制,雖然我們可以人為的進行標識,但是在linux并沒有擴展名的說法。linux中我們可以用type 或者用ls -l 查看到每個文件的類型,并且通過ls –color參數,不同類型的文件會標識不同的顏色。接下來我們就詳細介紹各個文件類型和與之對應的顏色…

      Linux干貨 2016-10-17
    • five

      1;顯示當前系統上root, fedora或user1用戶的默認shell。 #   grep "^\(root\|fedora\|user1\)" /etc/passwd #   grep -E "^(root|fedora|u…

      Linux干貨 2017-01-16
    • CentOS系統啟動流程——深入了解linux

      CentOS系統啟動流程 ·Linux系統的組成部分:內核+根文件系統      內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能              IPC:Inter Pr…

      Linux干貨 2016-09-11
    • python agent應用

      BaseHTTPServer 模塊說明 class BaseHTTPServer.HTTPServer(server_address, RequestHandlerClass) server_address : 是一個服務器 (ip, port)元組。 RequestHandlerClas…

      Linux干貨 2016-09-19
    • 實戰:ansible自動化部署nginx+keepalived+mysql負載均衡集群

      一、目的 使用ansible自動化部署nginx+keepalived+mysql負載均衡集群。 二、拓撲規劃 三、詳細步驟 1、環境的搭建         (1)安裝ansible,同時配置私鑰免密碼進行通信 [root@localhost ~]# ssh-keygen &nb…

      Linux干貨 2016-11-11

    評論列表(1條)

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

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

    欧美性久久久久