1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
1)開機后會進行POST(開機加電自檢),加載BIOS,之后會根據BIOS上的boot sequence(引導加載次序)找到第一個有引導程序的設備,找到MBR,bootloader(引導加載器)就安裝在MBR內。MBR組成部分(bootloader--446字節,fat(文件系統分配表)--64字節,有效標記--2字節) 2)Linux的bootloader是grub。作用是允許用戶選擇內核,將內核加載到內存的特定空間中,解壓,展開之后,把系統控制權交給內核。 3)內核進行自身初始化工作。探測可識別的所有硬件設備,加載硬件驅動程序(會借助ramdisk(centos 6 ramfs)加載驅動),并以只讀方式掛載根文件系統。運行用戶空間的第一個應用程序(/sbin/init) 4)/sbin/init 應用程序會根據/etc/inittab里的配置,運行系統初始腳本,完成系統初始化,關閉或啟動對應級別下的服務,啟動終端。
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub; 在 /mnt 下新建目錄boot ,執行以下命令
cd /mnt/boot/,查看執行結果
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs; cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz-2.6.32-431.el6.x86_64cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/vmlinuz-2.6.32-431.el6.x86_64創建rootfs文件夾,掛載/dev/sdc2到此目錄,創建系統所需目錄 mkdir /mnt/rootfs mount /dev/sdc2 /mnt/rootfs cd /mnt/rootfs mkdir bin boot dev etc home lib lib64 media misc mnt opt proc root sbin srv sys users usr var
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;cp /bin/bash /mnt/roofs/bincp /bin/ls /mnt/roofs/bincp /bin/ls /mnt/rootfs/binfor i in `ldd /bin/bash | grep -o "[^[:space:]]*/lib[^[:space:]]*"`; do cp $i /mnt/rootfs/lib64/ ; donefor i in `ldd /bin/ls| grep -o "[^[:space:]]*/lib[^[:space:]]*"`; do cp $i /mnt/rootfs/lib64/ ; donefor i in `ldd /bin/cat | grep -o "[^[:space:]]*/lib[^[:space:]]*"`; do cp $i /mnt/rootfs/lib64/ ; done
(4) 為grub提供配置文件; vim /mnt/boo/grub/grub.confdefault=0timeout=5title CentOS (ljy) root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs-2.6.32-431.el6.x86_64.img (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
一、制作ks 文件 安裝system-config-kickstart yum install -y system-config-kickstart-2.8.6.5-1.el6.noarch.rpm 運行system-config-kickstart
打開一個ks文件。
根據需要配置相關的內容。配置好后,將文件進行另存操作,起名叫myks.cfg。
二、創建引導鏡像。
在/tmp 目錄下創建目錄myiso ,在myiso 目錄下創建isolinux 目錄。 執行cp /media/isolinux/* isolinux/ 將光盤上的isolinux 下的文件都拷貝到新建的目錄下。 將myks.cfg文件復制到/tmp/myiso 目錄下。
創建ISO文件系統 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso 到/root 下查看。
4、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/bash # case $1 in start) echo "starting $0 finished." ;; stop) echo "stopping $0 finished" ;; restart) echo "restarting $0 finished" ;; status) echo "status $0 finished" ;; *) echo "error Usage: $0 start|stop|restart|status" exit 3 ;; esac
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash#declare -a aadeclare -a bb bb=`awk -F: '{print $1}' /etc/passwd | xargs`if echo ${bb[@]} | grep -w "$1" &>/dev/null ;thenwhile true;doaa=`who | cut -d" " -f1 |sort |uniq | xargs` if echo ${aa[@]} | grep -w "$1" &>/dev/null ;then echo "$1 is longin" exit fi echo "wait 3 second" sleep 3doneelse echo "$1 is not a user"fi
6、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash # select a in "cpu" "mem" "disk" "quit";do case $a in cpu) cat /proc/cpuinfo ;; mem) cat /proc/meminfo ;; disk) df -h ;; quit) exit ;; *) echo "wrong args,select option 1) cpu 2) mem 3) disk 4) quit" ;; esac done
7、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash # declare -a aa aa=`awk -F: '{print $1}' /etc/passwd | xargs` bb () { UId=`id -u $ss` #SHELL=`awk -F: '$3 ~/\<"$UId"\>/{print $7}' /etc/passwd` #SHELL=`grep $UId /etc/passwd |cut -d: -f7` SHELL=`cut -d: -f1,3,7 /etc/passwd |grep "^\<$ss\>" |cut -d: -f3` echo $UId echo $SHELL } while true;do read -p "please enter a username or quit:" ss if echo ${aa[@]} | grep -w "$ss" &>/dev/null ;then echo $ss bb elif [ $ss == "quit" ];then exit fi done
8、寫一個腳本,完成如下功能(使用函數)
(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
#!/bin/bash # [ -d /mnt/sysroot ] || mkdir /mnt/sysroot [ -d /mnt/sysroot/rootfs ] || mkdir /mnt/sysroot/rootfs [ -d /mnt/sysroot/usr/bin ] || mkdir -p /mnt/sysroot/usr/bin sysroot=/mnt/sysroot rootfs=/mnt/sysroot/rootfs sysbin=/mnt/sysroot/usr/bin read -p "please enter a command:" cmd cmddir=`which $cmd | tail -1` cmlib () { echo "依賴庫展示" ldd $cmddir } cmdcp () { echo "命令復制,查看路徑:$sysbin,$rootfs" if [ "$cmddir" == "/usr/sbin/useradd" ] ;then cp $cmddir $sysbin else cp $cmddir $rootfs fi } cmlibcp () { echo "庫文件復制" ldd $cmddir > /tmp/$$.ldd.txt libname=`cat /tmp/$$.ldd.txt |sed 's/(.*)//g'| sed 's/[[:space:]]//g' |sed 's/.*=>//' | sed '1d' |xargs` for i in $libname;do if [ "$cmddir" == "/usr/sbin/useradd" ] ;then cp $i $sysbin else cp $i $rootfs fi done } #cmlib #cmdcp cmlibcp
原創文章,作者:hhaa0352,如若轉載,請注明出處:http://www.www58058.com/47208
寫的很棒,如果腳本在調整一下格式的話,會更好