第八周作業

systemd簡述,及簡易編譯安裝nginx\apache-httpd管理操作;awk命令的使用方法。

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
  • ·[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

官方網站?http://httpd.apache.org/

~]# 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

(0)
N28_剛好遇到小熊貓N28_剛好遇到小熊貓
上一篇 2018-04-02 22:21
下一篇 2018-04-03

相關推薦

評論列表(1條)

  • 馬哥教育
    馬哥教育 2018-04-04 08:29

    贊,總結的比較全,其中通過systemd來管理服務在實際應用中是比較常用的,希望能夠熟練使用;另外有一處while循壞的示例沒有給出,可以后續給一下哈~

欧美性久久久久