centos系統開機啓動流程

                         

 

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:  刪除#開頭的行

wKioL1ax1oTCVACMAAGGuRzcQ1o440.jpg

                       set '/^$/d' /etc/fstab:刪除空白行

                       sed '1,4d' /etc/fstab:刪除14

                    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  

                           wKioL1ax1pzzHk1HAASklSFgaQw378.jpg

                    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:

wKioL1ax1rnAmxd7AABu2DQv7DU948.jpg

           sed -n 'n;p' FILE :顯示偶數行

           wKioL1ax1smhkISmAABiBrqWIT0469.jpg

           sed '1!G;h;$!d' a.txt :逆向顯示文件內容

            wKioL1ax1tXShm6WAAByibzNZK4935.jpg 

           sed '$!N;$!D' a.txt:  取文件後兩行;不是最後一行就追加,不是最後一行就刪除模式空間

            wKiom1ax1pWg7s_YAAAZZtzoycA743.jpg

           sed '$!d'  a.txt: 取文件最後一行

            wKiom1ax1rCSYNJ7AAAYZXdafFM997.jpg

           sed 'G'  a.txt:每行後加入一個空白行

            wKioL1ax1wyTxfExAAB8-tCt5fE483.jpg

           sed 'g'  a.txt:全部替換爲空白行

            wKioL1ax1xnQ-IzKAABbu-bAajU948.jpg

           sed '/^$/d;G'   a.txt:空白行刪除後再加空白行,每個行後面加一個空白行

            wKioL1ax1yrQo6cWAAB5z2soX-g110.jpg

           sed 'n;d' a.txt: 顯示奇數行

            wKioL1ax1zjiLtegAABtXavGyXA560.jpg

           sed -n '1!G;h;$p'  a.txt:逆序顯示文件內容;

            wKioL1ax12qjnW-IAABp01eI4Uw690.jpg

            sed -i -n '1!G;h;$p'  a.txt:逆序顯示文件內容,並修改原文件;

wKioL1ax15Hi6RRzAACf4Ah5AYs204.jpg

 

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}'

     輸出命令:

          1pring  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,...

                         1FORMAT是必須要給出  

                         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結尾的:

                  4line 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  

           5BEGIN/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():返回01之間的隨機數:

awk 'BEGIN{print rand()}'

          字符串處理:

          length([s]):返回指定字符串的長度;

           sub(r,s,[t]):表示以r所表示的模式來查找t所表示的字符串中的匹配的內容,

並將其第一次出來替換爲s所表示的內容;

               awk -F: '{sub(o,O,$1)}'  /etc/passwd

 

4、寫一個腳本,生成10個隨機數,並按從小到大進行排序(要求至少使用2中方法)

     方法一:

wKioL1ax16qwsABXAAFqXoAPzZI925.jpg

方法二:

wKioL1ax17mQ5B4pAAEJ9WgY0pw840.jpg

 

5、在每週二的凌晨15分執行腳本/data/get_username.sh,並將腳本的輸出至/tmp/get_username.log日誌文件中;

 crontab –e

  5 1* * 2 /data/get_username.sh >> /tmp/get_username.log

6、寫一個腳本:如果某路徑不存在,則將其創建爲目錄;否則顯示其存在,並顯示內容類型;

wKioL1ax193hiCXuAAFQoKPUqsk778.jpg

   7、寫一個腳本,打印9X9乘法表;

wKioL1ax2D_Qj13bAAHnP2eqJsE077.jpg

   8、描述dns的工作流程,以及完整搭建一套dns主從服務器,相關域名和ip可自行設定。

       DNS  http://lisoy79.blog.51cto.com/10836537/1735611

 

 

 

                           


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章