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

