初次接觸linux時(shí),常常感到困惑,因?yàn)橐l繁地使用命令行界面,那個(gè)大黑框總是顯得晦澀難懂。即使翻閱各種手冊,使用vi/vim寫代碼也讓人感到不適。然而,linux下的工具卻擁有驚人的功能,遠(yuǎn)遠(yuǎn)超出我們的想象。如果你是linux的初學(xué)者,那么閱讀下面的內(nèi)容將會(huì)讓你的使用更加得心應(yīng)手、更加高效。
1. 拋棄man,使用tldr優(yōu)雅地閱讀手冊
1.1 簡潔明了
在Linux系統(tǒng)中,幾乎一切操作都可以通過命令行完成,并且有著眾多豐富的命令行工具。然而,即使是最優(yōu)秀的程序員也無法記住所有的命令及其使用方法。當(dāng)我們遇到需要執(zhí)行但又不熟悉的命令時(shí),常常感到手足無措。比如,要使用tar命令進(jìn)行打包或解壓縮,該如何操作呢?
有些人會(huì)打開搜索引擎,辛辛苦苦地查找答案,解決了問題,但很快又會(huì)遺忘。聰明的朋友可能會(huì)想到使用man命令,打開tar的手冊。然而,tar的手冊內(nèi)容通常都很冗長,讓人望而卻步。
又臭又長,需要你有較好的英語基礎(chǔ)和耐心。不僅僅是我們這么覺得,會(huì)英語的老外都覺得煩,于是有大神開發(fā)了tldr工具。tldr即Too Long;Didn’t Read的簡寫,太長不看。
使用方法和man一樣,比如查看tar命令的用法:
tldr?tar
他的畫風(fēng)如上,雖然還是英語(不要害怕英語,這是一個(gè)程序員的基本功),但是他給出了使用的例子!排版簡潔、清晰,收納了使用率高的例子。
比如你要解壓縮,看到這,
即使你的英語水平不高,憑有限的詞匯量, 你也能知道應(yīng)該用什么參數(shù)了吧,可讀性極強(qiáng)!
1.2 安裝tldr
Ubuntu下安裝很簡單,執(zhí)行以下三條命令:
sudo?apt-get?install?nodejs sudo?apt-get?install?npm sudo?npm?install?-g?tldr
如果出現(xiàn)了警告,有可能是因?yàn)?a href="http://www.wanjiajiazheng.cn/help/index.php/tag/nodejs" title="nodejsflickr.photos.notes.edit target="_blank">nodejs版本問題,用以下命令升級nodejs:
sudo?apt-get?install?nodejs-legacy sudo?npm?install?-g?n sudo?n?latest
如果升級nodejs失敗,可能是Ubuntu版本問題,用以下命令安裝穩(wěn)定版nodejs:
sudo?n?stable sudo?node?-v
然后再安裝tldr
sudo?npm?install?-g?tldr
用以下命令可以對tldr更新
tldr?--update
2. 讓你的終端分屏顯示
2.1 終端復(fù)用器(terminal multiplexer)
通過ssh登錄Linux只有一個(gè)命令行界面,用tmux,讓他分開!
如圖,一個(gè)界面分成很多塊,我們可以一邊寫程序,一邊查看其他東西。
可以任意調(diào)整各個(gè)窗格大小與數(shù)量
優(yōu)雅!一個(gè)命令即可安裝:
apt-get?install?tmux
2.2 tmux操作
2.2.1 啟動(dòng)tmux
直接輸入
tmux
如圖,出現(xiàn) 綠色欄就說明進(jìn)入tmux環(huán)境了。
2.2.2 退出tmux
一個(gè)exit命令即可退出。
exit
2.2.3 分屏
左右分屏:在要分屏的窗格下輸入
tmux?split-windosw?-h
上下分屏就是把-h換成-w。
2.2.4 切換當(dāng)前窗格
記住ctrl+b是tmux的各種快捷鍵的啟動(dòng)鍵
切換窗格步驟:
1.按ctrl+b,松開。2.按方向鍵,如要切換到右邊就按->。
2.2.5 調(diào)整窗格大小
先切換到要調(diào)整的窗格,然后:
1.按ctrl+b,不松開。2.按方向鍵
2.2.6 關(guān)閉一個(gè)窗格
先切換到要關(guān)閉的窗格,然后:
1.按ctrl+b,松開。2.按x。
什么?還不夠優(yōu)雅、高效,還是習(xí)慣在Windows下寫好,再放到Linux下編譯?
是的,這樣是正確的選擇,完全沒問題,但是如果不是寫大型項(xiàng)目,其實(shí)直接在Linux下使用vim/vi會(huì)更加優(yōu)雅!
vim/vi可不是記事本,他有著強(qiáng)大的查找、搜索、替換…..等功能,并且可以讓你完全脫離鼠標(biāo),屬于越用越喜歡的慢熱型。不過確實(shí)比較復(fù)雜,不想在這么優(yōu)雅的文章里介紹他,想學(xué)的可以看:
一文徹底解決vi/vim編輯器操作
上面的只是初級優(yōu)雅,真正的優(yōu)雅來了。
3. 管道配合printf調(diào)試程序
Linux下,gdb是一個(gè)很好的調(diào)試工具,不會(huì)用的可以學(xué)一下,在這篇文章中,我并不打算介紹gdb,而是教你用管道機(jī)制,利用Linux里一些命令配合printf來調(diào)試。
Linux 下程序可以協(xié)同工作,可以將一個(gè)命令/程序的輸出通過管道(Pipes)連接到另一個(gè)命令/程序的輸入,管道操作符是 |。
在程序中使用printf加入調(diào)試信息,或作為輸出信息,是常用的調(diào)試和輸出方法,但經(jīng)常會(huì)遇到打印出幾百行,不容易閱讀的情況。
3.1 基操:聯(lián)合grep找到想要的信息
比如一個(gè)輸出進(jìn)程信息的程序,運(yùn)行后很長(這里只展示了一部分)。
我們想看看包含system字樣的,只需:
./pstree.o?|grep?system
ok,只輸出了含system的。
3.2 用head讓程序只輸出一部分
比如一個(gè)輸出信息特別多的程序,我們有時(shí)只想看幾行信息
編輯
-n后面的參數(shù)就是表示輸出的行數(shù)。這個(gè)操作看似作用不大,實(shí)則特別有用!
比如一個(gè)程序,里面的printf會(huì)運(yùn)行n次,為了測試程序,n可能很大,用head命令就相當(dāng)于想讓他讓運(yùn)行幾次就運(yùn)行幾次!
寫一個(gè)簡單的程序模擬一下該情況:
#include? int?main?(int?argc,?char?**argv) { ????????int?i,j; ????????j?=?8; ????????for(i?=?0;i?if?(i?%?j?==?0)?{ ????????????????????????printf("0 "); ????????????????????????j++; ????????????????} ????????????????printf("1 "); ????????} }
編輯
3.3 用sort排序輸出結(jié)果
sort的-u選項(xiàng)
在輸出行中去除重復(fù)行。
sort的-r選項(xiàng)
sort默認(rèn)的排序方式是升序,想改成降序,加-r。
sort的-t選項(xiàng)和-k選項(xiàng)
如果一行的輸出有好幾個(gè)部分/列,比如:
a:1:30:d b:2:30:c f:1:1:a
每行都有4列,列與列之間用冒號隔開了,我想用第4列排序,怎么辦?
加上-t選項(xiàng),后面跟間隔符,指定了間隔符之后,用-k來指定列數(shù)。
另外,管道機(jī)制可以讓命令連用
3.4 uniq命令統(tǒng)計(jì)輸出結(jié)果
uniq命令不帶任何參數(shù)會(huì)刪除重復(fù)出現(xiàn)的行
-c??:?在每列旁邊顯示該行重復(fù)出現(xiàn)的次數(shù) -d??:?僅顯示重復(fù)出現(xiàn)的行列 -u??:?僅顯示出一次的行列(沒有重復(fù)的)
有了這個(gè)-c選項(xiàng),再配合sort就可以統(tǒng)計(jì)輸出了
如上,表示 程序的前一百行輸出里0輸出了12次,1輸出了88次。
這些功能我們完全可以在自己寫的程序里實(shí)現(xiàn),然后調(diào)試,這并不難,但是也會(huì)麻煩,而且這都是為了調(diào)試我們的程序,跟我們程序功能實(shí)際上不沾邊,既然有現(xiàn)成的好用的輪子,為什么不用呢?