Linux学习(第八周)

第八周学习内容:CentOS启动流程之init程序、AWK

第八周作业:

1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理。

      CentOS7的init程序:systemd。拥有以下这些新特性:

      (1)系统引导时实现服务并行启动;

      (2)按需激活服务;

      (3)系统状态快照,可以回滚到过去某一时刻的状态;

      (4)基于依赖关系定义服务控制逻辑;

      (5)基于socket的激活机制,为支持此机制的服务监听socket,当接收到来自客户端的socket通信时,激活对应服务;

      (6)基于bus的激活机制;

      (7)基于device的激活机制,当有设备接入到系统时,会自动激活device、mount、automount等unit来识别,挂载对应的设备;

      (8)基于path的激活机制,当某个文件路径变得可用或路径出现相应文件时,激活相应服务;

      (9)向后兼容CentOS5和6,能够继续使用/etc/rc.d/init.d目录下的各种服务,只是命令改为systemctl。

      systemd的核心:Unit。主要用于对相关配置文件进行标识,识别和配置的,unit文件中主要包含了系统服务、监听的套接字、保存的快照以及其他与init相关的信息。一种类型的文件以单个形式存在,常见类型有以下几种:services unit以.service为后缀,定义系统服务;target unit以.target为后缀,用于模拟实现“运行级别”,因为在systemd中没有运行级别的概念了;device unit以.device为后缀,用于定义内核识别的设备;mount unit以.mount为后缀,用于定义文件系统挂载点;socket unit以.socket为后缀,用于表示进程间通信用到的套接字文件;snapshot unit以.snapshot为后缀,用于管理快照;swap unit以.swap为后缀,用于表示swap设备;automount unit以.automount为后缀,用于定义文件系统的自动挂载点;path unit以.path为后缀,用于根据文件系统上特定的变化来启动其他服务。

      unit文件一般由三部分组成:unit;type;install。unit段:定义与unit类型无关的通用选项,用于提供unit的描述信息,unit行为及依赖关系等;type段:根据unit的类型不同,名字也各不相同,用来定义与特定类型相关的选项;install段:定义由“systemctl enable”和“systemctl disable”命令在实现服务自启动或禁用时用到的一些选项。

      编译安装nginx并通过systemd来管理:

      第一步:官网下载源码包并解压:

      image.png

      第二步:安装环境并创建nginx用户:

      image.png

      第三步:编译安装nginx:

      image.png

      image.png

      第四步:编辑配置文件:

      image.png

      第五步:通过systemctl控制nginx服务的开关:

      image.png

      image.png

      image.png

2、描述awk命令用法及示例(至少3例)。

      awk:报告生成器,格式化文本输出,根据三个创作者的名字来命名,最早是在unix上使用,后来移植到Linux,有gnu组织重写,命名为gnuawk,简称gawk。

      awk的基本用法:awk+[选项]+‘程序’+文件,其中重点在程序段,有两部分组成:PATTERN{ACTION}即模式{执行}。当有多个执行时,可用“;”隔开,模式是用来对行进行筛选的,而执行就是具体操作。

      awk的工作原理:是以行为单位将数据从文本中提取出来,按分隔符(默认为空格)划分为一段一段,并将每段一次保存在内置变量$!、$2、$3......中,在执行中可以调用这些变量完成相应操作,比较特殊的变量时$0,表示整行。默认情况下awk会遍历文件中的所有行,对每行都做执行中的操作。常用选项:-F设置字段分隔符,默认为空格;-v设置变量,用于程序段。

      print命令:最常用的awk命令,就是显示,如:awk ‘{print $2,$4}’ /etc/fstab。将该文件的每行都以空格划分,显示第二和第四段。

      image.png

      printf命令:真正的格式化输出命令,比print用法丰富很多。awk ‘{printf+格式符,项目}’。定义了格式符与修饰符,格式符是用来标注输出格式的,一个格式符对应一个输出项目,多个格式符之间用“:”隔开,而格式符与项目之间用“,”隔开。修饰符是加在格式符中间用来控制格式的显示机制的。常用格式符:%c显示字符ASCII码;%d、%t显示十进制整数;%e、%E科学计数法整数显示;%f显示浮点数;%g、%G科学计数法浮点数显示;%s显示字符串等,常用修饰符:#.#第一个数字用来控制显示的长度,第二个数字用来控制小数点的精度;-表示左对齐,默认为右对齐;+标识显示数值的符号。如:awk -F: '{printf "%10-s:%5-s\n",$1,$3}' /etc/passwd。将该文件的每行都以“:”划分,显示第一和第三段,第一段的显示为字符串,长度为10个字符,不足的用空格补上并且要左对齐,第二段也显示为字符串,长度为5个字符也是左对齐。

      image.png

      除了用的最多的print和printf,awk的执行段中还有许多其他可使用命令。

      if语句:awk支持条件判断,在符合条件时完成某些操作。if(条件判断){执行1}else{执行2}。如:awk -F: '{if($3>1000){printf "普通用户:%s\n",$1} else {printf "管理员或系统用户:%s\n",$1}}' /etc/passwd。首选还是以“:”将该文件划分为好几段,如果第三段也就是uid大于1000的话,则输出“普通用户:$1”,否则输出“管理员或系统用户:$1”。

      image.png

      除此之外,还有while循环语句:while(条件判断){循环体,条件修正语句},用法和bash脚本中一致,条件为真进入循环,条件为假退出循环;do while循环语句:do{循环体,条件修正语句}while(条件),与while语句一样,唯一的区别在于不管条件真假一上来肯定会先循环一次;for循环语句:for(初始化;条件判断;条件修正){循环体},用法也是和bash脚本中一样;switch语句:switch(表达式){case值1:执行1;case值2:执行2......},也就是if的多分支语句;next语句:针对行的语句,遇到next中止这一行去往下一行等等。

3、描述awk函数示例(至少3例)。

      awk的函数分为内置函数和自定义函数,内置函数中比较常用的有:rand()返回0至1之间的随机数,默认为小数点后六位;length()返回指定字符串的长度;sub(模式,替换内容,字符串)用模式去匹配字符串,匹配到的第一个替换为替换内容;gsub(模式,替换内容,字符串)用模式去匹配字符串,匹配到的所有都将被替换为替换内容;split(字符串,数组,分隔符)以分隔符切割字符串,并按需将其存入数组中,索引依次为1,2,3......。

      示例1:awk -F: '{gsub("o","O",$1);print $1}' /etc/passwd。把该文件以“:”划分的第一段中的小写o替换为大写O并显示出来。

      image.png

      示例2:awk 'BEGIN{print rand()}'。生成一个随机数。

      image.png

      示例3:awk -F: '{printf "%20-s",$1;print length($1)}' /etc/passwd。显示用户名及其长度,还简单定义了下显示格式。

      image.png

      

      

      

猜你喜欢

转载自blog.51cto.com/13762416/2321865