1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
a).POST加電自檢; b).讀取BIOS來識別啟動系統的存儲設備 c).設備中的MBR,bootloader的前446字節,是選擇啟動的grub,后面的4*16個字節是存放分區信息的,最后兩個字節是校驗信息的; d).啟動init進程: 讀取/etc/inittab,選擇默認級別; 執行初始化系統腳本,/etc/rc.d/rc.sysinit; 執行/etc/rc.d/rcX.d/下的腳本,我選擇的默認級別是3,所以讀取rc5.d下的所有腳本,來控制系統啟動的時候啟動或關閉那些服務。
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub;
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
(4) 為grub提供配置文件;
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
[root@Hao ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x7d5160c9. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (655-2610, default 655): Using default value 655 Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): +5G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@Hao ~]# mke2fs -t ext4 /dev/sdb1 [root@Hao ~]# mke2fs -t ext4 /dev/sdb2 [root@Hao ~]# mkdir /newdir [root@Hao ~]# mount /dev/sdb1 /newdir/ [root@Hao ~]# grub-install --root-directory=/newdir/ /dev/sdb1 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 /newdir//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 [root@Hao ~]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img /newdir/initramfs [root@Hao ~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /newdir/vmlinuz [root@Hao ~]# mkdir -pv /newdir/boot/grub/ [root@Hao ~]# vim /newdir/boot/grub//grub.conf default=0 timeout=3 title CentOS6.5 root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs [root@Hao ~]# umount /dev/sdb1 [root@Hao ~]# mount /dev/sdb2 /newdir/ [root@Hao ~]# mkdir -p /newdir/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp} [root@Hao ~]# mkdir -p /newdir/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux} [root@Hao ~]# cp /bin/{bash,ls,cat} /mnt/bin [root@Hao ~]# cp `ldd /bin/{bash,ls,cat}| grep -eo "/lib.*[[:space:]]" sort -u` /newdir/lib [root@Hao ~]# sync
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
1.anaconda應用程序支持通過讀取配置文件的內容來完成安裝過程的配置,配置文件稱kickstart文件(在centos或紅帽系列),文件在/root目錄下,這種方法批量部署時需要用到。 2.kickstart文件的組成: 命令段 程序包段:%packages, %end #表示要安裝的程序包 @group #安裝包組 package #要裝的包 -package #不安裝package包 腳本段: %pre #安裝前腳本:安裝過程開始之前要執行的腳本; %post # 安裝后腳本:安裝過程完成之后要執行的腳本; 3.kickstart命令段,分為兩類:必備命令 和 可選命令(輔助完成一些功能) 1.配置kickstart的方式: (1) 手動編輯配置文件; (2) system-config-kickstart,GUI工具;安裝命令system-config-kickstart的程序包名與命令名相同; 2.安裝過程如何獲取并使用kickstart文件: (1)放置于安裝程序能夠獲取到的位置; a.放置于光盤鏡像; b.網絡文件服務器; 3.安裝過程過程中的安裝引導選項 (1).boot: linux #啟動默認安裝模式 linux text #啟動文本安裝模式 (2).與網絡相關的引導選項: ip=IPADDR netmask=MASK gateway=GW dns=DNS_SERVER_IP ifname=NAME:MAC_ADDR #網卡名 (3).指明獲取 kickstart 文件的路徑 DVD drive ks=cdrom:/path/to/kickstart_file HTTP Server ks=http://server_ip:port/path/to/kickstart_file HTTPS Server ks=https://server_ip:port/path/to/kickstart_file FTP Server ks=ftp://serverip:port/path/to/kickstart_file NFS Server ks=nfs:server_ip:/path/to/kickstart_file 下面演示怎樣創建一個引導光盤: (1) 首先準備工作目錄,例如這里使用/tmp/cdrom; <span style="font-size:16px;font-family:'微軟雅黑', 'Microsoft YaHei';">#mkdir /tmp/cdrom<br></span> (2) 掛載系統發行光盤,復制isolinux目錄至/tmp/cdrom; #mount /dev/sr0 /media/Centos-VERSION #cp /media/Centos-VERSION /tmp/cdrom/ (3)用命令system-config-keckstart制作kickstart文件, 復制制作好的kickstart文件ks.cfg至/tmp/cdrom某位置; #system-config-kickstart#cp ks.cfg /tmp/cdrom (4) 如果需要,可以編輯/tmp/cdrom/isolinux/isolinux.cfg,在某label后的append指令后附加ks=信息,從而實現自動調用光盤上提供的ks文件; (5) 創建iso鏡像,采用命令mkios創建好之后會生成一個boot.iso文件,boot.iso文件就是我們的引導鏡像,到這兒我們的鏡像就制作完畢了 # mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 X86_64 boot disk" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso cdrom/ (6)如果需要的話,可以用sftp將制作好的boot.iso鏡像復制到windows上面,然后新建一個虛擬機,在虛擬機中調整啟動次序為光盤啟動,即我們的boot.iso,引導啟動即可
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 "Wrong input" exit 1 ;; esac else echo "Can not be empty!" fi
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash # read -p "input username: " username while true; do if who | grep "^$username" &> /dev/null; then break fi sleep 3 done echo "$username already logged in."
6、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
#!/bin/bash # cat << EOF cpu) show cpu information; mem) show memory information; disk) show disk information; quit) quit ============================ EOF read -p "Enter a option: " option while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$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 getinfo { if id $op &> /dev/null;then grep -E '^('$op')\>' /etc/passwd | cut -d: -f1,3,7;read -p "Enter a username or quit:" op else read -p "wrong argument,plsease enter a username or quit:" op fi } read -p "Enter a username or quit:" op while [[ $op != "quit" ]];do getinfo $op done
8、寫一個腳本,完成如下功能(使用函數)
(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
#!/bin/bash read -p "Enter a commond:" cmd path() { whereis $cmd | cut -d' ' -f2 } ldd $(path $1)| sed '1d'| grep -Eo "/.*[0-9] " > path.txt cp $(path $1) /mnt/sysroot$(path $1) while read line;do cp $line /mnt/sysroot$line done < ./path.txt
原創文章,作者:Net19_口香糖,如若轉載,請注明出處:http://www.www58058.com/23910
寫的很好,排版也很漂亮,加油,第六題的lscpu是什么意思那?