第八周 systemd的新特性及unit常见类型分析与awk用法示列

目录

 

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

1-1.Systemd的新特性

1-2.systemd核心概念:unit

1-3.unit常见类型分析:

1-4.编译安装nginx\apache,并通过systemd来管理

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

2-1.简介

2-2.基本用法:

2-2-1、print

2-2-2、变量

2-2-3、printf命令(格式化输出命令)

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


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

1-1.Systemd的新特性

  • 在系统引导时实现服务并行启动;
  • 能按需激活进程;
  • 能做系统状态快照;
  • 基于依赖关系定义服务控制逻辑;

1-2.systemd核心概念:unit

unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其他与init相关的信息;这些配置文件主要保存在:

/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system

1-3.unit常见类型分析:

unit单元 文件扩展名 解释说明
Service unit .service 定义系统服务
Target unit .Target 用于模拟实现"运行级别"
Device unit .device 定义内核识别的设备
Mount unit .mount 定义文件系统挂载点
Socket unit .socket 标识进程间通信用到的socket文件
Snapshot unit .snapshot 管理系统快照
Swap unit .swap 标识swap设备
Automount unit .automount 文件系统自动挂载点设备
Path unit .path 定义文件系统中的一文件或目录

1-4.编译安装nginx\apache,并通过systemd来管理

第一步--安装nginx基础依赖包并创建用户

~]# yum install pcre pcre-devel.x86_64 openssl-devel.x86_64 -y
~]# useradd nginx
~]# echo nginx|passwd --stdin nginx

第二步--下载nginx并编译安装

~]#官网下载nginx包
~]# tar -xf nginx-1.14.0.tar.gz
~]# ls
nginx-1.14.0  nginx-1.14.0.tar.gz
~]# cd nginx-1.14.0/
nginx-1.14.0]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.4/ --with-http_stub_status_module --with-http_ssl_module
nginx-1.14.0]# make && make install

第三步--编辑配置文件

~]# cd /usr/lib/systemd/system
system]# vim nginx.service
[unit]
Description=nginx
After=network.target

[Service]
Type=forking 
ExecStart=/usr/local/nginx1.4/sbin/nginx 
ExecReload=/usr/local/nginx1.4/sbin/nginx -s reload
ExecStop=/usr/local/nginx1.4/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

第四步--最后重启;关闭nginx

~]# systemctl daemon-reload   #重新载入
~]# systemctl start nginx.service
~]# systemctl reload nginx.service
~]# systemctl stop nginx.service

打开本机网页,进行网页测试“127.0.0.1”

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

2-1.简介

awk是一个强大的文本分析工具,相当于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。awk就是把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

2-2.基本用法:

awk [options] 'scripts' file1,file2, ...
       指定选项,指定报告格式化后的脚本,最后指定文件内容的来源;这表示它可以从多个文件中读取文本信息,之后根据所指定的脚本,将其格式化为特定格式,最后显示出来;脚本的格式一般分为两部分组成,如下:
awk [options] 'PATTERN {action}' file1,file2,...
       脚本主要由PATTERN和action组成,PATTERN叫模式,这就意味着它并不是对文件中的每一行都进行处理,而仅仅是处理那些能够被模式匹配到的行。行匹配到以后就action,也就是做出相应处理,一般最常见的处理机制是打印出来。常用的打印命令有print和printf可以自定义显示格式,如显示的宽度,显示为字符串还是数值等。
-awk基本处理机制
一次从文件读取一行文本,awk会对其自动进行切片, 将每一行按字符串的分隔符进行切割。如这一行是this is test,它会默认使用空白字符放分隔符,不管空了几格,这样这一行就会分成四片,一片中保存一个单词,而这四片在awk中可以使用一个变量来引用,这个变量相关于脚本中的位置参数;

  • 2-2-1、print

          print item1, item2, ...
    
  • 要点:
    (1) 逗号分隔符;
    (2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量(1,2,..)或awk的表达式;
    (3) 如省略item,相当于print $0; 即$0代表一整行内容,默认显示就为$0即整行内容;
    例:

    ~]# vim 12
    this is a,test 
    ~]# awk '{print $1,$2}' 12
    this is
    ~]# awk -F, '{print $1}' 12
    this is a
    ~]# awk '{print $0}' 12
    this is a,test
    

2-2-2、变量

2.1内建变量

  • 常用内置变量之记录变量
    FS:input field seperator,输入分隔符,默认为空白字符;
    OFS:output field seperator,输出分隔符,默认为空白字符;
    RS:input record seperator,输入时的换行符;一行为一条record;默认为行分隔符;
    ORS:output record seperator,输出时的换行符;一行为一条record;默认为行分隔符;

  • awk内置变量之数据变量
    NF:number of field,字段数量,即每行的字段数量;
    注意:{print NF}, {print $NF}的区别;
    NR:number of record, 行数;即对文件中的行进行编号;
    FNR:各文件分别计数;行数;
    FILENAME:当前文件名;即显示每行的文件名;
    ARGC:命令行中参数的个数;
    ARGV:数组,保存的是命令行中所给定的各参数;
    例:

    ~]# awk '{print NF}' /etc/issue
    1
    5
    0
    显示issue文件中每一行有多少字段;
    ~]# awk '{print NR}' /etc/issue
    1
    2
    3
    统计行数,显示行号;
    ~]# awk '{print NR}' 12 /etc/issue
    1
    2
    3
    4
    显示内容:两文件的总行数;
    ~]# awk '{print FNR}' 12 /etc/issue
    1
    1
    2
    3
    显示内容:两文件分别显示行数;
    

2.2自定义变量
(1) -v VAR=VALUE变量名区分字符大小写;
(2) 在program中直接定义
注意:定义变量,同bash中一样,用时定义即可;

~]# awk -v test='hello gawk' '{print test}' /etc/issue
hello gawk
hello gawk
hello gawk
文件此处没什么用,只有一个显示行数作用;即文件有12行显示了每行显示一次,显示了3行;

2-2-3、printf命令(格式化输出命令)

printf FORMAT, item1, item2, ...

FORMAT是格式符,为每个item按位占一个位留一个特殊符号,所以item最终会显示在format指定格式符号的位置上;

  • 要点:
    (1) FORMAT必须给出;
    (2) 在显示多行文本时,不会自动换行,需要显式给出换行控制符,\n;
    (3) FORMAT中需要分别为后面的每个item指定一个格式化符号;
    格式符:
    %c: 显示字符的ASCII码;
    %d, %i: 显示十进制整数;decimal,integer;
    %e, %E: 科学计数法数值显示;
    %f:显示为浮点数;
    %g, %G:以科学计数法或浮点形式显示数值;
    %s:显示字符串;
    %u:无符号整数;
    %%: 显示%自身;
    例:

    ~]# head -3 /etc/passwd|awk -F: '{printf "%s\n",$1}'
    root
    bin
    daemon
    以字符串显示每行的第1字段;每字段一行;
    ~]# head -3 /etc/passwd|awk -F: '{printf "username:%s\n",$1}' 
    username:root
    username:bin
    username:daemon
    显示指定字符串即username:,同时以字符串显示每行的第1字段;每字段一行;
    

修饰符:
#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后的精度;默认右对齐;
%3.1f:3表示显示3个字符的宽度;
-: 左对齐
+:显示数值的符号
2-2-4.操作符
算术操作符:
x+y, x-y, x*y, x/y, x^y(x的y次方), x%y(取模)
-x:把整数转为负数;
+x: 把字符串转换为数值;
字符串操作符:
没有符号的操作符,字符串连接(一般使用内建函数进行字符串切片)
赋值操作符:
=, +=, -=, *=, /=, %=, ^=(增强相赋值)
++, --(自增、自减运算)
比较操作符:
>, >=, <, <=, !=, ==(等值比较)
模式匹配符:
~:左侧字符串是否能被右侧模式匹配;
!~:左侧字符串是否不能被右侧模式匹配;
逻辑操作符:将多个操作连接起来;
&& 与运算
|| 或运算
! 非运算
函数调用:(这才是规范使用方式)

function_name(argu1, argu2, ...)

条件表达式:

selector?if-true-expression:if-false-expression

2-2-5、PATTERN(实现地址定界功能)
(1) empty:空模式,匹配每一行;
(2) /regular expression/:仅处理能够被此处的(正则表达式)模式匹配到的行;前面加!表示对模式过滤的条件取反;
(3) relational expression: 关系(比较)表达式;结果有“真”有“假”;结果为“真”才会被处理;
真:结果为非0值,非空字符串;
假:0,空字符串;
(4) line ranges:行范围,
/pat1/,/pat2/:startline,endline表示地址定界;
注意: 不支持直接给出数字的格式
~]# awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END模式
BEGIN{program}: 仅在开始处理文件中的文本之前执行一次程序;显示表头;
END{program}:仅在文本处理完成之后命令结束之前执行一次程序;
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 {statements}
while(conditon) {statments}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
continue
delete array[index]
delete array
exit
{ statements }
7.1 if-else语句,支持双分支if语句,完成条件判断;
语法格式:if(condition) statement [else statement]
语句如果有多个,需要用{}括起来;如果有else语句,各语句都要用{};
使用场景:对awk取得的整行或某个字段做条件判断时使用;
7.2 while循环
语法格式:while(condition) statement
条件“真”,进入循环;条件“假”,退出循环;语句如果有多个,需要用{}括起来;
要根据初始条件判断为真或假,如果为假,则一次都不会执行;
使用场景:对一行内的多个字段逐一进行类似处理时使用;或对数组中的各元素逐一处理时使用;
7.3 do-while循环
语法:do statement while(condition)
7.4 for循环
语法格式:for(expr1;expr2;expr3) statement
expr1:控制变量初始化;
expr2:条件判断;
expr3:控制变量的数值修正表达式;
for(variable assignment;condition;iteration process) {for-body}
即:for(变量赋值;条件判断表达式;变量修正表达式) {循环体语句} 意义:无论条件真假,先执行一次,即至少执行一次循环体
7.5 switch语句(在awk中用的不多)
语法格式:
switch(expression) {case VALUE1 or /REGEXP1/: statement1; case VALUE2 or /REGEXP2/: statement2; ...; default: statement}
7.6 break和continue(不做详细介绍,用到时再说)
break [n]:退出n层循环;
continue:提前结束本轮循环,直接进入下一轮循环(即下一个字段);
7.7 next
在awk中能实现2重循环,awk本身可对文件每行循环,使用循环语句是为了遍历一行中的每个字段,或数组中的每个元素;
next同continue一样,也是控制循环的,但是是控制awk的本身循环的;即提前结束对本行的处理而直接进入下一行;
8、array数组
关联数组:array[index-expression]
index-expression:索引表达式
(1) 可使用任意字符串;字符串要使用双引号;不能随便使用单引号;
(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空”;允许未经声明直接引用;
若要判断数组中是否存在某元素,要使用"index in array"格式进行;

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

内置函数
数值处理:
rand():返回0和1之间一个随机数;在大多数awk实现中,包括gawk,每次运行awk时,rand()都会从相同的起始数字或种子开始生成数字。因此,程序每次运行时都会产生相同的结果。在一个AWK运行中,这些数字是随机的,但从运行到运行是可以预测的。这便于调试,但如果希望程序每次使用时都执行不同的操作,则必须将种子更改为每次运行中不同的值。要做到这一点,使用srand()

~]# awk 'BEGIN{print rand()}'
0.237788
~]# awk 'BEGIN{srand();print rand()}'
0.343
~]# awk 'BEGIN{srand();print rand()}'
0.0389058

字符串处理:
length([s]):返回指定字符串的长度;
sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容;

~]# awk -F: '{sub(o,O,$1)}' /etc/passwd
  把每行的第1字段中,第一次出现的小写o替换为大写O;注意:仅替换每行一次出现的;

gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现的内容均替换为s所表示的内容;
split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;数组元素从1开始编号;

~]# netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
  192.168.32.1 1
  0.0.0.0 6
  显示来访的主机地址连接的次数;

猜你喜欢

转载自blog.csdn.net/weixin_39924535/article/details/83744075