Linux 命令行下的好東西

列舉你可能沒注意過的好用的 Linux 命令行命令

現(xiàn)在做網(wǎng)站做移動應用最講究的就是推廣了冠场,推廣做的好那就成功了一大半,相對的沒曝光產(chǎn)品再好也很難做下去钝的。就這個角度而言絕大多數(shù) Linux 命令行的推廣簡直是爛透了冬三。繁多 Linux 有用極了的命令行工具就靜靜的躺在你發(fā)行版默認安裝的包裹里术陶,很多時候只有當你碰到什么問題的時候網(wǎng)上搜一圈才能知道。更蛋疼的是這里面很多東西你一旦知道了就會想我靠原來沒這個到底是怎么過的下去哼转。所以這里我會列出一些我用過的一些明未,大部分發(fā)行版默認就有槽华,或者能用包裹管理工具輕松獲取的東西壹蔓。

這篇文章僅討論 Linux 環(huán)境下的東西,很顯然對 MacOS 也適用猫态。其實很多東西雖然有 Windows 也可以找的到但配置比較麻煩佣蓉,這里不再仔細講。很多東西像 Linux 老鳥看起來會覺得哈哈哈實在是太基礎亲雪。但是像 cd, ls, mkdir 這些太基礎的寫在這里又顯得太業(yè)余勇凭,所以很多十分常用的命令這邊我也跳過了。像 git 這種重量級的工具义辕,和 sed, awk 這些能單獨出書的東西我覺得我也講不清楚虾标,所以這邊都是功能簡單的小東西。不過這些小問題就算了吧...

如果你時間比較充裕

...那么不如看看這本書吧: <<The Linux Command Line>>灌砖。書的內(nèi)容就跟標題一樣璧函,深入淺出的介紹了所謂 "Linux 命令行" 的方方面面,本文很多內(nèi)容也是從書里看到的基显。網(wǎng)站上有 PDF 合法免費下載蘸吓,書寫的很好可以很隨意的看不會覺得壓力太大。最主要的撩幽,如果你是剛剛接觸 Linux 那么這個說不定是最好的上手教程库继,我十分后悔原來不知道這么書。這么說起來另外一本 Linux 入門大師級教程應該是鳥哥私房菜窜醉,這個實在是太出名以至于我覺得沒什么可以說的宪萄。

如果你沒什么空的話

那下面就以隨機的順序列出一些我覺得非常棒的命令行工具。這里不詳細介紹各種參數(shù)榨惰,你應該做的是用 man xxx 來查看文檔拜英。如果這些程序在你的發(fā)行版里沒有安裝,那么請手動搜一下读串。Mac 用戶的話在 homebrew 里可以應該都能找到聊记。

tmux

雖然說順序很隨機但這一條一定得排在第一個。很多人用 Linux 的狀態(tài)都是自己的機器是 Windows恢暖,用 putty 連到一個哪里的 Linux 服務器進行工作排监。這樣的話每次斷開的時候你運行的程序都是會被殺掉的。你可能會希望退出的時候能把打開的程序保持在那里杰捂,下次用連接的時候又能自動到之前的工作狀態(tài)舆床。tmux 就是這個問題的終極解決方案。它們一方面的功能是能在一個 Terminal 里創(chuàng)建多個“窗口”,另一方面如果你關閉連接或者意外掉線挨队,它們默認也不會關掉谷暮,下次連上去可以用 tmux attach 來恢復你之前的工作狀態(tài)。

如果你沒聽說過這個或者類似的 screen 的話盛垦,那你應該給我一點現(xiàn)金湿弦。

tree

ls 可能是你最常用的命令之一。tree 可以遞歸的列出目錄下所有的文件腾夯,并以樹狀形式展現(xiàn):

$ tree
.
├── b
├── c
│   └── d
└── what

對應的也有 pstree 可以以這樣的方式來顯示進程樹颊埃。

ack

我記得我曾經(jīng)在面試的時候被問到過“請寫如何調(diào)用 grep 來列出當前目錄下所有文件里,含有某個字符串的行”蝶俱。這個問題我的回答是 “用 ack 就可以了”班利。ack 的官網(wǎng)域名就叫 betterthangrep.com。由于在當前目錄下載所有文件里查找某個字串符是如此常見的一個操作榨呆,執(zhí)行 ack foo 就可以在當前目錄所有文件里查找 foo罗标。ack 默認會跳過很多沒用的目錄和文件,讓查找更快积蜻,輸出結(jié)果更準確闯割。另外像默認開啟的彩色顯示也讓人用起來很舒暢。

ack 目前大部分發(fā)行版中沒有浅侨,如果你使用的是 Ubuntu 的話其包裹名字是 ack-grep纽谒,執(zhí)行文件的名字也一樣。具體可以在這里查看文檔如输。

rsync

比如說你本地有一臺電腦鼓黔,遠程有一臺服務器。你想把你的一個文件夾全部拷貝到另外一邊的某個地方去不见。你這個文件夾經(jīng)常也要更新澳化,希望通過某種方式把更新的部分能迅速同步過去。這應該怎么做稳吮?不知道 rsync 的話你可能會想用 git缎谷,搭建一個 ftp,或者用 scp 或者別的灶似。但事實上 rsync 才是真正的為精確的解決這個問題而生的軟件列林。rsync 最棒的地方就是差量更新,也就是只把另外一邊缺少的東西傳過去酪惭,而且你不需要任何額外配置希痴,速度快的飛起。一個例子:

rsync -arvuzp --chmod=g+rx ./built/ me@example.com:/var/www/site

aspell

作為一個程序員你總有一天會要寫英文文檔春感。我等母語不是英文的出現(xiàn)拼寫錯誤實在是太正常了砌创。如果你用 Word 的話會有下劃線提示你虏缸,但如果你是在代碼里寫注釋或者再 Linux 下寫 markdown 的話好像就沒什么辦法。事實上這也是一個已經(jīng)被解決的問題嫩实,aspell 正是來做這個的刽辙。aspell 可以對任何純文本進行拼寫檢查,作為面向程序員的工具它可以偵測文件類型甲献,比如對 C++ 程序它就只檢查注釋里的單詞宰缤。

tee

有時候某些命令運行的結(jié)果會很長,你可能會用 less 來上下看竟纳。再或者你可能會用 > 來重定向到文件里撵溃。但某些時候程序有可能需要你輸入 y 來確認,或者某些程序運行的時間很長锥累,僅僅重定向的話又不太確定是不是它在正常運行。tee 就能做到又輸出到屏幕上集歇,又同時重定向到文件桶略。一個簡單的例子:

$ echo waht | tee out.txt

waht 會被輸出到屏幕上,同時也會被寫到 out.txt 文件里诲宇。另外 tee 的意思其實是 T际歼,把輸入輸出中間拉了又多扯出了一條,可謂是相當形象姑蓝。

值得一提的是 vim 也可以用在 pipe 里鹅心,例子如下:

$ echo waht | vim -

<ctrl+r>

你肯定知道用鍵盤上下方向鍵可以來回找你的歷史,那么比如有一個很久之前打過的命令你可能需要猛按上才能找到纺荧。其實這時候只要輸入一部分然后按 <ctrl+r> bash 就會幫你往回搜索旭愧。連續(xù)按 <ctrl+r> 可以按順序往前搜。(或者直接按 <ctrl+r> 再進行輸入)宙暇。接著上面一個的例子输枯,輸入 echo 后按 <ctrl+r> 效果如下:

(reverse-i-search)`echo': echo waht | vim -

有往前搜索那么一般就有往后搜索≌计叮可惜的是往后搜索的快捷鍵是 <ctrl+s>桃熄,如果你試著按一下的就會發(fā)現(xiàn)...好像機器沒反應了。這個是因為 <ctrl+s> 大部分情況下默認是 XOFF型奥,代表暫停接收輸入瞳收。按 <ctrl+q> 就能恢復。當然你可以把向前搜索綁定到別的鍵上厢汹,請自行搜索螟深。

cloc

雖說代碼行數(shù)不能說明任何問題,但有時候不知為什就是想知道坑匠。cloc 能精確的計算代碼行數(shù)血崭,把注釋和空格都區(qū)分開。如果你是一名傳說中的項目經(jīng)理的話,從今天起開始用 cloc 給你手下的碼農(nóng)算工資吧夹纫!下附截屏:

$ cloc /usr/include/
    9628 text files.
    9308 unique files.
     434 files ignored.

T=39.0 s (227.6 files/s, 39948.2 lines/s)
-------------------------------------------------
Language        files    blank  comment      code
-------------------------------------------------
C/C++ Header     8875   217366   287013   1053368
Teamcenter def      1       48        0       186
-------------------------------------------------
SUM:             8876   217414   287013   1053554
-------------------------------------------------

printenv

set 可以查看所有的 Shell 變量還包括 Shell 函數(shù)咽瓷,但是其中有一些是僅僅在當前 shell 里其作用的。而往往你需要找的是通過 export 來定義的環(huán)境變量舰讹。printenv 就是用來做這個的茅姜。

set -o vi

bash 或者可能絕大多數(shù)常見 shell 其實都是支持用 vi 的方式進行命令行編輯的,比如設置了 set -o vi 后你就可以用熟悉的 hjkl 來移動月匣,用 w, b 來跳過單詞等等钻洒。

同樣的如果你設置了 EDITOR 環(huán)境變量的話超全,輸入 fc 就可以把之前輸入的命令行放到編輯器里來編輯叔遂,只要保存了的話就會執(zhí)行雷蹂。相反的放棄保存就等于是放棄鞠抑。

find

我把上面說到的那本書仔細看過以后倘零,最大的收獲之一就是終于學會了用 find富岳。這個現(xiàn)在變成了我?guī)缀趺刻於荚谟玫囊粋€命令呛哟。比如說我要把目錄下所有的 png 文件加入到這次的 git commit 里面苞俘,我可以用:

find . -name '*.png' -exec git add {} ';'

如果你熟悉 find 的話你會知道最后的 ; 可以換為 + 會更好癣诱,但用它就是有目的的计维。這個命令雖然看起來很簡單,但里面的單引號省略或者換成雙引號命令都是會失敗的撕予。這些牽涉到 "shell variable expansion" 和引號的 escape 規(guī)則鲫惶,雖然感覺很惱火但其實這些只有幾個簡單的規(guī)則,而且一致性非常好实抡。所以只要你肯花點時間把相關東西弄清楚欠母,這種簡單的問題就可以輕松搞定。

type

如果 foo 是一個命令行里可以直接運行的程序的話澜术,你應該知道用 which foo 可以找到 foo 的可執(zhí)行文件路徑在那里艺蝴。但在命令行里可以執(zhí)行的命令并不一定都對應到某個可執(zhí)行的文件,它可以是 alias, shell 自帶的函數(shù)和用戶自己的函數(shù)等等鸟废。所以有時候用 which 找到不到東西的時候會讓人很疑惑猜敢。其實你可以用 type foo 看看 foo 到底是什么類型的。

help

上面提到了 "builtin command" 也就是內(nèi)置命令盒延,就是由 shell 提供的一些基本的或者無法由外部程序做到的命令缩擂。平常你可以用 man 來查看文檔,但是對于內(nèi)置命令 man 會跳到 shell 自己的 manpage添寺,在某些系統(tǒng)里那就是巨大的一頁你要再里面找到你想看的東西胯盯,有些系統(tǒng)里干脆就沒有相關的信息。這種時候用 help 這個內(nèi)置命令就可以解決這個問題:比如要查看 set 的接受的選項计露,可以用 help set 來輕松找到博脑。

env

你應該知道在 #! (shebang) 在腳本第一行的作用是指定其 'runtime'憎乙。比如說你想要寫一個 Python 的腳本,但其實不太在意其版本叉趣,或者不確定其可執(zhí)行文件在不同的機器上到底在哪里泞边。那么 env 在這里就可以派上用場了×粕迹可以寫成 #!/usr/bin/env python阵谚,這樣執(zhí)行的時候就會用當前 PATH 中找到的 python。另一方面這個也是一個給你一個在不修改代碼的情況下烟具,重新選擇 'runtime' 的機會梢什。

file

如果你想知道某個路徑上的文件到底是什么類型的,那么用 file 是再合適不過的了朝聋。它能對任何東西都給出一個有意義的解釋嗡午,對于二進制文件還會列出很多相關的重要信息。

strings

“我把我的秘密玖翅,放在了這個用 C++ 編寫的程序里面翼馆。運行它輸入正確的密碼才能看到”。其實萬一遇到這種情況你只要跑 strings program-written-in-cxx 十有八九你就能看到了金度。它能比較準確的列出二進制文件里包含的 C 風格的字符串⊙狭ぃ看起來沒什么意義但是其實作用完全要靠你發(fā)揮猜极,比如要知道某個程序是哪個版本 GCC 編譯出來的用 strings 可能有結(jié)果。

od

全程應該是 "object dump"消玄,可以將文件按八進制跟伏,十六進制或者其他方式顯示出來。我覺得大部分情況下這大家都在用 od -c翩瓜,將文件按 ASCII 碼 dump 出來受扳。一個用例是用來看文件的 line ending 到底是怎樣的。比如執(zhí)行 od -c foo.txt 顯示如下結(jié)果:

$ od -c foo.txt
0000000   h   e   l   l   o  \t   w   o   r   l   d  \r  \n   y   e   a
0000020   h
0000021

可以清楚的看到 \t 是 tab 字符兔跌, \r\n 是 Windows 風格的換行符勘高。

最后

沒什么特別的,只是如果后面還碰到好用的命令行工具我會再添加在這里坟桅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末华望,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仅乓,更是在濱河造成了極大的恐慌赖舟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夸楣,死亡現(xiàn)場離奇詭異宾抓,居然都是意外死亡子漩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門石洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幢泼,“玉大人,你說我怎么就攤上這事劲腿⌒袢蓿” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵焦人,是天一觀的道長挥吵。 經(jīng)常有香客問我,道長花椭,這世上最難降的妖魔是什么忽匈? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮矿辽,結(jié)果婚禮上丹允,老公的妹妹穿的比我還像新娘。我一直安慰自己袋倔,他們只是感情好雕蔽,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宾娜,像睡著了一般批狐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上前塔,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天嚣艇,我揣著相機與錄音,去河邊找鬼华弓。 笑死食零,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的寂屏。 我是一名探鬼主播贰谣,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凑保!你這毒婦竟也來了冈爹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤欧引,失蹤者是張志新(化名)和其女友劉穎频伤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芝此,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡憋肖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年因痛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岸更。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸵膏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怎炊,到底是詐尸還是另有隱情谭企,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布评肆,位于F島的核電站债查,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓜挽。R本人自食惡果不足惜盹廷,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望久橙。 院中可真熱鬧俄占,春花似錦、人聲如沸淆衷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祝拯。三九已至碰凶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹿驼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工辕宏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留畜晰,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓瑞筐,卻偏偏與公主長得像凄鼻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聚假,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理块蚌,服務發(fā)現(xiàn),斷路器膘格,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Ubuntu的發(fā)音 Ubuntu辆毡,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音甜害。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,156評論 9 467
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,134評論 2 34
  • 簡介 用簡單的話來定義tcpdump舶掖,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 5,941評論 1 13
  • 命令行的藝術(shù) 前言 基礎 日常使用 文件及數(shù)據(jù)處理 系統(tǒng)調(diào)試 單行腳本 冷門但有用 僅限 OS X 系統(tǒng) 僅限 W...
    進擊的諾基亞閱讀 3,840評論 0 19