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