天天看點

完全用Linux工作(王垠)

我已經半年沒有使用Windows的方式工作了。Linux高效的完成了我所有的工作。

GNU/Linux不是每個人都想用的。如果你隻需要處理一般的事務,打遊戲,那麼你不需要了解下面這些了。

我不是一個狂熱的自由軟體份子,雖然我很喜歡自由軟體。這篇文章也不是用來推行自由軟體運動的,雖然我覺得自由軟體運動是非常好的。

這篇文章也不是用來比較Linux和Windows核心效率,檔案系統,網絡服務的。我現在是作為一個使用者而不是一個開發者來說話的,我們的讨論是基于操作,應用層面的。是為了告訴大學裡還不了解,或者不 了解UNIX的科學工作者和大學生,UNIX比Windows更适合用于科學研究工作,請大家了解UNIX的工作方式,不要用Windows的标準來要求Linux,而要用一個科學工作者的标準來要求自己,用UNIX的思想來武裝自己。

我顯然是反對在大學,特别是理工科專業推廣Windows的。我也反對在對”娃娃”們的計算機啟蒙教育中使用Windows。因為Windows不論從技術上,經濟上,思想風格上都是與我們培養高科技人才的目标格格不入的。Windows的流行屬于曆史遺留問題,爺爺一級的人當然已經不可救藥,但是我們不應該讓下一代繼續走上歧途。

UNIX不是計算機專家的專利

當我建議一些非計算機專業的人用Linux的時候,很多人說:”UNIX是計算機系的人用的,我們不能了解。” “UNIX是男孩用的,我們女孩不用。”

但是其實世界上的大多數科學家和工程師幾乎用的都是UNIX作為他們的電腦工具。就因為它簡單,可靠,穩定,強大,有趣。甚至很多時候UNIX就是唯一的選擇。

你說:”我們都會用UNIX的話,你們計算機專業的人還用來幹什麼?” 很容幸的告訴你,計算機專業的有一部分人就是專門為你們提供這樣強大而友善的計算機工具的。如果他們制造的工具隻有自己會用的話,那這個工具還有什麼用?

了解GNU/Linux不要用Windows的标準來要求Linux。

由于GNU/Linux這個詞太長,下面如果沒有特别指明,”Linux”就是指GNU/Linux”。

在這個年代,恐怕沒有人需要我來介紹Linux是什麼了吧?如果你覺得”Linux隻不過是跟DOS差不多的東西”,那請問問你旁邊的Linux使用者,Linux到底是什麼?

那為什麼我還要寫一篇這樣的文章?因為,我發現還有很多人不不了解Linux和UNIX,雖然他們也在用它,但是他們有時會問:”為什麼Linux不能像Windows那樣 ……?”,”怎麼Redhat Linux不能mount NTFS檔案系統!”,”Linux下用什麼整理硬碟?”,”什麼時候OpenOffice才能完全相容Word檔案啊?”,”現在還有什麼Windows能幹的事情Linux幹不了的? ”…… 他們有40G的硬碟,卻隻為Linux配置設定了2G空間,有時還抱怨”這個東西怎麼占這麼多硬碟!” 似乎Windows該占用大部分硬碟。他們把重要的資料裝在Windows的分區,似乎信不過Linux。他們總是到處尋找新奇的,好看的GUI程式,對指令行的東西一概不 屑一顧。他們對Drag&Drop,菜單配置,自動更新非常感興趣。他們如果找到一個很像Windows程式的Linux程式,一定會很高興的說:”哈哈!Linux也能……了!”如果Linux在某種測試中勝過Windows,他們會高興得跳起來。他們沒有辦法用Linux解決問題的時候,甚至用Wine來運作Windows程式。有時實在沒辦法,隻好重起到Windows,或者幹脆省得麻煩,在Windows下裝一個VMWare虛拟一個Linux玩。

你如果出現了上面的情況,說明你的思想受到了Windows的某種潛移默化的影響和誤導。你沒有能夠從本質上了解存在于Linux身上的UNIX思想。你支援Linux,你喜歡Linux,你能從中感覺到快樂,這非常好。你現在隻需要明白的是:Linux從來就不是一個玩具,它是天才UNIX的後代。UNIX是自半導體發明以來最偉大的發明,它從誕生那一天開始就比Windows的設計出色。

你要體會什麼叫做”設計”,一個糟糕的設計并不是到後來縫縫補補就可以變好的,而一個出色的設計,不但可以以不變應萬變,而且可以影響到後來者。一 個出色的設計配上一個出色的實作,那就是非常出色的發明。Linux就是這樣的一個出色的發明。Linux并不需要追趕Windows,也不需要打垮微軟。它的最終目标是改變整個計算機世界,還人們自由,給人們樂趣和友善。

Unix是簡單的,你不需要成為一個天才也能了解這種簡單。

UNIX的設計者Dennis Ritchie說:”Unix is simple. It just takes a genius to understand its simplicity.” 但是我不這麼認為,因為我不是一個天才,但是我卻勇敢的把Windows完全删除掉,遇到不明白的事情的時候努力用UNIX的方式去解決,而不是尋求Windows的幫助。現在我體會到了UNIX的思想和好處,我可以用比Windows高效幾倍的效率工作。因為我相信這樣的信念:”Windows能辦到的事Linux一定能辦到,而且辦的更好。”

這小節開頭的話應該改成:”Unix是簡單的,你不需要成為一個天才或是計算機專家。但是在這個沖斥着Windows錯誤觀念的世界,你需要信念和勇氣才能了解它的簡單。” 我下面就告訴你一些我了解到的東西。首先,你要知道的是微軟在國際科學領域是根本沒有地位的。

微軟的地位

微軟的名聲在歐洲和美國的大學裡,特别是在計算機系裡之壞,大家可能有所耳聞。我認識的MIT,Stanford的教授,貝爾實驗室的專家,甚至一個歐洲小國的高中計算機老師都絕口不提微軟的名字。在他們眼裡,微軟隻是一個沒有真技術,專靠在落後國家商業宣傳和壟斷 經營的小公司。這個”小”并不是說它人少,錢少,而是說它先進技術少。

我上次和王益合作寫了一個算法示範程式,那個算法是貝爾實驗室一位科學家Steven Fortune很天才的發明,為了程式能夠被身邊大多數人使用,我們選擇了VC+MFC作為平台。我在分析算法時還得到Fortune很熱情的鼓勵,寄給我一份資料,還多次回信耐心的給我講解了很多細節。但是程式完成之後,我把樣品發給Fortune,他回信說:”對不起。我機器上沒有MFC。” 話說的很客氣,但是我已經感覺到了他對Windows的不屑。然後我把MFC靜态編譯程序式再發給他,他就沒有再回信了。他顯然不是瞧不起我,而是确實有難處。

你能感覺到這位科學家對微軟和Windows是什麼态度了吧?不是反感,而是他心裡根本沒有Windows這個東西!微軟在高科技領域沒有發展,那麼它怎麼生存呢?到開發中國家去發展一下,他們的人民還對電腦一無所知,我說不定甚至可以打入大學的計算機系呢。 我送他們軟體,我捐錢蓋大樓,我出錢找圖靈獎獲得者來演講,讓他們覺得我們都是科學家!

好了,現在全國的大學包括清華,幾乎所有人機器必裝盜版Win2000,Office XP,學校的選課系統是非IE不能正确浏覽,論文用Word編輯,示範用ppt做,email的通知附件是doc檔案,你不用Word打不開,連863項目都用VC寫程式了。我很久以前就看到一份報紙說,”微軟為什麼不嚴厲打擊盜版?” 這篇文章說,微軟非但不打擊中國的盜版行為,而且有放任之趨勢。放長線吊大魚,”以後我要你們加倍的來還我!” 确實如此,它的目的快實作了。

Windows籠罩下的中國計算機教育

說句丢臉的話,比爾蓋茨很久以前是我的偶像…… //blush

在中國,比爾蓋茨被很多人奉為神聖,”少年電腦天才”,甚至有的人提到他的名字就做出”抱拳對天”的姿勢。很多人談到微軟的”新技術”,”高科技” 都是眉飛色舞。各種”VC程式設計聖經”,”深入了解Visual C++”之類的書,在開頭幾頁都會出現非常肉麻的字眼,”在那團團的混沌中,一個開天辟地的精靈,Windows 1.0,誕生了……”

微軟的軟體被這麼多人盜用,那麼人們是怎樣使用這些盜版程式的呢?先看看電腦教育訓練班,教的都是一些DOS指令,打字,Windows基本操作,Word文檔處理,PowerPoint,進階班可能有Excel,Access…… 參加各種微軟認證考試,MCSE,MSDE的人絡繹不絕。考試輔導班都貼出了”280元,考過為止”之類的字樣。考試參考資料更是昂貴,有些電腦書店整整兩書架都是”Microsoft Press”的東西。我有個同學參加認證考試,每門考試都要200多元。而且你一次考不過可以再考,又要交錢。他後來還津津樂道跟我說,看我,花了XXXX(一個四位數)元考過了微軟認證,得到一張比爾蓋茨親筆簽名的證書和價值6000元的Windows XP内部發行版。

“電腦要從娃娃抓起”,我們再來看看娃娃們學的是什麼。大部分家長給孩子買了電腦之後,他們首先就會裝一個盜版的Windows,然後買來盜版的遊戲開始玩。如果哪個孩子會用Delphi程式設計式,那可不得了。報社記者,電視台争相報導,說,某某學校的國中生某某,在别人都還在玩電腦遊戲這種”初級階段”的時候就已經用Delphi寫程式了。鏡頭還瞄準了他顯示器上面的像框中的比爾蓋茨頭像!

我剛進入大學計算機系時還不懂得什麼是作業系統,因為我以前隻用過”中華學習機”。看到新入學的同學們各個談論的都是 “Windows 95”,”VC”…… 我簡直覺得我落後了好幾十年一樣,整個一土人,根本跟他們答不上話。好不容易找到一個比較熟的同學問了一下:”你們天天談論的瘟95是什麼啊?”答: “win95就是一個作業系統,跟DOS是一類。””朵死是什麼?” “你連DOS都不知道是什麼?别在計算機系混了。” 學校上課當然不講VC程式設計之類的東西,但是上Pascal的老師有一次就說:”嗨,我們學校真是落後。現在别人都用C, C++,甚至VC了,我們還在講Pascal。不知道什麼時候才能有VC課啊。你們出去也是要用VC的,隻好自學了。” 于是,有些同學很多時候上課都捧着一本很重的”Windows程式設計大全”之類的書,根本沒有聽課。吃飯時就念念有詞的跟我說,”代碼的優化是無止境的”,”匈牙利命名法真是偉大的發明” …… 這就是中國很多大學計算機系的情況。

感覺到無知了?這不是偶然的,而是微軟長久以來埋下的伏筆。它要讓無知的大家都把它奉為神聖,它要讓支援UNIX,Xwindow的人一旦說UNIX好,Xwindow好的時候,都被一群人圍着說教:”這個Windows也能做到”,”你對Windows有偏見”,”微軟才是主流啊”,”你敢瞧不起win2k?”,”.NET就是世界潮流”,”微軟的畢竟是新技術”,”有錢就是有技術”…… 甚至在一番論戰比較後敗下來還是要說:”Windows性能差點,但是易用性強”,”Windows是老百姓用的,要求别那麼?quot;,”微軟那麼有錢,以後想超過UNIX還不容易嗎?”……

發達國家的計算機教育

我前段時間在USENET發文問有關Scheme語言的問題時,認識了一位丹麥人。他解決了我所有的問題,并且建議我閱讀一些很”深奧”的有關程式語言文法,文法的書,他告訴我很多網站可以學習LISP,Scheme,人工智能,算法。他叫我看Jonathan Rees的論文 “Syntactic Closures”。他還打包給我寄過來一份MIT的 “How to Design Programs”。他說他在自己的PC機上裝的是Linux,他用Emacs編輯,運作Scheme程式。他對Emacs的了解和愛好真是使人驚訝。他大學大學畢業時做的畢業設計是一個Scheme解釋器。這對于我來說是望塵末及了。

他是那麼的不厭其煩,我的每一個問題他都詳細的回答。我有時都覺得過于詳細了,怎麼這麼耐心啊?我覺得他似乎是我的高中老師。他是什麼樣的人呢?我好奇的打聽了他的情況。原來,他是丹麥一所普通高中的計算機老師。

他說他在高中裡講授程式設計和算法,計算機語言文法。他說用Scheme,他的學生不用再為記憶體洩漏等程式語言本身的問題而煩惱,而專注于問題和算法本身。有利于培養學生解決問題的能力,特别是用計算機解決數學問題的能力。

天哪!為什麼歐洲出現那麼多數學家,幾何學家?你看看别人重視的是什麼!我們的計算機教育如果繼續這樣下去,隻會沿着彎路越走越遠!

微軟和它的朋友們的如意算盤

下面來看看微軟的收入是怎麼來的。首先,Windows 98系列作業系統,一個就是100多美元,每次更新又是幾乎同樣的價錢。Windows NT還要貴幾倍,而且有使用者數目限制,5個使用者的,10個使用者的…… 以後如果要增加使用者數目還要按比例付錢。

花了如此多錢買來的作業系統就能用了嗎?它竟然連壓縮程式都沒有提供!你裝上Windows之後一般第一件事就是去下載下傳一個WinZip吧,”隻要29美元”。Windows會中病毒啊,馬上花70美元買一個Norton AntiVirus吧。還有黑客呢?再買一個Norton Internet Security好了,100美元。系統需要優化,磁盤需要整理,買一個Norton System Works是你最佳的解決方案,100美元。

可是你現在還是不能幹正事啊!你想要一個Word, PowerPoint?那就買一套Office XP吧,一起買便宜些,$459.90。

那些程式不會用啊!那些菜單怎麼設定,到底有什麼功能啊?看”幫助”也學不會。買本書看看吧,我推薦”Special Edition Using Microsoft Office XP”,不貴,$27.99。這本書裡面大部分是螢幕抓圖,還是買一本舊的比較劃算,$17.85。

你如果隻是當個秘書,上面的差不多還湊合了。可是你有更高的追求,你想成為Windows程式員。首先買一個Visual Studio.NET吧,要不然怎麼編譯程式。$494.95。

為了緊跟微軟動向,世界潮流,不能不注冊個MSDN什麼的吧?這個貴一點,不過物有所值啊,$2,799。

嗯,你現在已經是上層階級,白領人士了。你現在可以像這樣”自由”的,”安全”的生活了。

為什麼要反對使用Windows

很多人都說不應該完全否定Window,Windows也有它的長處。不應該罵微軟。

對。Windows容易操作,适合普通使用者。如果微軟把它自己定位在P&G,Philips那樣的地位,能夠給我們的百姓提供周到的,完善的,價廉物美的服務。那我肯定是很喜歡它的。但是從上面的種種情況說明,微軟是一個野心極大的國際壟斷組 織!它的産品沒有一個是不出問題的:Windows不穩定,容易中病毒,而微軟不為大家免費提供防毒軟體。我就是要讓你們花錢買我的朋友Symantec的防毒軟體,誰叫你們已經上了我的賊船?這叫什麼售後服務啊!

你買來微軟的程式,安裝的時候一般都有一個協定,說:”由于微軟的程式造成你的資料損壞或丢失,微軟概不負責。” 我想很多人肯定覺得這個不合理,不想按那個 “I accept”。但是你的軟體買都買來了,錢都花了,現在一按 “I decline”,安裝程式馬上就會退出。你隻好被迫點選了 “I accept”!這不是不平等條約嗎?

我已經目睹了好幾個朋友的文檔被Microsoft Word損壞,有的是編輯了十多天的30多頁的論文,有的是費了很大工夫做出來的個人履歷,那個朋友為此失去了到自己向往的P&G工作的機會。就在他要投履歷的前一個晚上,就在那一瞬間…… 不知道他痛哭的時候有沒有想起要投訴微軟,可是誰叫我們用的都是盜版呢,況且你還點選了 “I accept”。

微軟仗勢已經占有大部分PC市場,制定不符合國際标準的”微軟的标準”,以不合理的方式壓制其它公司的軟體,這個問題已經在美國司法部鬧了很久了。 他甚至在Windows系列作業系統中放置能夠通過網絡洩漏使用者資訊的代碼,以至于Windows剛進入澳洲時被澳洲政府禁止使用。

有些人說:”微軟畢竟開創了一個曆史,造就了今天的IT行業。” 但是,如果沒有微軟,我們今天早就用上非常穩定,非常可靠,非常友善,非常”傻瓜”的軟體了!微軟是阻擋資訊技術發展的罪魁禍首。

微軟的程式的工作方式(注意,我隻是說操作方式,病毒的事情另外算)确實适合于一般家庭,上上網,發發郵件,打打遊戲都不錯。可是微軟卻要把自己包 裝成什麼”高科技”企業,要在世界各地設定”研究院”,在大學計算機系贈送不适合用于科研的Windows産品,甚至出錢請圖靈獎得主來中國暢談”二十一世紀的計算”,還在大會上宣傳自己的 .NET技術。非要把别人認為自己是科學的,自己是上司世界高科技的。但是呢?它什麼高科技也沒有。歐洲,美國,哪一個關鍵部門在用微軟的東西?NASA? DOE? CERN?你仔細想一想,微軟的程式對人類到底有什麼重大作用?

什麼是Windows能幹而Linux幹不了的事情?---

”Windows能幹而Linux幹不了的事情,那就是不需要幹的事情。”

有個朋友看我半年沒有用Windows,有時就會問我:”你隻用Linux,有沒有發現有些Windows能處理的事情Linux幹不了?”---

我回答說:”Windows能幹而Linux幹不了的事情,那就是不需要幹的事情。”

Windows能做的有益的事情Linux都能做

Windows下的某些功能确實是我們需要的,那麼Linux的開發者們和使用者也需要這種功能,他們就會去實作這種功能,而且比Windows的方式好得多。由于大多數科學家,工程師用的都是Linux或者某種商業UNIX, 是以幾乎所有商業的科學工程程式,比如Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先有UNIX的版本(包括Linux),然後再考慮移植給Windows,甚至根本不移植給Windows,因為Windows的機器一般沒有足夠的能力運作這樣的程式。你不要以為隻有Windows才有PSpice, UNIX的HSpice要好得多,而且可以運作在大型主機上。當然它們不是免費的,但是它們值那個價錢。

但是Windows下有些東西在Linux下沒有很相似的,或者你找到很多類似的,但是它們每一個比起Windows的那個程式都要差很多,那麼原因有兩種可能性:

有一個完全類似的程式,但是由于它乍一看不漂亮,被你忽略了。而其它程式雖然看起來很漂亮,但是它們是一些初學程式設計的人寫的。現在由于Gtk, Qt的誕生,Linux下開發圖形界面程式極其簡單,很多國中生甚至國小生都可以随手編出一些漂亮不中用的程式。如果你整天尋找這樣的程式挑來挑去,永遠也找不到你滿意的。當然 也有一流的程式用Gtk和Qt,比如GVIM就可以用Gtk作為圖形界面,我還知道Synopsys一些程式用了Qt。

我曾經也犯過這樣的錯誤,從外表區分一切。結果優秀的FVWM, lftp, Mutt, wget都被我忽略過。當我找回它們的時候,我是那麼的羞愧不已,它們現在都是我的朋友 我第一次看到FVWM覺得它隻不過是一個有很厚很難看邊框的東西。可是現在,我的同學看到FVWM都說:”哇!真漂亮。”

有另一種完全不同的方式可以達到相同的目的,甚至更好。

很多人很關心Open Office, Star Office, AbiWord, ... 他們多麼盼望有一天某一個Linux程式能夠完全相容的打開一個複雜的doc文檔。但是你永遠也不可能有那一天。為什麼呢?因為微軟為了占有市場,必定不會讓其它系統的程式能夠完全相容它的文檔格式。它一定會不斷變化doc文檔的内部結構,隐藏一些秘密,讓其它公司的程式打開doc文檔時總是有某種問題,進而你必需購買Microsoft Office和Windows。

你應該想一下,那麼多的高智商的大學教授,科學家,學生,他們用的都是Linux或者其它類型的UNIX,他們沒有Word可用,怎麼處理文檔呢?這麼多年沒有一個像Open Office的程式出現,難道大家沒有辦法寫文檔嗎?

顯然不是這樣。你看看那些高水準的學術雜志,論文,那些大學教授的網頁,那些漂亮的幻燈片,它們是什麼做的?原來UNIX使用者早就有非常友善的troff, LaTeX, SGML等東西可以處理文檔,而且它們比起Word都要高明的多。Word顯然被這些大拿忽略了,以至于很久以來沒有人想在Linux下開發一個類似Word的程式,除非某些公司想搶微軟的飯碗。

很多人留着Windows在硬碟上的原因無非是為了用Word和PowerPoint。我見過一個教授,他的Windows筆記本電腦上除了PowerPoint什麼都沒有。有一天示範的時候,他指着堆亂字元說:”對不起,這是一個公式……怎麼每次都是這樣……” 其實有比PowerPoint好幾百倍的東西可以制造幻燈片,你可以用最簡單的方法制造世界一流效果的論文和幻燈片。你待會兒可以看看我的TeX網頁,你就會知道為什麼我可以完全離開Windows。

Windows能做的那些沒用的事情Linux永遠做不好

電腦遊戲

有些人說Linux下不能玩Windows下所能得到的所有遊戲。的确,Linux下雖然也有少量的遊戲,比如Quake。但是它沒有Counter Strike, 沒有Star Craft, ……

并不是說電腦遊戲不該玩,但是應該适可而止。電腦是用來處理事務,幫助你學習,解決問題的工具,而不是一個玩具!整天沉迷于電腦遊戲中,而不出去感覺外面的世界,你會變得越來越冷酷,越來越缺乏人情味。你與真實的世界越來越遠。

你可以在CS裡殺人,你可以在Tomb Raider裡探險,你甚至可以在Tony Hawk’s Pro Skaters裡滑闆…… 但是It’s not real!你雖然有很高的”反恐技巧”,但是遇到歹徒的時候,你是那麼的怯懦;你雖然控制Laura伸手靈活,但是你打籃球的時候怎麼總是被人斷球?你雖然可以輕易的在THPS裡作出一個 “360 kickflip to hangten grind to fakie”,但是你踩在自己的滑闆上的時候還不會ollie!

說回來,如果你偶爾玩一下電腦遊戲未嘗不可。但是世界上有遠比Windows + PC更好的遊戲方式。Sony的PlayStation2, SEGA的DreamCast, Nintendo的N64,Namco的街機……每一個都比Windows遊戲精彩,每一個都有如此高的3D性能,以至于Pentium4, Itanium + GForce4都無法與它們比美!

Linux的使用者們都是關心解決世界的關鍵問題的份子,他們哪裡有時間用自己的機器來玩遊戲啊?他們每天用Linux高效的做完自己的工作就到陽光下享受自然去了。 要玩遊戲也是玩一些類似推箱子,貪吃蛇之類的智力小遊戲。是以,你知道為什麼Linux幾乎沒有遊戲了吧?

“整理硬碟,優化系統”

這是一個非常有意思的話題,僅次于有關”病毒”的話題。相信很多Windows使用者都有整理硬碟的經曆。在很多Windows使用者眼裡,”硬碟用久了,會出現碎片,速度會減慢,需要一個程式來整理,整理硬碟的時候不要做其它工作”,這好像是天經地義的事情。

我也曾經津津有味的看着Norton Defrag一點一點的把我的硬碟排序,調整,用圖形的方式顯示出來,然後報告“100% 沒有碎片。你的硬碟現在已經達到最佳狀态。” 我現在才發覺我那時是多麼的幼稚。

Linux和UNIX使用者似乎從來沒有”整理硬碟”這種說法呢?你覺得很奇怪嗎?如果你覺得很奇怪,那說明你的思想在某種程度上被微軟的垃圾程式禁锢了。你需要明白,UNIX的大型主機很多必須是一天24小時,一年365又1/4天不停運轉的,要是每個星期都要整理一次硬碟,在整理的時候幾乎不能幹任何事情,那是絕對行不通 的!

Linux機器根本不用整理硬碟,這就是為什麼沒有看到過Linux使用者整理硬碟。Linux的檔案系統是比Windows的FAT, FAT32, NTFS高明得多的檔案系統,它們不但可以對檔案設定權限,實施完全的保護,而且可以”越用越整齊”,”越用碎片越少”!你應該把檔案大部分放在Linux的分區,而不是Windows分區,因為它比Windows分區可靠得多。

還有更滑稽的事情就是有很多”Norton System Doctor”,”Windows優化大師”,”超級兔仔系統資料庫魔法” 之類的程式存在,而且價格昂貴。似乎一個作業系統本來應該有很多問題,需要别的廠商做程式來”優化”它,而且為了得到優化,你需要付錢!這些問題Linux根本就沒有,是以不需要什麼優化。Linux核心本身就是高度優化的。

IDE

有些人在抱怨為什麼Linux沒有一個良好的IDE開發環境。Linux現在已經有一些IDE了,但是總是有很多問題。你是不是正在尋找,正在期望Linux某一天可以有一個VC那樣的開發環境?你有沒有發現你正在進入微軟給你設下的怪圈?你為什麼一定要用IDE?你說:”IDE開發迅速,調試友善,适合大型程式……” 那說明微軟的程式在你腦子裡已經比較根深蒂固,你需要好好清醒一下了,看看我來告訴你。

高明的UNIX程式員不用IDE,IDE從來就是給初級Windows程式員用的。

你看看大型的UNIX程式,包括Linux核心,各種網絡服務程式,Xwindow程式在内,哪一個是IDE搞出來的?我們實驗室的EDA程式也沒有一個是IDE弄的,我還知道Candence, Synopsys,Mentor的高性能的圖形界面EDA程式也都不是IDE寫的。你信不信,微軟的人在寫Windows本身的時候也根本不用IDE。微軟内部程式員最喜歡的編輯器其實是VIM,用VIM的微軟程式員上次向烏幹達的可憐兒童捐助了1000多美元,這是值得稱贊的。

有一次某雜志采訪一些出名的Linux核心程式員,包括Linus在内,沒有一個人用IDE,有的人用VIM,有的用Emacs,隻有Linus說”GNU Emacs is evil”,但是其實他用的是一種跟Emacs有同樣鍵綁定功能的MicroEmacs。大家都是用編輯器編輯了程式檔案,然後用make這樣的自動工具調用gcc編譯器完成編譯工作的。甚至進階的Windows程式員也不用IDE,他們可以從指令行調用cl,nmake來編譯自己的程式。雖然這樣的Windows程式員很少,但是他們卻是最了解Windows,最高明的Windows程式員。

為什麼UNIX程式員不用IDE?明白了這個道理你就能體會到UNIX的設計思想了。首先,一個IDE內建了編輯器,編譯器,彙編器,調試器,跟蹤器…… 這個編輯器功能肯定比不上VIM或Emacs,編譯器比不上GCC,彙編器比不上as,調試器比不上gdb,ddd, 跟蹤器比不上strace, ltrace, truss。你得到的是一套整合的低能的程式。如果你對調試器的功能不滿意,你隻好換用另外一套IDE,但是這套IDE的熱鍵,菜單,編輯器功能,按鈕…… 跟原來那個有很大不同。你不得不花很多時間來熟悉新的環境,而不能保持原來的某些東西。

而在UNIX下就不一樣了。你可以用你最喜歡的VIM編輯程式,你在VIM裡可以調用GNU make,make可以調用gcc, ld, ... make的出錯資訊可以被VIM捕獲,VIM能幫你在源程式裡定位。你如果喜歡icc, 你可以讓make用icc而不是gcc。你如果覺得gdb跟蹤變量時比較麻煩,你可以用ddd來顯示各種資料結構之間的關系。你還可以在Emacs裡調用gdb,那樣就可以同步顯示源代碼了。而且VIM和Emacs還可以編輯很多其它東西,比如信件,LaTeX文檔,HTML,配置檔案…… 你不用另外找一個什麼編輯器來幹這些雜活了。很多程式比如Mutt, tin都可以在内部使用VIM,這樣就更友善了。實際上make在其它方面還能幫你很多忙,我的每一個比較大型的LaTeX文檔都是用make維護的。

Linux能幹的高精尖的事情Windows都幹不了

當然有很多事情是Linux/UNIX的專利了。因為Windows隻能裝在PC機上,好像以前也有Alpha可以使用Windows NT,但是就是沒見到有人用。PC機的能力是很低的,像我們程式設計式處理NP-Hard問題的人,用Windows的機器顯然速度不夠,而且有時一個問題算上幾天甚至幾個星期,Windows機器是以”當機”着稱的,我們怎麼能放心?是以幾乎所有科學計算程式,EDA程式,高性能圖像處理程式都不是Windows的。他們有時也會移植一些給Windows,但是常常降低那些程式的能力。你比較過Windows版本的Mathematica和Linux的有什麼差別嗎?

IBM制造的最大的并行計算機有8000多個處理器,Windows不可能有能力管理這麼多處理器,它用的是什麼作業系統?答案是Linux。

《泰坦尼克号》電影裡的三維動畫,那麼細膩逼真,Windows機器能做出來嗎?不行。那也是Linux機器做的。

民航總局用來訓練地情人員的虛拟現實訓練裝置,Windows當然無能為力。那都是商業的IRIX機器。

UNIX是最早支援TCP/IP網絡協定的系統。它上面有很多可以互相協作的網絡服務程式,它們經過多年的使用和修訂,已經達到比較完善的程度。而就在1997年,微軟的比爾蓋茨還在揚 言:”Internet是沒有前途的。” 微軟的這個”遠見卓識”大家應該都已見識,它後來加上的網絡服務程式IIS漏洞之多,讓公安部都頻頻發出警報,大家也是見識了的。

其實你知道了,Windows沒有一樣有用的事情能比UNIX幹的更好。

Linux幹不了的有用的事情Windows照樣幹不了

當然Linux不是萬能的。它也有不能幹的事情,電腦也有幹不了的事情。但是Linux幹不了的事情,Windows肯定也幹不了。這些事情就是我們需要探索,需要努力的事情了。在你探索的過程中,Linux必定是你的好夥伴。

不要把Linux和Xwindow掩蓋起來!

不要把我們的使用者當成傻瓜。

什麼?你早就知道Windows是垃圾?噢!你怎麼不早說呢!害我廢話這麼多。嘿嘿。

“好了。你知道Windows是垃圾,你現在用什麼?”

“Linux + Xwindow”

“那我問你,Xwindow是什麼樣的?”

“不就是跟Windows差不多嗎?隻不過 ‘Start’ 按鈕比較方,而且上面不是一個Windows标志,而是一個腳丫子。點選一下居然還有很漂亮的中文菜單。我喜歡!”

“你知道什麼是’根視窗’嗎?”

“不知道。從來沒聽說過呢?”

“根視窗就是遮蓋整個螢幕的那個最大的視窗。”

“哪兒有什麼視窗啊!我沒有看到呢?”

你發現了問題嗎?這些Linux使用者說是在用Linux和Xwindow,但是他們對Linux和Xwindow幾乎完全不了解。很多人用了那麼久Xwindow都不知道根視窗是什麼東西,不知道其實按鈕也是視窗,不知道視窗管理器和其它程式有什麼關系,大家都以為視窗上面的按鈕是程式自己放上去的,不知道視窗? quot;class name”,”resource name”是什麼東西。他們也不知道 .Xdefaults是用來幹什麼的。特别是他們很多人都不知道Xwindow的字型是如何命名的,什麼是fontset,有了一個新的字型也不知道怎麼安裝。

他們被遮在Linux之上的一層一層的包裝迷惑了,他們等待有圖形界面的工具來幫助完成一切事情,他們認為Linux跟Windows一樣,隻是麻煩一點。他們知道Linux核心很好,但是他們感覺不到Linux和Xwindow在操作層面的天生的先進性,随後不久就把Linux完全删除掉了。你發現沒有,要使用者了解UNIX和Xwindow的操作層面的先進性,才是留住使用者的最好辦法。如果使用者體會不到操作時的友善和高效,核心再好他們也不會理會。

但是用摹仿Windows的作法來吸引使用者,永遠會失敗的。因為Linux如果摹仿Windows那一套低效率的方式,那麼Linux的這套”低效率方式”永遠比不上Windows的那一套”低效率方式”。那麼使用者就會說:”這個Linux,沒有一樣比的上Windows。”

Linux天生就是繼承了UNIX的高效的工作方式,為什麼我們要把它掩蓋起來?我們為什麼隻告訴使用者KDE的菜單怎麼用?我們為什麼不能像早期的Xwindow書籍那樣第一節就告訴使用者什麼是X server, 什麼是X client,什麼是Window Manager, 什麼是根視窗。第二章就告訴使用者視窗有哪些屬性,什麼是classname, resource name, hint,怎樣使用 .Xdefaults, xrdb ……

在這裡我又不得不說一下那些Linux的發行公司和寫書的人,他們把Linux和Xwindow包裝起來,卻沒有從基本上告訴使用者Xwindow的工作原理。很多書籍講授的層次就是在Gnome, KDE的菜單操作的層次,靠大量抓圖來占篇幅,”繁榮”Linux書籍市場。

現在很多人已經把能夠利用别人的庫寫出一個好看的程式作為自己程式設計水準的象征。在這?quot;圖形化”,”可視化” 的年代,你如果還在用troff, LaTeX寫文檔,你還在用VIM自己編輯HTML,用Mutt處理郵件,你還在用文本模式的gdb調試程式,你還在用Xlib寫程式, 你還在用tin上USENET,你還在自己寫Makefile,寫機器代碼,你還在玩Clossal Cave這樣的字元模式冒險遊戲,那你就是老古董。

其實這種思想是錯誤的。雖然你是一個堅決的Linux支援者,但是你的思想是Windows的思想。你認為圖形界面,菜單,按鈕就可以解決一切問題,就可以給你高效友善。你還是沒能擺脫微軟給你的潛移默化的東西。你其實離不開Windows那樣的環境,你遲早會删掉自己的Linux。

GUI vs. CLI

做一個堅定不移的”兩面派”

大家看到這個标題是不是熱血沸騰?兩派大蝦都可以圍攻我了:

GUI派使用者:”哇!我一看你這小子就是CLI的。要不然自己寫什麼Makefile?用什麼Mutt?”

CLI派使用者:”切~ 你還用X!高手都不用X。你是GUI那邊的。”

可憐的我:”555~~ 你們都不要我~~ GUI和CLI就那麼水火不容嗎?”

計算機界這樣的門派之分還很多。很有特點的就是CLI和GUI了。CLI (Command LIne)的狂熱份子聲稱永遠不用X。我上次在實驗室看到一個同學用一個SecureCRT登入到Sun機器,然後用一個vanilla vi編輯程式,我建議他啟動一個GVIM過來顯示在Exceed上可以有文法加亮。但是他堅決反對,說:”高手不用X。你想想,要是我在一個很慢的網絡連接配接怎麼用X?而且好多伺服器沒有裝X程式。”

但是我們實驗室的網速可夠快,Windows機器都有Exceed啊,而且Sun機器有全套X客戶程式包括GVIM。他說他是CLI的堅決擁護者,但是他卻在用Windows,他後來打開了好幾個SecureCRT,每次從文本框輸入位址,使用者名和密碼,從下拉菜單選擇”SSH2”,然後點選”Connnect”。他還不斷的誇SecureCRT是”網絡管理者投票選出的最受歡迎的登入方式”。老天,SecureCRT本身就是個GUI啊,他其實沒有明白Xwindow的好處。

你說我是GUI的?我雖然很少在console下工作。但是我對bash, VIM很熟悉,我可以讓bash按照我的鍵綁定方式來工作。我可以在rxvt裡使用Mutt來收發email。我的每個桌面上都常常堆放着一打不同大小的rxvt。我用VIM編輯LaTeX。我自己寫Makefile來維護LaTeX文檔。我有時用mpg321來放mp3。我上BBS用的我自己寫的expect腳本。 好了,CLI派的朋友可以收我做盟友了

你說我是CLI的老古董?我的FVWM被我配置為可以”手寫操作”,我隻要畫一個”r”就可以啟動rxvt,我隻要畫一個 “U” 就可以啟動GVIM,…… 我用GVIM文法加亮模式編輯程式,我用Mozilla浏覽網頁,…… GUI派的現在好像認我做朋友了

好了。CLI派的朋友,雖然我很喜歡指令行,但是我有時在螢幕上左右畫一下就可以執行:

Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn “-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*”

你是不是現在又想把我逐出師門?

GUI派的朋友,雖然我很喜歡視窗。但是我可以在FvwmConsole裡輸入:

All (rxvt) MoveToDesk

把我所有的rxvt移動到我現在工作的桌面。”這家夥,怎麼這麼快就叛變了!”

其實何必分什麼GUI和CLI,UNIX和Xwindow都是工業标準,它們從設計那天開始就有非常靈活的用法,各個程式,不管是GUI還是指令行的都可以互相協作。UNIX和X是一家,何必搞的那麼偏激,非此即彼?你從我上面的行為可以看出GUI和CLI的模糊界線嗎?我就是堅定不移的”兩面派”。

UNIX是簡單的

”我相信簡單就是最好,如果太複雜,我是不能了解的。” -Seymour Cray

很多第一次用Linux的人會驚奇的發現,Linux的程式居然不?quot;安裝”就可以運作,程式拷貝到随便那個目錄都可以用,而不是一定要占用你第一個分區的空間。程式的設定隻是一些簡簡單單的文本文 件。你根本不需要什麼”系統資料庫修改器” 就可以改變系統的設定。這就叫做簡單,但是簡單就是美。雖然這隻是UNIX簡單性的一個膚淺的認識,你已經體會到了某些東西。

但是簡單并不意味着功能弱,并不意味着落後。相反,簡單意味着強大,意味着生命力。

我不會再繼續闡述我了解到的”UNIX的簡單”,因為這個需要自己去體會。

UNIX是永恒的

有人說:”Plan9會取代UNIX,Mach會取代Linux核心。”

但是你如果是一個深入體會了UNIX的人,你就會知道:UNIX的思想是永恒的,不管時過境遷,Plan9是否代替UNIX,UNIX的靈魂都會在Plan9身上現形!

我為同一個裝置寫過Linux核心和Windows VxD驅動程式。寫Linux驅動程式時,我對UNIX設計的完美的一緻性,遠見性所折服。UNIX用同樣界面的read(), write()系統調用就可以對不同的對象:普通檔案,裝置檔案,管道,管道檔案,socket,……進行統一的讀寫操作。我跟本不需要寫一個測試用的應 用程式就可以對我的裝置驅動進行測試,因為cat, cp, dd, 它們也使用了同樣的read(), write(),裝置和普通檔案在應用程式眼裡沒有差別。在那個還沒有Smalltalk, 沒有C++ 的年代,UNIX的設計者已經使用了所謂的 “面向對象方法”。對,C語言也可以實作面向對象。

UNIX的系統調用幾十年都沒有很大變化,這非但不是頑固,不進步的象征,反而是UNIX的遠見卓識的展現!這就跟TeX程式幾十年都不變的情況差不多。這些才是真正的永恒的master piece! 你應該改變所有軟體都必需從0.1, 1.0, 1.1, 1.2, 2.0,..., 3.0, 3.1, 95, 98, 2000, XP, ... 不斷更新的想法。

Windows就不同了,它在最開頭隻是一個DOS之上的圖形包裝而已。後來為了相容以前的糟糕設計,不得不加上很多累贅。我寫VxD驅動程式的時候就深有體會,Windows 95程式對裝置的操作隻有用DeviceIoControl,我不得不寫了兩個應用程式來對裝置驅動進行測試。Windows核心的不一緻性和隐密性使我非常惱火。不過Windows WDM驅動程式現在也有了ReadFile, WriteFile,…… 那說明什麼?那說明Windows在向UNIX學習,或者有可能是某個UNIX設計人員在微軟打了幾天臨工,順手加了幾個UNIX的東西進去。這樣做是沒有用的,Windows從一開始就是非常糟糕的設計,它的曆史的包袱太沉重了,縫縫補補有什麼用?它隻能永遠的被UNIX甩在身後!

UNIX是強大的

讓聰明人幹任何他們想幹的事情。

UNIX的一個特點就是非常高的靈活性,Xwindow也具有這種靈活性。這種靈活性展現在哪裡呢?

UNIX的程式一般都有很多參數,不管你現在用的着用不着,總有人需要某些參數。它們的行為很多都可以用配置檔案來改變。比如GNU bash, 通常預設的指令行輸入方式是Emacs方式,但是隻要我編輯一個 .inputrc檔案,就可以把它變成vi的輸入方式,而且我還可以自己綁定鍵序列到某些操作。我可以用shopt來設定它的很多特點,比如是否進行通配符擴充,是否可以把一個變量當作一個目錄來cd,是否可以自動糾正某些明顯的目錄名打字錯誤 ……

UNIX程式設計的思想是提供給使用者”機制”,而不限制使用者制定”政策”。這是一個重要的尊重使用者的作法。

我們再來看看Xwindow。Xwindow是一個出色的設計,它把顯示伺服器和客戶程式分開。一個顯示上既可以顯示本機上的程式,也可以顯示别的機器上的X程式,而它們都遵守你的視窗管理器的統一指揮,它們之間可以友善的傳送剪貼版資料,各種事件 …… 比如有時我的XFree86上會出現四個不同機器上的XTerm,兩個不同機器上的GVIM,…… 它們統一受本機上的FVWM指揮。

Xwindow程式都具有很多很多指令行參數和resource參數。你可以随意的在指令行或者 .Xdefaults檔案設定所有的顔色,字型,尺寸…… 而且如果你用xrdb把 .Xdefaults導入到根視窗,那麼其它機器上沒有經過配置的同樣的程式,顯示到你的機器上的時候也會遵守同樣的外觀規定。

Xwindow的視窗具有Property, 也就是一些可以自己定義的共享資料(原子)。正是因為這些Property的存在,使得Xwindow具有無比強大的生命力。X的視窗管理器和其它客戶程式之間并沒有統一的協定,但是後來出現了ICCCM(客戶程式間通信規範),這個規範就是通過property定義的。現在又有人定義了一套”擴充的視窗協定(EWM Hints)”,使得Xwindow可以具有某些Windows的特征,比如一個工具條程式可以告訴視窗管理器:”這個螢幕下面被我占據了24個像素的空間,你最大化程式的時候不要越過這個界線。”

一個強大的視窗管理程式比如FVWM,它收到這樣的提示時,可以答應工具條程式的這個要求,也可以不答應。一切選擇的權力在于誰?當然是使用者了!

你想想,是不是有些Windows程式常常彈出一個視窗要你選擇 “Yes or No”?你不點選它它就不下去。你覺不覺得你的程式在侵犯你的尊嚴?你是一個人,一個智慧的生物,怎能受到一個程式如此的待遇?

還有就是很多Windows程式把人當成傻瓜,而它是”智能程式”。比如,有一個程式就是喜歡把你的每句話第一個字母都變成大寫,我不說它是誰了,你遇到的時候就知道了。

如果連”一句話開頭一個字母要大寫”這麼明顯的問題都需要程式幫你糾正的話,人腦還用來幹什麼?況且如果你故意想要不大寫的話,那就更麻煩了,我楞是沒有從它那一大堆菜單裡找到怎麼關閉這個愚蠢的選項。

隻有符号才能完全操縱計算機

我們來說說很多初學Linux的使用者。雖然他們在用Linux,但是他們打心眼兒裡是覺得Windows的工作方式好,他們希望Linux有一天能”像Windows那樣”。你說:”我的滑鼠一點,我菜單一拉,…… 就可以完成我的操作。” 但是我要告訴你:”Linux從來沒有摹仿Windows,将來也不會。Linux從誕生之日起,它的工作方式就比Windows的先進。

Linux屬于能勇敢面對符号的人。隻有符号才能完全操縱計算機。”

看看優秀的UNIX程式,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 沒有一個不是用配置檔案來設定選項的。為什麼這些程式沒有友善的菜單可以用來配置?難道它們的設計者就那麼低能,連個圖形配置界面也寫不出來?

當然不是。因為圖形界面配置方式的能力是極其有限的,而配置檔案和程式語言的表達能力卻是無限的。用圖形界面配置這些程式的話,如果你想達到配置文 件的效果,你需要成百上千的菜單,checkbox, radio button, ... 到時候你根本沒辦法找到你需要修改的地方了!而各個程式的配置檔案的文法都有很多相似之處,一般就是一些指令,設定一些變量,參數,…… 一旦用會了一個,其它的也就容易了解了。如果你用慣了awk, sed, Perl,你會覺得那才是真正的自動化啊。

滑鼠雖然是很好的工具,但是它的表達能力是有限的。你不可能光用滑鼠就讓電腦完全明白你的意思,它畢竟隻有3個按鈕。看看我的MetaPost頁你就能體會到滑鼠的這一弱點。是以我們雖然很喜歡滑鼠,但是卻不能完全依賴它。

各個小程式的完美配合

這就是UNIX最重要的特點了,它就是UNIX設計的思想。讓每個程式隻具有一項專門的能力,然後讓它們合作。Xwindow也繼承了這種好傳統。 這恐怕就是Windows和其它作業系統望塵末及的地方了。UNIX程式設計之統一,配合之完美,真使我難以置信!shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它們是那麼的具有一緻性!你一旦學會了sed的正規表達式,其它程式基本上都能用了。你一旦學會了vi和VIM, 你會發現它的操作是那麼的有規律性,似乎vi的設計者在幾十年前就已經設計好了VIM在今天的完美而統一的操作方式!而且vi的操作還展現在Mutt, tin等很多程式中。你甚至可以把bash設定為vi的輸入方式來輸入指令行,我就是這麼做的。一個程式可以調用另外一個程式來得到資料,可以把資料交給它處理後傳回來,可以在自己的視窗裡”嵌入”另外一個 程式。

在Windows和其它非UNIX作業系統中,這種合作是非常困難的。我曾經在Windows下使用Perl來進行一些自動工作。但是Windows的檔案操作,管道是如此的不穩定,程式之間基本不能合作。你别想在Visual Studio視窗裡面嵌入UltraEdit編輯器,你别想用一個expect腳本來控制telnet到水木清華BBS。

Windows的程式都是大而全,大而雜,所有的電子郵件程式都需要自己提供編輯器,自己發送和收取郵件,自己顯示郵件的附件。每一個BBS程式都提供自己的Virtual Terminal, 自己的通訊代碼。每一個IDE都自己提供編輯器,編譯器,彙編器,調試器。人們為了使用一種新的程式,需要适應所有這些它提供的界面,而不能使用自己喜歡的編輯器的鍵綁定,菜單組 織…… 不能DIY!

你要知道,最進階的電腦是定做的,自己想要什麼什麼CPU,什麼主機闆,多少記憶體,什麼硬碟,鍵盤,滑鼠,顯示器都是自己選擇的。最進階的滑闆,自己 想要什麼牌子的版面,什麼牌子的沙,什麼橋,什麼輪子,什麼軸承,也都是自己選的。最進階的古球拍,木闆,膠皮,海綿,膠水都是可以自己選擇…… 而用Windows程式,你得到的是大雜燴,就像你去買”品牌機”,隻有那麼幾種配置,而且附帶很多你不需要的軟體和服務;就像你去買組裝好的滑闆,你想要大一點的輪子和窄 一點的闆子,但是你沒有這種選擇餘地!Windows程式就相當于最廉價,最次的滑闆。但是它卻會花你更多的錢,因為一旦一個部件壞了,或者你不喜歡了,你不能另外找一個好的換掉它,你必需重新買全套配件!

而UNIX和Xwindow就是高檔的”組裝貨”。比如我用Mutt的時候,我可以用VIM也可以用pico來編輯郵件,我可以用ImageMagick也可以用xv來顯示附件裡的圖檔,我可以用lynx把HTML附件轉成文本嵌入視窗中,我也可以把HTML附件交給Mozilla圖形顯示。我可以讓GnuPG幫我把郵件進行數字簽名和加密,我也可以用其它PGP程式。

我想讓Postfix而不是sendmail幫我發出郵件,我想讓fetchmail幫我收郵件,轉發給postfix,然後被我自己寫的Perl過濾器處理…… 這一切我都可以辦到!我可以選擇我最喜歡的專門的程式來完成專門的工作,然後把它們結合在一起,我也可以分别得到它們的好處。

學UNIX絕對不是浪費時間

有人告訴我:”你看我用Windows什麼都不用學。而用Linux,光是安裝就花了我一個星期!”

首先,我要告訴你的是,你裝Linux花了一個星期,不是因為Linux不好裝,而是因為你已經習慣了Windows,對Linux最初難以了解而已。你想一想你最初安裝Windows的時候呢?你花了多少時間搞明白什麼是硬碟分區?什麼是盤符?什麼是目錄?你認為Windows就是那麼容易可以學會的嗎?雖然你覺得沒花時間學,但是你以前在用别人的機器的時候已經耳濡目染,自然就了解了。而且由于你想要Linux和Windows并存于硬碟上,又增加了安裝難度。而且你肯定沒有得到有經驗的Linux使用者的幫助,否則他們會在20分種之内幫你搞定。一個星期也太誇張了.

如果一開始用的就是Linux就沒有這個問題。你想想如果你沒有用過windows,你肯定會很習慣 /etc, /usr, /usr/local ,... 而不是C:, D:, E:, ... 是不是?如果你隻用過Linux,你第一次用windows時恐怕也會問:”/bin目錄哪裡去了啊?”

最重要的是,你用慣了的UNIX工具,它們可以伴随你一生,而不會那麼容易變化或消失。你可以永遠不用再換另外的工具了。除非那個工具比你這個好的太多,而且可以完全模拟你現在的工具。

我們實驗室一個60多歲的老師,用vi, cc, make, ...都幾十年了,他以前的經驗絕對沒有白費,而且教會了我們一批又一批的學生。vi伴随着UNIX的最初發行而誕生,直到今天還是世界上頭兩号編輯器之一!有些人的FVWM配置檔案已經用了10多年,現在完全不經修改還可以用。

看看Windows的工具,你從Borland C++ 換到VC, 就必需适應新的環境:菜單不同了,顔色不同了,按鈕不同了,幫助資訊不同了,熱鍵不同了,編譯器參數,調試器功能也不同了,…… 那個時候恐怕花要花你很多時間去适應。當你剛剛适應了VC, 你又要換成VJ, PowerBuilder, C++Builder, ...

很多windows程式員都是這樣,開頭在dos下用Turbo C, 然後是Borland C, VC, C++ Builder, ......不斷追趕微軟的潮流。而且微軟的SDK, MFC, .NET …… 什麼都在不斷變化,不斷出問題,又不斷的在修改…… Windows程式員不得不買又厚又重的Microsoft Press的書籍,看了才一個月,又過時了。今天你才學會了寫VxD,明天你就必須用WDM了。你不得不注冊MSDN才能趕上Microsoft的步伐。很多人說:”計算機是貴族的專業。” 這就是微軟一手造成的。

這些東西才是沒完沒了的浪費大家的時間和金錢的。這是是浪費生命!我們為什麼不使用從誕生就那麼一緻和完美的UNIX?你需要了解先進工具的設計理念。UNIX的工具就像我們用的汽車,它的離合器,油門,刹車,方向盤,後視鏡,永遠都在同樣的位置。用慣了的話,你對你的汽車的每一個部件都會了如指掌,甚至你自己 都可以修車了。這難道不好嗎?

有人說:”你說我們需要了解UNIX,難道你要開車還必須了解汽車的結構嗎?” 你去問問開車的司機,哪一個不了解汽車的結構的,那他的駕照就是混來的。你難道想要傻瓜型的”微軟牌汽車”嗎?我們來看看:

你買的微軟牌汽車最開頭隻有一個座位,每加一個座位你得向汽車公司付錢。車上的防撞氣囊不時會冒出來,說是為了你的安全。每開100英裡要大修一 次,每過一年要換一次引擎。附帶的,你還必須換用由微軟汽車公司指定的石油公司提供的新型号的機油。你的車出了問題,但是法律規定,你不準私自拆開你的汽 車來修理,你必需到微軟汽車公司指定的維修點去,需要付相當多的錢才能修好一個小毛病。

最可氣的是,你每換一個型号的微軟牌汽車,它的刹車和離合器都在不同的位置,你需要重新去考駕駛執照。如果這輛汽車在途中刹車失靈,你受了重傷,你 也不能狀告微軟汽車公司,因為你買來汽車之後必須簽一個合同,說”由于微軟牌汽車對你和家人造成的一切死傷,微軟概不負責。”

怎樣完全用GNU/Linux工作

說了這麼多Windows的不好。我還沒有告訴你我怎麼用Linux處理有些必要的事情。半年以前我由于中文老是配置不好,一直是雙系統,不時需要重起到Win2k來處理漢字。後來我找到了miniChinput, XSIM和SCIM輸入法。這下可以處理漢字了。而且VIM和Emacs對漢字支援越來越好。我的大部分文本是用VIM編輯的,包括程式,信件,網頁,LaTeX論文,MetaPost繪圖語言。

我不用Word這樣的程式寫論文,而是用LaTeX,因為這是世界上效果最好,最友善的論文工具,是大多數學術雜志要求的格式。幻燈都是用ConTeXt做的,用起來很簡單,而且效果非常漂亮。你可以看看我的TeX介紹。

至于繪圖,你可以用很多可視化的工具,比如xfig,dia。但是對于我來說,任何可視化的工具都不能完成某些任務,我需要一種可以精确描述圖形的語言。我找到了MetaPost。它簡單又好用, 而且效果是世界一流的。我的插圖,如果不是圖像,都是MetaPost畫出來的。

我曾經抱怨mozilla-mail經常突然消失,損壞我好幾封快要完成的信件。後來我發現mozilla的郵件處理程式确實是不穩定的,功能又弱,有經驗的UNIX使用者都不用這樣的程式。Mutt是一個非常穩定可靠的UNIX郵件處理程式,而且功能非常強大。我曾經為Gnome和KDE的不穩定而煩惱。現在我找到了非常強大的FVWM。KDE,Gnome也能和FVWM一起工作。雖然Gnome和KDE總體不穩定,但是某些部件程式還不錯,很多gtk, Qt的程式也很不錯,它們很多都是可以獨立于這些桌面環境運作的。

Linux有很多強大友善的工作方式是Windows沒有的,或者有類似的東西,但是很差勁或者用起來不友善。比如ssh服務,rsync,cvs,expect ……

結論

我寫這麼多的目的是什麼?我希望喜歡Linux的朋友,完全清除微軟和Windows灌輸在你腦子裡的謬論,别再相信它們所謂的”新技術”,别再追趕Windows,因為追趕Windows = 倒退。馬克思有一個思想很重要,”新生事物并不一定是在最近出現的。”

UNIX,Xwindow, TeX雖然都比Windows先出現,但是它們才是先進生産力的代表。我們要清楚的認識到什麼才是真正的現代化,什麼才是真正的自動化。

消除學計算機很難的幻覺,勇敢的拿起像bash, FVWM, TeX, VIM, Emacs, Mutt ……這樣強大的程式,勇敢的面對符号。不要再埋怨”Linux為什麼不能像Windows那樣”,不要再浪費時間試用這樣那樣的程式,不要再忙着更新。你需要了解UNIX的工作方式,因為那是大多數科學家的工作方式。Linux可以成為你的好朋友,你需要認識它,了解它,信任它,才能完全的靠它來高效的工作。當然,在遊戲機,手機,掌上電腦裡,或者在用電腦來娛樂的時候,用一些 “傻瓜軟體”還是不錯的.

我希望國小,中學的計算機老師能夠提高自己的素質,在孩子們的啟蒙教育中充分利用Linux神秘的特點,引起孩子們對數學,對符号的好奇心。誘導他們用計算機來解決世界上的有趣問題,而不要把教學的範圍局限于計算機的操作和它自身的問題。

附錄: 我用來處理日常事務的Linux程式

好了好了。我知道你發現自己應該轉向Linux,你很後悔當初為什麼中了微軟的邪。但是不要着急。因為這些東西本來隻是工具,它們是用來完成你的主要任務的輔助而已。你以前選錯了工具,這不 要緊。你還是擁有你自己原來的專業技能,那才是最重要的。工具的東西隻有慢慢适應轉換,不能一蹴而就,否則你會感到非常沒意思,甚至放棄。

如果你隻想做一個像我這樣的普通使用者,主要目的是用Linux來完成自己的任務,那就可以不用系統管理者或者網絡管理者的标準來要求自己,因為當一個系統和網絡管理者确實很辛苦。這裡我對實驗室的網管同學鞠一躬,謝 謝你的指點和幫助. 不用把你的機器當成網絡伺服器,不用開放沒有必要的服務,設定好ssh, ftp已經足夠了。這樣會省去了解很多沒必要了解的東西的時間。不用過度考慮”安全”,因為Linux預設已經很安全了。不過你有興趣了解更多那也無妨。

下面給出一些推薦使用的可以處理一般事情的程式。至于你的專業上要用到的科學和工程軟體比如Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 還有其它實體上的,化學上的,生物上的 …… 都必然有Linux和UNIX的版本。當然他們很多不是免費的,不要總是覺得什麼都應該免費,自由不等于免費。它們是經過很多人辛勤勞動的産物,是可靠的程式,它們物有所值。

下面列出我常用的一些Linux程式。一個清單裡可能有很多,那是為了友善你來選擇,我列出了比較信得過的。但其實很多隻有第一個是我真正在用的,我不喜歡試用程式。我不是一個合格的網絡管理者,我的伺服器都隻設定了我自己需要的功能,那樣可以省去我很多麻煩。

Shell: bash。它結合了csh和ksh的優點,并且有readline功能,你可以随意綁定自己的鍵盤。

編輯器: VIM, Emacs。

程式開發: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...

論文,幻燈工具:LaTeX, ConTeXt

繪圖工具:MetaPost。這個語言太強了,以至于我隻用它了。你不熟悉的話可以用xfig, dia來畫一些流程圖之類的圖檔。

圖像處理:ImageMagick。其中的import程式可以螢幕抓圖,convert程式可以轉換圖像格式,display可以顯示圖檔和簡單編輯(縮放,換品質,轉格式,簡單繪圖,簡單慮鏡)。通常我就這麼點需要。如果你要更強大的圖像工具可以用Gimp, 它幾乎和Photoshop差不多。

自動管理工具:make。我可以用make來自動編譯程式,自動編譯文檔,自動更新插圖…… 全自動,而且不會重複勞動。

數值計算程式:SciLab。這個程式基本上可以代替Matlab。

代數計算程式:MAXIMA。這個程式基于世界上最老的計算機代數系統之一: 由美國能源部(DOE)發行的MIT Macsyma系統。它是用Common Lisp實作的。很多現在的符号計算程式比如Maple都從MAXIMA身上學到很多東西。它現在經過DOE準許以GPL發行,永遠是一個自由軟體。

加密程式:GnuPG。我的PGP密鑰就是它搞出來的。

打包,壓縮程式: 什麼都有: tar, gzip, bzip2, zip, rar, ...

虛拟光驅程式: Linux不需要虛拟光驅程式,直接mount就行了。

ftp伺服器:proftpd, vsftpd。proftpd功能很強,但是我隻用了最簡單的一種設定。

WWW伺服器:apache。(我一般沒有開)

ftp客戶程式:lftp,ncftp。它們都是文本方式操作的,但是比起圖形界面的友善的多。比如lftp幾乎具有bash的所有友善功能,Tab補全,bookmark, queue, 背景下載下傳,鏡像…… Linux也有圖形界面的ftp客戶程式,但是大多不穩定,有很多問題。這就是很多人抱怨Linux不如Windows的一個小原因。還有很多人用Wine模拟Windows的leapftp,其實lftp比leapftp好很多,你需要的隻是适應一下。

自動下載下傳工具:wget。它非常穩 定,有一次我下載下傳一個程式,用IE和Mozilla下載下傳回來的檔案都是壞的,最後還是wget可靠的傳輸了資料。用它甚至可以鏡像整個網站,比起WebZip這樣的Windows程式強多了,而且不會因為你不付錢就在下載下傳回來的網頁裡強制插入廣告。

虛拟終端:rxvt, xterm, gnome-terminal, mlterm, ...

X server: XFree86

視窗管理器:FVWM。編譯加入了libstroke。

中文輸入:XSIM。被我修改過以适應FVWM的需要。另外推薦你還可以用SCIM。

email處理:Mutt + Postfix + fetchmail

看PDF, PS, DJVU檔案:Acrobat Reader, xpdf, GhostScript, gv, djvu工具包和netscape插件。

看CAJ文檔: 我從來不看CAJ之類的文檔,如果找不到PDF或PS,直接去圖書館借最好。

看網頁:Mozilla, Phoenix, lynx。Mozilla-Xft的顯示效果比IE好很多。

英漢字典:IBM智能詞典,星際譯王。

編輯網頁:我用VIM直接寫HTML。你如果想要圖形方式的可以用其它的比如screem, BlueFish。

登入其它UNIX, Linux機器:openSSH, telnet。 我喜歡用openSSH把其它機器的X程式通過ssh加密的隧道傳到我機器上顯示。

登入Windows2000 server的display service: rdesktop,...我有一天試了一下,不錯。後來就沒有用過了。

同步程式:rsync。我用rsync通過ssh來跟某些機器同步資料,或者做自己機器上不同目錄間的同步。

上BBS:rxvt(或任何一種終端) + telnet + chatbot(helloooo機器人的程式)

QQ, ICQ: 我沒有QQ或ICQ。不過你可以用Gaim, 它同時支援QQ, ICQ和很多其它的即時通信方式。ICQ使用者也可以用Licq。

放錄像:MPlayer, RealPlayer。MPlayer太好了,直接就可以放VCD, DVD, divx, wma, wmv ... 用Windows的同學都很羨慕我,說Windows要放這個需要大堆插件。rm最好還是用realplayer放,它也是免費的。

放音樂: xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg)。mpg321不如xmms管理音樂檔案那麼友善,但是有時我還是用mpg321放mp3作為背景音樂,因為懶得開一個xmms視窗:-)

遊戲:我覺得KDE的那個ksokoban(推箱子),很好玩 :-)

看Word文檔: 請Word使用者把文檔全部轉為PDF或PS再給我,文檔裡沒有特殊的格式幹脆就用文本吧,何必那麼麻煩。以前很奇怪的是,通知裡本來沒有什麼特殊的格式居然還要發doc附件的email。現在好 了,我們系發通知都用文本,PDF,甚至圖檔了。

其它程式:還有很多我需要用而你不一定用得着的。比如,Doctor Scheme,

Scheme48, Scsh, kawa...這些程式隻有Doctor Scheme有Windows版本。還有很多幕後工作但是你一般不察覺的:xinetd, telnetd, sshd, crond, atd, lpd, ... 他們都比Windows的對應者強的多,或者根本沒有對應者。

附:

寫給支援和反對《完全用Linux工作》的人們

作者:王垠

在一陣陣唾罵和歡呼聲中,《完全用linux工作》被轉載到了天涯海角。很多人支援我,也有很多人唾罵我。我不知道它是怎樣流傳到那麼多地方,其實 我不知道它都被轉到哪裡去了…… 我知道現在這篇文章又會羅裡羅索寫很長(因為我計劃寫這樣一個東西已經很久了,坐在Emacs前面總是有一種巫師在煉丹的感覺……),是以先提出中心思想 吧。中心思想就是:

我隻是一個傻瓜。看《完全用Linux工作》的時候請用你們自己的判斷力。

幾乎所有人都承認,那篇文章很偏激。當時的情況是這樣,我用Linux的時候被一個同學鄙視了,說:”你怎麼用像DOS一樣落後的東西,真土!看我漂亮的Win2000...” 這跟當面嘲笑别人老婆或者媽媽有什麼差別?我義憤填膺啊,就幾乎跟他吵起來。然後就寫出了這篇文章放在首頁上,叫了幾個人來看。接着我珍愛的TeX又受到衆人鄙視,于是我又寫了一篇文章打擊Word,然後把TeX捧上了天。道理很簡單,鄙視我喜歡的東西的人就是敵人—邪教徒或者恐怖分子—他支援的我就反對,他反對的我就支援。為了使人信服,舉例必用大科學家,世界一流大學,一流實驗室的名号,雖然我不跟其中任何 一種沾邊。還好那時候我還不認識上帝,要不就打他的名字了。論據不管是實際經曆還是自己推測的,先寫上去再說。揚眉吐氣啊!隔壁微軟研究院的哥們居然都被 我打動了,開始寫Linux程式,學用LaTeX和Emacs。不過幾天之後我就把它删掉了,因為我自己都感覺到偏激。

于是就沒管那篇文章了。可是沒想到它竟然已經被轉載到那麼多地方,似乎引起不小的波瀾。有段時間每天都收到十幾封email,國内的,國外的,問技 術問題的,誇我的,罵我的,講道理的,鄙視我的,想交朋友的,語重心長的,号稱要删掉機器上的Windows的…… 我的首頁居然也占據了”王垠”在Google上的首選位置,把那個日本的什麼王公貴族”李王垠殿下”都擠下去了。大家似乎都知道我天花亂墜的本事了,有人就想找我寫文章向别人推薦商業軟體,我很後悔 沒有趁機狠狠賺一筆。走到圖書館,亮出借書證,管理者張大了嘴說:”哇!你就是那個Linux牛人啊!”,也不知道他是褒是貶。甚至有人把他的BBS昵稱都改成了”堅決擁護精神領袖花生” (花生是我的外号)。為此還騙到了好幾頓報告?quot;報告”是清華專用動詞,意思是請客吃飯)。雖然我覺得自己身上沒有什麼值得自豪的東西,但是又有 點為自己興風作浪的本事感到驚訝。雖然我一再告誡自己要謙虛,但是不由的有一種毛澤東,甘地,甚至摩西的感覺。我更加體會到”網絡上沒有人知道你是一頭豬 “的真理性。其實,不但網絡上沒有人知道我是一頭豬,實際生活中也沒有人知道,其實我是一頭笨豬。

這麼長的時間之後,還有人寫信給我說”深受鼓舞”,”提壺灌頂”,”對不起我還在用Windows給你寫信”,”真想删掉Windows啊” …… 我很好奇,我的文章真的有那麼大的威力?我再看這篇文章,覺得有點慘不忍睹,看了開頭就不忍心再看下去。我告訴同學我很後悔寫了一篇這麼偏激的文章,可是 他?quot;徼枉必須過正,你沒有錯”,是以我也搞不清楚自己這樣寫對不對,這樣自責對不對。就像我從來不敢看自己照片,卻有時被人稱為帥哥,就讓我無 法判斷自己是否帥一樣。是以現在我就開始懷疑我自己是否真是一頭笨豬。也許多年以後,我會正确的評價我的想法。就像我現在覺得我15歲的照片挺養眼一樣, 也許我會發現自己其實是一頭聰明豬?

寫這篇文章不是為了讓自己免得被罵,也不是為了顯示高深的豬的哲理。隻是因為我深深的感到人應該有自己的判斷力,不要簡單的接受别人說的DO’s和DONT’s。懷疑一切,同時又敞開心扉去了解一切。

看過《完全用Linux工作》的朋友,請仔細檢查裡面的DO’s和DONT’s。 2004.8.26

繼續閱讀