第十周

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

相关推荐

  • 从Linux小白到大牛——与狼共舞的日子8

    马哥教育网络班21期+第8周课程练习 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥是第2层的设备,它设计用来创建两个或多个LAN分段。其中,每一个分段都是一个独立的冲突域。网桥设计用来产生更大可用宽带。它的目的是过滤LAN的通信流,使得本地的通信流保留在本地,而让那些定向到LAN其他部分(分段)的通信流转发到那里去。每…

    Linux干货 2016-11-14
  • linux文件系统目录结构

    FHS标准      文件和目录被组织成一个单根的倒置树结构 文件系统从根目录开始用“/”表示 根文件系统:root filesystem 目录名称vfat格式不敏感大小写 以.开头的为隐藏文件 路径分割的/ /boot:引导文件存放目录,内核文件,引导加载器都存放此目录 /bin:供所有用户使用的基本命令;不能关联到…

    Linux干货 2016-07-29
  • redis主/从配置及基于sentinel的故障转移

     一、NoSQL基础概念: ACID:原子性、一致性、隔离性、持久性;特性:数据量大、数据变化非常大(数据增长化、流量分布变化、数据间耦合结构变化)、数据源很多; CAP、BASECAP C:多个数据节点的的数据一致;A:用户发出请求后的有限时间范围内返回结果;P:network partition,网络发生分区后,服务是否依可用;CAP理论:一个分布式系统…

    Linux干货 2017-12-18
  • vim功能及使用

    vim 简介:   vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。 文本编辑种类: 行编辑器: sed全屏编辑器:nano, vivim – Vi Improved 一、基本操作语法 vim [OPTION…

    Linux干货 2016-08-11
  • AIX下NFS共享导致命令行输入卡住

     1、事件描述:之前公司测试某厂商存储一体机的NFS共享功能,将该NFS目录共享给AIX主机使用(用于备份对应对应的数据库,因为数据库版本太老,Oracle8i的,不支持存储厂商的备份代理),测试完成后,厂商将设备直接关机(这时候在AIX上挂载的NFS目录没有进行卸载)。然后,当我们登陆到AIX服务器上的时候,发现每次敲入“df -g”或者“ls”…

    Linux干货 2016-07-07
  • 第一周

    #blog text 1. 描述计算机的组成及其功能。 2. 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 3. 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 4. 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、pow…

    Linux干货 2016-12-04

评论列表(1条)

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

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