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
下一篇 2017-03-15

相關推薦

  • N25第三周作業

    一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@centos01 ~]# who | cut -d " " -f1 | uniq -u root qufudcj 二、取出最后…

    Linux干貨 2016-12-26
  • 自我介紹

    個人簡介     基本信息:     何秋雨,男,安徽人,22歲,初中學歷 工作經驗:     目前就職于南京的一家互聯網公司做Java Web 開發,大概有一年半的工作經驗。工作內容包括前端和Java后端兩個部分。 個人愛好:   &nb…

    Linux干貨 2016-08-08
  • class8 文本處理工具sed和vim編輯器

    一、處理文本的工具sed     Stream EDitor,  行編輯器     sed是linux上一款比較重要的流編輯器。     特點:一次處理一行內容,處理完成后,把緩沖區的內容送往屏幕。這樣不斷重復,直到文件末尾。 &…

    Linux干貨 2016-08-11
  • DNS實驗

    正向解析 編輯/etc/named.conf listen-on port 53 { 172.0.0.1; 192.168.209.134; }; //listen-on-v6 port 53 { ::1; }; allow-query { any; }; dnssec-enable no; dnssec-validation no; 編輯/etc/name…

    Linux干貨 2017-05-31
  • 由tty命令產生的好玩的想法

    昨天看了馬哥Linux視頻的前兩天內容,里面講了到終端的概念,回顧一下:  物理終端:是直接接入本機的顯示器和鍵盤設備。/dev/console  虛擬終端:附加在物理終端之上的以軟件方式虛擬實現的終端,CentOS 6默認啟動6個虛擬終端 Ctrl+Alt+F#: [1,6] 圖形終端:附加在物理終端之上的以軟件方式…

    Linux干貨 2016-05-16
  • Linux終端類型

      2016-10-16  19:29:36  Linux終端類型   基本概念:  Linux終端其實就是用戶與操作系統之間的一個接口,用戶通過終端與操作系統進行交互。 在Linux系統終端包括以下幾種: 1、控制臺終端(Terminal)它的文件路徑(/dev/console) (物理終端直接連接鍵盤和鼠…

    Linux干貨 2016-10-17

評論列表(1條)

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

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

欧美性久久久久