马哥教育网络版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.178linux.com/55557

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

相关推荐

  • linux存储系统流程简介

    存储系统是linux系统非常重要,也是非常基础的知识点。整个存储系统涉及到知识点也非常的多。 本文主要通过磁盘简介->分区管理->文件系统管理->文件存储结构->软连接和硬链接->挂载原理->常见存储相关操作命令,这一条主线来让大家对linux的整个存储系统有个初步,清晰的了解. 1.磁盘简介   &n…

    Linux干货 2015-12-15
  • 计算机基础

    一,计算机的组成        计算机由硬件(hardware)系统和软件(software)系统两大部分组成的         硬件系统是由主机和外部设备 二,计算机硬件 计算机: 是一种能接受和存储信息,并按照存储在其内部的程序对海量数据进行自动,高速地 处理, 然后把 处理的结果输出的现代化智能电子设备  发展历史       第一代计算机(1946-…

    Linux干货 2018-03-26
  • 计算机基础知识点

    说明:(仅仅记录个人认为重要的内容) CPU的相关概念 主频:主频是cpu的时钟频率(cpu clock speed),是cpu运算时的工作频率(1秒内发生的同步脉冲数) 的简称。单位是HZ,一般 来说,主频越高,cpu的速度越快。由于内部结构的不同,并非所有的时钟频率 相同的cpu的性能都一样  外频:系统…

    Linux干货 2017-02-14
  • 进程与计划任务

    PID 进程号,用来标记各个进程;CentOS6中起始的第一个进程为init7中为systemd 进程优先级: 系统优先级:数字越小,优先级越高 0-139(4,5中) 各有140个运行队列和过期队列 0-98,99(6中) 实时优先级:99-0:值越大优先级越高 nice值:-20到19,对应系统优先级100-139或99 进程状态: 运行:running…

    2017-05-14
  • Buffer和Cache的区别

    1、buffer(缓冲) 是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。 2、cache(缓存) 从CPU角度考虑,是为了提高cpu和内存之间的数据交换速度而设计的,例如平常见到的一级缓存、二级缓存、三级缓存。 cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换…

    Linux干货 2018-01-02
  • grep,egrep及相应的正则表达式用法详解

    目录 1、grep简介     1.1、grep是什么     1.2、grep使用格式     1.3、grep常用选项 2、正则表达式与grep     2.1、正则表达式简介  &nb…

    系统运维 2016-08-22