N21天天第十周課程練習

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

CentOS主機按以下順序啟動
1、POST加電自檢
2、BIOS讀取CMOS中的BIOS設置的參數來識別基礎硬件,尋找到啟動設備
3、MBR
1)讀取啟動設備MBR中前446字節的bootloader
2)讀取MBR后的扇區用來識別grub以及內核kernel所在的區域
3)啟動grub
4、GRUB顯示菜單界面,選擇運行內核kernel;配置文件是/boot/grub/grub.conf
1)提供菜單、并提供交互式接口
2)加載用戶選擇的內核或操作系統
3)為菜單提供了保護機制
5、KERNEL自身初始化
1)探測可識別到的所有硬件設備
2)加載硬件驅動程序(有可能會借助于ramdisk加載驅動)
3)以只讀方式掛載根文件系統
4)運行用戶空間的第一個應用程序:/sbin/init
6、INIT
運行/sbin/init程序,配置文件/etc/inittab和/etc/init/*.conf 
設置默認運行級別如id:3:initdefault
運行系統初始化腳本/etc/rc.d/rc.sysinit
1)設置主機名;
2)設置歡迎信息;
3)激活udev和selinux
4)掛載/etc/fstab文件中定義的文件系統;
5)檢測根文件系統,并以讀寫方式重新掛載根文件系統;
6)設置系統時鐘;
7)激活swap設備;
8)根據/etc/sysctl.conf文件設置內核參數;
9)激活lvm及software raid設備
10)加載額外設備的驅動程序
11)清理操作
關閉對應的腳本中需要關閉的服務,啟動需要啟動服務(實際服務命令位于/etc/rc.d/init.d)
設置登錄終端

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

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

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

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

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

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

為硬盤新建兩個主分區;并為其安裝grub;  
  
添加一塊硬盤
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x495813a2.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-10443, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-10443, default 10443): +1G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-10443, default 133): 
Using default value 133
Last cylinder, +cylinders or +size{K,M,G} (133-10443, default 10443): +2G
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
[root@localhost ~]# mke2fs -t ext4 /dev/sdb1
[root@localhost ~]# mke2fs -t ext4 /dev/sdb2
[root@localhost ~]# mkdir /mnt/{boot,sysroot}
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/
[root@localhost ~]# grub-install --root-directory=/mnt/ /dev/sdb
為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
[root@localhost ~]# cp -r /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/vmlinuz
[root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img
[root@localhost ~]# ls /mnt/boot/
grub  initramfs.img  lost+found  vmlinuz
為rootfs提供bash、ls、cat程序及所依賴的庫文件
[root@localhost ~]# mkdir -p /mnt/sysroot/{bin,lib64}
[root@localhost ~]# cp -r /bin/{bash,ls,cat} /mnt/sysroot/bin/
[root@localhost ~]# cp $(ldd /bin/bash | awk '$3~/^\/lib64/{print $3}') /mnt/sysroot/lib64/
[root@localhost ~]# cp $(ldd /bin/ls | awk '$3~/^\/lib64/{print $3}') /mnt/sysroot/lib64/ 
[root@localhost ~]# cp $(ldd /bin/cat | awk '$3~/^\/lib64/{print $3}') /mnt/sysroot/lib64/  
為grub提供配置文件
[root@localhost ~]# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS 6.6 (Test)
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
在BIOS中選擇sdb作為啟動盤

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

可以直接手動編輯或使用工具在桌面模式下用system-config-kickstart(centos6.x)來創建ks.cfg
#命令段
firewall --disabled//禁用防火墻
install//執行新安裝
cdrom//用光盤安裝
lang en_US.UTF-8//默認安裝語言
keyboard us//選擇鍵盤
rootpw  --iscrypted $6$AF1u4TWzFxa/SzHI$yJvJdbhyw/2rG8dtr.PY6c15sZ.qNc6US/z7PMQ4lADdlIis/qIMO738b9czXK/rX1YDiL7Uv/C6Bi99ig8ov0//管理員加密密碼
authconfig --enableshadow --passalgo=sha512
selinux --enforcing//激活selinux
logging --level=info//信息等級
timezone --utc Asia/Shanghai//系統時區
bootloader --location=mbr --driveorder=sdb --append="crashkernel=auto rhgb quiet"
clearpart --all//刪除所有現在分區
part /boot --fstype=ext4 --size=200//分區掛載
part / --fstype=ext4 --size=40960
part swap --size=4096
#腳本段
%pre//安裝前腳本
echo "start install"
%end
%post//安裝后腳本
echo "install end"
#程序包段
%packages
@chinese-support//中文支持
@development//開發工具
@graphical-desktop-clients//圖形化工具
@remote-desktop-clients//遠程桌面客戶端
%end
簡單引導鏡像光盤制作:
1)復制系統安裝光盤除Packages和repodata外的所有目錄下的所有文件到一自定義目錄(/centos6.6)
mount -r /dev/sr0 /mnt/
mkdir /centos6.6
cp -r /mnt/{CentOS_BuildTag,isolinux,R*,E*,GPL,T*,images} /centos6.6/
cd /centos6.6/
2)創建引導光盤:把/centos6.6目錄創建為光盤鏡像boot.iso
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V 
 "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat 
  -o /root/boot.iso /centos6.6/
簡單自動安裝系統光盤制作
1)復制安裝系統光盤的所有目錄下的所有文件和ks.cfg文件到一自制目錄(/centos6.6)
cd /centos6.6/
cp -r /mnt/* .
cp /root/ks.cfg .
2)在/centos6.6/isolinux/isolinux.cfg文件中append initrd=initrd.img條目中添加ks文件讀取路徑 ks=cdrom:/ks.cfg
3)創建引導光盤:把centos6.6目錄創建為光盤鏡像centos.iso 
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table 
 -V "CentOS 6.6 x86_64 boot"  -b isolinux/isolinux.bin -c isolinux/boot.cat 
 -o /root/boot.iso /centos6.6/

4、寫一個腳本

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

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

   …

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

#!/bin/bash
#
case $1 in
    start)
        echo "starting $0 finished."
        ;;
    stop)
        echo "stoping $0 finished."
        ;;
    restart)
        echo "restart $0 finished."
        ;;
    *)
        echo "error,exit!"
        exit 1
        ;;
esac

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

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

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

#!/bin/bash
while [ 0 ];do
    if `w | grep "^$1\>" &> /dev/null`;then
        echo  "$1 is login."
        exit 0
    else
        sleep 3
    fi
done

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

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

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

#!/bin/bash
#
while [ 0 ];do
    echo "please input a option:"
    echo "cpu)  display cpu info"
    echo "mem)  display memory info"
    echo "disk) display disk info"
    echo "quit) quit"
    read test
    case $test in
    cpu)
        lscpu
        ;;
    mem)
        cat /proc/meminfo
        ;;
    disk)
        fdisk -l
        ;;
    quit)
        exit 0
        ;;
    *)
        echo "you have wrong choose."
        continue
        ;;
    esac
done

7、寫一個腳本

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

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

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

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

#!/bin/bash
#
function userinfo {
    if id $username &> /dev/null;then
        id -u $username
        grep "^$username\>" /etc/passwd | cut -d: -f7
    else
        echo "wrong user!"
    fi
echo $username
}
while true;do
    read -p "Please input a username or quit:" username
    if [ $username == "quit" ];then
        exit 0
    else
        userinfo $username
    fi
done

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

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

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

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

#!/bin/bash
#
libcp(){
for lib in $(ldd $1 | grep -o "[^[:space:]]*/lib[^[:space:]]*");do
    libdir=$(dirname $lib)
    [ -d $target$libdir ] || mkdir $target$libdir
    [ -f $target$lib ] || cp $lib $target$lib
done
}
target=/mnt/sysroot
[ -d $target ] || mkdir $target
read -p "Input a command:" command
while [ "$command" != 'quit' ];do
    if ! which $command &> /dev/null;then
        read -p "No such command,enter again:" command
        continue
    fi
    command=$(which --skip-alias $command)
    cmnddir=$(dirname $command)
    [ -d $target$cmnddir ] || mkdir -p $target$cmnddir
    [ -f $target$command ] || cp $command $target$command
    libcp $command
    read -p "Another command(quit):" command
done

原創文章,作者:N21-天天,如若轉載,請注明出處:http://www.www58058.com/47840

(0)
N21-天天N21-天天
上一篇 2016-09-26
下一篇 2016-09-26

相關推薦

  • N22+張zhangzhang+第5周練習作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@zxn ~]# cat /etc/passwd | grep -E "^root\>" | cut -d: -f7 /bin/bash …

    Linux干貨 2016-09-15
  • Linux文件及目錄管理

    Linux 文件管理 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示 目錄管理類命令:mkdir,rmdir mkdir [OPTION]… DIRECTORY… -p:自動按需創建父目錄; -v顯示詳細過程; -m MODE直接給定權限; rmdir 移除空目錄 rmdir&nbs…

    Linux干貨 2016-10-09
  • raid介紹

    raid介紹 在生產環境中,服務器所需的存儲容量比較大,一般都會選擇磁盤陣列來走存儲。 陣列的優點 多個磁盤合成一個“陣列”來提供更好的性能、冗余,或者兩者都提供 首先在I/O能力上,多個磁盤并行讀寫,可以提高讀寫的速度。 陣列所提供的磁盤冗余,提升存儲設配的耐用性。 RAID實現的 外接式磁盤陣列:通過擴展卡提供適配能力 內接式RAID:主板集成RAID控…

    2017-06-24
  • Linux運維學習歷程-第八天-Linux文本工具sed與Vim(vi)

    概述:    本篇我們主要學習兩個功能非常強大的文本編輯器,了解這兩種文本編輯器的各自的特點 一、sed命令:  1、sed簡介:     sed(Stream EDitor)是一種流編輯器、行編輯器。逐行處理文本內容,即一次處理一行內容,處理時,當前處理的行存儲在“模式空間”(pattern sp…

    Linux干貨 2016-08-15
  • php5.4zend-opcache安裝

    公司在做高并發壓測,fastcgi,apc,ocache,opcache, 幾經考慮,最終考慮用opcache,因為作為 zend-opcache合并為php5.5的分支版本,xcache的前途堪慮, 在環境的安裝上竟然折騰了半個下午沒有搞定,這個作下問題記錄。 先說安裝, http://php.net/manual/zh/opcache.installat…

    2015-04-20
  • 馬哥教育網絡班21期+第10周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) POST(Power On Self Test): 檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常。 加載BIOS(Basic Input and Output System): 根據在BIOS中設置的系統啟動順序來搜索用于啟動系統的驅動器(硬盤、光盤、U…

    Linux干貨 2016-09-08

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-27 09:26

    寫的很好,最后一個腳本可以優化一下,

欧美性久久久久