1. 程式人生 > >Linux學習(第八週)

Linux學習(第八週)

第八週學習內容:CentOS啟動流程之init程式、AWK

第八週作業:

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

      CentOS7的init程式:systemd。擁有以下這些新特性:

      (1)系統引導時實現服務並行啟動;

      (2)按需啟用服務;

      (3)系統狀態快照,可以回滾到過去某一時刻的狀態;

      (4)基於依賴關係定義服務控制邏輯;

      (5)基於socket的啟用機制,為支援此機制的服務監聽socket,當接收到來自客戶端的socket通訊時,啟用對應服務;

      (6)基於bus的啟用機制;

      (7)基於device的啟用機制,當有裝置接入到系統時,會自動啟用device、mount、automount等unit來識別,掛載對應的裝置;

      (8)基於path的啟用機制,當某個檔案路徑變得可用或路徑出現相應檔案時,啟用相應服務;

      (9)向後相容CentOS5和6,能夠繼續使用/etc/rc.d/init.d目錄下的各種服務,只是命令改為systemctl。

      systemd的核心:Unit。主要用於對相關配置檔案進行標識,識別和配置的,unit檔案中主要包含了系統服務、監聽的套接字、儲存的快照以及其他與init相關的資訊。一種型別的檔案以單個形式存在,常見型別有以下幾種:services unit以.service為字尾,定義系統服務;target unit以.target為字尾,用於模擬實現“執行級別”,因為在systemd中沒有執行級別的概念了;device unit以.device為字尾,用於定義核心識別的裝置;mount unit以.mount為字尾,用於定義檔案系統掛載點;socket unit以.socket為字尾,用於表示程序間通訊用到的套接字檔案;snapshot unit以.snapshot為字尾,用於管理快照;swap unit以.swap為字尾,用於表示swap裝置;automount unit以.automount為字尾,用於定義檔案系統的自動掛載點;path unit以.path為字尾,用於根據檔案系統上特定的變化來啟動其他服務。

      unit檔案一般由三部分組成:unit;type;install。unit段:定義與unit型別無關的通用選項,用於提供unit的描述資訊,unit行為及依賴關係等;type段:根據unit的型別不同,名字也各不相同,用來定義與特定型別相關的選項;install段:定義由“systemctl enable”和“systemctl disable”命令在實現服務自啟動或禁用時用到的一些選項。

      編譯安裝nginx並通過systemd來管理:

      第一步:官網下載原始碼包並解壓:

      image.png

      第二步:安裝環境並建立nginx使用者:

      image.png

      第三步:編譯安裝nginx:

      image.png

      image.png

      第四步:編輯配置檔案:

      image.png

      第五步:通過systemctl控制nginx服務的開關:

      image.png

      image.png

      image.png

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

      awk:報告生成器,格式化文字輸出,根據三個創作者的名字來命名,最早是在unix上使用,後來移植到Linux,有gnu組織重寫,命名為gnuawk,簡稱gawk。

      awk的基本用法:awk+[選項]+‘程式’+檔案,其中重點在程式段,有兩部分組成:PATTERN{ACTION}即模式{執行}。當有多個執行時,可用“;”隔開,模式是用來對行進行篩選的,而執行就是具體操作。

      awk的工作原理:是以行為單位將資料從文字中提取出來,按分隔符(預設為空格)劃分為一段一段,並將每段一次儲存在內建變數$!、$2、$3......中,在執行中可以呼叫這些變數完成相應操作,比較特殊的變數時$0,表示整行。預設情況下awk會遍歷檔案中的所有行,對每行都做執行中的操作。常用選項:-F設定欄位分隔符,預設為空格;-v設定變數,用於程式段。

      print命令:最常用的awk命令,就是顯示,如:awk ‘{print $2,$4}’ /etc/fstab。將該檔案的每行都以空格劃分,顯示第二和第四段。

      image.png

      printf命令:真正的格式化輸出命令,比print用法豐富很多。awk ‘{printf+格式符,專案}’。定義了格式符與修飾符,格式符是用來標註輸出格式的,一個格式符對應一個輸出專案,多個格式符之間用“:”隔開,而格式符與專案之間用“,”隔開。修飾符是加在格式符中間用來控制格式的顯示機制的。常用格式符:%c顯示字元ASCII碼;%d、%t顯示十進位制整數;%e、%E科學計數法整數顯示;%f顯示浮點數;%g、%G科學計數法浮點數顯示;%s顯示字串等,常用修飾符:#.#第一個數字用來控制顯示的長度,第二個數字用來控制小數點的精度;-表示左對齊,預設為右對齊;+標識顯示數值的符號。如:awk -F: '{printf "%10-s:%5-s\n",$1,$3}' /etc/passwd。將該檔案的每行都以“:”劃分,顯示第一和第三段,第一段的顯示為字串,長度為10個字元,不足的用空格補上並且要左對齊,第二段也顯示為字串,長度為5個字元也是左對齊。

      image.png

      除了用的最多的print和printf,awk的執行段中還有許多其他可使用命令。

      if語句:awk支援條件判斷,在符合條件時完成某些操作。if(條件判斷){執行1}else{執行2}。如:awk -F: '{if($3>1000){printf "普通使用者:%s\n",$1} else {printf "管理員或系統使用者:%s\n",$1}}' /etc/passwd。首選還是以“:”將該檔案劃分為好幾段,如果第三段也就是uid大於1000的話,則輸出“普通使用者:$1”,否則輸出“管理員或系統使用者:$1”。

      image.png

      除此之外,還有while迴圈語句:while(條件判斷){迴圈體,條件修正語句},用法和bash指令碼中一致,條件為真進入迴圈,條件為假退出迴圈;do while迴圈語句:do{迴圈體,條件修正語句}while(條件),與while語句一樣,唯一的區別在於不管條件真假一上來肯定會先迴圈一次;for迴圈語句:for(初始化;條件判斷;條件修正){迴圈體},用法也是和bash指令碼中一樣;switch語句:switch(表示式){case值1:執行1;case值2:執行2......},也就是if的多分支語句;next語句:針對行的語句,遇到next中止這一行去往下一行等等。

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

      awk的函式分為內建函式和自定義函式,內建函式中比較常用的有:rand()返回0至1之間的隨機數,預設為小數點後六位;length()返回指定字串的長度;sub(模式,替換內容,字串)用模式去匹配字串,匹配到的第一個替換為替換內容;gsub(模式,替換內容,字串)用模式去匹配字串,匹配到的所有都將被替換為替換內容;split(字串,陣列,分隔符)以分隔符切割字串,並按需將其存入陣列中,索引依次為1,2,3......。

      示例1:awk -F: '{gsub("o","O",$1);print $1}' /etc/passwd。把該檔案以“:”劃分的第一段中的小寫o替換為大寫O並顯示出來。

      image.png

      示例2:awk 'BEGIN{print rand()}'。生成一個隨機數。

      image.png

      示例3:awk -F: '{printf "%20-s",$1;print length($1)}' /etc/passwd。顯示使用者名稱及其長度,還簡單定義了下顯示格式。

      image.png