马哥教育网络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

相关推荐

  • (8.15-8.21)第2周博客作业

    1.linux文件管理命令 cat 功能:有从磁盘创建文件的功能(但不具备编辑功能),但主要功能还是2个或者以上文件的合并。 常配合使用参数: -n 或–number 由1 开始对所有输出的行数编号。-b 或–number-nonblank 和-n 相似,只不过对于空白行不编号。 使用方法: Cat –n diannaob1>d…

    Linux干货 2016-08-22
  • bash特性

    一、命令历史     概念:shell进程能够将之前执行过的命令保存记录下来     存储位置:         1、命令历史的文件             使用以下环境变量查看相关参数:     &…

    Linux干货 2016-09-19
  • Linux开学一周的学习心得

    Linux,这个名字第一次听到是通过张超老师给我讲解,因为我在学校学的是金融数学,平时对这方面没有太多接触。当时对Linux就知道是个系统,随后在网上搜了搜,了解也不太多。 直到今天已经来马哥教育一星期了,刚入学的这一星期上课,都是一些基本的命令,感觉学着还蛮有意思,教学的安排也非常合理,我们大家学一天还能自己动手操作一天,既能专心听课,又能把学到的知识巩固…

    2017-07-15
  • Linux基础知识总结

    Linux基础知识 计算机系统 计算机硬件组成 1.控制器:计算机系统的控制中心,协调各部分工作,保证计算机按照预先规定的目标和步骤进行操作及处理。 2.运算器:对数据进行算数运算,逻辑判断以及数据的比较、移位等操作。 3.存储器:存取程序和各种数据信息。  4.输入设备:把信息,如数字、文字、图像等转换为数字形式的“编码”的设备(键盘,扫描仪) …

    2017-05-18
  • 从案例出发——命令总结之find篇

    在这篇文章中你将看到以下内容:1、find命令的格式、语法、及实际应用 2、3个时间戳的意义  3、各种文件类型的解释  4、软硬链接的区别 5、exec和xargs的区别 6、几个逻辑判断符的意义  7、通配符的意义  8、find 命令下时间查找的特殊定义 首先,来看看以下题目:   &nbsp…

    Linux干货 2016-03-25
  • 文件通配符与命令行扩展

    * 匹配零个或多个字符 ? 匹配任何单个字符 ~ 当前用户家目录 ~mage 用户mage家目录 ~+ 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z] 字母 [A-Z]字母          [a-Z] 会以aAbBcC…小大小大列出,特别要注意 [wang] 匹配列表中的任何的一个字符 [^wang]匹配列表中的所有字…

    2017-11-12

评论列表(1条)

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

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