一、字符串截取(不用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活動的信息。這些信息反映了系統的負載情況。
類別 | 項目 | 含義 | 說明 |
Procs | r | 等待執行的任務數 | 展示了正在執行和等待CPU資源的任務個數。當這個值超過了CPU數目,就會出現CPU瓶頸了 |
| b | | |
Memory | swpd | 正在使用的swap大小單位K | |
| free | 空閑的內存空間 | |
| buff | 已使用的buff大小,對塊設備的讀寫進行緩沖 | |
| cache | 已使用的cache大小,文件系統的cache | |
| inact | | |
| active | | |
Swap | si | 交換內存使用,由磁盤調入內存 | |
| so | 交換內存使用,由內存調入磁盤 | |
IO | bi | 從塊設備讀入的數據總量(讀磁盤) (KB/s), | |
| bo | 寫入到塊設備的數據總理(寫磁盤) (KB/s) | |
System | in | 每秒產生的中斷次數 | |
| cs | 每秒產生的上下文切換次數 | 上面這2個值越大,會看到由內核消耗的CPU時間會越多 |
CPU | us | 用戶進程消耗的CPU時間百分比 | us 的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超過50% 的使用,那么我們就該考慮優化程序算法或者進行加速了 |
| sy | 內核進程消耗的CPU時間百分比 | sy 的值高時,說明系統內核消耗的CPU資源多,這并不是良性的表現,我們應該檢查原因。 |
| id | 空閑 | |
| wa | IO等待消耗的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校驗錯誤等。