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干货 2017-11-18
    • 8.5文本处理工具及正则表达式

      一、各种文本工具     文件查看     命令:cat,tac,rev         cat optiong file       &n…

      Linux干货 2016-08-10
    • 字符切割和用户管理

      1、列出当前系统上所有已经登录的用户的用户名,同一个用户登录多次,则只显示一次 who |cut -d’ ‘ -f1 |sort -u2、取出最后登录到当前系统的用户的相关信息。 last |head -1|cut -d’ ‘ -f1 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 cut…

      2017-12-17
    • Linux Sysadmin–part4

      一、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) A.POST加电自检 主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。 B.BIOS…

      2017-10-10
    • yum仓库搭建

      两台主机: 一台centos7  客户机 一台centos6  服务器 准备工作 1.查看是否共享服务是否可用 httpd或vsftpd 是否安装。确认安装之后选择vsftpd为共享服务/var/www/html和/var/ftp/pub为共享目录。 这里使用vsftpd,/var/ftp/pub这个目录为共享目录 在这个目录下建立一个独立的文件夹 [roo…

      2017-12-01
    • 第一周作业

      1. 描述计算机组成及其功能 说到计算机组成,就必须提及计算机之父冯洛伊曼先生。是他早年最先提出了计算机体系结构的设想,并沿用至今。 计算机由五大基本组件组成: 运算器 进行算术运算和逻辑运算的主要部件; 控制器 控制器从存储器中逐条取出指令、分析指令,然后根据指令要求产生一系列命令,控制计算机各部件; 存储器 分为内存和外存,…

      Linux干货 2016-12-02

    评论列表(1条)

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

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