Net25-第10周作業

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

Centos系統啟動過程分內核空間啟動和用戶空間啟動:

內核空間啟動流程:

  • POST: post加點自檢,檢測計算機基本5大件是否完好,計算機可被正常點亮。
  • BootSequence: 位于ROM上的BIOS的BootSequence來選擇啟動順序
  • Bootloader: 決定啟動順序后,在啟動設備上的MBR的前446bytes加載bootloader
  • Ramdisk: bootloader需要引導內核的加載,在這過程需要加載ramdisk來驅動真正的內核加載
  • rootfs: 內核加載后將根文件系統以只讀的方式掛載
  • /sbin/init: 啟動1號進程,/sbin/init,接下來的系統的管理都交給了1號進程

用戶空間啟動流程:

  • 設置默認的運行級別
  • 運行系統初始化腳本(/etc/rc.d/rc.sysinit),完成系統初始化
  • 關閉對應級別下需要關閉的服務
  • 啟動對應級別下需要啟動的服務
  • 設置登陸終端

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

  • (1) 為硬盤新建兩個主分區;并為其安裝grub;
  • (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
  • (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
  • (4) 為grub提供配置文件;
  • (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
以下是我的分區:

    /dev/sdb1 boot 200M
    /dev/sdb2 / 2G
    /dev/sdb3 swap 1G

在/mnt下創建/boot /sysroot目錄

掛載/dev/sdb1到/mnt/boot,/dev/sdb2到/mnt/sysroot

創建grub
# grub-install --root-directory=/mnt /dev/sdb
復制linux內核與ramdisk
# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/vmlinuz
# cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/initramfs.img
創建grub.conf
# cd /mnt/boot/grub
# vim grub.conf
default 0
timeout 5
title Centos (zgx)
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs.img
創建根文件系統目錄
# cd /mnt/sysroot
# mkdir bin  sbin dev  etc  home  lib  lib64   media  mnt  proc  root  sbin  sys  tmp  usr  var
拷貝幾個程序
# cp /bin/bash /mnt/sysroot/bin
# ldd /bin/bash 
        linux-vdso.so.1 =>  (0x00007ffcdc8d5000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f973fc3a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f973fa36000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f973f6a1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f973fe64000)
# cp /lib64/libtinfo.so.5 lib64/
# cp /lib64/libdl.so.2 lib64/
# cp /lib64/libc.so.6 lib64/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# sync

將這塊硬盤作為虛擬機的啟動盤,可以正常的啟動小linux

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

在圖形界面界面制作安裝system-config-kickstart

在圖形界面制作個kickstart

#修改引導鏡像的內核參數
#mount /dev/cdrom /mnt/cdrom
#mkdir /myboot
#cp /mnt/cdrom/ioslinux /myboot
#cp ks.cfg /myboot
#cd /mnt/cdrom/ioslinux
#vim isolinux.cfg
...
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg
...
#cd /
#重新封裝引導鏡像
#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

pidfile=/var/run/myservice.pid

start() {

   if [ -e $pidfile ];then
        echo "myservice aleardy start."
    else
        pid=$$
        echo "${pid}" > $pidfile
        echo "starting myservice finished"  
   fi
}

stop() {
   if [ -e $pidfile ];then
        rm -f $pidfile
        echo "stopping myservice finished"
    else
        echo "myservice is not running"
    fi        
}

case $1 in 
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;
status)
    if [ -e $pidfile ];then
        echo "myservice is running"
    else
        echo "myservice is not running"
    fi
    ;;
*)
    echo "Usage: $0 [start|stop|restart|status]"
esac

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

  • (1) 如果登錄了,則顯示用戶登錄,腳本終止;
  • (2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash
while true;do
    if who | grep ansible &> /dev/null;then
        echo "ansible aleardy login."
        break
    else
        sleep 3
        continue
    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

while true;do
read -p "please choose:" choose
case ${choose} in 
cpu)
    lscpu
    ;;
mem)
    free -m
    ;;
disk)
    df -HT
    ;;
quit)
    exit
    ;;
*)
    continue
esac
done

7、寫一個腳本

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

    grep "^$1\>" /etc/passwd |awk -F':' '{print "user",$1,"uid",$3}'
}

while true;do
read -p "enter a user:" username
if [ $username == 'quit' ];then
    break
else
    user $username
    echo "enter quit to exit"
fi
done

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

  • (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
  • (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
  • (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;

規則同上面命令相關的要求;

#!/bin/bash
target=/mnt/sysroot
cmd() {
if which $cmd $> /dev/null;then
    cmdpath=`which --skip-alias $cmd`
else
    echo "no such command"
    return 6
fi
}

cmdcopy() {
cmddir=`dirname $1`
[ -d ${target}${cmddir} ] || mkdir -p ${target}${cmddir}
[ -f ${target}${1} ] || cp $1 ${target}${cmddir} 
}

libcopy(){
for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do
libdir=`dirname $lib`
[ -d ${target}${libdir} ] || mkdir -p ${target}${libdir}
[ -f ${target}${lib}  ] || cp $lib ${target}${libdir}
done
}
while true;do
read -p "enter a command:" cmd
if [ "$cmd" == 'quit' ];then
echo quit
exit 0
fi

cmd $cmd
[ $? -eq 5 ] && continue

cmdcopy $cmdpath
libcopy $cmdpath

done

原創文章,作者:N25_隨心,如若轉載,請注明出處:http://www.www58058.com/71032

(0)
N25_隨心N25_隨心
上一篇 2017-03-15 19:09
下一篇 2017-03-15 19:09

相關推薦

  • 于浩的第一篇隨筆

    人生只有兩件事,努力工作,享受生活!

    2018-03-26
  • Linux學習總結&day07-正則表達式&文本處理工具

    第一部分、正則表達式     1、什么是正則表達式     正則表達式就是處理字符串的方法,它是以行為單位來進行字符串的處理行為,正則表達式通過一些特殊符號的輔助,可以讓用戶輕易的達到查找、刪除、替換某特定字符串的處理程序。     正則表…

    Linux干貨 2016-08-08
  • 初學Linux

       已經學習了Linux一周了,從原來的設計網頁、動畫影視制作、3D模型到現在的黑白界面虛擬世界,從原來吃睡由我到現在重回高三生活,說實話,一開始還是不太能適應的,尤其是眼睛,酸脹痛。不過,越努力越幸運,也覺得linux其實很有意思。。以下是我第一篇微博的內容,也是我學習linux一周所總結的知識。 首先,學習一門知識就要先了解他的歷史…

    Linux干貨 2017-07-15
  • DNS服務器搭建從協議到實現詳解

    一、域名和服務概述    1.FQDN:Fully Qualified Domain Name,完全限定域名,全局唯一           FQDN是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全域名可以從邏輯上準確地表示…

    Linux干貨 2016-04-30
  • 第十二周作業

    1、 請描述一次完整的http請求處理過程;  HTTP:超文本傳輸協議 完整的http請求過程 1)、建立TCP/IP連接:經過3次握手,建立連接或拒絕。 2)、瀏覽器向服務器發送HTTP請求。 3)、瀏覽器發送請求頭信息。 4)、服務器應答:服務器接受請求后,會回送應答。 5)、服務器發送應答頭信息。 6)、服務器向瀏覽器發送數據。 7)、服務…

    2017-05-17
  • Nginx作為web服務器的使用配置

    概述     Nginx是一款免費開源的web服務器,同時也可以作為http、imap/pop3協議進行反代服務器,本篇介紹一些nginx作為web服務器方面的相關配置,具體包含:     1、nginx基礎概念介紹     2、nginx…

    Linux干貨 2016-10-27

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-03-29 17:15

    作業品質保持的很好,繼續加油。

欧美性久久久久