N21沉舟第十周作业

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

linux启动流程.jpg

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

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

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

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

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

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

~]# fdisk /dev/sdb
~]# partx -a /dev/sdb
~]# mount /dev/sdb1 /mnt/sd
~]# grub-install --root-directory=/mnt/sd /dev/sdb
~]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/sd/vmlinuz
~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/sd/initramfs.img
~]# cp /boot/grub/grub.conf /mnt/sd/boot/grub/grub.conf
~]# cat /sdb1/boot/grub/grub.conf
            default=0
            timeout=5
            hiddenmenu
            title CentOS 6 (test new)
            root (hd0,0)
            kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
            initrd /initramfs.img
~]# umount /dev/sdb1                                             #卸载分区1
~]# mount /dev/sdb2 /mnt                                          #挂载分区2
~]# mkdir -p /mnt/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp}
~]# mkdir -p /mnt/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux}
~]# cp /bin/{bash,ls,cat} /mnt/bin
~]# cp `ldd /bin/{bash,ls,cat}|grep -eo "/lib.*[[:space:]]"| sort -u` /mnt/lib      #复制lib文件
~]# sync                                                     #同步
~]# init 6           #重启 
     #进入bios,设置硬盘启动顺序

  

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

#命令段
firewall --disabled                                    //禁用防火墙
install                                                //执行新安装
cdrom                                                  //用光盘安装
rootpw --iscrypted $1$TxkJ7T6B$obLELgEGcn0uzgA3QTAPl/  //管理员加密密码
auth  --useshadow  --passalgo=sha512                   //屏蔽密码算法
graphical                                              //安装图形环境
firstboot --disable                                    //首次引导禁用代理
keyboard us                                            //安装键盘类型
lang en_US                                             //默认语言
selinux --enforcing                                    //激活selinux
logging --level=info                                   //信息等级
timezone  Asia/Hong_Kong                               //系统时区
bootloader --location=mbr                              //在MBR上安装引导程序
clearpart --all                                        //删除所有现存分区  
part /boot --fstype="ext4" --size=500                  //分区挂载
part / --fstype="ext4" --size=10000
#脚本段
%pre                                                   //安装前脚本
echo "start"
%end
%post                                                  //安装后脚本
echo "end"
%end
#程序包段
%packages
@chinese-support                                       //中文支持
@development                                           //开发工具
@graphical-admin-tools                                 //图形化工具
@remote-desktop-clients                                //远程桌面客户端
git
-ibus-table-cangjie
-ibus-table-erbi
-ibus-table-wubi
%end

 简单引导镜像光盘制作:

 
    (1)复制系统安装光盘/Packages /repodata外的所有目录下的所有文件到一自制目录中(/tmp/myiso/)
    (2)创建引导光盘:把myiso目录创建为光盘镜像boot.iso
 
    ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table 
        -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin 
        -c isolinux/boot.cat -o /root/boot.iso /tmp/myiso/

4、写一个脚本

  (1) 能接受四个参数:start, stop, restart, status

   start: 输出“starting 脚本名 finished.”

   …

  (2) 其它任意参数,均报错退出;

            #!/bin/bash            
            #
            case $1 in
            start)
              echo "starting $0 finished."
                ;;
            stop)
                echo "stoping $0 finished."
                ;;
            restart)
                echo "restarting $0 finished."
                ;;
            status)
                echo "$0 is running."
                ;;
            *)
                echo "wrong input."
                exit 1
               ;;
            ssac

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

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

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

        #!/bin/bash
    #
    while [ 0 -eq 0 ];do
       if `who | grep $1&>/dev/null`;then
           echo "$1 is login."
           exit 0
       else
          sleep 3
       fi
    done

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

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

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

                #!/bin/bash
        #
        
        while [ 1 -eq 1 ];do
        
        echo "please input a option:"
        echo "mem: display memory info."
        echo "disk: display disk info."
        echo "quit: quit mean."
        read -p ":" test
        
        case $test in
        cpu)
            cat /proc/cpuinfo
            ;;
        mem)
            free -m
            ;;
        disk)
           fdisk -l
           ;;
        quit)
           exit 0
           ;;
        *)
           echo "you have wrong choose."
           continue
            ;;
        esac
        
        done

7、写一个脚本

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

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

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

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

            #!/bin/bash            
            #
            function userid {
               while [ 1 -eq 1 ];do
               read -p "please input a username:" uname
                  if id $uname&>/dev/null;then
                      uuid=$(grep "^$uname" /etc/passwd|cut -d: -f3 )
                      ushell=`grep "^$uname" /etc/passwd|cut -d: -f7`
                      echo "user $uname UUID is $uuid."
                      echo "user $uname shell is $ushell"
                  else
                        if [ $uname == "quit" ];then
                               exit 1
                        else
                            echo "please input a right username."
                             continue
                        fi
                   fi
               done
            }
            userid

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

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

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

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

            #!/bin/bash            
            #
            function comdso {
            read -p "input a command:" comd
              dirname=`dirname $(which $comd)`
              if [ -d /mnt/sysroot`which $comd` ];then
                cp -r `which $comd` /mnt/sysroot`which $comd`
              else
                mkdir -p /mnt/sysroot$dirname
                cp -r `which $comd` /mnt/sysroot`which $comd`
              fi
                for i in `ldd $(which $comd) |grep -o "/lib.*[[:space:]]"`;do
                    dirname=`dirname $i`
                    if [ -d /mnt/sysroot$dirname ];then
                    cp -r $i  /mnt/sysroot$i
                  else
                  mkdir -p /mnt/sysroot$dirname
                    cp -r $i  /mnt/sysroot/usr$i
                    fi
                 done
            }
            comdso

原创文章,作者:N21-沉舟,如若转载,请注明出处:http://www.178linux.com/44809

(0)
N21-沉舟N21-沉舟
上一篇 2016-09-10 08:15
下一篇 2016-09-10 08:16

相关推荐

  • 用户\组的管理

    1、用户的标识符:UID与GID   每个登录的用户都至少会识别两个ID,那么就是UID与GID(username与groupneme)当我们要显示文件属性时,系统会根据/etc/passwd与/etc/group的内容,找到id对应的账号与组名再显示出来。 /etc/passwd文件结构   他的每一行都代表一个账号,并且里面许多账号都…

    Linux干货 2016-08-04
  • N_28正则表达式及vim编辑的一些知识

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ]# who | sort -nu | cut -d” ” -f1 2、取出最后登录到当前系统的用户的相关信息。 ]# who | tail -1 | cut -d” ” -f1 | id 3、取出当前系统上被用户当作其…

    Linux干货 2017-12-16
  • 运维学习笔记-Puppet之Hiera初探

    为什么使用Hiera? Puppet中的manifest同时包含静态的代码(判断/循环逻辑,依赖关系,类定义,资源类型定义等等)和动态的数据(类声明时的参数值和资源声明时的属性值)。说代码是静态的是因为如果在设计阶段考虑比较全面,代码写成之后是很少变化的。但是数据要根据具体情况赋予不同的值。如果manifest设计的不是很灵活,比如某些数据被固化(hardc…

    Linux干货 2016-07-07
  • 计算机基础第一部分

    ** 第一课:计算机基础知识** 第一章计算机的组成 计算机是由硬件(Hardwaer)和软件(Software)来组成两大类,他是一台可以自由传输数据, 储存数据,娱乐,工作等等的智能设备。 第一节计算机硬件 主板架构图 内存====用来存储临时数据,弱点喜欢松动一般电脑黑屏都是他松动了,导致电脑不能机 基本上%80以上的电脑不能开机都是他出了问题,服务器…

    Linux干货 2017-05-19
  • MySQL 简述

    1 概述
    2 安装
    3 数据库的操作
    4 注意事项

    Linux干货 2017-09-25
  • N25-第八周作业

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;      在线的主机使用绿色显示;      不在线的主使用红色显示; 2、如何给网络接口配置多个地址,有哪些方式?     ifconfig eth#:# &n…

    Linux干货 2017-02-01