第八週 systemd的新特性及unit常見型別分析與awk用法示列
目錄
1、簡述systemd的新特性及unit常見型別分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理
1-4.編譯安裝nginx\apache,並通過systemd來管理
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可以字串,也可以是數值;當前記錄的欄位、變數(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
顯示來訪的主機地址連線的次數;