在上篇《bash shell命令(1)》中,介紹了幾種簡單的linux shell命令,今天繼續介紹bash shell命令
本文地址:http://www.CUOXin.com/archimedes/p/bash-shell2.html,轉載請注明源地址。
監測程序1、探查進程
想監測進程,需要使用ps命令,ps命令可以輸出運行在系統上的所有程序的許多信息
默認情況下,pa命令不會出現提供那么多的信息。
ps命令最常用的還是用于監控后臺進程的工作情況,因為后臺進程是不和屏幕鍵盤這些標準輸入/輸出設備進行通信的,所以如果需要檢測其情況,便可以使用ps命令了.該命令語法格式如下:ps [選項]-e 顯示所有進程,環境變量-f 全格式-h 不顯示標題-l 長格式-w 寬輸出a 顯示終端上的所有進程,包括其他用戶的進程r 只顯示正在運行的進程x 顯示沒有控制終端的進程
2、實時監測進程
ps命令只能顯示某個特定時間點的信息,如果想觀察頻繁進換出內存的進程的趨勢,ps指令就不方便了,top指令剛好適用
說明:
前五行是當前系統情況整體的統計信息區。下面我們看每一行信息的具體意義。
第一行,任務隊列信息,同uptime命令的執行結果,具體參數說明情況如下:
06:32:21 —當前系統時間
up 11:09 —系統已經運行了11小時09分鐘
2users—當前有2個用戶登錄系統
loadaverage: 0.14, 0.09, 0.06 —loadaverage后面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
loadaverage數據是每隔5秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了。
第二行,Tasks—任務(進程),具體信息說明如下:
系統現在共有304個進程,其中處于運行中的有1個,303個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵尸)的有0個。
第三行,cpu狀態信息,具體屬性說明如下:
1.0us—用戶空間占用CPU的百分比。
1.0sy—內核空間占用CPU的百分比。
0.0ni—改變過優先級的進程占用CPU的百分比
98.0id—空閑CPU百分比
0.0wa—IO等待占用CPU的百分比
0.0hi—硬中斷(HardwareIRQ)占用CPU的百分比
0.0si—軟中斷(SoftwareInterrupts)占用CPU的百分比
備注:在這里CPU的使用比率和windows概念不同,需要理解linux系統用戶空間和內核空間的相關知識!
第四行,內存狀態,具體信息如下:
1010448k total—物理內存總量
911632k used—使用中的內存總量
98816k free—空閑內存總量
51368k buffers—緩存的內存量
第五行,swap交換分區信息,具體信息說明如下:
1046524ktotal—交換區總量
7816kused—使用的交換區總量
1038708kfree—空閑交換區總量
318336kcached—緩沖的交換區總量
備注:
第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核并不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。
如果出于習慣去計算可用內存數,這里有個近似的計算公式:第四行的free+第四行的buffers+第五行的cached,按這個公式計算此臺服務器的可用內存.
對于內存監控,在top里我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。
第六行,空行。
第七行以下:各進程(任務)的狀態監控,項目列信息說明如下:
PID—進程id
USER—進程所有者
PR—進程優先級
NI—nice值。負值表示高優先級,正值表示低優先級
VIRT—進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES—進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR—共享內存大小,單位kb
S—進程狀態。D=不可中斷的睡眠狀態R=運行S=睡眠T=跟蹤/停止Z=僵尸進程
%CPU—上次更新到現在的CPU時間占用百分比
%MEM—進程使用的物理內存百分比
TIME+—進程使用的CPU時間總計,單位1/100秒
COMMAND—進程名稱(命令名/命令行)
top常用參數如下:
-b批處理
-c顯示完整的治命令
-I忽略失效過程
-s保密模式
-S累積模式
-i<時間>設置間隔時間
-u<用戶名>指定用戶名
-p<進程號>指定進程
-n<次數>循環顯示的次數
3、結束進程
在linux上,進程之間通過信號來通信,進程的信號就是預定好一個消息,進程能識別它并作出反應
linux進程信號如下:
在linux上有兩個命令可以向運行中的進程發出進程信號:kill和killall
kill命令
Linux中的kill命令用來終止指定的進程(terminateaprocess)的運行,是Linux下進程管理的常用命令。通常,終止一個前臺進程可以使用Ctrl+C鍵,但是,對于一個后臺進程就須用kill命令來終止,我們就需要先使用ps/pidof/pstree/top等工具獲取進程PID,然后使用kill命令來殺掉該進程。kill命令是通過向進程發送指定的信號來結束相應進程的。在默認情況下,采用編號為15的TERM信號。TERM信號將終止所有不能捕獲該信號的進程。對于那些可以捕獲該信號的進程就要用編號為9的kill信號,強行“殺掉”該進程。
1.命令格式:
kill[參數][進程號]
2.命令功能:
發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。如果任無法終止該程序可用“-KILL”參數,其發送的信號為SIGKILL(9),將強制結束進程,使用ps命令或者jobs命令可以查看進程號。root用戶將影響用戶的進程,非root用戶只能影響自己的進程。
3.命令參數:
-l信號,若果不加信號的編號參數,則使用“-l”參數會列出全部的信號名稱
-a當處理當前進程時,不限制命令名和進程號的對應關系
-p指定kill命令只打印相關進程的進程號,而不發送任何信號
-s指定發送信號
-u指定用戶
注意:
1、kill命令可以帶信號號碼選項,也可以不帶。如果沒有信號號碼,kill命令就會發出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理并釋放資源。也可以用kill向進程發送特定的信號。例如:
kill-2123
它的效果等同于在前臺運行PID為123的進程時按下Ctrl+C鍵。但是,普通用戶只能使用不帶signal參數的kill命令或最多使用-9信號。
2、kill可以帶有進程ID號作為參數。當用kill向這些進程發送信號時,必須是這些進程的主人。試圖撤銷一個沒有權限撤銷的進程或撤銷一個不存在的進程,就會得到一個錯誤信息。
3、可以向多個進程發信號或終止它們。
4、當kill成功地發送了信號后,shell會在屏幕上顯示出進程的終止信息。有時這個信息不會馬上顯示,只有當按下Enter鍵使shell的命令提示符再次出現時,才會顯示出來。
5、應注意,信號使進程強行終止,這常會帶來一些副作用,如數據丟失或者終端無法恢復到正常狀態。發送信號時必須小心,只有在萬不得已時,才用kill信號(9),因為進程不能首先捕獲它。要撤銷所有的后臺作業,可以輸入kill0。因為有些在后臺運行的命令會啟動多個進程,跟蹤并找到所有要殺掉的進程的PID是件很麻煩的事。這時,使用kill0來終止所有由當前shell啟動的進程,是個有效的方法。
kill命令可以通過PID(進程號)給進程發信號,默認情況下,kill命令會向命令行中列出的全部PID發送一個TERM信號。遺憾的是,你只能用進程的PID而不能用命令名,所以kill命令有時并不好用
要發送進程信號,你必須是進程的屬主或登錄為root用戶。
killall命令非常的強大,它支持通過進程名而不是進程號來結束進程。killall命令也支持通配符,這在系統因負載過大而變得很慢時很有用
檢測磁盤空間1、掛載存儲媒體
Linux系統將所有的磁盤都掛載到一個虛擬目錄下,在使用新的存儲媒體之前,你需要把它放到虛擬目錄下,這項工作成為掛載
大多數Linux發行版都能自動掛載指定的可移動存儲媒體
(1)mount命令
默認情況下,mount命令會輸出當前系統上掛載的設備列表:
格式:mount [-參數] [設備名稱] [掛載點]其中常用的參數有:
umount命令從Linux系統上移除一個可移動設備時,不能直接從系統上移除,而應該先卸載它,卸載設備的命令叫umount
umount命令的格式非常簡單:
umount [directory | device]
umount命令支持通過設備文件或者是掛載點來指定要卸載的設備。如果有任何程序正在使用設備上的文件,系統就不會允許你卸載它
(2)使用df命令
命令格式:
df[選項][文件]
必要參數:
-a全部文件系統列表
-h方便閱讀方式顯示
-H等于“-h”,但是計算式,1K=1000,而不是1K=1024
-i顯示inode信息
-k區塊為1024字節
-l只顯示本地文件系統
-m區塊為1048576字節
--no-sync忽略sync命令
-P輸出格式為POSIX
--sync在取得磁盤信息前,先執行sync命令
-T文件系統類型
選擇參數:
--block-size=<區塊大小>指定區塊大小
-t<文件系統類型>只顯示選定文件系統的磁盤信息
-x<文件系統類型>不顯示選定文件系統的磁盤信息
--help顯示幫助信息
--version顯示版本信息
df命令就是用來輕松查看所有已掛載磁盤的使用情況的:
描述:
第一列:設備文件的位置
第二列:能容納多少個1024字節大小的塊
第三列:已使用多少個1024字節大小的塊
第四列:還有多少個1024字節大小的塊可用
第五列:已用空間占的比例
第六列:設備掛載到了哪個掛載點上
(3)使用du命令
1.命令格式:
du[選項][文件]
2.命令功能:
顯示每個文件和目錄的磁盤使用空間。
3.命令參數:
-a或-all顯示目錄中個別文件的大小。
-b或-bytes顯示目錄或文件大小時,以byte為單位。
-c或--total除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和。
-k或--kilobytes以KB(1024bytes)為單位輸出。
-m或--megabytes以MB為單位輸出。
-s或--summarize僅顯示總計,只列出最后加總的值。
-h或--human-readable以K,M,G為單位,提高信息的可讀性。
-x或--one-file-xystem以一開始處理時的文件系統為準,若遇上其它不同的文件系統目錄則略過。
-L<符號鏈接>或--dereference<符號鏈接>顯示選項中所指定符號鏈接的源文件大小。
-S或--separate-dirs顯示個別目錄的大小時,并不含其子目錄的大小。
-X<文件>或--exclude-from=<文件>在<文件>指定目錄或文件。
--exclude=<目錄或文件>略過指定的目錄或文件。
-D或--dereference-args顯示指定符號鏈接的源文件大小。
-H或--si與-h參數相同,但是K,M,G是以1000為換算單位。
-l或--count-links重復計算硬件鏈接的文件。
處理數據文件1、排序數據
默認情況下,sort命令按你為這個會話指定的默認語言的排序規則來對文本文件中的數據行排序,sort命令是幫我們依據不同的數據類型進行排序,其語法及常用參數格式:
sort [-bcfMnrtk][源文件][-o 輸出文件]補充說明:sort可針對文本文件的內容,以行為單位來排序。
參 數:-b忽略每行前面開始出的空格字符。-c檢查文件是否已經按照順序排序。-f排序時,忽略大小寫字母。-M將前面3個字母依照月份的縮寫進行排序。-n依照數值的大小排序。-o<輸出文件>將排序后的結果存入指定的文件。-r以相反的順序來排序。-t<分隔字符>指定排序時所用的欄位分隔字符。 -k選擇以哪個區間進行排序。
2、搜素數據
Linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。grep全稱是GlobalRegularExpressionPrint,表示全局正則表達式版本,它的使用權限是所有用戶。
grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名。搜索的結果被送到標準輸出,不影響原文件內容。
grep可用于shell腳本,因為grep通過返回一個狀態值來說明搜索的狀態,如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進行一些自動化的文本處理工作。
1.命令格式:
grep[option]patternfile
2.命令功能:
用于過濾/搜索的特定字符。可使用正則表達式能多種命令配合使用,使用上十分靈活。
3.命令參數:
-a--text#不要忽略二進制的數據。
-A<顯示行數>--after-context=<顯示行數>#除了顯示符合范本樣式的那一列之外,并顯示該行之后的內容。
-b--byte-offset#在顯示符合樣式的那一行之前,標示出該行第一個字符的編號。
-B<顯示行數>--before-context=<顯示行數>#除了顯示符合樣式的那一行之外,并顯示該行之前的內容。
-c--count#計算符合樣式的列數。
-C<顯示行數>--context=<顯示行數>或-<顯示行數>#除了顯示符合樣式的那一行之外,并顯示該行之前后的內容。
-d<動作>--directories=<動作>#當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep指令將回報信息并停止動作。
-e<范本樣式>--regexp=<范本樣式>#指定字符串做為查找文件內容的樣式。
-E--extended-regexp#將樣式為延伸的普通表示法來使用。
-f<規則文件>--file=<規則文件>#指定規則文件,其內容含有一個或多個規則樣式,讓grep查找符合規則條件的文件內容,格式為每行一個規則樣式。
-F--fixed-regexp#將樣式視為固定字符串的列表。
-G--basic-regexp#將樣式視為普通的表示法來使用。
-h--no-filename#在顯示符合樣式的那一行之前,不標示該行所屬的文件名稱。
-H--with-filename#在顯示符合樣式的那一行之前,表示該行所屬的文件名稱。
-i--ignore-case#忽略字符大小寫的差別。
-l--file-with-matches#列出文件內容符合指定的樣式的文件名稱。
-L--files-without-match#列出文件內容不符合指定的樣式的文件名稱。
-n--line-number#在顯示符合樣式的那一行之前,標示出該行的列數編號。
-q--quiet或--silent#不顯示任何信息。
-r--recursive#此參數的效果和指定“-drecurse”參數相同。
-s--no-messages#不顯示錯誤信息。
-v--revert-match#顯示不包含匹配文本的所有行。
-V--version#顯示版本信息。
-w--Word-regexp#只顯示全字符合的列。
-x--line-regexp#只顯示全列符合的列。
-y#此參數的效果和指定“-i”參數相同。
4.規則表達式:
grep的規則表達式:
^#錨定行的開始如:'^grep'匹配所有以grep開頭的行。
$#錨定行的結束如:'grep$'匹配所有以grep結尾的行。
.#匹配一個非換行符的字符如:'gr.p'匹配gr后接一個任意字符,然后是p。
*#匹配零個或多個先前字符如:'*grep'匹配所有一個或多個空格后緊跟grep的行。
.*#一起用代表任意字符。
[]#匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep。
[^]#匹配一個不在指定范圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。
/(../)#標記匹配字符,如'/(love/)',love被標記為1。
/<#錨定單詞的開始,如:'/<grep'匹配包含以grep開頭的單詞的行。
/>#錨定單詞的結束,如'grep/>'匹配包含以grep結尾的單詞的行。
x/{m/}#重復字符x,m次,如:'0/{5/}'匹配包含5個o的行。
x/{m,/}#重復字符x,至少m次,如:'o/{5,/}'匹配至少有5個o的行。
x/{m,n/}#重復字符x,至少m次,不多于n次,如:'o/{5,10/}'匹配5--10個o的行。
/w#匹配文字和數字字符,也就是[A-Za-z0-9],如:'G/w*p'匹配以G后跟零個或多個文字或數字字符,然后是p。
/W#/w的反置形式,匹配一個或多個非單詞字符,如點號句號等。
/b#單詞鎖定符,如:'/bgrep/b'只匹配grep。
POSIX字符:
為了在不同國家的字符編碼中保持一至,POSIX(ThePortableOperatingSystemInterface)增加了特殊的字符類,如[:alnum:]是[A-Za-z0-9]的另一個寫法。要把它們放到[]號內才能成為正則表達式,如[A-Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符類。
[:alnum:]#文字數字字符
[:alpha:]#文字字符
[:digit:]#數字字符
[:graph:]#非空字符(非空格、控制字符)
[:lower:]#小寫字符
[:cntrl:]#控制字符
[:print:]#非空字符(包括空格)
[:punct:]#標點符號
[:space:]#所有空白字符(新行,空格,制表符)
[:upper:]#大寫字符
[:xdigit:]#十六進制數字(0-9,a-f,A-F)
壓縮數據linux文件壓縮工具(compress已經很少在Linux下見到了):
1、bzip2工具
在壓縮大型二進制文件領域尤其流行,bzip2軟件包有以下幾個工具:
bzip2:用來壓縮文件
bzcat:用來顯示壓縮的文本文件的內容
bunzip2:用來解壓壓縮后的.bz2文件
bzip2recover:用來嘗試恢復損毀的壓縮文件
2、gzip工具
在linux上最流行的文件壓縮工具,這個軟件包含有下面的工具:
gzip:用來壓縮文件
gzcat:用來查看壓縮過的文本文件的內容
gunzip:用來解壓文件
3、zip工具
linux的zip軟件包有5個:
zip:創建一個壓縮文件,包含指定的文件和目錄
zipcloak:創建一個加密的壓縮文件,包含指定的文件和目錄
zipnote:從zip文件中提取批注
zipsplit:將一個現有zip文件分割成多個更小的固定大小的文件
unzip:從壓縮過的zip文件中提取文件和目錄
可以通過下面的命令查看zip命令的所有參數:
$ zip
歸檔數據Unix和Linux上最廣泛使用的歸檔工具是tar命令
tar命令可以為linux的文件和目錄創建檔案。利用tar,可以為某一特定文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。tar最初被用來在磁帶上創建檔案,現在,用戶可以在任何設備上創建檔案。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對于備份文件或將幾個文件組合成為一個文件以便于網絡傳輸是非常有用的。
首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件。
為什么要區分這兩個概念呢?這源于Linux中很多壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),然后再用壓縮程序進行壓縮(gzipbzip2命令)。
linux下最常用的打包程序就是tar了,使用tar程序打出來的包我們常稱為tar包,tar包文件的命令通常都是以.tar結尾的。生成tar包后,就可以用其它的程序來進行壓縮。
1.命令格式:
tar[必要參數][選擇參數][文件]
2.命令功能:
用來壓縮和解壓文件。tar本身不具有壓縮功能。他是調用壓縮功能實現的
3.命令參數:
必要參數有如下:
-A新增壓縮文件到已存在的壓縮
-B設置區塊大小
-c建立新的壓縮文件
-d記錄文件的差別
-r添加文件到已經壓縮的文件
-u添加改變了和現有的文件到已經存在的壓縮文件
-x從壓縮的文件中提取文件
-t顯示壓縮文件的內容
-z支持gzip解壓文件
-j支持bzip2解壓文件
-Z支持compress解壓文件
-v顯示操作過程
-l文件系統邊界設置
-k保留原有文件不覆蓋
-m保留文件不被覆蓋
-W確認壓縮文件的正確性
可選參數如下:
-b設置區塊數目
-C切換到指定目錄
-f指定壓縮文件
--help顯示幫助信息
--version顯示版本信息
新聞熱點
疑難解答