next up previous
Next: 學 UNIX絕對不是浪費時間 Up: 完全用Linux工作 Previous: 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過濾器處理…… 這一切我都可以辦到!我可以選擇我最喜歡的專門的程序來完成專門的工作,然後把它們結合在一起,我也可以分別得到它們的好處。



2012-02-21