linux運維實戰練習-2016年1月19日-2月3日課程做業(練習)

 1、描述centos6系統開機啓動流程;mysql

    (1):首先按下開機按鈕,POST:電源加電,計算機經過BIOS來調用CMOS中各個硬件設備的配置信息。linux

    CMOS:CMOS是集成在主板上的一塊可讀寫的RAM芯片,主要是用來保存當前系統硬件配置和操做人員對某些參數的設定,因爲主板給CMOS提供也一塊單獨供電的電池,因此不管系統是關機仍是忽然斷電,CMOS的設定是不會丟失的。正則表達式

    BIOS:因爲CMOS芯片只是一塊存儲器,只具備保存數據的功能,因此計算機廠商把CMOS設置程序作到了BIOS裏面,開機按下特定的按鈕就能進入其中進行查看和設置,因此CMOS設置人們也叫作BIOS設置。sql

    (2):BIOS會執行開機自檢,而後開始執行硬件檢測和初始化,以後BIOS根據boot Sequence按次序查找各引導設備有沒有MBR,第一個找到MBR的設備即爲本次啓動要用到的設備shell

    MBR:MBR即主引導記錄,硬盤的0柱面、0磁頭、1扇區稱爲主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT和分區有效標誌。在總共512字節的主引導扇區裏主引導程序(boot loader)佔446個字節,第二部分是分區表,即DPT,佔64個字節。第三部分是magicnumber,佔2個字節。express

    (3):讀取並執行第一個啓動設備內MBR的bootLoader(即grub等程序)。apache

    GRUB:他的做用提供一個菜單,容許用戶選擇要啓動系統或不一樣的內核版本,把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核;vim

    GRUB分爲三個階段:stage 1,stage1.5, stage 2centos

    當進入系統秒讀的時候,按下任意鍵就能進入GRUB選擇菜單界面,以下圖數組

                             

wKioL1a_LJ_gSIMbAABGroag-JI667.png


    提示按下e健能夠進入編輯模式,以下圖

wKioL1a_LK3CgzHAAABhMaUKjlk538.png

    方框內第一行表明boot目錄所在的位置,此處爲第一個磁盤第一個分區,

    方框內第二行表示內核所在位置以及版本號

    方框內第三行是一個虛擬文件系統,可經過這個文件系統可找到根分區位置 以方便內    核找到根分區、init程序、以及必要的驅動程序、庫文件

    在這個見面中,選擇一個選項按下e健,表示對你選擇的選項進行修改,好比選擇第一    行以下圖:

wKioL1a_LLfA9DiUAAA6WBQoQvE057.png

    在圖一和圖二界面中直接按下c健能夠直接進入GRUB命令行界面,這裏能夠手動指定內核和initrd。

    (4)GRUB經過GRUB2找到內核,GRUB將CPU的控制權交給內核,CPU將控制器轉交給內核,內核首先進行自身初始化,包括探測可識別到的全部硬件設備;加載硬件驅動程序;(有可能會藉助於ramdisk加載驅動);以只讀方式掛載根文件系統;運行用戶空間的第一個應用程序:/sbin/init;

    由於kernel沒法識別磁盤,因此要藉助ramdisk(虛擬文件系統)的獲取磁盤的驅動程序。CentOS 6中的虛擬文件系統是initramfs,內核經過該程序加載啓動過程當中所須要的內核模塊,也就是USB,RAID,LVM。SCSI等文件系統與硬盤接口的驅動程序,等加載完成以後,內核就會調用/sbin/init來開始後續的正常啓動流程

    (5)調用/sbin/init程序

    /sbin/init最主要的功能就是主板軟件執行的環境,其配置文件是/etc/inittab和/etc/init/*.conf

    /etc/inittab:這裏面定義了系統啓動的執行等級,系統初始化流程的文件,七個運行等級須要啓動的服務路徑;

    run level 運行等級:

        init 0:表示關機

        init 1:單用戶模式(root, 無須登陸),系統出問題時的維護

        init 2:多用戶模式,會啓動網絡功能,但不會啓動NFS

        init 3:多用戶模式,純文本界面;

        init 4:預留級別;

        init 5:多用戶模式,圖形界面;

        init6:表示重啓

    id:3:initdefault:        表示默認開機級別爲3,自動進入命令行界面

    si::sysinit:/etc/rc.d/rc.sysinit   系統初始化環境執行的腳本文件路徑

    七個不一樣級別要啓動的script路徑

    l0:0:wait:/etc/rc.d/rc 0

    l1:1:wait:/etc/rc.d/rc 1

    l2:2:wait:/etc/rc.d/rc 2

    l3:3:wait:/etc/rc.d/rc 3

    l4:4:wait:/etc/rc.d/rc 4

    l5:5:wait:/etc/rc.d/rc 5

    l6:6:wait:/etc/rc.d/rc 6

    (6)系統初始化

        (a)      設置主機名

        (b)      設置歡迎界面

        (c)      激活udev和selinux 

        (d)      掛載/etc/fstab文件中定義的文件系統

        (e)      檢測根文件系統,並以讀寫方式從新掛載根文件系統

        (f)      設置系統時鐘

        (g)      激活swap設備

        (h)      根據/etc/sysctl.conf文件設置內核參數

        (i)      激活lvm及software raid設備(硬raid是在開機時啓動的)

        (j)  加載額外設備驅動程序

        (k)  清理操做

    (7)執行 /etc/rc.d/rc 腳本

            此腳本用來來控制系統啓動的時候啓動或者關閉那些服務,這些腳本是否開機自啓動,可由 chkconfig 命令來管理。

    (8)最後會執行 /bin/login 登陸用戶。至此係統啓動過程完成。

 

 2、描述/etc/rc.d/rc.sysinit腳本功能;

    (1)、獲取主機名,讀取/etc/sysconfig/network配置文件,獲取主機的默認網關的網絡環境

    (2)、測試與掛在內核設備/proc記憶USB設備/sys,若是有USB設備則會主動加載USB設備的驅動程序,而且掛在USB的文件系統

    (3)、是否啓動SELinux

    (4)、啓動系統的隨機數生成器,隨機數生成器能夠幫助系統進行一些密碼演算的功能,在此須要啓動兩次隨機數生成器。

    (5)、設置屏幕的默認字體

    (6)、設置啓動是的歡迎界面

    (7)、設置系統時間和時區

    (8)、設備接口的檢測

    (9)、用戶自定義模塊的加載

        用戶可在/etc/sysconfi.modules/*.modules中加入自定義的模塊

    (10)、加載內核相關信息

        系統會主動讀取/etc/sysctl.conf配置文件裏面的設置值

    (11)、設置主機名和初始化電源管理模塊

    (12)、初始化軟件磁盤陣列,主要經過/etc/mdadm.conf來設置

    (13)、初始化LVM的文件系統功能

    (14)、以fsck檢測磁盤文件系統

    (15)、從新以可讀寫模式掛載系統磁盤

    (16)、啓動quota(顯示磁盤使用狀況和配額)功能,

    (17)、啓動系統僞隨機數生成器

    (18)、清楚系統啓動過程的臨時文件

    (19)、將啓動相關信息加載/va/log/dmesg文件中

   

 3、總結文本處理工具sed及awk的用法;(必須附帶示例)

    這裏以/data/sed.test文件爲例

    cat /data/sed.test

    Hello word!

    My name is LouIS

    Never forget to say 「thanks」.

    Believe in yourself.

    I can because i think i can.

    Never say die.

 

 

sed:

    sed是一個行編輯器,他不會編輯原文件,而是一次讀取一行到sed本身的緩存空間,這個緩存空間叫作模式空間,sed在模式空間完成編輯以後,將編輯以後的內容打印至屏幕或者指向目標文件,他不作原地編輯。若是不是刪除命令,大多數編輯的內容都會打印至屏幕。

    sed還有一個保持空間,前一個sed編輯沒有完成要處理下一個sed編輯,把以前一個保存在sed的保持空間裏。

    語法格式:sed [OPTION]... ‘sed腳本’ inputfile...

    [OPTION]: 經常使用選項

        -n:靜默模式,默認sed會輸出模式空間裏面的內容,-n是不輸出模式空間類容至屏幕,除非單獨指定的類容

        -e:多點編輯功能,在一個sed命令實現過個編輯操做

        -f:-f/path/to/script_file:從指定文件中讀取編輯腳本

        -r:支持使用擴展的正則表達式

        -i:原處編輯,就是修改原文件

    地址定界原理:

        1、不給地址:對全文進行處理

            若是不給指定的行,或者範圍,sed命令將對全文進行處理

        2、只給一個地址:單地址

            #:數字,指定的行

                這個地方指數字,表明行

            /pattern/:被此處模式所可以匹配到的每一行

                這裏表示匹配的字符串所在的行

 

        3、地址範圍:

            #,#

                指定行之間,例如1,5 表示第一行到第五行

            #,+#

                例如:1,+3表示第一行到加上3的行數之間

        4、~步進

            1~2,顯示基數行

            2~2,顯示偶數行

 

    sed腳本的編輯子命令

        1、d:表示刪除給定的行

            示例:

            刪除/data/sed.test文件中以Never開頭的行                                       

[root@localhost data]# sed'/^Never/d' /data/sed.test
                Helloword!
                Myname is LouIS
                Believein yourself.
                I can because i think i can.


 

            刪除/data/sed.test文件中第2行

          

  [root@localhostdata]# sed '2d' /data/sed.test
            Helloword!
            Neverforget to say 「thanks」.
            Believein yourself.
            Ican because i think i can.
            Never say die.


 

            刪除/data/sed.test文件中第2-5行

          

  [root@localhostdata]# sed '2,5d' /data/sed.test
            Helloword!
            Never say die.


 

        2、p:顯示模式空間中匹配到的行的內容

            示例:

           

 sed '/^root/p' /data/sed.test
            [root@localhostdata]# sed '/^Never/p' /data/sed.test
            Helloword!
            Myname is LouIS
            Neverforget to say 「thanks」.
            Neverforget to say 「thanks」.
            Believein yourself.
            Ican because i think i can.
            Neversay die.
            Never say die.


            這個命令顯示文件全部內容,而且把匹配到的行打印兩遍,由於他是打印命令,不過不知名須要打印內容,默認所有顯示,因此p命令通常跟-n參數一塊兒使用

          

  [root@localhostdata]# sed -n '/^Never/p' /data/sed.test
            Neverforget to say 「thanks」.
            Never say die.


    3、a :追加文本之符合條件行的下一行,支持多行追加  格式:a \text

        示例:

            在/data/sed.test文件中Never開頭的行下面追加Long live China

         

  [root@localhostdata]# sed '/^Never/a \Long live China' /data/sed.test 
           Helloword!
           Myname is LouIS
           Neverforget to say 「thanks」.
           Longlive China
           Believein yourself.
           Ican because i think i can.
           Neversay die.
           Long live China


    4、i:在符合條件行的上一行添加一行,支持多行添加   格式:i \text

       示例

           在/data/sed.test文件中Never開頭的行上面面追加Long live China

       

    sed '/^Never/i \Long live China' /data/sed.test
           [root@localhost~]# sed '/^Never/i \Long live China' /data/sed.test
           Helloword!
           Myname is LouIS
           Longlive China
           Neverforget to say 「thanks」.
           Believein yourself.
           Ican because i think i can.
           Longlive China
           Never say die.


    5、c:把符合條件的行替換成指定的行,支持多行替換 格式:c \text

       示例:

           把/data/sed.test文件中以Never開頭的行替換成Long live China

         

  [root@localhost~]# sed '/^Never/c \Long live China' /data/sed.test
           Helloword!
           Myname is LouIS
           Longlive China
           Believein yourself.
           Ican because i think i can.
           Long live China


    6、w:把符合條件內容的行另存爲指定文件中  格式:w /path/to/some

       示例:

       把/data/sed.test文件以Never開頭的行另存爲/data/sed.test1裏面

      

 [root@localhost data]# sed -n '/^Never/w /data/sed.test1'/data/sed.test
       [root@localhostdata]# cat /data/sed.test1
       Neverforget to say 「thanks」.
       Never say die.


      

    7、r:讀取指文件的內容,放置符合條件行的後面 格式:r /path/to/some

       示例:

       把/etc/sysconfig/network-scripts/ifcfg-eth0文件內容放置/data/sed.test文件中以Never開頭行的後面

     

  [root@localhostdata]# sed '/^Never/r /etc/sysconfig/network-scripts/ifcfg-eth0' /data/sed.test
       Helloword!
       Myname is LouIS
       Neverforget to say 「thanks」.
       DEVICE=eth0
       HWADDR=00:0C:29:E7:CA:5F
       TYPE=Ethernet
       UUID=5004c3f9-33d7-42e9-9e6d-5a947988174d
       ONBOOT=yes
       NM_CONTROLLED=yes
       BOOTPROTO=dhcp
       Believein yourself.
       Ican because i think i can.
       Neversay die.
       DEVICE=eth0
       HWADDR=00:0C:29:E7:CA:5F
       TYPE=Ethernet
       UUID=5004c3f9-33d7-42e9-9e6d-5a947988174d
       ONBOOT=yes
       NM_CONTROLLED=yes
       BOOTPROTO=dhcp


 

    8、=:顯示符合條件行的行號

       顯示/data/sed.test文件有Never字符串行的行號

      

      

 [root@localhostdata]# sed '/Never/=' /data/sed.test
       Helloword!
       Myname is LouIS
       3
       Neverforget to say 「thanks」.
       Believein yourself.
       Ican because i think i can.
       6
       Never say die.


       只顯示行號則能夠加上-n參數

 

    9、!:取反條件,他是對地址定界去反

       示例:

       刪除/data/sed.test文件中不是以Never開頭的全部行

      

 [root@localhostdata]# sed '/^Never/!d' /data/sed.test
       Neverforget to say 「thanks」.
       Never say die.


    10、s:查找和替換

       格式:s/原內容/替換後的內容/  也能夠是用其餘分隔符@@@,###等

       把/data/sed.test內容中Never字符刪了

      

 [root@localhostdata]# sed 's#Never##' /data/sed.test
       Helloword!
       Myname is LouIS
       forget to say 「thanks」.
       Believein yourself.
       Ican because i think i can.
       saydie.


       把/data/sed.test內容中name改成大寫

     

  [root@localhostdata]# sed 's@name@NAME@' /data/sed.test
       Helloword!
       MyNAME is LouIS
       Neverforget to say 「thanks」.
       Believein yourself.
       Ican because i think i can.
       Never say die.


       把/data/sed.test內容Never字符串後面加空格和China

       

 [root@localhostdata]# sed 's/Never/& China/' sed.test
        Helloword!
        Myname is LouIS
        NeverChina forget to say 「thanks」.
        Believein yourself.
        Ican because i think i can.
        Never China say die.


        &表示原內容

 

    sed高級編輯命令:

       h:把模式空間中的內容行覆蓋至保持空間中,保持空間的內容行會丟失

       H:把模式空間中的內容行追加至保持空間中,保持空間的內容行不會丟失

       g:從保持空間取出內容行覆蓋至模式空間

       G:從保持空間取出內容行追加至模式空間

       x:把模式空間的內容行與保持空間的內容行進行互換

       n:讀取匹配到行的下一行至模式空間

       N:追加匹配到行的下一行至模式空間

       d:刪除模式空間中的行,

        D:刪除多行模式空間中的全部行

 

    一些表達式

        sed-n 'n;p' /etc/passwd    顯示偶數行

        sed '1!G;h;$!d' /etc/passwd   逆向顯示文件內容

        sed'$!N;$!D' /etc/passwd  顯示文件後兩行

       sed '$!d' /etc/passwd想·  顯示文件最後一行

       sed 'G' /etc/passwd  在每一行後面添加空白行

       sed 'g' /etc/passwd  全部行都用空白代替

       sed '/^$/d;G' /etc/passwd  在每一行添加一個空白行,多個空白行合併成一個空白行

       sed 'n;d' /etc/passwd   顯示基數行

        sed -n '1!G;h;$p' /etc/passwd  逆向顯示文件內容

 

awk

    awk是一個強大的文本分析工具, 簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理.

    awk有三個版本,通常未作說明的默認是gawk,也就是GNU版本的awk,在linux上使用awk默認就是gawk,awk是個符號鏈接,指向gawk。

    基本用法:awk [option] 'program' FILE...

    option:選項

        -F:指明分隔符,若是不知名默認分隔符是空白字符

        -v:var=value自定義變量

    program:awk語句

        pattern:模式,(後面再說)

        action:動做

            print:打印

            printf:格式化打印

 

    輸出命令:

        1、print:打印

            格式:print item1,itme2...

            print後面接字段item,這些item能夠是數值也能夠是字符串,變量或awk的表達式,多個字段要用都好隔開,若是不指定字段,默認全文打印。

            示例:

            打印/etc/passwd文件中第一字段和第四字段

         

   awk -F: '{print $1,$4}' /etc/passwd
            root0
            bin1
            daemon2
            adm3
            lp 4
            ...


        2、變量

            2.1、內建變量

                FS:input field seperator 默認爲空白字符

                    輸入時使用的字段分隔符,也就是文件中要使用什麼做爲字段分隔的字符

                顯示/etc/passwd中第一字段和第六字段

               

 awk -v FS=':' '{print $1,$6}' /etc/passwd,和-F的意思差很少
                root/root
                bin/bin
                daemon/sbin
                adm/var/adm
                lp /var/spool/lpd


 

                OFS:output field seperator 默認爲空白字符

                    輸出時使用的字段分隔符,輸入至屏幕時用什麼分隔符來分隔字段

                顯示/etc/passwd中第一字段和第六字段,而且用冒號分割輸出內容

              

  awk -v FS=':' -v OFS=':' '{print $1,$6}' /etc/passwd
                root:/root
                bin:/bin
                daemon:/sbin
                adm:/var/adm
                lp:/var/spool/lpd


 

                RS:input record seperator

                    輸入時的換行符

                ORS:output record seperator

                    輸出時的換行符

                NF:number of field 默認分隔符爲空白

                    每一行的字段數量

                查看/etc/passwd每一行的字段數量

               

 awk -F: '{print NF}' /etc/passwd cord
                7
                7
                7
                7
                7
                NR:number of record

   

                    文件中的行數

               

awk '{print NR}' /etc/passwd
                1
                2
                3
                4
                5
                6
                ....


               

                FNR:各文件分別計數,後面能夠接不一樣文件

                FILENAME:當前正在處理的文件的文件名

           

     awk -F: '{print FILENAME }' /etc/passwd


                ARGC:命令行參數的個數

              

  awk -F: '{print ARGC}' /etc/passwd


                ARGV:數組,保存的是命令行所給定的各參數,

                    查看你輸入命令中參數,要用ARGV[0|1|2...]來實現

           

     awk '{print ARGV[0]}' /etc/passwd
                awk
                awk
                ....


 

            2.2、自定義變量

                2.2.1、-v var=value變量名區分字符大小寫

                (2)在program中直接定義

 

        3、printf命令  

            安裝給定的格式輸出匹配到的字段內容

            格式:printf FORMAT,item1,item2...

            3.1、FORMAT必須給出

            3.2、printf不會自動換行,須要顯示給出換行控制符:\n

            3.4、FORMAT中須要分別給後面的每一個item指定一個格式化符號

            格式符:

                %c:顯示字符的ASCII碼

                %d,%i:顯示十進制整數

                %e,%E:科學計數法數值顯示

                %f,顯示浮點數

                %g,%G:以科學計數法或浮點形式顯示數值

                %s: 顯示字符串

                %u:無符號整數

                %%:顯示%自身

            修飾符:是來修飾格式符的

                #[.#]: 第一個數字用來控制顯示的寬度,第二個字符表示小數點後的精度

                    3.1f

                -: 左對齊

                +:顯示數值的符號

 

            示例:

          

  一、awk -F ':' '{printf "Username: %s\n",$1}' /etc/passwd    
            Username:root
            Username: bin
            Username: daemon
            Username: adm
            ...
            若是不給換行符:\n,顯示內容以下:
            Username: rootUsername: binUsername: daemonUsername:admUsername: lpUsername: syncUsername:        shutdownUsername: haltUsername:mailUsername: uucpUsername: operatorUsername: gamesUsername:        gopherUsername:ftpUsername: nobodyUsername: dbusUsername: usbmuxdUsername: vcsaUsername:           rpcUsername:rtkitUsername: avahi-autoipdUsername: abrtUsername: rpcuserUsername:               nfsnobodyUsername: haldaemonUsername:gdmUsername: ntpUsername: apacheUsername:                 saslauthUsername: postfixUsername:mysqlUsername: pulseUsername: sshdUsername: tcpdump


        默認是不帶換行的,因此必要的時候必定要加換行符

      

  二、awk -F ':' '{printf"Username: %15s, UID: %d\n",$1,$3}' /etc/passwd
                Username:            root, UID: 0
                Username:             bin, UID: 1
                Username:          daemon, UID: 2
                Username:             adm, UID: 3   
                 默認是作對齊,若是要由對齊,以下
                awk -F ':' '{printf"Username: %-15s, UID: %d\n",$1,$3}' /etc/passwd
                Username: root           , UID: 0
                Username: bin            , UID: 1
                Username: daemon         , UID: 2
               Username: adm            , UID: 3
                Username: lp             , UID: 4


 

    4、操做符

                算術操做符:

                    x+y,x-y,x*y,x/y,x^y,x%y

                    -x

                    +x: 轉換爲數值

 

                字符串操做符:沒有符號操做符,表示字符串鏈接

 

                賦值操做符:

                    =,+=,-=,*=,/=,%=,^=

                    ++,--

 

                比較操做符:

                    >,>=,<,<=,!=,==

 

                模式匹配符:

                    ~:左側字符串是否能被右側模式匹配

                    !~:相反

 

                邏輯操做符:

                    &&:與

                    ||:或

                    !:非

 

                函數調用:

                   function_name(argu1,argu2...)

 

                條件表達式:

                   selector?if-true-expression:if-flse-expression

            示例:

                判斷是不是系統用戶

            

    awk -F ':''{$3>=500?usertype="Common User":usertype="Sysadmin orSysUser";printf "%15s:%-s\n",$1,usertype}' /etc/passwd
 
           root:Sysadmin or SysUser
            bin:Sysadmin or SysUser
        daemon:Sysadmin or SysUser
            adm:Sysadmin or SysUser
             lp:Sysadmin or SysUser


 

        5、PATTERN

            5.1、empty:空模式,匹配每一行,以上示例用的都是這個模式

 

            5.2、/regular expression/: 僅處理可以被此處模式匹配到的行

                示例:僅處理root開頭的行

             

   awk '/^root/{print $1}'/etc/passwd  
                root:x:0:0:root:/root:/bin/bash


                還能夠取反

              

  awk '!/^root/{print $1}'/etc/passwd
                bin:x:1:1:bin:/bin:/sbin/nologin
                daemon:x:2:2:daemon:/sbin:/sbin/nologin
                adm:x:3:4:adm:/var/adm:/sbin/nologin
                lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
                sync:x:5:0:sync:/sbin:/bin/sync
                    ....


           

            5.3、relational expression:關係表達式,結果有真有假

                結果爲真才被處理,結果爲假被過濾掉

                真:結果爲非0值,非空字符串

                假:1,空字符串

               

                示例:

                    判斷用戶是不是系統用戶

               

     awk -F: '$3>=500{print$1,$3}' /etc/passwd
                    nfsnobody 65534
                    user1 500
                    user2 501
                    user3 502
                    user4 503
                    user5 504
                    user6 505
                    user7 506
                    user8 507
                    user9 508
                    user10 509


                    顯示shell爲/bin/bash的用戶名

                

    awk -F: '$NF=="/bin/bash"{print$1,$NF}' /etc/passwd 或
                    awk -F: '$NF~/bash$/{print$1,$NF}' /etc/passwd
                    root /bin/bash
                    mysql /bin/bash
                    user1 /bin/bash
                    user2 /bin/bash
                   user3 /bin/bash
                    user4 /bin/bash
                    user5 /bin/bash
                    user6 /bin/bash
                    user7 /bin/bash
                    user8 /bin/bash
                    user9 /bin/bash
                    user10 /bin/bash


       

       

        5.4、line ranges:行範圍

            /pat1/,/pat2/  只支持字符串格式,

            注意:不支持直接給出數字的格式

            示例:

            以root開頭行開始到以tcp開頭的行結束

        

    awk -F: '/^root/,/^tcp/{print $1}'/etc/passwd或
            awk -F: '(NR>=2&&NR<=10){print$1}' /etc/passwd


 

        5.5、BEGIN/DEN模式

           BEGIN{}:僅在開始處理文件中的文本以前執行一次

           在執行咱們處理以前給出一個模式,他只執行一次,後面跟着執行的內容

           示例

         

  awk -F: 'BEGIN{print "     username     uid   \n--------------------"}{print $1,$3}' /etc/passwd


           END{}:僅在文件處理完成以後執行一次

        

   awk -F: 'BEGIN{print "     username     uid   \n--------------------"}{print $1,$3}END{print"==================\n end      "}' /etc/passwd


           這個有點自定義格式的意思

 

        6、經常使用的action

                6.1、Expressions

                6.2、Control statements:if,while等

                6.3、Conpound statements:組合語句:

                6.4、input statements 輸入語句

                6.5、output statements 輸出語句



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

    [root@localhost data]# vim paixu1.sh
    #!/bin/bash
    for ((for i=1; i<=10; i++)); do
        echo $RANDOM
    done | sort -n
    [root@localhost data]# bash -n paixu1.sh
    [root@localhost data]# bash paixu1.sh
    2771
    5516
    10587
    14848
    17526
    22253
    22798
    23120
    27576
    32670

   

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

   

 [root@localhost data] 5 1 * * 2 /data/get_username.sh >>/tmp/get_username.log


   

 6、寫一個腳本:若是某路徑不存在,則將其建立爲目錄;不然顯示其存在,並顯示內容類型;

    [root@localhost data]# vim directroy .sh
    #!/bin/bash
    read -p 'Enter a directroy:' directroy
    if [ !-e "$directroy" ]; then
        mkdir -r $directroy
    else
            echo "$directroy is existence"\n
        ll -d $directroy \n
        ls
    fi
    [root@localhost data]# bash -n directroy.sh
    [root@localhost data]# bash directroy.sh
    Enter a directroy: /data
    /data is existencen
    drwxr-xr-x. 2 root root 4096 1月  2922:00 /data
    99for.sh    cjuser.sh    ml.txt    passwd     passwd.sed  ping.sh  sed.test  text.txt
    99while.sh  directroy.sh  o ai menglei passwdlist  ping2.sh    plt.txt  sed.test1 userlist
    [root@localhost data]# [root@localhost data]# bash directroy.sh
    Enter a directroy: /panlitao/LouIs
    /panlitao/LouIs create success
    [root@localhost data]# ls /
    bin   data  etc  lib    lost+found  misc net  panlitao  root  selinux sys  usr
    boot  dev   home lib64  media       mnt  opt  proc      sbin srv      tmp  var
    [root@localhost data]# ls /panlitao
    LouIs


 

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

 

   [root@localhost data]#vim 99for.sh
    #!/bin/bash
    for j in [1..9]; do
        for i in $(seq 1 $j); do
            echo -e -n "${i}X${j}=$[$i*$j]\t"
        done
        echo
    done
    [root@localhost data]#bash -n 99for.sh
    [root@localhost data]#bash 99for.sh
    1X1=1   
    1X2=2   2X2=4   
    1X3=3   2X3=6   3X3=9   
    1X4=4   2X4=8   3X4=12  4X4=16  
    1X5=5   2X5=10  3X5=15  4X5=20  5X5=25  
    1X6=6   2X6=12  3X6=18  4X6=24  5X6=30  6X6=36  
    1X7=7   2X7=14  3X7=21  4X7=28  5X7=35  6X7=42  7X7=49  
    1X8=8   2X8=16  3X8=24  4X8=32  5X8=40  6X8=48  7X8=56  8X8=64  
    1X9=9   2X9=18  3X9=27  4X9=36  5X9=45  6X9=54  7X9=63  8X9=72  9X9=81

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

工做流程:


Client(請求) --> hosts文件 --> DNS Server(recursion) 

                Local Cache(本地緩存) --> DNS Server(遞歸)--> Server Cache(服務緩存) --> iteration(迭代)--> 根 --> 頂級域 --> 二級域 --> 三級域 --> ......

            首先不管是Linux或者Windows,客戶端發起請求,系統不會第一個請求DNS服務器,而是查找hosts文件,若是hosts文件沒有請求的內容,他就會請求DNS服務器,DNS服務器首先會去查找本地DNS服務器的緩存,緩存也沒有結果就會請求本身定義的主DNS服務器,而主DNS服務器也不會直接當即把請求轉發出去,而是轉給Server本身的緩存,若是裏面尚未的話纔會把請求轉發出,作迭代處理。


服務器搭建

正向解析

一、配置緩存名稱服務器

主要是修改主配置文件:/etc/named.conf

[root@CentOS6 named]#cp /etc/named.conf /etc/named.conf.bat
[root@CentOS6 named]#vim /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";     
        dump-file       "/var/named/data/cache_dump.db";    
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";




更改內容:

第一部分:

listen-on port 53 { 127.0.0.1; };

listen-on port 53 { 192.168.0.105; 127.0.0.1; };


第二部分:

dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto;

bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

這些內容註釋掉


第三部分:

allow-query     { localhost; };

allow-query     { any; };  或者註釋掉



二、配置主DNS服務器

(1)、在緩存名稱服務器中添加自定義zone

[root@CentOS6 named]#vim /etc/named.rfc1912.zone
zone "hongying.com" IN {
    type master;
    file "hongying.com.zone"
};

檢查語法:named-checkconf

(2)、定義區域解析庫文件

[root@CentOS6 named]#cd /var/named
[root@CentOS6 named]#vim hongying.com.zone   建立一個文件
$TTL 86400
$ORIGIN hongying.com.
@INSOAns1.hongying.com. admin.hongying.com (
201602052200
1H
5M
7D
1D )
INNSns1
INNSns2
INMX  10  mx1
IN      MX  20  mx2
ns1INA192.168.0.105
ns2     IN      A       192.168.0.106
mx1     IN      A       192.168.0.107
mx2     IN      A       192.168.0.108 
www     IN      A       192.168.0.105


檢查語法:

[root@CentOS6 named]# named-checkzone "hongying.com" /var/named/hongying.com.zone 
zone hongying.com/IN: loaded serial 4033556584
OK
更改權限,不容許其餘用戶訪問解析庫文件:
[root@CentOS6 named]# chmod 640 hongying.com.zone
在把屬組改回來:
[root@CentOS6 named]# chown :named hongying.com.zone
重啓服務:
[root@CentOS6 named]# service named restart
中止 named:                              [肯定]
啓動 named:                              [肯定]

測試解析:

[root@CentOS6 named]#dig -t A www.hongying.com @192.168.0.105
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.6 <<>> -t A www.hongying.com @192.168.0.105
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16832
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.hongying.com.INA
;; ANSWER SECTION:
www.hongying.com.86400INA192.168.0.105
;; AUTHORITY SECTION:
hongying.com.86400INNSns1.hongying.com.
hongying.com.86400INNSns2.hongying.com.
;; ADDITIONAL SECTION:
ns1.hongying.com.86400INA192.168.0.105
ns2.hongying.com.86400INA192.168.0.106
;; Query time: 0 msec
;; SERVER: 192.168.0.105#53(192.168.0.105)
;; WHEN: Fri Feb  5 05:22:47 2016
;; MSG SIZE  rcvd: 118

向解析

第一步:添加自定義zone

[root@CentOS6 named]#vim /etc/named.rfc1912.zone
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
};

檢查語法:named-checkconf

第二步:建立反向區域解析庫

[root@CentOS6 named]#cd /var/named
[root@CentOS6 named]#vim -o hongying.com.zone 192.168.0.zone   根據正向解析庫內容建立一個反向解析庫文件192.168.0.zone
$TTL 86400
$ORIGIN 0.168.192.in-addr.arpa.
@INSOAns1.hongying.com. admin.hongying.com. (
201602052200
1H
5M
7D
1D )
INNSns1.hongying.com.
INNSna2.hongying.com.
11INPTRns1.hongying.com.
11INPTRwww.hongying.com.
12INPTRmx1.hongying.com.
12INPTRwww.hongying.com.
13INPTRmx2.hongying.com.
檢查語法是否有錯
[root@CentOS6 named]# named-checkzone "0.168.192.in-addr.arpa" 192.168.0.zone
zone 0.168.192.in-addr.arpa/IN: loaded serial 4033556584
OK
從新載入
[root@CentOS6 named]# service named reload
中止 named:                        [肯定]
啓動 named:                        [肯定]
相關文章
相關標籤/搜索