運(yùn)維高手一:工作累積的最常用 Shell 命令合集及使用技巧

本文主要講解 Shell 命令合集剂邮,以及對(duì)控制臺(tái)的使用技巧涌哲。在這之前你需要掌握如下三部分的知識(shí)內(nèi)容:

  • 需要熟悉掌握 Linux蜗细;
  • 需要了解一些 Shell 基礎(chǔ),課時(shí)中會(huì)介紹一些常見(jiàn)的 Shell 命令合集;
  • 需要了解 TCP 三次握手原理舒憾,這個(gè)課時(shí)的 Shell 命令合集包含對(duì)計(jì)算機(jī)進(jìn)行網(wǎng)絡(luò)分析。

控制臺(tái)使用技巧
首先,掌握控制臺(tái)的使用技巧后可以幫助我們熟練快速地操作控制臺(tái)拳话,提高工作效率;還可以通過(guò)快捷鍵方式避免大量的命令輸入种吸,減少出錯(cuò)產(chǎn)生的概率弃衍。那么都有哪些快捷鍵供我們使用呢,基于我的運(yùn)維工作經(jīng)驗(yàn)匯總?cè)缦拢?/p>

  • 操作快捷鍵

Ctrl + r:可以快速查找歷史命令坚俗;
Ctrl + l:可以清理控制臺(tái)屏幕镜盯;
Ctrl + a \ Ctrl + e:移動(dòng)光標(biāo)到命令行首\行尾;
Ctrl + w \ Ctrl + k:刪除光標(biāo)之前\之后的內(nèi)容猖败。

  • VIM文件編輯快捷鍵

快捷鍵ZZ:文件保存并退出速缆。

  • 進(jìn)程操作快捷鍵

Ctrl + c:強(qiáng)制終止程序的執(zhí)行;
Ctrl + z:掛起一個(gè)進(jìn)程恩闻;
Ctrl + d:終端中輸入 exit 后回車艺糜。

  • linux命令中快捷鍵(top)

Shift + p:根據(jù) CPU 使用率排序;
Shift + m:根據(jù)內(nèi)存占用排序幢尚。

Shell 命令合集

需要注意的是這里的 Shell 命令合集不是簡(jiǎn)單的單一命令使用破停,而是 Shell 命令組合的使用,它們的適用場(chǎng)景雖然平時(shí)可能很少用到尉剩,但通過(guò)加強(qiáng)記憶你能夠在遇到此類場(chǎng)景時(shí)能夠得心應(yīng)手真慢,而不必臨時(shí)查找或根據(jù)經(jīng)驗(yàn)拼湊,同時(shí)期望通過(guò)這些組合命令的學(xué)習(xí)后你對(duì)基礎(chǔ)命令的理解可以得到進(jìn)一步的提升理茎。

首先黑界,我們需要對(duì) Shell 命令合集做一個(gè)分類管嬉。

  • 空間分析

場(chǎng)景1:磁盤空間不足,需快速定位日志目錄朗鸠;
場(chǎng)景2:系統(tǒng)產(chǎn)生很多碎片文件蚯撩,導(dǎo)致 inode 資源不足。

  • 指定文件操作

場(chǎng)景1:批量查找文件作內(nèi)容替換烛占;
場(chǎng)景2:批量查找文件作拷貝打包求厕。

  • 鏈接狀態(tài)分析

場(chǎng)景:想了解用戶請(qǐng)求所建立的網(wǎng)絡(luò)連接狀態(tài)分析

  • IP 信息提取

場(chǎng)景:shell 腳本中希望快速提取到本機(jī) IP。

空間分析-場(chǎng)景1

該場(chǎng)景主要應(yīng)用于當(dāng)磁盤空間不足扰楼,需要快速定位或者對(duì)文件使用率進(jìn)行排序呀癣,需要查看哪一些文件目錄或者文件占用的空間比較多,就需要如下組合命令弦赖。

du -x --max-depth=1 / |sort -k1 -nr

這一個(gè)命令組合由兩個(gè) Shell 命令組成项栏,前面的 du 命令進(jìn)行磁盤統(tǒng)計(jì),第二個(gè) sort 命令對(duì)統(tǒng)計(jì)后的數(shù)據(jù)進(jìn)行排序蹬竖,中間通過(guò) | 管道符來(lái)傳遞數(shù)據(jù)沼沈。管道符 | 的作用是將前一個(gè)命令的輸出傳遞到下一個(gè)命令的輸入。

du 命令中 -x 參數(shù)表示跳過(guò)其他文件系統(tǒng)币厕,也就是只分析本文件系統(tǒng)里的文件列另,它可以幫助我們排除一些非本文件系統(tǒng)的統(tǒng)計(jì)信息,這樣執(zhí)行速度會(huì)更快也不容易出現(xiàn)一些額外的干擾項(xiàng)旦装。--max-depth參數(shù)設(shè)置為 1页衙,這樣就可以統(tǒng)計(jì)出根目錄下第一級(jí)目錄中的所有文件的大小。第二個(gè)命令sort中 -k 參數(shù)指明具體按照哪一列進(jìn)行排序阴绢,-n 參數(shù)表示只對(duì)數(shù)值進(jìn)行排序店乐,而 -r 參數(shù)表示反向排序,那整體分析sort 這一段命令的意思就是指定第一列并按照數(shù)據(jù)大小做反序排序呻袭。

空間分析-場(chǎng)景2

場(chǎng)景 2 適用于系統(tǒng)上產(chǎn)生很多碎片文件時(shí)眨八,隨之產(chǎn)生大量的 Inode , Inode 用于存放著文件系統(tǒng)中文件的源數(shù)據(jù)左电,Inode過(guò)渡的使用會(huì)導(dǎo)致系統(tǒng) Inode 資源不足廉侧。這種情況是不正常的,這個(gè)時(shí)候分析如果通過(guò)du 命令指能具體展示出磁盤空間的使用情況篓足,但并不能分析出具體目錄下產(chǎn)生了多少碎片文件段誊,我們就需要如下的命令組合來(lái)對(duì)文件進(jìn)行統(tǒng)計(jì)分析。

find -type f|awk -F/ -v OFS=/ '{$NF="";dir[$0]++}END{for(i in dir)print dir[i]""i}'|sort -k1 -nr|head

基于管道可以將這個(gè)命令組合切割成四部分纷纫,分別是 find枕扫、awk陪腌、sort辱魁、head 命令烟瞧。

其中 find 命令通過(guò) -type f 參數(shù)查找指定文件類型的文件,然后將查找結(jié)果通過(guò)管道傳遞給 awk染簇,它可以把文本內(nèi)容按行進(jìn)行格式化輸出并展示参滴,-F / 指定處理文件時(shí)字符串之間以 / 進(jìn)行分割,-v OFS=/ 表示文件顯示結(jié)果時(shí)以 / 進(jìn)行分割展示锻弓。對(duì)于awk命令整體規(guī)則而言有一個(gè) {} END {} 格式砾赔,前面的 {} 表示行處理操作,END{} 表示行處理后需要進(jìn)行整體結(jié)果出青灼。在行處理操作邏輯中暴心,設(shè)置$NF 為空表示將每一行的文件名信息去除,從而只保留目錄路徑杂拨,dir 是一個(gè)自增數(shù)組专普,用于統(tǒng)計(jì)結(jié)果。最后通過(guò) for 循環(huán)進(jìn)行遍歷輸出dir關(guān)聯(lián)數(shù)組中所有行信息弹沽。

因?yàn)檫@個(gè)命令組合比較復(fù)雜檀夹,我們?cè)诳刂婆_(tái)中來(lái)看具體的演示,首先在控制臺(tái)中輸入這一串命令組合策橘。

14.png

你可以看到在當(dāng)前目錄路徑通過(guò)執(zhí)行命令炸渡,結(jié)果中已經(jīng)把每一個(gè)產(chǎn)生文件的路徑都展示出來(lái)了,并且前面還會(huì)顯示在每一個(gè)路徑下一共包含了多少文件丽已,如果我們系統(tǒng) 提示inode 使用率問(wèn)題蚌堵,需要分析出哪個(gè)路徑下的文件數(shù)最多,這時(shí)就可以通過(guò) 這個(gè)組合命令來(lái)進(jìn)行分析沛婴。

文件操作-場(chǎng)景1

文件操作的場(chǎng)景主要有兩個(gè)辰斋,第一個(gè)場(chǎng)是批量文件內(nèi)容需要進(jìn)行替換,也就是當(dāng)我們?cè)谝粋€(gè)文件目錄下面有多級(jí)子目錄瘸味,并且子目錄中有大量的文件宫仗,而我們需要對(duì)目錄下的某一個(gè)名稱的文件批量的查找替換內(nèi)容。面對(duì)這種場(chǎng)景我們可以使用如下的組合命令:

find ./ -type f -name test.txt -exec sed -i "s/aaaaaa/bbbbbb/g" {} \;

我們通過(guò) find + 路徑 的方式查找需要批量修改的指定的文件名旁仿,比如命令中的 test.txt 文件藕夫,查找到文件后通過(guò) find 自帶的參數(shù) exec 將結(jié)果傳遞給另外一條命令 sed 來(lái)進(jìn)行下一步命令的處理。

find 命令中枯冈,-name 參數(shù)指定查找的文件名毅贮,-exec 參數(shù)將查找到的內(nèi)容傳遞給下一個(gè)命令去繼續(xù)執(zhí)行相關(guān)邏輯,sed 命令主要對(duì)文件內(nèi)容進(jìn)行替換尘奏,這里會(huì)將 consumer 文件中的 aaaaaa 替換成bbbbbb滩褥,這就是一個(gè)批量查找替換的操作。

文件操作-場(chǎng)景2

文件操作的第二種場(chǎng)景是我們需要對(duì)文件進(jìn)行批量的打包炫加、拷貝瑰煎,你可以使用下面這樣的一個(gè)組合命令:

(find . -name "*.txt"|xargs tar -cvf test.tar) && cp -f test.tar /home/.

首先括號(hào)中包含兩條命令铺然,它們使用管道符進(jìn)行連接,括號(hào)外通過(guò)"&&"符號(hào)與第三條命令進(jìn)行連接酒甸,也就是我們首先需要執(zhí)行括號(hào)中的組合命令魄健,先查找所有.txt文件,然后將結(jié)果傳遞給 xargs 命令進(jìn)行打包插勤,如果打包成功后才將壓縮包傳遞給 cp 命令進(jìn)行拷貝沽瘦。

網(wǎng)絡(luò)連接狀態(tài)分析

對(duì)于網(wǎng)絡(luò)連接狀態(tài)分析是運(yùn)維工程師經(jīng)常需要做的事情,因?yàn)槲覀兘?jīng)常需要了解系統(tǒng)對(duì)外提供的網(wǎng)絡(luò)服務(wù)是否正常农尖,并了解它們的連接狀態(tài)析恋,這時(shí)就可以通過(guò)如下的命令組合進(jìn)行操作:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

這個(gè)命令組合的構(gòu)成,整體上來(lái)說(shuō)它由兩個(gè)命令構(gòu)成盛卡,第一個(gè)命令是netstat -n绿满,這個(gè)命令負(fù)責(zé)查看主機(jī)上的所有 TCP、UDP 連接信息窟扑,而awk 命令則負(fù)責(zé)對(duì)這些信息進(jìn)行進(jìn)一步的處理喇颁,awk 后有一個(gè)用兩個(gè) "斜杠" 括起來(lái)的正則表達(dá)式,主要用來(lái)匹配以 tcp 開頭的每一行信息嚎货,所以這里的正則表達(dá)式起到了一個(gè)過(guò)濾的作用(只分析tcp的連接)橘霎,后面則是對(duì)信息過(guò)濾后進(jìn)行具體的統(tǒng)計(jì)和輸出。

IP信息提取

而另外一個(gè)場(chǎng)景就是提取主機(jī)上的 IP 信息殖属,這里推薦使用如下的命令組合:

ip a|grep "global"|awk '{print $2}'|awk -F/ '{print $1}'

它的結(jié)構(gòu)組成也比較簡(jiǎn)單姐叁,分別是由四個(gè)命令組合而成,前面的 ip a 負(fù)責(zé)查看主機(jī)上所有網(wǎng)卡的信息洗显,然后通過(guò) grep 進(jìn)行條件過(guò)濾外潜,再通過(guò) awk 實(shí)現(xiàn)第二列內(nèi)容輸出,最后通過(guò) awk 以指定 / 作為分隔符來(lái)打印第一列的信息挠唆。

常見(jiàn)問(wèn)題答疑

最后处窥,分享一下 對(duì)Shell 常有的幾個(gè)疑問(wèn)。
問(wèn)題一:Shell 適不適合作多并發(fā)任務(wù)玄组?
答案:不適合滔驾,在 Shell 中一般需要通過(guò) nohup 方式將需要并發(fā)執(zhí)行的命令放入后臺(tái),但這樣操作存在一些問(wèn)題俄讹,包括:

  • 進(jìn)程的狀態(tài)不好控制哆致;
  • 進(jìn)程間信息共享一般以文件方式。

等等,所以我們當(dāng)需要進(jìn)行大的自動(dòng)化工程任務(wù)需要作并發(fā)任務(wù)時(shí) 建議選擇 Python Go PHP等語(yǔ)言患膛。

問(wèn)題二:Shell 的遠(yuǎn)程執(zhí)行命令方式是什么摊阀?
答案:當(dāng)Shell進(jìn)行遠(yuǎn)程執(zhí)行命令時(shí),通常通過(guò)ssh xx@xxx.xxx.xxx.xxx /home/xx/test.sh參數(shù)的方式,但如果是批量主機(jī)任務(wù)胞此,建議選擇ansible臣咖、saltstack 這樣成熟且專業(yè)的工具實(shí)現(xiàn)。
問(wèn)題三:Shell 適合用在什么場(chǎng)景中豌鹤?
答案:Shell 適合用在追求運(yùn)維高效(非性能高效)要求的簡(jiǎn)單場(chǎng)景中亡哄,如日志切割枝缔、進(jìn)程分析布疙、系統(tǒng)初始化等。

<center>未完待續(xù)愿卸,敬請(qǐng)期待灵临!</center>
文章優(yōu)先發(fā)布于公眾號(hào)運(yùn)維大師兄,更多精彩等你趴荸!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末儒溉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子发钝,更是在濱河造成了極大的恐慌顿涣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酝豪,死亡現(xiàn)場(chǎng)離奇詭異涛碑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)孵淘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蒲障,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瘫证,你說(shuō)我怎么就攤上這事揉阎。” “怎么了背捌?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵毙籽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我毡庆,道長(zhǎng)惧财,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任扭仁,我火速辦了婚禮垮衷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乖坠。我一直安慰自己搀突,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布熊泵。 她就那樣靜靜地躺著仰迁,像睡著了一般甸昏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徐许,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天施蜜,我揣著相機(jī)與錄音,去河邊找鬼雌隅。 笑死翻默,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恰起。 我是一名探鬼主播修械,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼检盼!你這毒婦竟也來(lái)了肯污?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吨枉,失蹤者是張志新(化名)和其女友劉穎蹦渣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體貌亭,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柬唯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了属提。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片权逗。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冤议,靈堂內(nèi)的尸體忽然破棺而出斟薇,到底是詐尸還是另有隱情,我是刑警寧澤恕酸,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布堪滨,位于F島的核電站,受9級(jí)特大地震影響蕊温,放射性物質(zhì)發(fā)生泄漏袱箱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一义矛、第九天 我趴在偏房一處隱蔽的房頂上張望发笔。 院中可真熱鬧,春花似錦凉翻、人聲如沸了讨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)前计。三九已至胞谭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間男杈,已是汗流浹背丈屹。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伶棒,地道東北人旺垒。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苞冯,于是被迫代替她去往敵國(guó)和親袖牙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侧巨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,380評(píng)論 0 5
  • 1舅锄、文件和目錄: # cd /home 進(jìn)入 '/home' 目錄 # cd .. ...
    XDgbh閱讀 2,006評(píng)論 0 1
  • 第 2 章 SHELL 基礎(chǔ)知識(shí)2.1 shell腳本我們?cè)谏厦婧?jiǎn)單介紹了一下什么是shell腳本,現(xiàn)在我們來(lái)進(jìn)一...
    LiWei_9e4b閱讀 1,569評(píng)論 0 0
  • 1. 硬鏈接和軟連接區(qū)別 硬連接-------指通過(guò)索引節(jié)點(diǎn)來(lái)進(jìn)行連接司忱。在Linux的文件系統(tǒng)中皇忿,保存在磁盤分區(qū)...
    杰倫哎呦哎呦閱讀 2,251評(píng)論 0 2
  • 命令行的藝術(shù) 前言 基礎(chǔ) 日常使用 文件及數(shù)據(jù)處理 系統(tǒng)調(diào)試 單行腳本 冷門但有用 僅限 OS X 系統(tǒng) 僅限 W...
    進(jìn)擊的諾基亞閱讀 3,848評(píng)論 0 19