1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)
2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
(1) 为硬盘新建两个主分区;并为其安装grub;
(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
(4) 为grub提供配置文件;
(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;
————————————————————————–
1.在虚拟机中添加一个新硬盘
shutdown #在centos关闭的情况下才能添加硬盘
2.启动centos,查看新添加的硬盘,并对其进行分区格式化
fdisk -l /dev/sd[a-z] fdisk /dev/sdb n p 1 +100M 2 +2G t 2 82 n p +5G w partx -a /dev/sdb cat /proc/partitions mke2fs -t ext4 /dev/sdb1 mke2fs -t ext4 /dev/sdb3 mkswap /dev/sdb2
3.复制现有内核文件和img文件到新磁盘中
mkdir /mnt/boot mount /dev/sdb1 /mnt/boot/ ls /mnt/boot/ grub -install --root-directory=/mnt /dev/sdb ls /mnt/boot/ cp /boot/vmlinuz-3.10.0-327.e17.x86_64 /mnt/boot/vmlinuz-3.10.0-327.e17.x86_64 复制内核到boot下 cp /boot/initramfs-3.10.0-327.e17.x86_64.img /mnt/boot/initramfs-3.10.0-327.e17.x86_64.img
4.编辑配置文件
vim /mnt/boot/grub/grub.conf default=0 timeout=5 title centos(express) root(hd 1,0) kernel /vmlinuz-3.10.0-327.e17.x86_64 ro root=/dev/sdb1 init=/bin/bash selinux=0 initrd /initramfs-3.10.0-327.e17.x86_64.img
5.创建文件并复制依赖的库文件
mkdir /mnt/sysroot mount /dev/sdb3 /mnt/sysroot/ cd /mnt/sysroot/ mkdir -pr etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media ll cp /bin/bash /mnt/sysroot/bin/ ldd /bin/ash bash依赖于哪些库 cp /lib64/libtinfo.so.5/mnt/sysroot/lib64 cp /lib64/libd1.so.2 /mnt/sysroot/lib64 cp /lib64/libc.so.6 /mnt/sysroot/lib64/ cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/ cd ch root /mnt/sysroot/ sync
————————————————————————
3、制作一个kickstart文件以及一个引导镜像。描述其过程。
mkdir myboot cd myboot/ ls /media/cdrom cp -r /media/cdrom/isolinux/ ./ cd isolinux/ chmod +w * cd .. pwd cp /root/centos6.x86_64.cfg ks.cfg cd .. #站在myboot之外 #创建光盘镜像 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/
4、写一个脚本
(1) 能接受四个参数:start, stop, restart, status
start: 输出“starting 脚本名 finished.”
…
(2) 其它任意参数,均报错退出;
#!/bin/bash #Elephant case $1 in start) echo "starting bash finished." ;; stop) echo "stopped bash finished." ;; restart) echo "restarting bash finished." ;; status) echo "status..." ;; *) echo "Wrong argument." exit 2 esac
5、写一个脚本,判断给定的用户是否登录了当前系统;
(1) 如果登录了,则显示用户登录,脚本终止;
(2) 每3秒钟,查看一次用户是否登录;
#/bin/bash #Elephant read -p "Please input a username:" usrname while true;do if who | grep "^$usrname" &> /dev/null;then break fi sleep 3 done echo "$(date +'''%F %T''') $usrname logged on."
6、写一个脚本,显示用户选定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;
#!/bin/bash #Elephant until ! [ 1 ];do cat<<EOF cpu) display cpu info mem) display memory info disk) display disk info quit) quit EOF read -p "Your choice:" option if [[ "$option" == "cpu" ]];then lscpu elif [[ "$option" == "mem" ]];then free -m elif [[ "$option" == "disk" ]];then fdisk -l /dev/[sh]d[a-z] elif [[ "$option" == "quit" ]];then echo "Quit" exit 4 else echo "Please input 'cpu' 'mem' 'disk' or 'quit'" fi done
7、写一个脚本
(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
(2) 提示用户输入一个用户名或输入“quit”退出;
当输入的是用户名,则调用函数显示用户信息;
当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:
#!/bin/bash #Elephant userinfo(){ if id "$username" &>/dev/null;then grep "^$username\>" /etc/passwd | cut -d: -f3,7 else echo "No such user." fi } until ! [ 1 ];do read -p "Please input username or 'quit':" username if [ $username == "quit" ];then echo "Quit" exit 2 else userinfo fi done
8、写一个脚本,完成如下功能(使用函数)
(1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
(2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
(3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;
#!/bin/bash #Elephant isornotcmd(){ if [ "$path1" == "" ];then echo "$cmd is not a command." exit 2 fi } copycmd(){ if [ -f "/mnt/sysroot/usr/bin" ];then cp -fr $path1 /mnt/sysroot/usr/bin/ else mkdir -p /mnt/sysroot/usr/bin/ cp -fr $path1 /mnt/sysroot/usr/bin/ fi } copycmdrelay(){ for path in $(ldd $path1 | grep -o "/.*\.so\.[0-9]");do if [ -f "/mnt/sysroot/rootfs/" ];then cp -LR $path /mnt/sysroot/rootfs/ #-LR复制链接文件的源文件 else mkdir -p /mnt/sysroot/rootfs/ cp -LR $path /mnt/sysroot/rootfs/ fi done } read -p "Please input a command:" cmd path1=$(whereis $cmd | grep -o "/.*" | awk '{print $1}') isornotcmd copycmd copycmdrelay
原创文章,作者:N22_Elephant,如若转载,请注明出处:http://www.178linux.com/53037
评论列表(1条)
博客写得非常的好,32个赞,给出了详细操作步骤,脚本思路清晰,1题能画一个图就更完美了,加油!