Ubuntu桌面生存指南一:選擇Linux
緣起
我大概是從2010年4月份開始把自己的桌面開發(fā)環(huán)境從 Windows XP 遷移到 Ubuntu 10.04 的,說起來也已經(jīng)有兩年半的 Ubuntu 使用經(jīng)驗。那次遷移的原因大致是因為某個階段特別迷戀如何高效的操作電腦,當時把 Windows 整的很伏貼,但是說到高效的使用電腦,不可能對 Linux 系統(tǒng)視而不見。其次就是瞥到一個同事在搗鼓 Ubuntu, 加上畢竟 Windows 環(huán)境生存了十幾年時間,再多的新鮮感也用盡了,當時很想試試在 Linux 下是不是可以完成在 Windows 下等價的工作。當然,兩年半以后,很多結(jié)論都是不言自明的。所以《Ubuntu桌面生存指南》是我在兩年半時間里,對 Ubuntu 這個發(fā)行版的使用心得,我會涉及必要的基礎(chǔ)知識,幫助諸位理解,但是不會做到教科書式的面面俱到,或者涉獵太過艱深又不實用的技巧,行文的唯一目的正如題目所示,是盡可能幫助那些對 Ubuntu/Linux 感興趣的人首先生存在這個平臺,不至于因為這樣那樣的不方便錯過或者誤解一個優(yōu)秀的發(fā)行版。
生存漸進史
Windows -> VirtualBox -> Wubi -> Dedicated Partition
想學習一個操作系統(tǒng)最好的手段就是把自己所有的日常工作都切換到那個操作系統(tǒng)里去,這種沉浸式的學習方法在很多領(lǐng)域都適用,比如學習一門外語,學習一種編程語言,不斷的碰壁和尋找解決方案在最初可能花費大量的時間,但是,不斷的記錄問題,寫下答案,反復的遇到相同的問題,參考答案,再次實踐當初的答案或者找到更優(yōu)的答案,如此循序漸進以后,如果你看到一個高手可以在你束手無策的時候敲下長長的一串莫名其妙的命令,然后揚長而去,千萬別驚奇,這里面沒有智力的成分,也沒有記憶力好壞的區(qū)別——無奇,唯手熟爾。因此最初我是在公司的 Windows 下安裝虛擬機,當我發(fā)覺這種剪不斷理還亂的方式,讓我仍舊依賴 Windows 的時候,促使我很快就轉(zhuǎn)換到 Wubi 的安裝方式,再接著穩(wěn)定使用了一年半以后就正式把 Wubi 移植到獨立分區(qū),從物理分區(qū)的角度告別了使用將近十幾年的 Windows 平臺,轉(zhuǎn)而,在 Ubuntu 的 host 里虛擬了 Windows 的 guest。至此,總共是兩年半。完成了從 Windows Host with Ubuntu Guest 到 Ubuntu Host with Windows Guest 的轉(zhuǎn)換。套用美國佬的世界觀,我們終于可以從一個不自由的世界走向一個自由世界了。
三個虛擬世界:Linux, Mac, Windows
- Linux -> 開發(fā)人員,科學家,工程師的開發(fā)者系統(tǒng)
- Windows -> 老百姓的普羅大眾系統(tǒng)
- Mac -> 上述兩者之間,部分不明真相的群眾,以及高端裝系統(tǒng)
每個操作系統(tǒng)都有自己的用戶,促成他們選擇使用某一個系統(tǒng)的因素有很多,最大的原因是拒絕改變,這也成就了 Windows 平臺的繁榮,但是這里不含貶義,拒絕改變的背后是因為普羅大眾的生活重心并不全是計算機,他們更愿意把時間花在自己關(guān)心的領(lǐng)域,計算機只要夠用,適用就可以接受。這一條不僅在非 IT 領(lǐng)域成立,即便在 IT 領(lǐng)域,如果你不是一線的開發(fā)人員,同樣成立。撇開拒絕改變以外,每個能夠存活到今天的系統(tǒng)本身都已經(jīng)沒有優(yōu)劣的區(qū)分,剩下的就是理念,哲學,用途的區(qū)別,Windows, Mac, Linux 都有各自旗幟鮮明的個性,在那些不同的旗幟背后,都有堅定的擁護者,他們在自己的立場都做出了正確的選擇。因此,不同陣營的旗手互相之間做無謂的爭論幷無太多意義。但是如果你是一個暫時還沒有使用 Ubuntu/Linux 的開發(fā)者,程序員,希望這個系列文章可以改變你的看法。#p#
開發(fā)者的操作系統(tǒng)
Linux 是從極客的學生宿舍里走出來的操作系統(tǒng),更是通過互聯(lián)網(wǎng)完成協(xié)同開發(fā)的典范,匯集了全球極客的智慧。因此它也是一個開發(fā)者相當友好的操作系統(tǒng),它的所有設(shè)計理念和哲學都是假定開發(fā)者作為最終用戶的。從其它操作系統(tǒng)遷徙到 Linux 的時候一定要牢記這點,否則就無法理解很多事情。從這個角度說,很多爭執(zhí)哪個操作系統(tǒng)更優(yōu)秀的前提就已經(jīng)錯了,比爾蓋茨在1983年就告訴所有人他的夢想是人人有電腦可用。所以 Windows 注定是一個普羅大眾為最終用戶的系統(tǒng),兩個系統(tǒng)有各自的目標用戶,那還吵什么呢?許多聳人聽聞的報刊,雜志,博文時不時的就列出一些統(tǒng)計數(shù)據(jù),然后吼一嗓子:“Linux 桌面已死!”,真心混淆視聽。不過在一個商業(yè)化氣氛濃厚的社會,即便是開發(fā)人員,我們也已經(jīng)太長時間被 Windows 這樣假定普羅大眾為最終用戶的系統(tǒng)慣壞了。我們習慣下載安裝二進制文件而不是從源碼開始編譯,我們習慣使用鼠標而不是鍵盤操作電腦,我們認為沒有圖形界面不可想象,我們面對終端束手無策,并且經(jīng)常分不清出方便和高效之間的差別。所以如果你從來沒有認真使用過 Linux 千萬別先忙著下結(jié)論,否則未免會有失偏頗。安裝這個系統(tǒng),使用這個系統(tǒng),解決你的問題,然后再看是不是對你的胃口。理論上說,使用一個為開發(fā)者準備的操作系統(tǒng)不會有太多的為難,如果你感覺困難,只有兩個原因,你拒絕改變或者你真心對開發(fā)這個事情沒有興趣,反之,適應了這個環(huán)境以后會感覺舒適,安逸。
為了讓你或者他們自己更好的使用 Linux ,我們的前人做了很多事情。
他們首先開源了代碼
這是一個嚇壞了封閉和專利系統(tǒng)制作者的決定。因為那些閉源廠商依靠販賣專利和二進制文件獲利,公布自己的代碼,并且連帶修改和發(fā)行權(quán)利也一并不要了,這在閉源廠商是不能想象的。相反在開源系統(tǒng)中,開發(fā)者求知的愿望被充分尊重了,他們可以任意閱讀自己感興趣的代碼,獲取知識,修補臭蟲,甚至參與開源項目,結(jié)識更多其它有求知欲的極客,從而提高自己的開發(fā)水平。在閉源系統(tǒng)中,開發(fā)者只能依賴廠商提供的 API,文檔以及定期的補丁包–這些同樣是普羅大眾不那么關(guān)心但是開發(fā)者所不能接受的。因此使用開源系統(tǒng)無疑可以增強自己的技能水準,并且在使用系統(tǒng)的同時有機會改進和修補自己的系統(tǒng)。
他們更懂開發(fā)者
從誕生之初起,這就是一個極客玩出來的操作系統(tǒng)。與其說他們是在開發(fā)操作系統(tǒng)不如說他們是在滿足開發(fā)者自己的需求,這就是著名的“吃狗食“理論,需要一個開發(fā)者系統(tǒng):1. 動手做一個 -> 2. 生存在其中 -> 3. 體會優(yōu)劣 -> 4. 修補不足,增進優(yōu)勢使它更適合開發(fā) -> 循環(huán)至 1. 生存在其中。所以這個系統(tǒng)會越來越朝著它的方向發(fā)展,那就取悅開發(fā)者自己。經(jīng)過大約二十多年的發(fā)展,今天的開發(fā)者系統(tǒng)已經(jīng)積累了無數(shù)提升開發(fā)生產(chǎn)力的哲學,理念和工具軟件。幾乎你能想到的和未能想到的一切和開發(fā)相關(guān)的需求都已經(jīng)在開發(fā)者系統(tǒng)上被滿足了,你需要做的就是學習,練習和使用。即便這仍然不能滿足你,開發(fā)者系統(tǒng)上很容易對已有的存在做一個分支然后進行自我滿足的工作。某些時候沒人比你自己更懂自己,更多的時候他們比你更懂你自己,使用開發(fā)者系統(tǒng)的開發(fā)者時常就會想到要是有這么一個功能就好了,然后 Google 一下相關(guān)資料,接著自言自語 “哦。。。果然已經(jīng)有了”。物以類聚,人以群分,如果我們的行為方式和思維模式相近,那么先前的開發(fā)者早就遇到過相同的困擾并且動手解決了問題。你仍然只需要學習,練習和使用,僅此而已。他們懂得鍵盤比起鼠標在大多數(shù)開發(fā)場合更高效,他們懂得軟件界面首先需要的是命令行,其次才是圖形化界面,他們懂得命令優(yōu)于導航的哲學,你需要編輯器/編譯器,他們提供了偉大的 Vim,Emacs/gcc, g++,你需要好用的腳本語言,他們內(nèi)置了Bash Shell/Python,你需要更高效的操作電腦,他們提供了無數(shù)的實用命令行程序,幷為幾乎每一個程序配置了無數(shù)參數(shù)來滿足你的需要,一旦我們理解他們這么做的初衷,剩下的還是學習,練習和使用。
我們更懂自己嗎?
不幸的是很多人接受了饋贈卻開始抱怨:“這么多命令,參數(shù)怎么記得???為什么沒有像樣的 GUI 版本,為什么沒有像 VB 那樣可拖拉的 IDE? 我需要一個開箱即用的系統(tǒng),不折騰!”。實際上我們幷沒有開發(fā)這些程序,其實我們沒有資格抱怨什么,如果我們需要的幷不存在于開發(fā)者系統(tǒng),那么停止抱怨,仔細思考,更大的可能是:不存在意味著不需要,意味著存在會拖累生產(chǎn)力,違背開發(fā)者系統(tǒng)的哲學。很多的誤解來自長期使用普羅大眾系統(tǒng),我們是被慣壞的一代,普羅大眾系統(tǒng)假定用戶依靠鼠標和直覺去操作系統(tǒng),他們依靠盡量壓縮用戶的學習成本去博得方便使用的好名聲,很多系統(tǒng)在這方面確實做得很好,很多人不需要閱讀使用手冊就可以使用軟件和操作系統(tǒng)。這同樣也是普羅大眾系統(tǒng)經(jīng)過幾十年“吃狗食”得到的回報。但是仔細想想這是開發(fā)者需要的系統(tǒng)嗎?普羅大眾和開發(fā)者站在兩個各自的立場,有各自的需求。如果開發(fā)者覺得普羅大眾系統(tǒng)很好用,這現(xiàn)象本身就很值得探討,肯定有地方出錯了不是嗎? 何況這是一個開發(fā)者友好的系統(tǒng),那么為什么還是有許多開發(fā)者并不適應?其實我們忘記了一個最簡單的道理,技能是需要習得的。開發(fā)者不能按普羅大眾的要求來要求自己,方便和高效其實并不是等價的,普羅大眾系統(tǒng)的方便是依靠犧牲效率和可定制性來達成的,例如鼠標點擊運行程序看起來比輸入命令啟動程序方便很多,但是如果你需要從上百個圖標里尋找那個程序會怎么樣?你又能不能啟動程序的時候要求啟動后最大化窗口?所以開發(fā)者系統(tǒng)開始不斷增加命令,配置,選項和各類約定來追求效率和可定制性。而一旦我們認為效率和可定制性更重要的時候,記憶的負擔,學習的成本就出現(xiàn)了,我們需要去學習記憶,熟練運用那些命令配置,了解約定,遵守約定。開發(fā)者需要不斷的學習技能以追求更高效的使用開發(fā)者系統(tǒng),這才是開發(fā)者和普羅大眾的本質(zhì)區(qū)別,這個世界上幷沒有那么多好處全你占的事情,提升效率的前提便是增加學習成本,容忍一定程度的不那么方便。不想折騰又想高效的使用開發(fā)者系統(tǒng)就和沒好好學過外語又想有流利的口語一樣荒誕,我們所有的技能,除了本能以外,譬如:心算,語言,記憶力,專業(yè)技能都需要反復折騰才能獲得,使用開發(fā)者系統(tǒng)同樣如此。說不折騰的人,要么是普羅大眾,要么被普羅大眾系統(tǒng)搞傻了,要么就是身心老了,折騰不動了。了解這個事實以后,讀者自行權(quán)衡,然后我們才能說接下來的事情。#p#
Linux 哲學
為了高效的使用開發(fā)者系統(tǒng),Linux 哲學中最重要的一點就是命令優(yōu)于導航。
導航操作是指人類通過視覺定位,進而層層遞進的操作方式,通常由鼠標完成。例如瀏覽網(wǎng)頁,點擊鏈接進而繼續(xù)瀏覽點擊。對于普羅大眾有以下幾個情形,我們會使用導航方式:
不知道自己想讓計算機做什么或者計算機可以告訴我們什么,通過隨意瀏覽方式挖掘我們可能可以讓計算機做什么或者告訴我什么。最常見的案例就是在沒有使用手冊的情況下,所以點擊菜單,看看某個軟件都有哪些功能,或者是去門戶網(wǎng)站,微博上刷刷有什么自己感興趣的內(nèi)容。
我知道要計算機做什么,但是我需要先在一堆菜單,圖標里找到我需要的按鈕,在告訴計算機去做之前必須例行的完成數(shù)次導航操作,例如我想卸載某個游戲,就需要從點擊菜單欄開始尋找到這個游戲的程序組,點擊卸載圖標。又例如我需要安裝 Firefox,那我得先設(shè)法找到 Firefox 的官網(wǎng),從其中找到下載鏈接,選擇相適應的匹配版本,然后點擊下載,等待完成后,去安裝文件所在的文件夾,雙擊安裝,期間還需要確認無數(shù)條款,選擇安裝目錄,刪減可選插件,最后確認安裝。
命令操作則無需付出視覺定位的成本,如果你會盲打,基本上你可以直接使用快捷鍵或者敲擊命令行對計算機進行操作,這些操作通常只依賴于鍵盤。由于標準鍵盤上有至少100個以上的按鍵,可以組合出無數(shù)的操作手法以應對各種復雜的情況,所以基本上鍵盤是最重要和最強大的計算機輸入設(shè)備。很可惜普羅大眾很多時候沒有意識到這一點,只是在碼字的時候才敲擊鍵盤,卻不善于真正使用鍵盤操控計算機的其它功能。我們會使用命令方式:
在不知道計算機能做什么的時候,一樣用命令方式進行瀏覽,除非某些 GUI 軟件不提供快捷鍵功能。
在知道要計算做什么的時候直接給出相應的命令操控電腦,比如我需要安裝 Firefox,基本上在 Ubuntu 里,只需要鍵入:
sudo apt-get install firefox |
那么為什么說命令優(yōu)于導航?幾點原因:
導航操作從生理上增加了使用電腦的額外負擔
仔細回顧一個最基本的問題:我們是如何使用一臺計算機的?通過輸入設(shè)備傳達指令,計算機做出處理幷通過輸出設(shè)備返回結(jié)果,這就是最基本的使用流程。無論是個人電腦,智能手機,平板都是這個流程。哪個系統(tǒng)更方便輸入,哪個系統(tǒng)就更方便使用,普羅大眾系統(tǒng)很清楚這一個基本準則,所以他們最小化了用戶輸入指令的成本,開發(fā)出了鼠標,觸摸屏,甚至語音識辨,聲控系統(tǒng),光感系統(tǒng)。在公眾視野制造了一波又一波的流行熱。但是追求潮流并不解決效率的問題,如前文所述,方便幷不意味著高效。尤其對于需要大量輸入的開發(fā)者系統(tǒng)而言更是如此?;镜氖髽瞬僮魇腔趫D形界面也就是導航的,我們通過鼠標傳達指令,首先需要通過眼睛定位圖形界面上操作對象的位置例如:一個菜單,一個按鈕,其次移動鼠標定位位置,完成點擊,并且往往需要重復一系列這個過程才能完成一個實際上有意義的操作,如果同時還需要大量的文本處理,那么雙手還需要在鼠標和鍵盤之間做大量費時的切換工作。的確,每一次定位,點擊,切換的代價幷沒有那么的大,但是累積到一定程度,或者當你需要批處理一堆類似的任務,就相當?shù)恼勰ト肆?。是不是時常感覺到右手肩關(guān)節(jié)有酸疼感?直接病因就是長期依賴右手握持鼠標,右肩無法呈自然下垂姿態(tài)。這個病俗稱鼠標手,學名肩周琰。可見導航操作給身體帶來了多大的傷害。命令操作的輸入代價會大一些,但是讓雙手全程固定在了鍵盤上,對于文字輸入者避免了切換鼠標的時間損耗,和注意力的被迫轉(zhuǎn)移。命令本身,通過組合,也是對計算機系統(tǒng)最直接的指令下達,很多時候反而可以避免大量的導航工作。如前所述的 Firefox 安裝。
導航操作容易產(chǎn)生視覺上的迷失
前面我們提到過,在一個有幾十個圖標的桌面上,要定位到某個想要啟動的程序,或者在一個多級菜單里尋找某個軟件功能是費力費眼的。如果你了解等價的命令,直接鍵入程序名然后啟動應用程序會快上很多倍。也就是說如果你知道你想干什么,使用鍵盤鍵入命令或者執(zhí)行搜索,效果會比肉眼巡視來得高效很多。搜索這個概念在開發(fā)者系統(tǒng)的很多地方都貫穿得相當徹底,find/which/whereis/grep/vim/vimperator 很多命令都是基于搜索優(yōu)于導航這一理念的。時刻養(yǎng)成搜索的習慣能幫助我們更高效的使用開發(fā)者系統(tǒng)。
命令操作更容易被開發(fā),組合使用,以及更容易地進行參數(shù)調(diào)整,腳本化批量處理
開發(fā)基于導航的 GUI 成本巨大而且容易出錯,命令行則相反。這就讓開發(fā)者在最初可以只集中精力處理命令本身需要完成的核心功能,而不是花費大量的時間在 GUI 的外殼上。通過幾個小程序組合出更強悍的功能,通過調(diào)整不同的參數(shù)或者使用文本配置文件的方式進行隨意的軟件定制,甚至批處理一堆需要重復運行的計算機操作,這在命令行都是很自然的事情,GUI 想達成同樣的目標就相當費力了。
便于遠程管理計算機
在桌面上強調(diào)使用命令,使得我們順便撿到了一份紅利,因為我們慣用命令,可以擺脫 GUI 的依賴,我們就能更好的登錄到遠程的機器上進行各種操作,因為使用命令的傳輸代價遠遠小于圖形界面的遠程傳輸,時至今日,ssh 遠程登入仍然是 Linux 系統(tǒng)管理員遠程管理電腦的標準方式。所有你在本地桌面上操練掌握的命令,都可以在遠程服務器上別無二致的使用,不至于在只配備終端沒有GUI的服務器上會感覺手足無措。
通過命令優(yōu)于導航這一條公理,我們演化出了以下理念,請在使用開發(fā)者系統(tǒng)的時候時刻牢記:
- 命令行優(yōu)于圖形界面
- 鍵盤優(yōu)于鼠標
- 搜索優(yōu)于導航
最后,使用開發(fā)者系統(tǒng)的前提是認同 Linux 哲學,理解學習,記憶的代價是用來換取高效使用開發(fā)者系統(tǒng)而產(chǎn)生的。你越多的付出腦力成本使用這個系統(tǒng),就會越高效安逸的生存在這個系統(tǒng)中,也就越認同她的哲學,使得你付出更多的腦力成本,繼而進入同時鍛煉腦力和提高生產(chǎn)力的良性循環(huán)中。這種變化甚至可以影響到你做任何事情的態(tài)度:收起懶散的心理和渙散的心智,使用腦力來提升效率,最終讓你成為一個務實,智慧和高效的人。