N22-妙手-第十周博客作业

1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

2016-10-21 14_21_15-演示文稿1 - PowerPoint.png

    (1) POST阶段

        加电自检,确保每个设备能正常工作

    (2) BIOS

        按次序查找跟引导设备,第一个有引导程序的设备即为本次启动要用到的设备

    (3) Bootloader:引导加载器

        GRUB:提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选择的系统或内核版本装载到内存特定的空间中解压、展开,完成后将控制权交给内核

    (4) Kernel:

        自身初始化:

        探测可识别到的所有硬件设备

        加载硬件驱动设备。

        注意:如果不能识别设备,需要临时生成ramdisk来动态识别设备的驱动,并加载硬件设备

    (5) roofts:

        只读的方式挂载跟文件系统

    (6) /sbin/init:开始启动用户空间程序

        设置默认运行级别

        运行系统初始化脚本:脚本存放位置:/etc/rc.d/rc.sysinit

        设置主机名

        设置欢迎信息

        激活udev和SELinux

        挂载/etc/fstab文件中定义的所有文件系统

        检测跟文件系统,如果一切正常,以读写方式重新挂载根文件系统

        设置系统时钟

        根据/etc/sysctl.conf文件的设置,设置内核参数

        激活lvm及raid设备

        激活swap设备

        加载额外的设备的驱动程序

        清理操作

        关闭对应级别需要停止的服务,启动对应级别需要开启的服务

        设置登录终端

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
 

    (1) 为硬盘新建两个主分区;并为其安装grub;

        创建分区:

21.png

        安装grub

N22-妙手-第十周博客作业22.png

    (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

        内核和ramdisk文件

N22-妙手-第十周博客作业23.png

        第二个分区上的rootfs

N22-妙手-第十周博客作业24.png

    (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

N22-妙手-第十周博客作业25.png

    (4) 为grub提供配置文件;

        grub.conf配置文件放置于/tmp/boot/grub

N22-妙手-第十周博客作业26.png

    (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

        新建目标主机:Test Installation of Grub

N22-妙手-第十周博客作业27.png

        启动正常

28.png

3、制作一个kickstart文件以及一个引导镜像。描述其过程。

    (1) 制作kickstart文件

        安装制作kickstart文件程序

            yum -y install system-config-kickstart

        启动制作kickstart文件程序

            ksystem-config-kickstart

    

    (2) 制作引导镜像

        在根用户家目录下创建myboot目录

        挂载光盘镜像至/media/cdrom

        复制/media/cdrom/isolinux目录至/root/myboot

        复制制作完成的ks.cfg至/root/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/

31.png

        在VMWare中选择boot.iso作为引导镜像

32.png

4、写一个脚本
  (1) 能接受四个参数:start, stop, restart, status
   start: 输出“starting 脚本名 finished.”
   …

  (2) 其它任意参数,均报错退出;

#!/bin/bash
#
cat << EOF
start)   start the service
stop)    stop the service
restart) restart the service
status)  check the status of the service
*****************************************
*****************************************
EOF

read -p "Please input your selection: " selection

case $selection in
start) 
    echo "starting $0 finished"
    ;;
stop)
    echo "stopping $0 finished"
    ;;
restart)
    echo "restarting $0 finished"
    ;;
status)
    echo "checking the status of $0 finished"
    ;;
*)
    echo "please input valid selection"
    ;;
esac

5、写一个脚本,判断给定的用户是否登录了当前系统;
  (1) 如果登录了,则显示用户登录,脚本终止;
  (2) 每3秒钟,查看一次用户是否登录;

#!/bin/bash
#

while true; do
    if who | grep "^meng\>" >& /dev/null; then
        break
    fi
    sleep 3
done

echo "$(date +"%F %T") meng login" >> /tmp/userinfo.log

6、写一个脚本,显示用户选定要查看的信息;
   cpu) display cpu info
   mem) display memory info
   disk) display disk info
   quit) quit
   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

#!/bin/bash
#
cat << EOF
Display information as following shown selection
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
************************************************
EOF

while true; do
    read -p "Please input your selection: " selection

    case $selection in
    cpu) 
        lscpu
        ;;
    mem)
        free -m
        ;;
    disk) 
        fdisk -l /dev/vd[a-z]
        ;;
    quit)
        echo "Bye Bye"
        exit 0
        ;;
    *)
        echo "Please input valid selection"
        ;;
    esac
done

7、写一个脚本
  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
  (2) 提示用户输入一个用户名或输入“quit”退出;
    当输入的是用户名,则调用函数显示用户信息;
    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

#!/bin/bash
#


userInfo() {
        local userLine=$(grep $1 /etc/passwd)
        local userSHELL=${userLine##*:}
        local userID=$(echo $userLine | cut -f3 -d:)
        echo "$userSHELL and $userID"
        
}

quit() {
    if [ "$1" == "quit" ]; then
        echo "Bye Bye"
        exit 2
    fi
}
 
while true; do
    read -p "Please input your username or input 'quit': " choice

    if [ "$choice" == "quit" ]; then
        quit $choice
        break
    fi

    if id $choice >& /dev/null; then
        userInfo $choice
    fi
done

8、写一个脚本,完成如下功能(使用函数)
   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

read -p "Please input a command: " cmd

cmdPath=$(which $cmd | grep bin)

cpCmd() {

cp $cmdPath /mnt/sysroot$cmdpath
echo "Copy $cmdPath to path /mnt/sysroot/"

}

cpFile() {

libFile=$(ldd $cmdPath | grep -o "/[^[:space:]]\{1,\}")
for i in $libFile; do

    cp $lib /mnt/sysroot$cmdPath
    echo "Copy $libFile to path/mnt/sysroot/$cmdPath"
done
}

cpCmd

cpFile

原创文章,作者:mxb93,如若转载,请注明出处:http://www.178linux.com/52532

(0)
mxb93mxb93
上一篇 2016-12-05 17:04
下一篇 2016-12-05 17:05

相关推荐

  • 制作本地yum源与编译安装http

    1、制作本地yum源(centos7) [root@centos7 ~]# yum install -y lftp   #安装lftp程序 lftp 10.1.0.1:~> cd pub/Sources/sources/xen/ &n…

    Linux干货 2016-08-25
  • 一波三折的尝试,windows下通过VMware虚拟机安装windows操作系统

    已经尝试过多次VMware下linux系统的安装,均安装正常,同样环境下安装windows系统会发生什么情况,首先选择的是windows10系统,然而在安装过程中,iso镜像光盘一直无法挂载,在经历更换iso镜像,更换另一台电脑之后,初步判定问题为win10系统iso镜像顺坏,因为同样环境用win7的镜像却能正常挂载,且正常启动到安装系统界面…..
    但是,问题真的会是这样吗?

    2018-03-27
  • 使用haproxy代理LAMP、LNMP 实现WordPress发布

    haproxy简介 HAProxy是专业的反向代理软件,它可以支持4层和7层代理服务。其配置包含一下几个配置段: global:全局设置,通常与操作系统有关 defaults:配置默认参数,可以被frontend、backend、listen组件利用 frontend:接收亲请求的前虚拟节点 backend:后端服务集群的配置,一个backend可以对应多个…

    2017-05-17
  • Linux-Basic—shell如何解释命令的运行

    附件下载: Linux Basics-shell.pdf

    Linux干货 2016-11-21
  • nginx负载均衡实验

    实验一、 实验环境:     1、一台director主机。并部署nginx服务。        内网iP:192.168.1.1  外网iP:10.1.64.1     2、一台后端服务器。并部署h…

    Linux干货 2016-10-30
  • 马哥教育网络20期第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; fdisk /dev/sdb ; mke2fs -t ext4 -b 2048 -L MYDATA -m 2 –O acl /dev/sdb1 (2) 挂载至/data/mydata目录,要求挂载…

    Linux干货 2016-08-15