马哥教育网络班22期+第10周课程练习

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

    系统启动流程:
      POST --> BootSequence(BIOS) --> BootLoader (MBR) --> Kernel (ramdisk) --> rootfs (readonly) --> /sbin/init ()
      1. POST: 加电自检
      2. BootSequence:按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用的设备
      3. BootLoader:加载设备的引导程序
      4. Kernel:探测可识别到的所有硬件设备,加载硬件驱动程序(有可能借助于ramdisk加载驱动)
      5. rootfs:以只读方式挂载根文件系统
      6. init:运行用户空间的第一个应用程序:/sbin/init 进行初始化操作

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
  (1) 为硬盘新建两个主分区;并为其安装grub;
  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
  (4) 为grub提供配置文件;
  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

    为硬盘新建两个主分区
      [root@localhost ~]# fdisk /dev/sdg
      Command (m for help): n
      Command action
         e   extended
         p   primary partition (1-4)
      p
      Partition number (1-4): 1
      First cylinder (1-3916, default 1): 1
      Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916): +200M

      Command (m for help): n
      Command action
         e   extended
         p   primary partition (1-4)
      p
      Partition number (1-4): 2
      First cylinder (27-3916, default 27): 
      Using default value 27
      Last cylinder, +cylinders or +size{K,M,G} (27-3916, default 3916): +10G
      [root@localhost ~]# partx -a /dev/sdg
      [root@localhost ~]# mke2fs -t ext4 /dev/sdg1
      [root@localhost ~]# mke2fs -t ext4 /dev/sdg2

    挂载第一个分区,并安装grub
      [root@localhost mnt]# mkdir /mnt/boot
      [root@localhost mnt]# mount /dev/sdg1 /mnt/boot
      [root@localhost mnt]# grub-install --root-directory=/mnt /dev/sdg

    复制内核和ramdisk文件到第一个分区
      [root@localhost mnt]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/vmlinuz
      [root@localhost mnt]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/initramfs.img

    配置grub.conf文件
      [root@localhost mnt]# vim /mnt/boot/grub/grub.conf 
      default=0
      timeout=5
      title CentOS (Express)
              root (hd0,0)
              kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
              initrd /initramfs.img

    为第二个分区提供rootfs
      [root@localhost mnt]# mkdir /mnt/sysroot
      [root@localhost mnt]# mount /dev/sdg2 /mnt/sysroot
      [root@localhost sysroot]# mkdir -pv /mnt/sysroot/{etc,bin,sbin,lib,lib64,dev,proc,sys,tmp,var,usr,home,root,mnt,media}

    复制命令及其库文件
      [root@localhost mnt]# vim /tmp/cpcmd2.sh
      #!/bin/bash

      dst="/mnt/sysroot"
      [ ! -d $dst ] && mkdir $dst

      copycmd(){
              if `which $1 &>/dev/null`;then
                      cmddir=`which --skip-alias $1`
                      dir=`dirname $cmddir`
                      mkdir -pv ${dst}${dir}
                      cp $cmddir ${dst}${dir}/
              else
                      echo "command not found"
                      return 0
              fi
      }

      copylib(){
              liblist=$(ldd `which --skip-alias $1`|grep -Eo "/[^[:space:]]+")
              for libfile in $liblist;do
                      libdir=`dirname $libfile`
                      [ ! -d ${dst}${libdir} ] && mkdir ${dst}${libdir}
                      cp $libfile ${dst}${libdir}
              done
      }


      read -p "please input a command:" cmd

      while [ "$cmd" != "quit" ];do
              copycmd $cmd
              copylib $cmd
              echo "files copied"
              read -p "please input a command:" cmd

      done

      [root@localhost mnt]# bash /tmp/cpcmd2.sh
      [root@test tmp]# bash cpcmd.sh
      please input a command:bash      
      files copied
      please input a command:ls
      files copied
      please input a command:cat
      files copied
      please input a command:quit
 
    新建虚拟机,将新的硬盘设置为第一启动项,启动bash并测试ls,cat命令

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

    安装kickstart程序
      [root@localhost ~]# yum install system-config-kickstart

    制作ks.cfg文件
      [root@localhost ~]# system-config-kickstart &  #将ks.cfg保存在root 目录下
      [root@localhost ~]# cat ks.cfg    
      #platform=x86, AMD64, or Intel EM64T
      #version=DEVEL
      # Firewall configuration
      firewall --enabled --service=ssh
      # Install OS instead of upgrade
      install
      # Use CDROM installation media
      cdrom
      # Root password
      rootpw --iscrypted $1$7e5bbhUU$5ikWQctYMuPQc3O9Wko9d/
      # System authorization information
      auth  --useshadow  --passalgo=sha512
      # Use graphical install
      graphical
      firstboot --disable
      # System keyboard
      keyboard us
      # System language
      lang en_US
      # SELinux configuration
      selinux --enforcing
      # Installation logging level
      logging --level=info

      # System timezone
      timezone  Asia/Shanghai
      # System bootloader configuration
      bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
      # Partition clearing information
      clearpart --all --initlabel 
      # Disk partitioning information
      part /boot --fstype="ext4" --size=200
      part / --fstype="ext4" --size=10000
      part swap --fstype="swap" --size=1024

    挂载安装光盘
      [root@localhost ~]# mount /dev/cdrom /media/cdrom/
      [root@localhost ~]# mkdir -p /root/auto_install
      [root@localhost ~]# cp -arf /media/cdrom /root/auto_install/

    定位ks.cfg文件
      [root@localhost ~]# cp /root/ks.cfg /root/auto_install/cdrom/ks.cfg
      [root@localhost ~]# chmod +w /root/auto_install/cdrom/isolinux/isolinux.cfg
      [root@localhost ~]# vim /root/auto_install/cdrom/isolinux/isolinux.cfg
      label linux
        menu label ^Install or upgrade an existing system
        menu default
        kernel vmlinuz
        append initrd=initrd.img ks=cdrom:/ks.cfg  # 在这里添加ks文件路径参数
       
    制作自动安装光盘
      [root@localhost ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 \
      --boot-info-table -V "CentOS 6  Auto install" \
      -b isolinux/isolinux.bin -c isolinux/boot.cat \
      -o /root/centos6_auto_install.iso \
      /root/auto_install/cdrom/

4、写一个脚本
  (1) 能接受四个参数:start, stop, restart, status
   start: 输出“starting 脚本名 finished.”
   ...
  (2) 其它任意参数,均报错退出;

      [root@mail tmp]# vim start.sh

      #!/bin/bash

      case $1 in
              start)
                      echo "starting $0 finished."
                      ;;
              stop)
                      echo "stop $0 finished"
                      ;;
              restart)
                      echo "restart $0 finished"
                      ;;
              status)
                      echo "$0 status"
                      ;;
              *)
                      echo "error,please input {start|stop|restart|status}"
                      exit 1
      esac
      [root@mail tmp]# bash /tmp/start.sh start

5、写一个脚本,判断给定的用户是否登录了当前系统;
  (1) 如果登录了,则显示用户登录,脚本终止;
  (2) 每3秒钟,查看一次用户是否登录;

      [root@mail tmp]# vim login.sh
      #!/bin/bash

      read -p "Please input a user:" user
      id $user &> /dev/null
      if [ $? -eq 0 ];then
              while true;do
                      if who |grep "^$user" &> /dev/null;then
                              break
                      fi
                      sleep 3
              done
              echo "$user is login"
      else
              echo "$user is not exist"
      fi
      [root@mail tmp]# bash login.sh

6、写一个脚本,显示用户选定要查看的信息;
   cpu) display cpu info
   mem) display memory info
   disk) display disk info
   quit) quit
   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;
   
      [root@mail tmp]# vim info.sh
      #!/bin/bash

      read -p "input cpu|mem|disk|quit :" option
      while [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ];do
              read -p "input cpu|mem|disk|quit :" option
      done

      if [ "$option" == "cpu" ];then
              lscpu
      elif [ "$option" == "mem" ];then
              free -m
      elif [ "$option" == "disk" ];then
              fdisk -l /dev/[hs]d[a-z]
      else
              echo "quit"
              exit 0
      fi
      [root@mail tmp]# bash info.sh

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

      [root@test tmp]# vim userinfo.sh   
      #!/bin/bash

      userinfor(){
              uid=`id -u $username`
              ushell=`grep "^$username\>" /etc/passwd |cut -d: -f7`
              echo "USERNAME:$username UID:$uid SHELL:$ushell"
      }

      read -p "Please input a username|quit :" username

      while [ "$username" != "quit" ];do
              id $username &>/dev/null
              if [ $? -eq 0 ] ;then

                      userinfor $username
                      read -p "Please input a username|quit :" username
              else
                      echo "user not exist"
                      read -p "Please input a username|quit :" username

              fi

      done
      [root@test tmp]# bash userinfo.sh

8、写一个脚本,完成如下功能(使用函数)
   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

      [root@localhost mnt]# vim /tmp/cpcmd2.sh
      #!/bin/bash

      dst="/mnt/sysroot"
      [ ! -d $dst ] && mkdir $dst

      copycmd(){
              if `which $1 &>/dev/null`;then
                      cmddir=`which --skip-alias $1`
                      dir=`dirname $cmddir`
                      mkdir -pv ${dst}${dir}
                      cp $cmddir ${dst}${dir}/
              else
                      echo "command not found"
                      return 0
              fi
      }

      copylib(){
              liblist=$(ldd `which --skip-alias $1`|grep -Eo "/[^[:space:]]+")
              for libfile in $liblist;do
                      libdir=`dirname $libfile`
                      [ ! -d ${dst}${libdir} ] && mkdir ${dst}${libdir}
                      cp $libfile ${dst}${libdir}
              done
      }


      read -p "please input a command:" cmd

      while [ "$cmd" != "quit" ];do
              copycmd $cmd
              copylib $cmd
              echo "files copied"
              read -p "please input a command:" cmd

      done
      [root@localhost mnt]# bash /tmp/cpcmd2.sh

原创文章,作者:N22_上海_长清,如若转载,请注明出处:http://www.178linux.com/54836

(0)
N22_上海_长清N22_上海_长清
上一篇 2016-10-27
下一篇 2016-10-27

相关推荐

  • 为什么系统可执行文件多用相对路径创建链接

    为什么系统可执行文件多用相对路径创建链接 使用链接有什么好处 作为一个linux初学者,我们首先要知道,在linux中使用链接的好处是什么。总结下来一共有几个: 使用链接可以使我们在访问文件时省去一大笔敲文件路径的时间。对于我们运维工程师来说,我们经常要查看某个文件或者访问某个目录,再进行该项工作时,往往需要敲很多路径才能找到我们想访问的文件,创建链接可以让…

    Linux干货 2017-07-23
  • 马哥教育网络班第19期+第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; 2、写一个脚本     (1) 获取当前主机的主机名,保存于hostname变量中;     (2) 判断此变量的值是否为localhost,如果是…

    Linux干货 2016-09-19
  • nginx

    nginx: master/worker master:配置文件分析和加载、管理worker、平滑升级; worker:处理用户请求; cache loader, cache manager:缓存加载和缓存管理 user Syntax: user user [group];        …

    Linux干货 2017-06-19
  • RPM与YUM安装工具介绍与初步使用、编译apache2

      RPM可以对程序 进行安装、卸载、查询、校验和维护     rpm(raedhat package mananger),一以种数据库记录的方式将需要的软件安装到linux系统的一种机制。     RPM最大的特点是将要安装的软件先编译过,并且打包成为RPM机制的安装包,通过包…

    Linux干货 2016-06-01
  • 22期网络班+第一周作业+深圳+王金宝

    1、描述计算机的组成及其功能? 答: 显示器和主机,显示器就不说了 主机里又有,主板,又叫主机板(mainboard)、系统板(systembourd)和母板(motherboard);它安装在机箱内,是微机最基本的也是最重要的部件之一。主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关 接口、指…

    Linux干货 2016-08-13
  • 软连接与硬连接

    硬链接定义 新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用. 硬链接(hard link) ln   UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系统只存在一个文件的副本。系统简单地通过在目录中建立一个新的登记项来实现这种连接。该登记项…

    Linux干货 2017-07-22