1、 描述centos6系統開機啓動流程;2、 描述/etc/rc.d/sysinit腳本功能;
http://lisoy79.blog.51cto.com/10836537/1733265
3,sed:stream editor流編輯器,行編輯器,逐行處理數據
用法:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
pattern space:模式空間,把文本符合定界的行逐行讀取到一個內存空間存放處理,然後通過輸出流輸出到屏幕
script:
常用選項:
-n,靜默模式,不輸出模式空間中的內容到屏幕;
-e:多點編輯功能;一個命令中實現多個操作
-f /path/to/somefile:從文件中讀取事先編輯存成文件的腳本
-r:支持使用擴展正則表達式
-i:編輯原文件,修改原文件
地址定界:
1,不給地址;對全文處理;
2,單地址;
#:第幾行
/pattern/:被模式匹配到的每一行;
3,地址範圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
4, ~: 步進
1~2:讀所有的奇數行:sed-n '1~2p' test.txt
2~2:讀所有的偶數行:sed -n'2~2p' test.txt
編輯命令:
d:刪除
sed'/^#/d' /etc/fstab: 刪除#開頭的行
set '/^$/d' /etc/fstab:刪除空白行
sed '1,4d' /etc/fstab:刪除1到4行
p:命令,顯示模式空間中的內容,
sed '/^UUID/p' /etc/fstab :打印內容兩次
sed -n '/^UUID/p' /etc/fstab :打印內容一次
a \text:在指定範圍的行後面追加文本,支持\n實現多行追加;
sed '/^uuid/a \# hellosed \n welcome' /etc/fstab
i \text: 在指定範圍內的之前添加新行,也支持\n添加多行
sed '/^uuid/i \# hellosed \n welcome' /etc/fstab
c \text:替換行爲單行或多行文本;
sed '/^uuid/c \# hellosed \n welcome' /etc/fstab
w /path/to/filename:把符合範圍內的模式空間中內容存到指定文件
sed '/^uuid/w/tmp/fstab.txt /etc/fstab
= :等於號:顯示符合條件行的行號,爲模式空間中的行打印行號
sed '/^uuid/=' /etc/fstab
r /path/from/somefile:把指定文件讀取到符合條件的模式空間中的行後
sed '6r/etc/issue' /etc/fstab
! :取反條件;對匹配到的行的其它行做編輯操作;
sed '/^UUID/!d' /etc/fstab :除了uuid開頭的行之外都刪除,對地址定界取反
s/ / / :支持使用其他分隔符,s@@@s###; 查找替換命令;
替換標記:
g:行內全局替換
i:忽略大小寫
sed'S@^UUID@uuid@' /etc/fstab:大寫uuid替換爲小寫
後向引用:
sed'[email protected]@&er@g' /etc/passwd: r..t替換爲..ter
僅顯示被替換的行,替換成功則顯示之
sed -n'[email protected]@&er@p' /etc/passwd :只顯示被替換的行
w /path/to/somefile:將替換成功的結果保存到指定文件中
sed -n'[email protected]@&er@w /tmp/fs.txt'/etc/passwd
高級編輯命令:
hold space: 保持空間
patter space:模式空間
h:用模式空間的內容覆蓋到保持空間中
H:把模式空間的內容追加至保持空間中
g:從保持空間中取出內容覆蓋至模式空間;
G:從保持空間中取出內容追加到模式空間;
x:把模式空間和保持空間的內容互換;
n:讀取匹配到的行的下一行至模式空間;會用下一行覆蓋模式空間匹配到的行
N:追加匹配到的行的下一行到模式空間:
d:刪除模式空間中的行;
D:刪除多行模式空間中的所有行
a.txt:
sed -n 'n;p' FILE :顯示偶數行
sed '1!G;h;$!d' a.txt :逆向顯示文件內容
sed '$!N;$!D' a.txt: 取文件後兩行;不是最後一行就追加,不是最後一行就刪除模式空間
sed '$!d' a.txt: 取文件最後一行
sed 'G' a.txt:每行後加入一個空白行
sed 'g' a.txt:全部替換爲空白行
sed '/^$/d;G' a.txt:空白行刪除後再加空白行,每個行後面加一個空白行
sed 'n;d' a.txt: 顯示奇數行
sed -n '1!G;h;$p' a.txt:逆序顯示文件內容;
sed -i -n '1!G;h;$p' a.txt:逆序顯示文件內容,並修改原文件;
GUN awk:
gawk - pattern scanning and processing language 文檔報告生成工具:
基本用法:
gawk [options] 'program' file ...
progarm: pattern{action statements}
statements語句之間用分號分隔
print,printf
選項:
-F:指明輸入時用到的字段分隔符;
-v var=value:自定義變量
cat /etc/fstab
tail -5 /etc/fstab |awk '{print $2,$4}'
輸出命令:
1,pring item1,item2,...
注意:
1,逗號做分隔符;
2,輸出的item可用是字符串,也可以是數值;也可是當前記錄的字段,變量,awk的表達式;
tail -5 /etc/fstab |awk'{print “hello", $2,$4,6}'
tail -5 /etc/fstab |awk'{print “hello:", $1}'
3,省略item,相當執行print$0;
tail -5 /etc/fstab|awk '{print }'
2,變量:
1,內置變量:
FS:input field seperator:輸入分隔字段分隔符,默認空白
OFS: output field seperator,輸出分隔字段分隔符,默認空白字符
awk '{print $1}' /etc/passwd:顯示所有內容,因爲開始沒有空白字符
awk -v FS=':' '{print $1}' /etc/passwd 相當於: awk -F: '{print $1}' /etc/passwd
awk -v FS=':' -v OFS=':''{print $1,$3,$7}' /etc/passwd :指定輸出輸入分隔符
RS:input record seperator,輸入是的換行符號
ORS:output record seperator,輸出的換行符;
awk -v RS=' ' -v ORS='#''{print}' /etc/passwd
NF:number of field:每行的字段數量
awk '{print NF}' /etc/fstab:統計每行有多少個字段;
awk '{print $NF}' /etc/fstab :打印每行的最後一個字段;
NR:number of record:行數:
awk '{print NR}' /etc/fstab :打印每行的行號。和行數
FNR:各文件分別計數行數;
awk '{print FNR}' /etc/fstab /etc/issue:每個文件單獨計數,
awk '{print $NF}' /etc/fstab :打印每行的最後一個字段;
FILENAME:當前正在處理的文件名:
awk '{printFILENAME}' /etc/fstab :每行都顯示一次文件路徑和文件名
awk END'{printFILENAME}' /etc/fstab :只顯示最後一次的路徑和文件名
ARGC:命令行參數的個數
awk '{printARGC}' /etc/fstab/ /etc/issue
awk BEGIN'{printARGC}' /etc/fstab/ /etc/issue
ARGV: 數組,保存命令行中給定的各參數;
awk BEGIN'{printARGV[0]}' /etc/fstab/ /etc/issue
awk BEGIN'{print ARGV[1]}' /etc/fstab/ /etc/issue
2,自定義變量:
1, -v var=value
變量名區分字符大小寫;
2,在program中直接定義
awk -v test='hello gawk' '{print test}' /etc/fstab :打印出/etc/fstab文件行數那麼多的hello gawk
awk -v test='hello gawk' BEGIN'{print test}':只打印一次hellogawk
awk BEGIN'{test="hellogawk" ;print test}'
3,printf命令:
格式化輸出:printfFORMAT, item1,item2,...
1,FORMAT是必須要給出
2,不會自動換行,需要顯示給出換行控制符: \n
3,FORMAT中需要分別爲後面的每個item指定一個格式化符號;
格式符:
%c:顯示字符的ascii碼
%d,%i:顯示十進制整數;
%e,%E:顯示科學計數法數值顯示
%f:顯示浮點數
%g,%G:科學計數或浮點數顯示數值;
%s:字符串
%u:無符號整數;
%%:顯示%號自己;
awk -F: '{printf"%s\n",$1}' /etc/passwd
awk -F: '{printf"username: %s, UID: %d\n",$1,$3}' /etc/passwd
修飾符:
#[.#]:第一個數字控制顯示的寬度,第二個字符表示小數點後面的精度:默認右邊對齊
%3.1f :三個字符寬度,一個小數點
awk -F: '{printf"username: %15s, UID: %3.1f\n",$1,$3}' /etc/passwd
-:表示左對齊
awk -F: '{printf"username: %-15s, UID: %d\n",$1,$3}' /etc/passwd
+:顯示數值的符號:
4,操作符
算術運算操作符:+ - * / ^次方, %取模
-x:整數轉負數
+x:字符串轉爲數值
字符串操作符:
沒有符號的操作符,字符串鏈接;
賦值操作符: = +=-= *= /= %= ……=
++ , --
比較操作符:
> >=<= != ==
模式匹配符:
~ :匹配,左側的字符串是否能被右邊的模式所匹配
!~:是否不匹配:左側的字符串是否不能被右邊的模式所匹配
邏輯操作符:&&, ||, !
條件表達式:
selector:挑選器,
awk -F:'{$3>=500?usertype="common user":usertype="sysadmin orsysuser";pringf"%15s:%-s\n",$1,usertype}' /etc/passwd
5,PATTERN
類似地址定界符
1, empty:空模式:處理文本的每一行,匹配任意行;
2,/regulaarexpression/:能被表達式匹配到的行才被處理;
awk '/^UUID/{print $1}' /etc/fstab
awk '!/^UUID/{print $1}' /etc/fstab
3,relationalexpression:關係表達式:結果有真有假,結果爲真的才被處理,
真:結果爲非0值,非空字符串: awk-F: '$3>=1000{pring $1,$3}' /etc/passwd
找/bash的用戶: awk -F: '$NF=="/bin/bash"{print$1,$NF} ' /etc/passwd
awk-F: '$NF~/bash$/ {print $1,$NF} ' /etc/passwd :顯示bash結尾的:
4,line ranges:行範圍地址定界:startline,endline:指定起始行號:
awk -F:'(NR>=10&&NR<=20){print $1}' /etc/passwd
注意:不支持直接給出數字範圍的格式
/pat1/,/pat2/:從模式1到模式2直接匹配到的行,
如: awk -F:'/^r/,/^u/{print $1}' /etc/passwd
5,BEGIN/END模式:
BEGIN{}:表示僅在開始處理文件中的文本之前執行一次的程序;
END{};僅在文本處理完成之後命令結束之前處理執行一次;
awk -F: 'BEGIN{print " username uid \n------"}{print $1,$3}END{print"=====\n end "}'/etc/passwd
6,控制語句:
1 if-else
語法: if(condition) statement [else statement]
awk -F: '{if($3>=1000) {printf "commonuser : %s\n",$1}
else { printf “roo or sysuser:%s\n",$1}}' /etc/passwd
2 while循環:
語法:while(condition) statement
awk'/^[[:space:]]*linux16/{i=1;while(i<=NF) {printf $i,length($i);i++}}'/etc/grub2.cfg
3 do-while循環
語法: do statement while(condition)
4 for循環
語法: for(expr1;expr2;expr3) statement
awk'/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}'/etc/grub2.cfg
5 next:提前結束對本行的處理,直接進入下一行
awk -F: '{if($3%2!=0)next; print $1,$3}' /etc/passwd
7 array數組
awk'BEGIN{weekdays["mon"]="monday";weekdays["tue"]="tuesday";for (i in weekdays) {print weekdays[i]}}'
8,函數
9.1 內置函數
數值處理:
rand():返回0和1之間的隨機數:
awk 'BEGIN{print rand()}'
字符串處理:
length([s]):返回指定字符串的長度;
sub(r,s,[t]):表示以r所表示的模式來查找t所表示的字符串中的匹配的內容,
並將其第一次出來替換爲s所表示的內容;
awk -F: '{sub(o,O,$1)}' /etc/passwd
4、寫一個腳本,生成10個隨機數,並按從小到大進行排序(要求至少使用2中方法)
方法一:
方法二:
5、在每週二的凌晨1點5分執行腳本/data/get_username.sh,並將腳本的輸出至/tmp/get_username.log日誌文件中;
crontab –e
5 1* * 2 /data/get_username.sh >> /tmp/get_username.log
6、寫一個腳本:如果某路徑不存在,則將其創建爲目錄;否則顯示其存在,並顯示內容類型;
7、寫一個腳本,打印9X9乘法表;
8、描述dns的工作流程,以及完整搭建一套dns主從服務器,相關域名和ip可自行設定。
DNS http://lisoy79.blog.51cto.com/10836537/1735611