天天看點

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來管理:

      第一步:官網下載下傳源碼包并解壓:

Linux學習(第八周)

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

Linux學習(第八周)

      第三步:編譯安裝nginx:

Linux學習(第八周)
Linux學習(第八周)

      第四步:編輯配置檔案:

Linux學習(第八周)

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

Linux學習(第八周)
Linux學習(第八周)
Linux學習(第八周)

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。将該檔案的每行都以空格劃分,顯示第二和第四段。

Linux學習(第八周)

      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個字元也是左對齊。

Linux學習(第八周)

      除了用的最多的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”。

Linux學習(第八周)

      除此之外,還有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并顯示出來。

Linux學習(第八周)

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

Linux學習(第八周)

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

Linux學習(第八周)