在運維的坑里摸爬滾打好幾年了,我還記得我剛開始的時候,我只會使用一些簡單的命令,寫腳本的時候,也是要多簡單有多簡單,所以有時候?qū)懗鰜淼哪_本又長又臭,像一些高級點的命令,比如說Xargs 命令、管道命令、自動應答命令等,如果當初我要是知道,那我也可能寫出簡潔高效的腳本。不管出于任何原因,我都想對一些Linux使用的高級命令進行用法說明,利人利己,以后不記得的話,我也可以回頭翻來看看。
1、實用的xargs命令
在平時的使用中,我認為xargs這個命令還是較為重要和方便的。我們可以通過使用這個命令,將命令輸出的結(jié)果作為參數(shù)傳遞給另一個命令。比如說我們想找出某個路徑下以.conf結(jié)尾的文件,并將這些文件進行分類,那么普通的做法就是先將以.conf結(jié)尾的文件先找出來,然后輸出到一個文件中,接著cat這個文件,并使用file文件分類命令去對輸出的文件進行分類。這個普通的方法還的確是略顯麻煩,那么這個時候xargs命令就派上用場了。
例1:找出 / 目錄下以.conf 結(jié)尾的文件,并進行文件分類
# find . -name * -type f -print | xargs grep "hostnames"。$ find . -name \ *-type f -print | xargs grep "dbo"。#find . -type f -print | xargs file。
輸出結(jié)果如下所示:
xargs后面不僅僅可以加文件分類的命令,你還可以加其他的很多命令,比如說實在一點的tar命令,你可以使用find命令配合tar命令,將指定路徑的特殊文件使用find命令找出來,然后配合tar命令將找出的文件直接打包,命令如下:
# find / -name *.conf -type f -print | xargs tar cjf test.tar.gz
2、命令或腳本后臺運行
有時候我們進行一些操作的時候,不希望我們的操作在終端會話斷了之后就跟著斷了,特別是一些數(shù)據(jù)庫導入導出操作,如果涉及到大數(shù)據(jù)量的操作,我們不可能保證我們的網(wǎng)絡在我們的操作期間不出問題,所以后臺運行腳本或者命令對我們來說是一大保障。
比如說我們想把數(shù)據(jù)庫的導出操作后臺運行,并且將命令的操作輸出記錄到文件,那么我們可以這么做:
nohup mysqldump -uroot -pxxxxx --all-databases > ./alldatabases.sql &(xxxxx是密碼)
當然如果你不想密碼明文,你還可以這么做:
mysqldump -uroot -p-d --skip-add-drop-table -b testdb>testdb.sql。mysqldump-uroot-pmypasssecretcncounter>cncounter_dump.sql.20140414_1333。(2)、從rds導出:mysqldump -uroot -ptest -hmasterhost.mysql.rds.aliyuncs.com> /tmp/test.sql。
執(zhí)行了上述命令后,會提示叫你輸入密碼,輸入密碼后,該命令還在前臺運行,但是我們的目的是后天運行該命令,這個時候你可以按下Ctrl+Z,然后在輸入bg就可以達到第一個命令的效果,讓該命令后臺運行,同時也可以讓密碼隱蔽輸入。
命令后臺執(zhí)行的結(jié)果會在命令執(zhí)行的當前目錄下留下一個nohup.out文件,查看這個文件就知道命令有沒有執(zhí)行報錯等信息。
3、找出當前系統(tǒng)內(nèi)存使用量較高的進程
在很多運維的時候,我們發(fā)現(xiàn)內(nèi)存耗用較為嚴重,那么怎么樣才能找出內(nèi)存消耗的進程排序呢?