Homework Week-10 CentOS启动相关及bash脚本编程

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

[H$EM46[4W}@T60D(WJM~1L.jpg

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

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

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

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

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

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

————————————————————————–

1.在虚拟机中添加一个新硬盘

shutdown   #在centos关闭的情况下才能添加硬盘

2.启动centos,查看新添加的硬盘,并对其进行分区格式化

fdisk  -l  /dev/sd[a-z]
fdisk  /dev/sdb
n
p
1
+100M
2
+2G
t
2
82
n
p
+5G
w
partx  -a  /dev/sdb
cat  /proc/partitions
mke2fs -t  ext4  /dev/sdb1
mke2fs -t  ext4  /dev/sdb3
mkswap  /dev/sdb2

3.复制现有内核文件和img文件到新磁盘中

mkdir  /mnt/boot
mount  /dev/sdb1  /mnt/boot/
ls  /mnt/boot/
grub  -install  --root-directory=/mnt  /dev/sdb
ls  /mnt/boot/
cp  /boot/vmlinuz-3.10.0-327.e17.x86_64  /mnt/boot/vmlinuz-3.10.0-327.e17.x86_64   复制内核到boot下
cp /boot/initramfs-3.10.0-327.e17.x86_64.img /mnt/boot/initramfs-3.10.0-327.e17.x86_64.img

4.编辑配置文件

vim  /mnt/boot/grub/grub.conf
default=0
timeout=5
title  centos(express)
     root(hd 1,0)
     kernel  /vmlinuz-3.10.0-327.e17.x86_64  ro  root=/dev/sdb1   init=/bin/bash selinux=0
     initrd  /initramfs-3.10.0-327.e17.x86_64.img

5.创建文件并复制依赖的库文件

mkdir  /mnt/sysroot
mount  /dev/sdb3  /mnt/sysroot/
cd  /mnt/sysroot/
mkdir  -pr  etc  bin   sbin  lib  lib64  dev  proc  sys tmp  var  usr  home  root  mnt  media
ll
cp  /bin/bash  /mnt/sysroot/bin/
ldd  /bin/ash  bash依赖于哪些库
cp  /lib64/libtinfo.so.5/mnt/sysroot/lib64
cp  /lib64/libd1.so.2  /mnt/sysroot/lib64
cp  /lib64/libc.so.6  /mnt/sysroot/lib64/
cp  /lib64/ld-linux-x86-64.so.2   /mnt/sysroot/lib64/
cd
ch  root  /mnt/sysroot/
sync

    ————————————————————————

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

    mkdir  myboot
    cd  myboot/
    ls  /media/cdrom
    cp  -r  /media/cdrom/isolinux/  ./
    cd  isolinux/
    chmod  +w  *
    cd  ..
    pwd
    cp  /root/centos6.x86_64.cfg  ks.cfg
    cd  ..  #站在myboot之外
    #创建光盘镜像
    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
    #Elephant
    case $1 in
    start)
        echo "starting bash finished."
        ;;
    stop)
        echo "stopped bash finished."
        ;;
    restart)
        echo "restarting bash finished."
        ;;
    status)
        echo "status..."
        ;;
    *)
        echo "Wrong argument."
        exit 2
    esac

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

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

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

    #/bin/bash
    #Elephant
    read -p "Please input a username:" usrname
    while true;do
        if who | grep "^$usrname" &> /dev/null;then
            break
        fi
        sleep 3
    done
    echo "$(date +'''%F %T''') $usrname logged on."

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

       cpu) display cpu info

       mem) display memory info

       disk) display disk info

       quit) quit

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

    #!/bin/bash
    #Elephant
    until ! [ 1 ];do
    
        cat<<EOF
        cpu) display cpu info
        mem) display memory info
        disk) display disk info
        quit) quit
        EOF
        
        read -p "Your choice:" option
        if [[ "$option" == "cpu" ]];then
            lscpu
        elif [[ "$option" == "mem" ]];then
            free -m
        elif [[ "$option" == "disk" ]];then
            fdisk -l /dev/[sh]d[a-z]
        elif [[ "$option" == "quit" ]];then
            echo "Quit"
            exit 4
        else
            echo "Please input 'cpu' 'mem' 'disk' or 'quit'"
        fi
        
    done

    7、写一个脚本

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

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

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

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

    #!/bin/bash
    #Elephant
    userinfo(){
        if id "$username" &>/dev/null;then
            grep "^$username\>" /etc/passwd | cut -d: -f3,7
        else
            echo "No such user."
        fi
    }
    until ! [ 1 ];do
        read -p "Please input username or 'quit':" username
        if [ $username == "quit" ];then
            echo "Quit"
            exit 2
        else
            userinfo
        fi
    done

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

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

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

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

    #!/bin/bash
    #Elephant
    isornotcmd(){
        if [ "$path1" == "" ];then
            echo "$cmd is not a command."
            exit 2
        fi
    }
    
    copycmd(){
        if [ -f "/mnt/sysroot/usr/bin" ];then
            cp -fr $path1 /mnt/sysroot/usr/bin/
        else
            mkdir -p /mnt/sysroot/usr/bin/
            cp -fr $path1 /mnt/sysroot/usr/bin/
        fi
    }
    
    copycmdrelay(){
        for path in $(ldd $path1 | grep -o "/.*\.so\.[0-9]");do
            if [ -f "/mnt/sysroot/rootfs/" ];then
                cp -LR $path /mnt/sysroot/rootfs/      #-LR复制链接文件的源文件
            else
                mkdir -p /mnt/sysroot/rootfs/
                cp -LR $path /mnt/sysroot/rootfs/
            fi
        done
    }
    
    read -p "Please input a command:" cmd
    path1=$(whereis $cmd | grep -o "/.*" | awk '{print $1}')
    isornotcmd
    copycmd
    copycmdrelay

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

    (0)
    N22_ElephantN22_Elephant
    上一篇 2016-10-24
    下一篇 2016-10-24

    相关推荐

    • PXE网络引导自动化安装系统详解

      一、PXE:预引导加载环境  1.PXE          Preboot ExecuteEnvironment:支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial f…

      2016-04-30
    • 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境

      一、环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新版本war包位置 生产环境服务器:192.168.13.51 /home/app/api-tomcat/webapps/api.war为生产环境war包位置 /…

      Linux干货 2016-12-18
    • 运维工程师技能需求排行

      这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
      注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

      Linux干货 2017-12-12
    • Linux第三周学习博客作业

      对第三周学习的内容进行总结

      Linux干货 2017-12-17
    • 几种常见开源协议

      几种常见的开源协议: 一、GPL详解: 在自由软件所使用的各种许可证之中,最为人们注意的也许是通用公开许可证(General Public License,简称GPL)。 GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。 GPL还规定:只要这…

      Linux干货 2016-07-12
    • 新的征程即将开始……

      新的征程,新的开始,开博祭旗篇!!!

      Linux干货 2016-12-26

    评论列表(1条)

    • 马哥教育
      马哥教育 2016-11-02 14:37

      博客写得非常的好,32个赞,给出了详细操作步骤,脚本思路清晰,1题能画一个图就更完美了,加油!