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: 運行系統初始腳本 如:si::sysinit:/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) l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 ... l6:6:wait:/etc/rc.d/rc 6 設置登錄終端 tty1:2345:respawn:/usr/sbin/mingetty tty1 tty2:2345:respawn:/usr/sbin/mingetty tty2 ... tty6:2345:respawn:/usr/sbin/mingetty tty6
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub;
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
(4) 為grub提供配置文件;
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
添加一塊硬盤 ~]# fdisk /dev/sdb //將新硬盤sdb分為2個主區 ~]# mke2fs -t ext4 /dev/sdb{1,2} //格式化分區 ~]# mount /dev/sdb1 /mnt //掛載分區1到/mnt目錄 ~]# grub-install --root-directory=/mnt /dev/sdb //安裝grub到分區1上 ~]# cp /boot/initramfs-2.6.32-504.el6.i686.img /mnt/initramfs //復制內核文件 ~]# cp /boot/vmlinuz-2.6.32-504.el6.i686 /mnt/vmlinuz //復制ramdisk文件 ~]# vim /mnt/boot/grub/grub.conf //創建grub.conf文件 default=0 timeout=5 title CentOS6(test) root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs ~]# umount /dev/sdb1 //卸載分區1 ~]# mount /dev/sdb2 /mnt //掛載分區2 ~]# mkdir -p /mnt/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp} ~]# mkdir -p /mnt/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux} ~]# cp /bin/{bash,ls,cat} /mnt/bin ~]# cp `ldd /bin/{bash,ls,cat}|grep -eo "/lib.*[[:space:]]"| sort -u` /mnt/lib //復制lib文件 ~]# sync //同步 ~]# init 6 //重啟主機 重啟后進入bios設置 調整硬盤啟動順序后保存退出。
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
可以直接手動編輯或使用創建工具在桌面模式下用system-config-kickstart (CentOS 6)來創建ks.cfg #命令段 firewall --disabled //禁用防火墻 install //執行新安裝 cdrom //用光盤安裝 rootpw --iscrypted $1$TxkJ7T6B$obLELgEGcn0uzgA3QTAPl/ //管理員加密密碼 auth --useshadow --passalgo=sha512 //屏蔽密碼算法 graphical //安裝圖形環境 firstboot --disable //首次引導禁用代理 keyboard us //安裝鍵盤類型 lang en_US //默認語言 selinux --enforcing //激活selinux logging --level=info //信息等級 timezone Asia/Hong_Kong //系統時區 bootloader --location=mbr //在MBR上安裝引導程序 clearpart --all //刪除所有現存分區 part /boot --fstype="ext4" --size=500 //分區掛載 part / --fstype="ext4" --size=10000 #腳本段 %pre //安裝前腳本 echo "start" %end %post //安裝后腳本 echo "end" %end #程序包段 %packages @chinese-support //中文支持 @development //開發工具 @graphical-admin-tools //圖形化工具 @remote-desktop-clients //遠程桌面客戶端 git -ibus-table-cangjie -ibus-table-erbi -ibus-table-wubi %end 簡單引導鏡像光盤制作: (1)復制系統安裝光盤/Packages /repodata外的所有目錄下的所有文件到一自制目錄中(/tmp/myiso/) (2)創建引導光盤:把myiso目錄創建為光盤鏡像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 /tmp/myiso/ 簡單自動安裝系統光盤制作: (1)復制系統安裝光盤的所有目錄下的所有文件和ks.cfg文件到一自制目錄中(/tmp/myiso/) (2)在/tmp/myiso/isolinux/isolinux.cfg文件中 append initrd=initrd.img 條目后 添加ks文件讀取路徑 ks=cdrom:/ks.cfg (3)創建引導光盤:把myiso目錄創建為光盤鏡像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 /tmp/myiso/
4、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/bash # if [ $# -eq 1 ];then case $1 in start) echo "starting $0 finished." ;; stop) echo "stopping $0 finished." ;; restart) echo "restart $0 finished." ;; status) echo "status $0 finished." ;; *) echo "error 2" exit 1 ;; esac else echo "error 1" fi
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash # if id $1 &>/dev/null && [ $# -eq 1 ] ;then until w |grep "^$1\>" &>/dev/null;do sleep 3 echo "seaching..." done echo "$1 is online." else echo "UserId is error." fi
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 read -p "Enter a option: " option until [ "$option" == 'cpu' -o "$option" == "mem" -o "$option" == "disk" -o "$option" == "quit" ];do read -p "Wrong option, Enter again: " option done case "$option" in cpu) lscpu ;; mem) cat /proc/meminfo ;; disk) fdisk -l ;; *) echo "Quit..." exit 0 ;; esac
7、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash # function userInfo { uId=`grep "^$1\>" /etc/passwd | cut -d: -f3` uShell=`grep "^$1\>" /etc/passwd | cut -d: -f7` } read -p "Input a user name or quit: " option until [ "$option" == "quit" ];do if id $option &>/dev/null;then userInfo $option echo -e "User:\t$option\nUID:\t$uId\nSHELL:\t$uShell" else echo "Id is wrong." fi read -p "Input a user name or quit: " option done
8、寫一個腳本,完成如下功能(使用函數)
(1)提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2)復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3)復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;"
#!/bin/bash # declare dirName="/mnt/sysroot" function load_lib { ldd $1 |grep -o "/.*[[:space:]]" } function cp_file { fDir=`dirname $1` mkdir -p "$dirName$fDir" cp -f $1 "$dirName$fDir" } function cp_lib { for file in `ldd $1 |grep -o "/.*[[:space:]]"`;do lDir=`dirname $file` mkdir -p "$dirName$lDir" cp -f $file "$dirName$lDir" done } read -p "Input a command with path: " command mkdir -p $dirName if [ -f $command -a -x $command ];then load_lib $command cp_file $command cp_lib $command else echo "Input command is wrong." fi
原創文章,作者:N23_夕立時雨,如若轉載,請注明出處:http://www.www58058.com/22566
寫的很好,排版也很棒,有的需要用while true寫,在檢查一下加油