马哥教育网络19期+第十周课程练习

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

a).POST加电自检;
b).读取BIOS来识别启动系统的存储设备
c).设备中的MBR,bootloader的前446字节,是选择启动的grub,后面的4*16个字节是存放分区信息的,最后两个字节是校验信息的;
d).启动init进程:
    读取/etc/inittab,选择默认级别;
    执行初始化系统脚本,/etc/rc.d/rc.sysinit;
    执行/etc/rc.d/rcX.d/下的脚本,我选择的默认级别是3,所以读取rc5.d下的所有脚本,来控制系统启动的时候启动或关闭那些服务。

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

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

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

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

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

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

[root@Hao ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x7d5160c9.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (655-2610, default 655): 
Using default value 655
Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): +5G

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@Hao ~]# mke2fs -t ext4 /dev/sdb1
[root@Hao ~]# mke2fs -t ext4 /dev/sdb2
[root@Hao ~]# mkdir /newdir
[root@Hao ~]# mount /dev/sdb1 /newdir/
[root@Hao ~]# grub-install --root-directory=/newdir/ /dev/sdb1
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /newdir//boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)	/dev/fd0
(hd0)	/dev/sda
(hd1)	/dev/sdb
[root@Hao ~]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img /newdir/initramfs
[root@Hao ~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /newdir/vmlinuz
[root@Hao ~]# mkdir -pv /newdir/boot/grub/
[root@Hao ~]# vim /newdir/boot/grub//grub.conf
        default=0
        timeout=3
        title CentOS6.5
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs
[root@Hao ~]# umount /dev/sdb1
[root@Hao ~]# mount /dev/sdb2 /newdir/
[root@Hao ~]# mkdir -p /newdir/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp}
[root@Hao ~]# mkdir -p /newdir/{usr/{bin,sbin,lib,lib64},var{lib,lib64,log,local,cache},proc,sys,selinux}
[root@Hao ~]# cp /bin/{bash,ls,cat} /mnt/bin
[root@Hao ~]# cp `ldd /bin/{bash,ls,cat}| grep -eo "/lib.*[[:space:]]"  sort -u` /newdir/lib                                             
[root@Hao ~]# sync

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

1.anaconda应用程序支持通过读取配置文件的内容来完成安装过程的配置,配置文件称kickstart文件(在centos或红帽系列),文件在/root目录下,这种方法批量部署时需要用到。       
2.kickstart文件的组成:
  命令段
  程序包段:%packages, %end      #表示要安装的程序包
       @group                                   #安装包组
       package                                   #要装的包
       -package                                  #不安装package包
  脚本段:
       %pre                                    #安装前脚本:安装过程开始之前要执行的脚本;
       %post                                    # 安装后脚本:安装过程完成之后要执行的脚本;             
3.kickstart命令段,分为两类:必备命令 和 可选命令(辅助完成一些功能) 
   1.配置kickstart的方式:
       (1) 手动编辑配置文件;       
       (2) system-config-kickstart,GUI工具;安装命令system-config-kickstart的程序包名与命令名相同;                          
   2.安装过程如何获取并使用kickstart文件:
       (1)放置于安装程序能够获取到的位置;
         a.放置于光盘镜像;
         b.网络文件服务器;   
   3.安装过程过程中的安装引导选项
       (1).boot:
         linux     #启动默认安装模式
           linux text     #启动文本安装模式
                   
       (2).与网络相关的引导选项:
         ip=IPADDR
         netmask=MASK
         gateway=GW
         dns=DNS_SERVER_IP
         ifname=NAME:MAC_ADDR     #网卡名                              
       (3).指明获取 kickstart 文件的路径
         DVD drive  ks=cdrom:/path/to/kickstart_file
         HTTP Server  ks=http://server_ip:port/path/to/kickstart_file
         HTTPS Server ks=https://server_ip:port/path/to/kickstart_file
          FTP Server   ks=ftp://serverip:port/path/to/kickstart_file
         NFS Server   ks=nfs:server_ip:/path/to/kickstart_file
下面演示怎样创建一个引导光盘:
  (1) 首先准备工作目录,例如这里使用/tmp/cdrom;
      <span style="font-size:16px;font-family:'微软雅黑', 'Microsoft YaHei';">#mkdir /tmp/cdrom<br></span>    
               
  (2) 挂载系统发行光盘,复制isolinux目录至/tmp/cdrom;
     #mount /dev/sr0 /media/Centos-VERSION    
     #cp /media/Centos-VERSION  /tmp/cdrom/    
  (3)用命令system-config-keckstart制作kickstart文件, 复制制作好的kickstart文件ks.cfg至/tmp/cdrom某位置; 
      #system-config-kickstart#cp ks.cfg /tmp/cdrom    
  (4) 如果需要,可以编辑/tmp/cdrom/isolinux/isolinux.cfg,在某label后的append指令后附加ks=信息,从而实现自动调用光盘上提供的ks文件;
  (5) 创建iso镜像,采用命令mkios创建好之后会生成一个boot.iso文件,boot.iso文件就是我们的引导镜像,到这儿我们的镜像就制作完毕了 
    # mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 X86_64 boot disk" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso cdrom/    
  (6)如果需要的话,可以用sftp将制作好的boot.iso镜像复制到windows上面,然后新建一个虚拟机,在虚拟机中调整启动次序为光盘启动,即我们的boot.iso,引导启动即可

4、写一个脚本

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

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

   …

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

#!/bin/bash

if [ $# -eq 1 ];then
case $1 in
start)
echo "starting $0 finished."
;;
stop)
echo "stopping $0 finished."
;;
restart)
echo "restart $0 finished."
;;
status)
echo "status $0 finished."
;;
*)
echo "Wrong input"
exit 1
;;
esac
else
echo "Can not be empty!"
fi

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

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

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

#!/bin/bash
#
read -p "input username: " username
while true; do
    if who | grep "^$username" &> /dev/null; then
        break
    fi
    sleep 3
done
 
echo "$username already logged in."

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

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

#!/bin/bash
#
cat << EOF
cpu) show cpu information;
mem) show memory information;
disk) show disk information;
quit) quit
============================
EOF
 
read -p "Enter a option: " option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
    read -p "Wrong option, Enter again: " option
done
 
case "$option" in
cpu)
    lscpu
    ;;
mem)
    cat /proc/meminfo
    ;;
disk)
    fdisk -l
    ;;
*)
    echo "Quit..."
    exit 0
    ;;
esac

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

7、写一个脚本

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

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

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

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

#!/bin/bash
#
function getinfo {
 
if id $op &> /dev/null;then
    grep -E '^('$op')\>' /etc/passwd | cut -d: -f1,3,7;read -p "Enter a username or quit:" op
else 
    read -p  "wrong argument,plsease enter a username or quit:" op
fi
}
 
read -p "Enter a username or quit:" op
while [[ $op != "quit" ]];do
    getinfo $op
done

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

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

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

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

#!/bin/bash
read -p "Enter a commond:" cmd
path() {
     whereis $cmd | cut -d' ' -f2
}
ldd $(path $1)| sed '1d'| grep -Eo "/.*[0-9] " > path.txt
cp $(path $1) /mnt/sysroot$(path $1)
while read line;do
    cp $line /mnt/sysroot$line
done < ./path.txt

原创文章,作者:Net19_口香糖,如若转载,请注明出处:http://www.178linux.com/23910

(0)
Net19_口香糖Net19_口香糖
上一篇 2016-07-16
下一篇 2016-07-16

相关推荐

  • 【26期】Linux第四周学习小总结

        第四周了,转眼就学习有关Linux的知识一月了,从开始的懵懵懂懂,到现在的懵懵懂懂,不变的是无边无际的知识,改变的是一小片迷雾被我们渐渐拨开了一角,学习的枯燥和充实,陪我们走完这安稳的最后学习时光。     今天分享的是一些我们本周学习的变量方面的东西,那么,什么是变量呢?变量来源于数学,是计算机语言中能储存计…

    2017-08-05
  • 脚本

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;     #!/bin/bash     #     sum=0 &n…

    Linux干货 2016-12-23
  • 数据库的备份和恢复

    数据库的备份和恢复 一 (理论篇)、数据库备份与恢复基础 1、数据库的备份与恢复 备份:存储的数据副本; 原始数据:持续改变; 恢复:把副本应用到线上系统; 仅能恢复至备份操作时刻的数据状态; 时间点恢复: binary logs; 2、为什么备份? 灾难恢复: 硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、…&nb…

    2016-11-22
  • Linux下vim编辑器的使用

    vim编辑器 概括 vim,是vi的升级版本,它不仅兼容vi的所有指令,还有一些新的特性在里面。 使用vi和vim的三种主要模式 vim在工作过程当中有三种模式,编辑模式(命令模式)、输入模式、末行模式     1、编辑模式:也叫命令模式,键盘操作常被理解为编辑命令;     2…

    Linux干货 2016-08-10
  • 登录后经常出现You have new mail in /var/spool/mail/root的提示

    安装完LINUX后经常使用终端远程登录,登录后经常出现You have new mail in /var/spool/mail/root的提示,很是烦人。 这东西到底是做什么用的呢?经过查询才知道这是LINUX的邮年提示功能。LINUX会定时查看LINUX各种状态做汇总,每经过一段时间会把汇总的信息发送的root的邮箱里,以供有需之时查看。 那要怎么去掉这麻…

    系统运维 2017-08-05
  • 一、循环语句:for, while, until 循环执行:将某代码段重复运行多次重复运行多少次:循环次数事先已知循环次数事先未知有进入条件和退出条件 1.for……do……done for 变量 in 列表 ; do    循环体done 执行机制:依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中…

    Linux干货 2016-08-19

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-17 20:24

    写的很好,排版也很漂亮,加油,第六题的lscpu是什么意思那?