第十周

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 08:36
下一篇 2016-10-17 08:36

相关推荐

  • 文本处理工具补充之sed命令

    sed:stream editor,行编辑器         sed命令工作原理:它在处理数据时,每次只处理一行,首先把当前处理的行存储在临时缓冲区中,我们称这个缓冲区称为“”模式空间“,接着用sed命令处理缓冲区中的内容,处理完后,把缓冲区中的内容送到屏幕上显示出来,接着去处理…

    Linux干货 2016-08-11
  • 搭建yum仓库的FTP服务器

    搭建centos7ftp服务

    2017-12-02
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-22
  • vsftpd

    文件服务: 安装开启服务前先关闭selinux,清空iptables策略。避免不必要的麻烦,服务开启后,配置一切正常有需要再根据情况开启。 ftp:应用层,C/S,跨主机的文件共享服务;file transfer protocol nfs,cifs:文件系统接口,网络文件系统;     nfs:network&nbsp…

    Linux干货 2016-11-01
  • Linux下的进程调度与作业管理

    Linux下的进程调度与作业管理 一、概述 1.1 进程的相关概念: 通过前面的几个章节,我们几乎已经学习了很多的linux的基础,这个章节我们讲一下linux下的进程管理,就像windows 下的进程一样,我们知道windows 下有一个任务管理器,专门用来管理进程,我们首先看一下windows 的任务管理器: 从这2个图我们可以看出,windows 下的…

    Linux干货 2016-10-17

评论列表(1条)

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

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