systemd及awk

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

1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
  • Systemd的新特性:
    系统引导时实现服务并行启动;
    按需激活进程;
    系统状态快照;
    基于依赖关系定义服务控制逻辑;
  • 核心概念:unit(单元)
    unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其它与init相关的信息; 这些配置文件主要保存在:
    /usr/lib/systemd/system
    /run/systemd/system
  • 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/
    管理系统服务:
    CentOS 7: 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例)
  • 简介
    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
  • 使用方法
    awk [options] 'script' file1,file2, ...

    指定选项,指定报告格式化后的脚本,最后指定文件内容的来源;这表示它可以从多个文件中读取文本信息,之后根据所指定的脚本,将其格式化为特定格式,最后显示出来;脚本的格式一般分为两部分组成,如下:
    awk [options] 'PATTERN {action}' file1,file2,...

    脚本主要由PATTERN和action组成,PATTERN叫模式,这意味着它并不是对文件中的每一行都进行处理,而仅是处理那些能够被模式匹配到的行。行匹配到以后就action,也就是做出相应处理,一般最常见的处理机制是打印出来。常用的打印命令有print和printf,print就是简单地打印格式,printf可以自定义显示格式,如显示的宽度,显示为字符串还是数值等。
  • awk的基本处理机制
    一次从文件中读取一行文本,awk会对其自动进行切片,将每一行按字符串的分隔符进行切割。如这一行是this is a test,它会默认使用空白字符当分隔符,不管空了几个格,这样这一行就会成四片,一片中保存一个单词,而这四片在awk中可以使用一个变量来引用,这个变量相关于脚本中的位置参数$1,$2...$0表示这一整行。awk默认使用空白当分隔符,也可以指定分隔符。
  • 试验
    1、vim awk.txt
    this is a test

    2、awk '{print $1}' awk.txt
    //显示第一个字段
    awk '{print $0}' awk.txt
    awk '{print $4}' awk.txt
    awk '{print $1,$2}' awk.txt
    //显示两段内容时用逗号分隔

指定分隔符的选项用-F,如-F:,表示以冒号为分隔符。另外还可指定输出分隔符,如下:
awk 'BEGIN{OFS="#"}{print $1,$2}' awk.txt
print的使用
print的使用格式
print item1,item2,...
如果想在中间插入文本可按下面方法,在要插入的位置用双引号引起要显示的内容即可
print item1,"***",item2,...


  • awk 'BEGIN {print "line one\nline two\nline three"}'
    //打印三行文本,\n表示换行

awk -F: '{print $1,$2}' /etc/passwd
//以冒号为分隔符,打印passwd的第一和第二段

  • awk变量
    常用内置变量之记录变量
    FS:field separator,读取文本时,所使用的字段分隔符
    RS: Record separator,输入文本信息所使用的换行符
    OFS:Output Filed Separator,输出字段分隔符
    ORS:Output Row Separator,输出行分隔符
  • awk内置变量之数据变量
    NR:The number of input records,awk命令所处理的记录数。相对于当前的文件,它处理到多少行了。如果有多个文件,这个数目会把处理的多个文件中统一计数。
    NF:Number of field,当前记录的field个数,统计正在处理的当前行有多少字段
    FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数
    ARGV:数组
    ARGC:awk命令的参数的个数
    FILENAME:awk命令所处理的文件的名称
    ENVIRON:当前shell环境变量及其值的关联数组

  • awk '{print NF}' awk.txt
    //显示一共有几个字段awk '{print $NF}' awk.txt
    //显示第四个字段

    awk '{print NR}' awk.txt
    //NR是绝对计数,显示行号

    awk '{print NR}' awk.txt /etc/passwd
    //将两个文件的行号在一起显示

    awk '{print FNR}' awk /etc/passwd
    //FNR是各自计数,将两个文件的行号分开显示

  • 用户自定义变量
    gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字 开头。gawk变量名称区分字符大小写;要定义变量,只要在BEGIN模式中加入变量名等于变量值即可或在命令行中用-v选项定义变量

  • awk 'BEGIN{var="variable testing";print var}'
    awk -v test="hello awk" 'BEGIN{print test}'

    //在awk中打印变量值是不用加$$的,加$符是打印字段。后面不带文件,只是做一个简单的演示的时候常用BEGIN。另外,在{}中定义变量时,系统会识别为两个语句,要用分号隔开。
  • printf 命令的使用格式
    printf format, item1,item2,...
  • 要点:
    1、与print命令的最大不同是,print需要指定format
    2、format用于指定后面的每个item的输出格式
    3、printf语句不会自动打印行符,如果需要换行,要加上\n
  • format格式的指示符都以%开头,后面跟一个字符,如下
    %c:显示字符的ASCII码
    %d, %i:十进制整数
    %e, %E:科学计数法显示数值
    %f:显示浮点数
    %g,%G:以科学计数法的格式或浮点数的格式显示数值
    %s:显示字符串
    %u:无符号整数
    %%:显示%本身
  • 修饰符
    N:显示宽度
    -:左对齐,不用-时是右对齐
    +:显示数值符号

  • awk -F: '{printf "%-15s, %-10s\n",$1 $3}' /etc/passwd
    //显示$1和$3时,$1左对齐显示15个字符串,没有内容就显示空白,显示$3时用10个字符,换行显示。这里还会显示一个逗号,这是-15s后面的逗号awk -F: '{printf "%-5d\n",$3}' /etc/passwd
    //以十进制显示每个用户的id号,左对齐
3、描述awk函数示例(至少3例)
  • 可用函数rand()

示例:
awk 'BEGIN{print rand()}'
//使用rand()函数只能随机产生一个数字,这个数字是不会变的

awk 'BEGIN{srand();print rand()}'
//配合使用srand()函数,才成生成一个大于0小于1的随机数。

awk 'BEGIN{srand();print int(100*rand())}'
//生成一个小于100的随机整数。使用srand()与rand()乘以100可以得到一个随机的整数随机数,用int是为了截取整数部分,如果没有int,生成的数字会有小数部分。

  • 字符串函数
    用gsub或sub函数替换某些文本
    vim test.txt
    Allen Phillips
    Green Lee
    William Ken Allen

awk '{gsub("l","L",$1);print $0}' test.txt
//用gsub函数将小写l替换成大写L,但是替换范围只限于第一列

awk '{gsub("[a-z]","6",$1);print $0}' test.txt
//将第一段中的小写字母替换为6,并显示全部`

awk '{sub("l","L",$1);print $0}' test.txt
//sub只会替换指定范围内第一次匹配到的符合条件的字符,也就是第一段中的第一个小写l

1,$2}' awk.txt
//显示两段内容时用逗号分隔

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/91188

(1)
ruopu1989ruopu1989
上一篇 2018-01-17 21:59
下一篇 2018-01-18 14:26

相关推荐

  • 一个开发眼中的运维

    在云计算时代,开发和运维的结合变得越来越重要。在DIFF论坛第一期,前新浪SAE运维主管,郑志勇,分享了《一个开发眼中的运维》根据自己从开发人员转型运维之后的心得,谈如何把在开发上的运用抽象思维方式运用到运维领域。 1. 运维不是什么? 运维不是打杂的,运维不是客服,运维也不是服务开发的,但要做好合作。 2. 运维是什么? 运维服务于整个产品,保证架构合理,…

    Linux干货 2015-03-11
  • keepalived+nginx

    keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。本文基于如下的拓扑图: 配置keepalived+nginx的方…

    Linux干货 2016-11-04
  • ACL概述

    ACL概述 一、什么是ACL ACL是linux系统中一种被称为访问控制列表的权限控制方法,它是一种权限分配之外的普遍范式。在一般情况下,要确认三个权限组:owner、group和other。而使用ACL则可以增加权限给其他用户或组别,不再仅仅是在“other”中定义权限,可以允许指定的用户拥有不同于其所属组的权限。 ACL支持多种Linux文件系统,包括e…

    2017-07-29
  • Linux用户和组管理(第三周)

    第三周作业 1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可 [root@localhost ~]# who | cut -d" " -f1 | sort | uniq 2.取出最后登录到当…

    Linux干货 2016-09-15
  • centos7 yum源仓库网络共享

    一般yum源仓库需要两部分组成,一部分为rpm程序包,另一个就是repodata元数据组成。制作一个简单的网络共享yum源仓库,在制作网络共享服务器需要事先配备好你的yum源,以方便使用 1.安装网络共享yum源仓库服务 以ftp为例: (1)在centos7中是否有ftp,用rpm -q 对vsftpd程序包查看 [root@local…

    Linux干货 2017-04-23
  • vim、crontab、bash for循环练习

    1、复制/etc/rc.d/init.d/functions文件至/tmp目录,将/tmp/functions文件中的以至少一个空白字符开头的行的行首加#。 vim中支持全文查找替换功能且在查找时支持正则表达式,在替换时进行引用。先使用vim /tmp/functions,然后在vim编辑模式中输入:%s/\(^[[:space:]]\+\)/#\1/g再回…

    系统运维 2016-12-03

评论列表(1条)

  • 马哥教育
    马哥教育 2018-01-23 23:47

    赞,总结的比较详细,不过awk的例子列举的比较简单,可以再深入一下~加油~