zoukankan      html  css  js  c++  java
  • systemd的新特性及unit常见类型分析与awk用法示列

    简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginxapache实现通过systemd来管理
    • 系统引导的新特性
      1. 系统引导时实现服务启动;
      2. 按需激活进程;
      3. 系统状态快照;
      4. 基于依赖关系定义服务控制逻辑;
    • 核心概念:unit(单元)
      1. 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/
      管理系统服务:
      Centos7:SErvice类型的unit文件;
    • 编译安装Nginx
    1. 安装软件
    [root@localhost ~]yum install -y pcre
    [root@localhost ~]yum install -y pcre-devel
    [root@localhost ~]yum install -y openssl-devel
    [root@localhost ~]useradd nginx
    [root@localhost ~]passwd nginx
    [root@localhost ~]tar -vzxf nginx-1.11.3.tar.gz -C /usr/local
    [root@localhost ~]cd nginx-1.11.3/
    [root@localhost nginx-1.11.3]# ./configure 
    > --group=nginx 
    > --user=nginx 
    > --prefix=/usr/local/nginx 
    > --sbin-path=/usr/sbin/nginx 
    > --conf-path=/etc/nginx/nginx.conf 
    > --error-log-path=/var/log/nginx/error.log 
    > --http-log-path=/var/log/nginx/access.log 
    > --http-client-body-temp-path=/tmp/nginx/client_body 
    > --http-proxy-temp-path=/tmp/nginx/proxy 
    > --http-fastcgi-temp-path=/tmp/nginx/fastcgi 
    > --pid-path=/var/run/nginx.pid 
    > --lock-path=/var/lock/nginx 
    > --with-http_stub_status_module 
    > --with-http_ssl_module 
    > --with-http_gzip_static_module 
    > --with-pcre
    [root@localhost nginx-1.11.3]# make &&make install
    

    2.启动、重启、关闭

    [root@localhost ~]/usr/local/nginx/sbin/nginx  //启动
    [root@localhost ~]/usr/local/nginx/sbin -s reload //重启
    [root@localhost ~]/usr/local/nginx/sbin -s stop //关闭
    

    3.实现systemd管理nginx

    [root@localhost ~]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
    
    描述awk命令用法及示例(至少3例)
    • 简介
      awk是一个强大的文本分析工具,相当于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。awk就是把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
    • 使用方法
      awk [options] 'scripts' file1,file2, ...
      指定选项,指定报告格式化后的脚本,最后指定文件内容的来源;这表示它可以从多个文件中读取文本信息,之后根据所指定的脚本,将其格式化为特定格式,最后显示出来;脚本的格式一般分为两部分组成,如下:
      awk [options] 'PATTERN {action}' file1,file2,...
      脚本主要由PATTERN和action组成,PATTERN叫模式,这就意味着它并不是对文件中的每一行都进行处理,而仅仅是处理那些能够被模式匹配到的行。行匹配到以后就action,也就是做出相应处理,一般最常见的处理机制是打印出来。常用的打印命令有print和printf可以自定义显示格式,如显示的宽度,显示为字符串还是数值等。
      -awk基本处理机制
      一次从文件读取一行文本,awk会对其自动进行切片, 将每一行按字符串的分隔符进行切割。如这一行是this is test,它会默认使用空白字符放分隔符,不管空了几格,这样这一行就会分成四片,一片中保存一个单词,而这四片在awk中可以使用一个变量来引用,这个变量相关于脚本中的位置参数;
      $1,$2...$0
      -测试
    [root@qingcheng-app3 lgp]# vim awk.txt 
    this is a test
    this[root@qingcheng-app3 lgp]# awk '{print $1,$2}' awk.txt
    this is
    [root@qingcheng-app3 lgp]# awk '{print $1}' awk.txt
    this
    [root@qingcheng-app3 lgp]# awk '{print $2}' awk.txt
    is
    

    指定分隔符的选项用-F,如-F:,表示以冒号为分隔符。另外还可以指定输出分隔符,如下:
    [root@qingcheng-app3 lgp]# awk '{OFS=":"}{print $1,$2}' awk.txt
    this:is
    print的使用格式
    print item1,item2,...
    如果想在中间插入文本可按下面方法,在要插入的位置使用双引号引起要显示的内容即可:
    [root@qingcheng-app3 lgp]# awk 'BEGIN {print "line one line two line three"}'
    line one
    line two
    line three
    //打印三行文本, 表示换行
    [root@qingcheng-app3 lgp]# awk -F: '{print $1,$2}' /etc/passwd
    //以冒号为分隔符,打印passwd的第一段和第二段

    • awk变量
      常用内置变量之记录变量
      FS:field separtor,读取文本时,所使用的字段分隔符
      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不同的是,RNR用于记录正处理的行是当前这一文件中被总共处理的行数
      ARGV:数组
      ARGC:awk命令参数的个数
      FILENAME:awk命令所处理的文件的名称
      ENVIRON:当前shell环境变量及其值的关联数组

    • 示列
      [root@qingcheng-app3 lgp]# awk '{print NF}' awk.txt
      4
      //显示一共有几个字段
      [root@qingcheng-app3 lgp]# awk '{print NR}' awk.txt
      1
      //NR是绝对计数u,显示行号

    • 用户自定义变量
      gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字开头。gawk变量名称区分字符大小写;要定义变量,只要在BEGIN模式中加入变量名等于变量值即可或在命令行中用-v选项定义变量
      [root@qingcheng-app3 ~]# awk -v test="hello awk" 'BEGIN{print test}'
      hello awk
      [root@qingcheng-app3 ~]# awk 'BEGIN{var="variable testing";print var}'
      variable testing
      //在awk中打印变量值是不用加$$的,加$符是打印字段。后面不带文件,只是做一个简单的演示的时候常用BEGIN。另外,在{}中定义变量时,系统会识别为两个语句,要用分号隔开。

    • printf命令的使用格式
      printf format, item1,item2,...
      要点:
      a、与print命令的最大不同是,print需要指定format
      b、format用户指定后面每个item的输出格式
      c、printf语句不会自动打印行符,如果需要换行,要加
      format格式的指示符都以%开头,后面跟一个字符,如下:
      %c:显示字符的ASCII码
      %d,%i:十进制整数
      %e,%E:科学计数法显示数值
      %f:显示浮点数
      %g,%G:以科学计数法的格式或浮点数的格式显示数值
      %s:显示字符串
      %u:无符号整数
      %%:显示%本身
      修饰符
      N:显示宽度
      -:左对齐,不用一时是右对齐
      +:显示数值符号
      示列:
      awk -F: '{printf "%-15s, %-10s ",$1 $3}' /etc/passwd
      //显示$1和$2时,$1左对齐显示15个字符串,没有内容就显示空白,显示$3时用10个字符,换行显示。这里还会显示一个逗号,这里是-15s后面的逗号
      awk -F:'{printf "%-5d ",$3}' /etc/passwd
      //以十进制显示每个用户的ID号,做对齐

    描述awk函数示例(至少3例)
    • 可用函数rand()
      示列:
      awk 'BEGIN{print rand()}
      //使用rand()函数只能随机产生一个数字,这个数字是不会变的
      awk 'BEGIN{strand();print rand()}' //配合使用strand()函数,才生成一个大于0小于1的随机数 awk 'BEGIN{strand();print int(100*rand())}'
      //生成一个小于100的随机整数。使用strand()与rand()乘以100可以得到一个随机的整数随机数,用int是为了截取整数部分,如果没有int,生成的数字会有小数部分。
    • 字符串函数
      用gsub或sub函数替换某些文本
      [root@qingcheng-db ~]# vim test.txt
      Allen phillips
      Green Lee
      William Lee
      william ken Allen
      [root@qingcheng-db ~]# awk '{gsub("l","L",$1);print $0}' test.txt
      ALLen phillips
      Green Lee
      WiLLiam Lee
      wiLLiam ken Allen
      //用gsub函数将小写l替换成大写L,但是替换范围只限于第一列
      [root@qingcheng-db ~]# awk '{gsub("[a-z]","6",$1);print $0}' test.txt
      A6666 phillips
      G6666 Lee
      W666666 Lee
      6666666 ken Allen
      //将第一段中的小写字母替换为6,并显示全部
      [root@qingcheng-db ~]# awk '{sub("l","L",$1);print $0}' test.txt
      ALlen phillips
      Green Lee
      WiLliam Lee
      wiLliam ken Allen
      //sub指挥替换指定范围内第一次匹配到的符号条件的字符,也就是第一段的第一个小写l
  • 相关阅读:
    动态规划(DP),模拟
    递推,动态规划(DP),字符串处理,最佳加法表达式
    递归,动态规划,找最短路径,Help Jimmy
    动规,模拟,递推,最长公共子序列
    递归,递推,记忆化搜索,空间优化(数字三角形)
    递归,记忆化搜索,(棋盘分割)
    递归,搜索,回溯,最优路径(线段)
    web前端开发初学者必看的学习路线(附思维导图)
    一位资深程序员大牛给予Java初学者的学习路线建议
    假如时光倒流,我会这么学习Java
  • 原文地址:https://www.cnblogs.com/kangfeng/p/8945676.html
Copyright © 2011-2022 走看看