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