1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
一張圖足以說明一切:
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub;
(2) 為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs;
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
(4) 為grub提供配置文件;
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
1.創建2個主分區,sdb1,sdb2 [root@bogon ~]# fdisk -l /dev/sdb Disk /dev/sdb: 11.8 GB, 11811160064 bytes 255 heads, 63 sectors/track, 1435 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xa5b8f2f4 Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 83 Linux /dev/sdb2 655 1308 5253255 83 Linux 2.格式化分區,格式為ext4 [root@bogon ~]# mke2fs -t ext4 /dev/sdb{1,2} 3.掛載分區sdb1到/mnt下 [root@bogon ~]# mount /dev/sdb1 /mnt/boot 4.安裝grub到sdb1上 [root@bogon ~]# grub-install --root-directory=/mnt /dev/sdb Probing devices to guess BIOS drives. This may take a long time. Installation finished. No error reported. This is the contents of the device map /mnt/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (fd0) /dev/fd0 (hd0) /dev/sda (hd1) /dev/sdb 5.復制內核及ramdisk文件到sdb1上 [root@bogon ~]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img [root@bogon ~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz 6.編輯grub.conf文件,/mnt/boot/grub/grub.conf [root@bogon grub]# vim 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.img 7.卸載/mnt目錄 [root@bogon /]# umount /mnt 8.掛載分區/dev/sdb2到/mnt下 [root@bogon /]# mount /dev/sdb2 /mnt/sysroot 9.創建系統必須的目錄 [root@bogon mnt]# mkdir -p /mnt/sysroot{bin,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} 10.拷貝命令的到/mnt下 [root@bogon boot]# cp /bin/{bash,ls,cat} /mnt/bin/ 10.拷貝命令的依賴文件 [root@bogon boot]# cp `ldd /bin/{bash,ls,cat} |grep -oe "/lib.*[[:space:]]"|sort -u` /mnt/lib64/ 12.測試并同步 [root@bogon boot]# chroot /mnt/sysroot bash-4.1# ls bin boot dev etc lib lib64 lost+found proc sbin sys tmp usr var bash-4.1# ls bin boot dev etc lib lib64 lost+found proc sbin sys tmp usr var bash-4.1# cat bin cat: bin: Is a directory bash-4.1# cd bin bash-4.1# ls bash cat ls bash-4.1# exit exit [root@bogon boot]# sync 13.重啟后,將這塊硬盤添加到新創建的虛擬機做引導盤
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
可以直接手動編輯或使用工具在桌面模式下用system-config-kickstart(centos6.x)來創建ks.cfg #命令段 firewall --disabled//禁用防火墻 install//執行新安裝 cdrom//用光盤安裝 lang en_US.UTF-8//默認安裝語言 keyboard us//選擇鍵盤 rootpw --iscrypted $1$gWoGuWzn$E7polUWsUlS6qPXzQryRm //管理員密碼 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=500//分區掛載 part / --fstype=ext4 --size=20480 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.5) mount -r /dev/cdrom /mnt/ mkdir /centos6.5 cp -arf /mnt/{CentOS_BuildTag,isolinux,R*,E*,GPL,T*,images} /centos6.5/ cd /centos6.6/ 2)創建引導光盤:把/centos6.5目錄創建為光盤鏡像boot.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 /centos6.5/ 簡單自動安裝系統光盤制作 1)復制安裝系統光盤的所有目錄下的所有文件和ks.cfg文件到一自制目錄(/centos6.5) cd /centos6.6/ cp -r /mnt/* . cp /root/ks.cfg . 2)在/centos6.5/isolinux/isolinux.cfg文件中append initrd=initrd.img條目中添加ks文件讀取路徑 ks=cdrom:/ks.cfg 3)創建引導光盤:把centos6.5目錄創建為光盤鏡像centos.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 /centos6.5
圖形界面制造kistart文件的補充說明:
通過system-config-kickstart圖像工具制造kickstart文件
(1)必須按照桌面圖形化工具
yum groupinstall "Desktop" yum groupinstall "X Window System" yum groupinstall "Chinese Support"
(2)按照system-config-kickstart圖形工具
yum install system-config-kickstart
(3)執行system-config-kickstart命令
system-config-kickstart
(4)通過File里的Open File打開/root/目錄下,按照本系統自動生成的anaconda-ks.cfg文件,根據此文件作為模板編輯,就簡單多了
4、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/bash if [ $# -eq 0 ]; then echo "Input arug" exit 1 fi case $1 in start) echo "starting finished";; stop) echo "stoping finished";; restart) echo "restart finished";; *) exit 2 esac
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash # if [ $# -eq 0 ]; then echo "Input argu" exit 1 fi while true; do if `w | grep "^$1\>" &>/dev/null`; then echo "$1 is login" exit 1 fi sleep 3 done
6、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash # while true; do read -p "Input you argu(cpu/mem/disk/quit):" argu case $argu in cpu) lscpu;; mem) cat /proc/meminfo;; disk) fdisk -l s[hd][a-z];; quit) exit 1;; *) echo "error" continue;; esac done
7、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash cat << EOR user) show user uid and shell quit) quit EOR while true; do read -p "Please input username or quit:" username if id $username &> /dev/null; then uid=`cat /etc/passwd |grep "^$username\>"|cut -d: -f3` shell=`cat /etc/passwd |grep "$username\>"|cut -d: -f7` echo "userid is:" $uid echo "usershell is:" $shell continue elif [ $username == quit ];then exit 0 else echo "ERROR option" fi done
8、寫一個腳本,完成如下功能(使用函數)
(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
#!/bin/bash # cpcomd () { read -p "input a command:" comd dirname=`dirname $(which --skip-alias $comd)` if [ -d /mnt/sysroot$dirname ]; then \cp $(which --skip-alias $comd) /mnt/sysroot$dirname else mkdir -p /mnt/sysroot$dirname \cp $(which --skip-alias $comd) /mnt/sysroot$dirname fi for i in `ldd $(which --skip-alias $comd) | grep -o "/lib.*[[:space:]]"`; do dirname=`dirname $i` if [ -d /mnt/sysroot$dirname ]; then \cp $i /mnt/sysroot$dirname else mkdir /mnt/sysroot$dirname \cp $i /mnt/sysroot$dirname fi done } cpcomd
原創文章,作者:dawning,如若轉載,請注明出處:http://www.www58058.com/61601
一張圖足以說明一切 ,這個裝逼我給滿分!??!