Archive for 2006年1月18日


一、如何安装Mplayer
      可以选择使用rpm安装包,但是据说rpm包比较不好使,所以推荐自己编译源码。假定你已经安装了所有的需要的库和工具程序(gcc,tar等)。在编译不发生错误的情况下,使用下面的步骤:
1. 解压缩win32codec,并把解压缩后的文件拷贝到/usr/lib/win32
2. 解压缩MPlayer源代码,并编译。
      推荐使用的gcc版本是2.9.5和3.2.x,如果你使用的版本是3.x,编译出错,那么可以加上参数./configre –disable-gcc-checking
      如果需要图形界面的gmplayer,则加上./configrue –enable-gui
      如果需要支持rm格式,使用./configure –with-reallibdir=/usr/lib/rp9codecs
其中/usr/lib/rp9codecs是real的解码器

        DIVx5要不要安装
        Mplayer自带Divx和Xdiv的解码器,所以如果仅仅想看DVD的话,那么已经够用了。只是在需要制作Divx等文件时,需要用到这类解码器。这时再安装就可以了。

二、如何使用Mplayer
                        
几个常用命令:

上下左右箭头:快进快退 
f:fullscreen
p: pause
+ -:调整声音和图象的延迟
q:quit
/ *:音量
c:调整fullscreen时的分辨率
o:显示模式
                
Q:有的DIVX有两个音轨,如何选择
A:启动是使用参数   -aid

Q:mplayer图像为何不随窗口大小缩放
A:使用 -zoom 加了吗?

Q:如何使用mplayer播放.srt格式的中文字幕
A:1. ln -s /usr/share/simsun/simsun.ttf ~/.mplayer/subfont.ttf
2. mplayer -subcp cp936 ****.avi 
(OR you can add this option to ~/.mplayer/config: subcp = cp936)
或mplayer -sub subfile -font subfont.ttf -unicode

Q:mplayer中srt字幕可以放大吗?
A:有选项可以调整的   subfont-autoscale

Q:mplayer可以放大看吗?
A:f键

Q:我能在后台中运行MPlayer吗? 
A:用法:mplayer <options> <filename> < /dev/null &mplayer的faq…

Q:mplayer如何使用多语言字幕
A:如果一个sub文件中有两种语言的字幕,可以使用 j 键进行选择和切换。还可以同时显示多个语言的字幕

Q:mplayer 调音量的键是那个?
A:9,0

Q:mplayer如何指定字幕啊
A:当字幕文件和原来的avi文件名不一样时,使用参数-sub指定字幕文件名

Q:Mplayer如何播放vcd?
A:mplayer -vcd 1(or 2,3,4)

Q:mplayer怎么显示不了中文
      如果是对话框中显示不了中文是gtk的字体没有配好,如果是播放的那个状态框里面,是不可能显示中文的,因为那个其实是图片
      如果是sub/idx字幕不显示中文,那么是字幕本身不是中文的。
      如果是txt字幕不显示中文,那么看前面字体的配置。

Q:Mplayer可不可以使用ttf字体
A:编译的时候加–enable-freetype,启动的时候用-font /your/ttf/font,如果要中文的话加-subcp cp936

三、如何播放中文字幕

      对于sub/idx格式的字幕本身时图片的格式的,是mpeg2格式的,所以是否显示中文取决于字幕本身。
      对于文本格式的字幕,需要加入中文字体。
编译时用–enable-freetype,之后在.mplayer/下面
ln -s /YOUR/PATH/TO/CHINESEFONT.ttf subfont.ttf
在.mplayer/config中加入:
subcp=cp936

四、命令行方式下的MPlayer播放的问题

MPlayer在不启动X的情况下至少有三种方法可以播放影片。

第一种,直接在终端环境,使用aalib播放。这种方法不需要任何图形设备,直接通过字符方式播放影片,但是画面效果较差,而且不支持彩色。
第二种,通过VESA直接访问显示设备。这种方法具有较好的兼容性,当前绝大多数显示适配器都支持VESA,但是这种方式只能由root使用。
第三种,通过帧缓冲设备framebuffer,这种方法需要显示驱动程序的支持。可以通过-vo参数指定视频输出方案。

      为什么我的nVIDIA 显卡vo不支持vx
装nividia的官方驱动
保证xv编译到mplayer里面

      对real格式的支持
      说过real的编码分open的和非open的,open(rv10)的是mplayer有自己的解码器,别的rv20,30,40(就是rmvb)是通过调用real自己的so或者dll解码器解码的,rc5和0.90的正式版已经支持的很好了,基本都可以放。以前的mplayer问题就多了

      如何抓图才使mplayer放的MTV画面也在?谢谢
我用vo x11  ,然后用import就可以抓下来.  gl2也可以。

五、不常见问题

Q 播放rm时的Not audio/video stream or unsupported错误
  我用MPlayer播放rm文件,编译时已经用了rp9codecs,启动时加上了mplayer -idx
  或mplayer -forceidx,但是随便放什么rm文件都会出现
  : Not audio/video stream or unsupported!但是rm文件可以接着放下去,也有声音只是不能拖动,有方法解决吗?
A 这是个bug,改源码
  打开mplayersource/libmpdemux/demux_real.c,找到下面的代码(1082行):
  代码:
  else {
    mp_msg(MSGT_DEMUX, MSGL_ERR, "Not audio/video stream or unsupported! n");
    }
     全部删掉或注释掉
     在播放rm文件时,这部分(else if… else)代码被执行3次,第一和第三次上面的代码条件不足不执行,跳过,第二此执行了,因此弹出警告窗.
     由于不清楚rm文件的格式和作者的判断是否正确,这是否是软件的bug不清楚,只知道老是弹出这框非常烦人,建议去掉,对mplayer功能无影响,rm照样播放 

Q 编译源代码出现找不到gcc或者libgcc的错误
A 安装gcc

Q 装mplayer时,出错,Error:the GUI requires GTK(which was not found)
A 装 libgtk 1.2

Q 出现错误Error: PNG support required for GUI compilation, please install libpng and libpng-dev packages.
A 装libpng-dev和libpng
如果安装过程中出现的缺少相关包的错误比较多,推荐使用apt系统查找,或者访问rpmfind.net

Q 我总算装好mplayer, 有图形界面,能播放, 有字幕但它是乱码, 我把/usr/local/share/mplayer/font/的字体文件换了好几次都没用,换的是font-arial-18-iso-8859-1/下的字体。另外我把~/.mplayer/font这个目录删了,它似乎不肯用这个目录下的字体.
A 编译时用–enable-freetype,之后在.mplayer/下面
  ln -s /YOUR/PATH/TO/CHINESEFONT.ttf subfont.ttf
  在.mplayer/config中加入:subcp=cp936 就OK了。

Q 我想使用ttf字体,所以启动时 -font ~/.mplayer/subfont.ttf  但是总是会跳出成千上万行, Syntax error in font desc  另:不用ttf时是可以载入mplayer自己字体包的font.desc的
A 不要用simsun字体,用simhei之类的就没有问题

Q 我安装了mplayer0.90, 却总是没有字幕, 它能探测到字幕文件却说不能打开字幕.这个版本和以前装的不一样,字体文件不是用font.desc ,而是直接指定***.ttf 不知道是不是和这个有关, 不过以前装的Mplayer虽然能打开字幕可却全是乱码…
A 向下兼容,这个和ttf没有关系。可能是没有设定参数vodsubid,可尝试使用j键试试

Q 使用skin时出错,
  在命令行下可以播放了。可是,gui的就不行了。./configure时我选择gui了,qmplayer时停在了检查skin上。没有skin时说没有,我复制了Blue的skin到~/.mplayer/Skin下面,结果就停在了检测这个那里。为什么?
A mv ~/.Skin/blue ~/.Skin/default

        1.Linux下硬盘的编号
ide硬盘一般是hdx,scsi硬盘为sdx,x为a,b,c,d

        2.Linux下对分区的编号
第一个Primary分区为1,其次为2,3,最大为4,扩展盘上的逻辑分区为5开始。
注意这里硬盘排列的顺序和windows下的cde不同,所以要数对了,不要按照windows下的顺序推断。

        3.增加一块新硬盘
新硬盘,先要分区,以ide硬盘为例
fdisk /dev/hdx
出现命令提示符后,m命令为显示帮助,n为新建,l为查看

对分区格式化
mkfs /dev/hdxn  
n为1,2,3…

mount分区
mount /dev/hdxn  /pathname
pathname可以是意目录或者文件夹。

        4.添加一个已有内容的新硬盘
直接mount
mount -t xxxx /dev/hdxn  /pathname
xxxx为目前内核支持的文件类型,可以是ext2,fat,vfact,iso9600等。

linux下怎么扫描硬盘坏道?

badblocks -n DEVICE_NAME

ps2:

     /etc/gpm.conf            | /etc/X11/X86Config-4
     =========================+=========
     device=/dev/psaux      | Section "InputDevice"
     responsiveness=          |  Identifier "Configured Mouse"
     repeat_type=raw        |  Driver     "mouse"
     type=autops2             |  Option     "CorePointer"
     append=""                 |  Option     "Device"   "/dev/mouse"
     sample_rate=             |  Option     "Protocol" "IMPS/2"
                                     |  Option     "Buttons" "5"
                                     |  Option  "ZAxisMapping" "4 5"
                                     | EndSection

usb:

     /etc/gpm.conf                | /etc/X11/X86Config-4
     =========================+=========
     device=/dev/input/mice   | Section "InputDevice"
     responsiveness=              |  Identifier "Generic Mouse"
     repeat_type=raw            |  Driver     "mouse"
     type=autops2                 |  Option     "SendCoreEvents" "true"
     append=""                     |  Option     "Device"   "/dev/input/mice"
     sample_rate=                 |  Option     "Protocol" "IMPS/2"
                                         |  Option     "Buttons" "5"
                                         |  Option  "ZAxisMapping" "4 5"
                                         | EndSection

Debian下的USB鼠标滚轮:

Section "InputDevice"
        Identifier      "Configured Mouse"
        Driver          "mouse"
        Option          "CorePointer"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "ImPS/2"
        Option          "Buttons"               "5"
        Option          "ZAxisMapping"          "4 5"
EndSection

x.org怎么设置滚轮鼠标?

Option "ZAxisMapping" "4 5"

/dev/input/mice删了,怎么办?

不同类型的鼠标对应的设备文件:

接口类型 设备 主设备号 次设备号 
Logitech /dev/logibm 10 0 
PS/2 /dev/psaux 10 1 
Inport /dev/inportbm 10 2 
ATI-XL /dev/atibm 10 3 
USB mouse /dev/input/mice 13 63 

创建对应设备的命令:
mknod /dev/logimm   c 10 0
mknod /dev/psaux        c 10 1
mknod /dev/inportbm c 10 2
mknod /dev/atibm        c 10 3
mknod /dev/input/mice   c 13 63

首先 apt-get install ipw2100-sources

然后根据下面的说明文档操作,注意"Install prerequisite packages……"一段。

ipw2100 for Debian
——————

Please see ./README for a description of the ipw2100 driver.

How to compile the driver
————————-

Install prerequisite packages: build-essential, kernel-headers-$VERSION, where
$VERSION is the version of the kernel you want to build the driver for.

Change directory to /usr/src:
$ cd /usr/src

Unpack the tarball with the driver sources:
$ tar xzf ipw2100-source.tar.gz

Now you have two options:

1) Use module-assistant

  Build and install the module package (as root)  with
  # module-assistant a-i ipw2100

  If something goes wrong follow the given instructions.

2) Build the module manually

  Change directory to the sources root:
  $ cd modules/ipw2100

  Build the module:
  $ fakeroot debian/rules binary-modules 
       KSRC=/usr/src/kernel-headers-$VERSION KVERS=$VERSION

  where $VERSION must be replaced by the exact version string of the
  kernel you want to build the module for (e.g. 2.6.5-1-686).

  Install the module packag

最后,根据提示,拷贝firmware,我的kernel是2.6.10-1-686,firmware是ipw2100.1.3.fw
The IPW2100 adaptor needs some binary firmware additionally
to this driver. The firmware can be freely downloaded, follow
the instructions found here:
http://ipw2100.sourceforge.net/firmware.php

The firmware is distributed in a ZIP archive. Unzip it and put
the resulting file ipw2100-XX.fw under /usr/lib/hotplug/firmware.
Make sure you download the correct version of the firmware for 
this version of the ipw2100 driver.

When the driver is loaded, the hotplug agent will load the
firmware into the adaptors memory.

当然,别忘了编辑网络配置文件,选择希望自动获取IP的网卡:eth0或eth1或者两个都要
原来系统默认的是eth0,照着那个格式改就行了。
vi /etc/network/interfaces

进入系统以后还可以用netcardconfig方便的让指定网卡自动获取IP。

ndiswrapper可以让我们在linux使用无线网卡的windows驱动。
查看你的无线网卡是否有linux驱动:
http://www.linux-wlan.org/docs/wlan_adapters.html.gz
注意看芯片型号,而不是无线网卡的幸好。比如我的网卡tp-link TL-WN210(中关村最便宜的无线网卡了-_-!)实际上使用的芯片是rt8180,如果你不知道你的无线网卡是什么芯片,可以运行
#lspci -v
如果是USB的无线网卡,可以用dmesg查看。

我的系统:
debian unstable kernel 2.6.9
无线网卡是rt8180。

1、重新编译内核(我不确定这是不是必要的,但编译内核之前一直都无法安装成功),至少你要有和你内核一样的kernel-source。
2、下载ndiswrapper: http://sourceforge.net/projects/ndiswrapper/
3、解压: 
        $tar zvfx ndiswrapper-0.12 
4、用root编译安装:
        #cd ndiswrapper-0.12
        #make install
5、如果编译成功,运行一下试试:
        # ndiswrapper
Usage: ndiswrapper OPTION

Manage ndis drivers for ndiswrapper.
-i inffile        Install driver described by ‘inffile’
-d pciid driver   Use installed ‘driver’ for ‘pciid’
-e driver         Remove ‘driver’
-l                List installed drivers
-m                Write configuration for modprobe
如果出现上面这些表示安装成功了。
6、下载无线网卡的windows驱动,并解压到一个目录,这个目录里一定会有一个*.inf文件,和dll文件。
7、安装这个驱动:
        #ndiswrapper -i nt8180.inf
                        ~~~~~~~~~~把这个替换成你网卡驱动对应的inf文件。
8、运行:
        # ndiswrapper -l
Installed ndis drivers:
net8180 driver present, hardware present
~~~~~~~~~~~驱动安装成功  ~~~~~~~~~~~~~~~检测到无线网卡。
9、加载ndiswrapper:
        #modprobe nidswrapper
10、运行:
         #dmesg | grep ndiswrapper
如果成功则显示如下:
ndiswrapper version 0.12 loaded (preempt=no,smp=no)
ndiswrapper: using irq 11
wlan0: ndiswrapper ethernet device 00:40:f4:93:df:32 using driver net8180
ndiswrapper: driver net8180 (TP-LINK,11/10/2003,5.163.1030.2003) added

现在你的无线网卡已经安装好了,还需要配置一下:
        #apt-get install wireless-tools
        #iwconfig wlan0 essid myID
                              ~~~~替换成你ap的essid
        搜索ap
        #iwlist wlan0 scan
然后就可以用ifconfig配置ip。
最后ping一下ap,如果通了就ok!注意,要现把有线网卡停掉!

一、调整显示器分辨率、刷新率

    如果你知道自己显示器的参数,直接修改/etc/X11/XF86Config-4就可以。
    如果不知道
    运行 dpkg-reconfigure xserver-xfree86,其他数据先不要改,到显示器那一段有3个选项simple,medium,advanced,选择medium,就能看到熟悉的1024*768@85Hz
然后查看/etc/X11/XF86Config-4,把显示器的参数记下来,以后就可以直接改,比如30-60 ,50-75。

二、添加更新站点

编辑/etc/apt/sources.list,加上ustc的更新目录,如下:
deb ftp://debian.ustc.edu.cn/debian testing main non-free contrib
deb-src ftp://debian.ustc.edu.cn/debian testing main non-free contrib
deb ftp://debian.ustc.edu.cn/debian-non-US testing/non-US main non-free contrib
deb-src ftp://debian.ustc.edu.cn/debian-non-US testing/non-US main non-free contrib
deb ftp://debian.ustc.edu.cn/debian-security testing/updates main
deb ftp://debian.ustc.edu.cn/debian-uo sid marillat rareware ustc java jrfonseca firefly
deb-src ftp://debian.ustc.edu.cn/debian-uo sid marillat rareware ustc java jrfonseca firefly    
testing代表debian的版本,main,non-free contrib表示目录下的文件夹,理解了上面的含义就可以自己写一些目录。
    最后两个uo表示非官方,加上他们可以下载到mplayer,java等。提醒一下,把速度快的站点放在前面。
    对我来说,这些站点就够用了。     运行synaptic(任务栏有快捷方式),更新软件列表,你会看到好多软件可以更新,这是我深爱debian的一个原因,比如要装mplayer,我只需要搜索mplayer,然后标记为升级,所有依赖关系它都会解决,下载自动,安装自动,而我只需要在终端输入gmplayer,就可以看到图形界面的播放器了,windows装软件有这么方便吗?当然先不要盲目升级,最新的软件组合在一起可不是最稳定的系统,尤其是在系统配置完全不了解的情况下很可能会出现你不能理解的问题,把自己需要的软件升级就可以了,一些lib开头的不是必须就不要升级。

三、安装显卡驱动

    我的显卡是NvidiaGForce2,跑cs没问题,打魔兽有延迟,这都已是过去了。在linux下装驱动,思路也不是很清晰,不过总算装上了,也不算麻烦。
    首先下载NVIDIA-Linux-x86-1.0-6111-pkg1.run(eelinux上incoming目录下有,更新的驱动我source不支持),安装module-assistant,用synaptic搜索安装就行,然后终端运行module-assistant,他会帮你把驱动显卡需要的文件下下来,当然,不能指望这一步就把显卡驱动装上,重启,选择recovery mode,运行#sh NVIDIA-Linux-x86-1.0-6111-pkg1.run,不用管它的警告,如果下下来的文件全,装上是没问题了。
    之后修改/etc/X11/XF86Config-4,在Module section 部分,添加load "glx" , 注释掉load "dri" 和load "Glcore",修改驱动为:Driver "nvidia",保存,重启。

第一章 GRUB 基础

什么是 GRUB?
GRUB 是引导装入器 — 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个操作系统,而不必处理不必要的麻烦。

GRUB 很棒
幸好,GRUB 是一个很棒的引导装入器。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。这就意味着无论怎样它总能找到内核。另外,GRUB 有一个特殊的交互式控制台方式,可以让您手工装入内核并选择引导分区。这个功能是无价的:假设 GRUB 菜单配置不正确,但仍可以引导系统。哦,对了 — GRUB 还有一个彩色引导菜单。我们只是刚开始。

为什么使用 GRUB?
您也许会奇怪,为什么全世界都需要 GRUB — 毕竟,Linux 世界在很长一段时间里一直使用 LILO 引导装入器,而且它可以让上百万的 Linux 用户引导系统。是的,的确是这样,LILO 很有效。但是,LILO 的维修率很高,而且很不灵活。与其花很多时间来描述 GRUB 的优点,还不如演示如何创建自己的 GRUB 引导盘以及如何使用它来引导系统。然后,我将说明 GRUB 的一些很“酷”的技术细节,并指导您完成将 GRUB 安装到 MBR(主引导记录)的过程,以使它成为缺省引导装入器。

如果您有点胆小,不必害怕。可以学习本教程的前半部分,创建 GRUB 引导盘,尝试使用 GRUB 而不必弄乱现有的引导装入器。或者,可以用其安全的“驻留”方式来熟悉 GRUB。那么,让我们立即开始吧。

第二章 安装 GRUB

下载 GRUB
要开始探究 GRUB 的精妙之处,首先需要下载、编译和安装它。但不要害怕 — 根本不会修改您的引导记录 — 我们只是要编译和安装 GRUB,就像其它程序一样,在此过程中我们可以创建 GRUB 引导盘。请不要担心;在修改引导过程之前,我会告诉您。

现在开始。访问 ftp://alpha.gnu.org/gnu/grub/ 并下载可以找到的最新版本的 GRUB tar 压缩包。我编写本教程时,最新的 tar 压缩包是 grub-0.5.96.1.tar.gz。下载了最新版本后,就可以安装了。

安装步骤
这里是从 tar 压缩包安装 GRUB 所需输入的命令。我将在 /tmp 中编译源文件,并将所有部分都安装到硬盘的 /usr 目录下。从 root 用户,输入以下命令:
# cd /tmp
# tar xzvf /path/to/archive/here/grub-0.5.96.1.tar.gz
# cd grub-0.5.96.1
# ./configure –prefix=/usr
# make
# make install
现在已经安装了 GRUB,准备开始使用它。

制作引导盘
要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建 ext2 文件系统。然后,将其安装,并将一些 GRUB 文件复制到该文件系统,最后运行 "grub" 程序,它将负责设置软盘的引导扇区。准备好了吗?

制作引导盘,第二部分
好,将一张空盘插入 1.44MB 软驱,输入:
# mke2fs /dev/fd0
创建了 ext2 文件系统后,需要安装该文件系统:
# mount /dev/fd0 /mnt/floppy
现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘:
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /usr/share/grub/i386-pc/stage1 /mnt/floppy/boot/grub
# cp /usr/share/grub/i386-pc/stage2 /mnt/floppy/boot/grub
只需要再有一个步骤,就能得到可用的引导盘。

制作引导盘,第三部分
解压、编译和安装 GRUB 源 tar压缩包时,会将程序 grub 放到 /usr/sbin 中。该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能性版本。是的,尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面完全相同。

这是有趣的设计策略,现在该使用驻留版本的 GRUB 来设置引导盘的引导扇区了。从 root 用户,输入 "grub"。GRUB 控制台将启动,显示如下:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
欢迎使用 GRUB 控制台。现在,研究命令。

制作引导盘,第四部分
在 grub> 提示符处,输入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
现在,引导盘完成了。在继续下一步骤之前,在看一下刚才输入的命令。第一个 "root" 命令告诉 GRUB 到哪里查找辅助文件 stage1 和 stage2。缺省情况下,GRUB 会在指定的分区或磁盘上的 /boot/grub 目录中进行查找。在安装引导盘时,也就是几分钟以前,我们已将这些文件复制到正确的位置。接着,输入了 setup 命令,它告诉 GRUB 将引导装入器安装到软盘的引导记录上;我们将在以后详细讨论这一过程。然后退出。现在,已经制作好引导盘,可以开始使用 GRUB 了。

第三章 使用 GRUB

准备
使用 GRUB 引导系统之前,需要知道一些信息。首先,应知道哪个分区保存了 Linux 内核,以及 root 文件系统的分区名称。然后,应查看现有 LILO 配置来寻找需要传递给内核的变量,如 "mem=128M"。一旦获取了这些信息,就可以开始了。

启动 GRUB
要启动 GRUB,需要关闭系统并退出引导盘。如果由于某些原因而不能立即关闭系统(比如上班时在部门的服务器上测试 GRUB),那么只要在提示中输入 "grub" 并继续操作。所有程序的运行情况都不会改变,只是您不能执行引导(因为 Linux 正在运行)。

首次接触
装入引导盘时,在屏幕顶部将出现一条消息,告诉您正在装入第一阶段和第二阶段。几秒后,将会出现一个熟悉的屏幕,显示如下:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
可以看到,这些内容与在 Linux 中以驻留方式运行 GRUB 时出现的消息完全相同 — 只不过现在我们是使用 GRUB 来引导 Linux。

"root"
在 Linux 中,当谈到 "root" 文件系统时,通常是指主 Linux 分区。但是,GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 Linux 内核的分区。这可能是您的正式 root 文件系统,也可能不是。例如,在 Gentoo Linux 中,有一个单独的小分区专用于保存 Linux 内核与引导信息。大多数情况下,我们不安装这个分区,这样在系统意外崩溃或重新引导时,就不会把它弄乱。

"root",第二部分
这些,我们讨论的是 GRUB,需要指定 GRUB 的 root 分区。进入 root 分区时,GRUB 将把这个分区安装成只读型,这样就可以从该分区中装入 Linux 内核。GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区,我们很快就会讨论这个功能。但现在,让我们输入 root 分区。在提示中输入 root,但不要按 Enter 键:
grub> root (
现在,按一次 Tab 键。如果系统中有多个硬盘,GRUB 将显示可能完成的列表,从 "hd0" 开始。如果只有一个硬盘,GRUB 将插入 "hd0,"。如果有多个硬盘,继续进行,在 ("hd2") 中输入名称并在名称后紧跟着输入逗号,但不要按 Enter 键。部分完成的 root 命令看起来如下:
grub> root (hd0,

"root",第三部分
现在,继续操作,再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。在我的系统中,按 Tab 键时得到以下列表:
grub> root (hd0, (tab)
Possible partitions are:
Partition num: 0, Filesystem type is ext2fs, partition type 0x83
Partition num: 1, Filesystem type unknown, partition type 0x82
Partition num: 2, Filesystem type unknown, partition type 0x7
Partition num: 4, Filesystem type is reiserfs, partition type 0x83
Partition num: 5, Filesystem type is reiserfs, partition type 0x83
如您所见,GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些,只需要好好理解 GRUB 新奇的硬盘和分区命名语法,然后就可以继续操作了。

GRUB 命名约定
到目前为止,您可能会感到一点困惑,因为 GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。在 Linux 中,第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,回来看一下 GRUB 提示,可以发现如果要引导 Linux 硬盘 hda5,应输入 "root (hd0,4)"。如果已经明白了 GRUB 硬盘/分区命名,您也许要调整当前 root 命令行,以使它指向保存 Linux 内核的分区。按以下格式输完命令,然后按 Enter 键:
grub> root (hd0,4) (hit enter)
Filesystem type is reiserfs, partition type 0x83

装入内核
现在已安装了 root 文件系统,到装入内核的时候了。在 GRUB 提示中,依次输入 "kernel"、空格、到内核的路径、空格、内核参数,如 root 参数(GRUB 将自动插入适当的 "mem=" 参数)。我在我的系统中输入:
grub> kernel /boot/vmlinux vga=0x314 root=/dev/hda5
[Linux-bzImage, setup=0x1200, size=0xe1a30]
请留意 "root=" 内核参数,它非常重要。它应该指向保存 root 文件系统的 Linux 分区。您也许要写下到目前为止输入的命令,这样在教程后面讲述如何创建 GRUB 引导菜单时,就可以迅速找到它们。
Root,内核,引导!
您已经安装了 root 文件系统并装入了内核。现在,可以引导了。只要输入 "boot",Linux 引导过程就将开始。

第四章 GRUB 内幕

重新调查引导软盘
如果一切正常,就可以使用使用 GRUB 引导盘来引导当前 Linux 发行版。如您所见,GRUB 是功能非常强大的引导装入器,它让您可以随意动态配置以进行引导。我将向您介绍如何创建 GRUB 引导菜单,这样就可以从菜单中进行 OS 选择,而不是输入三行命令来引导 Linux。但在动手之前,现在是深入了解 GRUB 幕后是如何工作的好时机。我将说明引导盘引导过程的工作原理,这样您就可以对 GRUB 有一个更好的评价和了解。

两阶段过程
要制作引导软盘,需要做两件事 — 将文件复制到软盘的 ext2 文件系统的 /boot/grub 目录中,运行 GRUB 的安装程序。运行 GRUB 安装程序时,GRUB 将 "stage 1" 装入器安装到软盘的引导记录中。它还将 stage 1 装入器配置成从 ext2 文件系统直接装入 stage2。通常,GRUB 通过在包含 stage2 数据的软盘上创建一列块来完成此操作,这样 stage1 装入 stage2 时不必知道 ext2 文件系统的任何情况。

但是,大多数情况下,GRUB 在安装完 stage1 之后,会立即将 stage1.5 装入器安装到引导记录中。这个特殊的 stage1.5 允许无需使用原始块列表就能从 ext2 文件系统装入 stage2,却要更灵活的标准基于路径的方法。GRUB 理解文件系统结构的这一能力使 GRUB 比 LILO 更强壮。例如,如果正好在整理引导盘文件系统的碎片,stage1 就可以找到 stage2(归功于 ext2 stage1.5)。而 LILO 就不能完成此项操作。因为 LILO 只能依赖于映射文件,每次更新内核或在磁盘上物理移动数据时,即使不更改路径,也需要重新运行它。

阶段 1、1.5 和 2
您也许会想知道:如果使用 FAT 而不是 ext2 文件系统创建引导盘,GRUB 是否可以工作。是的,它可以工作,因为在输入 "setup (fd0)" 时,GRUB 会安装与 root 文件系统类型匹配的 stage1.5。即使没有没有空间可以安装 stage1.5,GRUB 仍可以通过追溯到更原始的块列表,来装入 stage2。

搜索和恢复
在继续讨论之前,先研究一个与引导软盘相关的实用提示。由于 GRUB 的交互式性质,它为恢复软盘生成了一个很好的引导装入器。但是,如果将好的内核复制到引导盘上,那它就更好了。那样,即使硬盘上的内核坏了或者被意外删除了,也可以追溯到引导盘内核,并启动和运行系统。要将备用内核复制到引导盘,执行以下操作:
# mount /dev/fd0 /mnt/floppy
# cp /path/to/bzImage /mnt/floppy/boot
# umount /dev/fd0
现在,软盘已包含备用内核,可以在 GRUB 中使用它来引导 Linux 发行版,操作如下:
grub> root (fd0)
grub> kernel /boot/bzImage root=/dev/hda5 (将 /dev/hda5 更改成想要引导的分区名称)
grub> boot

硬盘引导
好,现在如何将 GRUB 安装到硬盘上?这个过程几乎与引导盘安装过程一样。首先,需要决定哪个硬盘分区将成为 root GRUB 分区。在这个分区上,创建 /boot/grub 目录,并将 stage1 和 stage2 文件从 /usr/share/grub/i386-pc 复制到该目录中。可以通过重新引导系统并使用引导盘,或者使用驻留版本的 GRUB 来执行后一步操作。在这两种情况下,启动 GRUB,并用 root 命令指定 root 分区。例如,如果将 stage1 和 stage2 文件复制到 hda5 的 /boot/grub 目录中,应输入 "root (hd0,4)"。现在,只差一步。

硬盘引导,续
接着,决定在哪里安装 GRUB — 在硬盘的 MBR,或者如果与 GRUB 一起使用另一个“主”引导装入器,则安装在特定分区的引导记录中。如果安装到 MBR,则可以指定整个磁盘而不必指定分区,如下(对于 hda):
grub> setup (hd0)
如果要将 GRUB 安装到 /dev/hda5 的引导记录中,应输入:
grub> setup (hd0,4)
现在,已安装 GRUB。引导系统时,应该立即以 GRUB 的控制台方式结束(如果安装到 MBR)。现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。

引导菜单
要创建菜单,只需在 /boot/grub 中创建一个简单的文本文件 menu.lst。如果将它放在正确位置,它将在 root GRUB 驱动器的 stage1 和 stage2 文件的旁边。这里是一个样本 menu.lst 文件,可以将它作为一个您的菜单的基础:
default 0
timeout 30
color white/blue blue/green
title=Boot Linux
root (hd0,4)
kernel /boot/bzImage root=/dev/hda5
title=Boot Linux using initrd
root (hd0,5)
kernel /boot/bzImage root=/dev/loop0 init=/initdisk.gz
initrd /initdisk.gz
title=Windows NT
root (hd0,3)
chainloader +1
我将在以下的屏面中说明 menu.lst 格式。

理解引导菜单
引导菜单很容易理解。前三行设置缺省菜单项(项目号 0,第一个)、设置超时值(30 秒),并选择整个菜单的一些颜色。
接着的三行配置 "Boot Linux" 菜单项。要创建手工引导命令系列之外的菜单项,只要添加一行 "title=" 作为第一行,并从最后一行中除去 "boot" 命令(GRUB 会自动添加这个命令)。
接着的四行显示了如何使用 GRUB 来引导 initrd(初始 root 磁盘),如果您愿意的话。现在,讨论最后三行……
链式装入器
这里是示例 menu.lst 的最后三行……
title=Windows NT
root (hd0,3)
chainloader +1
这里,我添加了一项来引导 Windows NT。要完成此操作,GRUB 使用了“链式装入器”。链式装入器从分区 (hd0,3) 的引导记录中装入 NT 自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 — 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。

 
第五章 总结

GRUB 的弹性
GRUB 最好的优点之一就是其强健的设计 — 在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置,不必重新安装 GRUB。事实上,如有必要,只要更新 menu.lst 文件即可,一切将保持正常。
只有少数情况下,才需要将 GRUB 引导装入器重新安装到引导记录。首先,如果更改 GRUB root 分区的分区类型(例如,从 ext2 改成 ReiserFS),则需要重新安装。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由于它们来自更新版本的 GRUB,很有可能要重新安装引导装入器。其它情况下,可以不必理睬!

优秀的 GRUB 参考资料
我们在这里只是介绍了 GRUB 的一部分。例如,可以使用 GRUB 来执行网络引导,引导 BSD 文件系统,或更多操作。另外,GRUB 有许多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,请阅读 GRUB 出色的 GNU 文档。只要在 bash 提示中输入 "info grub" 就可以阅读该文档。
希望您喜欢本教程,喜欢 GRUB (Grand Unified Boot Loader) 的强大功能和灵活性!

#apt-get update //升级镜像文件列表
#apt-get install vim //刚开始的vi不好用,而我们又少不了它
#apt-get install hotplug hwtools mdetect //一组加强型的硬件驱动和工具
#apt-get install kernel-image-XXX //升级内核,我的升级到了2.6.8-1
#apt-get install xserver-xfree86 //安装X服务器
#apt-get install xfonts-base //安装用于X的基本字体
#apt-get install locales //本地化支持,对我们来说,就是中文支持的基础
#apt-get install xfonts-intl-chinese //一些字体
#apt-get install ttf-arph* //还是字体,文鼎的ttf字体
#apt-get install xbase-clients //startx要用到的包
#apt-get install gnome //安装自己喜欢的桌面管理器
#apt-get install gdm //X的登录管理器

#dpkg-reconfiguer xserver-xfree86 
                //X配置。注意自己显卡的选择,包括显存大小,显示器的参数
#dpkg-reconfiguer locales 
                //本地化配置。选gb2312.1980等中文字体,别忘了繁体中文哦@_@

#startx //起动X窗口。如果失败,重新进行X配置

其他软件的安装,因人而异:
#apt-get install fcitx //小企鹅中文输入法
#apt-get install cce //console控制台下的中文环境
#apt-get install lftp //ftp客户端
#apt-get install hdparm //打开硬盘速度的工具

# 理解 GNU/Linux

        "UNIX 是简单的,你不需要成为天才也能理解这种简单"

        由于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 玩。

        你支持 Linux,你喜欢 Linux,你能从中感觉到快乐,这非常好。你现在只需要明白的是:Linux 从来就不是一个玩具,它是天才UNIX的后代。UNIX 是自晶体管发明以来最伟大的发明,它从诞生那一天开始就比 Windows 的设计出色。Linux 并不需要追赶 Windows,不需要打垮微软,它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。其它UNIX很多都已经败在Linux脚下,更何况Windows!

        你如果出现了以上的情况,说明你的思想受到了 Windows 的某种潜移默化的影响和误导。你没有能够从本质上理解存在于 Linux 身上的 UNIX 思想。UNIX的设计者 Dennis Ritchie 说:“Unix is simple. It just takes a genius tounderstand its simplicity.” 但是我不这么认为,因为我不是一个天才,但是我却勇敢的把Windows完全删除掉,半年之后我体会到了 UNIX 的思想和好处。因为我相信这样的信念:“Windows 能办到的事 Linux 一定能办到,而且办的更好。”

        这小节开头的话应该改成:“Unix 是简单的,但是在这个冲斥着 Windows 错误观念的世界,你需要信念和勇气才能理解它的简单!” 我下面就告诉你一些我理解到的东西。

# 微软的地位

        微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我认识的 MIT,Stanford 的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商业宣传和垄断经营的小公司。这个“小”并不是说它人少,钱少,而是说它先进技术少。

        我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了VC+MFC 作为平台。我在分析算法时还得到 Fortune 很热情的鼓励,寄给我一份资料,还多次回信耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给Fortune,他回信说:“对不起。我机器上没有 MFC。” 话说的很客气,但是我已经感觉到了他对 Windows 的不屑。然后我把 MFC 静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起我,而是确实有难处。

        你能感觉到这位科学家对微软和 Windows 是什么态度了吧?不是反感,而是他心里根本没有 Windows 这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系呢。我送他们软件,我捐钱盖大楼,我找图灵奖获得者来演讲!

        好了,现在全国的大学包括清华,几乎所有人机器必装盗版 Win2000, Office XP,学校的选课系统是非IE不能正确浏览,论文用 Word 编辑,演示用ppt做,连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 是老百姓用的,要求别那么高”,“微软那么有钱,以后想超过 UNIX 还不容易吗?”……

# 发达国家的计算机教育

        我前段时间在 USENET 发文问有关 Scheme 语言的问题时,认识了一位丹麦人。他解决了我所有的问题,并且建议我阅读一些很“深奥”的有关程序语言语法,文法的书,他告诉我很多网站可以学习 LISP,Scheme,人工智能,算法。他叫我看Jonathan Rees 的论文。他还打包给我寄过来一份 MIT 的 "How to DesignPrograms"。他说他在自己的 PC 机上装的是 Linux,他用 Emacs 编辑,运行Scheme 程序。他对 Emacs 的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个 Scheme 解释器。这对于我来说是望尘莫及了。

        他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他的情况。原来,她是丹麦一所普通高中的计算机老师!注意我换了人称代词!

        她说她在高中里讲授程序设计和算法,计算机语言文法分析。她说用 Scheme,她的学生不用再为指针越界,内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。

        天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计算机教育如果继续这样下去,只会沿着弯路越走越远!

# 微软和它的朋友们的如意算盘

        下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是100 多美元,每次升级又是几乎同样的价钱。Windows NT 还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。这个奇怪的现象被通用汽车公司的总裁比喻为:“你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱,每开100英里要大修一次,每过一年要换一次引擎。”

        花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上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 能干而 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 下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。

        我曾经也犯过这样的错误,优秀的 FVWM, lftp, Mutt, wget 都被我忽略过!当我找回它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 :) 用这些程序你可以改变它们的一切,我第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学看到 FVWM 都说:“哇!真漂亮。”

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

        很多人很关心 Open Office, Star Office, AbiWord, … 他们多么盼望有一天某一个 Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你永远也不可能有那一天。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文档格式!它一定会不断变化 doc 文档的内部结构,隐藏一些秘密,让其它公司的程序打开 doc 文档时总是有某种问题,从而你必需购买Microsoft Office 和 Windows。

        你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是 Linux或者其它类型的 UNIX,他们没有 Word 可用,怎么处理文档呢?这么多年没有一个像 Open Office 的程序出现,难道大家没有办法写文档吗?

        显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的PDF幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff,LaTeX, SGML 等东西可以处理文档,而且它们比起 Word 都要高明的多。Word 显然被这些大拿忽略了,以至于很久以来没有人想在 Linux 下开发一个类似 Word的程序,除非某些公司想抢微软的饭碗。

        很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和 PowerPoint。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离开 Windows.

# Windows 能做的那些没用的事情 Linux 永远做不好

电脑游戏

        有些人说 Linux 下不能玩 Windows 下所能得到的所有游戏。的确,Linux 下虽然也有少量的游戏,比如 Quake。但是它没有 Counter Strike, 没有 Star Craft,……

        并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。

        你可以在 CS 里杀人,你可以在 Tomb Raider 里探险,你甚至可以在 TonyHawk’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!

        有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus 在内,没有一个人用 IDE,有的人用 VIM,有的用 Emacs,只有 Linus 说“GNU Emacs is evil”,但是其实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了程序文件,然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。

        我以前也编过 Windows 程序:应用程序,驱动程序。但是我没有用 VC 的 IDE。Linux 教育了我,我会在命令行调用 CL,我知道 CL 才是 VC 的编译器。我可以在 cygwin 的 Makefile 里使用 CL。我还知道 CL 的参数都有什么用处。但是这些不是一个从一开头就用 IDE 的人能很快理解到的。

        我相信: IDE is evil。我有一些用 Windows 的 IDE 写程序的朋友,他们对那套东西已经很精通了。但是我却惊奇的发现,他们竟然把编译器和汇编器的概念都分不清楚,甚至有的人连“编辑器”和“编译器”都搞混淆了!他们只知道在一个窗口里输入了代码,点击一个按钮就可以编译程序,但是这里面到底是怎么工作的,他们不知道!他们被盖在上面的窗口挡住了视线,甚至会以为那个按钮就是编译器!

        他们对那些 IDE 的热键背的滚瓜烂熟,但是我却看到他们在一个函数一个函数的把别人的 ANSI 风格的代码变成 VC 的风格。想想这件事在 VIM 里有多么简单,一瞬间就可以搞定。

        为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX 的设计思想了。首先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不上 gdb, ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的很好的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套IDE,但是这套 IDE 的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不能保持原来的某些东西。

        而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM 里可以调用 GNU make,make 可以调用 gcc, ld, … 实际上 make 能帮你很多忙。make的出错信息可以被 VIM 捕获,VIM 能帮你在源程序里定位。你如果喜欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd 来显示各种数据结构之间的关系。你还可以在 Emacs 里调用 gdb,那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可以编辑很多其它东西,比如信件,LaTeX 文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使用 VIM,这样就更方便了。

释放内存

        我在 Windows 下做过的一件最傻的事情莫过于“释放内存”了。有一天我看到一个 Windows 程序说:“这个程序可以帮你把大量内存释放出来给一个很大的程序用。”我试了一下,居然一下把我的 64M 内存释放出来 48M!我高兴极了。现在想一想,那是多么傻的事情,那么多的内存留着干什么?不用白不用啊!一操作系统,居然还需要别人写的程序来释放内存,那是什么样的操作系统?

        在 Linux 下用 free 命令,你会发现你的内存几乎每时每刻都快要被用完。那是因为 Linux 把大部分内存用来作为磁盘缓冲了。Linux 有比 Windows 先进的磁盘缓冲技术。你有没有发现你往硬盘写数据的时候,很快就完成了?那是因为 Linux在内存里有很多磁盘缓冲区,你要写到硬盘上的数据先被写到了这些内存里,然后 Linux 就告诉你“拷贝完成”,当你马上又想删除刚才写入的某些数据时,Linux 只是把数据从内存里移除,然后报告“删除完成”。在一定的间隔时间后,Linux 才把数据写回硬盘,这样不但高效,避免了多次硬盘操作,而且减少了文件的不连续,也就是减少了“碎片”。Windows 当然也有磁盘缓冲,但是由于它内存管理的低效率,它不敢把大量内存都用来作为磁盘缓冲,因为它没有能力在用的时候随时把内存收回来。

# 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 必定是你的好伙伴。

# 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,它收到这样的提示时,可以答应工具条程序的这个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!一切窗口乖乖听话,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,这就是为什么 helloooo 诞生在 Linux 而不是 Windows。我曾经试图从Windows + Exceed + SecureCRT ssh 登录到 Sun 机器,然后通过 ssh 的隧道(X11 tunnel)把 X 程序传到 Exceed 上运行,但是搞了两天都没有成功!而在Linux 下这个事情根本就是不用怎么配置的,OpenSSH 和 XFree86 本来就是完美结合,只要打开 ssh 的 "forward X11" 选项就什么都搞定了。

        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过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。

# 结论

        我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和Windows 灌输在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶Windows,因为追赶 Windows =倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现的。” UNIX,Xwindow, TeX 虽然都比Windows先出现,但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。

        勇敢的拿起像 bash, FVWM, VIM, Emacs, Mutt, lftp …… 这样强大的程序,不要再埋怨“Linux 为什么不能像 Windows 那样”,不要再浪费时间试用这样那样的程序,不要再忙着升级。是你需要改变而不是 Linux 和 UNIX,Linux 现在就可以成为你的好朋友。你需要认识它,了解它,信任它,才能完全的靠它来高效的工作,省出时间来处理世界上更加值得处理的事情。

  职场中的人际关系说复杂也简单,不外乎与上司的关系、与下属的关系、与其他非直属同事的关系、与工作相关的外界的关系4种。很难说哪一种关系更紧要,它们都直接影响到我们个人的工作业绩和工作情绪。事实上,我的经验认为,人际关系的好坏首先取决个人的性格和经历的人事,其次取决于相处的技巧。所以,在职场中修炼自己的性格远比照书“一二三”地练习技巧有效的多。

  以下的建议适合与所有人相处,因为这关乎人的品质和素养,是我们通常所谓的“内功”,是建立一切人际关系的基本。

  1.待人真诚,乐于帮助。人与人彼此不同,只有善于发现别人优点,接纳别人的人,才能赢得大家普遍的欢迎。

  2.换位思考,理解和体谅别人价值取向。

  3.礼貌而不必谦卑,保持适当距离,防人之心不可全无。

  4.不公开臧人是否,不轻易流露对他人的喜恶,泄露隐私。

  5.善于拒绝自己做不了的事或承担不了的责任。

  与上司相处

  高质量履行自己职责,完成工作任务是赢得与上司良好关系的前提。对于那些工作业绩无法量化的工作来说,了解上司的管理风格十分必要,因为这会影响你决定与之沟通的方式。直截了当还是委婉措辞,当事时说还是事后再说。上司的所为并非全部完美,唯上司是从也无必要,要让上司接纳你的观点和方案,应在尊重的氛围里,有礼有节、有分寸地磨合。不过,在提出质疑和意见前,一定要拿出详细的、足以说服对方的资料计划。

  与下属相处

  职位上有差异,人格上都是平等的,责任和权利并不是炫耀和得意的资本。所以在和下属建立良好关系时,更要经常换位思考,帮助下属,其实是帮助自己,因为下属的积极性发挥得愈好,工作就会完成得愈出色,也让你自己获得了更多的尊重。身先士卒、宽以待人仍然是值得提倡的对下属的态度。此外,选择合适的批评方式和采取有效的与上司沟通方法一样重要,稍一不慎就可能招致敌意和抵触。

  与同事相处

  没有一个部门可以独立成事,与非直属同事相处的最大问题可能就是各自为政了。在办公室里上班,与同事相处得久了,彼此都有了一定了解。作为同事,我们没有理由苛求人家为自己尽忠效力。要获得支持,先要体谅别人。彼此工作有轻重缓急,所以在无事时建立良好关系是关键,有事时自然好说话。当然,支持应慎重。支持意味着接纳,而一味地支持只能导致盲从,也会滋生拉帮结派,影响公司决策层对你的信任。

  与外界关系

  销售靠客户关系,行政要找到好的办公用品的供应商,市场少不了和广告公司、媒体打交道……这些关系的建立是我们工作内容的一部分。虽然,这些关系功利的内含占了主要,但仍需要真诚相待,公私兼顾。更重要的是,要让对方也能见到利益所在,“双赢”而不是独享才能保持长期的良好关系,甚至可能带来意想不到的收获。