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

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

POST(Power On Self Test):

检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。

加载BIOS(Basic Input and Output System):

根据在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器(硬盘、光盘、U盘等)。在平时的启动过程中,大多为硬盘启动,基于此,BIOS会读取硬盘的第0磁道的第1扇区(MBR)的内容来引导启动。

BOOT Sequence:

按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备

MBR(Master Boot Record):

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

三部分组成,分别是主引导程序(Bootloader)、硬盘分区表DPT(Disk Partition Table)和magic number。

Bootloader:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。

在Linux中常用的主引导程序有LILO(LInux LOader)和GRUB(GRand Uniform Bootloader),此处以GRUB引导为例。

启动引导程序GRUB:

stage1:stage1的代码直接存在于MBR,是后续引导的入口,无识别文件系统的能力。
stage1.5: MBR之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统,具有识别文件系统的能力。
stage2:加载磁盘分区(/boot/grub/)

启动内核:

当stage2被载入内存执行时,首先会解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核。而内核会立即作自身初始化。
  • 探测可识别的所有硬件设备

  • 加载硬件驱动程序(可能会借助于ramdisk加载驱动)

  • 以只读方式挂载rootfs

  • 运行用户空间的第一个应用程序:/sbin/init

运行init程序

  • CentOS 5:SysV

  • CentOS 6:Upstart

  • CentOS 7:Systemd

设置默认运行级别

  • CentOS 5:/etc/inittab

  • CentOS 6:/etc/inittab,/etc/init/*.conf

  • CentOS 7:default.target–>/usr/lib/systemd/system/*.target

运行系统初始脚本,完成系统初始化

/etc/rc.d/rc.sysinit

启动内核模块

/etc/modules.conf /etc/modules.d/*

关闭对应级别下应关闭的服务,启动需要启动的服务

/etc/rc.d/rc#.d/*

执行自定义引导程序

/etc/rc.d/rc.local

设置登陆终端

/sbin/mingetty

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

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

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

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

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

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

# mkfs -t ext4 /dev/sdb1 && mkfs -t ext4 /dev/sdb2
# mount /dev/sdb1 /media/boot
# grub-install --root-directory=/media /dev/sdb
# cp /boot/vmlinuz-2.6.32-358.el6.i686 /media/boot/vmlinuz
# cp /boot/initramfs-2.6.32-358.el6.i686.img /media/boot/initrmfs.img
# vim /media/boot/grub/grub.conf
default=0
timeout=5
title centos (express)
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2
    initrd /initrmfs.img
# mount /dev/sdb2 /mnt/sysroot
# sh cpcom.sh 
Enter a command:bash
Enter a command:ls
Enter a command:cat
Enter a command:quit
Quit
新建虚拟机,以新建虚拟磁盘为引导,可以正常启动!

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

可使用system-config-kickstart图形化工具可视化操作完成生成ks文件
制作镜像:# 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 myiso/

4、写一个脚本

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

start:输出“starting 脚本名 finished”

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

#!/bin/bash
read -p "Please enter start,stop,restart or status:" option
case $option in 
start) 
    echo "Starting $0 finished"
    ;;
stop)
    echo "Stopped $0 finished"
    ;;
status)
    echo "The status of $0"
    ;;
restart)
    echo "Restart $0"
    ;;
*)
    echo "Wrong option" && exit 1
    ;;
esac

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

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

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

#!/bin/bash
read -p "Please enter a user:" user
while true; do
    if who | grep "^$user" &> /dev/null; then
        break
    fi
    sleep 3 && echo "$user not log."
done
echo "$user logged."

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

cpu) display CPU info

men) dispaly memory info

disk) display disk info

quit) quit

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

#!/bin/bash
cat << EOF
cpu) show cpu info;
mem) show memory info;
disk) show disk info;
quit) Quit
=======================
EOF
read -p "Please enter an 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)
    fdiskc -l
    ;;
quit)
    echo "Quit!" && exit 0
    ;;
esac

7、写一个脚本

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

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

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

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

#!/bin/bash
userinfo() {
    uid=`id -u $user`
    shell=`finger root -l | grep -o 'Shell.*' | cut -d' ' -f2`
    id $user &> /dev/null
    if [ $? -ne 0 ]; then
     echo "No such user!" && exit 1
    else 
    echo "$user UID :$uid"
    echo "$user SHELL:$shell"
    fi
}
cat << EOF
You could enter a user or string of "quit":
a user:show the uid and shell;
quit:quit the script.
===========================================
EOF
while true; do
read -p "Please enter something:" option
    if [[ $option == "quit" ]]; then 
        echo "Quit!" && exit 0
    else
        user=$option
    fi
    userinfo $user
done

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

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

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

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

#!/bin/bash
options() {
    for i in $*; do
        dirname=`dirname $i`
    [ -d /mnt/sysroot$dirname ] || mkdir -p /mnt/sysroot$dirname
    [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dirname/
    done
}
while true; do
    read -p "Enter a command:" pidname
    [[ "$pidname" == "quit" ]] && echo "Quit" && exit 0
    bash=`which --skip-alias $pidname`
    if [[ -x $bash ]]; then
        options `/usr/bin/ldd $bash | grep -o "/.*[[:space:]]\{1,\}"`
    options $bash
    else
    echo "No such command!"
    fi
done

原创文章,作者:Jeason,如若转载,请注明出处:http://www.178linux.com/44521

(0)
上一篇 2016-09-08 18:55
下一篇 2016-09-08 18:56

相关推荐

  • Linux磁盘管理命令

    Linux有着管理各种存储设备的强大能力。Linux把所有磁盘都当作文件管理,从而简化我们对其进行的读写等操作。 IDE接口的硬盘在Linux中命名为:/dev/hd{a|b|c……},比如/dev/hda; 其他硬盘比如SATA接口的硬盘命名为:/dev/sd{a|b|c……},比如/dev/sda。 注:{…

    Linux干货 2015-12-06
  • 正则

    Edit 正则 概述: 正则表达式,Regular Expression,缩写regex、regexp、RE 正则表达式是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索、替换 1970年,Unix之父ken Thompson将正则表达式引入到Unix中文本编辑器ed和grep命令中,由此正则表达式普及开来 1980年后,perl语言对Henry…

    Linux干货 2017-11-06
  • Linux介绍

    Linux简介 Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。…

    Linux干货 2016-10-28
  • 高级文件系统之逻辑卷和btrfs文件系统

    逻辑卷管理器快照 逻辑卷可以实现对分区的动态的扩展,快照可以看成是特殊的逻辑卷,它是在生成快照是存在的逻辑卷的准确拷贝。 快照只有在它们和原来的逻辑卷不同时才会消耗空间:     在生成快照时会分配给他一定的空间,但只有在原来的逻辑卷或者快照有所改变时才会使用这些空间     当…

    Linux干货 2016-09-02
  • 磁盘管理、文件系统、挂载

    磁盘管理 一磁盘分区 磁盘分区有两种方式:MBR和GPT MBR:1)按照柱面进行分区;分区不超过2T 2)关于0磁道0扇区的前512bytes;其中的446bytes为boot loader;中间的64bytes装有分区表;2bytes为55AA 3)可分4个分区;3个主分区+1扩展(N个逻辑分区)扩展分区最多一个。 GPT分区:1)GUID patiti…

    Linux干货 2016-08-29
  • ☞{ nfs共享mysql数据;nfs共享web资源 }

    ☞{ nfs共享mysql数据;nfs共享web资源 } MySQL基于NFS共享数据 测试环境 node1安装nfs服务 配置共享目录,设定用户权限 开启nfs服务,添加iptables规则 node2安装mysql-server(yum 安装) node2挂载nfs共享至/mydata目录,拷贝mysql数据 修改mysql-server数据目录 nod…

    Linux干货 2016-10-20