1、描述centos6系统开机启动流程;

    1)加载 BIOS 的硬件信息与进行自我测试,并依据配置取得第一个可启动的装置;

    2)读取并运行第一个启动装置内 MBR 的 boot Loader ( grub, spfdisk 等程序);

    3)依据 boot loader 的配置加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序;

    4)在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 等级;

    5)init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行的作业环境 (如网络、时区等);

    6)init 运行 run-level 下的各个服务使之启动 (script 方式);

    7)init 运行 /etc/rc.d/rc.local 文件;

    8)init 运行终端机模拟程序 mingetty 来启动 login 程序,最后就等待使用者登陆;


2、描述/etc/rc.d/rc.sysinit脚本功能;

    1)取得网络环境与主机信息:

     读取网络配置档 /etc/sysconfig/network ,取得主机名称与默认网关等网络环境。 

    2)测试与挂载内存装置 /proc 及 U盘 装置 /sys:

     除挂载内存装置 /proc 之外,还会主动侦测系统上是否具有 usb 的装置, 若有则会主动加载 usb的驱动程序,并且尝试挂载 usb 的文件系统。 

    3)决定是否启动 SELinux :

    4)启动系统的随机数产生器

    5)配置终端字体: 

    6)配置显示於启动过程中的欢迎信息; 

    7)配置系统时间 (clock) 与时区配置:需读入 /etc/sysconfig/clock 配置值 

    8)周边设备的侦测与 Plug and Play (PnP) 参数的测试:

     根据核心在启动时侦测的结果 (/proc/sys/kernel/modprobe ) 开始进行 ide / scsi / 网络 / 音效 等周边设备的侦测,以及利用以加载的核心模块进行 PnP 装置的参数测试。 

    9)使用者自定义模块的加载

     使用者可以在 /etc/sysconfig/modules/*.modules 加入自定义的模块,则此时会被加载到系统当中 

    10)加载核心的相关配置:

     系统会主动去读取 /etc/sysctl.conf 这个文件的配置值。 

    11)配置主机名称与初始化电源管理模块 (ACPI) 

    12)初始化软件磁盘阵列:主要是透过 /etc/mdadm.conf 来配置好的。 

    13)初始化 LVM 的文件系统功能 

    14)以 fsck 检验磁碟文件系统:会进行 filesystem check 

    15)进行磁碟配额 quota 的转换 (非必要): 

    16)重新以可读写模式挂载系统磁碟: 

    17)启动 quota 功能:所以我们不需要自订 quotaon 的动作 

    18)启动系统虚拟随机数产生器 (pseudo-random): 

    19)清除启动过程当中的缓存文件: 

    20)将启动相关资讯加载 /var/log/dmesg 文件中。 

    

3、总结文本处理工具sed及awk的用法;(必须附带示例)

    1)sed

        逐行处理文本并将处理后的文本标准输出,但并不改变原文本内容。

        ①sed使用格式及选项

            [root@a ~]# [OPTION] 'n1,n2]fun' [input-file]

             OPTION

             -n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 

                  的数据一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过

                  sed 特殊处理的那一行(或者动作)才会被列出来。

             -e  :直接在命令列模式上进行 sed 的动作编辑;

             -f  :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 

              sed 动作;

             -r  :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

             -i  :直接修改读取的文件内容,而不是由萤幕输出。

             n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作

                     是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

             fun

            [root@a ~]# cat sed   //被编辑的文件
            1
            2
            3
            4

             a   :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

            [root@a ~]# sed '3ad' sed    //在指定范围后添加字符串
            1
            2
            3
            d
            4


             c   :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

            [root@a ~]# sed '2,3cno' sed  //替换指定范围的行为no
            1
            no
            4

             d   :删除,因为是删除,所以 d 后面通常不接任何字符串;

            [root@a ~]# sed '3d' sed  //删除指定范围的行
            1
            2
            4


             i   :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

            [root@a ~]# sed '3iok' sed  //在第3行前插入ok
            1
            2
            ok
            3
            4

             p   :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~

            [root@a ~]# sed -n '2,3p' sed     //在静默下输出选择的文本
            2
            3

             s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!

                    例如 1,20s/old/new/g 就是啦!

            [root@a ~]# sed '1,4s/3/ok/g' sed   //将3替换成ok
            1
            2
            ok
            4

    2)awk

        逐行处理文本,默认以空格分隔字段并按指定要求标准输出。

        ①awk使用格式

            [hi@a ~]$ awk [options] 'PATTERN { action }' file1 file2, ...

        ②awk之print

            print输出字段,以$n,指定字段;

            [root@a ~]# cat awk
            drwxr-xr-x. 2 hi hi 6 Jan 26 23:18 Desktop
            drwxr-xr-x. 2 hi hi 6 Jan 26 23:18 Documents
            drwxr-xr-x. 2 hi hi 6 Jan 26 23:18 Downloads
            drwxr-xr-x. 2 hi hi 6 Jan 26 23:18 Music
            [root@a ~]# awk '{print $1 $9}' awk 
            drwxr-xr-x.Desktop
            drwxr-xr-x.Documents
            drwxr-xr-x.Downloads
            drwxr-xr-x.Music

        ③awk之内置变量

            BEGIN:从文件的第一行开始;

              END{}:处理文本完成后的动作;

            [root@a ~]# awk '{print $1 "\t"$9}END{print"done"}' awk            
            drwxr-xr-x.     Desktop
            drwxr-xr-x.     Documents
            drwxr-xr-x.     Downloads
            drwxr-xr-x.     Music
            done


            FS 字段分隔符(默认是任何空格)。

            [root@a ~]# cat awk1  
            q.w.e.r.t.y
            a.s.d.f.g.h
            z.x.c.v.b.b
            [root@a ~]# awk 'BEGIN {FS="."}{print $1 $3}' awk1
            qe
            ad
            zc


            NF 表示字段数,在执行过程中对应于当前的字段数。 

            [root@a ~]# awk '{print "line" NR "\t" NF }' awk
            line1   9            
            line2   9
            line3   9
            line4   9


            NR 表示记录数,在执行过程中对应于当前的行号。 

            [root@a ~]# awk '{print "line" NR "\t" $1 $9}' awk
            line1   drwxr-xr-x.Desktop
            line2   drwxr-xr-x.Documents
            line3   drwxr-xr-x.Downloads
            line4   drwxr-xr-x.Music

            OFS 输出字段分隔符(默认值是一个空格)。 

            [root@a ~]# awk 'BEGIN {OFS="--"} {print $1 $9}' awk    
            drwxr-xr-x.--Desktop
            drwxr-xr-x.--Documents
            drwxr-xr-x.--Downloads
            drwxr-xr-x.--Music

            RS 记录分隔符(默认是一个换行符)。

            [root@a ~]# cat awk2            
            a s d.f g h.j k l.
            [root@a ~]# awk 'BEGIN {RS="."}{print}' awk2      
            a s d
            f g h
            j k l

            ORS 输出记录分隔符(默认值是一个换行符)。

            [root@a ~]# awk 'BEGIN{RS="."} {ORS="\n\n"}{print}' awk2              
            a s d
            
            f g h
            
            j k l

        ④awk之逻辑运算符

            [root@a ~]#             awk '{FS=":"} $3 < 3 {print $1 "\t " $3}' /etc/passwd
            root:x:0:0:root:/root:/bin/bash
            bin      1
            daemon   2


4、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2中方法);

            #!/bin/bash            
            ##生成随机数
            int=0
            while(($int<10))
            do
                    arr[$int]=$RANDOM
                    let "int++"
            done
            
            ##冒泡排序法
            #for (( i=0 ; i<${#arr[@]} ; i++ ))
            #do
            #  for (( j=${#arr[@]} - 1 ; j>i ; j-- ))
            #  do
            #    #echo $j
            #    if  [[ ${arr[j]} -lt ${arr[j-1]} ]]
            #    then
            #       t=${arr[j]}
            #       arr[j]=${arr[j-1]}
            #       arr[j-1]=$t
            #    fi
            #  done
            #done
            
            ##快速排序算法
            temp=  
            buff=    
            #交换函数  
            swap()  
            {  
                buff=${arr[$1]}  
                arr[$1]=${arr[$2]}  
                arr[$2]=$buff  
            }  
              
            fun()  
            {  
                i=$(($1-1))  
                j=$1  
                temp=${arr[$2]}  
                if test $1 -ge $2 ;then  
                    return 2   
                fi  
                    while [ $j -le $2 ];do  
                        [ $j -lt $2 ] && while [[ ${arr[$j]} -gt $temp ]] ;do   
                         j=$(($j+1))  
                        done  
                        i=$(($i+1))  
                        swap $i $j    
                        j=$(($j+1))  
                    done  
            }  
            
            ##打印输出排序结果
            
            echo ${arr[*]}

5、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中;

        [root@a ~]# crontab -e 
        5 1 * * 2 /data/get_username.sh >> /tmp/get_username.log
        [root@a ~]# crontab -l
        5 1 * * 2 /data/get_username.sh >> /tmp/get_username.log

6、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;

        #!/bin/bash        
        path="/j"
        
        if [ ! -d "${path}" ];then
        mkdir "${path}"
        fi
        
        if [ -d "$path" ];then
        ls $path
        fi


7、写一个脚本,打印9X9乘法表;

        #!/bin/bash
        for((i=1;${i}<=9;i++))
        do
        
        
            for((j=1;${j}<=${i};j++))
            do
                echo -e "${i}X${j}=$((i*j))\t\c"
            done
            echo -e "\n"
        done

8、描述dns的工作流程,以及完整搭建一套dns主从服务器,相关域名和ip可自行设定。

    DNS工作流程

        接到客户端请求www.a.com,先查询本机DNS缓存,若有则返回结果;若无则查询本机DNS解析库,若有则返回结果;若无则查询DNS root,获取顶级域,然后查询顶级域,获取www.a.com结果返回给客户端。

    用bind搭建DNS主从服务器

[root@a ~]# yum install bind  //主从安装bind
[root@a ~]# vim /etc/named.conf  //主从注释或关闭
 31 #        dnssec-enable yes;  
 32 #        dnssec-validation yes;

//主服务器配置
[root@a named]# vi /etc/named.rfc1912.zones  //添加
zone "a.cn" IN {
        type master;
        file "a.cn.zone"; ## 存储文件名,放在 /var/named ##
        allow-update { none; };
        allow-transfer {10.0.0.2; }; ## 允许辅域名服务器进行传输 ##
};
[root@a named]# vi /var/named/a.cn.zone
$TTL 144444
@       IN SOA     ns.a.cn. m.a.com. (
                     20160127
                     1D
                     1H
                     1W
                     3H )  
        IN NS      ns.a.cn.
ns      IN A       10.0.0.1
www     IN A       10.0.0.1
//从服务器配置
[root@a named]# vi /etc/named.rfc1912.zones //添加
zone "1.16.172.in-addr.arpa" IN {
        type slave; ## 该主机被定义为辅域名服务器 ##
        file "a.cn.zone"; ## 这个文件会被自动创建 ##
        allow-update { none; };
        allow-transfer {10.0.0.1 };  ## 定义主域名服务器 ##
        masters {10.0.0.1; };
};