• <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

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

            linux開發筆記(三)

            一、字符串截取(不用wak),下面的//等也可以字符串來表示
            echo $a|awk '{print substr($a,1,8)}'
            substr是awk中的一個子函數,對第一個參數的進行截取,從第一個字符開始,共截取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、從左邊第幾個字符開始,及字符的個數

            echo ${var:0:5}

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

             

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

            echo ${var:7}

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

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

            echo ${var:0-7:3}

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

             

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

            echo ${var:0-7}

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


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

            流程控制 "if" 表達式 如果條件為真則執行then后面的部分: if ....; then
            ....
            elif ....; then
            ....
            else
            ....
            fi
            大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…   通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括號的空格。
            [ -f "somefile" ] :判斷是否是一個文件
            [ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執行權限
            [ -n "$var" ] :判斷$var變量是否有值
            [ "$a" = "$b" ] :判斷$a和$b是否相等          -r file     用戶可讀為真
            -w file     用戶可寫為真
            -x file     用戶可執行為真
            -f file     文件為正規文件為真
            -d file     文件為目錄為真
            -c file     文件為字符特殊文件為真
            -b file     文件為塊特殊文件為真
            -s file     文件大小非0時為真
            -t file     當文件描述符(默認為1)指定的設備為終端時為真
            #########################################################
            含條件選擇的shell腳本
                對于不含變量的任務簡單shell腳本一般能勝任。但在執行一些決策任務時,就需要包含if/then的條件判斷了。shell腳本編程支持此類運算,包 括比較運算、判斷文件是否存在等。基本的if條件命令選項有: -eq —比較兩個參數是否相等(例如,if [ 2 –eq 5 ])
            -ne —比較兩個參數是否不相等
            -lt —參數1是否小于參數2
            -le —參數1是否小于等于參數2
            -gt —參數1是否大于參數2
            -ge —參數1是否大于等于參數2
            -f — 檢查某文件是否存在(例如,if [ -f "filename" ])
            -d — 檢查目錄是否存在
            幾 乎所有的判斷都可以用這些比較運算符實現。腳本中常用-f命令選項在執行某一文件之前檢查它是否存在。 ################################################################## 判斷文件是否存在
             #!/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等等...
            位置參數,從命令行傳遞給腳本,或者是傳遞給函數.或者賦職給一個變量.
            此數目可以任意多,但只有前9個可以被訪問,使用shift命令可以改變這個限制。
            (具體見Example 4-5 和Example 11-15)
            $0
            $0表示當前執行的進程名,script 本身的名字,或者在正則表達式中表示整行輸出

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

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

            while true可以寫為while :


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

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

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

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

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


            模式出現機率:抽取包含數字4至少重復出現兩次的所有行,方法如下:[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 數值相等
            -ne 數值不相等
            -gt 第一個數大于第二個數
            -lt 第一個數小于第二個數
            -le 第一個數小于等于第二個數
            -ge 第一個數大于等于第二個數
            例:測試兩個數是否相等
            $NUMBER=130
            $[ "$NUMBER" -eq "130" ]
            $echo $?
            0
            結果正確.

            五、關于重定向
            基本用法:
            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 分界符。
            例如:將字符串abcd添加到文件simple.txt的末尾,可用echo "abcd">>simple.txt;

            擴展用法:
            >&n 使用系統調用 dup (2) 復制文件描述符 n 并把結果用作標準輸出;
            <&n 標準輸入復制自文件描述符 n;
            <&- 關閉標準輸入(鍵盤);
            >&- 關閉標準輸出;
            n<&- 表示將 n 號輸入關閉;
            n>&- 表示將 n 號輸出關閉;

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

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

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

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

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

              使用未初始化的內存 (Use of uninitialised memory)
              使用已經釋放了的內存 (Reading/writing memory after it has been free’d)
              使用超過malloc分配的內存空間(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申請和釋放內存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
              src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)
              重復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進行內存泄露檢查;
            執行結果definitely lost: 0 bytes in 0 blocks表示沒有內存泄露


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

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

            #1)對于.tar結尾的文件
            tar -xf all.tar
            2)對于.gz結尾的文件
            gzip -d all.gz
              gunzip all.gz
            3)對于.tgz或.tar.gz結尾的文件
            tar -xzf all.tar.gz
              tar -xzf all.tgz
            4)對于.bz2結尾的文件
            bzip2 -d all.bz2
              bunzip2 all.bz2
            5)對于tar.bz2結尾的文件
            tar -xjf all.tar.bz2
            6)對于.Z結尾的文件
            uncompress all.Z
            7)對于.tar.Z結尾的文件
            tar -xZf all.tar.z
            另外對于Window下的常見壓縮文件.zip和.rar,Linux也有相應的方法來解壓它們:
            1)對于.zip
            linux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參
            數選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:
            # zip all.zip *.jpg
              這條命令是將所有.jpg的文件壓縮成一個zip包
            # unzip all.zip
              這條命令是將all.zip中的所有文件解壓出來
            2)對于.rar
            要在linux下處理.rar文件,需要安裝RAR for Linux,可以從網上下載,但要記住,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是解壓程序。它們的參數選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:
            # 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結尾的行bca,12a,aaa,.......
            * :匹配0個或多個此單字符。 如(a)* 匹配 空,a,aa,aaa,....
            [] :只匹配[]內字符。可以是一個單字符,也可以是字符序列,用","將里面要匹配的不同字符串分開。也可以使用-來表示[]內字符序列的范圍,如[1-5]表示[12345]
            \ :只用來屏蔽一個元字符的特殊含義。 如\*,\',\",\|,\+,\^,\. 等
            .:(點)只匹配任意單字符。
            pattern\{n\}:只用來匹配前面pattern出現的次數.n為次數。如a\{2\}匹配aa.
            pattern\{n,\}:含義同上,但次數最少為n.如a\{2,\}匹配aa,aaa,aaaa,.....
            pattern\{n,m\}:含義同上,但次數在n和m之間。如a\{2,4\}匹配aa,aaa,aaaa三個
            (3)舉例說明:
            ^$ :匹配空行
            ^.$ :匹配包含一個字符的行
            \*\.pas :匹配以*.pas結尾的所有字符或文件
            [0123456789]或[0-9] :假定要匹配任意一個數字
            [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)查找具有某些特征文件的命令,可遍歷當前目錄甚至于整個文件系統來查看某些文件或目錄,其遍歷大的文件系統時一般放在后臺執行。
            (2)find命令的一般形式
            find pathname -options [-print -exec -ok]
            -pathname :find命令所查找的目錄路徑。如用"."來表示當前的目錄,用/來表示系統根目錄
            -print :find命令將匹配的文件輸出到標準輸出
            -exec: find命令對匹配的文件執行該參數所給出的shell命令,相應的命令形式為
            'command'{} \; (注意{}和\之間的空格)
            -ok 和 -exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
            options有如下幾種:
            -name :按照文件名查找文件
            -perm :按照文件權限來查找文件
            -user :按照文件屬主來查找文件
            -group :按照文件所屬的組來查找文件
            -mtime -n +n 按照文件的更改時間來查找文件,-n表示文件更改時間距現在n天以內,+n表示文件更改時間距現在n天以前。find命令還有-atime 和-ctime選項,但它們都和-mtime選項相似。
            -size n[c]查找文件長度為n塊的文件,帶有c時表示文件長度以字節計。
            -nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在
            -newer file1 !file2查找更改時間比文件file1新但比文件file2舊的文件
            -depth 先查找指定目錄有無匹配文件,若無則再在子目錄中查找
            -type 查找某一類型的文件,如
            b :塊設備文件
            d:目錄
            e:字符設備文件
            p;管道文件
            l:符號鏈接文件
            f:普通文件
            (3)find命令舉例
            find -name "*.txt" -print 查找txt結尾的文件并輸出到屏幕上
            find /cmd ".sh" -print 查找/cmd目錄下所有sh文件,并輸出
            find . -perm 755 -print 查找當前目錄下權限為755的文件,并輸出
            find `pwd` -user root -print 查找當前目錄下屬主為root的文件,并輸出
            find ./ -group sunwill -print 查找當前目錄下所屬主是sunwill的文件
            find /var -mtime -5 -print 查找/var目錄下更改時間為5天內的所有文件
            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字節的文件
            find / -name "con.file" -depth -print 查找根目錄下有無"con.file",若無則在其子目錄中查找
            find . -type f -exec ls -l {} \; 查找當前目錄下是否有普通文件,若有則執行ls -l
            (4)xargs命令
            在 使用find命令的-exec選項處理匹配到的文件時,find命令將所有匹配到的文件一起傳遞給exec。不幸的是,有些系統對能夠傳遞給exec的命 令長度有限制,這樣find命令運行幾分鐘之后就算出現溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs的用處所在,特別是與 find命令一起使用,exec會發起多個進程,而xargs會多個,只有一個
            find ./ -perm -7 -print | xargs chmod o-w 查找權限為7的文件并傳遞給chmod處理
            3.grep介紹
            (1)grep 的一般格式為 grep [options] 基本正則表達式 [文件]
            字符串參數最好采用是雙引號括,一是以防被誤解為shell命令,二是可以用來查找多個單詞組成的字符串
            -c:只輸出匹配行的記數
            -i:不區分大小寫(只適用于單個字符)
            -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開頭接下去兩位都是數字的行。
            4.合并與分割(sort,uniq,join,cut,paste,split)
            (1)sot命令
            sort [options] files 許多不同的域按不同的列順序排序
            -c 測試文件是否已經排序
            -m 合并兩個排序文件
            -u 刪除所有同樣行
            -o 存儲sort結果的輸出文件名
            -t 域分隔符,用非空格或tab開始排序
            +n :n 為列號,使用此列號開始排序
            -n 指定排序是域上的數字分類項
            -r 比較求逆
            sort -c test.txt 測試文件是否分類過
            sort -u test.txt 排序并合并一樣的行
            sort -r test.txt 以相反的順序排列
            sort -t "/" +2 test.txt 以"/"分隔,第二個域開始分類
            (2)uniq命令
            uniq [options ] files 從一個文本文件中去除或禁止重復行
            -u 只顯示不重復行
            -d 只顯示有重復數據行,每種重復行只顯示其中一行
            -c 打印每一重復行出現次數
            -f :n為數字,前n個域被忽略
            uniq -f 2 test.txt 忽略前2個域
            (3)join 命令
            join [options] file1 file2 用來將來自兩個分類文本文件的行連在一起
            -an,n為一數字,用于連接時從文件n中顯示不匹配行
            -onm ,連接域,n為文件號,m為域號
            -jnm,n為文件號,m為域號,使用其他域作連接域
            -t ,域分隔符。用來設置非空格或tab鍵的域分隔符。
            (4)split命令
            split -output_file_size intput_filename output_filename
            用來將大文件分割成小文件。
            -b n,每個分割文件的大小n
            -C n,每個分割文件一行最多n字節
            -l n,每個分割文件的行數
            -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內置的調試宏

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

            __LINE__:記錄文件已經被編譯的行數

            __DATE__:記錄文件的編譯日期

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

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



            修改linux系統默認的文件連接數的方法

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

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

            三、Linux網絡內核的IP_TABLE防火墻對最大跟蹤的TCP連接數有限制,導致程序在 connect()調用中阻塞,如同死機;修改方法如下:
            1、修改/etc/sysctl.conf文件,在文件中添加如下行:
            net.ipv4.ip_conntrack_max = 10240
            這表明將系統對最大跟蹤的TCP連接數限制設置為10240。請注意,此限制值要盡量小,以節省對內核內存的占用。
            2、執行sysctl -p看是否成功
            在這一步常見的錯誤就是:"net.ipv4.ip_conntrack_max" is an unknown key
            解決方法如下:
            執行 modprobe ip_conntrack
            echo "modprobe ip_conntrack" >> /etc/rc.local
            /proc/sys/net/ipv4/netfilter目錄下,打開ip_conntrack_max,修改其值即可;
            可以看出在有的linux系統下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的線程數: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(設置coredump文件格式)
            在有的linux版本上,上面一句不起作用,重啟一下或重新打開coredump開關即可。
            六、其他:
            1.top:相當于windows下的任務管理器,在默認情況下,顯示系統中CPU使用率最高的任務,并每5秒鐘刷新一次。
            熱鍵用途
            t顯示摘要信息開關.
            m顯示內存信息開關.
            A分類顯示系統不同資源的使用大戶。有助于快速識別系統中資源消耗多的任務。
            f添加刪除所要顯示欄位.
            o調整所要顯示欄位的順序.
            r調整一個正在運行的進程Nice值.
            k結束一個正在運行的進程.
            z彩色/黑白顯示開關
            2、vmstat -
            獲得有關進程、虛存、頁面交換空間及 CPU活動的信息。這些信息反映了系統的負載情況。

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

            iostat -d -k 1 10
            參數 -d 表示,顯示設備(磁盤)使用狀態;-k某些使用block為單位的列強制使用Kilobytes為單位;1 10表示,數據顯示每隔1秒刷新一次,共顯示10次。
            參數-c用來獲取cpu部分狀態值:
            用-x參數我們可以獲得更多統計信息。
            rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合并Merge);wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。
            rsec/s:每秒讀取的扇區數;wsec/:每秒寫入的扇區數。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的響應時間,一般地系統IO響應時間應該低于5ms,如果大于10ms就比較大了。
            %util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的并發能力,所以磁盤使用未必就到了瓶頸)。

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

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

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

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

            與CPU有關的輸出的含義如下:
            參數 解釋 從/proc/stat獲得數據
            CPU 處理器ID
            user 在internal時間段里,用戶態的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接收的中斷的次數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時間前的值。上表中的所有值可取到兩位小數點。

            7、sar命令用來搜集、報告和儲存系統活動信息。查看網路計數器。
            參數:

             

            -A:所有報告的總和

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

            8、pmap命令可以顯示進程的內存映射,使用這個命令可以找出造成內存瓶頸的原因。使用#pmap PID 或者 #pmap [options] PID 
            在輸出中它顯示全部的地址,kbytes,mode還有mapping。
            選項
            -x extended顯示擴展格式
            -d device顯示設備格式
            -q quiet不顯示header/footer行
            -V 顯示版本信息
            擴展格式和設備格式域:
                    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 映像權限: 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]為已分配內存 [stack]為程序堆棧
                    Offset:  offset into the file  文件偏移
                    Device:  device name (major:minor)  設備名
            輸出說明:
            mapped 表示該進程映射的虛擬地址空間大小,也就是該進程預先分配的虛擬內存大小,即ps出的vsz
            writeable/private  表示進程所占用的私有地址空間大小,也就是該進程實際使用的內存大小    
            shared 表示進程和其他進程共享的內存大小

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

            10、iptraf是一個可交互式的IP網絡監控工具。它可以生成多種網絡統計信息包括:TCP信息、UDP數量、ICMP和OSPF信息、以太網負載信 息、節點狀態、IP校驗錯誤等。

             

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

            亚洲欧美久久久久9999| 精品久久777| 久久99精品久久久久久水蜜桃| 午夜精品久久久久久影视riav| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲精品99久久久久中文字幕| 亚洲国产成人久久精品动漫| 国产产无码乱码精品久久鸭| 亚洲国产精品无码久久| 蜜臀av性久久久久蜜臀aⅴ| 日日躁夜夜躁狠狠久久AV| 久久午夜伦鲁片免费无码| 97久久超碰国产精品2021| 久久99热国产这有精品| 草草久久久无码国产专区| 久久久久久无码国产精品中文字幕| 国产毛片久久久久久国产毛片| 久久激情五月丁香伊人| 国产精品99久久久久久宅男小说| 狠狠色丁香久久婷婷综合| 久久久久99精品成人片试看| 久久99精品综合国产首页| 久久人妻少妇嫩草AV蜜桃| 国产美女亚洲精品久久久综合| 国色天香久久久久久久小说 | 久久久久99精品成人片欧美| avtt天堂网久久精品| 久久精品二区| 欧洲精品久久久av无码电影| 久久精品成人免费看| 中文国产成人精品久久亚洲精品AⅤ无码精品| 无码人妻久久一区二区三区蜜桃| 久久亚洲AV成人出白浆无码国产 | 国产成人无码精品久久久性色| 国产成人久久AV免费| 久久综合久久美利坚合众国 | 日本三级久久网| 久久精品国产亚洲AV久| 亚洲午夜久久影院| 久久精品国产精品亚洲毛片| 亚洲人成无码网站久久99热国产|