马哥教育网络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 22:26
下一篇 2016-07-16 22:26

相关推荐

  • 网络管理基础

    IP地址由网络ID和主机ID组成 A类:0 000 0000 – 0 111 1111:1-127 网络数:126 每个网络中的主机数2^ 24-2=16777214 B类:10 00 0000 – 10 11 1111:128-191 网络数:2^ 14=16384 每个网络中的主机数:2^ 16–2=65534 C类:100 0 …

    2018-04-01
  • 马哥教育网络班22期第一周课程练习1-3天

    1.描述计算机组成及其功能 CPU:  运算器  控制器  寄存器  缓存 存储器:  RAM(随机访问存储器)  I/O设备:               i:下指令,提供数据 如:键鼠     &…

    Linux干货 2016-08-15
  • Linux 第六天: (08月03日) Linux权限管理

    Linux 第六天: (08月03日) Linux权限管理         chown USER:GROUP FILE 变更文件或目录所属主chown -R 递归chown –reference=<> 参考 chgrp GROUP DIR(or FILE) 变更文件或目录所属组   &…

    Linux干货 2016-08-08
  • 一切皆文件——Linux基本命令(1)

    1.一切皆文件 在dev下有很多硬件的文件 sr0是光驱 console是终端,也划为一个文件   2.查看终端   3.两个终端发信 首先右键选择Clone Session,新客隆了一个centos6 分别使用tty命令查看终端名。 分别为0和1 通过命令:echo “想发送的信息“ > 终端名 即可发送 在0中输入命令: 在1中…

    Linux干货 2017-07-13
  • Linux基础操作-week5

    1、显示当前系统上root、fedora或user1用户的默认shell; 方式一: # whoami root # echo $SHELL /bin/bash 方式二: #grep user1 /etc/passwd|awk -F “:” ‘{print $7}’ /bin/bash 2、找出/etc/rc.…

    Linux干货 2016-11-27
  • bash脚本编程实例

    bash脚本编程实例 1.写一个脚本,判断当前系统上所有用户的shell是否为可登录的shell(即用户的shell不是/sbin/nologin),分别统计这两类用户的个数(通过字符串比较来实现) #!/bin/bash cat /etc/passwd|awk -F: ‘BEGIN{nologin=0;login=0}{if($NF==”/sbin/nol…

    Linux干货 2017-08-28

评论列表(1条)

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

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