作业(练习)内容:
一、实战案例(练习)内容
1、描述centos6系统开机启动流程;
2、描述/etc/rc.d/sysinit脚本功能;
(1)、设置主机名 (2)、设置欢迎信息 (3)、激活udev和selinux (4)、挂载/etc和/fstab文件中定义的文件系统 (5)、检测根文件系统,并以读写方式重新挂载根文件系统 (6)、设置系统时钟 (7)、激活swap设备 (8)、根据/etc/sysctl.conf文件,设置内核参数 (9)、激活lvm和raid设备 (10)、加载额外设备的驱动程序 (11)、清理操作 |
3、总结文本处理工具sed及awk的用法;(必须附带示例)
sed:是行编辑器,对文本进行编辑时,是以行为单位进行的。sed不做就地编辑,在文本中读取一行,放到自己的模式空间中,然后对该行文本进行编辑,最后打印至屏幕。 常用选项: -n:不输出模式中的内容至屏幕 -e:实现多点编辑 -f /PATH/TO/SCRIPT_FILE:从指定文件中读取脚本 -r:支持使用扩展的正则表达式 -i:修改源文件 编辑命令: (1)、d:删除 例:删除/etc/fstab下以UUID开头的行。 (2)、p:显示模式空间中的内容 例:显示/etc/fstab中以UUID开头的行。 在上图中我们可以看到每个UUID开头的行都显示了两次,为此结合-n一起使用,以达到我们想要的结果: (3)、a \text:在地址定界行后面追加文本,支持使用\n实现多行追加 例:在/etc/fstab脚本中以UUID开头的行后追加Hello World,并隔行追加Welcome。 (4)、c \text:替换符合条件的内容为指定的内容 例:在/etc/fstabe的脚本中使用Network替换UUID开头的行。 (5)、w /path/to/somefile : 保存模式空间中的内容到指定的文件中 例:将/etc/fstab 中以UUID开头的行保存至/root/bin/text.txt中。 (6)、=:为模式空间中的行打印行号 例:将/etc/fstab中为UUID开头的行打印行号。 (7)、r /path/to/somefile :读取指定文件的文本流至模式空间中匹配到的行后 例:读取/etc/passwd到/etc/fstab脚本的第六行。 (8)!:取反。 例:将/etc/fstab中除了UUID开头的行全部删除。 上述结果与sed –n ‘/^UUID/p’ /etc/fstab一样。 (9)s///:替换,支持使用其他分隔符,s@@@,s### 例:将/etc /fstab中的UUID替换为uuid。 |
awk:报告生成器,格式化文本输出;基本用法:gawk [options ] ‘program’ file ... program的组成:PATTERN{ACTION STATEMENT,若有多个语句,则语句之间用分号隔开。 常用选项: -F:输入数据时用到的自动分隔符。 -v var=value:自定义变量。 例如:显示/etc/fstab中的第一和第四个字段 打印的方式有两种,一个是print,一个是printf。 print: 用法 print item1,item2,…逗号分隔符不能省;输出的item可以是字符串、数值,也可以是当前记录的字段:$1:第一个字段,$2第二个字段,…,还可以是变量或awk的表达式。如果将item省略,相当于打印所有的内容至屏幕。 例如:取出/etc/fstab的后五行,并将其使用awk全部打印至屏幕。 awk中有一些内置的变量是我们经常用到的,这些变量分别是: FS:输入分隔符 例:使用“:”为分隔符,打印/etc/fstab中的第1,2,3字段。 OFS:输出分隔符 例:使用“:”为分隔符,打印/etc/fstab中的第1,2,3字段,打印时显示“:”分割的。 RS:输入时的换行符 ORS:输出时的换行符 NF:每行的字段数量 例:打印/etc/fstab中每行的字段数。 NR:行数 例:打印/etc/fstab的行数。 FNR:awk命令中要打印多文件时,此命令会分别计算行数 FILENAME:显示当前处理行的文件名 例:查看当前处理行是从哪个文件执行的。 ARGC:命令行参数的个数 ARGV:数组,保存的是命令行给定的各参数 除了上述自定义的变量我们还可以自定义变量,自定义变量的格式为:-v var=value。 或者 printf: printf用于格式化输出结果至屏幕,使用格式为:printf FORMAT ,item1,item2,item3,… 注意:此处的FORMAT必须给出;FORMAT需要为后面的item指定格式符;使用printf输出时,输出的结果是不会换行的,需要使用\n进行换行操作。 常用的格式符有: %c:显示字符的ASCll码 %d,%i:显示十进制整数 %e,%E:科学计数法数值显示 %f:显示为浮点数 %g,%G:以科学计数或浮点形式显示数值 %s:显示字符串 %u:无符号整数 %%:显示%自身 例:格式化输出/etc/passwd的第1、3行。 在上面的例子中我使用了-15(左对齐,15个字符),这就是修饰符。 除了修饰符、格式符,在awk中还有操作符,只说明条件表达式操作符的使用方法: selector?if-true-expression:if-false-expression 例:显示/etc/passwd中UID大于500的为普通用户,小于500的为系统用户或系统管理员。 PATTERN: empty:空模式,匹配每一行。 /regularexpression/:仅处理能够被此处条件匹配到的行。 例:显示/etc/fstab中以UUID。 relational expression:关系表达式,其结果有真有假,只有结果为真才会被处理。 例1:输出/etc/fstab中UID大于1000的用户和UID。 例2:输出bash为/bin/bash的用户及其默认的bash 行范围: 例1:显示/etc/passwd 中的第一个以h开头到第一个以u开头中间的内容。 BEGIN/END:BEGIN模式表示在处理模式空间中的任意行之前进行的操作,使用方法为BEGIN{},花括号中就是对应的操作。END模式表示模式空间中的所有行处理完成之后再处理END中的操作,使用方法为:END{}。相应的例子将在后续的总结中一并列出。 常用的ACTION: 表达式、控制语句(if、while等)、组合语句、输入语句、输出语句。 具体来看一下控制语句: 1、 if-else 用法 :if (condition) else {statement}; 例1:/etc/passwd中,如果UID大于500,显示为普通用户;否则显示为根用户或者系统用户。 例2:找出df –h中dev设备使用超过20%的设备。 2、 while 使用方法:while (condition) statement 例:输出以/etc/grub中以kernel开头的行的每个字段及其长度。 3、 for 使用方法:for(expr1;expr2;expr3) statement 例:输出以/etc/grub中以kernel开头的行的每个字段及其长度 |
4、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2中方法);
5、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中;
6、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;
执行结果:
7、写一个脚本,打印9X9乘法表;
执行结果:
8、描述dns的工作流程,以及完整搭建一套dns主从服务器,相关域名和ip可自行设定。
客户端将域名解析请求发给DNS服务器,DNS服务器查表,若有客户端相对应的域名,则将此结果发送给客户端;若DNS服务器中没有此记录,则发请求给根服务器,根服务器查找与之相关的信息发送给DNS服务器,之后DNS服务器发请求给根服务器提供的服务器,如此迭代的方式查询,直至最终答案告知给客户端。
配置CentOS6为主DNS服务器,CentOS7为从DNS服务器。
首先安装bind程序包,安装完成之后修改主配置文件,如下,将框起来的部分注释掉。
修改完成之后保存退出,重启DNS服务,查看DNS监听端口,如下图所示:
然后在/var/named目录下配置解析库文件oubenben.com.zone,如下所示:
完成之后,保存退出,使用named-checkzone“oubenben.com” /var/named/oubenben.com.zone查看解析库是否存在语法错误,显示OK则表示无语法错误,然后在主配置文件中填写上该区域,如下所示:
使用named-checkconf检查语法错误。
使用dig命令查看。
主服务器完成配置之后,在CentOS7中配置从服务器。同样先将相应的行注释掉,然后保存退出,再在主配置文件中添加区域记录,如下:
添加完成之后保存退出并检测是有有语法错误,没有错误就重新加载DNS服务即可。
然后查看日志,可以看到从服务器复制主服务器的解析库:
至此,主从服务器配置完毕。