马哥教育网络班21期第10周课程练习

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

POST加电自检——
根据bios设定,顺序查找引导设备——
读取引导设备MBR(共512字节,前446为bootloader,后64表示分区信息,后2表示bootloader有效性),加载bootloader程序——
以grub为例,grub1.0阶段将零磁道一扇区加载到内存,grub1.5阶段加载文件系统驱动,grub2.0读取/boot/grub/grub.conf,根据配置文件加载内核——
加载内核(通过ramdisk加载硬件驱动,并以只读方式挂载根文件系统)——运行/sbin/init——准备系统初始化(读取/etc/inittab,使用文件中配置启动相应级别)——
系统初始化,运行/etc/rc.d/rc.sysinit——
以读写方式重新挂载根文件系统,设置主机名,启动udev/selinux,挂载/etc/fstab文件中文件系统,激活swap设备,设置系统时钟,根据/etc/sysctl.conf文件设置内核参数,激活lvm和raid,加载额外的设备驱动,清理操作,将系统启动log写入/etc/log/dmesg——
根据运行级别运行/etc/rc.d/rc.#——
运行/etc/rc.d/rc.local脚本——
启动终端,打印登录提示符

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

  (1) 为硬盘新建两个主分区;并为其安装grub;

  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

  (4) 为grub提供配置文件;

  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

# mkfs -t ext4 /dev/sdb1 && mkfs -t ext4 /dev/sdb2
# mount /dev/sdb1 /media/boot
# grub-install --root-directory=/media /dev/sdb
# cp /boot/vmlinuz-2.6.32-358.el6.i686 /media/boot/vmlinuz
# cp /boot/initramfs-2.6.32-358.el6.i686.img /media/boot/initrmfs.img
# vim /media/boot/grub/grub.conf
default=0
timeout=5
title CentOS
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2
    initrd /initrmfs.img
    
defaut=0
timeout=5
title CenOS
        root (hd0,0)
        kernel /vmlinuz-2.6.32-l42.el6.i686 ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs-2.6.32-642.el6.i686.img
# mount /dev/sdb2 /mnt/sysroot
# sh cpcom.sh 
Enter a command:bash
Enter a command:ls
Enter a command:cat
Enter a command:quit
Quit

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

		创建kickstart文件的方式:
			(1) 直接手动编辑;
				依据某模板修改;
			(2) 可使用创建工具:system-config-kickstart (CentOS 6)
				依据某模板修改并生成新配置;

			http://172.16.0.1/centos6.x86_64.cfg

		检查ks文件的语法错误:ksvalidator
			# ksvalidator /PATH/TO/KICKSTART_FILE

		创建引导光盘:
			# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/

4、写一个脚本

  (1) 能接受四个参数:start, stop, restart, status

   start: 输出“starting 脚本名 finished.”

   …

  (2) 其它任意参数,均报错退出;

#!/bin/bash
#

read -p "please input one order:" ordername
case $ordername in
    start)
        echo "starting $0 finished"
        exit 0
        ;;
    stop)
        echo "stopping $0 finished"
        exit 0
        ;;
    restart)
        echo "restarting $0 finished"
        exit 0
        ;;
    status)
        echo "statusing $0 finished"
        exit 0
        ;; 
    *)
        echo "Wrong"
        exit 1
        ;;        
esac

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

  (1) 如果登录了,则显示用户登录,脚本终止;

  (2) 每3秒钟,查看一次用户是否登录;

#!/bin/bash
#
#

read -p "Enter a user name: " username
until who | grep "^$username" &> /dev/null; do
    sleep 3
done    
echo "$username logged on." 
    exit 0

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

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

#!/bin/bash
#
#

read -p "Enter a choice: " option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
    read -p "Wrong option, Enter again: " option
done
case $option in
    cpu)
        lscpu 
        ;;
    mem)
        cat /proc/meminfo
        ;;
    disk)
        fdisk -l
        ;;
    *)
        echo "Quit..."
        exit 0
        ;;       
esac

7、写一个脚本

  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

  (2) 提示用户输入一个用户名或输入“quit”退出;

    当输入的是用户名,则调用函数显示用户信息;

    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

#!/bin/bash
#
#

func1() {
    useruid=$(grep "^$1" /etc/passwd|cut -d: -f3)
    usershell=$(grep "^$1" /etc/passwd|cut -d: -f7)
    echo -e -n "user $1 UID is :$useruid\n SHELL is :$usershell\n"
}
read -p "please input a user name or \"quit\" :" option
while [ $option != "quit" ];do
    id $option &> /dev/null && result=0 || result=1
    case $result in 
        0)
            func1 $option
            ;;
        1)
            read -p "please input a username or \"quit\":" option
            continue
            ;; 
    esac
    read -p "please input a user name or \"quit\" again:" option           
done
echo "quit..."

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

   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

#!/bin/bash
#
#

target=/mnt/sysroot
[ -d $target ] || mkdir /mnt/sysroot
 
read -p "please input a command which you want to cp to /mnt/sysroot,and \"quit\" is over:" cmdname
 
libcp() {
    for lib in $(ldd $1 |  grep -o "[^[:space:]]*/lib[^[:space:]]*"); do
        libdir=$(dirname $lib)
        [ -d $target$libdir ] || mkdir -p $target$libdir
        [ -f $target$lib ] || cp $lib $target$lib
    done
}
 
while [ "$cmdname" != 'quit' ]; do
    if ! which $cmdname &> /dev/null; then
        read -p "No such command, enter again: " cmdname
        continue
    fi
    cmdname=$(which --skip-alias $cmdname)
    cmnddir=$(dirname $cmdname)
 
    [ -d $target$cmnddir ] || mkdir -p $target$cmnddir
    [ -f $target$cmdname ] || cp $cmdname $target$cmdname
    libcp $cmdname
    read -p "Another command(quit): " cmdname
done

原创文章,作者:N21-孟然,如若转载,请注明出处:http://www.178linux.com/47526

(0)
N21-孟然N21-孟然
上一篇 2016-10-24 09:09
下一篇 2016-10-24 09:09

相关推荐

  • The second week’s homework

    一.linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 首先需要知道什么是绝对路径与相对路径。 绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/shar…

    Linux干货 2016-12-12
  • Linux常用文件管理命令

    常用文件管理命令 cat cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容 语法 cat(选项)(参数) 选项 -n或-number:有1开始对所有输出的行数编号; -b或–number-nonblank:和-n相似,只不过对于空白行不编号; -s或–squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; …

    2018-03-11
  • 负载均衡PHP应用(实现WordPress)

    一、实验目的:负载均衡PHP应用 二、逻辑构建:   三、实验需要:4台虚拟机,一台作为客户端,一台作为VS,两台作为RS 四、实验环境:VS的DIP要与RS的IP在同一个私网内,RS的默认网关为DIP;VS则要开启路由转发功能echo 1>/proc/sys/net/ipv4/ip_forword,注意防火墙和selinux都要关闭 五、实…

    2017-05-09
  • 路由器解析路由表

    1.定义——>选择最佳路径;他只完成发送到下一个路径上就结束,任务到达就撤了(就像快递员一样,当他将物件发往到下一个目的地,那他的任务就结束了)2.分类:主机路由、网络路由、默认路由3.每个路由记录由四项主要组成部分目标地址:主机IP、网络ID号、未知地址(0.0.0.0)子网掩码接口interface:从哪个口发往目标地址 网…

    2017-09-05
  • linux用户和组管理

    linux系统是一个多用户的系统,每个账号都干什么用,你必须了如指掌。 【Linux用户】 即UID分为两大类:管理员 UID:0                               普通用户 UID:…

    Linux干货 2016-08-05
  • Redis基于Sentinel哨兵高可用方案

    下载最新redis版本,当前最新版本为  2.8.19  2014-12-30 安装redis 首页地址:http://redis.io/ 最新稳定版下载地址: http://download.redis.io/releases/redis-2.8.19.tar.gz # tar -xvf redis-2.8.19.tar.gz # cd…

    2015-03-03

评论列表(1条)

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

    每一个问题的解答过程,要写关键步骤