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 09:09
    下一篇 2016-10-24 09:09

    相关推荐

    • 逻辑卷

      §·逻辑卷管理器LVM介绍 ※·LVM逻辑卷的简单描述 lvm(logical volume manager 逻辑卷管理器)的可以弹性的调整文件系统的容量,支持任何块设备,需要使用dm模块:device mapper设备映射,将一个或多个底层设备组织成一个逻辑设备的模块。 lvm的重点在于弹性的调整文件系统的容量,而并非在于数据的存储效率及安全上面…

      Linux干货 2016-08-30
    • ls、shutdown命令使用及命令提示符格式修改

          ls、shutdown命令使用及命令提示符格式修改                      &nbs…

      Linux干货 2016-10-17
    • 关于 文本处理工具、正则表达式、grep 的简单举例

                                文本处理工具 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看命令:cat,tac,rev cat […

      系统运维 2016-08-08
    • Centos6.5利用RubyGems的fpm制作zabbix_agent的rpm包,并使用ansible批量部署

      一、 搭建rpm包制作环境 安装gcc [root@lvs1 ~]# yum install gcc 安装make [root@lvs1 ~]# yum install make 安装ruby源(ruby版本必须要在1.9.3以上,centos自带的是1.8的版本,需要自己编译安…

      Linux干货 2016-08-20
    • 网络管理3

      一、知识整理 1、跨网络通信:路由 路由的分类:主机路由;网络路由;默认路由。 将主机接入网络,需要配置网络相关设置。一般包括如下内容:主机名;IP/MASK;路由:默认网关;DNS服务器:主、次、第三DNS服务器。 2、网络配置文件:IP、MASK、GW、DNS相关配置文件 /etc/sysconfig/network-scripts/ifcfg-IFAC…

      Linux干货 2016-09-10
    • 早安,Linux

      希望能通过不断的努力,变成一个不一样的我。

      Linux干货 2017-07-11

    评论列表(1条)

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

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