目录
1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
1-4.编译安装nginx\apache,并通过systemd来管理
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可以字符串,也可以是数值;当前记录的字段、变量(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
显示来访的主机地址连接的次数;