我们来说说很多初学 Linux 的用户。虽然他们在用 Linux,但是他们打心眼儿里是觉得5 z- p, a8 l- V2 Y0 b
Windows 的工作方式好,他们希望 Linux 有一天能“像Windows那样”。你说:“我鼠& I1 F7 N' t; t" ?, E
标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:“Linux 从来
3 s8 H7 g0 d: P& r5 V7 ?2 z没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比 Windows 0 k3 g5 C( [+ z
的先进。, s# f3 X" r9 f$ H+ d
4 H7 o: i; G% M
Linux 属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”
5 P: A: a3 N% P5 M4 t$ V8 P4 K8 W1 @6 O
看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... . T- E0 g; C! `5 G
没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?
1 O% I+ M% e- C7 u' o! i难道它们的设计者就那么低能,连个图形配置界面也写不出来?. T' [1 P. F4 z# C+ h
1 E3 A9 }1 B2 n8 W/ F+ L
当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达
/ N, Z5 t" S l能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需
0 p" E; V+ E, V" |: O要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修
* B8 A$ Y8 ~" r" s0 j改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设, U h v& p$ N6 |5 d" N9 l
置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了 awk, - s8 H7 G& \& t- o, B) c( W8 j
sed, Perl,你会觉得那才是真正的自动化啊。
8 f) N+ K B% r# @6 @
/ l# O ~% c) G$ A& F鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全
2 [- g5 J( `7 _明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱) u) w- X% | y# s$ j3 L( V
点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。0 a" O2 C/ j8 Z* i; ]
1 h5 J( k, e( _. f3 c% }3 s$ v各个小程序的完美配合7 Q% H+ U. d+ a, u; p6 Y
/ K; M' ^3 b/ s3 T4 q7 i
这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能0 e: o- P# \2 w% e% g
力,然后让它们合作。Xwindow也继承了这种好传统。这恐怕就是Windows和其它操作系
2 m1 ~' k. C; k2 |统望尘末及的地方了。UNIX 程序设计之统一,配合之完美,真使我难以置信!shell,
5 J" r1 ^$ N7 \. m) Ygrep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有' @/ D9 N4 [ b( S; j6 Y: p
一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了
( E( l. Z( q+ y) C: O* O* kvi 和 VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经* t# E5 Y6 O$ j8 ]
设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等
( w* U$ Z# t. h4 g2 E# E y很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做5 g1 G2 i; j' f( H# p% c
的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可: l3 z9 T9 Z% q' Z
以在自己的窗口里“嵌入”另外一个程序。
/ E( w7 _$ n/ P* C, R
$ D: v7 y/ Y5 j2 u; L. S/ I3 V' w在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在Windows
2 N+ r9 ]7 S* h$ Z+ b' v: t& I+ X下使用 Perl来进行一些自动工作。但是 Windows 的文件操作,管道是如此的不稳定,3 @1 M3 {* H& ]7 V. ~3 W
程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器,: t% [5 P+ w- A" ~5 F& U0 Y
你别想用一个 expect 脚本来控制 telnet 到水木清华BBS。- B5 |% n: f, i8 F7 w, k# o
; {% a v% G1 o" e, @/ I% Z
Windows 的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自7 Y( W+ K. M: V: P" x+ W! U( H
己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal,
. V! h4 c+ M8 D( _2 e! Z& V* Y自己的通讯代码。每一个 IDE 都自己提供编辑器,编译器,汇编器,调试器。人们为$ W5 ~5 x4 u8 f
了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器
8 b' T& R$ s r3 m" t' n) I的键绑定,菜单组织…… 不能 DIY!
7 o L/ J% W6 H6 C1 d0 X7 T
" u3 F+ n+ z9 F7 N) K4 C你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什
' \* R6 M6 d# _6 L" b+ e e么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版
% Z' n: v: q2 L5 l3 [0 [面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的 古球
* e% o3 | v/ Y7 D2 P* P拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用 Windows 程序,你得到的是3 U: P8 M7 B5 `; s
大杂烩,就像你去买“品牌机”,只有那么几种配置,而且附带很多你不需要的软件和
9 C4 ?2 M# h6 Y6 _( `服务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这
, b/ |7 ]5 c9 t! E' _种选择余地!Windows 程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,
7 H" J! p- \3 N) X因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新! y" \: d! E" Q+ ~8 X
买全套配件!( G; l/ }, v% \6 S
, Y$ P3 X! H' L, \0 \) ~而 UNIX 和 Xwindow 就是高档的“组装货”。比如我用 Mutt 的时候,我可以用 VIM 6 X. K0 U1 _6 `! W) r1 Q* b5 Q
也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv 来显示附件里的图9 P3 i. [6 @9 t* o7 @( r: {' @4 J
片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给
/ o2 a M: a7 t+ M: c. oMozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其
5 |. u) V! |8 k: m- J6 o! ?/ W9 h; K0 d它 PGP 程序。( [6 O/ Z: I+ ?
# h P6 i( ]8 U& W我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,% s* \7 c4 S+ S# m5 @
转发给 postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可
1 C. G a c8 ]& m. N7 P以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以% V/ x0 a0 r/ N* a
分别得到它们的好处。
; w0 ?, m: @8 c, ~3 c; d: B+ m; h# Z! ~/ y
学 UNIX 绝对不是浪费时间
5 x0 v- c# j4 x! P- `有人告诉我:“你看我用 Windows 什么都不用学。而用 Linux,光是安装就花了我一
0 z* ?, }& U' V' ], m% q个星期!”
% N( w9 S1 V: I% W% b$ {! b) j& g0 i5 W
首先,我要告诉你的是,你装 Linux 花了一个星期,不是因为 Linux 不好装,而是
; [/ y `% \' g: y* ~9 X$ [因为你已经习惯了 Windows,对 Linux 最初难以理解而已。你想一想你最初安装Windows
/ V) ]/ L# m8 k, ?) `, }的时候呢?你花了多少时间搞明白什么是硬盘分区?什么是盘符?什么是目录?你认为' S6 |$ c0 g$ D* a: r
Windows 就是那么容易可以学会的吗?虽然你觉得没花时间学,但是你以前在用别人的
7 L: q4 d7 {& l& {& W: n) h# H机器的时候已经耳濡目染,自然就了解了。而且由于你想要 Linux 和 Windows 并存于6 Q I8 E# g0 i, X& ]/ Y# X) F
硬盘上,又增加了安装难度。而且你肯定没有得到有经验的 Linux 用户的帮助,否则" o% R% E2 A' ?" V5 U0 A+ b
他们会在20分种之内帮你搞定。一个星期也太夸张了.* a; g) U& y3 }! |
7 q2 }, o7 P# f$ w: ^2 I如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过 windows,你肯定% a( h7 B8 u' l0 w0 r
会很习惯 /etc, /usr, /usr/local ,... 而不是 C:, D:, E:, ... 是不是?如果你只
1 i+ h' K b$ l) Z) M用过Linux,你第一次用 windows 时恐怕也会问:“/bin 目录哪里去了啊?”8 t* X {5 ~& U. X% e
; G# h" {! @, z7 I' Y最重要的是,你用惯了的UNIX工具,它们可以伴随你一生,而不会那么容易变化或消失。
1 J( A- C. ~( w& R你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多,而且可以完全模4 j& z: b1 G& L& H# n
拟你现在的工具。
2 I5 R( ] o! s. l# `! I8 _8 m
" i5 R: B$ E' b" [# M; r我们实验室一个60多岁的老师,用vi, cc, make, ...都几十年了,他以前的经验绝对
9 V/ u) B9 i5 q0 }没有白费,而且教会了我们一批又一批的学生。vi 伴随着 UNIX 的最初发行而诞生,
I, H* _! A2 R% B8 j3 i0 m) G直到今天还是世界上头两号编辑器之一!有些人的 FVWM 配置文件已经用了 10 多年,
, P7 _) S! X n K8 P! g5 f# i; N现在完全不经修改还可以用。
% l0 |, ?5 d& P& }, K4 m" B4 D
+ h. w7 \3 J0 A4 ]( _8 O看看 Windows 的工具,你从 Borland C++ 换到 VC, 就必需适应新的环境:菜单不同, a0 S( G% Z! C4 B. e
了,颜色不同了,按钮不同了,帮助信息不同了,热键不同了,编译器参数,调试器功
4 ?; l8 W. s z% q3 B能也不同了,…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了 VC, 你又
) Z: B+ n& W2 I' ]要换成VJ, PowerBuilder, C++Builder, ...
4 E/ W0 k! A5 i' e p6 l
% C; L9 y3 p! j- Y/ R1 R9 O3 L很多windows程序员都是这样,开头在dos下用Turbo C, 然后是 Borland C, VC, C++
& L1 P: q8 i; sBuilder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不
/ Q, f9 r# K5 r断变化,不断出问题,又不断的在修改…… Windows 程序员不得不买又厚又重的 Microsoft . m* L. t* p7 E8 v6 w. P7 x
Press 的书籍,看了才一个月,又过时了。今天你才学会了写 VxD,明天你就必须用
3 t$ J2 ]) H- u9 R0 |/ k; v) nWDM 了。你不得不注册 MSDN 才能赶上 Microsoft 的步伐。很多人说:“计算机是贵
* ]; N. v' f8 Q1 T0 L族的专业。” 这就是微软一手造成的。
# u+ g! O7 \8 t6 J
; M+ V* _" b& {) P7 Q1 j5 }7 L这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命!我们为什么不
3 K+ E; S/ T4 i2 |& t N1 p+ a6 r使用从诞生就那么一致和完美的 UNIX?你需要理解先进工具的设计理念。UNIX 的工
7 L, i. m! k2 I6 Q* b# W具就像我们用的汽车,它的离合器,油门,刹车,方向盘,后视镜,永远都在同样的3 J2 R* L$ G1 y0 }
位置。用惯了的话,你对你的汽车的每一个部件都会了如指掌,甚至你自己都可以修
5 @: V# Q, I0 @* g; L车了。这难道不好吗?' Y( i, e" p R% w
1 \5 ?& H0 P" z6 D( _有人说:“你说我们需要了解 UNIX,难道你要开车还必须了解汽车的结构吗?” 你
; T% V8 a) ], c( h去问问开车的司机,哪一个不了解汽车的结构的,那他的驾照就是混来的。你难道想- q' k6 v' L+ m$ F) l
要傻瓜型的“微软牌汽车”吗?我们来看看:* z4 \) }( A9 g5 g0 a! z1 @4 b- G3 C4 u
* Y! f% D @: F/ G: c你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱。车上的" p4 {3 X: [( i4 C( ^1 a4 ~
防撞气囊不时会冒出来,说是为了你的安全。每开100英里要大修一次,每过一年要换4 u3 g F- X2 O, s# I, ?
一次引擎。附带的,你还必须换用由微软汽车公司指定的石油公司提供的新型号的机
( W; a/ I# G! G; O6 u油。你的车出了问题,但是法律规定,你不准私自拆开你的汽车来修理,你必需到微! \1 ?8 K/ E; C& k
软汽车公司指定的维修点去,需要付相当多的钱才能修好一个小毛病。
R! n: e2 Y( m4 M
" s) l: x) B- y) X. e最可气的是,你每换一个型号的微软牌汽车,它的刹车和离合器都在不同的位置,你
% C3 c4 ]& l6 m# ]1 L. H6 Y4 a需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵,你受了重伤,你也不能状告& x0 i# R/ _6 ]( S5 W% _8 X, o9 ]0 r
微软汽车公司,因为你买来汽车之后必须签一个合同,说“由于微软牌汽车对你和家
; I/ y+ M# {! R. A% s% N人造成的一切死伤,微软概不负责。”
2 S2 p4 [% Z( \% P8 L3 {( d+ N; K- C1 h$ k- U& j
怎样完全用 GNU/Linux 工作4 R4 N+ l4 S5 [* I; I f" `
/ \- m E- [* U, C说了这么多 Windows 的不好。我还没有告诉你我怎么用 Linux 处理有些必要的事情。3 P+ Q) f8 Q2 |# K* G; n
半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到 Win2k 来处理. q) C$ U7 q9 e6 e3 l% n* b5 j
汉字。后来我找到了 miniChinput, XSIM 和 SCIM 输入法。这下可以处理汉字了。
. N, c. ?$ U2 ]$ |. w K5 n而且 VIM 和Emacs 对汉字支持越来越好。我的大部分文本是用 VIM 编辑的,包括程
$ i" Q& ?) Z4 F3 b0 l- I序,信件,网页,LaTeX 论文,MetaPost 绘图语言。; B" n) Z3 W3 ?0 D
( a7 ?/ [1 n! c" u我不用 Word 这样的程序写论文,而是用 LaTeX,因为这是世界上效果最好,最方便, X! J" u& p( m
的论文工具,是大多数学术杂志要求的格式。幻灯都是用 ConTeXt 做的,用起来很简
0 K1 S0 U6 E ~, r单,而且效果非常漂亮。你可以看看我的TeX介绍。
L- a9 o6 e4 N ?
5 b" h% l I/ U9 ?) k至于绘图,你可以用很多可视化的工具,比如 xfig,dia。但是对于我来说,任何可& c( F2 Q) [ ?% B
视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了& b! s5 q' A3 H4 U' A& A- K+ P
MetaPost。它简单又好用,而且效果是世界一流的。我的插图,如果不是图像,都是 2 U F G) Z5 P# O( i- E/ B2 u$ g
MetaPost 画出来的。$ ~5 N8 m$ e* r( B6 u( \0 z- e" T+ k
* N- B! t1 [5 s我曾经抱怨 mozilla-mail 经常突然消失,损坏我好几封快要完成的信件。后来我发% a/ ~+ K. h+ V$ S. G6 m
现mozilla 的邮件处理程序确实是不稳定的,功能又弱,有经验的 UNIX 用户都不用
+ u& W! w; _2 W: ?) W' U( V这样的程序。Mutt 是一个非常稳定可靠的 UNIX 邮件处理程序,而且功能非常强大。! f: L2 O- q$ `3 |! O" D, M
我曾经为 Gnome 和 KDE 的不稳定而烦恼。现在我找到了非常强大的 FVWM。KDE,
0 H# {8 s, f& b8 a+ \Gnome也能和 FVWM 一起工作。虽然 Gnome 和 KDE 总体不稳定,但是某些部件程序
" I/ E% V- ~/ W W( ~还不错,很多 gtk, Qt 的程序也很不错,它们很多都是可以独立于这些桌面环境运
5 ?$ G2 [$ B% \4 d3 X行的。
5 g" z7 x3 w6 a+ J# g s# L: p3 f v# i% t3 A
Linux 有很多强大方便的工作方式是 Windows 没有的,或者有类似的东西,但是很2 g1 P5 c: E; T
差劲或者用起来不方便。比如 ssh 服务,rsync,cvs,expect ……
8 d1 f1 q+ l3 ?! s5 G! ]; v( W) r! a f n/ r+ p& ?
结论" n- V8 |5 n L2 J
5 }: N$ ?: W2 O7 q5 y1 o* j我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和 Windows 灌
; ]! I# m) M( ^+ F! O输在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶 Windows,因为追/ T- a' L( b2 b' V2 [1 H; H. P
赶Windows = 倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现的。”1 i# A; M, _- h4 w c3 @! d: u7 M
( D+ e+ ?9 |0 L
UNIX,Xwindow, TeX 虽然都比 Windows 先出现,但是它们才是先进生产力的代表。) I9 H ^4 ?5 e9 u6 [3 i% V: g
我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。" p0 p3 ^& i6 M. f+ x
/ n. [# S H R- _消除学计算机很难的幻觉,勇敢的拿起像 bash, FVWM, TeX, VIM, Emacs, Mutt ……( [, F) z/ q+ T, Y8 ?; ?
这样强大的程序,勇敢的面对符号。不要再埋怨“Linux 为什么不能像 Windows 那样”,4 k5 q V% T3 k6 y
不要再浪费时间试用这样那样的程序,不要再忙着升级。你需要理解 UNIX 的工作方
0 S) T8 u9 c' N* V( V式,因为那是大多数科学家的工作方式。Linux 可以成为你的好朋友,你需要认识它,$ E# w3 Z! |6 ~$ g, |$ B- d% a
了解它,信任它,才能完全的靠它来高效的工作。当然,在游戏机,手机,掌上电脑
% p* E9 f8 w5 N! W% o! U- K里,或者在用电脑来娱乐的时候,用一些“傻瓜软件”还是不错的.
) h* n3 [# a4 b) v$ w$ o5 u. f! c& {. E4 c3 A5 E
我希望小学,中学的计算机老师能够提高自己的素质,在孩子们的启蒙教育中充分利0 X* t% F9 Z+ m4 Y( X, ?
用Linux 神秘的特点,引起孩子们对数学,对符号的好奇心。诱导他们用计算机来解9 `) i6 Q7 r' s+ H# J0 D
决世界上的有趣问题,而不要把教学的范围局限于计算机的操作和它自身的问题。6 s- g8 c! }8 L
' G1 |4 z! n1 o
附录: 我用来处理日常事务的 Linux 程序
% F8 J& o/ N _2 I+ S2 u; f) X" I好了好了。我知道你发现自己应该转向 Linux,你很后悔当初为什么中了微软的邪。但
6 E9 [; R% J: u$ z是不要着急。因为这些东西本来只是工具,它们是用来完成你的主要任务的辅助而已。4 A7 l2 s/ L6 W! r2 ?0 I8 q9 @! g3 F# R
你以前选错了工具,这不要紧。你还是拥有你自己原来的专业技能,那才是最重要的。5 i7 i2 w; ]2 \2 G9 D
工具的东西只有慢慢适应转换,不能一蹴而就,否则你会感到非常没意思,甚至放弃。$ N( Z# h/ Q0 ` e }# o) G
2 ` Y( O% ]7 p* e
如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的任务,那
* r6 ]6 u+ a. n2 N就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理6 _1 l' f1 E& Y+ r4 z
员确实很辛苦。这里我对实验室的网管同学鞠一躬,谢谢你的指点和帮助. 不用把你的
6 ]& Y) |' v& J! }# T) s( ?: _机器当成网络服务器,不用开放没有必要的服务,设置好 ssh, ftp 已经足够了。这样$ U1 A" F7 K( m0 N" B
会省去了解很多没必要了解的东西的时间。不用过度考虑“安全”,因为 Linux 缺省
# R2 Z- ?: U7 d& P3 u, P已经很安全了。不过你有兴趣了解更多那也无妨。9 |; S. S# o7 l$ G: h! b7 D, N/ k
' C0 {, N' h" w+ H
下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工
2 _1 l1 k/ u. p" S/ Y. k/ v程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其
7 e" x7 H7 ^- O# Y7 O它物理上的,化学上的,生物上的 …… 都必然有 Linux 和 UNIX 的版本。当然他们# x; Z& ^+ H# [: X. x- t" |( J1 _
很多不是免费的,不要总是觉得什么都应该免费,自由不等于免费。它们是经过很多人9 R4 r" _" A/ k
辛勤劳动的产物,是可靠的程序,它们物有所值。
4 ?2 Q, D/ t( |0 m7 e' C0 i |