1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub;
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
(4) 為grub提供配置文件;
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
————————————————————————–
1.在虛擬機中添加一個新硬盤
shutdown #在centos關閉的情況下才能添加硬盤
2.啟動centos,查看新添加的硬盤,并對其進行分區格式化
fdisk -l /dev/sd[a-z] fdisk /dev/sdb n p 1 +100M 2 +2G t 2 82 n p +5G w partx -a /dev/sdb cat /proc/partitions mke2fs -t ext4 /dev/sdb1 mke2fs -t ext4 /dev/sdb3 mkswap /dev/sdb2
3.復制現有內核文件和img文件到新磁盤中
mkdir /mnt/boot mount /dev/sdb1 /mnt/boot/ ls /mnt/boot/ grub -install --root-directory=/mnt /dev/sdb ls /mnt/boot/ cp /boot/vmlinuz-3.10.0-327.e17.x86_64 /mnt/boot/vmlinuz-3.10.0-327.e17.x86_64 復制內核到boot下 cp /boot/initramfs-3.10.0-327.e17.x86_64.img /mnt/boot/initramfs-3.10.0-327.e17.x86_64.img
4.編輯配置文件
vim /mnt/boot/grub/grub.conf default=0 timeout=5 title centos(express) root(hd 1,0) kernel /vmlinuz-3.10.0-327.e17.x86_64 ro root=/dev/sdb1 init=/bin/bash selinux=0 initrd /initramfs-3.10.0-327.e17.x86_64.img
5.創建文件并復制依賴的庫文件
mkdir /mnt/sysroot mount /dev/sdb3 /mnt/sysroot/ cd /mnt/sysroot/ mkdir -pr etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media ll cp /bin/bash /mnt/sysroot/bin/ ldd /bin/ash bash依賴于哪些庫 cp /lib64/libtinfo.so.5/mnt/sysroot/lib64 cp /lib64/libd1.so.2 /mnt/sysroot/lib64 cp /lib64/libc.so.6 /mnt/sysroot/lib64/ cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/ cd ch root /mnt/sysroot/ sync
————————————————————————
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
mkdir myboot cd myboot/ ls /media/cdrom cp -r /media/cdrom/isolinux/ ./ cd isolinux/ chmod +w * cd .. pwd cp /root/centos6.x86_64.cfg ks.cfg cd .. #站在myboot之外 #創建光盤鏡像 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/
4、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/bash #Elephant case $1 in start) echo "starting bash finished." ;; stop) echo "stopped bash finished." ;; restart) echo "restarting bash finished." ;; status) echo "status..." ;; *) echo "Wrong argument." exit 2 esac
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#/bin/bash #Elephant read -p "Please input a username:" usrname while true;do if who | grep "^$usrname" &> /dev/null;then break fi sleep 3 done echo "$(date +'''%F %T''') $usrname logged on."
6、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash #Elephant until ! [ 1 ];do cat<<EOF cpu) display cpu info mem) display memory info disk) display disk info quit) quit EOF read -p "Your choice:" option if [[ "$option" == "cpu" ]];then lscpu elif [[ "$option" == "mem" ]];then free -m elif [[ "$option" == "disk" ]];then fdisk -l /dev/[sh]d[a-z] elif [[ "$option" == "quit" ]];then echo "Quit" exit 4 else echo "Please input 'cpu' 'mem' 'disk' or 'quit'" fi done
7、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash #Elephant userinfo(){ if id "$username" &>/dev/null;then grep "^$username\>" /etc/passwd | cut -d: -f3,7 else echo "No such user." fi } until ! [ 1 ];do read -p "Please input username or 'quit':" username if [ $username == "quit" ];then echo "Quit" exit 2 else userinfo fi done
8、寫一個腳本,完成如下功能(使用函數)
(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
#!/bin/bash #Elephant isornotcmd(){ if [ "$path1" == "" ];then echo "$cmd is not a command." exit 2 fi } copycmd(){ if [ -f "/mnt/sysroot/usr/bin" ];then cp -fr $path1 /mnt/sysroot/usr/bin/ else mkdir -p /mnt/sysroot/usr/bin/ cp -fr $path1 /mnt/sysroot/usr/bin/ fi } copycmdrelay(){ for path in $(ldd $path1 | grep -o "/.*\.so\.[0-9]");do if [ -f "/mnt/sysroot/rootfs/" ];then cp -LR $path /mnt/sysroot/rootfs/ #-LR復制鏈接文件的源文件 else mkdir -p /mnt/sysroot/rootfs/ cp -LR $path /mnt/sysroot/rootfs/ fi done } read -p "Please input a command:" cmd path1=$(whereis $cmd | grep -o "/.*" | awk '{print $1}') isornotcmd copycmd copycmdrelay
原創文章,作者:N22_Elephant,如若轉載,請注明出處:http://www.www58058.com/53037
博客寫得非常的好,32個贊,給出了詳細操作步驟,腳本思路清晰,1題能畫一個圖就更完美了,加油!