linux运维实战练习-2016年1月19日-2月3日课程作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux运维实战练习-2016年1月19日-2月3日课程作业相关的知识,希望对你有一定的参考价值。

1、描述centos6系统开机启动流程;
   a,POST:开机加电自检,ROM,Bios 
   b,Boot seuquence:按次序查找各引导设备,第一个引导程序的设备即为本次启动用到的设备
   c,Boot loader: 引导加载器,程序 MBR主引导记录,GRUB
     Boot loader 功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中特定空间,解压展开并把系统控制权移交给内核。
    d,kernel:自身初始化,
        探测可识别到的所有硬件设备
        加载硬件驱动程序(有可能借助于ram disk加载驱动)
        以只读方式挂载根文件件系统
        运行用户空间的第一个应用程序/sbin/init
2、描述/etc/rc.d/sysinit脚本功能;
    a,设备主机
    b,设置欢迎信息
    c,激活udev和selinux
    d,挂载/etc/fstab文件中定义的文件系统
    e,检测根文件并以读写方式重新挂载根文件系统
    f,设置系统时钟
    g,激活swap设备
    h,根据/etc/sysctl.conf文件设置内核参数
    i,激活lvm及software raid设备
    j,加载额外设备的驱动程序
    k,清理操作
3、总结文本处理工具sed及awk的用法;
sed:编辑器
sed: Stream EDitor,行编辑器:
用法:
    sed [option]... ‘script‘  inputfile...
    script:
            ‘地址命令’
常用选项
    -n: 不输出模式中的内容到屏幕                           
    -e: 多点编辑
    -f: /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本
    -r: 支持使用扩展正则表达式
    -i: 原处编辑
地址定界
(1)不给地址:对全文进行处理
(2)单地址:
        #:指定的行
        /patern/:被此处模式所能够匹配到的每一行
(3)     #,#
        #,+#
        /pat1/,/pat2/
        #,/pat1/
(4)~步进
1~2
2~2
编辑命令
    d: 删除
            # sed ‘1,4d‘ /etc/fstab 
    p: 显示模式空间中的内容
            # sed -n ‘/^UUID/p‘ /etc/fstab 
    a \‘text‘  在行后面追加文本:支持使用\n实现多行追加
           # sed -n ‘/^UUID/p‘ /etc/fstab 
    i \‘text‘: 在行前面追加文本:支持使用\n实现多行插入
            # sed ‘/^UUID/i \#hello sde.\nwelcom‘ /etc/fstab 
    c \‘text‘ 替换行为单行或多行文本
            # sed ‘/^UUID/c \#hello sde.\nwelcom‘ /etc/fstab
    w /path/to/somefile:保存模式空间匹配到的行至指定文件中
            #sed ‘/^UUID/w /tmp/fstab.txt‘ /etc/fstab
    r:/path/to/somefile:读到指定文件的文本流至械空间中匹配的行的行后
           # sed ‘6r /etc/issue‘ /etc/fstab
    =: 为模式空间中的行打印行号
            # sed ‘/^UUID/=‘ /etc/fstab 
    !:取反条件
            # sed ‘/^UUID/!d‘ /etc/fstab
    s///:查找替换,支持其它分隔符,[email protected]@@,S###
            替换标记:
                        g:行内全局替换
                                 # sed ‘[email protected]^[email protected]@‘ /etc/fstab    
                         p:显示替换成功的行   
                                  # sed -n ‘[email protected]@&[email protected]‘ /etc/passwd 
                        w:  /PATH/TO/SOMEFILE:将替换成功的结果保存到指定文件中                           
             # sed ‘[email protected]@&[email protected]‘ /etc/passwd
高级编辑命令
        h: 把模式空间中的内容覆盖到保持空间中
        H:把模式空间中的内容追加至保持空间中
        g: 从保持空间取出数据覆盖到模式空间
        G:从保持空间取出内容追加到模式空间
        x:把模式空间中的内容与保持空间中的内容进行互换
        n:读取匹配到的行的下一行到模式空间
        N:追加匹配到的行的下一行到模式空间
        d:删除模式空间中的行
        D:删除多行模式空间中的所有行        
# vim test.txt
显示偶数行
# sed -n ‘n;p‘ test.txt 
2
4
6
逆向显示文件内容
# sed ‘1!G;h;$!d‘ test.txt 
6
5
4
3
2
1
显示文件后两行
        # sed ‘$!n;$!D‘ /etc/fstab 
取文件最后一行
# sed ‘$!n;$!D‘ /etc/fstab 
在每行后面多加空白行
# sed ‘G‘ test.txt 
1
2
全部显示空白行
# sed ‘g‘ test.txt 
# sed ‘/^$/d;G‘ test.txt
显示奇数行
# sed ‘n;d‘ test.txt 
逆向显示文件每一行
# sed ‘1!G;h;$p‘ test.txt 
显示偶数行
# sed -n ‘2~2p‘ test.txt 
显示奇数行
# sed -n ‘2~2p‘ test.txt 
wak
wak:报告生成器,格式化文本输出
AWK: Aho, Weiberger,Kernighan ---New AWK , Nawk
GNU awk, gawk          
gawk - pattern scanning and processing language
     
基本用法 : gawk [options] ‘program‘ FILE...
                    program: PATTERN{ACTION STATEMENT}
                            语句之间用分号分隔
                        print, printf                         
                       
选项:
            -F:指明输入时用到的字段分隔符
            -v: var=value:自定义变量
  
 1,print
            print item1,item2,...       
        要点 :
        (1)逗号分隔符
             # tail -3 /etc/fstab | awk ‘{print $2,$4}‘
        (2)输出的各item可以字符串,也可以是数值,当前记录的字段,变量或awk的表达式
             # tail -3 /etc/fstab | awk ‘{print "hello" $2,$4,6}‘
        (3)如果省略item,相当于print $0;
                # tail -3 /etc/fstab | awk ‘{print }‘
2,变量
        内建变量
            FS:input field seperator,默认为空白字符
                 # awk -v FS=‘:‘ ‘{print $1}‘ /etc/passwd
            OFS:output  field seperator,默认为空白字符
                   # awk -v FS=‘:‘ -v OFS=‘:‘ ‘{print $1,$3,$7}‘ /etc/passwd
            RS:input record seperator:输入时的换行符
                    # awk -v RS=‘‘ ‘{print}‘ /etc/passwd
            ORS: output record seperator:输入时的换行符
                    # awk -v RS=‘‘ -v ORS=‘#‘ ‘{print}‘ /etc/passwd
            NF: number of field,字段数量
                    # awk ‘{print NF}‘ /etc/fstab 
                {print NF}, {print $NF}
            NR:number of record ,行数
                    # awk ‘{print NR}‘ /etc/fstab 
            FNR:各文件分别计数:行数
                   # awk ‘{print FNR}‘ /etc/fstab /etc/issue 
            FILENAME: 当前文件名
                   # awk ‘{print FILENAME}‘ /etc/fstab /etc/issue 
            ARGC:命令参数的个数
                    # awk ‘BEGIN{print ARGC}‘ /etc/fstab /etc/issue
            ARGV:数组,保存的是命令行中所给定的各参数
                    # awk ‘BEGIN{print ARGV[0]}‘ /etc/fstab /etc/issue
 自定义变量
     (1)  -v var=value
                变量名区分字符大小写
       (2)在program中直接定义
                 # awk -v test=‘hello gawk‘ ‘BEGIN{print test}‘ /etc/fstab
                 # awk ‘BEGIN{test="hello gawk";print test}‘
3,printf命令
        格式化输出:printf FORMAT, item1,item2,...
           (1) FORMAT是必须给出
            (2)不会自动换行,需要显式给出换行控制符,\n
            (3)FORMAT中需要分别为后面的每个item指定一个格式化符号
                    格式符:
                            %c:显示字符的ASCII码
                            %d,%i:显示十进制整数 
                            %e,%E:科学计数法数值显示
                            %f:显示为浮点数
                            %g,%G:以科学计数法或浮点形式显示数值
                            %s:显示字符串
                            %u:无符号整数
                            %%:显示%自身
                # awk -F: ‘{printf "Username:%s\n",$1}‘ /etc/passwd
                # awk -F: ‘{printf "Username:%s,UID:%d\n",$1,$3}‘ /etc/passwd
            修饰符:
                    #[.#]:第一个数字控制显示的宽度,第二个#表示小数点后的精度
                    %3,1f
                        # awk -F: ‘{printf "Username:%15s,UID:%d\n",$1,$3}‘ /etc/passwd
                    -:左对齐
                        # awk -F: ‘{printf "Username:%-15s,UID:%d\n",$1,$3}‘ /etc/passwd
                    +:显示数值的符号
4,操作符
            算数操作符
                x+y ,x-y ,x*y ,x/y ,x^y, x%y,
                -x
                +x:转换为数值
                字符串操作符:没有符号的操作符,字符串连接
                赋值操作符
                      =, +=, -=, *=, /=, %=,^=,
                       ++, --,
                比较操作符
                        >, >=, < , <=, !=, ==
                模式匹配符:
                    ~:是否匹配
                    !~:是否不匹配
                    
               逻辑操作符
                        &&  与
                        ||    或
                        !    非
               函数调用:
                        function_name(argu1,argu2,...)
                 条件表达式
                        selector?if-ture-exprssion: if-false-expression
  # awk -F: ‘{$3>=1000?usertype="Common user":usertype="Sysadmin or Sysuser";printf "%15s:%-s\n",$1,usertype}‘ /etc/passwd
5, PATTERN
        (1)empty:空模式,匹配每一行
        (2)/regular expression/:仅处理能够被此处的模式匹配到的行:
                #awk ‘/^UUID/{print $1}‘ /etc/fstab
                # awk ‘!/^UUID/{print $1}‘ /etc/fstab 
        (3)relational expression:关系表达式:结果有“真”“假”:结果为“真”才会被处理
                        真:结果为非0值,非空字符串
                    # awk -F: ‘$3>=1000{print $1,$3}‘ /etc/passwd
                    # awk -F: ‘$3<1000{print $1,$3}‘ /etc/passwd
                # awk -F: ‘$NF=="/bin/bash"{print $1,$NF}‘ /etc/passwd
            (4)line ranges:行范围
                        startlin,endline /pat1/,/pat2/                 
                注意:不支持直接给出数字的格式 
                            # awk -F: ‘(NR>=2&&NR<=10){print $1}‘ /etc/passwd
                (5)BIGIN/END模式
                            BIGIN{}:仅在开始处理文件中的文本之前执行一次
                                # awk -F: ‘BEGIN{print"  username  uid  \n------------"}{print $1,$3}‘ /etc/passwd
                            END{}: 仅在文本处理完成之后执行一次
                        # awk -F: ‘BEGIN{print"  username  uid  \n------------"}{print $1,$3}END{print "++++++++++++++++++\n end  "}‘ /etc/passwd
# awk -F: ‘{print"  username  uid  \n------------";print $1,$3}‘ /etc/passwd
6,常用的action
        (1) Expressions
        (2)Control statements: if while...
        (3)Compound statements:组合语句
        (4)input statements
        (5)output statements
7,控制语句
        if (condition) {statments}
        if(condition) {statments} else {statments}
        while  (condition) {statments}
        do  {statments} while  (condition)
        for(expr1,expr2,expr3,) {statments}
        continue
        delete array[index]
        delete array
        exit
        { statments }
7.1 if-else
        语法: if (condition) {statments} [else statement]
                # awk -F: ‘{if($3>=1000)print $1,$3}‘ /etc/passwd
else 语句用法 
                # awk -F: ‘{if($3>=1000) {printf "Common user: %s\n",$1} else {printf "root or Sysuser: %s\n",$1}}‘ /etc/passwd
                # awk -F: ‘{if($NF=="/bin/bash") print $1}‘ /etc/passwd
                # awk ‘{if(NF>5) print $0}‘ /etc/fstab 
                
                # df -h | awk -F[%] ‘/^\/dev/{print $1}‘ | awk ‘{if($NF>=20) print $1}‘
使用场景: 对awk取得的整行或某个字段做条件判断
7.2 while 循环
        语法:while  (condition) {statments}
                条件“真”,进入循环,条件为“假” 退出循环
        使用场景:对一行内多个字段逐一类似处理时使用:对数组中的各元素逐一处理时使用
                    # awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i);i++}}‘ /etc/grub2.cfg
                    # awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=7) {print $i,length($i)};i++}}‘ /etc/grub2.cfg 
                
73 do-while循环
            语法:do statement while (condition)
                意义:到少执行一次循环体
7.4 for 循环
        语法: for(expr1,expr2,expr3,) {statments}
                for(variable assignment; condition;iteration process) {for-body}        # awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}‘ /etc/grub2.cfg
    特殊用法
                能够遍历数组中的元素
                语法: for (var in array)  {for-body}
7.5 swith 语句
        语法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/:statement;...
default: statement}
7.6  break 和continue
        break [n]
        continue
7.7 next
        提前结束对本行的处理而直接进入下一行:
                    # awk -F: ‘{if($3%2!=0) next; print $1,$3}‘ /etc/passwd
8 array 数组
        关联数组:array [index-expression]
            index-expression
                (1)可使用任意字符串,字符串要使用双引号
                (2)如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串”
                若要判断数组中是否存在某元素,要wget"index in array"格式进行
                    weekday[mon]="Monday"
                      # awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}‘
                若要遍历数组中的每个元素,要使用for循环
                            for(var in array) {for-body}
                      # awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) {print weekdays[i]}}‘
                              注意:var会遍历array的每个索引
                           state["LISTEN"]++
                            state["ESTABLISHED"]++
                      # netstat -tan | awk ‘/^tcp\>/{state[$NF]++}END{for(i in state) {print i,state[i]}}‘      
                      # awk ‘{ip[$1]++}END{for(i in ip) {print i,ip[i]}}‘ /var/log/httpd/access_log
练习1:统计/etc/fstab文件中每个文件系统类型出现 的次数
                # awk ‘/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}‘ /etc/fstab 
练习2:统计指定文件中每个单词出现的次数
                # awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}‘ /etc/fstab
9,函数
       9.1 内置函数
                    rand():返回0和1之间一个随机数
                    字符串处理:
                        length([s]):返回指定字条串的长度
                        sub(r,s,[t]):以r表示的模式来查找t所表示的字条串中的匹配的内容,并将其第一次出现替换为s所表示的内容
                       gsub(r,s,[t]):以r表示的模式来查找t所表示的字条串中的匹配的内容,并将其所有出现均替换为s所表示的内容
                        split(r,s,[t]):以r为分隔符切割字符s,并将切割后的结果保存到a所表示的数组中
                            # netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}‘
 4、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2中方法)
    #!/bin/bash
    declare -a rand
    declare -i max=0
    for i in {0..9}; do
        rand[$i]=$RANDOM
        [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
    done
    echo "Max: $max"
 5、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中;
 #crontab -e     
        5 1 * * 2 /tmp/zuoye/get_username.sh >> /tmp/zuoye/get_username.log
6、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;
#!/bin/bashif ls $1 &> /dev/null ;thenstat $1|head -2else  mkdir -p $1fi
 7、写一个脚本,打印9X9乘法表;
  1,
  #!/bin/bash
    declare -i j=1
    declare -i i=1
    until [ $j -gt 9 ]; do
        until [ $i -gt $j ]; do    
echo -n -e "${i}X${j}=$[$i*$j]\t"    
let i++    
done 
echo
let i=1
let j++
    done 
2,
    #!/bin/bash
    for((j=1;j<=9;j++)); do
            for((i=1;i<=j;i++))do
                echo -e -n "${i}X${j}=$[$i*$j]\t"
        done
        echo
    done
  8、描述dns的工作流程,以及完整搭建一套dns主从服务器,相关域名和ip可自行设定。   
DNS Domain Name Service 协议 (c/s, 53/udp, 53/tcp):应用层协议:
BIND: Bekerley  Internat Name Domain,  ISC (www.isc.org)
TCP :面向连接的协议
UDP:User Datagram Protocol 无连接协议 
          本地名称解析配置文件: hosts
                /etc/hosts
                %WINDOWS%system32/drives/etc/hosts
        Top Level Domain: tld
                    com,edu,mil, gov, net, org, int
                    三类:组织域,国定域(,cn, .iq, .hk, .tw)   反向域 
    DNS查询类型:
            递归查询
            迭代查询
    名称服务器:域内负责解析本域内的名称的主机
            根服务器:13组服务器
    解析类型
            Name--> IP
            IP--->Name
            注意:正反向解析是两个不同的名称空间,是两棵不同的
    DNS服务器类型
            主DNS服务器
            辅助DNS服务器
            缓存DNS服务器
            转发器
                主DNS服务器:维护所负责解析的域内解析库的服务器:解析库由管理员维护
                从DNS服务器:从主DNS服务器或其它的从DNS服务那里“复制”(区域传递)一份解析
                            序列号:解析库的版本号 ,前提:主服务器解析库内容发生变化,其序列递增
                            刷新时间间隔 : 从服务器从主服务器请求同步解析的时间间隔
                            重试时长间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔
                            过期时长: 从服务器使终联系不到主服务器时,多久后放弃从服务器角度,停止提供服务
                            "通知"机制
              区域传递:
                             全量传送:传送整个解析库           
                              增量传递:传送解析库变化的那部分内容
            DNS:
                    Domain:    
                        正向:FQDN -->IP
                        反射:IP --> FQDN
                                    各需要一个解析库来负责本地域名的正向和反向解析 
                                    正向区域
                                    反向区域
                        FQDN: Full Qulified Domain Name:完全合格域名
                   一次完整的查询请求经过的流程
                             Client --> hosts文件 -->  DNS Server
                                     Local Cache -->DNS Server(recursion) --> Server Cache --> Iteration(迭代) -->
                            解析答案
                                    肯定答案:
                                    否定答案:请求的条目不存在等原因导致无法返回结果
                                    权威答案
                                    非权威答案
         资源记录:Resource Record,RR                      
                   有记录类型:A,PTR, SOA, NS, CNAME, MX  AAAA
                    SOA:Start Of Authority: 起始授权记录,一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录
                    A:internet Address: 作用: FQDN--IP
                    AAAA: FQDN--IPV6    
                    PTR:PoinTeR:指针 IP -- FQDN
                    NS:Name Server: 专用于标明当前区域的DNS服务器
                    CNAME:Canonical Name:别名记录
                    MX:Mail eXchanger: 邮件交换器
资源记录定义的格式:
                    语法: name [TTL]    IN     rr_type     value
                    注意:
                            (1)TTL可从全局继承
                            (2)@可用于引用 当前区域的名字
                             (3)同一个名字可以通过多条记录定义多个不同的值,些时DNS服务器会以轮询方式响应
                            (4)同一个值 也可以有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义:此仅表示通过多个不同的名字可以找到同一个主机
                    SOA :
                            name: 当前区域的名字,例如“magedu.com.”
                            value: 有多部分组成
                                        (1)当前区域的主DNS服务器的FQDN, 也可以使用当前区域的名字:@
                                        (2)录前管理员的邮箱地址:介地址中不能使用@符号,一般用.替换,例如:linux.magedu.com
                                        (3)(主从服务协调属性的定义以及否定的答案的统一的TTL)
                            例如:
                                    magedu.com.    86400 IN  SOA  ns.magedu.com. nsadmin.magedu.com.    (
                                                               2016011901    ;序列号
                                                                2H                  ;刷新时间
                                                                10M                ;重试时间
                                                                1W                  ;过期时间 
                                                                1D                   ;否定答案的TTL值
                                )
                    
          NS:
                            name: 当前区域的名字
                            value:当前区域的某DNS服务器的名字,例如:ms.magedu.com.:
                                        注意: 一个区域可以有多个NS记录
                                    例如:
                                            magedu.com.     IN     NS   ns1.magedu.com.
                                             magedu.com.     IN     NS   ns2.magedu.com.
                                            注意:
                                                (1)相邻的两个资源记录的name相同时,后续的可省略
                                                (2) 对NS记录而言,任何一个ns记录后面的服务器名字,都 应该在后续有一个A记录
               MX:                            
                              name: 当前区域的名字
                              value:当前区域的某邮件服务器(smtp服务器)的主机名
                                        一个区域内,MX记录可有多个,但每个记录的value之前应该有一个数字(0-99),表示 此服务器的优先级,数据越小侁先级越高
                            例如:
                                magedu.com.         IN        MX         10            mx1.magedu.com.
                                                                IN        MX         10            mx2.magedu.com.
    
                            注意:对MX记录而言,任何一个MX记录后面的服务器名字,都 应该在后续有一个A记录
                A:
                            name: 某主机的FQDN,例如: www.magedu.com.
                            value:主机名对应主机的IP地址
                            例如:
                                    www.magedu.com.            IN         A            1.1.1.1
                                    www.magedu.com.            IN         A            1.1.1.2
                                    mx1.magedu.com.             IN         A            1.1.1.3
                                    mx2.magedu.com.             IN         A            1.1.1.3
                                    注意:
                                        (1)*.magedu.com      IN         A            1.1.1.4
                                                   magedu.com      IN         A            1.1.1.4
                                         避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
                    AAAA :                             &nbs

以上是关于linux运维实战练习-2016年1月19日-2月3日课程作业的主要内容,如果未能解决你的问题,请参考以下文章

linux运维实战练习-2016年1月19日-2月3日课程作业

linux运维实战练习-2016年1月19日-2月3日课程作业

linux运维实战练习-2016年1月19日-2月3日课程作业

linux运维实战练习-2016年3月4日-3月19日课程作业

linux运维实战练习-2016年3月4日-3月19日课程作业

linux运维实战练习-2016年3月4日-3月19日课程作业