第十周

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

1.开启电源后,POST自检:检查硬件设备,通过后交给BIOS
2.BIOS加载可选择的启动设备,寻找可引导的启动设备的记录:MBR
3.MBR:硬盘的主引导记录,存在于0磁道0扇区,共512字节.其中Bootloader占用446字节,分区表占用64字节,magic num占用2字节,MBR加载Bootloader去开始后面的工作
4.常用的内核加载器是grub。
    1)1st stage:位于MBR中,为了引导2nd stage
    2) 1.5 stage:位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展
    3) 2nd stage:位于boot基本磁盘分区中,GRUB的引导程序
5.通过grub加载内核后,内核开始自我解压并工作,通过虚拟根文件系统initrfs调用init工作
6./sbin/init程序被内核第一个调用,PID为1。init调用期配置文件和启动脚本,从而启动各个子进程

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

(1) 为硬盘新建两个主分区;并为其安装grub;
(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
(4) 为grub提供配置文件;
(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;
1)
[root@localhost ~]# fdisk /dev/sdb
(n;p;+10G;w)
[root@localhost ~]# partx -a /dev/sdb
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb2
[root@localhost ~]# mkdir /mnt/{boot,rootfs}
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/rootfs/
[root@localhost ~]# grub-install --root-directory=/mnt/ /dev/sdb
2)
[root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/vmlinuz
[root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img
3)
[root@localhost ~]# mkdir -p /mnt/rootfs/{bin,lib64}
[root@localhost ~]# cp -r /bin/{bash,ls,cat} /mnt/rootfs/bin/
[root@localhost ~]# cp $(ldd /bin/bash | awk '$3~/^\/lib64/{print $3}') /mnt/rootfs/lib64/
[root@localhost ~]# cp $(ldd /bin/ls | awk '$3~/^\/lib64/{print $3}') /mnt/rootfs/lib64/ 
[root@localhost ~]# cp $(ldd /bin/cat | awk '$3~/^\/lib64/{print $3}') /mnt/rootfs/lib64/ 
4)
[root@localhost ~]# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS 6.6 (Test)
root (hd0,0)
kernel /vmlinuz ro root=/dev/sdb2 selinux=0 init=/bin/bash
initrd /initramfs.img
5)
在BIOS中选择sdb作为启动盘

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

 (1)制作一个kickstart文件

安装system-config-kickstart
#yum install -y system-config-kickstart
#system-config-kickstart


打开一个ks文件



根据需要配置好相关的内容,将文件另存为myks.cfg

(2)创建引导镜像

在/tmp 目录下创建目录myiso ,在myiso 目录下创建isolinux 目录;

#mkdir -p /tmp/myiso/isolinux

将光盘上的isolinux 下的文件都拷贝到新建的目录下;

#cp /media/isolinux/* /tmp/myiso/isolinux/  
将myks.cfg文件复制到/tmp/myiso 目录下;



创建ISO文件系统
# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.8 x86_64 boot" -b /tmp/myiso/isolinux/isolinux.bin -c /tmp/myiso/isolinux/boot.cat -o /root/boot.iso myiso

4、写一个脚本

(1) 能接受四个参数:start, stop, restart, status
start: 输出“starting 脚本名 finished.”
(2) 其它任意参数,均报错退出;
#!/bin/bash
if [ $# -ne 1 ];then
    echo "only one argument"
    exit 1
else
    case $1 in
        start)
            echo "starting $0 finished."
        ;;
        stop)
            echo "stoping $0 finished."
        ;;
        restart)
            echo "restart $0 finished."
        ;;
        *)
            echo "error,exit!"
            exit 1
        ;;
    esac
fi

5、写一个脚本,判断给定的用户是否登录了当前系统;

(1) 如果登录了,则显示用户登录,脚本终止;
(2) 每3秒钟,查看一次用户是否登录;
#!/bin/bash
if [ $# -ne 1 ];then
    echo "only one argument"
    exit 1
fi

if `id $1 &> /dev/null`;then
    while true;do
        if `w | grep "^$1" &> /dev/null`;then
            echo  "$1 is login."
            exit 0
        else
            echo "$1 is not loging,waiting..."
            sleep 3
        fi
    done
else
    echo "argument is not username"
fi

6、写一个脚本,显示用户选定要查看的信息;

cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;
#!/bin/bash
while true;do
    echo "please input a option:" 
    echo "input 'cpu' display cpu info"
    echo "input 'mem' display memory info"
    echo "input 'disk' display disk info"
    echo "input 'quit' exit this script"
    read test
  case $test in
      cpu)
          echo "`cat /proc/cpuinfo`"
          ;;
      mem)
          echo "`cat /proc/meminfo`"
          ;;
      disk)
          fdisk -l
          ;;
      quit)
          exit 0
          ;;
      *)
          echo "input error options" 
          continue
          ;;
    esac
done

7、写一个脚本

(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
(2) 提示用户输入一个用户名或输入“quit”退出;
当输入的是用户名,则调用函数显示用户信息;
当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:
#!/bin/bash
function user {
    if `id $username &> /dev/null`;then
        echo "userid : `id -u $username`"
        echo "shell : `grep "^$username\>" /etc/passwd | cut -d: -f 7`"
    else
        echo "username is wrong" 
    fi
}
while true;do
    read -p "Please input a username or quit:" username
    if [ $username == "quit" ];then
        exit 0
    else
        user $username
    fi
done

8、写一个脚本,完成如下功能(使用函数)

(1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
(2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
(3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;
#!/bin/bash
function lib_cp {
    lib_path=`whereis $1 | cut -d' ' -f2`
    for i in $(ldd $lib_path | grep -o "/[^[:space:]]*");do
        libdir=$(dirname $i)
        [ -d $path$libdir ] || mkdir $path$libdir
        [ -f $path$i ] || cp $i $path$libdir
    done
}
function cmd_cp {
    cmd_path=$(which $1 | grep -v "^alias" | grep -o "/.*/")
    [ -d $path$cmd_path ] || mkdir -p $path$cmd_path
    [ -f $path/$1 ] || cp $cmd_path/$1 $path$cmd_path
}
path=/mnt/sysroot
[ -d $path ] || mkdir -p $path

read -p "input any command :" cmd
lib_cp $cmd
cmd_cp $cmd

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

(0)
N21_smileN21_smile
上一篇 2016-10-17
下一篇 2016-10-17

相关推荐

  • vim编辑器及shell基础

    1、复制/etc/rc.d/rc.sysint文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#cp /etc/rc.d/rc.sysint /tmpvim /tmp/rc.sysint:%s@^[[:space:]]\+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/…

    Linux干货 2017-12-08
  • 练习

    练习 显示/proc/meminfo文件中以大小s开头的行;     显示/etc/passwd文件中不以/bin/bash结尾的行     找出/etc/passwd中的两位或三位数     显示/etc/grub2.cfg文件中,至少以一个空白字符开头的 且后面存非空白字符的行   &…

    Linux干货 2016-08-12
  • 第十八周作业

    1.LNMP架构添加Memcached支持,并验证其缓存结果 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 Memcached是以守护程序(监听)方式运行于一…

    2017-07-07
  • Centos7 编译安装 zabbix3.0

    服务安装配置: 系统版本:CentOS Linux release 7.2.1511 (Core)   zabbix 安装 关闭firewall:   systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机…

    Linux干货 2016-06-23
  • Linux基础知识之RAID

    1、什么是RAID?     多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供。2、RAID的优点?     提高IO 能力:         磁盘并行读写   &n…

    Linux干货 2016-09-01
  • 导读谷歌三大核心技术之一 GoogleFileSystem(一)

    GoogleFileSystem设计构想 为满足Google数据处理的需求,Google工程师设计并实现了GoogleFileSystem(GFS)。GFS与传统分布式文件系统类似,也需要满足高性能、可伸缩性、可靠性以及可用性。与传统分布式文件系统思路不不同的是: GFS认为组件失效是常态而非意外,GFS由大量廉价设备组成 文件数量异常巨大 绝大部分文件修改…

    Linux干货 2017-05-07

评论列表(1条)

  • 马哥教育
    马哥教育 2016-10-25 12:30

    启动流程可以更详细一些,具体都做了那些工作。