1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
systemd的新特性:
系统引导时实现服务并行启动;
按需激活进程;
系统状态快照;
基于依赖关系定义服务控制逻辑;
unit常见类型分析;
Service unit:文件扩展名为.service,用于定义系统服务;
Target unit:文件扩展为.target,用于模拟实现“运行级别”;
//centos7没有启动级别,只有被访问时才启动
Device unit:文件扩展名为.device,用于定义内核识别的设备;
mount unit:文件扩展名为.mount,定义文件系统挂载点;
Socket unit:文件扩展名为.socket,用于表示进程间通信用到的socket文件;
Snapshot unit:文件扩展名为.snapshot,管理系统快照;
Swap unit:文件扩展名为.swap,用于标识swap设备;
Automount unit:文件扩展名为.automount,文件系统自动挂载点设备;
Path unit:文件扩展名为.path,用于定义文件系统的文件或目录;
/etc/systemd/system
关键特性
基于socket的激活机制:socket与程序分离;
基于bus(总线)的激活机制;
基于device的激活机制;
基于Path的激活机制;
系统快照:保存各unit的当前状态信息于持久存储设备中;
向后兼容sysv init脚本;
不兼容;
systemctl的命令是固定不变的;
非由systemd启动的服务,systemctl无法与之通信;
/etc/init.d/
管理系统服务:
Centos7:service类型的unit文件;
编译安装Nginx
1、安装软件
yum install zlib-devel pcre-devel
yum groupinstall "开发工具"
tar nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --with-pcre --with-zlib
2、启动、重启和关闭
/usr/local/nginx/sbin/nginx //启动
/usr/local/nginx/sbin/nginx -s reload //重启
/usr/local/nginx/sbin/nginx -s stop //关闭
3、实现systemd管理nginx
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=Nginx Service
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
//这里一定要注意PIDFile的路径,在/usr/local/nginx/conf/nginx.conf配置文件中,默认pid文件放在/usr/local/nginx/logs中,如果写错路径,nginx是无法启动的,报错为:PID file /run/nginx.pid not readable (yet?) after start.
2、描述awk命令用法及示例(至少3例)
Linux文本处理工具三剑客:grep、sed和awk。其中grep是一种文本过滤工具,sed是一种行文字处理工具,而awk是一种报表生成器,就是对文件进行格式化处理,就是对文件内容进行排版,然后显示出来。
在linux上我们使用的GNU awk简称gawk,并且gawk其实就是awk的链接文件,因此在系统上使用awk和gawk是一样的。
awk的运行方式有一下三种:(1)awk命令行 #awk
(2)awk 程序文件
#awk -f /path/frrom/awk_script
(3)awk脚本
#!/bin/awk -f
awk的基本用法;awk [OPTIONS]‘program’FILE1 FILE2...
OPTION:
-F[]:指明输入字段的分隔符
-v VAR_name=value:变量赋值;
-f /PATH/FROM/AWK_SCRIPT
2.1 awk的输出命令之一:print
用法:print item1,item2,...
item;字符串,用引号引用;
print“hello”,“world”
变量:显示变量的值,可以直接使用变量的名进行引用;
print name
数值:无须加引号
例如:
这里直接输出字符串hello world,因为无须对文本做任何处理,所以启动BEGIN模式。
2变量
变量分为内建变量和自定义变量
2.1内置变量
FS:input Field Seperator,输入字段分隔符,默认是空白字符
RS:input Record Seperator,输入行分隔符,默认是换行符
OFS:output Field Seperator,输出字段分隔符,默认是空白符
NF:显示当前行行数
FNR:行数,各文件单独计数
..........
实例:以冒号为分隔符输出/etc/passwd下的用户名和用户ID
2.3 awk的输出命令之二:printf格式化输出
语法:printf FORMATE,item1,item2,...
其中FORMATE是格式符号:
%c:显示字符ASCII码;
%s:显示字符串;
%d:显示十进制整数;
%f:显示浮点型数值;
%%:显示%本身;
实例:
在格式符前面在的字符串会在每个字段前显示,并且这里需要注意的是要手动添加换行符,即\n;
且上述命令在%s中间加-10,表示格式符的修饰符,“-”号表示左对齐,10表示给格式符10个字符的占位空间。
常用ACTION
(1)EXPRESSIONS:例如变量赋值
(2)Control Statements:控制语句,如 if,while等;
(3)Compound Statements:复合语句;
(4)input statements
(5)output statements
if-else
语法: if(condition){statement}【else {statement}】
while循环
语法:while(condition){statements}
条件为真时循环,为假时退出循环;
使用场景:通常在当前行的各字段进行循环
如上图所示,显示/etc/issue中所有字段。
显示/etc/issue中所有字段长度大于5的字段。
do-whlie循环
语法:do{statement}while(condition)
注意:至少执行一次循环体
7.4 for循环
语法:for(expr1;expr2;expr3)statement
使用for循环处理相比while循环更简洁易懂
for(var_name in array){for-body}
switch
switch(expression){case VALUE or /REGEXP/:statement;...;default:statementN}
break and continue
break[n]:退出当前循环,n表示退出第n层循环;
continue:提前结束本轮循环;进入下一轮循环
next:提前结束对本行文本的处理,进入下一行的文本处理;
这里显示的是/etc/passwd文本中行号为偶数的行的用户名和UID。
3、描述awk函数示例(至少3例)
函数分为内建函数和用户自定义函数
3.1 内建函数
数值处理:rand():返回0到1之间的一个随机数;
注意:采用awk内置函数rand()返回随机数后,第一次引用相同的命令还是得到同样的随机数。
字符串处理:
split(s,a,[r]):表示以r为分隔符对匹配到的s字符串进行切割,并将切割到的字段存放在a数组当中。
上图是采用split函数将整行文本以冒号为分隔符进行切割,存放在user这个数组当中,并将user的第一个元素的值,即文本每行的第一个字段打印出来。
时间类函数:systime(),取当前系统时间,结果形式为时间戳。