内容简介:配置文件目录:不兼容: systemctl的命令固定不变的:非由systemd启动的服务,systemctl无法与之通信.注意: 对于心差un关键的unti文件或修改了的unit文件,要通知systemd重载此配置文件
1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
systemd是Centos7版本中的init守护进程,unit由其它相关配置文件标识.识别和配置,文件中主要包含系统服务.监听的socket.保存的快照以及其它与init相关的信息.
systemd的新特性:
- 系统引导时实现服务并行启动.
- 按需激活进程.
- 系统状态快照.
- 基于依赖关系定义服务控制逻辑.
配置文件目录: /usr/lib/systemd/system /run/systemd/system * /etc/systemd/system
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,用于定义文件系统中的以一文件或目录.
关键特性:
- 基于socket的激活机制:socket与程序分离.
- 基于bus(总线)的激活机制.
- 基于device的激活机制.
- 基于path的激活机制.
- 系统快照:保存各unit的当前状态信息于持久存储设备中.
-
向后兼容sysv init脚本.
- /etc/init.d/
不兼容: systemctl的命令固定不变的:非由systemd启动的服务,systemctl无法与之通信.
配置及三字段的常用选项:
-
·[Unit]: 定义与Unit类型无关的通用选项。用于体统unit的描述信息,unit行为及依赖关系等。
- Description:描述信息,意义性描述。
- After:定义unit的启动次序,表示当前unit应该晚于哪些unti启动,其功能与Before相反
- Requies:依赖到的其他units,前依赖,被依赖的units无法激活时,当前unit即无法激活。
- Wants:依赖到其他units,弱依赖,无论依赖的units是否激活,都不影响当前units激活。
- Conflicts:定义units间冲突关系。
-
·[Service]:与特特定类型相关的专用选项,此处为Service类型。
-
Type:用于定义影响ExecStart及相关阐述的功能的unit进程启动类型。
- simple
- forking
- oneshot
- dbus
- notify
- idle
- Enviuronmentfile:环境配置文件
- ExecStart:指定启动unit要运行命令或脚本, ExesStartPre,ExecStartPost
- ExecStop:指明停止unit要运行的命令或脚本。
- Restart
-
Type:用于定义影响ExecStart及相关阐述的功能的unit进程启动类型。
-
·[Install]: 定义由”systmectl enable”以及”systemctl disable”命令在实现服务启动或禁用时用到的一些选项。
- Alias:
- RequiredBy:被哪些units所依赖,强
- WantedBy:被哪些units所依赖,弱
注意: 对于心差un关键的unti文件或修改了的unit文件,要通知systemd重载此配置文件
重载命令 ~]# systemctl daemon-reload
系统管理服务:
unit的7️个运行级别: 0:runleve10.target,系统为停机状态 1: runleve11.target,单用户工作状态,多用于系统维护 2:runleve12.target,多用户状态,NFS未开启 3:runleve13.target,多用户状态,NFS已开启,进入命令行模式 4:runleve14.target,系统挂起 5:runleve15.target,图形控制模式 * 6:runleve16.target,关闭系统并重新启动
级别切换命令:
~]# init # 或 ~]# init systemctl isolate name.target
查看当前级别:
~]# runlevel 或 ~]# systemctl list-units --ttype target
查看所有级别:
~]# systemctl list-units -t target -a
获取默认运行级别:
~]# systemctl get-default
修改默认运行级别:
~]# systemctl set-default NAME.target
切换至紧急救援模式:
~]# systemctl rescue
切换至emergency模式:
~]# systemctl emergency
常用命令:
- 关机:systemctl halt || systemctl poweroff
- 重启:systemctl reboot
- 挂起:systemctl suspend
- 快照:systemctl hibernate
- 快照并挂起: systemctl hybrid-sleep
示例:
systmectl 管理 nginx
nginx的准备及编译安装地址: (——————–)
1、编辑配置文件 /usr/lib/systemd/system/
~system]# vim nginx.service
2、nginx.service配置信息内容
[unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
控制nginx的常用命令
启动nginx
~]# systemctl start nginx.service (service可省略)
停止nginx
~]# systemctl stop nginx
重启nginx
~]# systemctl restart nginx
systemd 管理 apache httpd
yum 环境支持包:
~]# yum -y install apr apr-util pcre pcre-devel
~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.33.tar.gz ~]# cd httpe-2.4.33 ~]# ./configure ~]# make && make install
systemd 服务管理命令配置文件/usr/lib/systemd/system 下的 httpd.service
[Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target Documentation=man:httpd(8) Documentation=man:apachectl(8) [Service] Type=notify EnvironmentFile=/etc/sysconfig/httpd ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND ExecReload=/usr/sbin/httpd $OPTIONS -k graceful ExecStop=/bin/kill -WINCH ${MAINPID} # We want systemd to give httpd some time to finish gracefully, but still want # it to kill httpd after TimeoutStopSec if something went wrong during the # graceful stop. Normally, Systemd sends SIGTERM signal right after the # ExecStop, which would kill httpd. We are sending useless SIGCONT here to give # httpd time to finish. KillSignal=SIGCONT PrivateTmp=true [Install] WantedBy=multi-user.target
启动服务
~]# systemctl start httpd.service
停止服务
~]# systemctl stop httpd
重启服务
~]# systemctl restart httpd
参考资料:
2、描述awk命令用法及示例(至少3例)
文本三剑客之 awk
awk是一种报表生成器,可以将编辑的文本进行格式化排版处理后以更加美观的形式输出。在linux上使用的awk是GUN awk简称gawk。gawk是awk的套接字文件因此两者相同。
gawk – pattern scanning and processing language(模式扫描及处理语言)
gawk是一种过程式编程题语言,并且支持:
- 条件判断
- 数组
- 循环也可以称为脚本语言解释器
基本用法:
gawk [OPTIONS] ‘program’ FILE …
OPTIONS选项:
- -F[]:指明输入字字段分隔符;
- -v VAR_NAME=VALUE:变量赋值;
- -f/PATH/FRPM/AWKSCRIPT;
程序program:PATTERN{ACTION STATEMENTS}
- 译-程序:模式{动作语句}
动作语句即用法 :
1、 print
用法: print item1,item2,…
item1值 可作为字符串,用双引号引用 作为变量被引用 * 数值引用,无需添加引号
注意及要点: item值需要使用单引号。 多个item之间需要使用逗号分隔,逗号显示为空白符。 print $0显示整段内容时,$0可忽略不写 输出的item值可以为字符串或数字、当前记录的字段($#)、变量或awk的表达式会转换为对应的字符串显示。 * 输出空白行可使用 awk ‘{print “” }’。
示例:
1、打印/etc/passwd 的后5行输出”one”,”two”和源文件的第3列,在尾部插入数字666
~]# tail -5 /etc/passwd | awk -F: '{print "one","two",$3,666}'
2、中间引用并且使用:符号分隔
~]# tail -5 /etc/fstab | awk '{print "hello:::::::",$3 }'
3、打印/etc/fstab下的空个
~]# tail -5 /etc/fstab | awk '{print ""}'
2、变量
- FS: input Field Swperator,输出字段分隔符,默认为空白。
- RS:input Record Seperator,输入时的字段分隔符,默认为换行符。
- OFS:Output Field Seperator,输出是的字段分隔符,默认为空白字符。
- ORS:output record seperator,输出时的换行符。
- NF:number of field,字段数量(引用$变量式不能加$符号,引用字段的时候需要好似用$符号)(例如:print NF,print $NF)
- NR:number of record,行数。
- FNR:个文件分别计数,行数。
- FILENAME:当前文件名。
- ARGC:命令行参数的个数。
- ARGC:数组,保存的是命令那个行所给定的各参数。
示例:
1、FS:默认空白符,可忽略
~]# tail -5 /etc/passwd | awk -v FS=':' '{print $2,$4}'
2、RS:以/为换行符
~]# tail -5 /etc/passwd | awk -v RS='/' '{print }'
3、打印/etc/passwd下行数
~]# awk '{print NR,$0}' /etc/passwd
2.2、 自定义变量
有两种方式: -v var=value 变量名区分大小写; 在program中直接定义
示例:
1、自定义变量space=date在/etc/passwd的每一行打印出来
~]# awk -v space='date' '{print space }' /etc/passwd
另一种无需给出定义文件表现形式
~]# awk -v space='date' 'BEGIN{print space}'
2、直接program中定义space=date
~]# awk '{space="date";print space}' /etc/passwd
另一种无需给出定义文件表现形式
~]# awk 'BEGIN{space="date";print space}'
3、printf 命令:
格式化的输出机制:
awk [OPTION] printf FORMAT,item1,item2,…
格式符: %c:显示字符的ASCII码。 %d,%i:显示十进制的整数。 %e,%E: 科学计数法数值显示。 %f:显示为浮点数。 %g,%G: 以科学计数法或浮点数形式显示数值。 %s: 显示字符串。 * %%;显示%自身。
修饰符:
-
[#]: 第一个数字控制显示的宽度,第二个#标示小数点后的精度。例如: %3.1f
- -#:左对齐。
- +#:右对齐,可忽略不写
(#) 代表数字。
注意要点:
- FORMAT必须给出。
- 不会自动换行,需要显示给出换行控制符,\n
- FORMA 中需要分别为后面的每个itme指定一个格式化符号。
示例
1、打印/etc/passed/以:为分隔的第二列以字符串的形式。
~]# tail -2 /etc/passwd | awk -F: '{printf "%s\n",$2}'
2、打印/etc/passwd/以:为分隔符的username和bin 并且左对齐的方式。
~]# awk -F: '{printf "username: %-25s Bin:%s\n",$1,$6}' /etc/passwd
3、打印/etc/passwd/以:为分隔符的UID和GID 并且右对齐
~]# awk -F: '{printf "UID:%9d | GID:%9d\n",$3,$4}' /etc/passwd
4、awk的操作符
awk的操作符 算数操作符:进行算数运算, -x:负值 * +x:转换为数值
例如: x+y,x-y,x y,x/y,x^y,x%y 字符操作符:字符串连接 赋值操作符:通常为变量的赋值,赋值操作符有: =,+=,-=, =,/=,%=,^= ++ ,– 比较长政府:字符串或者数值的大小比较 ,>,>=,<,<=,==,!= 模式匹配操作符:根据右侧的模式进行匹配操作符 ~:是否能由右侧指定的模式所匹配。 !~:是否不能有右侧指定模式所匹配。 逻辑操作符:进行逻辑的运算 &&:与运算 ||:或运算 条件表达式: selector?if-true-expression:if-false-expression (条件为真:条件为假) 函数调用:调用函数进行数据的处理 格式: function_nam(argu1,argu2,..) (参数1,参数2,…)
示例:
1、判断/etc/passwd/用户id是系统用户还是管理用户。
awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or Sysuser";printf"%-15s:%s\n",$1,usertype}' /etc/passwd
5、PATTERN 模式:对哪些内容进行处理。
- empty:控模式,匹配所有行;
-
/Regular Expression/:仅将ACTION应用于能被Regular Expression所匹配到的行。
- (例如:awk -F:’/^[ab]/{print $1,$3}’ /etc/passwd)
-
relational expression: 关系表达式,即结果为“真”、“假”的表达式,或这其结果能类同于“真”或“假”的表达:一般来说,其结果为非0数值或非空字符串即可类同为“真”,否则,类同为“假”。
- (例如: awk -F:’$3>=500{print $1,$3}’/etc/passwd)
- (例如: awk -F:’$1~/root/{print $1,$3}’ /etc/passwd)
- line ranges:行范围,类sed或vim中的地址定界方式如:startline,endline(起始行,结束行)
-
BEGIN/END:两个特殊模式。
- BEGIN:仅处理文本前执行一次
-
END:仅处理文本完成后执行一次
示例:
显示当前登陆的root用户
[aaa@MiWiFi-R3-srv ~]$ who | awk '$1~/root/{print $1,$3,$4}' root 2018-03-30 11:01 root 2018-03-30 11:01 root 2018-03-31 05:42 root 2018-03-31 06:09
6、常用ACTION
- EXPRESSIONS:例如变量赋值。
- Control Statements:控制语句,例如if、while等
- Compound Statements:复合语句。
- input statements
- output statements
7、控制语句
7.1、if-else
语法: if(condition) {statements}[else{statement}]
使用场景:对awk去的的整行或某字段做条件判断。
示例:
~]# awk -F: '{if($3=$4) print $1,$3,$4}' /etc/passwd
7.2、while循环
语法:while(condition) {statement}
使用场景:对一样内的多个字段逐一类似处理时使用;对数组中的各元素逐一处理时使用。
示例:
7.3、do-while循环
语法:do {statement} while (condition)
意义:至少一次执行一次循环体
7.4 for循环
语法:for (expr1;expr2;expr3) {statement}
for (expr1;expr2;expr3) {statements}
for (variable assinment;codition;iteration process){for-body}
特殊用法:能够遍历属数组中的元素:
语法: for (var in array) {for-body}
for (变量 数组名)
7.5 switch语句 (类似多分支的if语句case)
语法: switch (expression){case VALUE or /REGEXP/:statement;…;default:statementN}
7.6 break和continue
break [n]:退出当前循环,n是一个数字,用于指定退出几层循环。 continue:提前结束本轮循环而进入下一轮。
7.7 next
提前结束对本行文本的处理,而提前进入下一行的处理操作。
示例:
8、array 数组
关联数组:array[index-expression]
数组[表达式]
index-expression: 可以使用任意字符串,字符串需要使用双引号。 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其初始化为“空串”
若要判断数组中是否存在某元素,要使用”index in array” 格式进行。
weekdays[mon]=”Monday”
若要遍历数组中的每个元素,要使用for循环的方式进行。var_name会遍历array的每个索引,所示显示数组元素的值,要使用array[var_name]:
for (var in arry) {for-body}
3、描述awk函数示例(至少3例)
9、函数
9.1 内建函数:
- 数值处理:rand():返回0至1之间的一个随机数.
-
字符串处理:
- length([s]):返回指定的字符串的长度。
- sub(r,s[t]):基于r所标示的模式来匹配字符串t中的内容,将其第一次匹配到的内容替换为s所表示字符串。
- gsub(r,s[t]):基于r所表示的模式来匹配字符串t中的内容,将其所有匹配懂啊的内容日环为s所表示的字符串。
- split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中。
注意:awk的数组下标从1开始编号,而非0.
awk ‘{split($0,userinfo,”:”);print userinfo[1]}’/etc/passwd
substr(s,i[,n]):从s所表示的字符串中取子串,取法:从i表示的位置开始,取n个字符;时间类函数:systime(),取当前系统实际按,结果形式为时间戳;
示例:
length
~]# awk 'length>80' /etc/passwd
sub
~]# netstat -tan | awk 'sub(/tcp/,"ccc")'
gsub
~]# cat /etc/fstab | awk 'gsub(/#/,"%")'
9.2 用户自定义函数
functrion f_name(p,q){ … }
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/94767
以上所述就是小编给大家介绍的《第八周作业》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。