1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)
CentOS主机按以下顺序启动 (1)POST 加电自检 (2)BIOS 读取CMOS中的BIOS设置的参数来识别基础硬件,寻找到启动设备 (3)MBR (1)读取启动设备MBR中前446字节的bootloader (2)读取MBR后的扇区用来识别grub以及内核kernel所在的区域 (3)启动grub (4)GRUB 显示菜单界面,选择运行内核kernel;配置文件是/boot/grub/grub.conf (1) 提供菜单、并提供交互式接口 (2) 加载用户选择的内核或操作系统 (3) 为菜单提供了保护机制 (5)KERNEL 自身初始化 (1)探测可识别到的所有硬件设备; (2)加载硬件驱动程序;(有可能会借助于ramdisk加载驱动) (3)以只读方式挂载根文件系统; (4)运行用户空间的第一个应用程序:/sbin/init (6)INIT 运行/sbin/init程序,配置文件/etc/inittab和/etc/init/*.conf 设置默认运行级别 如:id:3:initdefault: 运行系统初始脚本 如:si::sysinit:/etc/rc.d/rc.sysinit (1) 设置主机名; (2) 设置欢迎信息; (3) 激活udev和selinux; (4) 挂载/etc/fstab文件中定义的文件系统; (5) 检测根文件系统,并以读写方式重新挂载根文件系统; (6) 设置系统时钟; (7) 激活swap设备; (8) 根据/etc/sysctl.conf文件设置内核参数; (9) 激活lvm及software raid设备; (10) 加载额外设备的驱动程序; (11) 清理操作; 关闭对应的脚本中需要关闭的服务,启动需要启动服务(实际服务命令位于/etc/rc.d/init.d) l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 ... l6:6:wait:/etc/rc.d/rc 6 设置登录终端 tty1:2345:respawn:/usr/sbin/mingetty tty1 tty2:2345:respawn:/usr/sbin/mingetty tty2 ... tty6:2345:respawn:/usr/sbin/mingetty tty6
2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
(1) 为硬盘新建两个主分区;并为其安装grub;
(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
(4) 为grub提供配置文件;
(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;
添加一块硬盘 ~]# fdisk /dev/sdb //将新硬盘sdb分为2个主区 ~]# mke2fs -t ext4 /dev/sdb{1,2} //格式化分区 ~]# mount /dev/sdb1 /mnt //挂载分区1到/mnt目录 ~]# grub-install --root-directory=/mnt /dev/sdb //安装grub到分区1上 ~]# cp /boot/initramfs-2.6.32-504.el6.i686.img /mnt/initramfs //复制内核文件 ~]# cp /boot/vmlinuz-2.6.32-504.el6.i686 /mnt/vmlinuz //复制ramdisk文件 ~]# vim /mnt/boot/grub/grub.conf //创建grub.conf文件 default=0 timeout=5 title CentOS6(test) root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs ~]# umount /dev/sdb1 //卸载分区1 ~]# mount /dev/sdb2 /mnt //挂载分区2 ~]# mkdir -p /mnt/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp} ~]# mkdir -p /mnt/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux} ~]# cp /bin/{bash,ls,cat} /mnt/bin ~]# cp `ldd /bin/{bash,ls,cat}|grep -eo "/lib.*[[:space:]]"| sort -u` /mnt/lib //复制lib文件 ~]# sync //同步 ~]# init 6 //重启主机 重启后进入bios设置 调整硬盘启动顺序后保存退出。
3、制作一个kickstart文件以及一个引导镜像。描述其过程。
可以直接手动编辑或使用创建工具在桌面模式下用system-config-kickstart (CentOS 6)来创建ks.cfg #命令段 firewall --disabled //禁用防火墙 install //执行新安装 cdrom //用光盘安装 rootpw --iscrypted $1$TxkJ7T6B$obLELgEGcn0uzgA3QTAPl/ //管理员加密密码 auth --useshadow --passalgo=sha512 //屏蔽密码算法 graphical //安装图形环境 firstboot --disable //首次引导禁用代理 keyboard us //安装键盘类型 lang en_US //默认语言 selinux --enforcing //激活selinux logging --level=info //信息等级 timezone Asia/Hong_Kong //系统时区 bootloader --location=mbr //在MBR上安装引导程序 clearpart --all //删除所有现存分区 part /boot --fstype="ext4" --size=500 //分区挂载 part / --fstype="ext4" --size=10000 #脚本段 %pre //安装前脚本 echo "start" %end %post //安装后脚本 echo "end" %end #程序包段 %packages @chinese-support //中文支持 @development //开发工具 @graphical-admin-tools //图形化工具 @remote-desktop-clients //远程桌面客户端 git -ibus-table-cangjie -ibus-table-erbi -ibus-table-wubi %end 简单引导镜像光盘制作: (1)复制系统安装光盘/Packages /repodata外的所有目录下的所有文件到一自制目录中(/tmp/myiso/) (2)创建引导光盘:把myiso目录创建为光盘镜像boot.iso ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /tmp/myiso/ 简单自动安装系统光盘制作: (1)复制系统安装光盘的所有目录下的所有文件和ks.cfg文件到一自制目录中(/tmp/myiso/) (2)在/tmp/myiso/isolinux/isolinux.cfg文件中 append initrd=initrd.img 条目后 添加ks文件读取路径 ks=cdrom:/ks.cfg (3)创建引导光盘:把myiso目录创建为光盘镜像boot.iso ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /tmp/myiso/
4、写一个脚本
(1) 能接受四个参数:start, stop, restart, status
start: 输出“starting 脚本名 finished.”
…
(2) 其它任意参数,均报错退出;
#!/bin/bash # if [ $# -eq 1 ];then case $1 in start) echo "starting $0 finished." ;; stop) echo "stopping $0 finished." ;; restart) echo "restart $0 finished." ;; status) echo "status $0 finished." ;; *) echo "error 2" exit 1 ;; esac else echo "error 1" fi
5、写一个脚本,判断给定的用户是否登录了当前系统;
(1) 如果登录了,则显示用户登录,脚本终止;
(2) 每3秒钟,查看一次用户是否登录;
#!/bin/bash # if id $1 &>/dev/null && [ $# -eq 1 ] ;then until w |grep "^$1\>" &>/dev/null;do sleep 3 echo "seaching..." done echo "$1 is online." else echo "UserId is error." fi
6、写一个脚本,显示用户选定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;
#!/bin/bash # cat << EOF cpu) display cpu info mem) display memory info disk) display disk info quit) quit ============================== EOF read -p "Enter a option: " option until [ "$option" == 'cpu' -o "$option" == "mem" -o "$option" == "disk" -o "$option" == "quit" ];do read -p "Wrong option, Enter again: " option done case "$option" in cpu) lscpu ;; mem) cat /proc/meminfo ;; disk) fdisk -l ;; *) echo "Quit..." exit 0 ;; esac
7、写一个脚本
(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
(2) 提示用户输入一个用户名或输入“quit”退出;
当输入的是用户名,则调用函数显示用户信息;
当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:
#!/bin/bash # function userInfo { uId=`grep "^$1\>" /etc/passwd | cut -d: -f3` uShell=`grep "^$1\>" /etc/passwd | cut -d: -f7` } read -p "Input a user name or quit: " option until [ "$option" == "quit" ];do if id $option &>/dev/null;then userInfo $option echo -e "User:\t$option\nUID:\t$uId\nSHELL:\t$uShell" else echo "Id is wrong." fi read -p "Input a user name or quit: " option done
8、写一个脚本,完成如下功能(使用函数)
(1)提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
(2)复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
(3)复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;"
#!/bin/bash # declare dirName="/mnt/sysroot" function load_lib { ldd $1 |grep -o "/.*[[:space:]]" } function cp_file { fDir=`dirname $1` mkdir -p "$dirName$fDir" cp -f $1 "$dirName$fDir" } function cp_lib { for file in `ldd $1 |grep -o "/.*[[:space:]]"`;do lDir=`dirname $file` mkdir -p "$dirName$lDir" cp -f $file "$dirName$lDir" done } read -p "Input a command with path: " command mkdir -p $dirName if [ -f $command -a -x $command ];then load_lib $command cp_file $command cp_lib $command else echo "Input command is wrong." fi
原创文章,作者:N23_夕立时雨,如若转载,请注明出处:http://www.178linux.com/22566
评论列表(1条)
写的很好,排版也很棒,有的需要用while true写,在检查一下加油