第十周

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

相关推荐

  • Shell脚本编程中作业

    一、作业: 1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求 (1) 脚本可接受参数:start, stop, restart, status (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:如果事先已经启动过一…

    Linux干货 2016-08-24
  • N26-第二周作业-邢岩(1)

     马哥门徒-N26-邢岩   度过了一个愉快的春节,又到了上班的时候了!我的Linux基础学习也进行到了疯狂记命令的阶段,痛并快乐着!那就让我来说一下Linux上的文件管理类命令都有哪些吧。   Linux的文件相关命令还是蛮多的,我不妨简单的总结一下,归结为6类常用的命令: 1、目录切换类命令   pwd命令:显示工…

    Linux干货 2017-02-10
  • 条件判断if、case与文件查找locate、find及相关练习

    一、条件选择 1、if:按条件执行脚本中的内容,可以使用嵌套结构,有单分支、双分支和多分支结构,每个条件中可以有不止一条语句,如果有多条语句,可以用and(-a)或or(-o)连接在一起,但不能使用&&或||: if COMMANDS; then     COMMANDS;   &n…

    Linux干货 2016-08-18
  • test2

    欢迎使用马克飞象 作业帮 示例笔记本 马克飞象 帮助 Markdown 马克飞象是一款专为印象笔记(Evernote)打造的Markdown编辑器,通过精心的设计与技术实现,配合印象笔记强大的存储和同步功能,带来前所未有的书写体验。特点概述: 功能丰富 :支持高亮代码块、LaTeX 公式、流程图,本地图片以及…

    Linux干货 2017-03-20
  • 关于文件权限管理了解和使用

                    文件权限管理   文件属性格式              文件属性操作 chown          设置文件的所有者…

    系统运维 2016-08-05
  • 系统管理至grub故障排错及自建linux

    第二章    系统启动故障排除     1、grub配置文件写错,无法进入系统     步骤:(修复完成后记得修改配置文件为正确的文件)     方法一:进入启动菜单项后,修改菜单项为正确的内容,然后…

    Linux干货 2016-09-13

评论列表(1条)

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

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