作业(练习)内容:

  一、实战案例(练习)内容

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


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

          (1)、设置主机名

          (2)、设置欢迎信息

          (3)、激活udevselinux

          (4)、挂载/etc/fstab文件中定义的文件系统

          (5)、检测根文件系统,并以读写方式重新挂载根文件系统

          (6)、设置系统时钟

          (7)、激活swap设备

          (8)、根据/etc/sysctl.conf文件,设置内核参数

          (9)、激活lvmraid设备

          (10)、加载额外设备的驱动程序

          (11)、清理操作

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

      sed:是行编辑器,对文本进行编辑时,是以行为单位进行的。sed不做就地编辑,在文本中读取一行,放到自己的模式空间中,然后对该行文本进行编辑,最后打印至屏幕。

      常用选项

                            -n:不输出模式中的内容至屏幕

                            -e:实现多点编辑

                            -f  /PATH/TO/SCRIPT_FILE:从指定文件中读取脚本

                            -r:支持使用扩展的正则表达式

                            -i:修改源文件

    编辑命令

    (1)、d:删除

    例:删除/etc/fstab下以UUID开头的行。

第二次作业_第1张图片

    (2)、p:显示模式空间中的内容

    例:显示/etc/fstab中以UUID开头的行。

第二次作业_第2张图片

    在上图中我们可以看到每个UUID开头的行都显示了两次,为此结合-n一起使用,以达到我们想要的结果:

wKiom1a1-qPS-Ov1AAAWtlpTJfQ859.png

     (3)、a \text:在地址定界行后面追加文本,支持使用\n实现多行追加

   例:在/etc/fstab脚本中以UUID开头的行后追加Hello World,并隔行追加Welcome

第二次作业_第3张图片

     (4)、c \text:替换符合条件的内容为指定的内容

   例:在/etc/fstabe的脚本中使用Network替换UUID开头的行。

第二次作业_第4张图片

     (5)、w /path/to/somefile 保存模式空间中的内容到指定的文件中

   例:将/etc/fstab 中以UUID开头的行保存至/root/bin/text.txt中。

第二次作业_第5张图片

      (6)、=:为模式空间中的行打印行号

    例:将/etc/fstab中为UUID开头的行打印行号。

第二次作业_第6张图片

     (7)、r  /path/to/somefile :读取指定文件的文本流至模式空间中匹配到的行后

    例:读取/etc/passwd/etc/fstab脚本的第六行。

第二次作业_第7张图片

  (8)!:取反。

   例:将/etc/fstab中除了UUID开头的行全部删除。

wKiom1a1_JWwTLKCAAARLnP8PuI061.png

   上述结果与sed  –n  /^UUID/p /etc/fstab一样。

  (9)s///:替换,支持使用其他分隔符,s@@@s###

   例:将/etc /fstab中的UUID替换为uuid

第二次作业_第8张图片


    awk:报告生成器,格式化文本输出;基本用法:gawk  [options ] program file ...

program的组成:PATTERN{ACTION  STATEMENT,若有多个语句,则语句之间用分号隔开。

常用选项:

         -F:输入数据时用到的自动分隔符。

         -v var=value:自定义变量。

 例如:显示/etc/fstab中的第一和第四个字段


第二次作业_第9张图片

    打印的方式有两种,一个是print,一个是printf

      print

    用法 print item1item2逗号分隔符不能省;输出的item可以是字符串、数值,也可以是当前记录的字段:$1:第一个字段,$2第二个字段,…,还可以是变量或awk的表达式。如果将item省略,相当于打印所有的内容至屏幕。

    例如:取出/etc/fstab的后五行,并将其使用awk全部打印至屏幕。

wKiom1a1_pei2JjWAAAS2zMVsNc314.png

      awk中有一些内置的变量是我们经常用到的,这些变量分别是:

      FS:输入分隔符

    例:使用“:”为分隔符,打印/etc/fstab中的第1,2,3字段。

第二次作业_第10张图片

       OFS:输出分隔符

    例:使用“:”为分隔符,打印/etc/fstab中的第1,2,3字段,打印时显示“:”分割的。

第二次作业_第11张图片

      RS:输入时的换行符

      ORS:输出时的换行符

      NF:每行的字段数量

    例:打印/etc/fstab中每行的字段数。

第二次作业_第12张图片

      NR:行数

    例:打印/etc/fstab的行数。

      FNRawk命令中要打印多文件时,此命令会分别计算行数

      FILENAME:显示当前处理行的文件名

    例:查看当前处理行是从哪个文件执行的。

第二次作业_第13张图片

     ARGC:命令行参数的个数

     ARGV:数组,保存的是命令行给定的各参数

wKiom1a2AAryAx-4AAAQ7h3BKPg586.png

   除了上述自定义的变量我们还可以自定义变量,自定义变量的格式为:-v  var=value

wKioL1a2AJaxBix-AAAFvPoSxn0332.png

    或者

      printf

      printf用于格式化输出结果至屏幕,使用格式为:printf  FORMAT item1item2item3

注意:此处的FORMAT必须给出;FORMAT需要为后面的item指定格式符;使用printf输出时,输出的结果是不会换行的,需要使用\n进行换行操作。

常用的格式符有:

      %c:显示字符的ASCll

      %d%i:显示十进制整数

      %e%E:科学计数法数值显示

      %f:显示为浮点数

      %g%G:以科学计数或浮点形式显示数值

      %s:显示字符串

      %u:无符号整数

      %%:显示%自身

    例:格式化输出/etc/passwd的第13行。

第二次作业_第14张图片

    在上面的例子中我使用了-15(左对齐,15个字符),这就是修饰符。

    除了修饰符、格式符,在awk中还有操作符,只说明条件表达式操作符的使用方法:

 selectorif-true-expressionif-false-expression

    例:显示/etc/passwdUID大于500的为普通用户,小于500的为系统用户或系统管理员。

第二次作业_第15张图片

       PATTERN

       empty:空模式,匹配每一行。

       /regularexpression/:仅处理能够被此处条件匹配到的行。

    例:显示/etc/fstab中以UUID

wKiom1a2A5-AFbKRAAAM4phunlc413.png

      relational expression:关系表达式,其结果有真有假,只有结果为真才会被处理。

    例1:输出/etc/fstabUID大于1000的用户和UID

    例2:输出bash/bin/bash的用户及其默认的bash

wKiom1a2BAaiqhaFAAAKNcKM4k8138.png

    行范围:

    例1:显示/etc/passwd 中的第一个以h开头到第一个以u开头中间的内容。

       BEGIN/ENDBEGIN模式表示在处理模式空间中的任意行之前进行的操作,使用方法为BEGIN{},花括号中就是对应的操作。END模式表示模式空间中的所有行处理完成之后再处理END中的操作,使用方法为:END{}。相应的例子将在后续的总结中一并列出。

    常用的ACTION

    表达式、控制语句(ifwhile等)、组合语句、输入语句、输出语句。

    具体来看一下控制语句:

      1、  if-else

    用法 if condition else  {statement}

    例1/etc/passwd中,如果UID大于500,显示为普通用户;否则显示为根用户或者系统用户。

第二次作业_第16张图片

    2:找出df –hdev设备使用超过20%的设备。

wKiom1a2BImgVpa8AAAHa24di-M591.png

       2、  while

    使用方法:while condition statement

    例:输出以/etc/grub中以kernel开头的行的每个字段及其长度。

第二次作业_第17张图片

       3、  for

    使用方法:forexpr1expr2expr3 statement

    例:输出以/etc/grub中以kernel开头的行的每个字段及其长度

第二次作业_第18张图片


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

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

wKioL1a2BdjSkgPeAAAEn6oSKrs189.png

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

第二次作业_第19张图片

    执行结果:

第二次作业_第20张图片

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

第二次作业_第21张图片

      执行结果:

第二次作业_第22张图片

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

 客户端将域名解析请求发给DNS服务器,DNS服务器查表,若有客户端相对应的域名,则将此结果发送给客户端;若DNS服务器中没有此记录,则发请求给根服务器,根服务器查找与之相关的信息发送给DNS服务器,之后DNS服务器发请求给根服务器提供的服务器,如此迭代的方式查询,直至最终答案告知给客户端。

       配置CentOS6为主DNS服务器,CentOS7为从DNS服务器。

    首先安装bind程序包,安装完成之后修改主配置文件,如下,将框起来的部分注释掉。

第二次作业_第23张图片

    修改完成之后保存退出,重启DNS服务,查看DNS监听端口,如下图所示:

wKiom1a2BmGyF_1uAAAOY5OmyQY747.png

    然后在/var/named目录下配置解析库文件oubenben.com.zone,如下所示:

    完成之后,保存退出,使用named-checkzone“oubenben.com” /var/named/oubenben.com.zone查看解析库是否存在语法错误,显示OK则表示无语法错误,然后在主配置文件中填写上该区域,如下所示:

    使用named-checkconf检查语法错误。

    使用dig命令查看。

第二次作业_第24张图片

    主服务器完成配置之后,在CentOS7中配置从服务器。同样先将相应的行注释掉,然后保存退出,再在主配置文件中添加区域记录,如下:

wKiom1a2BvLSny3cAAAHOLTxtr4920.png

    添加完成之后保存退出并检测是有有语法错误,没有错误就重新加载DNS服务即可。

    然后查看日志,可以看到从服务器复制主服务器的解析库:

第二次作业_第25张图片

      至此,主从服务器配置完毕。