1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
- Systemd
- POST–>Boot Swqueue(bios)–>Bootloader(MBR)–>Kernel(ramdisk)–rootfs–>/sbin/init
- init:
- CentOS 5:SysV init
- CentOS 6:Upstart
- CentOS 7:Systemd
- Systemd的新特性:
- 系统引导时实现服务并行启动;
- 按需激活进程;
- 系统状态快照
- 基于依赖关系定义服务控制逻辑
- 核心概念:unit
- unit由其相关配置文件星星标识,识别和配置;文件中主要包含了系统服务,监听socket,保存的快照 以及其他init相关的信息;这些配置文件主要保存在:
- /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无法与之通信;
- 管理系统服务:
- centos 7:service类型的Unit文件;
- control 他和systemd system andservice manager
- systemctl [options…] command [name…]
- 启动:service name start==>systemctl start name.service
- 停止:service name stop==>systemctl stop name.service
- 重启:service name restart==>systemctl restart name.service
- 状态:service name status==>systemctl status name.service
- 条件式重启:service name condrestart==>systemct try-restart name.service
- 重载或重启服务:systemctl reload-or-try-restart name.service
- 查看某服务当前激活与否的状态:systemctl is-active name.service
- 查看所有已激活的服务:systemctl list-units –type service
- 查看所有服务(已激活及未激活):chkconfig–list==>systemctl list-unit -t service -a
- 设置服务开机自启:chkconfig name on ==>systemctl enable name.service
- 禁止服务开机自启:chkconfig name off==>systemctl disable name.service
- 查看某服务是否能开机自启:chkconfig –list name==>systemctl is-enabled name.service
- 禁止某服务设定为开机自启:systemctl mask name.service
- 取消上面的设定:systemctl unmask name.service
- 查看服务的依赖关系:systemctl list-dependencies name.service
- 管理target units:
- 运行级别:
- 0==>runlevel0.target,poweroff.target
- 1==>runlevel1.target,rescue.target
- 2==>runlevel2.target,multi-user.target
- 3==>runlevel3.target,nulti-user.target
- 4==>runlevel4.target.multi-user.target
- 5==>runlevel5.target,graphical.target
- 6==>runlevel6.target,reboot.target
- 级别切换:init n==>systemctl isolate name.target
- 查看级别:runlevel==>systemctl list-unit -t target
- 查看所有级别:systemctl list-unit -t target -a
- 获取默认运行级别:systemctl get-default
- 修改默认运行级别:systemctl set-default name.target
- 切换至紧急救援模式:systemctl rescue
- 切换至emergency模式:systemctl energency
- 其他常用命令:
- 关机:systemctl halt,systemctl poweroff
- 重启:systemctl reboot
- 挂起:systemctl suspend
- 快照:systemctl hibernate
- 快照并挂起:systemctl hybrid-sleep
- service unit file:
- 文件通常由三部分组成:
- [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息,Unit行为及依赖关系等;
- [Service]:与特定类型相关的专用选项;此处为Service类型;
- [Install]:定义由systemctl enable以及systemctl disable命令在实现服务启用或禁用时用到的一些选项;
- unit段的常用选项:
- Description:描述信息;意义性描述;
- After:定义unit的启动次序;标识当前unit应该晚于那些unit启动;其功能与被fore相反;
- Requles:依赖到的其他units;强依赖,被依赖的units无法激活时,当前unit即无法激活;
- Wants:一来到的其他units;弱依赖;
- Conflicts:定义units间的冲突关系
- service段的常用选项:
- type:用于定义影响execStart及相关参数的功能的unit进程启动类型;
- 类型:
- simple:
- forking:
- oneshot
- dbus
- notify
- idle
- enironmentFILE:环境配置文件
- execstart:指明启动unit要运行命令或脚本;execstartpre,execstartpost
- execstop:指明停止unit要运行的命令或脚本;
- restart:
- install段的常用选项:
- alias:
- requiredBy:被那些units所以赖;
- wantedBy:被那些units所以赖;
- 注意:对于新创建的unit文件或修改了的unit文件,要通知systemd重载此配置文件;
- systemctl daemon-reload
- 练习:为当前系统的httpd服务提供一个Unit文件;
- httpd.service
- [Unit]
- Description=The Apache HTTP Server
- After=network.target remote-fs.target nss-lookup.target
- [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}
- KillSignal=SIGCONT
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target
- 编译安装的如nginx\apache实现通过systemd来管理
- 安装开发环境
- [root@yinwei httpd]#yum install expat-devel
- [root@yinwei httpd]#yum install Development Tools
- [root@yinwei httpd]#yum install Server Platform Development
- root@yinwei ~]#tar -xf httpd-2.4.33.tar.bz2
- root@yinwei ~]#tar -xf apr-1.6.3.tar.gz
- root@yinwei ~]#tar -xf apr-util-1.6.1.tar.gz
- 安装apr,apr-util
- root@yinwei ~]# cd apr-1.6.3
- root@yinwei ~]# ./configure 默认安装
- root@yinwei ~]# make && make install
- root@yinwei ~]# cd apr-util-1.6.1
- root@yinwei ~]# ./configure 默认安装
- root@yinwei ~]#make && make install
- 安装pcre
- [root@yinwei ~]# unzip pcre-8.42.zip
- [root@yinwei ~]# cd pcre-8.42
- [root@yinwei pcre-8.42]# ./configure –prefix=/usr/local/pcre
- [root@yinwei pcre-8.42]# make && make install
- 安装httpd
- [root@yinwei httpd]#cd /httpd
- [root@yinwei httpd]# ./configure –prefix=/usr/local/apache –with-pcre=/usr/local/pcre/ –with/usr/local/apr –with/usr/local/apr-util
- [root@yinwei httpd]#make
- [root@yinwei httpd]#make install
- 配置httpd脚本
- root@yinwei ~]#vim /usr/local/apache/conf/httpd.conf
- root@yinwei ~]#添加 ServerName localhost:80
- root@yinwei ~]#cd /etc/rc.d/init.d
- root@yinwei ~]#vi httpd
- #!/bin/bash# chkconfig: 12345 80 90function start_http(){
/usr/local/apache2/bin/apachectl start
}function stop_http()
{
/usr/local/apache2/bin/apachectl stop
}case “$1” in
start)
start_http
;;
stop)
stop_http
;;
restart)
stop_http
start_http
;;
*) echo “Usage : start | stop | restart”
;;esac
root@yinwei ~]#chmod ug+x /etc/init.d/httpd
root@yinwei ~]#systemctl daemon-reload
root@yinwei ~]#systemctl start httpd
root@yinwei ~]#chkconfig –add httpd
2、描述awk命令用法及示例(至少3例)
- GNU awk
- 文本处理三工具:grep,sed,awk
- grep,egrep,ggrep:文本过滤工具;pattern
- sed:行编辑器
- awk:报告生成器,格式化文本输出;
- AWK:Aho,Weinbereger,Kernighan–>New AWK,NAWK
- GNU awk,gawk
- gawk – pattern scanning and processing language
- 基本用法:gawk [options] ‘program’ FILE …
- 语句之间用分号分隔
- print,printf
- 选项:
- -F:指明输入时用到的字段分隔符;
- -V var=value:自定义变量;
- 1.print
- print item1,item2,…
- 要点:
- 逗号分隔符:
- 输出的各item可以是字符串,也可以时数值;当前记录的字段,变量或awk的表达式:
- 如省略item,相当于 print $0;
- 2.变量-
- 内建变量
- FS:input field seperator,默认为空白字符;
- OFS:output field seperator,默认为空白字符;
- RS:input record seperator,输入时的换行符;
- ORS:output record seperator,输出时的换行符;
- NF:number of field,字段数量
- {print NF}打印字段数量, {print $NF}打印最后一个字段
- NR:number of record,行数
- FILENAME:当前文件名;
- ARGC:命令行参数的个数;
- ARGV:命令行数组的元素…[]可以列出
- 示例:awk ‘BEGIN{print ARGC}’
- awk ‘BEGIN{print ARGV[1]}’
- 自定义变量
- -v var=value
- 变量名区分字符大小写;
- 在program中直接定义
- awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab
- awk -v test=’hello gawk’ ‘BEGIN{print test}’
- awk ‘BEGIN{test=”hello gawk”;print test}’
- printf命令
- 格式化输出:printf FORMAT,item1,item2,…
- FORMAT必须给出;
- 不会自动换行,需要显式给出换行控制符,\n
- FORMAT中需要分别为后面的每个item指定一个格式化符号;
- 格式符号
- %c:显示字符的ASCII;
- %d,%i:显示十进制整数;
- %e,%E:科学计数法数值显示;
- %f:显示为浮点数;
- %g,%G:以科学计数法或浮点形式显示数值;
- %s:显示字符串
- %u:无符号整数;
- %%:显示%自身;
- 修饰符:
- #[.#]:第一个数字显示的宽度:第二个标识小数点后的精度;
- %3.1f 3个字符位置,小数点后一位显示
- -:左对齐
- +:显示数值的符号
- 操作符
- 算数操作符
- x+y,x-y,x*y,x/y,x^y,x%y
- -x:数前加-符号
- +x:转换为数值;
- 字符串操作符:没有符号的操作符,字符串连接
- 赋值操作符
- =,+=,-=,*=,/=,%= …..
- 比较操作符:
- >,>=,<,<=,==,!=
- 模式匹配服:
- ~:是否匹配
- !~:是否不匹配
- 逻辑操作符:
- &&
- ||
- !
- 函数调用:
- function_name(argu1,argu2,…)
- 条件表达式:
- selection?if-true-expression:if-false-expression
- 示例: awk -F: ‘{$3>=1000?usertype=”Common User”:usertype=”Sysadmin or SysUser”;printf “%15s:%-s\n”,$1,usertype}’ /etc/passwd
- PATTERN
- empty:空模式,匹配每一行;
- /regular expression/:仅处理能够被此处的模式匹配到的行;
- relational expression:关系表达式:结果有真有假:结果为真才会被处理;真:结果为非零值,非空字符串;
- line ranges:行范围 /pat1/,/pat2/
- 注意:不支持直接给出数字的格式
- 示例: awk -F: ‘(NR>=2&&NR<=10){print $1}’ /etc/passwd
- BEGIN/END模式
- BEGIN{}:仅在开始处理文件中的文本之前执行一次:
- END{}:仅在文本处理完成之后执行一次;
- 常用的action
- Expressions
- Control statemments: if,while等
- Compound statemments:
- input statements
- output statements
- 控制语句
- if(condition) {statments}
- if(condition) {statments} else {statements}
- while(condit) {statments}
- do {statments} while (condition)
- for(expr1;expr2;expr3) {statments}
- break
- continue
- delete array[index]
- delete array
- exit
- {statements}
- 控制语句 if-else
- 语法:if(condition) statement [else statement]
- 示例:
- awk -F: ‘{if($3>=1000) {printf “Common user:%s\n”,$1} else {printf “root or Sysuser:%s\n”,$1}}’ /etc/passwd
- awk -F: ‘{if($NF==”/bin/bash”) print $1}’ /etc/passwd
- awk ‘{if(NF>5) print $0}’ /etc/fstab
- df -h | awk -F[%] ‘/^\/dev/{print $1}’ |awk ‘{if($NF>=20) print $1}’
- 使用场景:对awk取得的整行或某个字段做条件判断;
- while循环
- 语法:while(condition) statement
- 条件”真”,进入循环:条件”假”,退出循环;
- 使用场景:对一行内的多个字段逐一类似处理时使用;对数组中的各元素逐一处理时使用;
- 示例:
- awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}’ /etc/grub2.cfg
- awk ‘/^[[:space:]]*linux16/{i<=1;while(i<=NF) {if(length($i)>=7){print $i,length($i)};i++}}’ /etc/grub2.cfg
- do-while循环
- 语法:do statement while(condition)
- 意义:至少执行一次循环体
- for循环
- 语法:for(expr1;expr2;expr3) statement
- for(variable assignment;condition;iteration process) {for-body}
- 示例:
- awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’ /etc/grub2.cfg
- 特殊用法:
- 能够遍历数组中的元素:
- 语法:for(var in array) {for-body}
- switch语句:
- swithc(expression) {case value1 or /regexp/:statement; case value2 or /regexp2/:statement; …}
- default:statement
- break和continue
- break [n]
- continue
- next:提前结束对本行的处理而直接进入下一行;
- 示例:
- awk -F: ‘{if($3%2!=0) next;print $1,$3}’ /etc/passwd
- array
- 关联数组:array[index-expression]
- [index-expression]
- 1.可使用任意字符串;
- 2.如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为”空串”;
- 若要判断数组中是否存在某元素,要使用”index in array”格式进行;
- weekdays[mon]=”Monday”
- 若要遍历数组中的每个元素,要使用for循环:
- for(var in array) {for-body}
- 示例:
- awk ‘BEGIN{weekdays[“mon”]=”Monday”;weekdays[“tue”]=”Tuesday”;for(i in weekdays) {print weekdays[i]}}’
- 注意:var会遍历array的每个索引;
- state[“LISTEN”]++
- state[“ESTABLISHED”]++
- 示例:
- netstat -tan | awk ‘/^tpc\>/{state[$NF]++}END{for(i in state) {print i,state[i]}}’
- awk ‘{ip[$1]++}END{for(i in ip) {print i,ip[i]}}’ /var/log/httpd/access_log
- awk ‘/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}’ /etc/fstab
- awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}’ /etc/fstab
3、描述awk函数示例(至少3例)
awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’ /etc/grub2.cfg
netstat -tan | awk ‘/^tcp\>/{split($5,ip,”1″);count[ip[1]]++}END{for(i in count) {print i,count[i]}}’
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/101948