1、簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理
systemd是Centos7版本中的init守護進程,unit由其它相關配置文件標識.識別和配置,文件中主要包含系統服務.監聽的socket.保存的快照以及其它與init相關的信息.
systemd的新特性:
- 系統引導時實現服務并行啟動.
- 按需激活進程.
- 系統狀態快照.
- 基于依賴關系定義服務控制邏輯.
配置文件目錄:?/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無法與之通信.
配置及三字段的常用選項:
- ·[Unit]: 定義與Unit類型無關的通用選項。用于體統unit的描述信息,unit行為及依賴關系等。
- Description:描述信息,意義性描述。
- After:定義unit的啟動次序,表示當前unit應該晚于哪些unti啟動,其功能與Before相反
- Requies:依賴到的其他units,前依賴,被依賴的units無法激活時,當前unit即無法激活。
- Wants:依賴到其他units,弱依賴,無論依賴的units是否激活,都不影響當前units激活。
- Conflicts:定義units間沖突關系。
- ·[Service]:與特特定類型相關的專用選項,此處為Service類型。
- Type:用于定義影響ExecStart及相關闡述的功能的unit進程啟動類型。
- simple
- forking
- oneshot
- dbus
- notify
- idle
- Enviuronmentfile:環境配置文件
- ExecStart:指定啟動unit要運行命令或腳本, ExesStartPre,ExecStartPost
- ExecStop:指明停止unit要運行的命令或腳本。
- Restart
- Type:用于定義影響ExecStart及相關闡述的功能的unit進程啟動類型。
- ·[Install]: 定義由”systmectl enable”以及”systemctl disable”命令在實現服務啟動或禁用時用到的一些選項。
- Alias:
- RequiredBy:被哪些units所依賴,強
- WantedBy:被哪些units所依賴,弱
注意: 對于心差un關鍵的unti文件或修改了的unit文件,要通知systemd重載此配置文件
重載命令 ~]# systemctl daemon-reload
系統管理服務:
unit的7️個運行級別:?0:runleve10.target,系統為停機狀態?1: runleve11.target,單用戶工作狀態,多用于系統維護?2:runleve12.target,多用戶狀態,NFS未開啟?3:runleve13.target,多用戶狀態,NFS已開啟,進入命令行模式?4:runleve14.target,系統掛起?5:runleve15.target,圖形控制模式 * 6:runleve16.target,關閉系統并重新啟動
級別切換命令:
~]# init #
或
~]# init systemctl isolate name.target
查看當前級別:
~]# runlevel
或
~]# systemctl list-units --ttype target
查看所有級別:
~]# systemctl list-units -t target -a
獲取默認運行級別:
~]# systemctl get-default
修改默認運行級別:
~]# systemctl set-default NAME.target
切換至緊急救援模式:
~]# systemctl rescue
切換至emergency模式:
~]# systemctl emergency
常用命令:
- 關機:systemctl halt || systemctl poweroff
- 重啟:systemctl reboot
- 掛起:systemctl suspend
- 快照:systemctl hibernate
- 快照并掛起: systemctl hybrid-sleep
示例:
systmectl 管理 nginx
nginx的準備及編譯安裝地址: (——————–)
1、編輯配置文件 /usr/lib/systemd/system/
~system]# vim nginx.service
2、nginx.service配置信息內容
[unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
控制nginx的常用命令
啟動nginx
~]# systemctl start nginx.service (service可省略)
停止nginx
~]# systemctl stop nginx
重啟nginx
~]# systemctl restart nginx
systemd 管理 apache httpd
yum 環境支持包:
~]# yum -y install apr apr-util pcre pcre-devel
~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.33.tar.gz
~]# cd httpe-2.4.33
~]# ./configure
~]# make && make install
systemd 服務管理命令配置文件/usr/lib/systemd/system 下的 httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[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}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
啟動服務
~]# systemctl start httpd.service
停止服務
~]# systemctl stop httpd
重啟服務
~]# systemctl restart httpd
參考資料:
馬哥linux筆記?網絡筆記
2、描述awk命令用法及示例(至少3例)
文本三劍客之 awk
awk是一種報表生成器,可以將編輯的文本進行格式化排版處理后以更加美觀的形式輸出。在linux上使用的awk是GUN awk簡稱gawk。gawk是awk的套接字文件因此兩者相同。
gawk – pattern scanning and processing language(模式掃描及處理語言)
gawk是一種過程式編程題語言,并且支持:
- 條件判斷
- 數組
- 循環也可以稱為腳本語言解釋器
基本用法:
gawk [OPTIONS] ‘program’ FILE …
OPTIONS選項:
- -F[]:指明輸入字字段分隔符;
- -v VAR_NAME=VALUE:變量賦值;
- -f/PATH/FRPM/AWKSCRIPT;
程序program:PATTERN{ACTION STATEMENTS}
- 譯-程序:模式{動作語句}
動作語句即用法 :
1、 print
用法: print item1,item2,…
item1值?可作為字符串,用雙引號引用?作為變量被引用 * 數值引用,無需添加引號
注意及要點:?item值需要使用單引號。?多個item之間需要使用逗號分隔,逗號顯示為空白符。?print $0顯示整段內容時,$0可忽略不寫?輸出的item值可以為字符串或數字、當前記錄的字段($#)、變量或awk的表達式會轉換為對應的字符串顯示。 * 輸出空白行可使用 awk ‘{print “” }’。
示例:
1、打印/etc/passwd 的后5行輸出”one”,”two”和源文件的第3列,在尾部插入數字666
~]# tail -5 /etc/passwd | awk -F: '{print "one","two",$3,666}'
2、中間引用并且使用:符號分隔
~]# tail -5 /etc/fstab | awk '{print "hello:::::::",$3 }'
3、打印/etc/fstab下的空個
~]# tail -5 /etc/fstab | awk '{print ""}'
2、變量
- FS: input Field Swperator,輸出字段分隔符,默認為空白。
- RS:input Record Seperator,輸入時的字段分隔符,默認為換行符。
- OFS:Output Field Seperator,輸出是的字段分隔符,默認為空白字符。
- ORS:output record seperator,輸出時的換行符。
- NF:number of field,字段數量(引用$變量式不能加$符號,引用字段的時候需要好似用$符號)(例如:print NF,print $NF)
- NR:number of record,行數。
- FNR:個文件分別計數,行數。
- FILENAME:當前文件名。
- ARGC:命令行參數的個數。
- ARGC:數組,保存的是命令那個行所給定的各參數。
示例:
1、FS:默認空白符,可忽略
~]# tail -5 /etc/passwd | awk -v FS=':' '{print $2,$4}'
2、RS:以/為換行符
~]# tail -5 /etc/passwd | awk -v RS='/' '{print }'
3、打印/etc/passwd下行數
~]# awk '{print NR,$0}' /etc/passwd
2.2、 自定義變量
有兩種方式:?-v var=value 變量名區分大小寫;?在program中直接定義
示例:
1、自定義變量space=date在/etc/passwd的每一行打印出來
~]# awk -v space='date' '{print space }' /etc/passwd
另一種無需給出定義文件表現形式
~]# awk -v space='date' 'BEGIN{print space}'
2、直接program中定義space=date
~]# awk '{space="date";print space}' /etc/passwd
另一種無需給出定義文件表現形式
~]# awk 'BEGIN{space="date";print space}'
3、printf 命令:
格式化的輸出機制:
awk [OPTION] printf FORMAT,item1,item2,…
格式符:?%c:顯示字符的ASCII碼。?%d,%i:顯示十進制的整數。?%e,%E: 科學計數法數值顯示。?%f:顯示為浮點數。%g,%G: 以科學計數法或浮點數形式顯示數值。?%s: 顯示字符串。 * %%;顯示%自身。
修飾符:
-
[#]: 第一個數字控制顯示的寬度,第二個#標示小數點后的精度。例如: %3.1f
- -#:左對齊。
- +#:右對齊,可忽略不寫
(#) 代表數字。
注意要點:
- FORMAT必須給出。
- 不會自動換行,需要顯示給出換行控制符,\n
- FORMA 中需要分別為后面的每個itme指定一個格式化符號。
示例
1、打印/etc/passed/以:為分隔的第二列以字符串的形式。
~]# tail -2 /etc/passwd | awk -F: '{printf "%s\n",$2}'
2、打印/etc/passwd/以:為分隔符的username和bin 并且左對齊的方式。
~]# awk -F: '{printf "username: %-25s Bin:%s\n",$1,$6}' /etc/passwd
3、打印/etc/passwd/以:為分隔符的UID和GID 并且右對齊
~]# awk -F: '{printf "UID:%9d | GID:%9d\n",$3,$4}' /etc/passwd
4、awk的操作符
awk的操作符?算數操作符:進行算數運算,?-x:負值 * +x:轉換為數值
例如: x+y,x-y,xy,x/y,x^y,x%y?字符操作符:字符串連接?賦值操作符:通常為變量的賦值,賦值操作符有:?=,+=,-=,=,/=,%=,^=?++ ,–?比較長政府:字符串或者數值的大小比較?,>,>=,<,<=,==,!=?模式匹配操作符:根據右側的模式進行匹配操作符?~:是否能由右側指定的模式所匹配。?!~:是否不能有右側指定模式所匹配。?邏輯操作符:進行邏輯的運算&&:與運算?||:或運算?條件表達式:?selector?if-true-expression:if-false-expression (條件為真:條件為假)?函數調用:調用函數進行數據的處理?格式: function_nam(argu1,argu2,..) (參數1,參數2,…)
示例:
1、判斷/etc/passwd/用戶id是系統用戶還是管理用戶。
awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or Sysuser";printf"%-15s:%s\n",$1,usertype}' /etc/passwd
5、PATTERN 模式:對哪些內容進行處理。
- empty:控模式,匹配所有行;
- /Regular Expression/:僅將ACTION應用于能被Regular Expression所匹配到的行。
- (例如:awk -F:’/^[ab]/{print $1,$3}’ /etc/passwd)
- relational expression: 關系表達式,即結果為“真”、“假”的表達式,或這其結果能類同于“真”或“假”的表達:一般來說,其結果為非0數值或非空字符串即可類同為“真”,否則,類同為“假”。
- (例如: awk -F:’$3>=500{print $1,$3}’/etc/passwd)
- (例如: awk -F:’$1~/root/{print $1,$3}’ /etc/passwd)
- line ranges:行范圍,類sed或vim中的地址定界方式如:startline,endline(起始行,結束行)
- BEGIN/END:兩個特殊模式。
- BEGIN:僅處理文本前執行一次
- END:僅處理文本完成后執行一次
示例:
顯示當前登陸的root用戶
[aaa@MiWiFi-R3-srv ~]$ who | awk '$1~/root/{print $1,$3,$4}' root 2018-03-30 11:01 root 2018-03-30 11:01 root 2018-03-31 05:42 root 2018-03-31 06:09
6、常用ACTION
- EXPRESSIONS:例如變量賦值。
- Control Statements:控制語句,例如if、while等
- Compound Statements:復合語句。
- input statements
- output statements
7、控制語句
7.1、if-else
語法: if(condition) {statements}[else{statement}]
使用場景:對awk去的的整行或某字段做條件判斷。
示例:
~]# awk -F: '{if($3=$4) print $1,$3,$4}' /etc/passwd
7.2、while循環
語法:while(condition) {statement}
使用場景:對一樣內的多個字段逐一類似處理時使用;對數組中的各元素逐一處理時使用。
示例:
7.3、do-while循環
語法:do {statement} while (condition)
意義:至少一次執行一次循環體
7.4 for循環
語法:for (expr1;expr2;expr3) {statement}
for (expr1;expr2;expr3) {statements}
for (variable assinment;codition;iteration process){for-body}
特殊用法:能夠遍歷屬數組中的元素:
語法: for (var in array) {for-body}
for (變量 數組名)
7.5 switch語句 (類似多分支的if語句case)
語法: switch (expression){case VALUE or /REGEXP/:statement;…;default:statementN}
7.6 break和continue
break [n]:退出當前循環,n是一個數字,用于指定退出幾層循環。 continue:提前結束本輪循環而進入下一輪。
7.7 next
提前結束對本行文本的處理,而提前進入下一行的處理操作。
示例:
8、array 數組
關聯數組:array[index-expression]
數組[表達式]
index-expression:?可以使用任意字符串,字符串需要使用雙引號。?如果某數組元素事先不存在,在引用時,awk會自動創建此元素,并將其初始化為“空串”
若要判斷數組中是否存在某元素,要使用”index in array” 格式進行。
weekdays[mon]=”Monday”
若要遍歷數組中的每個元素,要使用for循環的方式進行。var_name會遍歷array的每個索引,所示顯示數組元素的值,要使用array[var_name]:
for (var in arry) {for-body}
3、描述awk函數示例(至少3例)
9、函數
9.1 內建函數:
- 數值處理:rand():返回0至1之間的一個隨機數.
- 字符串處理:
- length([s]):返回指定的字符串的長度。
- sub(r,s[t]):基于r所標示的模式來匹配字符串t中的內容,將其第一次匹配到的內容替換為s所表示字符串。
- gsub(r,s[t]):基于r所表示的模式來匹配字符串t中的內容,將其所有匹配懂啊的內容日環為s所表示的字符串。
- split(s,a[,r]):以r為分隔符切割字符s,并將切割后的結果保存至a所表示的數組中。
注意:awk的數組下標從1開始編號,而非0.
awk ‘{split($0,userinfo,”:”);print userinfo[1]}’/etc/passwd
substr(s,i[,n]):從s所表示的字符串中取子串,取法:從i表示的位置開始,取n個字符;時間類函數:systime(),取當前系統實際按,結果形式為時間戳;
示例:
length
~]# awk 'length>80' /etc/passwd
sub
~]# netstat -tan | awk 'sub(/tcp/,"ccc")'
gsub
~]# cat /etc/fstab | awk 'gsub(/#/,"%")'
9.2 用戶自定義函數
functrion f_name(p,q){ … }
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/94767
贊,總結的比較全,其中通過systemd來管理服務在實際應用中是比較常用的,希望能夠熟練使用;另外有一處while循壞的示例沒有給出,可以后續給一下哈~