1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)
(1)post:加电自检
主要是bios完成,检查主机各个组件是否完好,能否达到运行要求;
(2)Boot Sequence:启动顺序
这一步是按照bios的预先设置来选择首选启动项;
(3)Boot Loader:引导加载器
这一步是在选择启动介质后,在介质的第一扇区会有一段小程序来引导我们启动不同的系统或内核版本;
(4)kernel:加载内核
当选定内核或系统,由Bootloader将内核或系统加载到 内存中特定空间中,解压、展开,而后把系统控制权叫给内核;
(5)运行/sbin/init
当内核被唤醒后,它开始完成系统的构建、加载驱动,然后开始运行第一个程序:init;
(6)选择默认级别:
init会根据/etc/inittab等文件的定义来选择默认启动级别,完成系统开启;
(7)运行系统初始化脚本,完成系统初始化:
在系统开启后,init会根据/etc/rc.d/rc.sysinit来初始化系统,包括设置主机名、设置欢迎信息、激活udev和SELinux、挂载/etc/fstab文件中定义的所有文件系统等;
(8)关闭对应级别下要停止的服务和启动对应级别下需要开启的服务:
根据init配置文件,关闭/etc/rc.d/rc#.d/下K*的所有服务,开启S*的所有服务,注#代表启动级别;
(9)设置登陆终端:
这一步主要是开启一个登陆接口,并为之加载环境变量、别名配置等文件,如果是5级别的话,还会开启图形界面,加载图形界面所需的各种插件。
2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
(1) 为硬盘新建两个主分区;并为其安装grub;
~]# mkdir /mnt/{sysboot,sysroot}
~]# fdisk /dev/sdb
n–> p–>1–>+500M
n–> p–>2–>+2G
w
~]# partprobe /dev/sdb
~]# mkfs.ext4 /dev/sdb1
~]# mkfs.ext4 /dev/sdb2
~]# mount /dev/sdb1 /mnt/sysboot
~]# mount /dev/sdb2 /mnt/sysroot
~]# grub-install –root-directory=/mnt /dev/sdb
(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/sysboot/vmlinuz
~]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/sysboot/initramfs.img
~]# mkdir /mnt/sysroot/{bin,proc,lib64,mnt,sbin,…}
(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
[root@localhost sysroot]# ldd /bin/{cat,ls,bash}
/bin/cat:
linux-vdso.so.1 => (0x00007fff91dff000)
libc.so.6 => /lib64/libc.so.6 (0x000000354a200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003549a00000)
/bin/ls:
linux-vdso.so.1 => (0x00007fffc3f22000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x000000354ba00000)
librt.so.1 => /lib64/librt.so.1 (0x000000354b200000)
libcap.so.2 => /lib64/libcap.so.2 (0x000000354de00000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003555a00000)
libc.so.6 => /lib64/libc.so.6 (0x000000354a200000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000354aa00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003549a00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000354a600000)
libattr.so.1 => /lib64/libattr.so.1 (0x0000003558600000)
/bin/bash:
linux-vdso.so.1 => (0x00007fff00dff000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x000000355b200000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000354aa00000)
libc.so.6 => /lib64/libc.so.6 (0x000000354a200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003549a00000
[root@localhost ~]#cp /bin/{bash,ls,cat} /mnt/sysroot/bin
[root@localhost ~]# cd /mnt/sysroot/lib64/
[root@localhost lib64]# cp /lib64/libc.so.6 ./
[root@localhost lib64]# cp /lib64/libselinux.so.1 ./
[root@localhost lib64]# cp /lib64/librt.so.1 ./
[root@localhost lib64]# cp /lib64/libcap.so.2 ./
[root@localhost lib64]# cp /lib64/libacl.so.1 ./
[root@localhost lib64]# cp /lib64/libc.so.6 ./
[root@localhost lib64]# cp /lib64/libdl.so.2 ./
[root@localhost lib64]# cp /lib64/ld-linux-x86-64.so.2 ./
[root@localhost lib64]# cp /lib64/libpthread.so.0 ./
[root@localhost lib64]# cp /lib64/libattr.so.1 ./
[root@localhost lib64]# cp /lib64/libtinfo.so.5 ./
[root@localhost lib64]# cp /lib64/libdl.so.2 ./
[root@localhost lib64]# cp /lib64/libc.so.6 ./
(4) 为grub提供配置文件;
vim /mnt/sysboot/grub/grub.conf
default=0
timeout=5
title Linux test
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;
新建虚拟机,再选择磁盘时选择这块磁盘;
3、制作一个kickstart文件以及一个引导镜像。描述其过程。
首先安装system-config-kickstart,然后打开;
基本配置:主要是语言为中文,键盘默认,设置根密码;
安装方法:根据情况选择,以光盘驱动器为例;
引导装载程序选项:默认即可;
分区信息:清除主引导记录,然后开始添加磁盘分区,主要是根分区、swap、boot和home四个分区;
网络配置:最好配置一块网卡,设定好ip等信息;
防火墙配置:建议都先关闭,可在完成后激活;
显示配置:默认;
软件包选择:基本系统;
配置好以后保存,路径为/var/ftp/ks.cfg,然后安装vsftpd服务,并启动,测试是否可以正常访问;
然后新建一个虚拟机,在启动时加载镜像,在安装界面摁esc,出现字符界面:boot::,输入以下命令:
linux ip=IP(根据实际情况,必须与有ftp访问的服务器在同一网段上) netmask=NETMASK ks=ftp://ks.cfg完整路径
如果不出意外地话,虚拟机会根据ks.cfg来安装部署。
4、写一个脚本
(1) 能接受四个参数:start, stop, restart, status
start: 输出“starting 脚本名 finished.”
…
(2) 其它任意参数,均报错退出;
#!/bin/sh
case $1 in
start)
echo “starting $0 finished “;;
stop)
echo “stop $0 finished”;;
restart)
echo “restart $0 finished”;;
status)
echo “status $0 finished”;;
*)
echo “error!!”
exit 1
esac
5、写一个脚本,判断给定的用户是否登录了当前系统;
(1) 如果登录了,则显示用户登录,脚本终止;
(2) 每3秒钟,查看一次用户是否登录;
#!/bin/bash
[ $# -ne 1 ] && echo “need 1 user!!” &&exit 1
usr(){
if who | grep $1 &>/dev/null;then
echo “$1 is login..”
return 0
else
echo “$1 is not login..”
return 2
fi
}
while true;do
usr $1
rt=$?
[ $rt -eq 0 ] && break || sleep 3
done
6、写一个脚本,显示用户选定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
#!/bin/sh
cat <<a
=========================
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
=========================
a
ab() {
read -p “Please enter your choice: ” i
case $i in
cpu)
lscpu;;
mem)
free -h;;
disk)
fdisk -l /dev/[s,h]d[a-z];;
quit)
exit 0;;
*)
echo “Please choose again!!”
ab
esac
}
ab
非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;
7、写一个脚本
(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
(2) 提示用户输入一个用户名或输入“quit”退出;
当输入的是用户名,则调用函数显示用户信息;
当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:
#!/bin/bash
usr() {
grep “^$1\>” /etc/passwd|awk -F: ‘{print $3,$7}’
}
cat <<a
user) display user info;
quit) quit
a
ub() {
while true;do
read -p “please input: ” i
case $i in
quit)
exit 0;;
$i)
usr $i
ub
esac
done
}
ub
原创文章,作者:N25_韩奇洋,如若转载,请注明出处:http://www.178linux.com/70591
评论列表(1条)
操作系统的启动过程能用图示来说明会更好~~cp的那部分可以使用循环~~继续加油~