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
下一篇 2016-12-05

相关推荐

  • LVM逻辑卷管理器

    Logical Volume Manager     LVM(逻辑卷管理)是Linux环境下对磁盘分区进行管理的一种机制。     普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,     某个分区空间耗尽时,解决的方法通常是使…

    Linux干货 2016-08-29
  • vim编辑器

    vim编辑器:          文本:ASCII, Unicode(全球统一编码格式)          文本编辑种类:       &n…

    Linux干货 2016-08-10
  • linux网络属性管理

    Linux网络属性配置 计算机网络:TCP/IP:协议栈(使用)ISO,OSI:协议栈(学习) MAC:Media Access Control48bits:ICANN:24bits, 2^24地址块:2^24 网桥(bridge):MAC地址表静态指定:动态学习:根据原地址学习; 交换机(switch):多端口网桥; IP(Internet protoco…

    Linux干货 2017-10-14
  • shell脚本循环及函数

    16.循环执行                 将代码段重复运行多次           &nbsp…

    Linux干货 2016-08-24
  • Nginx

    Nginx简介     Nginx(”engine x”)是俄罗斯人Igor Sysoev(伊戈尔.塞索耶夫)编写的一款高性能的HTTP和反向代理服务器。Nginx能够选择高效的epoll、Kqueue、eventport作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高…

    2017-05-07
  • 计算机和linux基础

    计算机的组成及其功能 计算机硬件主要由5部分组成:运算器 、控制器、存储器、input、output。 但是这和我们平时见到的计算机不一样?我们平时见到的计算机有CPU,内存,硬盘,显示器,鼠标键盘,显卡、主板等。这些东西也都归在以上五类设备中。下面我们简单介绍一下计算机这五个组成部分。 运算器: 运算器是计算机中做运算的部分,可以执行各种指令,加减乘除,与…

    Linux干货 2016-09-16