第八周作业

systemd简述,及简易编译安装nginx\apache-httpd管理操作;awk命令的使用方法。

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
  • ·[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

官方网站 http://httpd.apache.org/

~]# 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

参考资料:

马哥linux笔记 网络笔记


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,xy,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

(0)
N28_刚好遇到小熊猫N28_刚好遇到小熊猫
上一篇 2018-04-02 22:21
下一篇 2018-04-03

相关推荐

  • 我的第一篇博客!

    大家好,我在178linux开博文了,欢迎大家斧正!

    Linux笔记 2018-05-02
  • zabbix监控系统

    zabixx zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix由2部分构成,zabbix server与可选组件zabbix agent。 zab…

    2018-07-22
  • Linux的哲学思想

    1.一切皆文件
    2.小型,单一用途的程序
    3.配置信息保存在文本文件中
    4.尽量避免与用户交互

    Linux笔记 2018-05-11
  • 正则表达式用户管理

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/tuser1 [root@localhost ~]# chmod 700 /home/tuser1 -R [root@localhost ~…

    2018-06-04
  • shell脚本编程基础(1)

    要想玩转Linux系统,编写shell脚本是必须要掌握的技能。那什么是shell编程呢?简单来说,shell编程就是对多个Linux命令进行逻辑处理。

    2018-04-10
  • 三、(2)用户及组管理类命令简述

    简述who、last、groupadd、useradd、usermod、userdel、passwd命令的使用方法

    2018-04-23

评论列表(1条)

  • 马哥教育
    马哥教育 2018-04-04 08:29

    赞,总结的比较全,其中通过systemd来管理服务在实际应用中是比较常用的,希望能够熟练使用;另外有一处while循坏的示例没有给出,可以后续给一下哈~