Net25-第10周作业

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

Centos系统启动过程分内核空间启动和用户空间启动:

内核空间启动流程:

  • POST: post加点自检,检测计算机基本5大件是否完好,计算机可被正常点亮。
  • BootSequence: 位于ROM上的BIOS的BootSequence来选择启动顺序
  • Bootloader: 决定启动顺序后,在启动设备上的MBR的前446bytes加载bootloader
  • Ramdisk: bootloader需要引导内核的加载,在这过程需要加载ramdisk来驱动真正的内核加载
  • rootfs: 内核加载后将根文件系统以只读的方式挂载
  • /sbin/init: 启动1号进程,/sbin/init,接下来的系统的管理都交给了1号进程

用户空间启动流程:

  • 设置默认的运行级别
  • 运行系统初始化脚本(/etc/rc.d/rc.sysinit),完成系统初始化
  • 关闭对应级别下需要关闭的服务
  • 启动对应级别下需要启动的服务
  • 设置登陆终端

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

  • (1) 为硬盘新建两个主分区;并为其安装grub;
  • (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
  • (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
  • (4) 为grub提供配置文件;
  • (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;
以下是我的分区:

    /dev/sdb1 boot 200M
    /dev/sdb2 / 2G
    /dev/sdb3 swap 1G

在/mnt下创建/boot /sysroot目录

挂载/dev/sdb1到/mnt/boot,/dev/sdb2到/mnt/sysroot

创建grub
# grub-install --root-directory=/mnt /dev/sdb
复制linux内核与ramdisk
# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/vmlinuz
# cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/initramfs.img
创建grub.conf
# cd /mnt/boot/grub
# vim grub.conf
default 0
timeout 5
title Centos (zgx)
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs.img
创建根文件系统目录
# cd /mnt/sysroot
# mkdir bin  sbin dev  etc  home  lib  lib64   media  mnt  proc  root  sbin  sys  tmp  usr  var
拷贝几个程序
# cp /bin/bash /mnt/sysroot/bin
# ldd /bin/bash 
        linux-vdso.so.1 =>  (0x00007ffcdc8d5000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f973fc3a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f973fa36000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f973f6a1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f973fe64000)
# cp /lib64/libtinfo.so.5 lib64/
# cp /lib64/libdl.so.2 lib64/
# cp /lib64/libc.so.6 lib64/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# sync

将这块硬盘作为虚拟机的启动盘,可以正常的启动小linux

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

在图形界面界面制作安装system-config-kickstart

在图形界面制作个kickstart

#修改引导镜像的内核参数
#mount /dev/cdrom /mnt/cdrom
#mkdir /myboot
#cp /mnt/cdrom/ioslinux /myboot
#cp ks.cfg /myboot
#cd /mnt/cdrom/ioslinux
#vim isolinux.cfg
...
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg
...
#cd /
#重新封装引导镜像
#mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot

将引导镜像进行安装可以进行自动安装

4、写一个脚本

  • (1) 能接受四个参数:start, stop, restart, status
    start: 输出“starting 脚本名 finished.”
  • (2) 其它任意参数,均报错退出;
#!/bin/bash

pidfile=/var/run/myservice.pid

start() {

   if [ -e $pidfile ];then
        echo "myservice aleardy start."
    else
        pid=$$
        echo "${pid}" > $pidfile
        echo "starting myservice finished"  
   fi
}

stop() {
   if [ -e $pidfile ];then
        rm -f $pidfile
        echo "stopping myservice finished"
    else
        echo "myservice is not running"
    fi        
}

case $1 in 
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;
status)
    if [ -e $pidfile ];then
        echo "myservice is running"
    else
        echo "myservice is not running"
    fi
    ;;
*)
    echo "Usage: $0 [start|stop|restart|status]"
esac

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

  • (1) 如果登录了,则显示用户登录,脚本终止;
  • (2) 每3秒钟,查看一次用户是否登录;
#!/bin/bash
while true;do
    if who | grep ansible &> /dev/null;then
        echo "ansible aleardy login."
        break
    else
        sleep 3
        continue
    fi
done

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

  • cpu) display cpu info
  • mem) display memory info
  • disk) display disk info
  • quit) quit

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

#!/bin/bash
cat << EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF

while true;do
read -p "please choose:" choose
case ${choose} in 
cpu)
    lscpu
    ;;
mem)
    free -m
    ;;
disk)
    df -HT
    ;;
quit)
    exit
    ;;
*)
    continue
esac
done

7、写一个脚本

  • (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
  • (2) 提示用户输入一个用户名或输入“quit”退出;
    当输入的是用户名,则调用函数显示用户信息;
    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:
#!/bin/bash
user() {

    grep "^$1\>" /etc/passwd |awk -F':' '{print "user",$1,"uid",$3}'
}

while true;do
read -p "enter a user:" username
if [ $username == 'quit' ];then
    break
else
    user $username
    echo "enter quit to exit"
fi
done

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

  • (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
  • (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
  • (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;

规则同上面命令相关的要求;

#!/bin/bash
target=/mnt/sysroot
cmd() {
if which $cmd $> /dev/null;then
    cmdpath=`which --skip-alias $cmd`
else
    echo "no such command"
    return 6
fi
}

cmdcopy() {
cmddir=`dirname $1`
[ -d ${target}${cmddir} ] || mkdir -p ${target}${cmddir}
[ -f ${target}${1} ] || cp $1 ${target}${cmddir} 
}

libcopy(){
for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do
libdir=`dirname $lib`
[ -d ${target}${libdir} ] || mkdir -p ${target}${libdir}
[ -f ${target}${lib}  ] || cp $lib ${target}${libdir}
done
}
while true;do
read -p "enter a command:" cmd
if [ "$cmd" == 'quit' ];then
echo quit
exit 0
fi

cmd $cmd
[ $? -eq 5 ] && continue

cmdcopy $cmdpath
libcopy $cmdpath

done

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

(0)
N25_随心N25_随心
上一篇 2017-03-15 19:09
下一篇 2017-03-15 19:09

相关推荐

  • DHCP简介及简单实践

    一、引言 DHCP全称Dynamic Host Configure Protocol,动态主机配置协议,用于向网络中的计算机分配IP地址及一些TCP/IP配置信息。DHCP提供了安全,可靠且简单的TCP/IP网络设置,避免了TCP/IP网络地址的冲突,同时大大降低了工作负担。 二、DHCP工作流程 DHCP采用C/S架构,即Server/Client,它的简…

    Linux干货 2017-01-10
  • Linux程序包管理方式

    Linux程序包安装和管理方式共计三种:          一、[yum|dnf],通过官网或者其他开源网站提供的文件服务器,本机镜像源等途径进行安装。         二、rpm,通过官网或者其他开源网站通过…

    Linux干货 2016-08-29
  • 马哥教育21期网络班—第8周课程+练习—-成长进行时–不退步

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:一种网路装置,负责网路桥接,将网络的多个网段在数据链路层连接起来。 集线器:将多条以太网线或光纤集合连接在同一段物理介质下的装置。工作在物理层。 二层交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通…

    Linux干货 2016-08-24
  • 马哥教育网络班22期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/tuser1 [root@localhost ~]# chmod&nb…

    Linux干货 2016-09-05
  • 正则表达式的如何使用

    简述:正则表达式主要用于文本的搜索,它表示了搜索文本的过滤条件。根据这些条件,对目标文本朱行进行匹配检查,最后对输出匹配到符合过滤条件的行。 使用:正确高效的使用正则表达式,需要掌握以下基本知识点         1:语法 grep [OPTION] PATTERN FILE……

    Linux干货 2017-06-04
  • linux下的打包与压缩

    linux压缩或解压缩工具有很多,除了已经很少有人使用的compress外,现在常用的还有tar,bzip2,xz 和gzip等,我们来说说它们的用法。 先来说bzip2。bunzip2和bzcat可以由bzip2指定选项来执行同样的结果,这里只介绍bzip2的用法。使用bzip2这个工具创建的文件以.bz2,.bz,.tbz,.tar.bz2或者…

    Linux干货 2017-04-16

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-29 17:15

    作业品质保持的很好,继续加油。