1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 1.post加電自檢,bios檢測基礎硬件設備 2.boot sequence:按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備;讀取啟動設備MBR中 的bootloader,啟動GRUB,選擇內核加載到內存中。 3.kernel:自身初始化:探測可識別到的所有硬件設備;加載硬件驅動程序;(有可能會借助于ramdisk加載驅動) 以只讀方式掛載根文件系統;運行用戶空間的第一個應用程序:/sbin/init 4.運行/sbin/init:設置默認運行級別/etc/inittab 運行系統初始腳本/etc/rc.d/rc.sysinit完成系統初始化, 關閉對應下需要關閉的服務,啟動需要啟動服務/etc/rc.d/init.d,設置登錄終端 系統初始化: POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --> init 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區; (1) 為硬盤新建兩個主分區;并為其安裝grub; (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs; (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件; (4) 為grub提供配置文件; (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機; (1) [root@node1 ~]# fdisk -l /dev/sdb Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0xf34d70c0 Device Boot Start End Blocks Id System /dev/sdb1 1 1000 8032468+ 83 Linux /dev/sdb2 1001 2610 12932325 83 Linux [root@node1 ~]# partx -a /dev/sdb [root@node1 ~]# mkfs.ext4 /dev/sdb1 [root@node1 ~]# mkfs.ext4 /dev/sdb2 [root@node1 /]# mkdir -p /mnt/{ramdisk,rootfs} [root@node1 /]# mount /dev/sdb1 /mnt/ramdisk/ [root@node1 /]# mount /dev/sdb1 /mnt/rootfs/ [root@node1 /]# grub-install --root-directory=/mnt /dev/sdb (2) [root@node1 boot]# cp /boot/vmlinuz-2.6.32-642.1.1.el6.x86_64 /mnt/ramdisk/ [root@node1 boot]# cp /boot/initramfs-2.6.32-642.1.1.el6.x86_64.img /mnt/rootfs/ (3) [root@node1 boot]# mkdir -p /mnt/rootfs/{bin,lib,lib64} [root@node1 boot]# cp -r /bin/bash /mnt/rootfs/bin [root@node1 boot]# cp $(ldd /bin/bash | awk '$3~/^\lib64/{printf $3}') /mnt/rootfs/ (4) default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-642.6.2.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-642.6.2.el6.x86_64 ro root=/dev/sdb1 selinux=0 init=/bin/bash initrd /initramfs-2.6.32-642.6.2.el6.x86_64.img 3、制作一個kickstart文件以及一個引導鏡像。描述其過程。 yum -y install system-config-kickstart [root@centos6 ~]# cat ks.cfg #platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use NFS installation media nfs --server=192.168.1.114 --dir=/mnt key 123456 # Root password rootpw --iscrypted $1$lYPG.hOy$UL8JxMVjmQeMp4018XIPn1 # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical firstboot --disable # System keyboard keyboard us [root@centos6 ~]# mkdir -p /tmp/myiso/isolinux [root@centos6 ~]# cp /media/isolinux/* /tmp/myiso/isolinux/ [root@centos6 ~]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.8 x86_64 boo-b /tmp/myiso/isolinux/isolinux.bin -c /tmp/myiso/isolinux/boot.cat -o /root/boot.iso myiso 4、寫一個腳本 (1) 能接受四個參數:start, stop, restart, status start: 輸出“starting 腳本名 finished.” ... (2) 其它任意參數,均報錯退出; #!/bin/bash if [ $# -eq 0 ];then echo "input argu" 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 [ 0 ];do if `w | grep "^$1\>" &> /dev/null`;then echo "$1 is login" exit 2 else sleep 3 fi done 6、寫一個腳本,顯示用戶選定要查看的信息; cpu) display cpu info mem) display memory info disk) display disk info quit) quit 非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止; #!/bin/bash if [ $# -eq 0 ];then echo "input argu" exit 1 fi while [ 0 ];do case $1 in cpu) lscpu;; mem) cat /proc/meminfo;; disk) fidsk -l;; *) echo "error" continue;; quit) exit 1;; esac done 7、寫一個腳本 (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來; (2) 提示用戶輸入一個用戶名或輸入“quit”退出; 當輸入的是用戶名,則調用函數顯示用戶信息; 當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit: #!/bin/bash while [ 0 ];do read -p " input user:" username if [ $username == "quit" ];then exit 2 else userinfo $username fi done userinfo { if `id $username &> /dev/null`;then echo "uid: `id -u $username`" echo "shell: `grep '^$username' /etc/passwd | cut -d: -f7`" else echo "error" fi } 8、寫一個腳本,完成如下功能(使用函數) (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件; (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中; (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求; #!/bin/bash read -p " input argu: " comd path=$(which $comd) lib=$(ldd $path | egrep -o "[^[:space:]]+") comcp $comd libcp $comd comcp { cp $path /mnt/sysroot$path } libcp { for i in $lib;do cp $i /mnt/sysroot$path done } 以上
原創文章,作者:N21_619463772,如若轉載,請注明出處:http://www.www58058.com/48552
寫的很好,就是排版可能需要修改一下,繼續加油