天天看點

實用Linux進階指令篇

一、實用的 xargs 指令

在平時的使用中,我認為 xargs 這個指令還是較為重要和友善的。我們可以通過使用這個指令,将指令輸出的結果作為參數傳遞給另一個指令。

比如說我們想找出某個路徑下以 .conf 結尾的檔案,并将這些檔案進行分類,那麼普通的做法就是先将以 .conf 結尾的檔案先找出來,然後輸出到一個檔案中,接着 cat 這個檔案,并使用 file 檔案分類指令去對輸出的檔案進行分類。

這個普通的方法還的确是略顯麻煩,那麼這個時候 xargs 指令就派上用場了。

例1:找出 / 目錄下以 .conf 結尾的檔案,并進行檔案分類。

指令:

# find / -name *.conf -type f -print | xargs file      

xargs 後面不僅僅可以加檔案分類的指令,你還可以加其他的很多指令,比如說實在一點的tar指令,你可以使用find指令配合tar指令,将指定路徑的特殊檔案使用find指令找出來,然後配合tar指令将找出的檔案直接打包,指令如下:

# find / -name *.conf -type f -print | xargs tar cjf test.tar.gz      

二、指令或腳本背景運作

有時候我們進行一些操作的時候,不希望我們的操作在終端會話斷了之後就跟着斷了,特别是一些資料庫導入導出操作,如果涉及到大資料量的操作,我們不可能保證我們的網絡在我們的操作期間不出問題,是以背景運作腳本或者指令對我們來說是一大保障。

比如說我們想把資料庫的導出操作背景運作,并且将指令的操作輸出記錄到檔案,那麼我們可以這麼做:

nohup mysqldump -uroot -pxxxxx —all-databases > ./alldatabases.sql &(xxxxx是密碼)      

當然如果你不想密碼明文,你還可以這麼做:

nohup mysqldump -uroot -pxxxxx —all-databases > ./alldatabases.sql (後面不加&符号)      

執行了上述指令後,會提示叫你輸入密碼,輸入密碼後,該指令還在前台運作,但是我們的目的是後天運作該指令,這個時候你可以按下Ctrl+Z,然後在輸入bg就可以達到第一個指令的效果,讓該指令背景運作,同時也可以讓密碼隐蔽輸入。

指令背景執行的結果會在指令執行的目前目錄下留下一個nohup.out檔案,檢視這個檔案就知道指令有沒有執行報錯等資訊。

三、找出目前系統記憶體使用量較高的程序

在很多運維的時候,我們發現記憶體耗用較為嚴重,那麼怎麼樣才能找出記憶體消耗的程序排序呢?

指令:

# ps -aux | sort -rnk 4 | head -20      

輸出的第4列就是記憶體的耗用百分比。最後一列就是相對應的程序。

四、找出目前系統CPU使用量較高的程序

在很多運維的時候,我們發現CPU耗用較為嚴重,那麼怎麼樣才能找出CPU消耗的程序排序呢?

指令:

# ps -aux | sort -rnk 3 | head -20      

輸出的第3列為CPU的耗用百分比,最後一列就是對應的程序。

我想大家應該也發現了,sort 指令後的3、4其實就是代表着第3列進行排序、第4列進行排序。

五、同時檢視多個日志或資料檔案

在日常工作中,我們檢視日志檔案的方式可能是使用tail指令在一個個的終端檢視日志檔案,一個終端就看一個日志檔案。包括我在内也是,但是有時候也會覺得這種方式略顯麻煩,其實有個工具叫做multitail可以在同一個終端同時檢視多個日志檔案。

首先安裝multitail:

# wget ftp://ftp.is.co.za/mirror/ftp.rpmforge.net/redhat/el6/en/x86_64/dag/RPMS/multitail-5.2.9-1.el6.rf.x86_64.rpm      
# yum -y localinstall multitail-5.2.9-1.el6.rf.x86_64.rpm      

multitail工具支援文本的高亮顯示,内容過濾以及更多你可能需要的功能。

如下就來一個有用的例子:

此時我們既想檢視secure的日志指定過濾關鍵字輸出,又想檢視實時的網絡ping情況:

指令如下:

# multitail -e "Accepted" /var/log/secure -l "ping baidu.com"      

是不是很友善?如果平時我們想檢視兩個日志之間的關聯性,可以觀察日志輸出是否有觸發等。如果分開兩個終端可能來回進行切換有點浪費時間,這個multitail工具檢視未嘗不是一個好方法。

六、持續ping并将結果記錄到日志

很多時候,運維總會聽到一個聲音,是不是網絡出什麼問題了啊,導緻業務出現怪異的症狀,肯定是伺服器網絡出問題了。這個就是俗稱的背鍋,業務出了問題,第一時間相關人員找不到原因很多情況下就會把問題歸結于伺服器網絡有問題。

這個時候你去ping幾個包把結果丢出來,人家會反駁你,剛剛那段時間有問題而已,現在業務都恢複正常了,網絡肯定正常啊,這個時候估計你要氣死。

你要是再拿出zabbix等網絡監控的資料,這個時候就不太妥當了,zabbix的采集資料間隔你不可能設定成1秒鐘1次吧?小編就遇到過這樣的問題,結果我通過以下的指令進行了ping監控采集。

然後再有人讓我背鍋的時候,我把出問題時間段的ping資料庫截取出來,大家公開談,結果那次被我叼杠回去了,以後他們都不敢輕易甩鍋了,這個感覺好啊。

指令:

ping api.jpush.cn | awk ‘{ print $0”    “ strftime(“%Y-%m-%d %H:%M:%S”,systime()) } ‘ >> /tmp/jiguang.log &      

輸出的結果會記錄到/tmp/jiguang.log 中,每秒鐘新增一條ping記錄.

七、檢視tcp連接配接狀态

指定檢視80端口的tcp連接配接狀态,有利于分析連接配接是否釋放,或者攻擊時進行狀态分析。

指令:

# netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn      

八、查找80端口請求數最高的前20個IP

有時候業務的請求量突然上去了,那麼這個時候我們可以檢視下請求來源IP情況,如果是集中在少數IP上的,那麼可能是存在攻擊行為,我們使用防火牆就可以進行封禁。指令如下:

# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20      

九、ssh實作端口轉發

可能很多的朋友都聽說過ssh是linux下的遠端登入安全協定,就是通俗的遠端登入管理伺服器。但是應該很少朋友會聽說過ssh還可以做端口轉發。其實ssh用來做端口轉發的功能還是很強大的,下面就來做示範。

執行個體背景:我們公司是有堡壘機的,任何操作均需要在堡壘機上進行,有寫開發人員需要通路ELasticSearch的head面闆檢視叢集狀态,但是我們并不想将ElasticSearch的9200端口映射出去,依然想通過堡壘機進行通路。是以才會将通往堡壘機(192.168.1.15)的請求轉發到伺服器ElasticSearch(192.168.1.19)的9200上。

例子:

将發往本機(192.168.1.15)的9200端口通路轉發到192.168.1.19的9200端口

ssh -p 22 -C -f -N -g -L 9200:192.168.1.19:9200 [email protected]      

繼續閱讀