• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            linux開發(fā)筆記(三)

            一、字符串截取(不用wak),下面的//等也可以字符串來表示
            echo $a|awk '{print substr($a,1,8)}'
            substr是awk中的一個子函數(shù),對第一個參數(shù)的進行截取,從第一個字符開始,共截取8個字符,如果不夠就從第二個字符中補

            echo $a|cut -b2-8(注意:-b2-8間沒有空格)
            cut:對標準輸入的字符串進行處理
            cut -bn-m:以byte為單位,從第n個byte開始,取m個
            cut -bn,m:以byte為單位,截取第n,m個byte
            cut -b-n,m:以byte為單位,截取1-n,和第m個
            -c:以charactor為單位
            -d:指定分隔符,默認為tab
            -s:使標準輸入中沒有delimeter

            使用sed截取字符串的最后兩位
             echo "string" | sed  's/.*\(..$\)/\1/'
            截取字符串的前2位
            test="YSANALYTICS_20110302.tgz";
            echo $test|sed 's/\(.\{2\}\).*/\1/'


            1、# 號截取,刪除左邊字符,保留右邊字符。

            echo ${var#*//}

            其中 var 是變量名,# 號是運算符,*// 表示從左邊開始刪除第一個 // 號及左邊的所有字符

            2、 ## 號截取,刪除左邊字符,保留右邊字符。

            echo ${var##*/}

            ##*/ 表示從左邊開始刪除最后(最右邊)一個 / 號及左邊的所有字符

             

            3、 %號截取,刪除右邊字符,保留左邊字符

            echo ${var%/*}

            %/* 表示從右邊開始,刪除第一個 / 號及右邊的字符

            4、%% 號截取,刪除右邊字符,保留左邊字符
            echo ${var%%/*}

            %%/* 表示從右邊開始,刪除最后(最左邊)一個 / 號及右邊的字符

             

            5、從左邊第幾個字符開始,及字符的個數(shù)

            echo ${var:0:5}

            其中的 0 表示左邊第一個字符開始,5 表示字符的總個數(shù)。

             

            6、從左邊第幾個字符開始,一直到結(jié)束。

            echo ${var:7}

            其中的 7 表示左邊第8個字符開始,一直到結(jié)束。

            7、從右邊第幾個字符開始,及字符的個數(shù)

            echo ${var:0-7:3}

            其中的 0-7 表示右邊算起第七個字符開始,3 表示字符的個數(shù)。

             

            8、從右邊第幾個字符開始,一直到結(jié)束。

            echo ${var:0-7}

            表示從右邊第七個字符開始,一直到結(jié)束。
            二、字符串的查找
            x=“abcd”
            1、%expr index $x "b";
            2、%expr length $x;;expr "$x" : ".*"兩個都可以獲取字符串的長度


            ========================================
            shell 判斷語句

            流程控制 "if" 表達式 如果條件為真則執(zhí)行then后面的部分: if ....; then
            ....
            elif ....; then
            ....
            else
            ....
            fi
            大多數(shù)情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…   通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括號的空格。
            [ -f "somefile" ] :判斷是否是一個文件
            [ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執(zhí)行權(quán)限
            [ -n "$var" ] :判斷$var變量是否有值
            [ "$a" = "$b" ] :判斷$a和$b是否相等          -r file     用戶可讀為真
            -w file     用戶可寫為真
            -x file     用戶可執(zhí)行為真
            -f file     文件為正規(guī)文件為真
            -d file     文件為目錄為真
            -c file     文件為字符特殊文件為真
            -b file     文件為塊特殊文件為真
            -s file     文件大小非0時為真
            -t file     當文件描述符(默認為1)指定的設(shè)備為終端時為真
            #########################################################
            含條件選擇的shell腳本
                對于不含變量的任務(wù)簡單shell腳本一般能勝任。但在執(zhí)行一些決策任務(wù)時,就需要包含if/then的條件判斷了。shell腳本編程支持此類運算,包 括比較運算、判斷文件是否存在等。基本的if條件命令選項有: -eq —比較兩個參數(shù)是否相等(例如,if [ 2 –eq 5 ])
            -ne —比較兩個參數(shù)是否不相等
            -lt —參數(shù)1是否小于參數(shù)2
            -le —參數(shù)1是否小于等于參數(shù)2
            -gt —參數(shù)1是否大于參數(shù)2
            -ge —參數(shù)1是否大于等于參數(shù)2
            -f — 檢查某文件是否存在(例如,if [ -f "filename" ])
            -d — 檢查目錄是否存在
            幾 乎所有的判斷都可以用這些比較運算符實現(xiàn)。腳本中常用-f命令選項在執(zhí)行某一文件之前檢查它是否存在。 ################################################################## 判斷文件是否存在
             #!/bin/sh
            today=`date -d yesterday +%y%m%d`
            file="apache_$today.tar.gz"
            cd /home/chenshuo/shell
            if [ -f "$file" ];then
            echo "OK"
            else
            echo "error $file" >error.log
            mail -s "fail backup from test" test@test.com <error.log
            fi


            三、Bash shell腳本中的$
            $1, $2, $3等等...
            位置參數(shù),從命令行傳遞給腳本,或者是傳遞給函數(shù).或者賦職給一個變量.
            此數(shù)目可以任意多,但只有前9個可以被訪問,使用shift命令可以改變這個限制。
            (具體見Example 4-5 和Example 11-15)
            $0
            $0表示當前執(zhí)行的進程名,script 本身的名字,或者在正則表達式中表示整行輸出

            $#
            命令行或者是位置參數(shù)的個數(shù).(見Example 33-2)
            $*
            所有的位置參數(shù),被作為一個單詞.
            注意:"$*"必須被""引用.
            $@
            與$*同義,但是每個參數(shù)都是一個獨立的""引用字串,這就意味著參數(shù)被完整地傳遞,
            并沒有被解釋和擴展.這也意味著,每個參數(shù)列表中的每個參數(shù)都被當成一個獨立的單詞.
            注意:"$@"必須被
            ""引用.
            其他的特殊參數(shù)
            $-
            傳遞給腳本的falg(使用set 命令).參考Example 11-15.
            顯示
            shell使用的當前選項,與set命令功能相同
            注意:這起初是ksh 的特征,后來被引進到Bash 中,但不幸的是,在Bash 中它看上去也不
            能可靠的工作.使用它的一個可能的方法就是讓這個腳本進行自我測試(查看是否是交
            互的).
            $!
            在后臺運行的最后的工作的PID(進程ID).
            $_
            保存之前執(zhí)行的命令的最后一個參數(shù).
            $?
            命令,函數(shù)或者腳本本身的退出狀態(tài)(見Example 23-7)
            用于檢查上一個命令,函數(shù)或者腳本執(zhí)行是否正確。(在Linux中,命令退出狀態(tài)為0表示該命令正確執(zhí)行,任何非0值表示命令出錯。)
            $$
            腳本自身的進程ID.這個變量經(jīng)常用來構(gòu)造一個"unique"的臨時文件名.
            (參考Example A-13,Example 29-6,Example 12-28 和Example 11-25).
            這通常比調(diào)用mktemp 來得簡單.
            注意事項:
            [1] 當前運行的腳本的PID 為$$.
            [2] "argument"和"parameter"這兩個單詞經(jīng)常不加區(qū)分的使用.在這整本書中,這兩個
            單詞的意思完全相同.(在翻譯的時候就未加區(qū)分,統(tǒng)統(tǒng)翻譯成參數(shù))

            退出狀態(tài)(exit status)
            函數(shù)返回一個被稱為退出狀態(tài)的值. 退出狀態(tài)可以由return 來指定statement, 否則函數(shù)的
            退出狀態(tài)是函數(shù)最后一個執(zhí)行命令的退出狀態(tài)(0 表示成功,非0 表示出錯代碼). 退出狀態(tài)
            (exit status)可以在腳本中由$? 引用. 這個機制使腳本函數(shù)也可以像C 函數(shù)一樣有一個"
            返回值".
            return
            終止一個函數(shù).return 命令[1]可選地帶一個整數(shù)參數(shù),這個整數(shù)作為函數(shù)的"返回值"返回
            給調(diào)用此函數(shù)的腳本,并且這個值也被賦給變量$?.

            while true可以寫為while :


            四、常用的grep查詢
            grep 一般格式為:grep [選項]基本正則表達式[文件]
            常用的選項有:
            -c 只輸出匹配行的計數(shù)。
            -i 不區(qū)分大小寫(只適用于單字符)。
            -h 查詢多文件時不顯示文件名。
            -l 查詢多文件時只輸出包含匹配字符的文件名。
            -n 顯示匹配行及行號。
            -s 不顯示不存在或無匹配文本的錯誤信息。
            -v 顯示不包含匹配文本的所有行。
            -? 同時顯示匹配行上下的?行,如:grep -2 pattern filename同時顯示匹配行的上下2行。
            -b,--byte-offset 打印匹配行前面打印該行所在的塊號碼。
            -f File,--file=File  從文件中提取模板。空文件中包含0個模板,所以什么都不匹配。
            -q,--quiet  取消顯示,只返回退出狀態(tài)。0則表示找到了匹配的行。
            -L,--files-without-match  打印不匹配模板的文件清單。
            -w,--word-regexp  如果被<和>引用,就把表達式做為一個單詞搜索。
            -V,--version  顯示軟件版本信息。

            在所有的doc文件中查找sort:$ grep "sort"*.doc
            顯示滿足匹配模式的所有行行數(shù):[root@localhost /]# grep -n "48" data.f
            顯示不匹配的行:[root@localhost /]# grep -v "48" data.f
            大小寫敏感:[root@localhost /]# grep -i "sept" data.f

            正則表達式中匹配模式:用[ ]來指定字符串范圍這里用48開始,以3或4結(jié)尾,這樣抽出484或483。 [root@localhost /]# grep "48[34]" data.f

            不匹配行首 如果要抽出記錄,使其行首不是48,可以在方括號中使用^記號,表明查詢在行首開始。[root@localhost /]# grep '^[^48]' data.f

            匹配任意字符:如果抽取以K開頭,以D結(jié)尾的所有代碼,可使用下述方法,因為已知代碼長度為5個字符:[root@localhost /]# grep '5..199[68]' data.f


            模式出現(xiàn)機率:抽取包含數(shù)字4至少重復(fù)出現(xiàn)兩次的所有行,方法如下:[root@localhost /]# grep '4\{2\}' data.f
            使用grep匹配“與”或者“或”模式:[root@localhost /]# grep -E '216|219' data.f
            219 dec 2CC1999 CAD 23.00 PLV2C 68
            216 sept 3ZL1998 USP 86.00 KVM9E 234

            類等價的正則表達式類等價的正則表達式
            [[:upper:]] [A-Z]
            [[:lower:]] [a-z]
            [[:alnum:]] [0-9a-zA-Z]
            [[:space:]] 空格或tab鍵
            [[:digit:]] [0-9]
            [[:alpha:]] [a-zA-Z]



            判斷字符串為空的方法有三種:
            if [ "$str" =  "" ] 
            if [ x"$str" = x ]
            if [ -z "$str" ]
            注意:都要代雙引號,否則有些命令會報錯


            -eq 數(shù)值相等
            -ne 數(shù)值不相等
            -gt 第一個數(shù)大于第二個數(shù)
            -lt 第一個數(shù)小于第二個數(shù)
            -le 第一個數(shù)小于等于第二個數(shù)
            -ge 第一個數(shù)大于等于第二個數(shù)
            例:測試兩個數(shù)是否相等
            $NUMBER=130
            $[ "$NUMBER" -eq "130" ]
            $echo $?
            0
            結(jié)果正確.

            五、關(guān)于重定向
            基本用法:
            cmd > file 把 stdout 重定向到 file 文件中;
            cmd >> file 把 stdout 重定向到 file 文件中(追加);
            cmd 1> fiel 把 stdout 重定向到 file 文件中;
            cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
            cmd 2> file 把 stderr 重定向到 file 文件中;
            cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
            cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
            cmd < file >file2 cmd 命令以 file 文件作為 stdin,以 file2 文件作為 stdout;
            cat <>file 以讀寫的方式打開 file;
            cmd < file cmd 命令以 file 文件作為 stdin;
            cmd << delimiter Here document,從 stdin 中讀入,直至遇到 delimiter 分界符。
            例如:將字符串a(chǎn)bcd添加到文件simple.txt的末尾,可用echo "abcd">>simple.txt;

            擴展用法:
            >&n 使用系統(tǒng)調(diào)用 dup (2) 復(fù)制文件描述符 n 并把結(jié)果用作標準輸出;
            <&n 標準輸入復(fù)制自文件描述符 n;
            <&- 關(guān)閉標準輸入(鍵盤);
            >&- 關(guān)閉標準輸出;
            n<&- 表示將 n 號輸入關(guān)閉;
            n>&- 表示將 n 號輸出關(guān)閉;

            上述所有形式都可以前導(dǎo)一個數(shù)字,此時建立的文件描述符由這個數(shù)字指定而不是缺省的 0 或 1。如:
            ... 2>file 運行一個命令并把錯誤輸出(文件描述符 2)定向到 file。
            ... 2>&1 運行一個命令并把它的標準輸出和輸出合并。(嚴格的說是通過復(fù)制文件描述符 1 來建立文件描述符 2 ,但效果通常是合并了兩個流。)
            說明:2>&1 也就是 FD2=FD1 ,這里并不是說FD2 的值 等于FD1的值,因為 > 是改變送出的數(shù)據(jù)信道,也就是說把 FD2 的 “數(shù)據(jù)輸出通道” 改為 FD1 的 “數(shù)據(jù)輸出通道”。如果僅僅這樣,這個改變好像沒有什么作用,因為 FD2 的默認輸出和 FD1的默認輸出本來都是 monitor,一樣的!但是,當 FD1 是其他文件,甚至是其他 FD 時,這個就具有特殊的用途了。請大家務(wù)必理解這一點。
            exec 0exec 1>outfilename # 打開文件outfilename作為stdout。
            exec 2>errfilename # 打開文件 errfilename作為 stderr。
            exec 0<&- # 關(guān)閉 FD0。
            exec 1>&- # 關(guān)閉 FD1。
            exec 5>&- # 關(guān)閉 FD5。

            六、常見shell腳本的別名(快捷方式)
            創(chuàng)建別名:例如創(chuàng)建sh startdns的別名start,用命令alias start=“sh startdns”

            然后把上面的命令寫到/etc/profile文件末尾,這樣所有的終端都可以使用這個別名了,這個文件路徑是全局的,對所有的用戶都生效
            也可以到用戶目錄如root目錄下的profile文件中添加,這樣的效果只是針對這個root用戶;添加命令到文件末尾,用上面的重定向既可。

            七、linux檢查內(nèi)存泄露的工具:Valgrind
              Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的內(nèi)存調(diào)試工具,它可以對編譯后的二進制程序進行內(nèi)存使用監(jiān)測(C語言中的malloc和free,以及C++中的new和delete),找出內(nèi)存泄漏問題。

              Valgrind 中包含的 Memcheck 工具可以檢查以下的程序錯誤:

              使用未初始化的內(nèi)存 (Use of uninitialised memory)
              使用已經(jīng)釋放了的內(nèi)存 (Reading/writing memory after it has been free’d)
              使用超過malloc分配的內(nèi)存空間(Reading/writing off the end of malloc’d blocks)
              對堆棧的非法訪問 (Reading/writing inappropriate areas on the stack)
              申請的空間是否有釋放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
              malloc/free/new/delete申請和釋放內(nèi)存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
              src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)
              重復(fù)free

            http://valgrind.org/downloads/上用wget下載,解壓縮:tar zxvf valgrind-3.4.1.tar.bz2
            進入到解壓縮目錄:./configure;make;make install;
            valgrind --tool=memcheck --leak-check=full ./app,對程序app進行內(nèi)存泄露檢查;
            執(zhí)行結(jié)果definitely lost: 0 bytes in 0 blocks表示沒有內(nèi)存泄露


            八、linux的解壓縮和壓縮命令:如果需要將壓縮文件解壓縮到特定目錄,使用-C這個參數(shù),后面是目標路徑(注意是大寫C )
            # tar -cf all.tar *.jpg
              這條命令是將所有.jpg的文件打成一個名為all.tar的包。-c是表示產(chǎn)生新的包,-f指定包的文件名。
            # tar -rf all.tar *.gif
              這條命令是將所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
            # tar -uf all.tar logo.gif
              這條命令是#更新原來tar包all.tar中l(wèi)ogo.gif文件,-u是表示更新文件的意思。
            # tar -tf all.tar
              這條命令是列出all.tar包中所有文件,-t是列出文件的意思
            # tar -xf all.tar
              這條命令是解出all.tar包中所有文件,-x是解開的意思

            1) tar調(diào)用gzip
            gzip是GNU組織開發(fā)的一個壓縮程序,.gz結(jié)尾的文件就是gzip壓縮的結(jié)果。與gzip相對的解壓程序gunzip。tar中使用-z這個參數(shù)來調(diào)用gzip。下面來舉例說明一下:
            # tar -czf all.tar.gz *.jpg
              這條命令是將所有.jpg的文件打成一個tar包,并且將其用gzip壓縮,生成一個gzip壓縮過的包,包名all.tar.gz
            # tar -xzf all.tar.gz
              這條命令是將上面產(chǎn)生的包解開。
            2) tar調(diào)用bzip2
            bzip2是一個壓縮能力更強的壓縮程序,.bz2結(jié)尾的文件就是bzip2壓縮的結(jié)果。與bzip2相對的解壓程序是bunzip2。tar中使用-j這個參數(shù)來調(diào)用gzip。下面來舉例說明一下:
            # tar -cjf all.tar.bz2 *.jpg
              這條命令是將所有.jpg的文件打成一個tar包,并且將其用bzip2壓縮,生成一個bzip2壓縮過的包,包名為all.tar.bz2
            # tar -xjf all.tar.bz2
              這條命令是將上面產(chǎn)生的包解開。
            3)tar調(diào)用compress
            compress也是一個壓縮程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z結(jié)尾的文件就是bzip2壓縮的結(jié)果。與 compress相對的解壓程序是uncompress。tar中使用-Z這個參數(shù)來調(diào)用compress。下面來舉例說明一下:
            # tar -cZf all.tar.Z *.jpg
              這條命令是將所有.jpg的文件打成一個tar包,并且將其用compress壓縮,生成一個uncompress壓縮過的包,包名為all.tar.Z
            # tar -xZf all.tar.Z
              這條命令是將上面產(chǎn)生的包解開

            #1)對于.tar結(jié)尾的文件
            tar -xf all.tar
            2)對于.gz結(jié)尾的文件
            gzip -d all.gz
              gunzip all.gz
            3)對于.tgz或.tar.gz結(jié)尾的文件
            tar -xzf all.tar.gz
              tar -xzf all.tgz
            4)對于.bz2結(jié)尾的文件
            bzip2 -d all.bz2
              bunzip2 all.bz2
            5)對于tar.bz2結(jié)尾的文件
            tar -xjf all.tar.bz2
            6)對于.Z結(jié)尾的文件
            uncompress all.Z
            7)對于.tar.Z結(jié)尾的文件
            tar -xZf all.tar.z
            另外對于Window下的常見壓縮文件.zip和.rar,Linux也有相應(yīng)的方法來解壓它們:
            1)對于.zip
            linux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參
            數(shù)選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:
            # zip all.zip *.jpg
              這條命令是將所有.jpg的文件壓縮成一個zip包
            # unzip all.zip
              這條命令是將all.zip中的所有文件解壓出來
            2)對于.rar
            要在linux下處理.rar文件,需要安裝RAR for Linux,可以從網(wǎng)上下載,但要記住,RAR for Linux不是免費的;可從http://www.rarsoft.com/download.htm下載RARfor Linux 3.2.
            0,然后安裝:
            # tar -xzpvf rarlinux-3.2.0.tar.gz
              # cd rar
              # make
            這樣就安裝好了,安裝后就有了rar和unrar這兩個程序,rar是壓縮程序,unrar是解壓程序。它們的參數(shù)選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:
            # rar a all *.jpg
              這條命令是將所有.jpg的文件壓縮成一個rar包,名為all.rar,該程序會將.rar擴展名將自動附加到包名后。
            # unrar e all.rar
              這條命令是將all.rar中的所有文件解壓出來

            tar zcvf abc.tar.gz abc  將文件abc打包成abc.tar.gz;j解包將c換成x就行


            查找目錄下的所有文件中是否含有某個字符串
            find .|xargs grep -ri "IBM"
            查找目錄下的所有文件中是否含有某個字符串,并且只打印出文件名
            find .|xargs grep -ri "IBM" -l
            1.正則表達式
            (1)正則表達式一般用來描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(稱為元字符,如/、*、?等)組成。
            (2)基本元字符集及其含義
            ^ :只匹配行首。 如^a 匹配以a開頭的行abc,a2e,a12,aaa,......
            $ :只匹配行尾。 如^a 匹配以a結(jié)尾的行bca,12a,aaa,.......
            * :匹配0個或多個此單字符。 如(a)* 匹配 空,a,aa,aaa,....
            [] :只匹配[]內(nèi)字符。可以是一個單字符,也可以是字符序列,用","將里面要匹配的不同字符串分開。也可以使用-來表示[]內(nèi)字符序列的范圍,如[1-5]表示[12345]
            \ :只用來屏蔽一個元字符的特殊含義。 如\*,\',\",\|,\+,\^,\. 等
            .:(點)只匹配任意單字符。
            pattern\{n\}:只用來匹配前面pattern出現(xiàn)的次數(shù).n為次數(shù)。如a\{2\}匹配aa.
            pattern\{n,\}:含義同上,但次數(shù)最少為n.如a\{2,\}匹配aa,aaa,aaaa,.....
            pattern\{n,m\}:含義同上,但次數(shù)在n和m之間。如a\{2,4\}匹配aa,aaa,aaaa三個
            (3)舉例說明:
            ^$ :匹配空行
            ^.$ :匹配包含一個字符的行
            \*\.pas :匹配以*.pas結(jié)尾的所有字符或文件
            [0123456789]或[0-9] :假定要匹配任意一個數(shù)字
            [a-z] :任意小寫字母
            [A-Za-z] :任意大小寫字母
            [S,s] :匹配大小寫S
            [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三個0-9組成的字符串;\. :匹配點(注意這里點是特殊的字符,所以要用"\"來屏蔽其含義)
            2.find介紹
            (1)查找具有某些特征文件的命令,可遍歷當前目錄甚至于整個文件系統(tǒng)來查看某些文件或目錄,其遍歷大的文件系統(tǒng)時一般放在后臺執(zhí)行。
            (2)find命令的一般形式
            find pathname -options [-print -exec -ok]
            -pathname :find命令所查找的目錄路徑。如用"."來表示當前的目錄,用/來表示系統(tǒng)根目錄
            -print :find命令將匹配的文件輸出到標準輸出
            -exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令,相應(yīng)的命令形式為
            'command'{} \; (注意{}和\之間的空格)
            -ok 和 -exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
            options有如下幾種:
            -name :按照文件名查找文件
            -perm :按照文件權(quán)限來查找文件
            -user :按照文件屬主來查找文件
            -group :按照文件所屬的組來查找文件
            -mtime -n +n 按照文件的更改時間來查找文件,-n表示文件更改時間距現(xiàn)在n天以內(nèi),+n表示文件更改時間距現(xiàn)在n天以前。find命令還有-atime 和-ctime選項,但它們都和-mtime選項相似。
            -size n[c]查找文件長度為n塊的文件,帶有c時表示文件長度以字節(jié)計。
            -nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在
            -newer file1 !file2查找更改時間比文件file1新但比文件file2舊的文件
            -depth 先查找指定目錄有無匹配文件,若無則再在子目錄中查找
            -type 查找某一類型的文件,如
            b :塊設(shè)備文件
            d:目錄
            e:字符設(shè)備文件
            p;管道文件
            l:符號鏈接文件
            f:普通文件
            (3)find命令舉例
            find -name "*.txt" -print 查找txt結(jié)尾的文件并輸出到屏幕上
            find /cmd ".sh" -print 查找/cmd目錄下所有sh文件,并輸出
            find . -perm 755 -print 查找當前目錄下權(quán)限為755的文件,并輸出
            find `pwd` -user root -print 查找當前目錄下屬主為root的文件,并輸出
            find ./ -group sunwill -print 查找當前目錄下所屬主是sunwill的文件
            find /var -mtime -5 -print 查找/var目錄下更改時間為5天內(nèi)的所有文件
            find /var -mtime +5 -print 查找/var目錄下更改時間為5天以前的所有文件
            find /var -newer "myfile1" ! -newer "myfile2" -print 查找/var目錄下比myfile1新,但是比myfile2舊的所有文件。
            find /var -type d -print 查找/var目錄下所有目錄
            find /var -type l -print 查找/var目錄下所有的符號鏈接文件。
            find . -size +1000000c -print 查找當前目錄下大于1000000字節(jié)的文件
            find / -name "con.file" -depth -print 查找根目錄下有無"con.file",若無則在其子目錄中查找
            find . -type f -exec ls -l {} \; 查找當前目錄下是否有普通文件,若有則執(zhí)行l(wèi)s -l
            (4)xargs命令
            在 使用find命令的-exec選項處理匹配到的文件時,find命令將所有匹配到的文件一起傳遞給exec。不幸的是,有些系統(tǒng)對能夠傳遞給exec的命 令長度有限制,這樣find命令運行幾分鐘之后就算出現(xiàn)溢出錯誤。錯誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”。這就是xargs的用處所在,特別是與 find命令一起使用,exec會發(fā)起多個進程,而xargs會多個,只有一個
            find ./ -perm -7 -print | xargs chmod o-w 查找權(quán)限為7的文件并傳遞給chmod處理
            3.grep介紹
            (1)grep 的一般格式為 grep [options] 基本正則表達式 [文件]
            字符串參數(shù)最好采用是雙引號括,一是以防被誤解為shell命令,二是可以用來查找多個單詞組成的字符串
            -c:只輸出匹配行的記數(shù)
            -i:不區(qū)分大小寫(只適用于單個字符)
            -h:查詢多個文件時不顯示文件名
            -H:只顯示文件名
            -l:查詢多文件時只輸出包含匹配字符的文件名
            -n:只顯示匹配行及其行號
            -s:不顯示不存在或無匹配文本的錯誤信息。
            -v:顯示不包含匹配文本的所有行。
            (2)舉例說明:
            grep ^[^210] myfile 匹配myfile中以非2、1、0開頭的行
            grep "[5-8][6-9][0-3]" myfile 匹配myfile中第一位為5|6|7|8,第二位6|7|8|9,第三位為0|1|2|3的三個字符的行
            grep "4\{2,4\}" myfile 匹配myfile中含有44,444或4444的行
            grep "\?" myfile匹配myfile中含有任意字符的行
            (3)grep命令類名
            [[:upper:]] 表示[A-Z]
            [[:alnum:]] 表示[0-9a-zA-Z]
            [[:lower:]] 表示[a-z]
            [[:space:]] 表示空格或者tab鍵
            [[:digit:]] 表示[0-9]
            [[:alpha:]] 表示[a-zA-Z]
            如:grep "5[[:digit:]][[:digit:]]" myfile 匹配myfile中含有5開頭接下去兩位都是數(shù)字的行。
            4.合并與分割(sort,uniq,join,cut,paste,split)
            (1)sot命令
            sort [options] files 許多不同的域按不同的列順序排序
            -c 測試文件是否已經(jīng)排序
            -m 合并兩個排序文件
            -u 刪除所有同樣行
            -o 存儲sort結(jié)果的輸出文件名
            -t 域分隔符,用非空格或tab開始排序
            +n :n 為列號,使用此列號開始排序
            -n 指定排序是域上的數(shù)字分類項
            -r 比較求逆
            sort -c test.txt 測試文件是否分類過
            sort -u test.txt 排序并合并一樣的行
            sort -r test.txt 以相反的順序排列
            sort -t "/" +2 test.txt 以"/"分隔,第二個域開始分類
            (2)uniq命令
            uniq [options ] files 從一個文本文件中去除或禁止重復(fù)行
            -u 只顯示不重復(fù)行
            -d 只顯示有重復(fù)數(shù)據(jù)行,每種重復(fù)行只顯示其中一行
            -c 打印每一重復(fù)行出現(xiàn)次數(shù)
            -f :n為數(shù)字,前n個域被忽略
            uniq -f 2 test.txt 忽略前2個域
            (3)join 命令
            join [options] file1 file2 用來將來自兩個分類文本文件的行連在一起
            -an,n為一數(shù)字,用于連接時從文件n中顯示不匹配行
            -onm ,連接域,n為文件號,m為域號
            -jnm,n為文件號,m為域號,使用其他域作連接域
            -t ,域分隔符。用來設(shè)置非空格或tab鍵的域分隔符。
            (4)split命令
            split -output_file_size intput_filename output_filename
            用來將大文件分割成小文件。
            -b n,每個分割文件的大小n
            -C n,每個分割文件一行最多n字節(jié)
            -l n,每個分割文件的行數(shù)
            -n,同-l n
            split -10 test.txt 將test.txt分割成10行的小文件
            (5)cut 命令
            cut -c n1-n2 filename 顯示每行從開頭算起 n1 到 n2 的文字。
            cut -c 3-5 test.txt 顯示test.txt中每行從第3到第5個字符



            gcc內(nèi)置的調(diào)試宏

            __FILE__:記錄文件的路徑加名稱,相對路徑

            __LINE__:記錄文件已經(jīng)被編譯的行數(shù)

            __DATE__:記錄文件的編譯日期

            __TIME__:記錄文件的編譯時間
            __FUCTION__:當前執(zhí)行的函數(shù)(__func__)
            __PRETTY_FUNCTION__ :當前執(zhí)行函數(shù)的詳細信息,包括形參;如果是類的成員方法,也會打印類名。

            __STDC__ __STDC__用于那些在ANSI環(huán)境和非ANSI環(huán)境都必須進行編譯的程序中結(jié)合條件編譯,如果編譯器遵循ANSI C,其值就為1,否則未定義



            修改linux系統(tǒng)默認的文件連接數(shù)的方法

            一、用limit命令修改用戶進程可打開文件數(shù)
            1.打開/etc/security/limits.conf,加入下面兩句
            speng soft nofile 10240
            speng hard nofile 10240
            其中speng指定了要修改哪個用戶的打開文件數(shù)限制,可用'*'號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大打開文件數(shù)(請注意軟限制值要小于或等于硬限制)。修改完后保存文件。
            2.打開/etc/pam.d/login,加入
            session required /lib/security/pam_limits.so
            這是告訴Linux在用戶完成系統(tǒng)登錄后,應(yīng)該調(diào)用pam_limits.so模塊來設(shè)置系統(tǒng)對該用戶可使用的各種資源數(shù)量的最大限制(包括用戶可打開的最大文件數(shù)限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設(shè)置這些限制值。修改完后保存此文件。
            3.查看linux硬件對文件數(shù)限制
            cat /proc/sys/fs/file-max
            其結(jié)果是所有用戶打開的文件數(shù),一般不用修改;如要修改,則需要修改/etc/rc.local腳本,在腳本中添加如下行:
            echo 22158 > /proc/sys/fs/file-max,這是讓Linux在啟動完成后強行將系統(tǒng)級打開文件數(shù)硬限制設(shè)置為22158。修改完后保存此文件。
            4.最后需要修改/etc/profile腳本文件,在文件中設(shè)置ulimit -n 文件連接數(shù);然后重啟系統(tǒng)即可。

            二、修改Linux網(wǎng)絡(luò)內(nèi)核對本地端口號范圍有限制,connect()調(diào)用返回 失敗,查看系統(tǒng)錯誤提示消息是“Can't assign requestedaddress”。
            修改方法如下:
            1、修改/etc/sysctl.conf文件,在文件中添加如下行:
            net.ipv4.ip_local_port_range = 1024 65000
            這表明將系統(tǒng)對本地端口范圍限制設(shè)置為1024~65000之間。請注意,本地端口范圍的最小值必須大于或等于1024;而端口范圍的最大值則應(yīng)小于或等于65535。修改完后保存此文件。
            2、用sysctl -p可以查看是否成功

            三、Linux網(wǎng)絡(luò)內(nèi)核的IP_TABLE防火墻對最大跟蹤的TCP連接數(shù)有限制,導(dǎo)致程序在 connect()調(diào)用中阻塞,如同死機;修改方法如下:
            1、修改/etc/sysctl.conf文件,在文件中添加如下行:
            net.ipv4.ip_conntrack_max = 10240
            這表明將系統(tǒng)對最大跟蹤的TCP連接數(shù)限制設(shè)置為10240。請注意,此限制值要盡量小,以節(jié)省對內(nèi)核內(nèi)存的占用。
            2、執(zhí)行sysctl -p看是否成功
            在這一步常見的錯誤就是:"net.ipv4.ip_conntrack_max" is an unknown key
            解決方法如下:
            執(zhí)行 modprobe ip_conntrack
            echo "modprobe ip_conntrack" >> /etc/rc.local
            /proc/sys/net/ipv4/netfilter目錄下,打開ip_conntrack_max,修改其值即可;
            可以看出在有的linux系統(tǒng)下net.ipv4.ip_conntrack_max 已被net.ipv4.netfilter.ip_conntrack_max替代。
            四、linux上常見的一些錯誤解決方法(安裝gcc/gdb):

            error: No curses/termcap library found的錯誤 
            wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
            tar zxvf ncurses-5.6.tar.gz
            cd ncurses-5.6
            ./configure –prefix=/usr –with-shared –without-debug
            make
            make install
            make clean

            解壓tar.gz文件---tar.zxvf
            解壓tar.gz2文件--tar.jzvf
            壓縮文件---------tar.cvf

            更新庫,一般用在更新了gdb或gcc以后
            /sbin/ldconfig –v


            you obtained GMP, MPFR and/or MPC from a vendor distribution package,
            make sure that you have installed both the libraries and the header


            axel  ftp://ftp.gmplib.org/pub/gmp-5.0.4/gmp-5.0.4.tar.bz2
            axel  http://www.multiprecision.org/mpc/download/mpc-0.8.2.tar.gz
            axel   http://www.mpfr.org/mpfr-current/mpfr-3.1.0.tar.gz
            axel http://gcc.cybermirror.org/releases/gcc-4.7.0/gcc-4.7.0.tar.gz


            獲取進程test的線程數(shù):pstree -c | grep test
            查找在某個文件夾下的文件,看看文件中是否有item這個字符:grep -F item ./logic/*.lua

            五、打開coredump
             vi /etc/profile(打開profile)
            寫入:ulimit -S -c 1 > /dev/null 2>&1
             source /etc/profile(即時生效)
             echo 'core.%e.%p' > /proc/sys/kernel/core_pattern(設(shè)置coredump文件格式)
            在有的linux版本上,上面一句不起作用,重啟一下或重新打開coredump開關(guān)即可。
            六、其他:
            1.top:相當于windows下的任務(wù)管理器,在默認情況下,顯示系統(tǒng)中CPU使用率最高的任務(wù),并每5秒鐘刷新一次。
            熱鍵用途
            t顯示摘要信息開關(guān).
            m顯示內(nèi)存信息開關(guān).
            A分類顯示系統(tǒng)不同資源的使用大戶。有助于快速識別系統(tǒng)中資源消耗多的任務(wù)。
            f添加刪除所要顯示欄位.
            o調(diào)整所要顯示欄位的順序.
            r調(diào)整一個正在運行的進程Nice值.
            k結(jié)束一個正在運行的進程.
            z彩色/黑白顯示開關(guān)
            2、vmstat -
            獲得有關(guān)進程、虛存、頁面交換空間及 CPU活動的信息。這些信息反映了系統(tǒng)的負載情況。

            類別項目含義說明
            Procsr等待執(zhí)行的任務(wù)數(shù)展示了正在執(zhí)行和等待CPU資源的任務(wù)個數(shù)。當這個值超過了CPU數(shù)目,就會出現(xiàn)CPU瓶頸了
             b  
            Memoryswpd正在使用的swap大小單位K 
             free空閑的內(nèi)存空間 
             buff已使用的buff大小,對塊設(shè)備的讀寫進行緩沖 
             cache已使用的cache大小,文件系統(tǒng)的cache 
             inact  
             active  
            Swapsi交換內(nèi)存使用,由磁盤調(diào)入內(nèi)存 
             so交換內(nèi)存使用,由內(nèi)存調(diào)入磁盤 
            IObi從塊設(shè)備讀入的數(shù)據(jù)總量(讀磁盤) (KB/s), 
             bo寫入到塊設(shè)備的數(shù)據(jù)總理(寫磁盤) (KB/s) 
            Systemin每秒產(chǎn)生的中斷次數(shù) 
             cs每秒產(chǎn)生的上下文切換次數(shù)上面這2個值越大,會看到由內(nèi)核消耗的CPU時間會越多
            CPUus用戶進程消耗的CPU時間百分比us 的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超過50% 的使用,那么我們就該考慮優(yōu)化程序算法或者進行加速了
             sy內(nèi)核進程消耗的CPU時間百分比sy 的值高時,說明系統(tǒng)內(nèi)核消耗的CPU資源多,這并不是良性的表現(xiàn),我們應(yīng)該檢查原因。
             id空閑 
             waIO等待消耗的CPU時間百分比wa 的值高時,說明IO等待比較嚴重,這可能是由于磁盤大量作隨機訪問造成,也有可能是磁盤的帶寬出現(xiàn)瓶頸(塊操作)。
            3、vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計)的縮寫,可對操作系統(tǒng)的虛擬內(nèi)存、進程、CPU活動進行監(jiān)控。
            他是對系統(tǒng)的整體情況進行統(tǒng)計,不足之處是無法對某個進程進行深入分析。通常使用vmstat 5 5(表示在5秒時間內(nèi)進行5次采樣)命令測試。將得到一個數(shù)據(jù)匯總他能夠反映真正的系統(tǒng)情況。
            inux 內(nèi)存監(jiān)控vmstat命令輸出分成六個部分:
            (1)進程procs: 
            r:在運行隊列中等待的進程數(shù) 。
            b:在等待io的進程數(shù) 。
            (2)Linux 內(nèi)存監(jiān)控內(nèi)存memoy: 
            swpd:現(xiàn)時可用的交換內(nèi)存(單位KB)。 
            free:空閑的內(nèi)存(單位KB)。
            buff: 緩沖去中的內(nèi)存數(shù)(單位:KB)。
            cache:被用來做為高速緩存的內(nèi)存數(shù)(單位:KB)。
            (3) Linux 內(nèi)存監(jiān)控swap交換頁面 
            si: 從磁盤交換到內(nèi)存的交換頁數(shù)量,單位:KB/秒。
            so: 從內(nèi)存交換到磁盤的交換頁數(shù)量,單位:KB/秒。
            (4)Linux 內(nèi)存監(jiān)控 io塊設(shè)備:
            bi: 發(fā)送到塊設(shè)備的塊數(shù),單位:塊/秒。
            bo: 從塊設(shè)備接收到的塊數(shù),單位:塊/秒。
            (5)Linux 內(nèi)存監(jiān)控system系統(tǒng): 
            in: 每秒的中斷數(shù),包括時鐘中斷。
            cs: 每秒的環(huán)境(上下文)轉(zhuǎn)換次數(shù)。
            (6)Linux 內(nèi)存監(jiān)控cpu中央處理器:
            cs:用戶進程使用的時間 。以百分比表示。
            sy:系統(tǒng)進程使用的時間。 以百分比表示。
            id:中央處理器的空閑時間 。以百分比表示。
            wa:已經(jīng)消耗的io等待時間, 優(yōu)先Linux 2.5.41版本
            st:虛擬機器消耗的時間,優(yōu)先 Linux 2.6.11
            假如 r經(jīng)常大于 4 ,且id經(jīng)常小于40,表示中央處理器的負荷很重。 假如bi,bo 長期不等于0,表示物理內(nèi)存容量太小。
            3、w命令顯示系統(tǒng)當前用戶及其運行進程的信息,uptime命令過去只顯示系統(tǒng)運行多久。現(xiàn)在,可以顯示系統(tǒng)運行多久、當前有多少的用戶登錄、在過去的1,5,15分鐘里平均負載時多少。
            4、
            ps命令顯示當前運行進程的快照。使用-A或-e顯示所有進程。free命令顯示系統(tǒng)中空閑的、已用的物理內(nèi)存及swap內(nèi)存,及被內(nèi)核使用的buffer。
            5、
            iostat命令可報告中央處理器(CPU)的統(tǒng)計信息,各種設(shè)備、分區(qū)及網(wǎng)絡(luò)文件系統(tǒng)輸入/輸出的統(tǒng)計信息。
            tps:該設(shè)備每秒的傳輸次數(shù)(Indicate the number of transfers per second that were issued to the device.)。“一次傳輸”意思是“一次I/O請求”。多個邏輯請求可能會被合并為“一次I/O請求”。“一次傳輸”請求的大小是未知的。
            kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量;kB_wrtn/s:每秒向設(shè)備(drive expressed)寫入的數(shù)據(jù)量;kB_read:讀取的總數(shù)據(jù)量;kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量;這些單位都為Kilobytes。

            iostat -d -k 1 10
            參數(shù) -d 表示,顯示設(shè)備(磁盤)使用狀態(tài);-k某些使用block為單位的列強制使用Kilobytes為單位;1 10表示,數(shù)據(jù)顯示每隔1秒刷新一次,共顯示10次。
            參數(shù)-c用來獲取cpu部分狀態(tài)值:
            用-x參數(shù)我們可以獲得更多統(tǒng)計信息。
            rrqm/s:每秒這個設(shè)備相關(guān)的讀取請求有多少被Merge了(當系統(tǒng)調(diào)用需要讀取數(shù)據(jù)的時候,VFS將請求發(fā)到各個FS,如果FS發(fā)現(xiàn)不同的讀取請求讀取的是相同Block的數(shù)據(jù),F(xiàn)S會將這個請求合并Merge);wrqm/s:每秒這個設(shè)備相關(guān)的寫入請求有多少被Merge了。
            rsec/s:每秒讀取的扇區(qū)數(shù);wsec/:每秒寫入的扇區(qū)數(shù)。r/s:The number of read requests that were issued to the device per second;
            w/s:The number of write requests that were issued to the device per second;await:每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的響應(yīng)時間,一般地系統(tǒng)IO響應(yīng)時間應(yīng)該低于5ms,如果大于10ms就比較大了。
            %util:在統(tǒng)計時間內(nèi)所有處理IO時間,除以總共統(tǒng)計時間。例如,如果統(tǒng)計間隔1秒,該設(shè)備有0.8秒在處理IO,而0.2秒閑置,那么該設(shè)備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設(shè)備的繁忙程度。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的并發(fā)能力,所以磁盤使用未必就到了瓶頸)。

            常見用法:iostat -d -k 1 10 #查看TPS和吞吐量信息
            iostat -d -x -k 1 10 #查看設(shè)備使用率(%util)、響應(yīng)時間(await)
            iostat -c 1 10 #查看cpu狀態(tài)

            擴展閱讀:
            rrqm/s:   每秒進行 merge 的讀操作數(shù)目.即 delta(rmerge)/s
            wrqm/s:  每秒進行 merge 的寫操作數(shù)目.即 delta(wmerge)/s
            r/s:           每秒完成的讀 I/O 設(shè)備次數(shù).即 delta(rio)/s
            w/s:         每秒完成的寫 I/O 設(shè)備次數(shù).即 delta(wio)/s
            rsec/s:    每秒讀扇區(qū)數(shù).即 delta(rsect)/s
            wsec/s:  每秒寫扇區(qū)數(shù).即 delta(wsect)/s
            rkB/s:      每秒讀K字節(jié)數(shù).是 rsect/s 的一半,因為每扇區(qū)大小為512字節(jié).(需要計算)
            wkB/s:    每秒寫K字節(jié)數(shù).是 wsect/s 的一半.(需要計算)
            avgrq-sz: 平均每次設(shè)備I/O操作的數(shù)據(jù)大小 (扇區(qū)).delta(rsect+wsect)/delta(rio+wio)
            avgqu-sz: 平均I/O隊列長度.即 delta(aveq)/s/1000 (因為aveq的單位為毫秒).
            await:    平均每次設(shè)備I/O操作的等待時間 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
            svctm:   平均每次設(shè)備I/O操作的服務(wù)時間 (毫秒).即 delta(use)/delta(rio+wio)
            %util:      一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的.即 delta(use)/s/1000 (因為use的單位為毫秒)
            如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負荷,該磁盤
            可能存在瓶頸.
            idle小于70% IO壓力就較大了,一般讀取速度有較多的wait.
            同時可以結(jié)合vmstat 查看查看b參數(shù)(等待資源的進程數(shù))和wa參數(shù)(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)
            另外 await 的參數(shù)也要多和 svctm 來參考.差的過高就一定有 IO 的問題.
            avgqu-sz 也是個做 IO 調(diào)優(yōu)時需要注意的地方,這個就是直接每次操作的數(shù)據(jù)的大小,如果次數(shù)多,但數(shù)據(jù)拿的小的話,其實 IO 也會很小.如果數(shù)據(jù)拿的大,才IO 的數(shù)據(jù)會高.也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是講,讀定速度是這個來決定的.
            6、mpstat命令可以顯示所有可用處理器的使用情況,處理器編號從0開始。mpstat -P ALL顯示每個處理器的平均使用率。

            參數(shù) 解釋
            -P {|ALL} 表示監(jiān)控哪個CPU, cpu在[0,cpu個數(shù)-1]中取值
            internal 相鄰的兩次采樣的間隔時間
            count 采樣的次數(shù),count只能和delay一起使用

            當沒有參數(shù)時,mpstat則顯示系統(tǒng)啟動以后所有信息的平均值。有interval時,第一行的信息自系統(tǒng)啟動以來的平均信息。
            從第二行開始,輸出為前一個interval時間段的平均信息。

            與CPU有關(guān)的輸出的含義如下:
            參數(shù) 解釋 從/proc/stat獲得數(shù)據(jù)
            CPU 處理器ID
            user 在internal時間段里,用戶態(tài)的CPU時間(%),不包含 nice值為負 進程 (usr/total)*100 
            nice 在internal時間段里,nice值為負進程的CPU時間(%)   (nice/total)*100 
            system 在internal時間段里,核心時間(%)   (system/total)*100
            iowait 在internal時間段里,硬盤IO等待時間(%) (iowait/total)*100
            irq 在internal時間段里,硬中斷時間(%)      (irq/total)*100
            soft 在internal時間段里,軟中斷時間(%)    (softirq/total)*100
            idle 在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%)(idle/total)*100
            intr/s 在internal時間段里,每秒CPU接收的中斷的次數(shù)intr/total)*100
            CPU總的工作時間=total_cur=user+system+nice+idle+iowait+irq+softirq
            total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
            user=user_cur – user_pre
            total=total_cur-total_pre
            其中_cur 表示當前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數(shù)點。

            7、sar命令用來搜集、報告和儲存系統(tǒng)活動信息。查看網(wǎng)路計數(shù)器。
            參數(shù):

             

            -A:所有報告的總和

            -u:輸出CPU使用情況的統(tǒng)計信息
            -v:輸出inode、文件和其他內(nèi)核表的統(tǒng)計信息
            輸出項說明:
            dentunusd:目錄高速緩存中未被使用的條目數(shù)量
            file-nr:文件句柄(file handle)的使用數(shù)量
            inode-nr:索引節(jié)點句柄(inode handle)的使用數(shù)量
            pty-nr:使用的pty數(shù)量
            -d:輸出每一個塊設(shè)備的活動信息
            其中:參數(shù)-p可以打印出sda,hdc等磁盤設(shè)備名稱,如果不用參數(shù)-p,設(shè)備節(jié)點則有可能是dev8-0,dev22-0
            tps:每秒從物理磁盤I/O的次數(shù).多個邏輯請求會被合并為一個I/O磁盤請求,一次傳輸?shù)拇笮∈遣淮_定的.
            rd_sec/s:每秒讀扇區(qū)的次數(shù).
            wr_sec/s:每秒寫扇區(qū)的次數(shù).
            avgrq-sz:平均每次設(shè)備I/O操作的數(shù)據(jù)大小(扇區(qū)).
            avgqu-sz:磁盤請求隊列的平均長度.
            await:從請求磁盤操作到系統(tǒng)完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1秒=1000毫秒).
            svctm:系統(tǒng)處理每次請求的平均時間,不包括在請求隊列中消耗的時間.
            %util:I/O請求占CPU的百分比,比率越大,說明越飽和.
            1. avgqu-sz 的值較低時,設(shè)備的利用率較高。
            2. 當%util的值接近 1% 時,表示設(shè)備帶寬已經(jīng)占滿。
            -q:程隊列長度和平均負載狀態(tài)
            輸出項說明:
            tps:每秒鐘物理設(shè)備的 I/O 傳輸總量
            rtps:每秒鐘從物理設(shè)備讀入的數(shù)據(jù)總量
            wtps:每秒鐘向物理設(shè)備寫入的數(shù)據(jù)總量
            bread/s:每秒鐘從物理設(shè)備讀入的數(shù)據(jù)量,單位為 塊/s
            bwrtn/s:每秒鐘向物理設(shè)備寫入的數(shù)據(jù)量,單位為 塊/s
            -r:輸出內(nèi)存和交換空間的統(tǒng)計信息
            輸出項說明:
            kbmemfree:這個值和free命令中的free值基本一致,所以它不包括buffer和cache的空間.
            kbmemused:這個值和free命令中的used值基本一致,所以它包括buffer和cache的空間.
            %memused:這個值是kbmemused和內(nèi)存總量(不包括swap)的一個百分比.
            kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache.
            kbcommit:保證當前系統(tǒng)所需要的內(nèi)存,即為了確保不溢出而需要的內(nèi)存(RAM+swap).
            %commit:這個值是kbcommit與內(nèi)存總量(包括swap)的一個百分比.
            -b:顯示I/O和傳送速率的統(tǒng)計信息
            輸出項說明:
            tps:每秒鐘物理設(shè)備的 I/O 傳輸總量
            rtps:每秒鐘從物理設(shè)備讀入的數(shù)據(jù)總量
            wtps:每秒鐘向物理設(shè)備寫入的數(shù)據(jù)總量
            bread/s:每秒鐘從物理設(shè)備讀入的數(shù)據(jù)量,單位為 塊/s
            bwrtn/s:每秒鐘向物理設(shè)備寫入的數(shù)據(jù)量,單位為 塊/s
            -a:文件讀寫情況
            -c:輸出進程統(tǒng)計信息,每秒創(chuàng)建的進程數(shù)
            -R:輸出內(nèi)存頁面的統(tǒng)計信息
            -y:終端設(shè)備活動情況
            -w:輸出系統(tǒng)交換活動信息
            -B:內(nèi)存分頁
            輸出項說明:
            pgpgin/s:表示每秒從磁盤或SWAP置換到內(nèi)存的字節(jié)數(shù)(KB)
            pgpgout/s:表示每秒從內(nèi)存置換到磁盤或SWAP的字節(jié)數(shù)(KB)
            fault/s:每秒鐘系統(tǒng)產(chǎn)生的缺頁數(shù),即主缺頁與次缺頁之和(major + minor)
            majflt/s:每秒鐘產(chǎn)生的主缺頁數(shù).
            pgfree/s:每秒被放入空閑隊列中的頁個數(shù)
            pgscank/s:每秒被kswapd掃描的頁個數(shù)
            pgscand/s:每秒直接被掃描的頁個數(shù)
            pgsteal/s:每秒鐘從cache中被清除來滿足內(nèi)存需要的頁個數(shù)
            %vmeff:每秒清除的頁(pgsteal)占總掃描頁(pgscank+pgscand)的百分比
            -W:監(jiān)控系統(tǒng)交換活動信息
            輸出項說明:
            pswpin/s:每秒系統(tǒng)換入的交換頁面(swap page)數(shù)量
            pswpout/s:每秒系統(tǒng)換出的交換頁面(swap page)數(shù)量
            例如,每10秒采樣一次,連續(xù)采樣3次,觀察CPU 的使用情況,并將采樣結(jié)果以二進制形式存入當前目錄下的文件test中,需鍵入如下命令:sar -u -o test 10 3
            輸出項說明:
            CPU:all 表示統(tǒng)計信息為所有 CPU 的平均值。
            %user:顯示在用戶級別(application)運行使用 CPU 總時間的百分比。
            %nice:顯示在用戶級別,用于nice操作,所占用 CPU 總時間的百分比。
            %system:在核心級別(kernel)運行所使用 CPU 總時間的百分比。
            %iowait:顯示用于等待I/O操作占用 CPU 總時間的百分比。
            %steal:管理程序(hypervisor)為另一個虛擬進程提供服務(wù)而等待虛擬 CPU 的百分比。
            %idle:顯示 CPU 空閑時間占用 CPU 總時間的百分比。
            1. 若 %iowait 的值過高,表示硬盤存在I/O瓶頸
            2. 若 %idle 的值高但系統(tǒng)響應(yīng)慢時,有可能是 CPU 等待分配內(nèi)存,此時應(yīng)加大內(nèi)存容量
            3. 若 %idle 的值持續(xù)低于1,則系統(tǒng)的 CPU 處理能力相對較低,表明系統(tǒng)中最需要解決的資源是 CPU 。
            如果要查看二進制文件test中的內(nèi)容,需鍵入如下sar命令:
            sar -u -f test
            懷疑CPU存在瓶頸,可用 sar -u 和 sar -q 等來查看
            懷疑內(nèi)存存在瓶頸,可用 sar -B、sar -r 和 sar -W 等來查看
            懷疑I/O存在瓶頸,可用 sar -b、sar -u 和 sar -d 等來查看

            8、pmap命令可以顯示進程的內(nèi)存映射,使用這個命令可以找出造成內(nèi)存瓶頸的原因。使用#pmap PID 或者 #pmap [options] PID 
            在輸出中它顯示全部的地址,kbytes,mode還有mapping。
            選項
            -x extended顯示擴展格式
            -d device顯示設(shè)備格式
            -q quiet不顯示header/footer行
            -V 顯示版本信息
            擴展格式和設(shè)備格式域:
                    Address:  start address of map  映像起始地址
                    Kbytes:  size of map in kilobytes  映像大小
                    RSS:  resident set size in kilobytes  駐留集大小
                    Dirty:  dirty pages (both shared and private) in kilobytes  臟頁大小
                    Mode:  permissions on map 映像權(quán)限: r=read, w=write, x=execute, s=shared, p=private (copy on write)  
                    Mapping:  file backing the map , or '[ anon ]' for allocated memory, or '[ stack ]' for the program stack.  映像支持文件,[anon]為已分配內(nèi)存 [stack]為程序堆棧
                    Offset:  offset into the file  文件偏移
                    Device:  device name (major:minor)  設(shè)備名
            輸出說明:
            mapped 表示該進程映射的虛擬地址空間大小,也就是該進程預(yù)先分配的虛擬內(nèi)存大小,即ps出的vsz
            writeable/private  表示進程所占用的私有地址空間大小,也就是該進程實際使用的內(nèi)存大小    
            shared 表示進程和其他進程共享的內(nèi)存大小

            9、
            ss(
            Socket Statistics的縮寫)
            用來顯示處于活動狀態(tài)的套接字信息。ss命令可以用來獲取socket統(tǒng)計信息,它可以顯示和netstat類似的內(nèi)容。但ss的優(yōu)勢在于它能夠顯示更多更詳細的有關(guān)TCP和連接狀態(tài)的信息,而且比netstat更快速更高效。
            選項:-h:顯示幫助信息; -V:顯示指令版本信息; -n:不解析服務(wù)名稱,以數(shù)字方式顯示; -a:顯示所有的套接字; -l:顯示處于監(jiān)聽狀態(tài)的套接字; -o:顯示計時器信息; -m:顯示套接字的內(nèi)存使用情況; -p:顯示使用套接字的進程信息; -i:顯示內(nèi)部的TCP信息; -4:只顯示ipv4的套接字; -6:只顯示ipv6的套接字; -t:只顯示tcp套接字; -u:只顯示udp套接字; -d:只顯示DCCP套接字; -w:僅顯示RAW套接字; -x:僅顯示UNIX域套接字。-f, --family=FAMILY  顯示 FAMILY類型的套接字(sockets),F(xiàn)AMILY可選,支持  unix, inet, inet6, link, netlink
            -A, --query=QUERY, --socket=QUERY
                  QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
            -D, --diag=FILE     將原始TCP套接字(sockets)信息轉(zhuǎn)儲到文件
             -F, --filter=FILE   從文件中都去過濾器信息
                   FILTER := [ state TCP-STATE ] [ EXPRESSION ]
            列出所有打開的網(wǎng)絡(luò)連接端口:ss -l
            查看進程使用的socket:ss -pl 
            顯示所有TCP Sockets:ss -t -a
            顯示所有狀態(tài)為established的SMTP連接:ss -o state established '( dport = :smtp or sport = :smtp )'  
            顯示所有連接到遠程服務(wù)器192.168.1.5的端口##ss dst 192.168.1.5
            匹配本地地址和端口號#ss src ADDRESS_PATTERN   http (80) port only ##
            樣將本地或者遠程端口和一個數(shù)比較? 
            使用以下參數(shù): 
            ## 遠程端口和一個數(shù)比較##
            ss dport OP PORT 
            ##本地端口和一個數(shù)比較 ##
            sport OP PORT 
            OP 可以代表以下任意一個: 
            <= or le : 小于或等于端口號
            >= or ge : 大于或等于端口號
            == or eq : 等于端口號
            != or ne : 不等于端口號
            < or gt : 小于端口號
            > or lt : 大于端口號

            10、iptraf是一個可交互式的IP網(wǎng)絡(luò)監(jiān)控工具。它可以生成多種網(wǎng)絡(luò)統(tǒng)計信息包括:TCP信息、UDP數(shù)量、ICMP和OSPF信息、以太網(wǎng)負載信 息、節(jié)點狀態(tài)、IP校驗錯誤等。

             

            posted on 2011-06-22 17:35 Benjamin 閱讀(967) 評論(0)  編輯 收藏 引用 所屬分類: linux

            国内精品久久久久影院网站| 国产精品成人久久久| 久久91这里精品国产2020| 久久婷婷是五月综合色狠狠| 99久久99这里只有免费费精品| 久久精品亚洲乱码伦伦中文| 熟妇人妻久久中文字幕| 久久99精品国产麻豆蜜芽| 亚洲中文久久精品无码ww16| 国产亚洲精午夜久久久久久 | 久久91亚洲人成电影网站| 色8激情欧美成人久久综合电| 久久精品国产99久久久| 久久亚洲中文字幕精品一区| 91精品国产91久久| 激情伊人五月天久久综合| 免费精品久久天干天干| 精品综合久久久久久88小说| 999久久久免费精品国产| 国产亚洲精品久久久久秋霞| 久久影院久久香蕉国产线看观看| 久久久噜噜噜www成人网| 国产色综合久久无码有码| 亚洲国产精品无码久久青草| 九九久久精品国产| 国内精品伊人久久久久影院对白 | 精品久久久久久无码中文字幕| 久久一日本道色综合久久| 久久久久久精品成人免费图片| 老司机午夜网站国内精品久久久久久久久| 精品国产一区二区三区久久久狼 | 久久久精品免费国产四虎| 国产精品久久久亚洲| 乱亲女H秽乱长久久久| 久久久久久久女国产乱让韩 | 国产成人精品久久亚洲| 国产一区二区精品久久| 亚洲欧美精品伊人久久| 伊人色综合久久| 久久精品无码av| 日本亚洲色大成网站WWW久久|