超實(shí)用的 Linux 高級(jí)命令
前言
在運(yùn)維的坑里摸爬滾打好幾年了,我還記得我剛開(kāi)始的時(shí)候,我只會(huì)使用一些簡(jiǎn)單的命令,寫(xiě)腳本的時(shí)候,也是要多簡(jiǎn)單有多簡(jiǎn)單,所以有時(shí)候?qū)懗鰜?lái)的腳本又長(zhǎng)又臭。
像一些高級(jí)點(diǎn)的命令,比如說(shuō) Xargs 命令、管道命令、自動(dòng)應(yīng)答命令等,如果當(dāng)初我要是知道,那我也可能寫(xiě)出簡(jiǎn)潔高效的腳本。
不管出于任何原因,我都想對(duì)一些 Linux 使用的高級(jí)命令進(jìn)行用法說(shuō)明,利人利己,以后不記得的話(huà),我也可以回頭翻來(lái)看看。
一、實(shí)用的 xargs 命令
在平時(shí)的使用中,我認(rèn)為 xargs 這個(gè)命令還是較為重要和方便的。我們可以通過(guò)使用這個(gè)命令,將命令輸出的結(jié)果作為參數(shù)傳遞給另一個(gè)命令。
比如說(shuō)我們想找出某個(gè)路徑下以 .conf 結(jié)尾的文件,并將這些文件進(jìn)行分類(lèi),那么普通的做法就是先將以 .conf 結(jié)尾的文件先找出來(lái),然后輸出到一個(gè)文件中,接著 cat 這個(gè)文件,并使用 file 文件分類(lèi)命令去對(duì)輸出的文件進(jìn)行分類(lèi)。
這個(gè)普通的方法還的確是略顯麻煩,那么這個(gè)時(shí)候 xargs 命令就派上用場(chǎng)了。
例1:找出 / 目錄下以 .conf 結(jié)尾的文件,并進(jìn)行文件分類(lèi)
命令:
輸出結(jié)果如下所示:

xargs 后面不僅僅可以加文件分類(lèi)的命令,你還可以加其他的很多命令,比如說(shuō)實(shí)在一點(diǎn)的tar命令,你可以使用find命令配合tar命令,將指定路徑的特殊文件使用find命令找出來(lái),然后配合tar命令將找出的文件直接打包,命令如下:
二、命令或腳本后臺(tái)運(yùn)行
有時(shí)候我們進(jìn)行一些操作的時(shí)候,不希望我們的操作在終端會(huì)話(huà)斷了之后就跟著斷了,特別是一些數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出操作,如果涉及到大數(shù)據(jù)量的操作,我們不可能保證我們的網(wǎng)絡(luò)在我們的操作期間不出問(wèn)題,所以后臺(tái)運(yùn)行腳本或者命令對(duì)我們來(lái)說(shuō)是一大保障。
比如說(shuō)我們想把數(shù)據(jù)庫(kù)的導(dǎo)出操作后臺(tái)運(yùn)行,并且將命令的操作輸出記錄到文件,那么我們可以這么做:(反斜杠代表?yè)Q行,可以忽略)
當(dāng)然如果你不想密碼明文,你還可以這么做:
執(zhí)行了上述命令后,會(huì)提示叫你輸入密碼,輸入密碼后,該命令還在前臺(tái)運(yùn)行,但是我們的目的是后天運(yùn)行該命令,這個(gè)時(shí)候你可以按下Ctrl+Z,然后在輸入bg就可以達(dá)到第一個(gè)命令的效果,讓該命令后臺(tái)運(yùn)行,同時(shí)也可以讓密碼隱蔽輸入。
命令后臺(tái)執(zhí)行的結(jié)果會(huì)在命令執(zhí)行的當(dāng)前目錄下留下一個(gè)nohup.out文件,查看這個(gè)文件就知道命令有沒(méi)有執(zhí)行報(bào)錯(cuò)等信息。
三、找出當(dāng)前系統(tǒng)內(nèi)存使用量較高的進(jìn)程
在很多運(yùn)維的時(shí)候,我們發(fā)現(xiàn)內(nèi)存耗用較為嚴(yán)重,那么怎么樣才能找出內(nèi)存消耗的進(jìn)程排序呢?
命令:

輸出的第4列就是內(nèi)存的耗用百分比。最后一列就是相對(duì)應(yīng)的進(jìn)程。
四、找出當(dāng)前系統(tǒng)CPU使用量較高的進(jìn)程
在很多運(yùn)維的時(shí)候,我們發(fā)現(xiàn)CPU耗用較為嚴(yán)重,那么怎么樣才能找出CPU消耗的進(jìn)程排序呢?
命令:

輸出的第3列為CPU的耗用百分比,最后一列就是對(duì)應(yīng)的進(jìn)程。
我想大家應(yīng)該也發(fā)現(xiàn)了,sort 命令后的3、4其實(shí)就是代表著第3列進(jìn)行排序、第4列進(jìn)行排序。
五、同時(shí)查看多個(gè)日志或數(shù)據(jù)文件
在日常工作中,我們查看日志文件的方式可能是使用tail命令在一個(gè)個(gè)的終端查看日志文件,一個(gè)終端就看一個(gè)日志文件。包括我在內(nèi)也是,但是有時(shí)候也會(huì)覺(jué)得這種方式略顯麻煩,其實(shí)有個(gè)工具叫做multitail可以在同一個(gè)終端同時(shí)查看多個(gè)日志文件。
首先安裝multitail:
multitail工具支持文本的高亮顯示,內(nèi)容過(guò)濾以及更多你可能需要的功能。
如下就來(lái)一個(gè)有用的例子:
此時(shí)我們既想查看secure的日志指定過(guò)濾關(guān)鍵字輸出,又想查看實(shí)時(shí)的網(wǎng)絡(luò)ping情況:
命令如下:

不是很方便?如果平時(shí)我們想查看兩個(gè)日志之間的關(guān)聯(lián)性,可以觀察日志輸出是否有觸發(fā)等。如果分開(kāi)兩個(gè)終端可能來(lái)回進(jìn)行切換有點(diǎn)浪費(fèi)時(shí)間,這個(gè)multitail工具查看未嘗不是一個(gè)好方法。
六、持續(xù)ping并將結(jié)果記錄到日志
很多時(shí)候,運(yùn)維總會(huì)聽(tīng)到一個(gè)聲音,是不是網(wǎng)絡(luò)出什么問(wèn)題了啊,導(dǎo)致業(yè)務(wù)出現(xiàn)怪異的癥狀,肯定是服務(wù)器網(wǎng)絡(luò)出問(wèn)題了。這個(gè)就是俗稱(chēng)的背鍋,業(yè)務(wù)出了問(wèn)題,第一時(shí)間相關(guān)人員找不到原因很多情況下就會(huì)把問(wèn)題歸結(jié)于服務(wù)器網(wǎng)絡(luò)有問(wèn)題。
這個(gè)時(shí)候你去ping幾個(gè)包把結(jié)果丟出來(lái),人家會(huì)反駁你,剛剛那段時(shí)間有問(wèn)題而已,現(xiàn)在業(yè)務(wù)都恢復(fù)正常了,網(wǎng)絡(luò)肯定正常啊,這個(gè)時(shí)候估計(jì)你要?dú)馑馈?/p>
你要是再拿出zabbix等網(wǎng)絡(luò)監(jiān)控的數(shù)據(jù),這個(gè)時(shí)候就不太妥當(dāng)了,zabbix的采集數(shù)據(jù)間隔你不可能設(shè)置成1秒鐘1次吧?小編就遇到過(guò)這樣的問(wèn)題,結(jié)果我通過(guò)以下的命令進(jìn)行了ping監(jiān)控采集。
然后再有人讓我背鍋的時(shí)候,我把出問(wèn)題時(shí)間段的ping數(shù)據(jù)庫(kù)截取出來(lái),大家公開(kāi)談,結(jié)果那次被我叼杠回去了,以后他們都不敢輕易甩鍋了,這個(gè)感覺(jué)好啊。
命令:
輸出的結(jié)果會(huì)記錄到/tmp/jiguang.log 中,每秒鐘新增一條ping記錄,如下:

七、查看tcp連接狀態(tài)
指定查看80端口的tcp連接狀態(tài),有利于分析連接是否釋放,或者攻擊時(shí)進(jìn)行狀態(tài)分析。
命令:

八、查找80端口請(qǐng)求數(shù)最高的前20個(gè)IP
有時(shí)候業(yè)務(wù)的請(qǐng)求量突然上去了,那么這個(gè)時(shí)候我們可以查看下請(qǐng)求來(lái)源IP情況,如果是集中在少數(shù)IP上的,那么可能是存在攻擊行為,我們使用防火墻就可以進(jìn)行封禁。命令如下:

九、ssh實(shí)現(xiàn)端口轉(zhuǎn)發(fā)
可能很多的朋友都聽(tīng)說(shuō)過(guò)ssh是linux下的遠(yuǎn)程登錄安全協(xié)議,就是通俗的遠(yuǎn)程登錄管理服務(wù)器。但是應(yīng)該很少朋友會(huì)聽(tīng)說(shuō)過(guò)ssh還可以做端口轉(zhuǎn)發(fā)。其實(shí)ssh用來(lái)做端口轉(zhuǎn)發(fā)的功能還是很強(qiáng)大的,下面就來(lái)做示范。
實(shí)例背景:我們公司是有堡壘機(jī)的,任何操作均需要在堡壘機(jī)上進(jìn)行,有寫(xiě)開(kāi)發(fā)人員需要訪問(wèn)ELasticSearch的head面板查看集群狀態(tài),但是我們并不想將ElasticSearch的9200端口映射出去,依然想通過(guò)堡壘機(jī)進(jìn)行訪問(wèn)。所以才會(huì)將通往堡壘機(jī)(192.168.1.15)的請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器ElasticSearch(192.168.1.19)的9200上。
例子:
將發(fā)往本機(jī)(192.168.1.15)的9200端口訪問(wèn)轉(zhuǎn)發(fā)到192.168.1.19的9200端口
記?。呵疤崾窍冗M(jìn)行秘鑰傳輸。
命令執(zhí)行完后,訪問(wèn)192.168.1.15:9200端口則真實(shí)是訪問(wèn)192.168.1.19:9200端口。