week10 1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區; (1) 為硬盤新建兩個主分區;并為其安裝grub; (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs; (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件; (4) 為grub提供配置文件; (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機; 3、制作一個kickstart文件以及一個引導鏡像。描述其過程。 4、寫一個腳本 (1) 能接受四個參數:start, stop, restart, status start: 輸出“starting 腳本名 finished.” ... (2) 其它任意參數,均報錯退出; 5、寫一個腳本,判斷給定的用戶是否登錄了當前系統; (1) 如果登錄了,則顯示用戶登錄,腳本終止; (2) 每3秒鐘,查看一次用戶是否登錄; 6、寫一個腳本,顯示用戶選定要查看的信息; cpu) display cpu info mem) display memory info disk) display disk info quit) quit 非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止; 7、寫一個腳本 (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來; (2) 提示用戶輸入一個用戶名或輸入“quit”退出; 當輸入的是用戶名,則調用函數顯示用戶信息; 當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit: 8、寫一個腳本,完成如下功能(使用函數) (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件; (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中; (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求; 題目1: CentOS系統啟動流程: (1)加電自檢:POST 通電后主板CMOS中的BIOS將進行硬件自檢并簡單設置,根據硬件設備等相關情況進入下一步; (2)BIOS,引導加載次序:Boot Squence 按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到的設備; (3)bootloader 引導加載器,用來引導系統加載的程序; 提供菜單,允許用戶選擇要啟動的系統或不同的內核版本;把選定的內核裝載到內存中的特定空間中,解壓、展開, 并把系統控制權限移交給內核; (4)GRUB引導加載器 GRUB是bootloader階段的引導程序,CentOS主要通過GRUB引導; stage1:MBR,446Bytes; stage1_5:MBR之后的扇區,目的是讓stage1中的bootloader能識別stage2所在的分區上的文件系統; stage2:磁盤分區 MBR: Master Boot Record,主引導記;大小為512Bytes,包含: bootloader:446Bytes 存儲分區記錄:64Bytes Magic Number: 2Bytes 配置文件:/boot/grub/grub.conf (5)kernel初始化操作 探測可識別的所有硬件設備; 加載硬件驅動; 以只讀方式掛在根文件系統; 運行用戶空間的第一個應用程序:/sbin/init (6)init centos6有7個運行級別 0:關機 1:單用戶模式,single,維護模式; 2:多用戶模式,會啟動網絡功能,但不會啟動NFS,維護模式; 3:多用戶文本模式; 4:預留級別; 5:多用戶圖形化界面模式; 6:重啟 修改運行級別: 修改配置文件:/etc/inittab centos7運行級別: /lib/systemd/system/ctrl-alt-del.target -> reboot.target /lib/systemd/system/default.target -> graphical.target /lib/systemd/system/runlevel0.target -> poweroff.target /lib/systemd/system/runlevel1.target -> rescue.target /lib/systemd/system/runlevel2.target -> multi-user.target /lib/systemd/system/runlevel3.target -> multi-user.target /lib/systemd/system/runlevel4.target -> multi-user.target /lib/systemd/system/runlevel5.target -> graphical.target /lib/systemd/system/runlevel6.target -> reboot.target 修改運行級別: systemctl set-default multi-user.target (7)運行初始化腳本 系統初始化腳本對應文件:/etc/rc.d/rc.sysinit 作用: 設置主機名; 設置歡迎信息; 激活udev和selinux; 掛載/etc/fstab文件中定義的文件系統; 檢測根文件系統,并以讀寫方式重新掛載根文件系統; 設置系統時鐘; 激活swap設備; 根據/etc/sysctl.conf文件設置內核參數; 激活lvm及軟raid設備; 加載額外的驅動程序; 清理操作; (8)啟動系統服務 centos6下的系統服務腳本都放在/etc/rc.d/init.d目錄下; 查看及設置服務開機啟動: #chkconfig --list #chkconfig SERVICE on centos7下的系統服務腳本放在/etc/systemd/system/TARGET.wants/目錄下; 查看及設置服務開機啟動: #systemctl list-unit-files -t service --state enabled #systemctl is-enabled SERVICE #systemctl enable SERVICE (9)設置登錄終端 根據終端配置打印登錄提示符; 題目2: 新掛載一塊磁盤/dev/sdc,fdisk進行分區; #mkdir /mnt/{boot,sysroot} 格式化分區 #mkfs.ext4 /dev/sdc1 #mkfs.ext4 /dev/sdc2 掛載 #mount /dev/sdc1 /mnt/boot #mount /dev/sdc2 /mnt/sysroot 安裝grub到/dev/sdc #grub-install --root-directory=/mnt /dev/sdc 復制initramfs,vmlinuz及splash.xpm.gz: #cp /boot/initramfs-2.6.32-642.6.1.el6.x86_64.img /mnt/boot/initramfs.img #cp /boot/vmlinuz-2.6.32-642.6.1.el6.x86_64 /mnt/boot/vmlinuz #cp /boot/grub/splash.xpm.gz /mnt/boot/grub/ 編輯/mnt/boot/grub/grub.conf: default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz title CentOS6-NEW root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 initrd /initramfs.img 復制bahs,ls,cat命令: 編輯一個腳本copyCom.sh: #!/bin/bash options(){ for i in $*;do dirname=`dirname $i` [ -d /mnt/sysroot$dirname ] || mkdir -p /mnt/sysroot$dirname [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dirname/ done } while true;do read -p "Please enter a command:" pidname [[ "$pidname" == "quit" ]] && echo "Quit" && exit 0 base=`which --skip-alias $pidname` if [[ -x $base ]];then options `/usr/bin/ldd $base |grep -o "/[^[:space:]]\{1,\}"` options $base else echo "No such command" fi done 使用該腳本會自動將相關命令copy至對應目錄中: 卸載 #umount /dev/sdc{1,2} 關機后將該磁盤掛載至新的虛擬機上做引導盤 題目3: 復制當前主機上的anaconda-ks.cfg或者使用system-config-kickstart圖形化工具創建一個kickstart文件; [root@kvm ~]# cp anaconda-ks.cfg centos7.cfg auth --enableshadow --passalgo=sha512 cdrom #光盤安裝 graphical #圖形化 firstboot --enable ignoredisk --only-use=sda #使用sda keyboard --vckeymap=us --xlayouts='us' #設置鍵盤 lang en_US.UTF-8 #默認語言 network --bootproto=dhcp --device=eno16777736 --ipv6=auto --activate #設置網絡 network --hostname=CentOS7 #設置主機名 rootpw --iscrypted $6$DxmMSJ9ICQ4gLB60$Wpk1aWexiVcXq3UKFfly91NEllxcHSDWtZYRZ/AjRPbqxjmxaFc1gX7DM5yMzq2JdxX6MKn/GUyW3Yv4jfoaF/ #root密碼 services --disabled="chronyd" #禁用服務 timezone Asia/Shanghai --isUtc --nontp #設置時區及不啟用ntp xconfig --startxonboot bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm #分區 clearpart --none --initlabel #磁盤初始化 %packages #安裝包列表 @^gnome-desktop-environment #"@"開頭表示包組 @base @core @desktop-debugging @development @dial-up @directory-client @fonts @gnome-desktop @guest-agents @guest-desktop-agents @input-methods @internet-browser @java-platform @multimedia @network-file-system-client @networkmanager-submodules @print-client @x11 kexec-tools %end #結束 %addon com_redhat_kdump --enable --reserve-mb='auto' #啟用kdump %end 掛載centos7光盤鏡像至/media 創建引導鏡像: [root@kvm ~]# mkdir -p /mnt/iso/isolinux [root@kvm ~]# cp /media/isolinux/* /mnt/iso/isolinux/ [root@kvm ~]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS7" -b /mnt/iso/isolinux/isolinux.bin -c /mnt/iso/isolinux/boot.cat -o /root/centos7.iso MyISO 題目4: #!/bin/bash # PROG=`basename $0` case $1 in "start") echo "starting $PROG finished." ;; "stop") echo "stoping $PROG finished." ;; "restart") echo "restart $PROG finished." ;; "status") echo "status $PROG finished." ;; *) echo "Error Parameter!" && exit 1 ;; esac 題目5: #!/bin/bash # if [ $# -ne 1 ];then echo "Usage: $0 username" && exit 1 fi if /usr/bin/id $1 &> /dev/null;then while true;do if /usr/bin/who | grep "^$1\>" &>/dev/null;then echo "$1 online" break fi echo "User:$1 offline " sleep 3 done else echo "$1 not exists,Please ensure the correct name!" && exit 1 fi 題目6: #!/bin/bash # while true;do cat<<EOF #####Please select your choice:###### cpu //check cpu info mem //check memory info disk //check disk usage quit //quit EOF read -p "Your Choice: " choice case $choice in cpu|CPU) cat /proc/cpuinfo && exit 1;; mem|MME) free -m && exit 1;; disk|DISK) df -hT && exit 1;; quit|QUIT) exit 1;; *) echo "Error Choice!!! " && continue;; esac done [root@kvm shell]# ./check_bi.sh #####Please select your choice:###### cpu //check cpu info mem //check memory info disk //check disk usage quit //quit Your Choice: hello Error Choice!!! #####Please select your choice:###### cpu //check cpu info mem //check memory info disk //check disk usage quit //quit Your Choice: 題目7: #!/bin/bash # UserInfo(){ awk -F":" -v var=$user '{if($1==var)print $1,$7}' /etc/passwd } while true;do read -p "Please input username|quit: " user if id -u $user &>/dev/null;then UserInfo elif [ $user == "quit" ];then exit 1 else echo "$user not exits!" && exit 1 fi done 題目8: #!/bin/bash # options(){ for i in $*;do dirname=`dirname $i` [ -d /mnt/sysroot$dirname ] || mkdir -p /mnt/sysroot$dirname [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dirname/ done } while true;do read -p "Please enter a command:" pidname [[ "$pidname" == "quit" ]] && echo "Quit" && exit 0 base=`which --skip-alias $pidname` if [[ -x $base ]];then options `/usr/bin/ldd $base |grep -o "/[^[:space:]]\{1,\}"` options $base else echo "No such command" fi done
原創文章,作者:devon,如若轉載,請注明出處:http://www.www58058.com/55557