1. 程式人生 > >第八週 systemd的新特性及unit常見型別分析與awk用法示列

第八週 systemd的新特性及unit常見型別分析與awk用法示列

目錄

 

1、簡述systemd的新特性及unit常見型別分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理

1-1.Systemd的新特性

1-2.systemd核心概念:unit

1-3.unit常見型別分析:

1-4.編譯安裝nginx\apache,並通過systemd來管理

2、描述awk命令用法及示例(至少3例)

2-1.簡介

2-2.基本用法:

2-2-1、print

2-2-2、變數

2-2-3、printf命令(格式化輸出命令)

3、描述awk函式示例(至少3例)


1、簡述systemd的新特性及unit常見型別分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理

1-1.Systemd的新特性

  • 在系統引導時實現服務並行啟動;
  • 能按需啟用程序;
  • 能做系統狀態快照;
  • 基於依賴關係定義服務控制邏輯;

1-2.systemd核心概念:unit

unit由其相關配置檔案進行標識、識別和配置;檔案中主要包含了系統服務、監聽的socket、儲存的快照以及其他與init相關的資訊;這些配置檔案主要儲存在:

/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system

1-3.unit常見型別分析:

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 定義檔案系統中的一檔案或目錄

1-4.編譯安裝nginx\apache,並通過systemd來管理

第一步--安裝nginx基礎依賴包並建立使用者

~]# yum install pcre pcre-devel.x86_64 openssl-devel.x86_64 -y
~]# useradd nginx
~]# echo nginx|passwd --stdin nginx

第二步--下載nginx並編譯安裝

~]#官網下載nginx包
~]# tar -xf nginx-1.14.0.tar.gz
~]# ls
nginx-1.14.0  nginx-1.14.0.tar.gz
~]# cd nginx-1.14.0/
nginx-1.14.0]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.4/ --with-http_stub_status_module --with-http_ssl_module
nginx-1.14.0]# make && make install

第三步--編輯配置檔案

~]# cd /usr/lib/systemd/system
system]# vim nginx.service
[unit]
Description=nginx
After=network.target

[Service]
Type=forking 
ExecStart=/usr/local/nginx1.4/sbin/nginx 
ExecReload=/usr/local/nginx1.4/sbin/nginx -s reload
ExecStop=/usr/local/nginx1.4/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

第四步--最後重啟;關閉nginx

~]# systemctl daemon-reload   #重新載入
~]# systemctl start nginx.service
~]# systemctl reload nginx.service
~]# systemctl stop nginx.service

開啟本機網頁,進行網頁測試“127.0.0.1”

2、描述awk命令用法及示例(至少3例)

2-1.簡介

awk是一個強大的文字分析工具,相當於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。awk就是把檔案逐行讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。

2-2.基本用法:

awk [options] 'scripts' file1,file2, ...
       指定選項,指定報告格式化後的指令碼,最後指定檔案內容的來源;這表示它可以從多個檔案中讀取文字資訊,之後根據所指定的指令碼,將其格式化為特定格式,最後顯示出來;指令碼的格式一般分為兩部分組成,如下:
awk [options] 'PATTERN {action}' file1,file2,...
       指令碼主要由PATTERN和action組成,PATTERN叫模式,這就意味著它並不是對檔案中的每一行都進行處理,而僅僅是處理那些能夠被模式匹配到的行。行匹配到以後就action,也就是做出相應處理,一般最常見的處理機制是打印出來。常用的列印命令有print和printf可以自定義顯示格式,如顯示的寬度,顯示為字串還是數值等。
-awk基本處理機制
一次從檔案讀取一行文字,awk會對其自動進行切片, 將每一行按字串的分隔符進行切割。如這一行是this is test,它會預設使用空白字元放分隔符,不管空了幾格,這樣這一行就會分成四片,一片中儲存一個單詞,而這四片在awk中可以使用一個變數來引用,這個變數相關於指令碼中的位置引數;

  • 2-2-1、print

          print item1, item2, ...
    
  • 要點:
    (1) 逗號分隔符;
    (2) 輸出的各item可以字串,也可以是數值;當前記錄的欄位、變數(1,2,..)或awk的表示式;
    (3) 如省略item,相當於print $0; 即$0代表一整行內容,預設顯示就為$0即整行內容;
    例:

    ~]# vim 12
    this is a,test 
    ~]# awk '{print $1,$2}' 12
    this is
    ~]# awk -F, '{print $1}' 12
    this is a
    ~]# awk '{print $0}' 12
    this is a,test
    

2-2-2、變數

2.1內建變數

  • 常用內建變數之記錄變數
    FS:input field seperator,輸入分隔符,預設為空白字元;
    OFS:output field seperator,輸出分隔符,預設為空白字元;
    RS:input record seperator,輸入時的換行符;一行為一條record;預設為行分隔符;
    ORS:output record seperator,輸出時的換行符;一行為一條record;預設為行分隔符;

  • awk內建變數之資料變數
    NF:number of field,欄位數量,即每行的欄位數量;
    注意:{print NF}, {print $NF}的區別;
    NR:number of record, 行數;即對檔案中的行進行編號;
    FNR:各檔案分別計數;行數;
    FILENAME:當前檔名;即顯示每行的檔名;
    ARGC:命令列中引數的個數;
    ARGV:陣列,儲存的是命令列中所給定的各引數;
    例:

    ~]# awk '{print NF}' /etc/issue
    1
    5
    0
    顯示issue檔案中每一行有多少欄位;
    ~]# awk '{print NR}' /etc/issue
    1
    2
    3
    統計行數,顯示行號;
    ~]# awk '{print NR}' 12 /etc/issue
    1
    2
    3
    4
    顯示內容:兩檔案的總行數;
    ~]# awk '{print FNR}' 12 /etc/issue
    1
    1
    2
    3
    顯示內容:兩檔案分別顯示行數;
    

2.2自定義變數
(1) -v VAR=VALUE變數名區分字元大小寫;
(2) 在program中直接定義
注意:定義變數,同bash中一樣,用時定義即可;

~]# awk -v test='hello gawk' '{print test}' /etc/issue
hello gawk
hello gawk
hello gawk
檔案此處沒什麼用,只有一個顯示行數作用;即檔案有12行顯示了每行顯示一次,顯示了3行;

2-2-3、printf命令(格式化輸出命令)

printf FORMAT, item1, item2, ...

FORMAT是格式符,為每個item按位佔一個位留一個特殊符號,所以item最終會顯示在format指定格式符號的位置上;

  • 要點:
    (1) FORMAT必須給出;
    (2) 在顯示多行文字時,不會自動換行,需要顯式給出換行控制符,\n;
    (3) FORMAT中需要分別為後面的每個item指定一個格式化符號;
    格式符:
    %c: 顯示字元的ASCII碼;
    %d, %i: 顯示十進位制整數;decimal,integer;
    %e, %E: 科學計數法數值顯示;
    %f:顯示為浮點數;
    %g, %G:以科學計數法或浮點形式顯示數值;
    %s:顯示字串;
    %u:無符號整數;
    %%: 顯示%自身;
    例:

    ~]# head -3 /etc/passwd|awk -F: '{printf "%s\n",$1}'
    root
    bin
    daemon
    以字串顯示每行的第1欄位;每欄位一行;
    ~]# head -3 /etc/passwd|awk -F: '{printf "username:%s\n",$1}' 
    username:root
    username:bin
    username:daemon
    顯示指定字串即username:,同時以字串顯示每行的第1欄位;每欄位一行;
    

修飾符:
#[.#]:第一個數字控制顯示的寬度;第二個#表示小數點後的精度;預設右對齊;
%3.1f:3表示顯示3個字元的寬度;
-: 左對齊
+:顯示數值的符號
2-2-4.操作符
算術操作符:
x+y, x-y, x*y, x/y, x^y(x的y次方), x%y(取模)
-x:把整數轉為負數;
+x: 把字串轉換為數值;
字串操作符:
沒有符號的操作符,字串連線(一般使用內建函式進行字串切片)
賦值操作符:
=, +=, -=, *=, /=, %=, ^=(增強相賦值)
++, --(自增、自減運算)
比較操作符:
>, >=, <, <=, !=, ==(等值比較)
模式匹配符:
~:左側字串是否能被右側模式匹配;
!~:左側字串是否不能被右側模式匹配;
邏輯操作符:將多個操作連線起來;
&& 與運算
|| 或運算
! 非運算
函式呼叫:(這才是規範使用方式)

function_name(argu1, argu2, ...)

條件表示式:

selector?if-true-expression:if-false-expression

2-2-5、PATTERN(實現地址定界功能)
(1) empty:空模式,匹配每一行;
(2) /regular expression/:僅處理能夠被此處的(正則表示式)模式匹配到的行;前面加!表示對模式過濾的條件取反;
(3) relational expression: 關係(比較)表示式;結果有“真”有“假”;結果為“真”才會被處理;
真:結果為非0值,非空字串;
假:0,空字串;
(4) line ranges:行範圍,
/pat1/,/pat2/:startline,endline表示地址定界;
注意: 不支援直接給出數字的格式
~]# awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END模式
BEGIN{program}: 僅在開始處理檔案中的文字之前執行一次程式;顯示錶頭;
END{program}:僅在文字處理完成之後命令結束之前執行一次程式;
6、常用的action
(1) Expressions
(2) Control statements:if, while等;
(3) Compound statements:組合語句;
(4) input statements
(5) output statements
7、控制語句
if(condition) {statments}
if(condition) {statments} else {statements}
while(conditon) {statments}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
continue
delete array[index]
delete array
exit
{ statements }
7.1 if-else語句,支援雙分支if語句,完成條件判斷;
語法格式:if(condition) statement [else statement]
語句如果有多個,需要用{}括起來;如果有else語句,各語句都要用{};
使用場景:對awk取得的整行或某個欄位做條件判斷時使用;
7.2 while迴圈
語法格式:while(condition) statement
條件“真”,進入迴圈;條件“假”,退出迴圈;語句如果有多個,需要用{}括起來;
要根據初始條件判斷為真或假,如果為假,則一次都不會執行;
使用場景:對一行內的多個欄位逐一進行類似處理時使用;或對陣列中的各元素逐一處理時使用;
7.3 do-while迴圈
語法:do statement while(condition)
7.4 for迴圈
語法格式:for(expr1;expr2;expr3) statement
expr1:控制變數初始化;
expr2:條件判斷;
expr3:控制變數的數值修正表示式;
for(variable assignment;condition;iteration process) {for-body}
即:for(變數賦值;條件判斷表示式;變數修正表示式) {迴圈體語句} 意義:無論條件真假,先執行一次,即至少執行一次迴圈體
7.5 switch語句(在awk中用的不多)
語法格式:
switch(expression) {case VALUE1 or /REGEXP1/: statement1; case VALUE2 or /REGEXP2/: statement2; ...; default: statement}
7.6 break和continue(不做詳細介紹,用到時再說)
break [n]:退出n層迴圈;
continue:提前結束本輪迴圈,直接進入下一輪迴圈(即下一個欄位);
7.7 next
在awk中能實現2重迴圈,awk本身可對檔案每行迴圈,使用迴圈語句是為了遍歷一行中的每個欄位,或陣列中的每個元素;
next同continue一樣,也是控制迴圈的,但是是控制awk的本身迴圈的;即提前結束對本行的處理而直接進入下一行;
8、array陣列
關聯陣列:array[index-expression]
index-expression:索引表示式
(1) 可使用任意字串;字串要使用雙引號;不能隨便使用單引號;
(2) 如果某陣列元素事先不存在,在引用時,awk會自動建立此元素,並將其值初始化為“空”;允許未經宣告直接引用;
若要判斷陣列中是否存在某元素,要使用"index in array"格式進行;

3、描述awk函式示例(至少3例)

內建函式
數值處理:
rand():返回0和1之間一個隨機數;在大多數awk實現中,包括gawk,每次執行awk時,rand()都會從相同的起始數字或種子開始生成數字。因此,程式每次執行時都會產生相同的結果。在一個AWK執行中,這些數字是隨機的,但從執行到執行是可以預測的。這便於除錯,但如果希望程式每次使用時都執行不同的操作,則必須將種子更改為每次執行中不同的值。要做到這一點,使用srand()

~]# awk 'BEGIN{print rand()}'
0.237788
~]# awk 'BEGIN{srand();print rand()}'
0.343
~]# awk 'BEGIN{srand();print rand()}'
0.0389058

字串處理:
length([s]):返回指定字串的長度;
sub(r,s,[t]):以r表示的模式來查詢t所表示的字元中的匹配的內容,並將其第一次出現替換為s所表示的內容;

~]# awk -F: '{sub(o,O,$1)}' /etc/passwd
  把每行的第1欄位中,第一次出現的小寫o替換為大寫O;注意:僅替換每行一次出現的;

gsub(r,s,[t]):以r表示的模式來查詢t所表示的字元中的匹配的內容,並將其所有出現的內容均替換為s所表示的內容;
split(s,a[,r]):以r為分隔符切割字元s,並將切割後的結果儲存至a所表示的陣列中;陣列元素從1開始編號;

~]# netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
  192.168.32.1 1
  0.0.0.0 6
  顯示來訪的主機地址連線的次數;