逼格高又實用的 Linux 高級命令,開發運維都要懂
來自:運維人生
http://www.ywadmin.com/?id=77
前言
在運維的坑裡摸爬滾打好幾年了,我還記得我剛開始的時候,我只會使用一些簡單的命令,寫腳本的時候,也是要多簡單有多簡單,所以有時候寫出來的腳本又長又臭。
像一些高級點的命令,比如說 Xargs 命令、管道命令、自動應答命令等,如果當初我要是知道,那我也可能寫出簡潔高效的腳本。
不管出於任何原因,我都想對一些 Linux 使用的高級命令進行用法說明,利人利己,以後不記得的話,我也可以回頭翻來看看。
一、實用的 xargs 命令
在平時的使用中,我認為 xargs 這個命令還是較為重要和方便的。我們可以通過使用這個命令,將命令輸出的結果作為參數傳遞給另一個命令。
比如說我們想找出某個路徑下以 .conf 結尾的文件,並將這些文件進行分類,那麼普通的做法就是先將以 .conf 結尾的文件先找出來,然後輸出到一個文件中,接著 cat 這個文件,並使用 file 文件分類命令去對輸出的文件進行分類。
這個普通的方法還的確是略顯麻煩,那麼這個時候 xargs 命令就派上用場了。
例1:
找出 / 目錄下以 .conf 結尾的文件,並進行文件分類
命令:
#
find
/ -name *.conf
-type
f
-file
輸出結果如下所示:
xargs 後面不僅僅可以加文件分類的命令,你還可以加其他的很多命令,比如說實在一點的tar命令,你可以使用find命令配合tar命令,將指定路徑的特殊文件使用find命令找出來,然後配合tar命令將找出的文件直接打包,命令如下:
#
find
/ -name *.conf
-type
f
-二、命令或腳本後台運行
有時候我們進行一些操作的時候,不希望我們的操作在終端會話斷了之後就跟著斷了,特別是一些資料庫導入導出操作,如果涉及到大數據量的操作,我們不可能保證我們的網路在我們的操作期間不出問題,所以後台運行腳本或者命令對我們來說是一大保障。
比如說我們想把資料庫的導出操作後台運行,並且將命令的操作輸出記錄到文件,那麼我們可以這麼做:
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
-rnk4
| head -20
輸出的第4列就是內存的耗用百分比。最後一列就是相對應的進程。
四、找出當前系統CPU使用量較高的進程
在很多運維的時候,我們發現CPU耗用較為嚴重,那麼怎麼樣才能找出CPU消耗的進程排序呢?
命令:
#
ps
-aux |sort
-rnk3
| 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 『{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
ihavecar
@192
.168
.1
.19
記住:前提是先進行秘鑰傳輸。
命令執行完後,訪問192.168.1.15:9200埠則真實是訪問192.168.1.19:9200埠。
後續
這次就先記錄到這裡,下次有時間再繼續進行整理和記錄。
●編號506,輸入編號直達本文
●輸入m獲取文章
目錄
推薦↓↓↓
運維
更多推薦
《
18個技術類微信公眾號
》
涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等
※Windows VS Linux,你更青睞的哪種桌面運行方式?
※Linux 將不再支持舊 CPU 架構,可節省 50 萬行代碼
TAG:Linux學習 |