Ubuntu桌面生存指南 (1) --- 選擇 Linux

發表於2012-10-30

緣起

我大概是從2010年4月份開始把自己的桌面開發環境從 Windows XP 遷移到 Ubuntu 10.04 的,說起來也已經有兩年半的 Ubuntu 使用經驗。那次遷移的原因大致是因為某個階段特別迷戀如何高效的操作電腦,當時把 Windows 整的很伏貼,但是說到高效的使用電腦,不可能對 Linux 系統視而不見。其次就是瞥到一個同事在搗鼓 Ubuntu, 加上畢竟 Windows 環境生存了十幾年時間,再多的新鮮感也用盡了,當時很想試試在 Linux 下是不是可以完成在 Windows 下等價的工作。當然,兩年半以後,很多結論都是不言自明的。所以《Ubuntu桌面生存指南》是我在兩年半時間裡,對 Ubuntu 這個發行版的使用心得,我會涉及必要的基礎知識,幫助諸位理解,但是不會做到教科書式的面面俱到,或者涉獵太過艱深又不實用的技巧,行文的唯一目的正如題 目所示,是儘可能幫助那些對 Ubuntu/Linux 感興趣的人首先生存在這個平臺,不至於因為這樣那樣的不方便錯過或者誤解一個優秀的發行版。

生存漸進史

Windows -> VirtualBox -> Wubi -> Dedicated Partition

想學習一個作業系統最好的手段就是把自己所有的日常工作都切換到那個作業系統裡去,這種沉浸式的學習方法在很多領域都適用,比如學習一門外語,學習 一種程式語言,不斷的碰壁和尋找解決方案在最初可能花費大量的時間,但是,不斷的記錄問題,寫下答案,反覆的遇到相同的問題,參考答案,再次實踐當初的答 案或者找到更優的答案,如此循序漸進以後,如果你看到一個高手可以在你束手無策的時候敲下長長的一串莫名其妙的命令,然後揚長而去,千萬別驚奇,這裡面沒 有智力的成分,也沒有記憶力好壞的區別——無奇,唯手熟爾。因此最初我是在公司的 Windows 下安裝虛擬機器,當我發覺這種剪不斷理還亂的方式,讓我仍舊依賴 Windows 的時候,促使我很快就轉換到 Wubi 的安裝方式,再接著穩定使用了一年半以後就正式把 Wubi 移植到獨立分割槽,從物理分割槽的角度告別了使用將近十幾年的 Windows 平臺,轉而,在 Ubuntu 的 host 裡虛擬了 Windows 的 guest。至此,總共是兩年半。完成了從 Windows Host with Ubuntu Guest 到 Ubuntu Host with Windows Guest 的轉換。套用美國佬的世界觀,我們終於可以從一個不自由的世界走向一個自由世界了。

三個虛擬世界:Linux, Mac, Windows

  • Linux -> 開發人員,科學家,工程師的開發者系統
  • Windows -> 老百姓的普羅大眾系統
  • Mac -> 上述兩者之間,部分不明真相的群眾,以及高階裝系統

每個作業系統都有自己的使用者,促成他們選擇使用某一個系統的因素有很多,最大的原因是拒絕改變,這也成就了 Windows 平臺的繁榮,但是這裡不含貶義,拒絕改變的背後是因為普羅大眾的生活重心並不全是計算機,他們更願意把時間花在自己關心的領域,計算機只要夠用,適用就可 以接受。這一條不僅在非 IT 領域成立,即便在 IT 領域,如果你不是一線的開發人員,同樣成立。撇開拒絕改變以外,每個能夠存活到今天的系統本身都已經沒有優劣的區分,剩下的就是理念,哲學,用途的區 別,Windows, Mac, Linux 都有各自旗幟鮮明的個性,在那些不同的旗幟背後,都有堅定的擁護者,他們在自己的立場都做出了正確的選擇。因此,不同陣營的旗手互相之間做無謂的爭論幷無 太多意義。但是如果你是一個暫時還沒有使用 Ubuntu/Linux 的開發者,程式設計師,希望這個系列文章可以改變你的看法。

開發者的作業系統

Linux 是從極客的學生宿舍裡走出來的作業系統,更是透過網際網路完成協同開發的典範,彙集了全球極客的智慧。因此它也是一個開發者相當友好的作業系統,它的所有設 計理念和哲學都是假定開發者作為終端使用者的。從其它作業系統遷徙到 Linux 的時候一定要牢記這點,否則就無法理解很多事情。從這個角度說,很多爭執哪個作業系統更優秀的前提就已經錯了,比爾蓋茲在1983年就告訴所有人他的夢想 是人人有電腦可用。所以 Windows 註定是一個普羅大眾為終端使用者的系統,兩個系統有各自的目標使用者,那還吵什麼呢?許多聳人聽聞的報刊,雜誌,博文時不時的就列出一些統計資料,然後吼一嗓 子:“Linux 桌面已死!”,真心混淆視聽。不過在一個商業化氣氛濃厚的社會,即便是開發人員,我們也已經太長時間被 Windows 這樣假定普羅大眾為終端使用者的系統慣壞了。我們習慣下載安裝二進位制檔案而不是從原始碼開始編譯,我們習慣使用滑鼠而不是鍵盤操作電腦,我們認為沒有圖形介面 不可想象,我們面對終端束手無策,並且經常分不清出方便和高效之間的差別。所以如果你從來沒有認真使用過 Linux 千萬別先忙著下結論,否則未免會有失偏頗。安裝這個系統,使用這個系統,解決你的問題,然後再看是不是對你的胃口。理論上說,使用一個為開發者準備的操作 系統不會有太多的為難,如果你感覺困難,只有兩個原因,你拒絕改變或者你真心對開發這個事情沒有興趣,反之,適應了這個環境以後會感覺舒適,安逸。

為了讓你或者他們自己更好的使用 Linux ,我們的前人做了很多事情。

  1. 他們首先開源了程式碼

    這是一個嚇壞了封閉和專利系統製作者的決定。因為那些閉源廠商依靠販賣專利和二進位制檔案獲利,公佈自己的程式碼,並且連帶修改和發行權利也一併不要了,這在 閉源廠商是不能想象的。相反在開源系統中,開發者求知的願望被充分尊重了,他們可以任意閱讀自己感興趣的程式碼,獲取知識,修補臭蟲,甚至參與開源專案,結 識更多其它有求知慾的極客,從而提高自己的開發水平。在閉源系統中,開發者只能依賴廠商提供的 API,文件以及定期的補丁包–這些同樣是普羅大眾不那麼關心但是開發者所不能接受的。因此使用開源系統無疑可以增強自己的技能水準,並且在使用系統的同 時有機會改進和修補自己的系統。

  2. 他們更懂開發者

    從誕生之初起,這就是一個極客玩出來的作業系統。與其說他們是在開發作業系統不如說他們是在滿足開發者自己的需求,這就是著名的“吃狗食“理論,需要一個 開發者系統:1. 動手做一個 -> 2. 生存在其中 -> 3. 體會優劣 -> 4. 修補不足,增進優勢使它更適合開發 -> 迴圈至 1. 生存在其中。所以這個系統會越來越朝著它的方向發展,那就取悅開發者自己。經過大約二十多年的發展,今天的開發者系統已經積累了無數提升開發生產力的哲 學,理念和工具軟體。幾乎你能想到的和未能想到的一切和開發相關的需求都已經在開發者系統上被滿足了,你需要做的就是學習,練習和使用。即便這仍然不能滿 足你,開發者系統上很容易對已有的存在做一個分支然後進行自我滿足的工作。某些時候沒人比你自己更懂自己,更多的時候他們比你更懂你自己,使用開發者系統 的開發者時常就會想到要是有這麼一個功能就好了,然後 Google 一下相關資料,接著自言自語 “哦。。。果然已經有了”。物以類聚,人以群分,如果我們的行為方式和思維模式相近,那麼先前的開發者早就遇到過相同的困擾並且動手解決了問題。你仍然只 需要學習,練習和使用,僅此而已。他們懂得鍵盤比起滑鼠在大多數開發場合更高效,他們懂得軟體介面首先需要的是命令列,其次才是圖形化介面,他們懂得命令 優於導航的哲學,你需要編輯器/編譯器,他們提供了偉大的 Vim,Emacs/gcc, g++,你需要好用的指令碼語言,他們內建了Bash Shell/Python,你需要更高效的操作電腦,他們提供了無數的實用命令列程式,幷為幾乎每一個程式配置了無數引數來滿足你的需要,一旦我們理解他 們這麼做的初衷,剩下的還是學習,練習和使用。

  3. 我們更懂自己嗎?

    不幸的是很多人接受了饋贈卻開始抱怨:“這麼多命令,引數怎麼記得住?為什麼沒有像樣的 GUI 版本,為什麼沒有像 VB 那樣可拖拉的 IDE? 我需要一個開箱即用的系統,不折騰!”。實際上我們幷沒有開發這些程式,其實我們沒有資格抱怨什麼,如果我們需要的幷不存在於開發者系統,那麼停止抱怨, 仔細思考,更大的可能是:不存在意味著不需要,意味著存在會拖累生產力,違背開發者系統的哲學。很多的誤解來自長期使用普羅大眾系統,我們是被慣壞的一 代,普羅大眾系統假定使用者依靠滑鼠和直覺去作業系統,他們依靠儘量壓縮使用者的學習成本去博得方便使用的好名聲,很多系統在這方面確實做得很好,很多人不需 要閱讀使用手冊就可以使用軟體和作業系統。這同樣也是普羅大眾系統經過幾十年“吃狗食”得到的回報。但是仔細想想這是開發者需要的系統嗎?普羅大眾和開發 者站在兩個各自的立場,有各自的需求。如果開發者覺得普羅大眾系統很好用,這現象本身就很值得探討,肯定有地方出錯了不是嗎? 何況這是一個開發者友好的系統,那麼為什麼還是有許多開發者並不適應?其實我們忘記了一個最簡單的道理,技能是需要習得的。開發者不能按普羅大眾的要求來 要求自己,方便和高效其實並不是等價的,普羅大眾系統的方便是依靠犧牲效率和可定製性來達成的,例如滑鼠點選執行程式看起來比輸入命令啟動程式方便很多, 但是如果你需要從上百個圖示裡尋找那個程式會怎麼樣?你又能不能啟動程式的時候要求啟動後最大化視窗?所以開發者系統開始不斷增加命令,配置,選項和各類 約定來追求效率和可定製性。而一旦我們認為效率和可定製性更重要的時候,記憶的負擔,學習的成本就出現了,我們需要去學習記憶,熟練運用那些命令配置,了 解約定,遵守約定。開發者需要不斷的學習技能以追求更高效的使用開發者系統,這才是開發者和普羅大眾的本質區別,這個世界上幷沒有那麼多好處全你佔的事 情,提升效率的前提便是增加學習成本,容忍一定程度的不那麼方便。不想折騰又想高效的使用開發者系統就和沒好好學過外語又想有流利的口語一樣荒誕,我們所 有的技能,除了本能以外,譬如:心算,語言,記憶力,專業技能都需要反覆折騰才能獲得,使用開發者系統同樣如此。說不折騰的人,要麼是普羅大眾,要麼被普 羅大眾系統搞傻了,要麼就是身心老了,折騰不動了。瞭解這個事實以後,讀者自行權衡,然後我們才能說接下來的事情。

Linux 哲學

為了高效的使用開發者系統,Linux 哲學中最重要的一點就是命令優於導航

導航操作是指人類透過視覺定位,進而層層遞進的操作方式,通常由滑鼠完成。例如瀏覽網頁,點選連結進而繼續瀏覽點選。對於普羅大眾有以下幾個情形,我們會使用導航方式:

  1. 不知道自己想讓計算機做什麼或者計算機可以告訴我們什麼,透過隨意瀏覽方式挖掘我們可能可以讓計算機做什麼或者告訴我什麼。最常見的案例就是在沒有使用手冊的情況下,所以點選選單,看看某個軟體都有哪些功能,或者是去入口網站,微博上刷刷有什麼自己感興趣的內容。

  2. 我知道要計算機做什麼,但是我需要先在一堆選單,圖示裡找到我需要的按鈕,在告訴計算機去做之前必須例行的完成數次導航操作,例如我想解除安裝 某個遊戲,就需要從點選選單欄開始尋找到這個遊戲的程式組,點選解除安裝圖示。又例如我需要安裝 Firefox,那我得先設法找到 Firefox 的官網,從其中找到下載連結,選擇相適應的匹配版本,然後點選下載,等待完成後,去安裝檔案所在的資料夾,雙擊安裝,期間還需要確認無數條款,選擇安裝目 錄,刪減可選外掛,最後確認安裝。

命令操作則無需付出視覺定位的成本,如果你會盲打,基本上你可以直接使用快捷鍵或者敲擊命令列對計算機進行操作,這些操作通常只依賴於鍵盤。由於標 準鍵盤上有至少100個以上的按鍵,可以組合出無數的操作手法以應對各種複雜的情況,所以基本上鍵盤是最重要和最強大的計算機輸入裝置。很可惜普羅大眾很 多時候沒有意識到這一點,只是在碼字的時候才敲擊鍵盤,卻不善於真正使用鍵盤操控計算機的其它功能。我們會使用命令方式:

  1. 在不知道計算機能做什麼的時候,一樣用命令方式進行瀏覽,除非某些 GUI 軟體不提供快捷鍵功能。

  2. 在知道要計算做什麼的時候直接給出相應的命令操控電腦,比如我需要安裝 Firefox,基本上在 Ubuntu 裡,只需要鍵入:

1
sudo apt-get install firefox

那麼為什麼說命令優於導航?幾點原因:

  • 導航操作從生理上增加了使用電腦的額外負擔

仔細回顧一個最基本的問題:我們是如何使用一臺計算機的?透過輸入裝置傳達指令,計算機做出處理幷透過輸出裝置返回結果,這就是最基本的使用流程。 無論是個人電腦,智慧手機,平板都是這個流程。哪個系統更方便輸入,哪個系統就更方便使用,普羅大眾系統很清楚這一個基本準則,所以他們最小化了使用者輸入 指令的成本,開發出了滑鼠,觸控式螢幕,甚至語音識辨,聲控系統,光感系統。在公眾視野製造了一波又一波的流行熱。但是追求潮流並不解決效率的問題,如前文所 述,方便幷不意味著高效。尤其對於需要大量輸入的開發者系統而言更是如此。基本的滑鼠操作是基於圖形介面也就是導航的,我們透過滑鼠傳達指令,首先需要通 過眼睛定點陣圖形介面上操作物件的位置例如:一個選單,一個按鈕,其次移動滑鼠定位位置,完成點選,並且往往需要重複一系列這個過程才能完成一個實際上有意 義的操作,如果同時還需要大量的文字處理,那麼雙手還需要在滑鼠和鍵盤之間做大量費時的切換工作。的確,每一次定位,點選,切換的代價幷沒有那麼的大,但 是累積到一定程度,或者當你需要批處理一堆類似的任務,就相當的折磨人了。是不是時常感覺到右手肩關節有痠疼感?直接病因就是長期依賴右手握持滑鼠,右肩 無法呈自然下垂姿態。這個病俗稱滑鼠手,學名肩周琰。可見導航操作給身體帶來了多大的傷害。命令操作的輸入代價會大一些,但是讓雙手全程固定在了鍵盤上, 對於文字輸入者避免了切換滑鼠的時間損耗,和注意力的被迫轉移。命令本身,透過組合,也是對計算機系統最直接的指令下達,很多時候反而可以避免大量的導航 工作。如前所述的 Firefox 安裝。

  • 導航操作容易產生視覺上的迷失

前面我們提到過,在一個有幾十個圖示的桌面上,要定位到某個想要啟動的程式,或者在一個多級選單裡尋找某個軟體功能是費力費眼的。如果你瞭解等價的 命令,直接鍵入程式名然後啟動應用程式會快上很多倍。也就是說如果你知道你想幹什麼,使用鍵盤鍵入命令或者執行搜尋,效果會比肉眼巡視來得高效很多。搜尋 這個概念在開發者系統的很多地方都貫穿得相當徹底,find/which/whereis/grep/vim/vimperator 很多命令都是基於搜尋優於導航這一理念的。時刻養成搜尋的習慣能幫助我們更高效的使用開發者系統。


點選檢視原始大圖

  • 命令操作更容易被開發,組合使用,以及更容易地進行引數調整,指令碼化批次處理

開發基於導航的 GUI 成本巨大而且容易出錯,命令列則相反。這就讓開發者在最初可以只集中精力處理命令本身需要完成的核心功能,而不是花費大量的時間在 GUI 的外殼上。透過幾個小程式組合出更強悍的功能,透過調整不同的引數或者使用文字配置檔案的方式進行隨意的軟體定製,甚至批處理一堆需要重複執行的計算機操 作,這在命令列都是很自然的事情,GUI 想達成同樣的目標就相當費力了。

  • 便於遠端管理計算機

在桌面上強調使用命令,使得我們順便撿到了一份紅利,因為我們慣用命令,可以擺脫 GUI 的依賴,我們就能更好的登入到遠端的機器上進行各種操作,因為使用命令的傳輸代價遠遠小於圖形介面的遠端傳輸,時至今日,ssh 遠端登入仍然是 Linux 系統管理員遠端管理電腦的標準方式。所有你在本地桌面上操練掌握的命令,都可以在遠端伺服器上別無二致的使用,不至於在只配備終端沒有GUI的伺服器上會 感覺手足無措。

透過命令優於導航這一條公理,我們演化出了以下理念,請在使用開發者系統的時候時刻牢記:

  1. 命令列優於圖形介面
  2. 鍵盤優於滑鼠
  3. 搜尋優於導航

最後,使用開發者系統的前提是認同 Linux 哲學,理解學習,記憶的代價是用來換取高效使用開發者系統而產生的。你越多的付出腦力成本使用這個系統,就會越高效安逸的生存在這個系統中,也就越認同她 的哲學,使得你付出更多的腦力成本,繼而進入同時鍛鍊腦力和提高生產力的良性迴圈中。這種變化甚至可以影響到你做任何事情的態度:收起懶散的心理和渙散的 心智,使用腦力來提升效率,最終讓你成為一個務實,智慧和高效的人。

來自:http://ghosertblog.github.com/blog/2012/10/14/ubuntu-living-handbook/

相關文章