馬哥教育網絡版22期+第10周作業

week10
1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
  (1) 為硬盤新建兩個主分區;并為其安裝grub;
  (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
  (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
  (4) 為grub提供配置文件;
  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
4、寫一個腳本
  (1) 能接受四個參數:start, stop, restart, status
   start: 輸出“starting 腳本名 finished.”
   ...
  (2) 其它任意參數,均報錯退出;
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
  (1) 如果登錄了,則顯示用戶登錄,腳本終止;
  (2) 每3秒鐘,查看一次用戶是否登錄;
6、寫一個腳本,顯示用戶選定要查看的信息;
   cpu) display cpu info
   mem) display memory info
   disk) display disk info
   quit) quit
   非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
7、寫一個腳本
  (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
  (2) 提示用戶輸入一個用戶名或輸入“quit”退出;
    當輸入的是用戶名,則調用函數顯示用戶信息;
    當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit: 
8、寫一個腳本,完成如下功能(使用函數)
   (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
   (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
   (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;    
   
題目1:  
CentOS系統啟動流程:
	(1)加電自檢:POST
		通電后主板CMOS中的BIOS將進行硬件自檢并簡單設置,根據硬件設備等相關情況進入下一步;
	(2)BIOS,引導加載次序:Boot Squence
		按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到的設備;
	(3)bootloader
		引導加載器,用來引導系統加載的程序;
			提供菜單,允許用戶選擇要啟動的系統或不同的內核版本;把選定的內核裝載到內存中的特定空間中,解壓、展開,
			并把系統控制權限移交給內核;
	(4)GRUB引導加載器
		GRUB是bootloader階段的引導程序,CentOS主要通過GRUB引導;
		stage1:MBR,446Bytes;
		stage1_5:MBR之后的扇區,目的是讓stage1中的bootloader能識別stage2所在的分區上的文件系統;
		stage2:磁盤分區

		MBR: Master Boot Record,主引導記;大小為512Bytes,包含:
			bootloader:446Bytes
			存儲分區記錄:64Bytes
			Magic Number: 2Bytes

		配置文件:/boot/grub/grub.conf
	(5)kernel初始化操作
		探測可識別的所有硬件設備;
		加載硬件驅動;
		以只讀方式掛在根文件系統;
		運行用戶空間的第一個應用程序:/sbin/init
		
	(6)init
		centos6有7個運行級別
			0:關機
			1:單用戶模式,single,維護模式;
			2:多用戶模式,會啟動網絡功能,但不會啟動NFS,維護模式;
			3:多用戶文本模式;
			4:預留級別;
			5:多用戶圖形化界面模式;
			6:重啟

			修改運行級別:
				修改配置文件:/etc/inittab

		centos7運行級別:
			/lib/systemd/system/ctrl-alt-del.target -> reboot.target
			/lib/systemd/system/default.target -> graphical.target
			/lib/systemd/system/runlevel0.target -> poweroff.target
			/lib/systemd/system/runlevel1.target -> rescue.target
			/lib/systemd/system/runlevel2.target -> multi-user.target
			/lib/systemd/system/runlevel3.target -> multi-user.target
			/lib/systemd/system/runlevel4.target -> multi-user.target
			/lib/systemd/system/runlevel5.target -> graphical.target
			/lib/systemd/system/runlevel6.target -> reboot.target	

			修改運行級別:
				systemctl set-default multi-user.target	

	(7)運行初始化腳本
		系統初始化腳本對應文件:/etc/rc.d/rc.sysinit

		作用:
			設置主機名;
			設置歡迎信息;
			激活udev和selinux;
			掛載/etc/fstab文件中定義的文件系統;
			檢測根文件系統,并以讀寫方式重新掛載根文件系統;
			設置系統時鐘;
			激活swap設備;
			根據/etc/sysctl.conf文件設置內核參數;
			激活lvm及軟raid設備;
			加載額外的驅動程序;
			清理操作;

	(8)啟動系統服務
		centos6下的系統服務腳本都放在/etc/rc.d/init.d目錄下;
			查看及設置服務開機啟動:
				#chkconfig --list 
				#chkconfig SERVICE on

		centos7下的系統服務腳本放在/etc/systemd/system/TARGET.wants/目錄下;
			查看及設置服務開機啟動:
				#systemctl list-unit-files -t service --state enabled
				#systemctl is-enabled SERVICE
				#systemctl enable SERVICE

	(9)設置登錄終端
		根據終端配置打印登錄提示符;

題目2:
  新掛載一塊磁盤/dev/sdc,fdisk進行分區;
  	#mkdir /mnt/{boot,sysroot}

  格式化分區
  	#mkfs.ext4 /dev/sdc1
  	#mkfs.ext4 /dev/sdc2

  掛載
	#mount /dev/sdc1 /mnt/boot
	#mount /dev/sdc2 /mnt/sysroot

  安裝grub到/dev/sdc
  	#grub-install --root-directory=/mnt /dev/sdc

  復制initramfs,vmlinuz及splash.xpm.gz:
	#cp /boot/initramfs-2.6.32-642.6.1.el6.x86_64.img /mnt/boot/initramfs.img
	#cp /boot/vmlinuz-2.6.32-642.6.1.el6.x86_64 /mnt/boot/vmlinuz
	#cp /boot/grub/splash.xpm.gz /mnt/boot/grub/

  編輯/mnt/boot/grub/grub.conf:
	default=0
	timeout=5
	splashimage=(hd0,0)/grub/splash.xpm.gz
	title CentOS6-NEW 
		root (hd0,0)
		kernel /vmlinuz ro root=/dev/sda2
		initrd /initramfs.img
  
  復制bahs,ls,cat命令:
  	編輯一個腳本copyCom.sh:
		#!/bin/bash
		options(){
		    for i in $*;do
		        dirname=`dirname $i`
		        [ -d /mnt/sysroot$dirname ] || mkdir -p /mnt/sysroot$dirname
		        [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dirname/
		        done
		}

		while true;do
		    read -p "Please enter a command:" pidname
		    [[ "$pidname" == "quit" ]] && echo "Quit" && exit 0
		    base=`which --skip-alias $pidname`
		    if [[ -x $base ]];then
		        options `/usr/bin/ldd $base |grep -o "/[^[:space:]]\{1,\}"`
		        options $base
		    else
		        echo "No such command"
		    fi
		done
 	
	使用該腳本會自動將相關命令copy至對應目錄中:


  卸載
  	#umount /dev/sdc{1,2}

  關機后將該磁盤掛載至新的虛擬機上做引導盤

題目3:
    復制當前主機上的anaconda-ks.cfg或者使用system-config-kickstart圖形化工具創建一個kickstart文件;  
	[root@kvm ~]# cp anaconda-ks.cfg centos7.cfg
        auth --enableshadow --passalgo=sha512
	cdrom	#光盤安裝
	graphical	#圖形化
	firstboot --enable
	ignoredisk --only-use=sda 	#使用sda
	keyboard --vckeymap=us --xlayouts='us'	#設置鍵盤
	lang en_US.UTF-8	#默認語言
	network  --bootproto=dhcp --device=eno16777736 --ipv6=auto --activate  #設置網絡
	network  --hostname=CentOS7 #設置主機名
	rootpw --iscrypted $6$DxmMSJ9ICQ4gLB60$Wpk1aWexiVcXq3UKFfly91NEllxcHSDWtZYRZ/AjRPbqxjmxaFc1gX7DM5yMzq2JdxX6MKn/GUyW3Yv4jfoaF/  #root密碼
	services --disabled="chronyd"  #禁用服務
	timezone Asia/Shanghai --isUtc --nontp  #設置時區及不啟用ntp
	xconfig  --startxonboot
	bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda  
	autopart --type=lvm #分區
	clearpart --none --initlabel #磁盤初始化
	%packages	#安裝包列表
	@^gnome-desktop-environment  #"@"開頭表示包組
	@base
	@core
	@desktop-debugging
	@development
	@dial-up
	@directory-client
	@fonts
	@gnome-desktop
	@guest-agents
	@guest-desktop-agents
	@input-methods
	@internet-browser
	@java-platform
	@multimedia
	@network-file-system-client
	@networkmanager-submodules
	@print-client
	@x11
	kexec-tools
	%end  #結束
	%addon com_redhat_kdump --enable --reserve-mb='auto' #啟用kdump
	%end

    掛載centos7光盤鏡像至/media

    創建引導鏡像:
	[root@kvm ~]# mkdir -p /mnt/iso/isolinux
	[root@kvm ~]# cp /media/isolinux/* /mnt/iso/isolinux/
	[root@kvm ~]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS7" -b /mnt/iso/isolinux/isolinux.bin -c /mnt/iso/isolinux/boot.cat -o /root/centos7.iso MyISO

題目4:
    #!/bin/bash
    #
	PROG=`basename $0`
	case $1 in 
	  "start")
	    echo "starting $PROG finished."
	    ;;
	  "stop")
	    echo "stoping $PROG finished."
	    ;;
	  "restart")
	    echo "restart $PROG finished."
	    ;;
	  "status")
	    echo "status $PROG finished."
	    ;;
	  *)
	    echo "Error Parameter!" && exit 1
	    ;;
	esac


題目5:
	#!/bin/bash
	#

	if [ $# -ne 1 ];then
	  echo "Usage: $0 username" && exit 1
	fi

	if /usr/bin/id $1 &> /dev/null;then
	    while true;do
	      if /usr/bin/who | grep "^$1\>" &>/dev/null;then
	        echo "$1 online"
	        break
	      fi
	        echo "User:$1 offline "
	        sleep 3
	    done
	else
	  echo "$1 not exists,Please ensure the correct name!" && exit 1
	fi


題目6:
	#!/bin/bash
	#
	while true;do
	  cat<<EOF
	#####Please select your choice:######
	cpu   //check cpu info
	mem   //check memory info 
	disk  //check disk usage
	quit  //quit
	EOF
	  read -p "Your Choice: " choice
	  case $choice in 
	    cpu|CPU)
	      cat /proc/cpuinfo && exit 1;;
	    mem|MME)
	      free -m && exit 1;;
	    disk|DISK)
	      df -hT && exit 1;;
	    quit|QUIT)
	      exit 1;;
	    *)
	      echo "Error Choice!!! " && continue;;
	  esac
	done

[root@kvm shell]# ./check_bi.sh 
#####Please select your choice:######
cpu   //check cpu info
mem   //check memory info 
disk  //check disk usage
quit  //quit
Your Choice: hello
Error Choice!!! 
#####Please select your choice:######
cpu   //check cpu info
mem   //check memory info 
disk  //check disk usage
quit  //quit
Your Choice: 

題目7:
	#!/bin/bash
	#
	UserInfo(){
	   awk -F":" -v var=$user '{if($1==var)print $1,$7}' /etc/passwd
	}
	while true;do
	  read -p "Please input username|quit: " user
	     if id -u $user &>/dev/null;then
	        UserInfo
	     elif [ $user == "quit" ];then
	        exit 1
	     else
	        echo "$user not exits!" && exit 1
	     fi 
	done

題目8:

	#!/bin/bash
	#
	options(){
	    for i in $*;do
	        dirname=`dirname $i`
	        [ -d /mnt/sysroot$dirname ] || mkdir -p /mnt/sysroot$dirname
	        [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dirname/
	        done
	}

	while true;do
	    read -p "Please enter a command:" pidname
	    [[ "$pidname" == "quit" ]] && echo "Quit" && exit 0
	    base=`which --skip-alias $pidname`
	    if [[ -x $base ]];then
	        options `/usr/bin/ldd $base |grep -o "/[^[:space:]]\{1,\}"`
	        options $base
	    else
	        echo "No such command"
	    fi
	done

原創文章,作者:devon,如若轉載,請注明出處:http://www.www58058.com/55557

(0)
devondevon
上一篇 2016-10-29
下一篇 2016-10-29

相關推薦

  • 在CentOS5,6上破解和加密口令

    在CentOS5,6上:    破解和加密口令:     破解口令方法一: 破解口令方法二:    重啟虛擬機進入救援模式: 備注:生產中不用虛擬機時不要掛載光盤;防止光盤引導破解密碼 加密口令: 編輯配置文件: /etc/grub.conf

    2017-05-16
  • 馬哥教育網絡班22期-第2周博客作業2

    2、bash的工作特性之命令狀態返回值和命令展開所涉及的內容及其示例演示 bash的基礎特性:命令的執行狀態結果   命令執行的狀態結果:   bash通過狀態返回值來輸出此結果:     成功:0     失?。?-255  &…

    Linux干貨 2016-08-22
  • 文件查看及查找命令

    cat  查看一個文件   -E: 顯示行結束符$   -n: 對顯示出的每一行進行編號   -A:顯示所有控制符   -b:非空行編號   -s:壓縮連續的空行成一行   -T:顯示制表符 常用:cat -An /et…

    Linux干貨 2017-04-08
  • 編譯內核

    了解內核;內核設計體系:單內核,微內核     linux:單內核設計,但充分借鑒了微內核體系的設計優點;為內核引入了模塊化機制; 內核的組成部分一般有三種;     kernel:內核核心,一般為bzimage (bzip2格式所壓縮的內核映像文件),這個文件通常位于/boot…

    Linux干貨 2016-09-21
  • 馬哥教育網絡班N22期+第三周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。    who | cut -d " " -f 1 | sort | uniq 2、取出最后登錄到當前系統的用戶的相關信息。    last | head -n 1  3、取出當前系統上被用戶當作其默…

    Linux干貨 2016-09-08
  • Linux 基礎知識

    1、環境變量 2、幫助 3、時間 4、引用 5、命令歷史 6、FHS 7、命令別名 8、Globbing文件名通配 9、命令,路徑補全 10、快捷鍵 ============================================ shell:是用戶和linux(或者kernel)之間的接口程序,你在提示符下輸入的每個命令都先由shell解釋(命令語…

    Linux干貨 2016-06-09
欧美性久久久久