1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
(1) POST階段
加電自檢,確保每個設備能正常工作
(2) BIOS
按次序查找跟引導設備,第一個有引導程序的設備即為本次啟動要用到的設備
(3) Bootloader:引導加載器
GRUB:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本;把用戶選擇的系統或內核版本裝載到內存特定的空間中解壓、展開,完成后將控制權交給內核
(4) Kernel:
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動設備。
注意:如果不能識別設備,需要臨時生成ramdisk來動態識別設備的驅動,并加載硬件設備
(5) roofts:
只讀的方式掛載跟文件系統
(6) /sbin/init:開始啟動用戶空間程序
設置默認運行級別
運行系統初始化腳本:腳本存放位置:/etc/rc.d/rc.sysinit
設置主機名
設置歡迎信息
激活udev和SELinux
掛載/etc/fstab文件中定義的所有文件系統
檢測跟文件系統,如果一切正常,以讀寫方式重新掛載根文件系統
設置系統時鐘
根據/etc/sysctl.conf文件的設置,設置內核參數
激活lvm及raid設備
激活swap設備
加載額外的設備的驅動程序
清理操作
關閉對應級別需要停止的服務,啟動對應級別需要開啟的服務
設置登錄終端
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub;
創建分區:
安裝grub
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
內核和ramdisk文件
第二個分區上的rootfs
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
(4) 為grub提供配置文件;
grub.conf配置文件放置于/tmp/boot/grub
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
新建目標主機:Test Installation of Grub
啟動正常
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
(1) 制作kickstart文件
安裝制作kickstart文件程序
yum -y install system-config-kickstart
啟動制作kickstart文件程序
ksystem-config-kickstart
(2) 制作引導鏡像
在根用戶家目錄下創建myboot目錄
掛載光盤鏡像至/media/cdrom
復制/media/cdrom/isolinux目錄至/root/myboot
復制制作完成的ks.cfg至/root/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/
在VMWare中選擇boot.iso作為引導鏡像
4、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/bash # cat << EOF start) start the service stop) stop the service restart) restart the service status) check the status of the service ***************************************** ***************************************** EOF read -p "Please input your selection: " selection case $selection in start) echo "starting $0 finished" ;; stop) echo "stopping $0 finished" ;; restart) echo "restarting $0 finished" ;; status) echo "checking the status of $0 finished" ;; *) echo "please input valid selection" ;; esac
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash # while true; do if who | grep "^meng\>" >& /dev/null; then break fi sleep 3 done echo "$(date +"%F %T") meng login" >> /tmp/userinfo.log
6、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash # cat << EOF Display information as following shown selection cpu) display cpu info mem) display memory info disk) display disk info quit) quit ************************************************ EOF while true; do read -p "Please input your selection: " selection case $selection in cpu) lscpu ;; mem) free -m ;; disk) fdisk -l /dev/vd[a-z] ;; quit) echo "Bye Bye" exit 0 ;; *) echo "Please input valid selection" ;; esac done
7、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash # userInfo() { local userLine=$(grep $1 /etc/passwd) local userSHELL=${userLine##*:} local userID=$(echo $userLine | cut -f3 -d:) echo "$userSHELL and $userID" } quit() { if [ "$1" == "quit" ]; then echo "Bye Bye" exit 2 fi } while true; do read -p "Please input your username or input 'quit': " choice if [ "$choice" == "quit" ]; then quit $choice break fi if id $choice >& /dev/null; then userInfo $choice fi done
8、寫一個腳本,完成如下功能(使用函數)
(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
read -p "Please input a command: " cmd cmdPath=$(which $cmd | grep bin) cpCmd() { cp $cmdPath /mnt/sysroot$cmdpath echo "Copy $cmdPath to path /mnt/sysroot/" } cpFile() { libFile=$(ldd $cmdPath | grep -o "/[^[:space:]]\{1,\}") for i in $libFile; do cp $lib /mnt/sysroot$cmdPath echo "Copy $libFile to path/mnt/sysroot/$cmdPath" done } cpCmd cpFile
原創文章,作者:mxb93,如若轉載,請注明出處:http://www.www58058.com/52532