大家好,我是xindoo绿聘,今天和大家分享下一個(gè)我的觀點(diǎn)——程序猿都應(yīng)該學(xué)點(diǎn)Linux命令嗽上!這也是這兩年我做后端開發(fā)的切身體會(huì)。認(rèn)識(shí)我的人可能都知道斜友,我職業(yè)生涯比較“特殊”炸裆,我畢業(yè)后先是干的運(yùn)維垃它,然后再轉(zhuǎn)的Java開發(fā)鲜屏。 運(yùn)維的經(jīng)歷苦不堪言,但積累下來的運(yùn)維相關(guān)經(jīng)驗(yàn)卻讓我在轉(zhuǎn)開發(fā)后受益匪淺国拇,其中一項(xiàng)就是熟悉大部分常用的Linux命令洛史。 我已經(jīng)記不清多少次只用幾行命令搞定別人半天都沒搞定的事兒,然后拂袖離去酱吝,深藏功與名……
學(xué)好linux命令有啥用也殖?
用linux命令日常提效的例子數(shù)不勝數(shù),我說一些對(duì)我的明顯作用务热。
快速排查和定位問題
舉個(gè)很簡(jiǎn)單的場(chǎng)景忆嗜,早上去上班,剛坐下突然收到服務(wù)器的報(bào)警崎岂,CPU使用率98%捆毫!登陸服務(wù)器top命令可以快速定位到是哪個(gè)進(jìn)程或者線程,sar命令定位出問題發(fā)生時(shí)間點(diǎn)冲甘,用cat绩卤、grep等命令快速找到出問題時(shí)的日志……途样,分分鐘解決問題。當(dāng)高手泡杯茶的功夫解決問題時(shí)濒憋,新手還不知所措何暇。
關(guān)于性能問題定位的命令,我之前翻譯過篇文章10行命令60秒快速定位性能瓶頸有興趣可以了解下凛驮。
數(shù)據(jù)清洗和統(tǒng)計(jì)
數(shù)據(jù)清洗和統(tǒng)計(jì)的方法很多裆站,就比如用excel就可以完成很多類型的統(tǒng)計(jì)工作,但針對(duì)一些簡(jiǎn)單的統(tǒng)計(jì)黔夭,我自己寫個(gè)shell腳本也能分分鐘搞定遏插,尤其是當(dāng)需要被統(tǒng)計(jì)的數(shù)據(jù)是直接在服務(wù)器上時(shí)。比如這臺(tái)機(jī)器上服務(wù)今天員工報(bào)過多少次error纠修。還有從日志中解析出某個(gè)接口今天所有請(qǐng)求的平均胳嘲、最大、最小耗時(shí)…… 像這種簡(jiǎn)單的數(shù)據(jù)清洗和統(tǒng)計(jì)扣草,我用grep了牛、awk也能分分鐘完成。
印象比較深的一個(gè)經(jīng)歷辰妙,有次我們?cè)谂挪槟硞€(gè)問題時(shí)鹰祸,從兩個(gè)系統(tǒng)中導(dǎo)出了兩份用戶數(shù)據(jù),想對(duì)比下每個(gè)用戶在兩個(gè)系統(tǒng)里的數(shù)據(jù)差異密浑,當(dāng)時(shí)數(shù)據(jù)量還是挺多的蛙婴。這種問題你會(huì)怎么辦? 從服務(wù)器上拉到本地尔破,然后用excel的vlookup好像也行街图。當(dāng)服務(wù)器上數(shù)據(jù)不允許下載呢?
這兩份數(shù)據(jù)如果是數(shù)據(jù)庫(kù)里的兩個(gè)表懒构,很明顯就是將兩個(gè)表直接join起來(當(dāng)時(shí)也有同事提出先將數(shù)據(jù)入庫(kù))餐济。但在linux上用awk命令可以很容易實(shí)現(xiàn)這個(gè)功能,后來我也把具體方法寫了一篇博客awk實(shí)現(xiàn)類sql的join操作 胆剧。
輔助開發(fā)
輔助開發(fā)的事就數(shù)不勝數(shù)了絮姆,比如我用wget命令下載文件,用curl命令調(diào)試接口秩霍,用dig篙悯、ping、nc測(cè)試網(wǎng)絡(luò)铃绒,用wrk壓測(cè)接口……
裝X
這個(gè)就不多說了鸽照,在控制臺(tái)各種敲,很geek匿垄。
如何學(xué)習(xí)Linux命令
以上說了好多學(xué)好linux命令的優(yōu)點(diǎn)移宅,我相信你肯定按捺不住想要學(xué)了归粉,這里我分享一些我的學(xué)習(xí)方法。
多練習(xí)漏峰,但沒必要太刻意練習(xí)
這個(gè)也算是老生常談了糠悼,如何東西想要熟練,都需要大量的刻意練習(xí)浅乔,學(xué)習(xí)linux命令也不例外倔喂。 但我這里給一個(gè)忠告,就是沒必要一次性花太多的時(shí)間去熟練掌握某個(gè)linux命令靖苇,尤其是有些比較冷門的命令席噩。 很多命令確實(shí)很不常用,如果你執(zhí)著于一次性掌握其所有參數(shù)贤壁,但長(zhǎng)期不使用肯定還是會(huì)忘記悼枢,到時(shí)候還是得重新學(xué),投入產(chǎn)出比太低脾拆。
比如我之前學(xué)習(xí)過tcpdump的使用馒索,當(dāng)時(shí)大部分的參數(shù)基本都會(huì)用了,但tcpdump在日常工作中使用的太少了名船,而且也涉及到大量網(wǎng)絡(luò)的知識(shí)绰上,我已經(jīng)很長(zhǎng)時(shí)間沒有用過了, 已經(jīng)忘記怎么使用了渠驼。 像這種工作中不太涉及蜈块,也不常用的命令,了解下就可以了迷扇,知道它能干什么足以百揭,等真正有需求的時(shí)候再去學(xué)。
先知道有什么樣的命令谋梭,再考慮怎么去用
Linux命令及其參數(shù)不能用浩如煙海來描述信峻,但也算是數(shù)不勝數(shù)了,索性大部分的命令及參數(shù)是不會(huì)用到的瓮床,但也推薦大家稍微記錄下。 就比如我今天早上遇到一凌晨OOM的問題产镐,我想去追溯那段時(shí)間機(jī)器的負(fù)載情況隘庄,最簡(jiǎn)單的方式就是用sar命令,方便快捷癣亚,雖然我早已忘記具體的參數(shù)丑掺,但man或者搜索下立馬就知道了。
所以我的建議是先知道有什么樣的命令述雾,然后再按需求去了解具體命令的使用方式街州。初學(xué)者應(yīng)該從最簡(jiǎn)單最常用的命令開始學(xué)起兼丰,比如下圖中的命令。
網(wǎng)上有很多常用命令的參考指南唆缴,我之前也寫過一篇博客我常用的Linux命令
善用man和搜索引擎
在linux中鳍征,所有命令的使用方式都可以通過man命令來查詢,包括詳細(xì)的示意面徽,各種參數(shù)的作用都有艳丛,都是命令的開發(fā)者提供了,肯定保證準(zhǔn)確無誤趟紊,不過缺點(diǎn)是都是英文的氮双,而且有些篇幅較長(zhǎng),對(duì)像我這種英文不太好的人不是很友好霎匈。
另外戴差,搜索引擎也是了解一個(gè)linux如何使用的好工具,網(wǎng)上有各種相關(guān)博客铛嘱,有些入門網(wǎng)站(比如菜鳥教程)也有比較體系化的教學(xué)內(nèi)容造挽,甚至有時(shí)候還可以找到你問題的解決方案。這種方式對(duì)新手比較友好弄痹,但這種方式的缺點(diǎn)是內(nèi)容質(zhì)量參差不齊饭入,自己要做好信息的辨別和篩選。
對(duì)于我不熟悉的linux命令肛真,我日常是兩種方法都使用谐丢,比較傾向于第二種,但在第二種無法解決我問題時(shí)我會(huì)去看man收藏蚓让,去尋找更專業(yè)的資料乾忱。
收藏代碼片段
我可能比較偏實(shí)用主義,學(xué)linux命令大多數(shù)情況都是為了解決具體的問題历极,而我遇到的問題各式各樣窄瘟,使用的方法也不一樣,可能時(shí)隔好久才會(huì)重復(fù)出現(xiàn)趟卸,等出現(xiàn)時(shí)之前用的解決方案早就忘記了蹄葱。為避免這種問題,我開始用snippetsLab記錄一些常用的代碼片段锄列,將自己寫的稍微復(fù)雜且不是很常用的代碼片段保存起來图云,加上描述和標(biāo)簽方便檢索,等之后如果再用到可以快速找回邻邮。
比如像上文中awk實(shí)現(xiàn)join的功能竣况,稍微有點(diǎn)復(fù)雜,每次讓我重新寫也不是寫不出來筒严,但還是需要花點(diǎn)時(shí)間調(diào)試的丹泉。 這種與其每次都調(diào)情萤,還不如記錄下來下次貼過來直接使用。 這兩年我已經(jīng)在snippetsLab中記錄了數(shù)百條代碼片段了摹恨。
結(jié)語
說真的筋岛,雖然我不推薦做運(yùn)維這個(gè)工作,尤其是在國(guó)內(nèi)睬塌,但我非常建議大家了解下運(yùn)維相關(guān)的技能泉蝌,尤其是各種常用的linux命令,不管你是前端還是后端揩晴、不過是java還是go程序猿勋陪,都應(yīng)該了解常用的linux命令。