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

    相关推荐

    • linux命令格式及基础命令

      linux命令格式及基础命令介绍 命令格式 command [options] [arguments] * command:命令 * options: –单词 或 -单字 * argument:参数(档案名称或其他) 基础命令介绍 ifconfig 用于显示或设置网络设备 语法 ifconfig [网络设备][down up -allmulti -arp …

      Linux干货 2017-12-03
    • php的serialize序列化和json性能测试

      最近需要对大数组做存储,需要在serialize序列化和json之间做了选择。因此需要做了性能测试。 在php5.2之前对数组存储的时候,大都使用serialize系列化。php5.2之后,开始内置了 JSON 的支持。 在网上看到有些资料说:json_encode和json_decode比内置的serialize和unserialize…

      Linux干货 2015-04-07
    • Linux文件管理及bash特性详解

      1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。  文件管理工具:cp,mv,rm       cp命令:copy       源文件:目标文件  单源复制:cp [OPTION]… [-T] SOURCE DEST  多源复制:…

      Linux干货 2016-11-06
    • 人志建,则无敌—vim练习题

      马哥网络班21期-第六周博客 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@caicai ~]# cp -a /etc/rc.d/rc.sysinit /tmp [root@caicai&nbsp…

      Linux干货 2016-08-15
    • Linux的各种发行版系列讲解

      Linux的各种发行版系列讲解 linux的发行版有数百种之多,在此只讲解最主流的一些分支 Debain (主流)Debian是主流三大分支中唯一一个以社区方式来发行的,没有商业公司运作 后期加进去的软件限制更少,所以使用难度比其他更高 Knoppix Debian的一个著名子分支,短小精悍 Ubuntu(乌班图) 基于Debian的二次发行版,是主流分支,…

      Linux干货 2018-02-22
    • mariadb的主从复制、主主复制、半同步复制

      主从服务器的时间要同步,数据库版本最好是一致的,以免造成函数处理、日志读取、日志解析等发生异常。 以下三个主从复制的设置是独立的。 注意防火墙和selinux的影响。 1、简单主从复制的实现 (1)主服务器的配置 1)安装mariadb-server [root@localhost ~]# yum -y install…

      Linux干货 2016-11-21

    评论列表(1条)

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

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