第八周作业

1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
2、描述awk命令用法及示例(至少3例)
3、描述awk函数示例(至少3例)

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

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code