我们来说说很多初学 Linux 的用户。虽然他们在用 Linux,但是他们打心眼儿里是觉得& u i. Z2 `8 t- R
Windows 的工作方式好,他们希望 Linux 有一天能“像Windows那样”。你说:“我鼠5 ^- v9 j( V# M/ S1 s* Y% t) b
标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:“Linux 从来. \5 }6 c5 `3 _5 e/ C& Z% ?+ f; q
没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比 Windows
% J, P$ H; o! B2 b的先进。
|/ N: F: o9 {0 @6 j/ d2 s+ `+ Y" A! p. r* F3 A X+ o& H' d
Linux 属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”
, {( V) X$ p ]
- J8 @. }6 a- a5 V/ e% D, @看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ...
2 Y: ?6 I) R6 e$ r( F B) _. Y( I没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置? h; G- w8 W+ X4 r3 N1 C3 A {
难道它们的设计者就那么低能,连个图形配置界面也写不出来?0 }( A( i0 Y7 |
$ O7 {0 I% D0 \- m
当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达
( m: ]+ `' }4 l能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需
, y, z _4 e; Y) n- @2 g9 k要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修1 `" E1 S, o1 {- P1 P' }# y, }
改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设
- y! g. [# u Y" Y; f6 F0 r7 o置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了 awk,
. F. ]$ a) _$ K: vsed, Perl,你会觉得那才是真正的自动化啊。
* Q; F8 S8 ^' C' v3 S6 W4 \8 S, M! D2 ^
鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全7 o1 S$ U0 A w0 l& ?$ X, _
明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱5 `9 e3 `( j; o
点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。8 n0 k( t: A [; R
' d2 m! P# h6 x) ^/ R- |+ [; R- O各个小程序的完美配合% u- V6 \ w# V2 I
' }. Z w! ?4 H1 G( C* _
这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能; z$ A: P8 u# \ _; W
力,然后让它们合作。Xwindow也继承了这种好传统。这恐怕就是Windows和其它操作系9 J! E) ^8 I1 l& G
统望尘末及的地方了。UNIX 程序设计之统一,配合之完美,真使我难以置信!shell,
4 k$ ]( g( j1 B( W: ~5 l* Zgrep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有4 }8 }7 l& y' x8 e6 [" R; m
一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了 2 ~3 y& k! h( b0 U) `: T( R6 V' B
vi 和 VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经 P; U7 `4 L; `! n
设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等
+ G+ @2 o, v5 X- D. p- I很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做
, j. t# N5 P) k J2 @1 u1 G( h的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可
% T* t+ p/ z- }" W* |& {以在自己的窗口里“嵌入”另外一个程序。
: j, v: C2 j% k8 m4 M+ l2 x1 u8 L) v+ k! D
在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在Windows
( Y8 j, H6 W8 w, N! _下使用 Perl来进行一些自动工作。但是 Windows 的文件操作,管道是如此的不稳定,: M$ w) ]' j( q" s' ?
程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器,
" C8 j- Z/ v m& J/ e3 A6 z你别想用一个 expect 脚本来控制 telnet 到水木清华BBS。
. m1 I( `8 j* B. H
; q9 O' a. p9 X( u' {0 l8 ]Windows 的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自3 k& w$ C' h6 l% V
己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal,
. Q4 O0 ^! k4 J自己的通讯代码。每一个 IDE 都自己提供编辑器,编译器,汇编器,调试器。人们为( {1 A5 ]5 q/ Q- V6 M u; f0 H. Z
了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器; o U5 ~: ?+ X% ^( N' c; y2 x
的键绑定,菜单组织…… 不能 DIY!
; ]- C( n5 ^2 d0 _; i& N* z) B0 W3 p2 x8 G( B* l
你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什5 H, f, s# e0 X
么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版
0 ~+ U6 H; s0 S0 S4 d a面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的 古球! O& e( G; n, A' [: v8 [2 c$ d
拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用 Windows 程序,你得到的是9 s: {6 a! p( [+ e7 L
大杂烩,就像你去买“品牌机”,只有那么几种配置,而且附带很多你不需要的软件和3 C( N. u2 Q W% {6 D8 W& M7 b
服务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这0 L/ B+ T; q/ y7 i& {6 g4 r
种选择余地!Windows 程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,/ x; i4 b$ h6 ~. E1 @$ s5 F- Y
因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新
' \' u5 I6 T5 j/ Y买全套配件!
6 S, {" V1 _$ Y9 i
+ x7 @2 @2 f ^0 y而 UNIX 和 Xwindow 就是高档的“组装货”。比如我用 Mutt 的时候,我可以用 VIM / U1 G' ]/ d; k8 n0 `
也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv 来显示附件里的图5 x( c+ i) V" ~( I0 M
片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给
- u+ E* n. S; U5 cMozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其
4 r( v4 h/ Z4 {4 V, c- K' a! E5 d它 PGP 程序。
6 C3 k; h" m5 r4 f, M! W7 o
8 O% ]( q ]3 G) N- w5 q我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,
0 ^1 \- A$ h4 v2 _4 F4 i转发给 postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可! M) Z6 o/ ~: Z0 f6 H+ h3 `
以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以" U% i" D2 X$ B& E
分别得到它们的好处。. j- M$ m* u& @6 g7 m, N9 x
t6 Q, b4 y) m: E2 y/ S! d$ n学 UNIX 绝对不是浪费时间+ S; X I$ m/ D$ L
有人告诉我:“你看我用 Windows 什么都不用学。而用 Linux,光是安装就花了我一$ S4 t5 s3 _7 r0 K
个星期!”
" J. h7 x% R v5 j# ~2 Y: C7 B8 Y4 ]- a& b5 {# U$ m
首先,我要告诉你的是,你装 Linux 花了一个星期,不是因为 Linux 不好装,而是
) I ?" H: B) p/ _" N$ Z) r; p p因为你已经习惯了 Windows,对 Linux 最初难以理解而已。你想一想你最初安装Windows 2 H$ i# R) i$ [9 i1 b
的时候呢?你花了多少时间搞明白什么是硬盘分区?什么是盘符?什么是目录?你认为" i: D* n7 w. V8 b
Windows 就是那么容易可以学会的吗?虽然你觉得没花时间学,但是你以前在用别人的8 H8 Y( }% @4 b3 F( g/ I- h
机器的时候已经耳濡目染,自然就了解了。而且由于你想要 Linux 和 Windows 并存于+ n% O+ E* { u/ V# p
硬盘上,又增加了安装难度。而且你肯定没有得到有经验的 Linux 用户的帮助,否则
r% v9 C% P& n- G0 g) D8 A他们会在20分种之内帮你搞定。一个星期也太夸张了.
6 I2 T) g) |9 F5 W: r7 {/ {4 l+ D$ R% z9 K
如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过 windows,你肯定
6 O* H: e0 `( J1 o# R4 z: |会很习惯 /etc, /usr, /usr/local ,... 而不是 C:, D:, E:, ... 是不是?如果你只
6 `* ~! p7 m$ ?9 J+ o' V+ i用过Linux,你第一次用 windows 时恐怕也会问:“/bin 目录哪里去了啊?”' H4 }5 p" @: o# l
3 F8 \6 F$ } [" q
最重要的是,你用惯了的UNIX工具,它们可以伴随你一生,而不会那么容易变化或消失。
; ^. L/ N* a; p: X% }你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多,而且可以完全模
* h& v8 I ?& J+ z! u6 I, C5 o2 [( b+ S拟你现在的工具。
0 c; {* ^! ~8 n: u" U$ }# y& S
7 \7 O; D5 h& K1 F; e2 `1 c4 V我们实验室一个60多岁的老师,用vi, cc, make, ...都几十年了,他以前的经验绝对 v$ e, N' f3 } T# H
没有白费,而且教会了我们一批又一批的学生。vi 伴随着 UNIX 的最初发行而诞生,5 j; h1 u: s) A4 U) y. R& S+ [/ I
直到今天还是世界上头两号编辑器之一!有些人的 FVWM 配置文件已经用了 10 多年,6 ]' _; _5 j' t) s P% D6 N& ^9 ]3 z
现在完全不经修改还可以用。" Z; L% K5 I/ v* s' I
( X- u! q9 ~) Z4 H看看 Windows 的工具,你从 Borland C++ 换到 VC, 就必需适应新的环境:菜单不同
& o. @( B6 o& |& V) b! b2 t; F, f2 x1 x了,颜色不同了,按钮不同了,帮助信息不同了,热键不同了,编译器参数,调试器功
! }1 d$ y' E6 c( V. ?% r能也不同了,…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了 VC, 你又7 z# q$ J/ l. {7 |; N1 r( x2 \" E, w5 T
要换成VJ, PowerBuilder, C++Builder, ...8 ^: T/ y6 P" T N" U5 X
5 r! g$ _; I' C% S( ?很多windows程序员都是这样,开头在dos下用Turbo C, 然后是 Borland C, VC, C++
6 w. ^3 @# ~$ j$ d9 fBuilder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不3 v" y \! V2 u' e# _
断变化,不断出问题,又不断的在修改…… Windows 程序员不得不买又厚又重的 Microsoft $ ]2 c) F2 U0 ^* @; ^
Press 的书籍,看了才一个月,又过时了。今天你才学会了写 VxD,明天你就必须用) R- m/ E! n; T) W& _2 q( Q/ N
WDM 了。你不得不注册 MSDN 才能赶上 Microsoft 的步伐。很多人说:“计算机是贵
/ I. G6 P% }6 `( Y6 }族的专业。” 这就是微软一手造成的。
3 B; k0 J% J+ X( X1 g1 X) T. Y: `" ~6 m
这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命!我们为什么不1 x' D9 S4 |9 }. I
使用从诞生就那么一致和完美的 UNIX?你需要理解先进工具的设计理念。UNIX 的工
4 T( ~* d! g. ]; s% U) a具就像我们用的汽车,它的离合器,油门,刹车,方向盘,后视镜,永远都在同样的
" h+ }7 X# b! U" B位置。用惯了的话,你对你的汽车的每一个部件都会了如指掌,甚至你自己都可以修
, `( M3 Y4 p W车了。这难道不好吗?
3 S% v0 y6 H# S' E8 \, G$ _3 b3 C. Q. c! ` O, c3 ?8 c$ |
有人说:“你说我们需要了解 UNIX,难道你要开车还必须了解汽车的结构吗?” 你$ R' ~1 N& k) b; x$ f
去问问开车的司机,哪一个不了解汽车的结构的,那他的驾照就是混来的。你难道想
- v- s" C% Q! M, j* \, E0 q要傻瓜型的“微软牌汽车”吗?我们来看看:5 \, f7 U3 E' i( _
2 ^* C8 B7 K5 j你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱。车上的
1 \) K' O |: @, F1 `( U防撞气囊不时会冒出来,说是为了你的安全。每开100英里要大修一次,每过一年要换- r1 O$ v3 x h8 V4 |! g R% Z1 p& X
一次引擎。附带的,你还必须换用由微软汽车公司指定的石油公司提供的新型号的机2 v+ A6 y. s5 i
油。你的车出了问题,但是法律规定,你不准私自拆开你的汽车来修理,你必需到微$ h% N" N% c! r
软汽车公司指定的维修点去,需要付相当多的钱才能修好一个小毛病。
3 W8 s1 I# N% A' d! l+ { k5 Q! M6 w9 Q
最可气的是,你每换一个型号的微软牌汽车,它的刹车和离合器都在不同的位置,你3 p' P/ O+ l7 C7 n2 w+ K
需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵,你受了重伤,你也不能状告0 n6 @7 b3 j! \+ v/ D6 D& P# ~4 ]: `
微软汽车公司,因为你买来汽车之后必须签一个合同,说“由于微软牌汽车对你和家& H [" u1 J8 l5 r
人造成的一切死伤,微软概不负责。”3 a8 d& q. B: P2 R2 P. L
3 f! y4 c7 ?6 n" x2 P怎样完全用 GNU/Linux 工作/ Z6 Y# A: B* F
! c, g2 Q$ T4 ]# J% I5 b0 I1 l说了这么多 Windows 的不好。我还没有告诉你我怎么用 Linux 处理有些必要的事情。1 M2 [/ f' c2 j: \9 p
半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到 Win2k 来处理1 B. g: y C2 P& b! e
汉字。后来我找到了 miniChinput, XSIM 和 SCIM 输入法。这下可以处理汉字了。/ V8 J. ^/ I; R6 ?/ h
而且 VIM 和Emacs 对汉字支持越来越好。我的大部分文本是用 VIM 编辑的,包括程2 T9 @6 Y7 ^" `( l4 t# x# R1 X0 z
序,信件,网页,LaTeX 论文,MetaPost 绘图语言。
+ `* P$ w7 {9 x1 \; O0 M: j* J+ w
我不用 Word 这样的程序写论文,而是用 LaTeX,因为这是世界上效果最好,最方便
8 Z! X0 K! x( i+ L的论文工具,是大多数学术杂志要求的格式。幻灯都是用 ConTeXt 做的,用起来很简
, W2 m: x ~0 P% Z0 F单,而且效果非常漂亮。你可以看看我的TeX介绍。
- O7 o; j$ h7 s$ J% p L; k, o# X- N& u6 u1 `5 V( K/ _
至于绘图,你可以用很多可视化的工具,比如 xfig,dia。但是对于我来说,任何可
/ g: s; u9 j7 i- a* {0 J视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了
5 ?9 u) l. C' s+ t* AMetaPost。它简单又好用,而且效果是世界一流的。我的插图,如果不是图像,都是 0 [7 R" O1 l" _" s9 }' ]: F& j' C
MetaPost 画出来的。) F, C' s9 m. } K, _, T. }
+ d: m( z, N& I: A) c; o我曾经抱怨 mozilla-mail 经常突然消失,损坏我好几封快要完成的信件。后来我发
, f* `7 w7 W% z1 J6 z+ c4 q) N) W( z现mozilla 的邮件处理程序确实是不稳定的,功能又弱,有经验的 UNIX 用户都不用8 |( ^5 i) i2 F3 D7 A
这样的程序。Mutt 是一个非常稳定可靠的 UNIX 邮件处理程序,而且功能非常强大。
& K& n9 e0 f# f/ u我曾经为 Gnome 和 KDE 的不稳定而烦恼。现在我找到了非常强大的 FVWM。KDE,4 L+ j R0 d. f# X( j+ \
Gnome也能和 FVWM 一起工作。虽然 Gnome 和 KDE 总体不稳定,但是某些部件程序 V8 a U# H( Z; j D/ M
还不错,很多 gtk, Qt 的程序也很不错,它们很多都是可以独立于这些桌面环境运" `; P2 H6 m: }& v& W' Q
行的。
* s( ~8 F3 [# |$ ^5 l& G! \1 p L U& M/ r* B, G
Linux 有很多强大方便的工作方式是 Windows 没有的,或者有类似的东西,但是很4 Y$ O! |6 Z; A: u$ } b( J: n
差劲或者用起来不方便。比如 ssh 服务,rsync,cvs,expect ……
# w, K& | ~- n: P" a
9 R8 ^7 a! m7 |: f2 V/ I5 A结论
; A8 T" u& t- ?" T3 N
0 U5 H, |$ E/ b4 A: c0 G1 q我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和 Windows 灌
* c" J; C y4 y5 }输在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶 Windows,因为追
. }! R2 a8 d9 U赶Windows = 倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现的。”
* V8 ] M' z- _7 q3 u* p" O+ s: b& g9 H9 B" o3 W
UNIX,Xwindow, TeX 虽然都比 Windows 先出现,但是它们才是先进生产力的代表。& a0 Q7 u, p; [! S) q. f7 E
我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。
2 y9 V, f3 D% D, a+ e4 `1 |3 G8 t: A( ~9 Z$ e
消除学计算机很难的幻觉,勇敢的拿起像 bash, FVWM, TeX, VIM, Emacs, Mutt …… k1 Q. J: k D
这样强大的程序,勇敢的面对符号。不要再埋怨“Linux 为什么不能像 Windows 那样”,
8 d* g: F5 r9 O: J* T不要再浪费时间试用这样那样的程序,不要再忙着升级。你需要理解 UNIX 的工作方
( A3 D! k: S3 y0 i/ E( c1 m式,因为那是大多数科学家的工作方式。Linux 可以成为你的好朋友,你需要认识它,. \: W6 B1 m$ c) y J' A; ]! X: K
了解它,信任它,才能完全的靠它来高效的工作。当然,在游戏机,手机,掌上电脑+ P" G9 a! Q0 ?' F% q& \
里,或者在用电脑来娱乐的时候,用一些“傻瓜软件”还是不错的.
, k( ?4 J7 u. ?9 R3 j6 G
- Y7 q* J# u+ m8 K/ Z7 y7 u ?$ g7 p我希望小学,中学的计算机老师能够提高自己的素质,在孩子们的启蒙教育中充分利$ d0 L: C; N8 X( i# L3 G
用Linux 神秘的特点,引起孩子们对数学,对符号的好奇心。诱导他们用计算机来解9 J; j" V" c: O z+ G
决世界上的有趣问题,而不要把教学的范围局限于计算机的操作和它自身的问题。0 i! T. }, X, \* F; s$ w' g, ^
9 M* @' c N1 @7 J, l附录: 我用来处理日常事务的 Linux 程序
2 r- j$ i* A1 }1 z好了好了。我知道你发现自己应该转向 Linux,你很后悔当初为什么中了微软的邪。但2 J% z7 I2 ~% |# N4 j
是不要着急。因为这些东西本来只是工具,它们是用来完成你的主要任务的辅助而已。
# V6 G% G! H3 O2 x& o/ t, g你以前选错了工具,这不要紧。你还是拥有你自己原来的专业技能,那才是最重要的。. C; s# r9 k# p2 d5 k+ _
工具的东西只有慢慢适应转换,不能一蹴而就,否则你会感到非常没意思,甚至放弃。2 O2 a4 R9 V% v% J
) U+ `6 x& C h! V
如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的任务,那, O4 K! L& G' }6 S0 A
就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理
: ]4 R( g ^" u1 |" e2 ]& E; ~员确实很辛苦。这里我对实验室的网管同学鞠一躬,谢谢你的指点和帮助. 不用把你的5 X/ x2 v& X0 [5 P( u: N
机器当成网络服务器,不用开放没有必要的服务,设置好 ssh, ftp 已经足够了。这样. A+ x1 T0 S1 P' _
会省去了解很多没必要了解的东西的时间。不用过度考虑“安全”,因为 Linux 缺省
( F: `/ O8 E' W k已经很安全了。不过你有兴趣了解更多那也无妨。
, o9 v" W5 F! R9 Y
0 L- ~0 R2 K& j: n下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工
9 N0 C2 ]- K9 |0 w |, h$ A程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其
% z7 c; C* `0 F. t8 B& }它物理上的,化学上的,生物上的 …… 都必然有 Linux 和 UNIX 的版本。当然他们5 v+ j3 T# s5 k; _+ o V v: w
很多不是免费的,不要总是觉得什么都应该免费,自由不等于免费。它们是经过很多人% o- K6 o0 U; m! q$ M* L2 K/ F0 ~ B
辛勤劳动的产物,是可靠的程序,它们物有所值。
9 d4 l) L0 M: a# ^0 R |