1、簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理
- Systemd的新特性:
系統引導時實現服務并行啟動;
按需激活進程;
系統狀態快照;
基于依賴關系定義服務控制邏輯; - 核心概念:unit(單元)
unit由其相關配置文件進行標識、識別和配置;文件中主要包含了系統服務、監聽的socket、保存的快照以及其它與init相關的信息; 這些配置文件主要保存在:
/usr/lib/systemd/system
/run/systemd/system - unit的常見類型:
Service unit:文件擴展名為.service,用于定義系統服務;
Target unit:文件擴展為.target,用于模擬實現“運行級別”;
//centos7沒有啟動級別,只有被訪問時才啟動
Device unit:文件擴展名為 .device,用于定義內核識別的設備;
Mount unit:文件擴展名為 .mount,定義文件系統掛載點;
Socket unit: 文件擴展名為 .socket,用于標識進程間通信用到的socket文件;
Snapshot unit:文件擴展名為 .snapshot, 管理系統快照;
Swap unit:文件擴展名為 .swap, 用于標識swap設備;
Automount unit:文件擴展名為 .automount,文件系統自動掛載點設備;
Path unit:文件擴展名為 .path, 用于定義文件系統中的文件或目錄;
/etc/systemd/system - 關鍵特性:
基于socket的激活機制:socket與程序分離;
基于bus(總線)的激活機制;
基于device的激活機制;
基于Path的激活機制;
系統快照:保存各unit的當前狀態信息于持久存儲設備中;
向后兼容sysv init腳本; - 不兼容:
systemctl的命令是固定不變的;
非由systemd啟動的服務,systemctl無法與之通信;
/etc/init.d/
管理系統服務:
CentOS 7: service類型的unit文件; - 編譯安裝Nginx
1、安裝軟件
yum install zlib-devel pcre-devel
yum groupinstall "開發工具"
tar nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --with-pcre --with-zlib
2、啟動、重啟和關閉
/usr/local/nginx/sbin/nginx //啟動
/usr/local/nginx/sbin/nginx -s reload //重啟
/usr/local/nginx/sbin/nginx -s stop //關閉
3、實現systemd管理nginx
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=Nginx Service
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
//這里一定要注意PIDFile的路徑,在/usr/local/nginx/conf/nginx.conf配置文件中,默認pid文件放在/usr/local/nginx/logs中,如果寫錯路徑,nginx是無法啟動的,報錯為:PID file /run/nginx.pid not readable (yet?) after start.
2、描述awk命令用法及示例(至少3例)
- 簡介
awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。 - 使用方法
awk [options] 'script' file1,file2, ...
指定選項,指定報告格式化后的腳本,最后指定文件內容的來源;這表示它可以從多個文件中讀取文本信息,之后根據所指定的腳本,將其格式化為特定格式,最后顯示出來;腳本的格式一般分為兩部分組成,如下:
awk [options] 'PATTERN {action}' file1,file2,...
腳本主要由PATTERN和action組成,PATTERN叫模式,這意味著它并不是對文件中的每一行都進行處理,而僅是處理那些能夠被模式匹配到的行。行匹配到以后就action,也就是做出相應處理,一般最常見的處理機制是打印出來。常用的打印命令有print和printf,print就是簡單地打印格式,printf可以自定義顯示格式,如顯示的寬度,顯示為字符串還是數值等。 - awk的基本處理機制
一次從文件中讀取一行文本,awk會對其自動進行切片,將每一行按字符串的分隔符進行切割。如這一行是this is a test,它會默認使用空白字符當分隔符,不管空了幾個格,這樣這一行就會成四片,一片中保存一個單詞,而這四片在awk中可以使用一個變量來引用,這個變量相關于腳本中的位置參數$1,$2...$0
表示這一整行。awk默認使用空白當分隔符,也可以指定分隔符。 - 試驗
1、vim awk.txt
this is a test
2、awk '{print $1}' awk.txt
//顯示第一個字段
awk '{print $0}' awk.txt
awk '{print $4}' awk.txt
awk '{print $1,$2}' awk.txt
//顯示兩段內容時用逗號分隔
指定分隔符的選項用-F,如-F:,表示以冒號為分隔符。另外還可指定輸出分隔符,如下:awk 'BEGIN{OFS="#"}{print $1,$2}' awk.txt
print的使用
print的使用格式print item1,item2,...
如果想在中間插入文本可按下面方法,在要插入的位置用雙引號引起要顯示的內容即可print item1,"***",item2,...
- 例
awk 'BEGIN {print "line one\nline two\nline three"}'
//打印三行文本,\n表示換行
awk -F: '{print $1,$2}' /etc/passwd
//以冒號為分隔符,打印passwd的第一和第二段
- awk變量
常用內置變量之記錄變量
FS:field separator,讀取文本時,所使用的字段分隔符
RS: Record separator,輸入文本信息所使用的換行符
OFS:Output Filed Separator,輸出字段分隔符
ORS:Output Row Separator,輸出行分隔符 - awk內置變量之數據變量
NR:The number of input records,awk命令所處理的記錄數。相對于當前的文件,它處理到多少行了。如果有多個文件,這個數目會把處理的多個文件中統一計數。
NF:Number of field,當前記錄的field個數,統計正在處理的當前行有多少字段
FNR:與NR不同的是,FNR用于記錄正處理的行是當前這一文件中被總共處理的行數
ARGV:數組
ARGC:awk命令的參數的個數
FILENAME:awk命令所處理的文件的名稱
ENVIRON:當前shell環境變量及其值的關聯數組 - 例
awk '{print NF}' awk.txt
//顯示一共有幾個字段awk '{print $NF}' awk.txt
//顯示第四個字段awk '{print NR}' awk.txt
//NR是絕對計數,顯示行號awk '{print NR}' awk.txt /etc/passwd
//將兩個文件的行號在一起顯示awk '{print FNR}' awk /etc/passwd
//FNR是各自計數,將兩個文件的行號分開顯示 - 用戶自定義變量
gawk允許用戶自定義自己的變量以便在程序代碼中使用,變量名命名規則與大多數編程語言相同,只能使用字母、數字和下劃線,且不能以數字 開頭。gawk變量名稱區分字符大小寫;要定義變量,只要在BEGIN模式中加入變量名等于變量值即可或在命令行中用-v選項定義變量 - 例
awk 'BEGIN{var="variable testing";print var}'
awk -v test="hello awk" 'BEGIN{print test}'
//在awk中打印變量值是不用加$$的,加$符是打印字段。后面不帶文件,只是做一個簡單的演示的時候常用BEGIN。另外,在{}中定義變量時,系統會識別為兩個語句,要用分號隔開。 - printf 命令的使用格式
printf format, item1,item2,...
- 要點:
1、與print命令的最大不同是,print需要指定format
2、format用于指定后面的每個item的輸出格式
3、printf語句不會自動打印行符,如果需要換行,要加上\n - format格式的指示符都以%開頭,后面跟一個字符,如下
%c:顯示字符的ASCII碼
%d, %i:十進制整數
%e, %E:科學計數法顯示數值
%f:顯示浮點數
%g,%G:以科學計數法的格式或浮點數的格式顯示數值
%s:顯示字符串
%u:無符號整數
%%:顯示%本身 - 修飾符
N:顯示寬度
-:左對齊,不用-時是右對齊
+:顯示數值符號 - 例
awk -F: '{printf "%-15s, %-10s\n",$1 $3}' /etc/passwd
//顯示$1和$3時,$1左對齊顯示15個字符串,沒有內容就顯示空白,顯示$3時用10個字符,換行顯示。這里還會顯示一個逗號,這是-15s后面的逗號awk -F: '{printf "%-5d\n",$3}' /etc/passwd
//以十進制顯示每個用戶的id號,左對齊
3、描述awk函數示例(至少3例)
- 可用函數rand()
示例:awk 'BEGIN{print rand()}'
//使用rand()函數只能隨機產生一個數字,這個數字是不會變的
awk 'BEGIN{srand();print rand()}'
//配合使用srand()函數,才成生成一個大于0小于1的隨機數。
awk 'BEGIN{srand();print int(100*rand())}'
//生成一個小于100的隨機整數。使用srand()與rand()乘以100可以得到一個隨機的整數隨機數,用int是為了截取整數部分,如果沒有int,生成的數字會有小數部分。
- 字符串函數
用gsub或sub函數替換某些文本
vim test.txt
Allen Phillips
Green Lee
William Ken Allen
awk '{gsub("l","L",$1);print $0}' test.txt
//用gsub函數將小寫l替換成大寫L,但是替換范圍只限于第一列
awk '{gsub("[a-z]","6",$1);print $0}' test.txt
//將第一段中的小寫字母替換為6,并顯示全部`
awk '{sub("l","L",$1);print $0}' test.txt
//sub只會替換指定范圍內第一次匹配到的符合條件的字符,也就是第一段中的第一個小寫l
1,$2}' awk.txt
//顯示兩段內容時用逗號分隔
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91188
贊,總結的比較詳細,不過awk的例子列舉的比較簡單,可以再深入一下~加油~