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///:查找替换,支持其它分隔符,s@@@,S###
            替换标记:
                        g:行内全局替换
                                 # sed 's@^UUID@uuid@' /etc/fstab    
                         p:显示替换成功的行   
                                  # sed -n '[email protected]@&er@p' /etc/passwd 
                        w:  /PATH/TO/SOMEFILE:将替换成功的结果保存到指定文件中                           
             # sed '[email protected]@&er@' /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 :                                    
                                    name: FQDN
                                    value: IPV6
                    PTR:                                
                                    name: IP,有特定格式:把IP地址反过来写,1.1.1.2要写作2.1.1.1,而有特定后缀: in-addr.arpa. 所以完整写法为:2.1.1.1.in-addr.arpa
                                    value: FQDN
                                    例如:
                                        2.1.1.1.in-addr.arpa            IN        PTR         www.magedu.com
                                         简写成
                                              2            IN        PTR         www.magedu.com.
                                        注意: 网络地址及后缀可省略,主机地址依然需要 反着写
                      CNAME:                                        
                                     name: 别名的 FQDN
                                     value: 正式名字名的 FQDN
                                     例如:
                                    web.magedu.com.        IN         CNAME             www.magedu.com.
        子域授权:每个域的名称服务器,都是这通过其上级名称服务器在解析库进行授权
                            类似根域授权tld:
                                 .com.    IN    NS    ns1.com.
                                 .com.    IN    NS    ns2.com.
                                 ns1.com.    IN         A         2.2.2.1
                                 ns2.com.    IN         A         2.2.2.2
                        magedu.com 在.com的名称服务器上,解析库中添加资源记录
                                 magedu.com.        IN    NS     ns1.magedu.com.     
                                 magedu.com.        IN    NS     ns2.magedu.com. 
                                 magedu.com.        IN    NS     ns3.magedu.com. 
                                ns1.magedu.com.     IN    A        3.3.3.1
                                ns2.magedu.com.     IN    A        3.3.3.2
                                ns3.magedu.com.     IN    A        3.3.3.3
                        glue record: 粘合记录
                域名注册        
                        代理商: 万网, 新网;godaddy
                注册完成以后,想自已用专用服务来解析?
                    (1)管理后台,把NS记录指向的服务器名称,和A记录指向的服务器地址
                
                BIND的安装配置
                   dns服务,程序包名bind,程序名:named 
                    程序包
                            bind
                            bind-libs
                            bind-utils
                            bind-chroot:  /var/named/chroot
                            bind:
                                服务脚本: /etc/rc.d/init.d/named
                                主配置文件: /etc/named.conf,  /etc/named.rfc1912.zones, /etc/rndc.key
                                解析库文件: /var/named/zone_name.zone
                                                    注意:(1)一台物理服务器可同时为多个区域提供解析
                                                               (2)必须要有根区域文件 named.ca
                                                               (3)应该有两个(如果包括IPV6的,应该更多)实现localhost和本地回环地址的解析库
                 rndc: remote name domain controller:  默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程,提供辅助性管理功能
                                        953/tcp 端口
                        主配置文件 :
                                全局配置:options{}
                                日志子系统配置:logging{}
                                区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
                                            zone"ZONE_NAME" IN {}
                                    注意:任何服务程序如果想期望其能够通过网络被其他主机访问,至少应该在一个能与外部主机通信的IP地址上                                                                       
                          # cp -v /etc/named.conf{,.bak}
                  缓存名称服务器的配置:
                                监听外部地址就行
                                 #vim /etc/namec.conf
options {
        listen-on port 53 { 192.168.1.8; 127.0.0.1; };
/*      listen-on-v6 port 53 { ::1; }; */
                                         allow-query     { any; };
                        # named-checkconf  检查语法错误
                     dnssec: 
                        建议关闭dnssec
                        #vim /etc/namec.conf                               
/*        dnssec-enable yes;
        dnssec-validation yes;
         Path to ISC DLV key 
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
*/
         主DNS名称服务器:
                (1)在主配置文件中定义区域
                        zone "zone_name" IN {
                            type;{master;slave; hint;forward}
                            file "zone_name.zone";
                            };
                  (2) 定义区域解析库文件
                        
                            出现的内容:
                                    宏定义:
                                    资源记录定义:
# vim /var/named/magedu.com.zone
$TTL  1D
$ORIGIN magedu.com.
@        IN    SOA    ns1.magedu.com.     admin.magedu.com (
                                                                   2016012001
                                                                    1H
                                                                    5M
                                                                    7D
                                                                    1D )
            IN    NS        ns1
            IN    NS        ns2
            IN    MX    10  mx1
            IN    MX    20  mx2
ns1       IN    A        192.168.1.8
ns2       IN    A        192.168.1.9
mx1      IN    A        192.168.1.10
mx2      IN    A        192.168.1.11
www     IN    A        192.168.1.12
                # named-checkzone  "magedu.com" /var/named/magedu.com.zone  检查语法错误
                # chown :named magedu.com.zone
                # systemctl start named.service
                # rndc status
          测试命令: dig的使用
                   dig [ -t type ] name [@SERVER] [ query options ]
                    dig用于测试dns系统,因此,不会查询host文件
                  # dig -t A www.magedu.com @192.168.1.8
                    查询选项
                      +[no] trace: 跟踪解析过程
                      +[no]recures: 进行递归解析
                      测试反向解析
                            dig -x IP @server  
                    模拟区域传送
                        dig -t axfr ZONE_NAME @SERVER
                        # dig -t axfr magedu.com @192.168.1.8
    host命令
            host [-t type] name [server]
            
            nslookup命令:
              nslookup [-option] [name | -] [server]  
                交互式模式:
                        nslookup>
                        server IP:指明使用哪个DNS server进行查询
                        set q=RR_TYPE:指明查询的资源记录类型
                        NAME:要查询的名称
           
      反向区域
                区域名称:网络地址反写:in-addr.arpa.
                192.168.1.-->1.168.192.in-addr.arpa.
        (1)定义区域
                zone "ZONE_NAME" IN {
                    type {master |slave | forward};
                    file "网络地址".zone
                };
        (2)区域解析库文件
                注意:不需要MX和A,以及AAAA记录,以PTR记录为主
        # vim /etc/named.rfc1912.zones 
zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.1.zone";
        };
        #vim -o magedu.com.zone 192.168.1.zone
$TTL    1D
$ORIGIN 1.168.192.IN-ADDR.ARPA.
@       IN      SOA     ns1.magedu.com. admin.magedu.com.       (
                        2016012101
                        1H
                        5M
                        7D
                        1D )
        IN      NS      ns1.magedu.com.
        IN      NS      ns2.magedu.com.
8       IN      PTR     ns1.magedu.com.
12      IN      PTR     www.magedu.com.
11      IN      PTR     mx1.magedu.com.
# chmod 640 192.168.1.zone 
# chown :named 192.168.1.zone 
# named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone 
# named-checkconf 
# systemctl reload named.service
# rndc status
         # dig -t axfr magedu.com @192.168.1.8 检测
主从复制
    1,应该为一台独立的名称服务器
    2,主服务器的区域解析库文件中必须有一条NS记录是指向从服务器:
    3,从服务器只需要定义区域,无须提供解析库文件,解析库文件应该放置于/var/named/slaves/目录中
    4,主服务器得允许服务器作区域传送
    5,主从服务器时间应该同步,可通过ntp进行
    6,bindr程序的版本应该保持一致,否则应该从高,主低
       定义从区域的方法
            zone "zone_named"  IN {
                        type slave;
                        mastes { master_ip; };
                        file "slaves/zone_named.zone";
                };
服务器地址:192.168.1.9   
# yum install bind -y
# vim /etc/named.conf
options {
        listen-on port 53 { 192.168.1.9; 127.0.0.1; };
/*      listen-on-v6 port 53 { ::1; }; */
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
       allow-query     { any; };
        recursion yes;
     dnssec-enable no;
     dnssec-validation no;
        /* Path to ISC DLV key */
//      bindkeys-file "/etc/named.iscdlv.key";
//      managed-keys-directory "/var/named/dynamic";
//      pid-file "/run/named/named.pid";
//      session-keyfile "/run/named/session.key";
};
 指明从服务器 修改下列文件 
# vim /etc/named.rfc1912.zones
zone "magedu.com" IN {
        type slave;
        masters { 192.168.1.8; };
        file "slaves/magedu.com.zone";
        }
    rndc:
            rndc --> rndc (953/tcp)
            rndc COMMAND
            COMMAND
                    reload:重载主配置文件和区域解析库文件
                    reload zone: 重载区域解析库文件
                    retransfer zone:手动启动区域传送过程,面不管序列号是否增长
                    notify zone:重新对区域传送发通知
                    reconfig:重载主配置文件
                    querylog:开启或关闭查询日志
                    trace:递增debug级别
                    trace LEVEL:指定使用的级别
                    
DNS and BIND 
        子域授权: 分布式数据库
        正向解析区域子域方法:
                定义一个子域
                    ops.magedu.com.     IN     NS     ns1.ops.magedu.com.
                    ops.magedu.com.     IN     NS     ns2.ops.magedu.com.
                    ns1.ops.magedu.com.         IN     NS  1.1.1.1
                    ns2.ops.magedu.com.         IN     NS  1.1.1.2
                    fin.magedu.com.             IN     NS     ns1.fin.magedu.com.
                    fin.magedu.com.             IN     NS     ns2.fin.magedu.com.
                    ns1.fin.magedu.com.         IN     NS  2.1.1.1
                    ns2.fin.magedu.com.         IN     NS  2.1.1.2
        定义转发服务器:
                    注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予转发        
                       (1)全部转发:凡是非本机所负责解析的区域请求,统统转发给指定的服务器
                                options {
                                            forward {first|only}
                                             forwarders
                                }
                        (2)区域转发,仅转发对特定区域的请求至某服务器
                                zone "zone_name" IN {
                                        type forward;
                                        forward {first|only}
                                        forwarders
                                }
                注意:关闭dnssec功能
 dnssec-enable no;
dnssec-validation no;

你可能感兴趣的:(linux,dns,sed,应用程序,wak)