0、前言
網上介紹linux的命令的文章一大堆,可是大部分都是流於命令介紹,把命令的全部參數都介紹一遍,可是其實在真正的工做中,不少參數都不會用到。本文總結了我本身經常使用的一些命令,這些命令都比較簡單,運維大神應該看不上,可是,做爲一個開發工程師,這些命令每每是平常用的最頻繁的,並且命令與命令之間每每是組合着使用的,根據不一樣場景組合都不一樣。
一、基礎命令
1.一、ssh
咱們要去線上機器,ssh命令必定繞不過,雖然如今有不少ssh命令客戶端,可是知道一下原理也是有好處的,萬一哪天就要你敲命令行呢?ssh用來鏈接到遠程服務器,通常都是 ssh xxx@192.168.0.1 這種方式去鏈接,其中xxx是你登陸機器的身份,通常是本身的用戶名,或者時root,192.168.0.1則是須要登陸的機器IP。除了通常的ssh用法,有些開發可能會使用私鑰文件去鏈接,這時候就能夠用ssh -i kesin.pem xxx@192.168.0.1,其中 kesin.pem是你的私鑰。
1.二、cd/pwd
cd用來切換目錄,最基礎的命令,沒啥好說的,注意使用的時候「.」 表示當前目錄, 「..」 表示上一個目錄,「~」表示系統登陸時的默認目錄。pwd是用來顯示當前目錄的。
1.三、ls
ls是用來顯示當前目錄的文件的命令。我通常用ls -lk列出目錄下全部文件,而且打印詳細信息,其中文件大小用KB表示,也就是-k這個參數的做用。若是嫌麻煩,能夠直接用ll,ll是ls -l的別名或者本身定義別名。有時候我須要找一個目錄下的某些文件,這時候就會用 ls -l -R /xxx | grep "xxx" 去遞歸搜索。
1.四、mkdir/rm
mkdir用來建立一個文件夾。rm用來刪文件,通常是rm xxx,若是要遞歸刪除文件夾下的全部文件,則用 rm -r /xxx,切記不要在root權限下用rm -r /,會把整個Linux文件所有刪掉的。
1.五、cp
cp用來在本機複製文件 通常用法是 cp a.txt /temp/b.txt 將a.txt拷貝到temp目錄下而且命名爲b.txt
1.六、scp
scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,和它相似的命令是cp,不過cp只是在本機進行拷貝不能跨服務器,並且scp傳輸是加密的。通常用法是 scp a.txt root@11.189.78.21:/usr/local 做用是把a.txt拷貝到11.189.78.21機器上的/usr/local文件夾下。
二、文本處理命令
2.一、grep
通常在排查業務問題的時候,grep "xxx" biz.log 最經常使用,它的做用是在biz.log中查找全部含有XXX關鍵詞的行。若是想知道關鍵詞出現了多少次,那麼就用grep -c "xxx" biz.log或者用grep "xxx" biz.log | wl -c 其中 wl -c就是用來統計次數的。有時候爲了對日誌異常作全局監控,我會用到grep -e "[a-Z]*Exception" *.log | sort | uniq -c ,它的做用是查詢全部日誌中帶有Exception關鍵詞的日誌,而且去重後進行排序。grep實際上是個很是強大的命令,能夠經過管道和不少命令結合,開發出強大的腳本,你們能夠結合實際場景慢慢摸索。
2.二、head/tail
有時候grep出來的日誌比較多,你只想看前5行,那麼你能夠用 grep "xxx" biz.log | head -5,當你應用發佈完成之後,你想看下新功能打印的日誌有沒有出現,以此來判斷新功能是否正常,但又不想一直手工grep,你能夠用到tail -f biz.log | grep "xxx",這個命令比較強大,只要日誌一直在打印,它就一直讀取日誌文件最後一行同時去搜索關鍵詞。
2.三、cat/more/less
cat比較簡單,主要三個用法,cat filename 直接讀取並顯示整個文件,cat 1.txt 2.txt > 3.txt 將幾個文件的內容合併到一個文件,cat > filename從鍵盤建立文件。
more filename會加載文件,可是和cat不同的地方是,more是一行一行顯示,你能夠按空格鍵進行翻頁,能夠ctrl+B往前翻頁,ctrl+F日後翻頁,能夠用/xxx進行全局匹配,找到第一次出現xxx的那一行.
less和more的用法差很少,區別在於less不會在一開始就加載整個文件,在一些大文件日誌分析的時候,儘可能用less。
2.四、awk
awk自己是一個很強大的工具,咱們能夠爲awk工具傳遞一個字符串,該字符串的內容相似一種編程語言的語法,咱們能夠稱其爲Awk語言,而awk工具自己則能夠看做是Awk語言的解析器。就比如python解析器與Python語言的關係。咱們通常使用awk對文件中文本分列進行處理,因此若是一個文件中的每行都被特定的分隔符(常見的是空格)隔開,咱們能夠將這個文件當作是由不少列的文本組成,這樣的文件最適合用awk進行處理。
一個完整的awk命令形式以下:
awk [options] 'BEGIN{ commands } pattern{ commands } END{ commands }' file
我通常常到的就兩種:
一、awk '{print$1}' a.txt 意思是對a.txt文本進行處理,按照空格(默認就是空格)分割,而後打印出第一個字符串,好比a.txt的內容是aaa bbb ccc 通過上面的命令處理後輸出的就是aaa
二、awk -F "," '{print$2}' a.txt 意思是對a.txt進行文本處理,按照","分割,而後打印出第二個字符串,好比a.txt的內容是
aaa,bbb,ccc 通過上面的命令處理後輸出的就是bbb
其實awk在工做中不少時候被用來進行log分析的, 咱們在打印業務日誌的時候須要規範日誌格式,好比:OrderService.create#param1,param2,param3#errorCode=xxx,errorMsg=yyy這樣的日誌,這時候若是要對errorCode進行監控,就只能靠awk了,腳本相似於:
cat biz.log | awk -F "#" '{print$3}' | awk -F "," '{print$1}' | awk -F "=" 'print{$2}'| sort | uniq -c| > errorCode.txt
腳本先加載 biz.log,而後按照"#"分割,取出第三個字符串 「errorCode=xxx,errorMsg=yyy」,而後經過管道再調用一次awk,按照「,」分割,取出第一個字符串「errorCode=xxx」,而後再用一次awk按照=分割,取出xxx,最後進行去重排序後寫入errorCode.txt
上面只是一個例子而已,具體須要根據日誌分析的需求去定製化腳本,若是想詳細瞭解awk,推薦一本書《sed與awk》
2.五、sed
sed是一個很好的文件處理工具,自己是一個管道命令,主要是以行爲單位進行處理,能夠將數據行進行替換、刪除、新增、選取等特定工做。我在工做中用到sed比較少,主要是用它作全局替換,好比上面用awk處理獲得的errorCode.txt,假設它的原文以下:
1 P001
2 P009
13 P102
其中數字是該errorCode出現的次數,P001/P009這些就是具體的errorCode,若是這時候我須要將P替換成字符串ERROR,以便後續的處理,那麼我就能夠用sed "s/P/ERROR" errorCode.txt進行全局替換。
若是要深刻學習sed,一樣推薦看《sed與awk》這本書。
三、小結
Linux命令最好的學習方式不是看書,也不是死記硬背每一個命令的參數,而是不斷地使用,而後總結出一套屬於本身的腳本,每一個開發都應該維護好本身的一套腳本,不斷地用腳本把一些能夠自動化的工做用腳本代替,從而提升本身的工做效率!
========================================================python
若是以爲還不錯,請隨意打賞linux