2007年06月01日

http://certification.safaribooksonline.com/?uicode=intelcert

2007年05月14日

Ubuntu: English Locale Support Chinese Input

1、设置/etc/environment,若Locale为en_US,确保列表中有如下几行:

LANG="en_US.UTF-8"LANGUAGE="en_US:en"LC_CTYPE="en_US.UTF-8"

其中的LC_CTYPE亦可设置为:

#1 LC_CTYPE="zh_CN.UTF-8"

但在某些软件中会将中文显示为方框,如在NetBeans中。或者设置为:

#2 LC_CTYPE="zh_CN.GBK"

但某些应用如GTK+会不予以支持该编码。当然,应用方面不会有什么问题。#1/2#之后不需要进行下一步的设置,重启X即可输入中文,和CONTROL+SPACE调出输入法。

2、新建/etc/X11/Xsession.d/75input,内容如下:

XMODIFIERS="@im=SCIM"GTK_IM_MODULE=scimscim -d

3、安装输入法:

sudo aptitude install scim-pinyin im-switch

im-switch -s scim_xim -z default

4、重启X,OK。

2007年02月13日

C++ Interview Questions

These are Some of the MOST IMPORTANT and Frequently Asked C++ Questions in Interviews ( by Alex Bykov). These questions are good for quick brush up in C++ but if you want the proper C++ FAQ, than check our C++ FAQ which I feels covers every aspect of C++.

Anyway here we go…

How do you rank your C++ skills on a scale of 1 to 10?

This is often the first question you will hear on an interview for a C++ contract. You will be tempted to rate yourself high, and you should. This is your chance to convince the client that you are just what he is looking for–an assertive and knowledgeable professional who will be productive either working on a team or on your own. Naturally, though, you should be able to support the ranking you gave yourself by doing well on the interview. This article will help you prepare for your C++ interview.

I put together a list of 40 questions that I have had to answer during numerous technical interviews in the past few years. You, too, will have to answer at least some of them during an interview. Even if you use C++ on a daily basis, it pays to go through the questions. Most of us, no matter how experienced, use only a segment of the language that we are most comfortable with. Brief answers are included, but you can find more information in the references listed.

Q1. Is there anything you can do in C++ that you cannot do in C?
A1. No. There is nothing you can do in C++ that you cannot do in C. After all you can write a C++ compiler in C.

Q2. What is the difference between C++ structure and C++ class?
A2. The default access level assigned to members of struct is public while the default access level assigned to a class is private.

Q3. What is encapsulation?
A3. Encapsulation is welding of code and data together into objects.

Q4. What is inheritance?
A4. Inheritance is a mechanism through which a subclass inherits the properties and behavior of its superclass.

Q5. What is polymorphism?
A5. In Greek this means "many shapes." As a consequence of inheritance and virtual functions, a single task (for example, drawing a geometrical shape) can be implemented using the same name (like draw()) and implemented differently (via virtual functions) as each type in object hierarchy requires(circle.draw() or rectangle.draw()). Later, when a polymorphic object (whose type is not known at compile time) executes the draw() virtual function, the correct implementation is chosen and executed at run time.

Q6. What would you say if you saw "delete this" while reviewing your peer’s code?
A6. You should never do this. Since compiler does not know whether the object was allocated on the stack or on the heap, "delete this" could cause a disaster.

Q7. What is the difference between public, protected, and private members of a class?
A7. Private members are accessible only by members and friends of the class. Protected members are accessible by members and friends of the class and by members and friends of derived classes. Public members are accessible by everyone.

Q8. What is the difference between non-virtual and virtual functions?
A8. The behavior of a non-virtual function is known at compile time while the behavior of a virtual function is not known until the run time.

Q9. What is a pure virtual function?
A9. "A pure virtual function is a function declared in a base class that has no definition relative to the base."

Q10. What is an abstract base class?
A10. It is a class that has one or more pure virtual functions.

Q11. What is the difference between MyClass p; and MyClass p();?
A11. MyClass p; creates an instance of class MyClass by calling a constructor for MyClass. MyClass p(); declares function p which takes no parameters and returns an object of class MyClass by value.

Q12. How do you know that your class needs a virtual destructor?
A12. If your class has at least one virtual function, you should make a destructor for this class virtual. This will allow you to delete a dynamic object through a pointer to a base class object. If the destructor is non-virtual, then wrong destructor will be invoked during deletion of the dynamic object.

Q13. Why were the templates introduced?
A13. Many data structures and algorithms can be defined independently of the type of data they work with. You can increase the amount of shared code by separating data-dependent portions from data-independent portions, and templates were introduced to help you do that.

Q14. What is a static member of a class?
A14. Static data members exist once for the entire class, as opposed to non-static data members, which exist individually in each instance of a class.

Q15. What feature of C++ would you use if you wanted to design a member function that guarantees to leave "thisÓ object unchanged?
A15. It is "const" as in: "int MyFunc (int test) const;"

Q16. Can you overload a function based only on whether a parameter is a value or a reference?
A16. No. Passing by value and by reference looks identical to the caller.

Q17. What is the difference between function overloading and function overriding?
A17. Overloading is a method that allows defining multiple member functions with the same name but different signatures. The compiler will pick the correct function based on the signature. Overriding is a method that allows the derived class to redefine the behavior of member functions which the derived class inherits from a base class. The signatures of both base class member function and derived class member function are the same; however, the implementation and, therefore, the behavior will differ.

Q18. Can derived class override some but not all of a set of overloaded virtual member functions inherited from the base class?
A18. Compiler will allow this, but it is a bad practice since overridden member functions will hide all of the inherited overloads from the base class. You should really override all of them.

Q19. What is the difference between assignment and initialization in C++?
A19. Assignment changes the value of the object that has already been constructed. Initialization constructs a new object and gives it a value at the same time.

Q20. When are copy constructors called?
A20. Copy constructors are called in three cases: when a function returns an object of that class by value, when the object of that class is passed by value as an argument to a function, and, finally, when you construct an object based on another object of the same class (Circle c1=c2;).

Q21. Why do you have to provide your own copy constructor and assignment operator for classes with dynamically allocated memory?
A21. If you don’t, the compiler will supply and execute the default constructor and the assignment operator, but they will not do the job correctly. The default assignment operator does memberwise assignment and the default copy constructor does memberwise copy. In both cases you will only assign and manipulate pointers to dynamic memory, which will lead to memory leaks and other abnormalities. You should write your own assignment operator and copy constructor, which would copy the pointer to memory so that each object has its own copy.

Q22. Does compiler guarantee that initializers will be executed in the same order as they appear on the initialization list?
A22. No. C++ guarantees that base class subobjects and member objects will be destroyed in the opposite order from which they were constructed. This means that initializers are executed in the order, which supports the above-mentioned guarantee.

Q23. What is function’s signature?
A23. Function’s signature is its name plus the number and types of the parameters it accepts.

Q24. What does extern "C" int func(int *, Foo) accomplish?
A24. It will turn off "name mangling" for this function so that one can link to code compiled by C compiler.

Q25. Why do C++ compilers need name mangling?
A25. Name mangling is the rule according to which C++ changes function’s name into function signature before passing that function to a linker. This is how the linker differentiates between different functions with the same name.

Q26. What is the difference between a pointer and a reference?
A26. A reference must always refer to some object and, therefore, must always be initialized; pointers do not have such restrictions. A pointer can be reassigned to point to different objects while a reference always refers to an object with which it was initialized.

Q27. How can you access the static member of a class?
A27. ::.

Q28. How are prefix and postfix versions of operator++() differentiated?
A28. The postfix version of operator++() has a dummy parameter of type int. The prefix version does not have dummy parameter.

Q29. What functions does C++ silently write and call?
A29. Constructors, destructors, copy constructors, assignment operators, and address-of operators.

Q30. What is the difference between new/delete and malloc/free?
A30. Malloc/free do not know about constructors and destructors. New and delete create and destroy objects, while malloc and free allocate and deallocate memory.

Q31. What is the difference between delete and delete[ ]?
A31. Delete deletes one object; delete[ ] deletes an array of objects.

Q32. Name two cases where you MUST use initialization list as opposed to assignment in constructors.
A32. Both non-static const data members and reference data members cannot be assigned values; instead, you should use initialization list to initialize them.

Q33. What is the difference between const char *myPointer and char *const myPointer?
A33. Const char *myPointer is a non constant pointer to constant data; while char *const myPointer is a constant pointer to non constant data.

Q34. Suppose that objects A, B, and C are instances of class MyClass (MyClass A, B, C;). How should you design an assignment operator so that the "A=B=C;" statement would be allowed by a compiler but "(A=B)=C;" would not be allowed by a compiler?
A34. Make operator=return a reference to a const object.

Q35. Is there any problem with the following: char *a=NULL; char& p = *a;?
A35. The result is undefined. You should never do this. A reference must always refer to some object.

Q36. Class B is derived from class A. Function f is A’s friend. Is f B’s friend as well?
A36. No. Friendship cannot be inherited.

Q37. What issue do auto_ptr objects address?
A37. If you use auto_ptr objects you would not have to be concerned with heap objects not being deleted even if the exception is thrown.

Q38. What happens when a function throws an exception that was not specified by an exception specification for this function?
A38. Unexpected() is called, which, by default, will eventually trigger abort().

Q39. Why should you prefer throw/catch mechanism to setjmp/longjmp?
A39. The main problem with longjmp() is that it does not destroy local objects properly.

Q40. Can you think of a situation where your program would crash without reaching the breakpoint which you set at the beginning of main()?
A40. C++ allows for dynamic initialization of global variables before main() is invoked. It is possible that initialization of global will invoke some function. If this function crashes the crash will occur before main() is entered.

If you feel comfortable answering these questions, then rest assured that your chances of impressing any interviewer are very high. Be prepared to know basic computer science concepts such as data structures, search and sort algorithms, basic database concepts, etc. The client’s needs will determine what particular branch of computer science you have to be familiar with, but you should always be ready to implement the stock, the queue, and the linked list data structures with either C or C++ programming languages. And know how to write your own version of strcpy (string copy) in C programming language since very often they ask you to do that.

2006年12月04日

在C语言中,假设我们有这样的一个函数:

int function(int a,int b)

调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算 机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须 由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。

栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈顶上方向栈中加入 数据,这个操作被称为压栈(Push),压栈以后,栈顶自动变成新加入数据项的位置,栈顶指针也随之修改。用户也可以从堆栈中取走栈顶,称为弹出栈 (pop),弹出栈后,栈顶下的一个元素变成栈顶,栈顶指针随之修改。

函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。

在参数传递中,有两个很重要的问题必须得到明确说明:

  • 当参数个数多于一个时,按照什么顺序把参数压入堆栈
  • 函数调用后,由谁来把堆栈恢复原装

在高级语言中,通过函数调用约定来说明这两个问题。常见的调用约定有:

  • stdcall
  • cdecl
  • fastcall
  • thiscall
  • naked call

stdcall调用约定

stdcall很多时候被称为pascal调用约定,因为pascal是早期很常见的一种教学用计算机程序设计语言,其语法严谨,使用的函数调用约 定就是stdcall。在Microsoft C++系列的C/C++编译器中,常常用PASCAL宏来声明这个调用约定,类似的宏还有WINAPI和CALLBACK。

stdcall调用约定声明的语法为(以前文的那个函数为例):

int __stdcall function(int a,int b)

stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸

以上述这个函数为例,参数b首先被压栈,然后是参数a,函数调用function(1,2)调用处翻译成汇编语言将变成:

push 2 第二个参数入栈push 1 第一个参数入栈call function 调用参数,注意此时自动把cs:eip入栈

而对于函数自身,则可以翻译为:

push ebp 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复mov ebp,esp 保存堆栈指针mov eax,[ebp + 8H] 堆栈中ebp指向位置之前依次保存有ebp,cs:eip,a,b,ebp +8指向aadd eax,[ebp + 0CH] 堆栈中ebp + 12处保存了bmov esp,ebp 恢复esppop ebpret 8

而在编译时,这个函数的名字被翻译成_function@8

注意不同编译器会插入自己的汇编代码以提供编译的通用性,但是大体代码如此。其中在函数开始处保留esp到ebp中,在函数结束恢复是编译器常用的方法。

从函数调用看,2和1依次被push进堆栈,而在函数中又通过相对于ebp(即刚进函数时的堆栈指针)的偏移量存取参数。函数结束后,ret 8表示清理8个字节的堆栈,函数自己恢复了堆栈。

cdecl调用约定

cdecl调用约定又称为C调用约定,是C语言缺省的调用约定,它的定义语法是:

int function (int a ,int b) //不加修饰就是C调用约定int __cdecl function(int a,int b)//明确指出C调用约定

在写本文时,出乎我的意料,发现cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。所不同的是,函数本身不 清理堆栈,调用者负责清理堆栈。由于这种变化,C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。对于前面的function函数,使 用cdecl后的汇编码变成:

调用处push 1push 2call functionadd esp,8 注意:这里调用者在恢复堆栈被调用函数_function处push ebp 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复mov ebp,esp 保存堆栈指针mov eax,[ebp + 8H] 堆栈中ebp指向位置之前依次保存有ebp,cs:eip,a,b,ebp +8指向aadd eax,[ebp + 0CH] 堆栈中ebp + 12处保存了bmov esp,ebp 恢复esppop ebpret 注意,这里没有修改堆栈

MSDN中说,该修饰自动在函数名前加前导的下划线,因此函数名在符号表中被记录为_function,但是我在编译时似乎没有看到这种变化。

由于参数按照从右向左顺序压栈,因此最开始的参数在最接近栈顶的位置,因此当采用不定个数参数时,第一个参数在栈中的位置肯定能知道,只要不定的参数个数能够根据第一个后者后续的明确的参数确定下来,就可以使用不定参数,例如对于CRT中的sprintf函数,定义为:

int sprintf(char* buffer,const char* format,…)

由于所有的不定参数都可以通过format确定,因此使用不定个数的参数是没有问题的。

fastcall

fastcall调用约定和stdcall类似,它意味着:

  • 函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈
  • 被调用函数清理堆栈
  • 函数名修改规则同stdcall

其声明语法为:int fastcall function(int a,int b)

thiscall

thiscall是唯一一个不能明确指明的函数修饰,因为thiscall不是关键字。它是C++类成员函数缺省的调用约定。由于成员函数调用还有一个this指针,因此必须特殊处理,thiscall意味着:

  • 参数从右向左入栈
  • 如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数压栈后被压入堆栈。
  • 对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈

为了说明这个调用约定,定义如下类和使用代码:

class A{public:   int function1(int a,int b);   int function2(int a,...);};int A::function1 (int a,int b){   return a+b;}#include int A::function2(int a,...){   va_list ap;   va_start(ap,a);   int i;   int result = 0;   for(i = 0 ; i < a ; i ++)   {      result += va_arg(ap,int);   }   return result;}void callee(){   A a;   a.function1 (1,2);   a.function2(3,1,2,3);}

callee函数被翻译成汇编后就变成:

//函数function1调用0401C1D push 200401C1F push 100401C21 lea ecx,[ebp-8]00401C24 call function1 注意,这里this没有被入栈//函数function2调用00401C29 push 300401C2B push 200401C2D push 100401C2F push 300401C31 lea eax,[ebp-8] 这里引入this指针00401C34 push eax00401C35 call function200401C3A add esp,14h

可见,对于参数个数固定情况下,它类似于stdcall,不定时则类似cdecl

naked call

这是一个很少见的调用约定,一般程序设计者建议不要使用。编译器不会给这种函数增加初始化和清理代码,更特殊的是,你不能用return返回返回值,只能用插入汇编返回结果。这一般用于实模式驱动程序设计,假设定义一个求和的加法程序,可以定义为:

__declspec(naked) int  add(int a,int b){   __asm mov eax,a   __asm add eax,b   __asm ret }

注意,这个函数没有显式的return返回值,返回通过修改eax寄存器实现,而且连退出函数的ret指令都必须显式插入。上面代码被翻译成汇编以后变成:

mov eax,[ebp+8]add eax,[ebp+12]ret 8

注意这个修饰是和__stdcall及cdecl结合使用的,前面是它和cdecl结合使用的代码,对于和stdcall结合的代码,则变成:

__declspec(naked) int __stdcall function(int a,int b){    __asm mov eax,a    __asm add eax,b    __asm ret 8        //注意后面的8}

至于这种函数被调用,则和普通的cdecl及stdcall调用函数一致。

函数调用约定导致的常见问题

如果定义的约定和使用的约定不一致,则将导致堆栈被破坏,导致严重问题,下面是两种常见的问题:

  1. 函数原型声明和函数体定义不一致
  2. DLL导入函数时声明了不同的函数约定

以后者为例,假设我们在dll种声明了一种函数为:

__declspec(dllexport) int func(int a,int b);//注意,这里没有stdcall,使用的是cdecl

使用时代码为:

      typedef int (*WINAPI DLLFUNC)func(int a,int b);      hLib = LoadLibrary(...);      DLLFUNC func = (DLLFUNC)GetProcAddress(...)//这里修改了调用约定      result = func(1,2);//导致错误

由于调用者没有理解WINAPI的含义错误的增加了这个修饰,上述代码必然导致堆栈被破坏,MFC在编译时 插入的checkesp函数将告诉你,堆栈被破坏了。

2006年10月08日

Apples

Protects your heart

Prevents constipation

Blocks diarrhea

Improves lung capacity

Cushions joints

Apricots

Combats cancer

Controls blood pressure

Saves your eyesight

Shields against Alzheimer’s

Slows aging process

Artichokes

Aids digestion

Lowers cholesterol

Protects your heart

Stabilizes blood sugar

Guards against liver disease

Avocados

Battles diabetes

Lowers cholesterol

Helps stops strokes

Controls blood pressure

Smoothes skin

Bananas

Protects your heart

Quiets a cough

Strengthens bones

Controls blood pressure

Blocks diarrhea

Beans

Prevents constipation

Helps hemorrhoids

Lowers cholesterol

Combats cancer

Stabilizes blood sugar

Beets

Controls blood pressure

Combats cancer

Strengthens bones

Protects your heart

Aids weight loss

Blueberries

Combats cancer

Protects your heart

Stabilizes blood sugar

Boosts memory

Prevents constipation

Broccoli

Strengthens bones

Saves eyesight

Combats cancer

Protects your heart

Controls blood pressure

Cabbage

Combats cancer

Prevents constipation

Promotes weight loss

Protects your heart

Helps hemorrhoids

Cantaloupe

Saves eyesight

Controls blood pressure

Lowers cholesterol

Combats cancer

Supports immune system

Carrots

Saves eyesight

Protects your heart

Prevents constipation

Combats cancer

Promotes weight loss

Cauliflower

Protects against Prostate Cancer

Combats Breast Cancer

Strengthens bones

Banishes bruises

Guards against heart disease

Cherries

Protects your heart

Combats Cancer

Ends insomnia

Slows aging process

Shields against Alzheimer’s

Chestnuts

Promotes weight loss

Protects your heart

Lowers cholesterol

Combats Cancer

Controls blood pressure

Chili Peppers

Aids digestion

Soothes sore throat

Clears sinuses

Combats Cancer

Boosts immune system

Figs

Promotes weight loss

Helps stops strokes

Lowers cholesterol

Combats Cancer

Controls blood pressure

Fish

Protects your heart

Boosts memory

Protects your heart

Combats Cancer

Supports immune system

Flax

Aids digestion

Battles diabetes

Protects your heart

Improves mental health

Boosts immune system

Garlic

Lowers cholesterol

Controls blood pressure

Combats cancer

Kills bacteria

Fights fungus

Grapefruit

Protects against heart attacks

Promotes Weight loss

Helps stops strokes

Combats Prostate Cancer

Lowers cholesterol

Grapes

Saves eyesight

Conquers kidney stones

Combats cancer

Enhances blood flow

Protects your heart

Green Tea

Combats cancer

Protects your heart

Helps stops strokes

Promotes Weight loss

Kills bacteria

Honey

Heals wounds

Aids digestion

Guards against ulcers

Increases energy

Fights allergies

Lemons

Combats cancer

Protects your heart

Controls blood pressure

Smoothes skin

Stops scurvy

Limes

Combats cancer

Protects your heart

Controls blood pressure

Smoothes skin

Stops scurvy

Mangoes

Combats cancer

Boosts memory

Regulates thyroid

Aids digestion

Shields against Alzheimer’s

Mushrooms

Controls blood pressure

Lowers cholesterol

Kills bacteria

Combats cancer

Strengthens bones

Oats

Lowers cholesterol

Combats cancer

Battles diabetes

Prevents constipation

Smoothes skin

Olive Oil

Protects your heart

Promotes Weight loss

Combats cancer

Battles diabetes

Smoothes skin

Onions

Reduce risk of heart attack

Combats cancer

Kills bacteria

Lowers cholesterol

Fights fungus

Oranges

Supports immune systems

Combats cancer

Protects your heart

Straightens respiration

 

Peaches

Prevents constipation

Combats cancer

Helps stops strokes

Aids digestion

Helps hemorrhoids

Peanuts

Protects against heart disease

Promotes Weight loss

Combats Prostate Cancer

Lowers cholesterol

Aggravates
diverticulitis

Pineapple

Strengthens bones

Relieves colds

Aids digestion

Dissolves warts

Blocks diarrhea

Prunes

Slows aging process

Prevents constipation

Boosts memory

Lowers cholesterol

Protects against heart disease

Rice

Protects your heart

Battles diabetes

Conquers kidney stones

Combats cancer

Helps stops strokes

Strawberries

Combats cancer

Protects your heart

Boosts memory

Calms stress

 

Sweet Potatoes

Saves your eyesight

Lifts mood

Combats cancer

Strengthens bones

 

2006年09月21日

http://www-128.ibm.com/developerworks/aix/library/au-productivitytips.html?ca=dgr-lnxw07UNIX-Office-Tips

UNIX productivity tips

Useful command-line secrets for increasing productivity in the office

Level: Intermediate

Michael Stutz (stutz@dsl.org), Author, Consultant

19 Sep 2006

Using UNIX® in a day-to-day office setting doesn’t have to be clumsy. Learn some of the many ways, both simple and complex, to use the power of the UNIX shell and available system tools to greatly increase your productivity in the office.

Introduction

The language of the UNIX® command line is notoriously versatile: With a panorama of small tools and utilities and a shell to combine and execute them, you can specify many precise and complex tasks.

But when used in an office setting, these same tools can become a powerful ally toward increasing your productivity. Many techniques unique to UNIX can be applied to the issue of workplace efficiency.

This article gives several suggestions and techniques for bolstering office productivity at the command-line level: how to review your current system habits, how to time your work, secrets for manipulating dates, a quick and simple method of sending yourself a reminder, and a way to automate repetitive interactions.

Review your daily habits

The first step toward increasing your office productivity using the UNIX command line is to take a close look at your current day-to-day habits. The tools and applications you regularly use and the files you access and modify can give you an idea of what routines are taking up a lot of your time — and what you might be avoiding.

Review the tools you use

You’ll want to see what tools and applications you’re using regularly. You can easily ascertain your daily work habits on the system with the shell’s history built-in, which outputs an enumerated listing of the input lines you’ve sent to the shell in the current and past sessions. See Listing 1 for a typical example.

Listing 1. Sample output of the shell history built-in

$ history1 who2 ls3 cd /usr/local/proj4 ls5 cd websphere6 ls7 ls -l$

The actual history is usually kept in a file so that it can be kept through future sessions; for example, the Korn shell keeps its command history hidden in the .sh_history file in the user’s home directory, and the Bash shell uses .bash_history. These files are usually overwritten when they reach a certain length, but many shells have variables to set the maximum length of the history; the Korn and Bash shells have the HISTSIZE and HISTFILESIZE variables, which you can set in your shell startup file.

It can be useful to run history through sort to get a list of the most popular commands. Then, use awk to strip out the command name minus options and arguments, and pass the sorted list to uniq to give an enumerated list. Finally, call sort again to resort the list in reverse order (highest first) by the first column, which is the enumeration itself. Listing 2 shows an example of this in action.

Listing 2. Listing the commands in the shell history by popularity

$ history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -r

      4 ls      2 cd      1 who$

If your history file is large, you can run periodic checks by piping to tail first — for example, to check the last 1,000 commands, try:

$ history|tail -1000|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -r 

Review the files you access or modify

Use the same principle to review the files that you’ve modified or accessed. To do this, use the find utility to locate and review all files you’ve accessed or changed during a certain time period — today, yesterday, or at any date or segment of time in the past.

You generally can’t find out who last accessed or modified a file, because this information isn’t easily available under UNIX, but you can review your personal files by limiting the search to only files contained in your home directory tree. You can also limit the search to only files in the directory of a particular project that you’re monitoring or otherwise working on.

The find utility has several flags that aid in locating files by time, as listed in Table 1. Directories aren’t regular files but are accessed every time you list them or make them the current working directory, so exclude them in the search using a negation and the -type flag.

Table 1. Selected flags of the find utility

Flag Description
-daystart This flag starts at the beginning of the day.
-atime The time the file was last accessed — in number of days.
-ctime The time the file’s status last changed — in number of days.
-mtime The time the file was last modified — in number of days.
-amin The time the file was last accessed — in number of minutes. (It is not available on all implementations.)
-cmin The time the file’s status last changed — in number of minutes. (It is not available on all implementations.)
-mmin The time the file was last modified — in number of minutes. (It is not available on all implementations.)
-type This flag describes the type of file, such as d for directories.
-user X Files belonging to user X.
-group X Files belonging to group X.
-newer X Files that are newer than file X.

Here’s how to list all the files in your home directory tree that were modified exactly one hour ago:

$ find ~ -mmin 60 \! -type d 

Giving a negative value for a flag means to match that number or sooner. For example, here’s how to list all the files in your home directory tree that were modified exactly one hour ago or any time since:

$ find ~ -mmin -60 \! -type d 

Not all implementations of find support the min flags. If yours doesn’t, you can make a workaround by using touch to create a dummy file whose timestamp is older than what you’re looking for, and then search for files newer than it with the -newer flag:

$ dateMon Oct 23 09:42:42 EDT 2006$ touch -t 10230842 temp$ ls -l temp-rw-r--r--    1 joe        joe               0 Oct 23 08:42 temp$ find ~ -newer temp \! -type d 

The special -daystart flag, when used in conjunction with any of the day options, measures days from the beginning of the current day instead of from 24 hours previous to when the command is executed. Try listing all of your files, existing anywhere on the system, that have been accessed any time from the beginning of the day today up until right now:

$ find / -user `whoami` -daystart -atime -1 \! -type d 

Similarly, you can list all the files in your home directory tree that were modified at any time today:

$ find ~ -daystart -mtime -1 \! -type d 

Give different values for the various time flags to change the search times. You can also combine flags. For instance, you can list all the files in your home directory tree that were both accessed and modified between now and seven days ago:

$ find ~ -daystart -atime -7 -mtime -7  \! -type d 

You can also find files based on a specific date or a range of time, measured in either days or minutes. The general way to do this is to use touch to make a dummy file or files, as described earlier.

When you want to find files that match a certain range, make two dummy files whose timestamps delineate the range. Then, use the -newer flag with the older file, and use "\! -newer" on the second file.

For example, to find all the files in the /usr/share directory tree that were accessed in August, 2006, try the following:

$ touch -d "Aug 1 2006" file.start$ touch -d "Sep 1 2006" file.end$ find /usr/share -daystart -newer file.start \! -daystart -newer file.end 

Finally, it’s sometimes helpful when listing the contents of a directory to view the files sorted by their time of last modification. Some versions of the ls tool have the -c option, which sorts by the time of file modification, showing the most recently modified files first. In conjunction with the -l (long-listing) and -t (sort by modification time) options, you can peruse a directory listing by the most recently modified files first; the long listing shows the file modification time instead of the default creation time:

$ ls -ltc /usr/local/proj/websphere | less 

Time your work

Another useful means of increasing office productivity using UNIX is to time commands that you regularly execute. Then, you can evaluate the results and determine whether you’re spending too much time waiting for a particular process to finish.

Time command execution

Is the system slowing you down? How long are you waiting at the shell, doing nothing, while a particular command is being executed? How long does it take you to run through your usual morning routine?

You can get concrete answers to these questions when you use the date, sleep, and echo commands to time your work.

To do this, type a long input line that first contains a date statement to output the time and date in the desired format (usually hours and minutes suffice). Then, run the command input line — this can be several lines strung together with shell directives — and finally, get the date again on the same input line. If the commands you’re testing produce a lot of output, redirect it so that you can read both start and stop dates. Calculate the difference between the two dates:

$ date; system-backup > /dev/null; system-diag > /dev/null;\> netstat > /dev/null; df > /dev/null; date 

Test your typing speed

You can use these same principles to test your typing speed:

$ date;cat|wc -w;date 

This command works best if you give a long typing sample that lasts at least a minute, but ideally three minutes or more. Take the difference in minutes between the two dates and divide by the number of words you typed (which is output by the middle command) to get the average number of words per minute you type.

You can automate this by setting variables for the start and stop dates and for the command that outputs the number of words. But to do this right, you must be careful to avoid a common error in calculation when subtracting times. A GNU extension to the date command, the %s format option, avoids such errors — it outputs the number of seconds since the UNIX epoch, which is defined as midnight UTC on January 1, 1970. Then, you can calculate the time based on seconds alone.

Assign a variable, SPEED, as the output of an echo command to set up the right equation to pipe to a calculator tool, such as bc. Then, output a new echo statement that outputs a message with the speed:

$ START=`date +%s`;WORDS=`cat|wc -w`; STOP=`date +%s; SPEED=\> `echo "$WORDS / ( ( $STOP - $START ) / 60 )"|bc`;echo \> "You have a typing speed of $SPEED words per minute." 

You can put this in a script and then change the permissions to make it executable by all users, so that others on the system can use it, too, as in Listing 3.

Listing 3. Example of running the typespeed script

$ typespeedThe quick brown fox jumped over the lazy dog. The quick brown dog--                              ...--jumped over the lazy fox.^D

You have a typing speed of 82.33333333 words per minute.$
Back to top

Know your dates

The date tool can do much more than just print the current system date. You can use it to get the day of the week on which a given date falls and to get dates relative to the current date.

Get the day of a date

Another GNU extension to the date command, the -d option, comes in handy when you don’t have a desk calendar nearby — and what UNIX person bothers with one? With this powerful option, you can quickly find out what day of the week a particular date falls on by giving the date as a quoted argument:

$ date -d "nov 22"Wed Nov 22 00:00:00 EST 2006$

In this example, you see that November 22 of this year is on a Wednesday.

So, when it’s suggested that the big meeting be held on November 22, you’ll know right away that it falls on a Wednesday — which is the day you’re out in the field office.

Get relative dates

The -d option can also tell you what the date will be relative to the current date — either a number of days or weeks from now, or before now (ago). Do this by quoting this relative offset as an argument to the -d option.

Suppose, for example, that you need to know the date two weeks hence. If you’re at a shell prompt, you can get the answer immediately:

$ date -d '2 weeks' 

There are other important ways to use this command. With the next directive, you can get the day of the week for a coming day:

$ date -d 'next monday' 

With the ago directive, you can get dates in the past:

$ date -d '30 days ago' 

And you can use negative numbers to get dates in reverse:

$ date -d 'dec 14 -2 weeks' 

This technique is useful to give yourself a reminder based on a coming date, perhaps in a script or shell startup file, like so:

DAY=`date -d '2 weeks' +"%b %d"`if test "`echo $DAY`" = "Aug 16"; then echo 'Product launch is now two weeks away!'; fi
Back to top

Give yourself reminders

Use the tools at your disposal to leave reminders for yourself on the system — they take up less space than notes on paper, and you’ll see them from anywhere you happen to be logged in.

Know when it’s time to leave

When you’re working on the system, it’s easy to get distracted. The leave tool, common on the IBM AIX® operating system and Berkeley Software Distribution (BSD) systems (see Resources) can help.

Give leave the time when you have to leave, using a 24-hour format: HHMM. It runs in the background, and five minutes before that given time, it outputs on your terminal a reminder for you to leave. It does this again one minute before the given time if you’re still logged in, and then at the time itself — and from then on, it keeps sending reminders every minute until you log out (or kill the leave process). See Listing 4 for an example. When you log out, the leave process is killed.

Listing 4. Example of running the leave command

$ leaveWhen do you have to leave? 1830Alarm set for Fri Aug  4 18:30. (pid 1735)$ date +"Time now: %l:%M%p"Time now: 6:20PM$<system bell rings>You have to leave in 5 minutes.$ date +"Time now: %l:%M%p"Time now: 6:25PM$<system bell rings>Just one more minute!$ date +"Time now: %l:%M%p"Time now: 6:29PM$Time to leave!$ date +"Time now: %l:%M%p"Time now: 6:30PM$<system bell rings>Time to leave!$ date +"Time now: %l:%M%p"Time now: 6:31PM$ kill 1735$ sleep 120; date +"Time now: %l:%M%p"Time now: 6:33PM$

You can give relative times. If you want to leave a certain amount of time from now, precede the time argument with a +. So, to be reminded to leave in two hours, type the following:

$ leave +0200 

To give a time amount in minutes, make the hours field 0. For example, if you know you have only 10 more minutes before you absolutely have to go, type:

$ leave +0010 

You can also specify the time to leave as an argument, which makes leave a useful command to put in scripts — particularly in shell startup files. For instance, if you’re normally scheduled to work until 5 p.m., but on Fridays you have to be out of the building at 4 p.m., you can set a weekly reminder in your shell startup file:

if test "`date +%a`" = "Fri"; then leave 1600; fi

You can put a plain leave statement, with no arguments, in a startup script. Every time you start a login shell, you can enter a time to be reminded when to leave; if you press the Enter key, giving no value, then leave exits without setting a reminder.

Send yourself an e-mail reminder

You can also send yourself a reminder using a text message. Sometimes it’s useful to make a reminder that you’ll see either later in your current login session or the next time you log in.

At one time, the old elm mail agent came bundled with a tool that enabled you to send memorandums using e-mail; it was basically a script that prompted for the sender, the subject, and the body text. This is easily replicated by the time-honored method of sending mail to yourself with the command-line mailx tool. (On some UNIX systems, mail is used instead of mailx.)

Give as an argument your e-mail address (or your username on the local system, if that’s where you read mail); then, you can type the reminder on the Subject line when prompted, if it’s short enough, as in Listing 5. If the reminder won’t fit on the Subject line, type it in the body of the message. A ^D on a line by itself exits mailx and sends the mail.

Listing 5. Example of sending yourself a reminder with the mailx command

$ mailx joeSubject: Call VP on Monday^DCc:Null message body; hope that's ok$
Back to top

Automate your repetitive interactions

The Expect language (an extension of Tcl/Tk, but other variations are also available) is used to write scripts that run sessions with interactive programs, as if the script were a user interacting directly with the program.

Expect scripts can save you a great deal of time, particularly when you find yourself engaging in repetitive tasks. Expect can interact with multiple programs including shells and text-based Web browsers, start remote sessions, and run over the network.

For example, if you frequently connect to a system on your local intranet to run particular program — the test-servers command, for instance — you can automate it with an Expect script named servmaint, whose contents appear in Listing 6.

Listing 6. Sample Expect script to automate remote system program execution

#!/usr/bin/expect -fspawn telnet webserv4expect "login:"send "joe\r"expect "Password:"send "secret\r"expect "webserv4>___FCKpd___26quot;send "test-servers\r"expect "webserv4>___FCKpd___26quot;send "bye\r"expect eof

Now, instead of going through the entire process of having to run telnet to connect to the remote system, log in with your username and password, run the command(s) on that system, and then log out. You just run the servmaint script as given in Listing 6; everything else is done for you. Of course, if you give a password or other proprietary information in such a script, there is a security consideration; at minimum, you should change the file’s permissions so that you’re the only user (besides the superuser) who can read it.

Any repetitive task involving system interaction can be programmed in Expect — it’s capable of branching, conditionals, and all other features of a high-level language so that the response and direction of the interaction with the program(s) can be completely automated.

Back to top

Conclusion

In an office setting, UNIX systems can handle many of the tasks that are normally handled by standalone computers running other operating systems — and with their rich supply of command-line tools, they’re capable of productivity boosters that can’t be found anywhere else.

This article introduced several techniques and concepts to increase your office productivity using UNIX command-line tools and applications. You should be able to apply these ideas to your own office situations and, with a little command-line ingenuity, come up with even more ways to save time and be more productive.

Back to top

Resources

Learn

  • "Expect exceeds expectations" (developerWorks, April 2002): For a concise introduction to the Expect language, read Cameron Laird’s article.
  • "Hone your regexp pattern-building skills" (developerWorks, July 2006): This article gives examples of powerful, real-world regular expressions that can increase your office productivity.
  • "Tcl your desktop" (developerWorks, June 2006): Make your work desktop uncluttered and efficient by following the steps outlined in this article.
  • "Text processing with UNIX" (developerWorks, August 2006): This article demonstrates the power of UNIX command-line tools for processing text.
  • "Working smarter, not harder" (developerWorks, August 2006): Part 2 of the "Speaking UNIX" series contains a primer on the history built-in.
  • AIX and UNIX: Visit the developerWorks AIX and UNIX zone to expand your UNIX skills.
  • New to AIX and UNIX: Visit the New to AIX and UNIX page to learn more about AIX and UNIX.
  • developerWorks technical events and webcasts: Stay current with developerWorks technical events and webcasts.
  • Podcasts: Tune in and catch up with IBM technical experts.

Get products and technologies

  • leave utility: If your UNIX system doesn’t come with the leave utility, you can download a free copy from netbsd.org.
  • date tool: The GNU Project’s implementation of the date tool contains an extension for outputting the number of seconds since the UNIX epoch. Download a free copy from the GNU Project Web site.
  • IBM trial software: Build your next development project with software for download directly from developerWorks.
2006年06月05日

Yes.  I am.

7 years circling.

2006年05月26日

中国历史之十大经典反间毒计




之一,陈平间范曾

  白登幸曲逆,鸿门赖留侯。

  曲逆侯陈平,留侯张良都是汉高祖刘邦智囊团中顶儿尖儿的人物。很多人都熟知汉初三杰,萧何,张良和韩信,未免忽视了这位奇计百出的陈平。

  范曾是追随项羽叔父项梁起兵的老臣。项羽的手下猛将如林,但真正有战略头脑的谋士似乎只有范曾一人。当年鸿门宴上范曾几度发难,几乎致刘邦于死地,想必刘邦恨他入骨吧。范曾此人心黑手辣得可以,只是当不住项羽其时尚不够厚的脸皮。

  离间这位被项羽尊称亚父的能人,的确相当有难度,但难不到陈平。一次项羽的使者来访,陈平找人故意十分热诚地接待。大鱼大肉之下,又加上美女
歌舞助兴,使者也被感动得一塌胡涂,当然礼节性地说出代楚霸王项羽向诸位感谢的话来。谁知招待人员就此突然翻脸,撤下珍馐美女,换上粗茶淡饭,当着使者的
面说,我们还以为你是是亚父范曾派来的那,你倒是早说你是项羽派来的阿。
  使者回去把这件事一五一十地向项羽作了禀报,头脑简单的项羽当然怒火中烧,就此丧失了对范曾的信任。后来范曾几次直言相谏,更是惹得霸王
不高兴,终于被扫地出门。范曾已经是七十多岁的老人了,受了闷气,加上背上毒创发作,不久就负气归西。而他一死,项羽的末日也就不远了。
  陈平年青的时候姿仪甚美,却仍是一个类似韩信年轻时的小混混,而且他的问题更严重,传说和他嫂子有不清不楚的关系。后来他投军的时候有一
次渡河时不小心上了一艘黑船,就是水浒中衰人宋江上了无数次的那种。当然他不会像宋江那样束手待毙,但也不极端地武力反抗。他先是趁船主不注意把身上的钱
财丢入水中,然后主动提出帮船主划船,划了一会借口浑身大汗脱下自己的衣裳,赤条条地坐在船上,当然顺便把自己的破剑放在手边。船主见他衣衫虽然不俗,但
着实没有任何钱财可抢,何况他还带有武器,这种生意扎手得紧而且没有任何油水,不作也罢,老老实实地把他渡了过去。嘿嘿,刁滑如陈平又岂会死在此等宵小手
中?
  陈平生奇计无数,但他明白自己的计策阴险刻毒,也很少宣之于口。著名的白登之围,刘邦被数十万匈奴大军所困,全赖陈平的一则秘计解围。史书对这则秘计多有猜测,但谁也不知道真正是什么。



之二,“越级上访”

  记得每次坐火车北上南下的时候,就在铁路沿线的村庄墙壁上看到触目惊心的标语,“严禁越级上访”,“集体上访就是犯罪!”

  如今的干部真是难当,手下的百姓不服管束倒也罢了,竟然闹得要到北京上访这么严重,不过是调整具体政策多收了你们一点钱吗,还不是取之于民,用之于民?整天吵着要整治贪官,真正的贪官有多少,唉,老百姓如今谁和你讲辩证法?

  这些干部,平心而论厚黑的确是做的不错了,脸皮厚到标语写到全国人民都可以欣赏的地方,至于黑吗,对付那些昏了头想上访的愚民棍棒,手铐,打手,狼狗之类的少不了的吧。但是从技术上论,我看他们的效果未必很佳。

  明朝末年的太监们也有与相同的苦恼。当时东林党人的政潮汹涌彭湃,其中不少人被西厂东厂的人锁进了大狱。即使身陷大牢,这些人仍是不老实,整
天价地喊冤,想“越级上访”,直达天听。当然也难怪,太监们栽在他们身上的罪名大多是谋逆造反(可能即使卑污如他们也不好意思说这些清官贪赃吧),这更不
能被以终君爱国为己任的东林党人接受。自己死了倒也罢了,名节污了可是千古大事。
  当然只要皇帝不是太昏庸,也基本懂得一些平衡派系的帝王心术,东林党和阉党斗的好阿,只要闹得不是太过分,尽管去闹好了,什么时候他们不
闹了倒是真正让人忧心的事情。太监们也深通此理,当然更不敢让这些牢里的东林党人越级上访了,皇帝知道了很有可能派相对公正地第三方来调查,那麻烦就真的
大了。
  太监也有他们的狠辣手段,具体就是每当牢里的东林党人喊冤叫屈的时候,太监就派人假扮皇帝的钦差来听他们“平反”。这些东林党人见到钦差
当然感动得涕泪俱下,大诉冤情,假钦差听完以后,照例是一顿暴打。如此几次反复,弄得这些铁骨铮铮的东林党人也对皇帝的钦差彻底丧失信心。以后即使皇帝的
钦差真的来查,他们也不敢再诉冤情了。
  如今的干部们看古书的大概少了,也幸好如此,人间又少了很多有苦也说不出的冤情。



之三 温峤计间钱凤

  

  

  夜读,深为东晋名臣温峤才智折服。在那个风雨飘摇,王与马共天下的时代,连王导,陶侃这些中兴能臣对暗弱的朝廷也不谈不上百分百地尊敬,相比之下,从北方流亡回来的温峤对司马氏的忠心实在难得了。

  当时权臣王敦骄横跋扈,向来没把朝廷放在眼里,当然温峤成了他的眼中钉。温峤几次婉言相谏,王敦全然不理,于是温峤知王敦日后必反,干脆一反
常态,对王敦极尽恭维之能事,又加入他的阵营为其出谋划策,共同对付朝廷。王敦本人志大才疏,又全无识人之能,当然毫不设防地视他为知己。但是,王敦手下
有个温峤深深忌惮的心腹人物,钱凤,偏偏王敦对钱凤向来言听计从。温峤投钱凤所好,着意与之结交,可是钱凤非等闲之辈,表面上和他亲热无间,内心却着实戒
备。温峤深知自己瞒不过钱凤,但也无可奈何。
  王敦谋反的工作准备完毕,温峤心急如焚,但找不到合适的借口脱身向朝廷密报。正好丹阳太守出缺,这个关键的职位,非得要心腹人士担任不
可。王敦向温峤请教谁适合任此要职。王敦以退为进,向他推荐钱凤,王敦又把钱凤找来,当面询问他的意见,钱凤碍不住面子,反而推荐温峤。这时温峤故意推之
再三,王敦却当场拍板,指定温峤担当此职。
  温峤当然是喜不自胜,但还是对钱凤把握不准,他估计走后钱凤八成会向王敦密告,再加上钱凤此人甚有韬略,于是下定决心非把钱凤离间了不
可。在他出行前夜的送别宴会上,温峤离开自己的坐席走到每位客人的身边端酒以敬。当他走到钱凤身边的时候,还没等他喝,温峤就突然把他的酒杯打翻,醉态十
足地骂道,“你钱凤何等人,我温峤敬的酒你都敢不喝?”钱凤以为他喝醉,并不在意,但宴会终于是不欢而散。
  温峤脱身以后,钱凤果然向王敦告密,说温峤历来是朝廷的人,他投靠我们必有贰心。但是温峤已经棋先一招了,当初宴会的情况王敦是看在眼里
的。王敦一直以为钱凤和温峤是知交好友,甚至还相互极力推荐过,怎么就因为温峤临走之前喝醉了酒不小心得罪了你,你就挟私抱负?气度也太小了一点吧。于是
他不仅不听从钱凤的建言,还怀疑起他的人品了。王敦麾下钱凤算是个人才,然而即使是他也终于不被善用,王敦起兵的后果那是可想而知了。
  

  

之四:金刀计

   如果在中国离间史上非要排出个第一名,那么论计策之流畅,心肠之恶毒,mission之impossible,非得是王猛的金刀计不可,何况他要间的人都决非等闲之辈,一个是大秦天王苻坚,一位是后来后燕的皇帝慕容垂。

  
王猛在关中前秦当丞相的时候,当时天下又是类似三国时候的三分,潼关以东是慕容氏的燕国,长江流域(包括荆州,益州,扬州等等)是东晋的地盘。这三方都有
名冠一时的豪杰,前秦一方有被苻坚视作诸葛再世的王猛。王猛的施政方略与诸葛亮治蜀时相仿,也无愧他的名字,走得是刚猛严苛的法家之路,而他的功业相比六
出岐山而徒劳的诸葛亮,那是高得太多。正是在他的统领下,前秦攻灭了慕容燕国,统一了整个北方。东晋其时则有留下千古名言“既不能流芳后世,不足复遗臭万
载”的超级枭雄桓温和魏晋风度的集大成者,一代名士谢安。燕国方面有慕容家族的国之干臣慕容垂,天龙八部中的复辟狂慕容博父子拿出来的族谱中固然是写满了
密密麻麻的名字,但慕容垂应该是他们最为敬仰的一位先祖。枋头一战,纵横不可一世的桓温被年青的慕容垂的骑兵打得大败亏输,桓温赖以起家的精兵几乎损失殆
尽,弄得后来想篡位时都未免底气不足。这一段历史,将星闪烁,能人辈出,各方的角力在著名的淝水之战中达到高潮,并以出乎所有人意料的方式落幕,精彩程度
实在不下三国演义,只是没有罗贯中这样的大师为其写述,未免可惜。
  
当时慕容垂英雄了得,不免为太傅慕容评和太后可足浑氏所忌。二人联合起来整慕容垂,手法狠毒,如用巫蛊案处死了他深爱的王妃段氏等等,慕容垂忍无可忍,终
于率领全家投奔关中苻坚。其实以慕容垂的英名加才智,发动叛乱作掉这两个政敌易如反掌,只是他不忍心同族相残宁可自己出走。其实他这一走,几乎和灭了燕国
没什么分别。
  
前秦的皇帝苻坚在中国历史上的若多皇帝中,以心胸宽广而论,算的上是第一。对于这位大名鼎鼎的慕容垂举家来投,高兴得几乎是倒履相迎。苻坚的这般盛情,慕
容垂虽然是感动得一塌糊涂,王猛看在眼里心中难免不是滋味,万般忌妒之下,遂生了除掉慕容垂的念头。但是苻坚用人不疑,慕容垂精明干练,离间他们谈何容
易?
   平心而论,王猛一生为政为人,除了这件事以外,都抗得起光明磊落四个大字,只是这种人物一旦施起计来,也是恶毒无比,比起燕国慕容垂的政敌们则是高明得太多。

  
王猛唯一可利用的资源就是慕容垂新附,他的家族人心尚不稳。于是在他率军征伐燕国的时候,向苻坚请求以慕容垂最喜欢的长子慕容令出任参军。出发的前一夜,
慕容垂设宴饯行,当然有心让王猛在军中多照顾他的儿子。王猛和他一起喝酒谈心,席间喝到高处便激动起来,拉着慕容垂地手要和他结拜兄弟。慕容垂到底是鲜卑
胡人,论心机深沉哪里及得上汉人王猛,眼花耳热后也是指天划地,约为兄弟。王猛顺势说,“我此次远走,兄弟却无什么东西可以睹物思人,未免遗憾”,并送给
慕容垂自己生平最爱的一方镇纸以兹纪念,慕容垂大是感动,想也不想就解下自己的家传宝刀送给王猛。
  
得了这柄金刀,王猛开始了第二步行动。在大军开拔到洛阳的时候,王猛招来了帐下一个叫金熙的小卒,重金收买,让他跑到慕容令的帐中出示金刀,并假传他父亲
的话说,“你我父子之所以投奔秦国,无非是避祸而已。如今王猛心胸狭隘,数次想排挤我们,而苻坚表面上对我们礼让有加,但其心实在难测。估计我们父子仍然
难免一死,古人尚云,狐死首丘,况且最近听说燕国皇帝于我们走后颇有悔意。我现在已经在逃亡的路上了,你不走更待何时?事起仓促,来不及写信,特派人传口
信,以金刀为证。”慕容令听后,又惊又疑,慕容垂赠王猛金刀的事情他并没有听说,而父亲企图二次叛逃却丝毫没有征兆,但这位来传话的金熙曾经在慕容垂府中
打过下手,又有金刀为证,言之凿凿,不由得不信。当时慕容令急得六神无主,又根本无法与千里之外的老爹取得联系,(呵呵,建议摩托罗拉手机不妨以此题材作
广告。)思前想后,还是连夜投奔燕国。
  
王猛等他一逃,马上急表上告朝廷,慕容垂闻讯,当真是祸从天降,连辩解也不敢辩解,仓促出逃,结果在蓝田被追兵赶上,押回长安。慕容垂自忖必死,谁知苻坚
宽容千古第一的帽子真的不是白带的,他立刻赦免了慕容垂,安慰道,你儿子心存故国,本身就无可厚非,我只是为他遗憾而已,更不会牵连到你们这些人阿。老天
照应,慕容垂躲过了这一劫,而他的儿子慕容令就惨了,跑到燕国境内,却发现老爸根本没来,顿时天旋地转,昏倒在地,燕国对他这个莫名其妙的二次叛徒当然心
存芥蒂,干脆流放到遥远的沙城。慕容令仍不甘心,在沙城组织旧部企图第三次反叛,却被当地官员抓住就地正法。
  
王猛此计虽然最终没有要得了慕容垂的命,但还是葬送了慕容垂的身后希望所在,他最优秀的儿子慕容令。慕容令在沙城组织一帮乌合之众和燕国官军作最后徒劳抵
抗的时候,一定还没想明白到底是谁把他害得这么惨,慕容垂后来终于再造燕国(史称后燕)坐上龙椅的时候,一定一边因后继无人而痛惜“太子”慕容令的无谓身
亡,一边只怕仍为王猛的毒计而感到不寒而栗。
   慕容垂死后他的儿子中少了慕容令这样的领军人物,各不相服以至内讧,后燕终于二世而亡。


之五:贾后与骊姬

  

   古语有云,"黄蜂尾后针,最毒MM心。“如今的时代谁还敢说这种话,不被众多激进的feminist当街格毙才怪。但是纵观史书,巾帼们如果狠下心来,那是一点也不下须眉的。

  
史上著名的暴悍皇后贾南风就是如此。她的老公晋惠帝是个出了名的低能儿,大荒之年大臣向他奏报天下百姓嗷嗷待哺,几乎以食树叶维生,他却很不解地反问道,
百姓问什么不去吃肉糊那?当年武帝司马炎也很担心自己儿子的智商,一次命他写一篇文章看看。贾南风其时尚为太子妃,闻说此事马上找来一名枪手做了一篇美轮
美奂的文章,她正准备厚着脸皮让人把文章送走的时候,身边的一个太监点醒道,当今皇帝早知道太子不甚聪明,这篇美文若说是太子写得岂不让人生疑?贾南风立
时恍然,让这位太监捉笔写了一篇很烂的文章,武帝看后觉得自己的儿子虽然的确不是很高明,但当皇帝只怕也足够了,就此断了废太子的念头。
  
这位贾皇后厚黑了得,但智商比起他老公实在高不到哪里去,尤其在加害当朝太子这件事上,浅见无知得令人可笑。太子非自己亲生是每个试图独霸宫廷的女人的大
忌,贾南风也不例外。但她栽赃太子的手段太过拙劣,具体就是趁太子醉酒让他亲笔拷贝了一份造反文书,然后逼着皇帝杀掉太子,这条计策烂得连弱智皇帝也骗不
过。贾后心有不甘,不顾舆情汹涌,矫诏废掉太子,囚禁在宫中。朝廷百官实在看不过去,就找了赵王梁王几个王出面试图营救太子。这时候一个关键人物孙秀出来
了,他和太子算是有点交情,又极善谄媚,贾后对他很是言听计从,赵王伦更是视他为知己,这种面面俱到的人物不经意间往往决定着历史的走向。赵王派他到宫中
打探消息,他和太子见面后走出宫殿的时候,突然间想,我费尽心机营救太子究竟有何好处?太子为人贤达,他继位后我又将身处何地?孙秀回到赵王伦处就给赵王
出了条毒计。第二天孙秀跑到贾后面前说现在外面很多人想营救太子,贾后也约略知道事态严重,问孙秀该怎么办,孙秀建议,做大事就要果决,不如杀了太子以绝
众望,贾后拍着手叫好,连夜处死了太子。赵王伦,孙秀他们等的就是这个口实,马上矫诏派兵冲进皇宫,抓住贾后鸩死。这样皇后,太子接连被除,弱智皇帝又落
入了赵王伦的掌握,孙秀本人自然也得居高位。这个孙秀,小人得志,因以前的一点过节处死了中国古代第一美男子潘安,也不怕走在街上被潘安的追星族们用粉拳
锤死?
   贾后秘计图谋一场空,只知一味心黑,到头来自己反而成了别人的杀人工具,可见其智商大有问题。同样是除掉太子,春秋时晋国的骊姬手段就高明得太多。

  
当时晋献公的太子申生人品端方,素有人望,献公本人也不是那么胡涂,要除掉他可谓难于上青天。骊姬就从生活作风问题入手,一天在献公面前楚楚可怜地道,"
太子向来急色,连妾身我也不放过,今天中午我留太子吃饭,谁知道吃到一半太子动手动脚,并威胁我说,自古惯例女人是父死子受,我老爸死了以后,你还能跟
谁?"献公并不相信,只是敷衍安慰了几句。骊姬随即垂泪道,"君王若是不信,明天我和太子一起游园,你站在高台上看看就清楚了。"第二天,骊姬在自己的头
上擦满了蜂蜜,和太子并行出游的时候,一路上好不招蜂惹蝶。骊姬让太子帮着赶一下蜂蝶,申生掀起衣袖在其脑后挥舞。晋献公在高台上目睹这一切,以为太子果
然调戏爱姬,气得几乎倒仰,想就此废了申生,反而被骊姬劝住。
  
后来太子祭祀的时候,好心送了一大块烧肉给父亲。骊姬知道机会来了,派人在酒肉中拌上毒药。献公刚欲品尝,骊姬就跪在地上相谏,酒肉从外面来,一定要试过
之后才能食用。献公把酒泼在地上,地上竟然升起一团烟雾(难道是硫酸?),把肉喂狗吃,狗立时死亡。骊姬假装还不信,顺手抓了个小太监,逼着他吃下,小太
监刚入口就七窍流血。献公气得说不出话来,骊姬又开始发挥她的表演天赋了,扯散头发,呼天抢地:”太子设此毒计无非是因为我吗!君王你不如把酒肉赐给我,
我代你一死!“献公愈发怒不可遏,召集群臣当面处死了太子申生。
   至此骊姬尚不肯罢手,矛头直指二公子,对献公进谗言,“申生被杀,二公子恨我恨得入骨,整天练兵,一定想杀入京城!”献公还未置可否,二公子已经是怕极了这个妇人的手段,连夜和一帮家臣出走。

   这个二公子从此在外流浪数十年,历经人事艰辛,所谓艰难苦困,玉汝于成,他终于从一个浮华的公子哥磨练成一位成熟的政治家,等终于回国继位,短短几年就使晋国重振雄风.其人就是春秋五霸之一,著名的晋文公重耳。



之六:严世蕃的最后一搏

  

  
严嵩是明朝嘉靖一朝在位时间最长的内阁首辅,在明史上是被归入奸臣一列的。民间一直流传着著名的海瑞海青天如何扳倒严嵩的故事。其实海瑞一生为官级别最高
不过巡抚,他和严嵩作对的时候只是一个小小御史,整倒当朝宰相远够不上资格。历史上严嵩这种大贪官大奸臣的垮台与皇帝的英明神武或者某位青天的冒死为民请
命并无逻辑上的联系,更多其实是官场上的倾轧。严嵩真正的对手是老辣的内阁辅臣徐阶等人。
  
明世宗嘉靖论治理天下的才能不过是中人之资,何况他最大的兴趣并不在此,而是修道升仙。他一生不知道会过多少仙道,吃了多少丹药,甚至为此惹出奇祸一场
——想拿几位宫女炼丹结果被她们反戈一击几乎用纱巾勒毙。进士出身且文才了得的严嵩正是在这一点上投其所好,以一篇篇精彩的“青词”赢得嘉靖的欢心。所谓
青词,就是嘉靖向玉皇大帝祈祷时的祷词,他固执的认为玉皇大帝眷顾与否和青词的精彩程度大有关联的,(原来天上的神仙竟然也是文学爱好者?)。当然,严嵩
的手段不仅于此,他深知每个皇帝都乐于看到
  群臣陷于党争,但对真正参与党争的人又从来不信任。于是他喊的口号是君子群而不党,竭力展示自己的孤忠,这一点更深为嘉靖欣赏,所以长期委他以大权。

  
严嵩当政其间,他儿子严世蕃辅力甚大。严世蕃生得肥且丑陋,还瞎了一只眼睛,却天性聪颖,文才比其父犹有过之,揣摩圣意更是天下一绝。嘉靖的诏书向来语焉
不祥,而严世蕃则能从只言片语判断出他的喜好,严嵩每次按他儿子的意思上折,无不中的。但是所谓成也萧何,败也萧何,严世蕃后来耽于酒色,于研究如何拍皇
帝的马匹也不怎么热心了。当时的严嵩早就江郎才尽,原本一直靠儿子给圣上献青词,如今儿子不干了,只好自己腆着脸写,当然他那些干巴巴的文章惹得嘉靖十分
不满,再加上严嵩自己胡乱揣摩上意,经常拍错马屁,嘉靖慢慢对其疏远了。
  
同为内阁辅臣的徐阶观察到嘉靖态度的变化,知道整垮严嵩的时机已到。具体仍是从其家属的经济问题入手,招数虽然很旧,但管用就行。明朝中后期礼崩乐坏,几
乎无官不腐,即使徐阶本人在家乡也有千亩良田,后来终于被他亲手提拔的超级大清官海瑞悉数充公,气得其时已经退了休的徐阶几乎吐血身亡。当然从经济问题上
打击政敌既大快民心,又易于抓到把柄,真是再方便不过。严世蕃虽然老奸巨猾,终于还是因为贪污被人揪住了辫子下到狱中。严嵩急得五内俱焚,当即以退为进,
上表替儿子请罪,但此时的嘉靖对他们父子恩宠已失,不再刻意偏袒。
  
纵使老爸和皇帝都罩不住,严世蕃到底聪明过人,还是设了一条奇计为自己脱难。当严氏父子权倾朝野的时候,朝廷官员们走马灯似的往他们府上跑,如今虽然落
难,还是有不少人来看望他。面对着这些看上去义气深重不忘旧恩的官员们,严世蕃诚恳地说道,“我严世蕃一生经过多少大风大浪,这点贪污的小案我原本不放在
心上。不过我唯一担心的是当年和我父亲联手整垮锦衣卫经历沈练和兵部员外郎杨继盛,并把他们冤杀的旧案,这在当时激起了全天下读书人的愤慨。如果刑部的人
把这个案子翻出来,我就只好等死了。拜托你们千万帮忙把这个旧案盖下去。“
  
即使在严家全盛的时候,他们提拔的官员也难保百分百的忠诚,何况如今树倒猢狲散?严世蕃的话刚落地,就有人通报给了刑部负责此案的官员。法司黄光升一直发
愁栽在严世蕃身上的贪污罪太轻,闻此讯立刻找来了旧档,一番研读后给严世蕃补上冤死沈,杨的重罪。当他写完奏章,得意洋洋地准备向皇上回禀的时候,恰巧徐
阶经过。徐阶到底是宦海沉浮多年的人物,草草看了奏章,就微笑地跟黄光升说,此奏章一上,只怕严世蕃立时脱罪。望着迷惑不解的黄光升,徐阶不得不给这位政
治上远不成熟的小弟补上一课,当年沈杨被杀,那是皇上亲自下过旨的,把这个案翻起来那就等于直接说嘉靖的不是,试问皇帝何尝犯过错误?嘉靖顾忌自己的面子
会就此放严世蕃一马。接着徐阶指点道,贪污罪固然分量不足,但严世蕃手下有个
  官儿和大海盗汪直是儿女亲家,汪直又向来和日本人勾结,要说严世蕃勾结倭寇,意图谋反那就再合适不过了。黄光升恍然大悟,立刻修改了奏章。

   严世蕃本来在狱中眼巴巴地等着嘉靖的特赦,不料却传来做梦也没想到的自己竟和倭寇勾结的消息,登时颓然坐倒在地上,知道终于不免一死。而严世蕃被斩弃市以后,严嵩也无法在朝廷立足,嘉靖尚念他多年进献青词有功,只是将他官职一抹到底,不久严嵩在困顿中死去。

  
细想严世蕃这条计策,原本是摸准了嘉靖的脾性去的。平心而论,嘉靖一朝,虽然任用奸佞,朝廷乌烟瘴气,百姓也苦不堪言,但多年的修道到底把他的暴戾之气冲
淡了不少。即使是愣头青海瑞抬着棺材上京,奏章上几乎指着他鼻子大骂,”嘉靖,家家净也!“,嘉靖恼火得几乎不敢相信古来奏章居然还有如此写法,但终究也
只是把海瑞关进大牢了事。倒是嘉靖仙游以后,海瑞在牢里得知消息,伤心得暴吐鲜血。嘉靖的这种”好脾气“,在明朝的诸多皇帝中的确是罕见的。
  
换做在万历朝,严世蕃这条计算是白搭,神宗皇帝几十年神龙见首不见尾,所有人上的奏折从来都是肉包子打狗,不见回复的。他自己八成会被政敌胡乱加个罪名杀
掉。如果落在阴骘忌刻的崇祯手里,严世蕃八成还是会使出此计,心态却是完全不同了,他知道崇祯不管出于惩贪还是灭口自己都难免一死,但兔子搏鹰,把那些背
后搞材料整自己的人除掉也好。估计崇祯对那些斗胆上表揭自己疮疤的糊涂蛋如黄光升之流先是隐忍不发,以后会找别的借口一个个杀掉。
   联想到不幸因经济问题阴沟翻船而落入我人民民主专政铁掌中的大小贪官们,处于绝境之余也不妨学学前辈严世蕃的逆向思维,只是如今像嘉靖皇帝这样的靠山实在太难找了。

  

  

之七:杨一清反间除刘瑾

  
看过京剧《法门寺》的大概都会对明朝正德年间那个气焰涨天的大太监刘瑾留有深刻的印象。正德这个年号,几乎可以算是所有帝王年号中最讽刺的一个,因为明武
宗朱厚照的德行,无论从那个方面看只怕都摊不上一个正字。刘瑾正是借助他才得以一飞冲天,其权势极盛的时候,大江南北都传着民谣,“京城两皇帝,一个坐皇
帝,一个站皇帝;一个朱皇帝,一个刘皇帝。”,结果却仍然不免中了反间计被皇帝下令活剐。死的那天,他身上的碎肉被京城百姓爆炒到一两银子一片,这个记录
好像只有后来的督师袁崇焕一举打破,当然,汉奸的肉嚼起来更加爽口也未可知。
  
武宗当太子的时候,就终日和一干太监如刘瑾,谷大用,张永等人鬼混,等到当了皇帝,他们自然鸡犬升天,飞扬跋扈,无恶不作,号称八虎,当真是朝臣嫌恶,路
人侧目。当时内阁辅臣是大学士李东阳,刘建,谢迁三位,都是机敏厉害久历宦海的人物,时人评述,“李公善谋,刘公善断,谢公善侃”。他们早就看刘瑾那些宦
官不爽,联手策划将八虎扳倒。不过这种对内臣的攻击单独由朝臣出面当然是下策,堡垒从敌人内部攻破是最好。他们找到了尚算正直的太监王岳,范亭,暗示他们
先向武宗告发刘瑾等人的奸行,即使失败也可以理解为宦官之间的内讧,随后再纠集朝臣上奏章内外夹击。
  王范二人都是久沐皇恩,深感刘瑾他们这般胡闹终究是国家的祸患,于是趁服侍皇帝的时候跪地泣血揭发,武宗一时也被感动,答应他们第二天把
刘瑾等下狱。当时的吏部尚书焦芳,原是刘瑾一党,得知消息后马上通报刘瑾王岳等人秘密上奏的事情。刘瑾顿时吓得面无人色,和他的朋友连夜赶到皇帝身边哭
诉,动之以情,晓之以理。所谓动之以情,他们自小都是武宗的玩伴,提及旧事,武宗也是唏嘘不已;晓之以理,他们一齐哭诉,王岳说我们进献狗马鹰犬来迷惑圣
心,那些物事又不是单我们献的,王岳本人也有分,再说,您这么英名神武,这些狗马鹰犬只是您轻松休闲时的玩物,丝毫不影响您日里万机啊。王岳不过是妒忌您
和我们的亲密无间所以才诬告罢了。武宗先被牵动了旧情,又被舒服地恭维一番,仔细想一下,王岳当真是其心可诛。刘瑾早就知道王岳背后一定有人煽风点火,此
时见武宗心动,顺势把矛头指向内阁,流泪道,我们司礼监原本就是替皇上您办差,都是按照您的吩咐做的,内阁大臣对我们不满是假,借王岳朝您发飙是真啊。武
宗终于大怒。
  
李东阳等人眼见大火烧身,商量在武宗面前以退为进,一齐以内阁总辞来逼武宗杀刘瑾。这等内阁总辞轰动天下的事情,太祖开国以来未曾有过,武宗纵使凶横十
倍,也未必敢犯众怒。没料到刘瑾还是棋高一招,在他们跪地请辞的时候,察言观色,发现李东阳攻击自己的时候似乎还有所保留,马上向武宗建议,李东阳忠心体
国,他虽然说了我们的不是,却实在是大大的忠臣,应该表彰。武宗也为刘瑾宽广的心胸所叹服,批准了刘建,谢迁的辞职,独独升了李东阳的官,当然同时也擢拔
那个刘瑾的死党焦芳入内阁。原本应该沸沸扬扬的总辞如今成了三缺一,几乎沦为天下人的笑柄。刘建和谢迁黯然离开京城的时候,李东阳把酒相送,刘建气得把酒
杯推倒在地上,指着李的鼻子痛斥,你当时如果言辞激烈一些,哪怕多说一句话,我们也不至于搞成这样。嘿嘿,李东阳之深沉城府,阴柔善变,即便精明如刘建,
谢迁到底还是及不上的。
  主帅被罢免回乡,刘瑾畏于舆论不敢拿他们怎么样,王岳范亭这些小兵却哪里跑的了,立时被诛杀。朝中大臣倒也有不怕刘瑾的权势手段的,勇于
上表为刘建,谢迁鸣不平,这其中有左督御史(都察院最高长官)张敷华,户部尚书韩文,吏部尚书许进等等。刘瑾毫不手软,罢官的罢官,流放的流放,官场上一
片血雨腥风。最令刘瑾气愤的是,这些一品二品的大官倒也罢了,一些不入流的小官居然也和自己过不去,也怪不得刘某人心狠手毒了。一次,一个小小的兵部主事
(主事,明代各部司中最低一级的官僚)居然直接给武宗上奏章痛骂刘瑾奸宦误国,文辞华丽,理直气壮,朝臣中一片轰然叫好。刘瑾气得跳脚,当即下令把这个不
知好歹的家伙流放到贵州。理论上此人应当在路途中或因急病,或因交通事故,匪徒抢劫等等原因意外死去,可是这个兵部主事也实在不是一般角色,他的名字叫王
守仁。如果对这个名字还不熟的话,他的大号王阳明应该是如雷贯耳。他后来创立的阳明学派可谓流芳百世,后世日俄战争中大出风头的日本海军名将东乡平八郎,
一直挂着个腰牌,上书“一生低首王阳明”;蒋介石退守台湾,也将别墅所在的小山改名阳明山,想必也是对这位大学者钦服的紧。
  王守仁走到杭州,就意识到小命只怕不保,假装夜间投江自尽,帽子和鞋袜都飘在江面,做戏当然要全套,他甚至还留下了“百年臣子悲何极,夜夜江涛泣子胥”这等悲怆的绝命诗,此后躲在家里一闷十数年不露头。南京的官员感怀这位不下屈原的忠臣,纷纷在江边含泪祭奠。

  刘瑾和内阁大学士焦芳等人内外勾连,一手遮天。他通常在武宗玩得最高兴的时候,把朝臣的折子拿给皇帝看,武宗哪有此等闲心,当然是委托他全权
处理,这招天启朝的另一个大太监九千岁魏忠贤也学了个十足十。朝臣都怕极了这个掌握生杀大权的人物,纷纷阿谀献媚,李东阳也是丝毫不逊别人,刘瑾做寿,他
的礼物每每比别人重上数倍,说刘瑾坏话的奏章,但凡过他手的时候就被他截留,并亲自送到刘府,当然他在内阁也是稳若泰山。
  日中而移,月盈则亏,时间长了树敌满天下的刘瑾也感到不妥,何况八虎中张永在武宗面前和他争风吃醋,似乎有不甘他下的意思。一次他找心腹
张采议事,留着泪哀叹道,“张永这些人混账之极,他们开始怕朝臣对我们宦官不利,把我推出来当挡箭牌,如今全天下的仇恨都集中在我一个人身上,只怕不能善
终,张永,谷大用这些人美滋滋的享清福,我什么时候能脱身就好了。”张采建议,“当今天子没有子嗣,不如您早日留心,立一个年纪幼小的宗室之子当皇储,要
是以后年长有心计的人当了皇帝,只怕您难得善终啊。”刘瑾默然不语。老狐狸焦芳也敏感地嗅到了火药味,不顾刘瑾的再三挽留,毅然辞官回到乡里。
  刘瑾尚未准备好议立太子,一场大祸却扑面而来,安化王朱寘鐇在西北起兵造反。古往今来但凡造反总需找个冠冕堂皇的理由先,师出有名的最好
借口自然是“清君侧”,就是说我不是冲着皇帝本人来的,我只是帮皇帝除掉身边的奸臣而已,这个招牌从汉景帝的八王之乱,一直到本朝永乐皇帝的靖难之役被擦
的越来越亮。平心而论,景帝的晁错,建文帝的黄子诚,齐泰都是铁干忠臣,清君侧喊的再响也未免底气不足,朱寘鐇诛除天下共贼刘瑾的号召则明显是击中了要
害。刘瑾几乎气得抓狂,安化王志大才疏,又偏居西北一隅,要兵没兵,要粮没粮,想造反根本是在搞笑。他发神经搞笑倒也罢了,自己又没惹他,却活活被他害惨
了。他只能但尽人事,死命按住安化王那篇义正严词的檄文,不让武宗见到。
  刘瑾的料想果然不错,他到底在此栽了跟头,因为他碰到了这辈子的第一大对头杨一清。杨一清,字应宁,成化八年进士,历任太常寺卿,都察院
右都御史,吏部尚书,极有才干。正德三年,他在担任总制三边都御史巡查西北边防的时候,提出加强守备,军垦粮田数百里,从而为国家节约开支,不必从内地转
运粮草。而刘瑾等人从每年接受负责转运粮草的官员得的孝敬极多,杨一清这么做固然有利国家,却无疑断了他的财路。刘瑾诬告他修筑边塞城墙造成浪费,下他到
狱中,准备处死,老滑头李东阳却出面调停,保下了杨一清的老命。刘瑾碍于面子,一时心软,得罪人到底没有得罪到底,终于铸成大错。杨一清出狱,恨刘瑾恨得
咬牙切齿,也深知以刘瑾的狠毒,绝对不会善罢甘休,于公于私,都非得除掉他不可。
  刘瑾的另一个失误是终于按捺不住,和八虎中的张永起了内讧,在武宗面前进谗言,贬他到南京。张永还没走,他就在内廷贴布告,不准张永再进皇宫。张永在武宗面前恸哭分辩,才得以幸免,自此和刘瑾誓不两立。

  这次安化王叛乱,武宗指派杨一清总督西北军务,宦官张永为监军一同前往。这两个人走在一起,刘瑾想活命只怕也难。朱寘鐇的造反毕竟是胡闹,不
足一月就被平定,在回京师的路上,杨一清叹了一口气,对张永道,这些藩王杂碎的叛乱原本是小事,朝中的奸臣才真正是国之大患,一定要设法除去才好。张永心
有灵犀,连连称是。二人忌惮刘瑾耳目众多,相约把奸臣的名字写在手心,一齐伸掌,果然是瑾字,相对拊掌大笑。笑完张永却皱起了眉头道,此人心计深沉,势大
难当,又和皇上亲近无隙,只怕难除。杨一清微笑道,倒也不难,你这次平定叛乱,立功非小,会受皇上重赏那是不必多说。关键是要找机会单独向皇上汇报军情,
当面把安化王的檄文给他看,指证刘瑾之恶实在是罄竹难书,最关键要点明刘瑾居心不良,意图造反。(这个安化王把刘瑾的罪状列成二五八条,好像他越烂自己就
反的越有理似的。说他陷害忠良,贪污受贿,扰乱朝纲倒也罢了,居然拔高到意图谋反,言下之意似乎是我不反,刘某人也要反,好歹我也是正宗王爷啊。他倒也不
想想刘瑾一个阉人,哪有造反当皇帝的心?)张永仍然忧心忡忡地说,皇上未必会信啊。杨一清鼓励道,平定战乱这么重要的事情,皇上交给你来做,说明是青眼有
加啊,当今世上,能除掉刘瑾这个奸贼的只有您一个人。皇上如果不信,你就要以死相谏,刘瑾铁定小命难保。刘瑾既死,您立了军功,又铲除奸臣,无论皇上,百
官还是全天下的百姓都会对您感激不尽,前途不可限量啊。千古以来,只怕也只有东汉灵帝的吕强,后唐的张承业两位公公才能和您媲美,您的大名要流传后世的。
张永听了他的厉害分析,又被爽爽地拍了马屁,也是精神倍长,终于下定决心。
  张永回京后,比刘瑾安排好觐见皇帝的时间提前了一个时辰面圣,递上弹劾刘瑾的奏章和安化王的檄文,说朱寘鐇好端端一个王爷,纯粹是因为刘
瑾为非作歹,危害天下,忍无可忍才被他激反的,所以一定要杀刘瑾以谢天下。武宗看完后微微迟疑,说刘瑾怎么可能造反?张永磕头几乎磕出血来,泣道刘瑾即使
先前不想反,如今他见到这篇檄文,已是骑虎难下,总之狗急跳墙,非反不可。武宗说,明天我找刘瑾来对质好了,你先退下。张永大哭着不走,说我一退就再也见
不到您了,刘瑾非要杀我不可。武宗终于被说动,连夜派人捉拿刘瑾。
  刘瑾睡得迷迷糊糊就被人锁拿。此时武宗还追念往昔的情义,不想要刘瑾的命,只是流放他到凤阳,刘瑾还苦笑着自我安慰,这其实也算善终啊,
好歹我是个富太监,这辈子的钱也花不完。张永,李东阳,杨一清都知道一定不能放过他,联手组织御史拼命弹劾,墙到众人推,武宗终于下令查抄刘瑾的家产。抄
家的结果除了几十万金元宝,无数玉器玛瑙之外,居然搜到了成百的盔甲,刀剑,武宗得知大怒,确信刘瑾谋反无疑,再不顾念旧情,下令将刘瑾活剐。
  刘瑾在自己家里不知藏这些东西有什么用,他手里又没有兵权,再说那几百件武器在装备精良的御林军面前哪堪一击,何况即使能武装的也只怕都
是一群乌合之众。鹿鼎记里韦小宝查抄鳌拜的府邸时只是一味猎奇探宝,其实搜出来多少黄金珍宝本不希奇,如果他恶狠狠地栽上鳌拜一把,也从他的府邸搜出几千
副盔甲弓箭,让皇上轻松坐实鳌拜谋反的罪名,只怕康熙要乐得开花,比他腆脸歌颂一万声甚么鸟生鱼汤要管用的多。皇上一旦高了兴,想发财还不容易?
  刘瑾既倒,他的党羽各个难逃善终。当年劝他早留后路的那个张采,也被下到狱中,连呼皇天厚土,冤枉冤枉,上书揭发刘瑾的确说过想当皇帝的
话,其时自己苦谏不听,还差点被他害死。本来这般开脱虽然希望渺茫,也不失为死中求活的办法。偏偏他不知道哪根神经搭错,居然一并揭发内阁大学士李东阳一
直欺瞒圣上,对奸臣刘瑾阿谀奉承。真是自作孽,不可活,刘瑾还没上西天,自己就先莫名其妙地“病”死在牢里。
  案子越来越大,一向不喜欢理事的武宗也对刘瑾的案卷兴趣倍增,亲自到刑部翻查刘瑾的书信,居然看到永寿王写的一篇肉麻之极的吹捧他的书
信,当真是斯文扫地,皇家的颜面何存,武宗气得大骂不止。李东阳等人心惊胆战,他们的信要说无耻只怕不在永寿王之下,于是李东阳急中生智,上奏折说,昔年
汉光武帝刘秀在讨平王朗的时候,曾经也得到了几千封自己的官员百姓写给王朗的书信,他当众一口气把信全部烧光,表示以往的事情既往不咎,给那些诚心悔过的
人一个机会,那些人又惭愧,又感激,自然是死力效命。圣上的胸怀远胜刘秀,而永寿王到底也是王爷之尊,不如您当众把所有的书信全部烧了,以安其心,不然把
他激反了也是麻烦之极的事情,武宗想一想觉得他说得有理,就当着百官的面把刘瑾的书信全部烧光。老狐狸到底是老狐狸,李东阳在内阁一直混到光荣退休。
  张永连立两大奇功,一时成了宇内第一名人,兄弟都封了侯伯,赐诰卷,子孙世袭,当然,这是李东阳在武宗面前竭力争取的结果。

  杨一清业终于一步登天,出任武英殿大学士,吏部尚书,一人之下,万人之上,担当内阁首辅。

  至于明武宗正德皇帝朱厚照,即使没有了刘瑾这样的大奸臣,德到底也没正起来。他后来照样宠信奸佞丝毫不下刘瑾的江彬,钱宁等人,朝野继续乌烟
瘴气。宁王朱宸濠起兵谋反,他立刻封自己为天下大将军,企图南下征讨(游玩)一番,谁知道叛乱迅速被文武全才的王守仁制服,武宗伤心无聊之余,也懒得搭理
本该受重赏的王守仁。王到此算是彻底看穿,辞官归隐,著书立说去了。不久,荒淫一生的武宗在豹房驾崩,死后他的新宠臣江彬钱宁及其党羽皆被诛除,无一漏
网。
  

  

  

之八:死后发飙

   世人眼中智者的最高境界,大抵不仅在生前威风八面,算无遗策,而是有能力在自己身死之后稳控局势.翻开三国演义,
无论是蜀国的最高智慧象征诸葛亮,还是魏方谋臣之冠,死后曹操流涕长叹哀哉奉孝,痛哉奉孝,惜哉奉孝的“三哉”郭嘉郭奉孝都是精通此术。诸葛孔明仙游五丈
原之前,对后事进行了精心的安排,不仅留下了“死诸葛吓走活仲达”的千古佳话狠狠调戏了一把老对手司马懿,还借马岱之手诛除了野心甚大的魏延,一举奠定了
蜀汉几十年安定的政治局面。郭奉孝的死前遗计定辽东,借公孙渊之手杀了袁绍两个千里相投的儿子袁尚,袁谭也堪称反间史上的经典之作。
  
另一个死后逞威的经典案例应该算是战国著名的说客,身佩六国相印的苏秦大人。苏秦不仅嘴皮功夫了得,其权术之精,识见之远,心计之深也是一般人远所不及
的。他在赵国当相国的时候,经常在赵王面前吹嘘,只要有他在,秦国即使再强大十倍也占不到赵国的便宜。话音未落,就传来了秦王试图对赵国用兵的消息,苏秦
臊的老脸通红,但这也难不倒他。他找来了昔年的同学,才能不下于他的张仪,说是和他共享富贵,却故意百般冷落蔑视,像仆人一般使唤。张仪也是心高气傲之
人,一怒之下铁心和苏秦作对,负气跑到了秦国,穷困潦倒之余却意外得到一个人的大笔接济,并经他引见得见秦惠王,一番策论说得秦王心服口服,拜为上卿。那
个接济他的人此时表明身份,说自己是苏秦的门客,苏先生他这么对你无非是为了激发你的上进心,您今后在秦国手握大权,千万不要忘了他的大恩哪。张仪感激的
涕泪俱下,奋尽生平之力鼓动秦王不要去攻赵,转而拿魏国撒气,终于一举取得魏国的西河之地,秦赵两家皆大欢喜,和平长达十五年之久。
  
此后齐魏两国合兵攻赵,苏秦的六国合纵抗秦的归划彻底泡汤,实在不好意思继续在赵国混下去,跑到北方的燕国。燕易王对这个偶像级的明星崇拜的不得了,立时
委以大权。苏秦在燕国玩得的确过火,居然和燕王的寡妇老妈私通。此等奇耻大辱的消息传到了燕王的耳朵里,他却浑然不当回事,反而对苏秦更加礼敬。旁人对苏
秦的惊天艳福和通天权势羡慕得口水直流,纷纷跑到他府上祝贺。苏秦何等神台清明,摇头苦笑,燕王不过是忌惮他老妈和自己联手的强大势力而不敢妄动而已,他
老妈在世还勉强罩的住自己,只要一朝归西燕王只怕第一个放自己不过。于是他亲自去见燕王,说自己有办法反间毁掉燕国最痛恨的仇敌齐国。燕王连连称善。苏秦
紧跟着建议,您不妨找合适的理由把我赶出燕国,我去投奔齐国,作为内奸,我自然有办法把他们国家整垮。第二天,燕王就当众斥骂苏秦色胆包天,兼怀贰心,将
他逐出宫去。
  苏秦委屈地举家南下出走齐国,齐宣王像中了大奖一般高兴地把他奉为上宾。宣王死后,他鼓动齐瑉王厚葬他老父,葬礼花费之巨,空前绝后,又
教会他狂搞面子工程,大兴土木,整个齐国果然被收拾地得焕然一新。齐王在心旷神怡,接受万国朝贺爽到极点之余,只怕也没注意到好端端的东方大国就此被搞得
国败人穷,民生凋敝,他对苏秦的封赏同时也厚得无以复加。先前齐王身边几个靠谄媚拍马混饭吃的佞臣眼见进口了一个更狠的,竟然后来居上,嫉妒的双眼冒血,
重金聘请刺客趁苏秦不备将其刺成重伤,混战中凶手逃之夭夭。
  苏秦躺倒在床,情知自己伤重不治,
一面叹惋平生纵横天下,无所不能,今日居然在阴沟翻船,世事忒也难料,一面开始苦心安排自己的身后事宜。等到齐王风风火火地跑来探病的时候,他拼尽最后一
口气道,我反正是活不了拉,不如废物利用,您宣告天下,说我是燕国的奸细,此行的目的就是颠覆齐国,选个热闹的日子在大街上把我五马分尸,并把我的家人统
统赶回燕国,想必刺客也好,主谋也好,参与者也好,包括那些稍微知情的人都会迫不及待跳出来讨赏,到时您把他们统统诛除为我报仇便是。
  齐王含泪应允,依着苏秦的最后一计完美利落地替他抱了仇。燕王闻说苏秦惨死于齐,也是唏嘘不已,以前的芥蒂固然是一笔勾销,又念及他反间
的奇计伟业,于燕国的大恩,对他的家人极尽优渥抚恤自不必多说。没过多久,苏秦确系燕国间谍的消息终于坐实,齐王羞恼万分,命人再把苏秦从地下掘起来当众
鞭尸,意犹未尽,想宰他全家发泄的时候才猛然记起自己早就把他们礼送入燕,只能徒呼负负。苏秦虽死相难看,齐国也被他玩得根基动摇,后来终于被名将乐毅率
燕国军队攻打得险些亡国。
  苏秦一生行事诡异,机诈难测,视天下为无物,玩弄战国七雄于股掌之中,最后却堂而皇之地进了燕国的忠烈祠,诚如西汉邹忌的那篇传世美文
《狱中上梁王书》中总结的那样,“苏秦不信于天下,而为燕尾生”,实在让各位看官各个跌破眼镜。邹忌先生固执地认为那是燕王知人至深,待人至诚,从而感动
了这位九世滑头的缘故。实则不然,燕王本身就不是省油的灯,他的那套收买几个轻生重义的愣头青如专诸,聂政这些刺客是绰绰有余,却怎么可能感动得了奸狡如
狐的苏秦?苏秦这么安排,一方面是引那些胆大无脑的凶手自动献身,那些敢买凶杀自己的人势力绝对不小,毕竟自己又只是个客卿,而且民怨甚大,天知道负责调
查此案的齐国法司会不会卖力,抑或干脆找些替罪羊胡乱一杀了事,同时此举也是为家人铺好后路,自己也稍微洗刷一下谋国不忠的恶名,另一方面,他竭力显示对
燕国的忠心也无非是讨燕王的老母,自己的sweetheart最后一个欢心罢了。他狡狯一世,今次只怕是动了真情,情之累人,当真一至如斯。
  先秦人物,大多个性张扬,率性敢为,虎虎生风,却甚少有后世主辱臣死,忠君爱国的道德理念。苏秦张仪这些无耻黑心的纵横家如是,豢养着万
千门客野心勃勃的战国四公子如是,仅感怀知遇之恩就扑杀本国元首的刺客专诸,聂政如是,一边哀叹着“日暮途远,吾故倒行而逆施”一边为报家仇而荒唐到亲率
敌国大军攻灭自己祖国的超级大汉奸伍子胥亦如是,史上第一衰神,和汉代著名的衰将飞将军李广齐名的大能人吴起也如是。
  要说反间史上身中暗箭次数之最,吴起只怕可排第一。后世史书上但凡评说名将,经常要要形容他才比孙吴,孙就是孙子兵法的作者孙武,吴就是
超级天才吴起是也。吴起与孙子齐名,他的武功战略那是不肖多说的,更难得的是他是罕见的军政全才
。他无论流落到哪个国家,只要被委以重任,那个国家就不可思议地强盛起来,政通人和,国富民强之余,对外作战也是攻必取,战必克。
  如此才智卓绝的吴起,一生却受尽小人陷害。他原本是卫国人,其时卫国式微,国君暗懦无能,于是毫不犹豫地抛弃祖国求学于鲁国名人曾参门
下。曾参问他生平志向,他爽快地回答是权位金钱美女,一心崇尚礼仪教化,修身治国齐天下的大儒曾参伤心得差点吐血。吴起虽然没有丝毫的道德意识,但的确才
华出众,远越齐辈。曾子的学生们嫉妒死了这个留学生,一齐在曾子面前告状,说吴起当初离家求学的时候,他母亲苦留,涕泪俱下,他却走得义无返顾,还许下宏
愿,生平不混到卿相,就决不踏入家门半步。最近他母亲去世,他行止如常,谈笑风生,连一丝回家看看的意思都没有。这个反间算是击中了要害,曾参可是一位因
事母至孝而名动天下的大孝子,变态到有一次路过一个名叫“胜母”的巷子,因为厌恶这个名字,宁可绕路多走。曾子当即气得脸色发青,二话不说,将吴起赶走。
这算是吴起第一次中箭。
  离开老师,吴起就近投靠了鲁王,牛刀小试,立讨欢欣。其时齐国起大兵伐鲁,举国上下无不惊惶失措,因为鲁国相比强齐国力根本不在一个档
次。吴起雄心万丈,拍着胸脯保证只要自己将兵,绝对可保万全。鲁王被他鼓动得热血沸腾之时,旁边一群早就瞧吴起不爽自己却无能抵御齐兵的将军一起向鲁王进
谗言,吴起的夫人是齐国人,他本人又是卫国人,怎么可能专心帮着鲁国对付齐国?消息传到吴起的耳朵里,他的第一反应是一刀砍死心爱的夫人,提着血淋淋的人
头到鲁王面前表忠心。鲁王哪里受得来这个,惊得几乎晕厥。吴起领了将印,一仗就把骄横不可一世的齐军打得人仰马翻。
  得胜还朝之后,那些将军们看看洋洋意满的吴起气得几乎抓狂,又一次在鲁王面前构陷说,吴起向来寡恩刻薄,无情无义,老母亲死了不回家吊
孝,恩师受不了他撵他出门,现在更是闹到了杀妻求将,很难讲他以后会对您有多忠心。再说,这仗我国虽然大胜,但我们鲁国到底是小国,只怕以后会成为众矢之
的;吴起是卫国人,我们重用吴起,明摆着冒犯卫国,为一个人得罪一个国家,实在犯不着。这番言辞公私兼顾,掷地有声,除了对吴起的人品进行抨击以外,连带
着将他的赫赫战功轻松拂去,更要命地是将他的起用升华到国际政治矛盾的高度,鲁王即使十倍欣赏吴起的干才,又焉能不动心?吴起二此被离间,仓惶出逃到魏
国。
  当时的魏文候甚是贤明,一心想有一番作为,可是魏国其时被西邻虎狼之国秦国欺侮地抬不起头,听说吴起千里来投,火速擢拔他为大将。吴起很
快为魏国攻城略地,虎口拔牙,一连攻占秦国五座城池,兵悍将勇甲于天下的秦军对他无可奈何。吴起虽然贪财好色,热恋权势,却能深得军心,他在西河之地(魏
国黄河以西的领土,与强秦接壤)驻守的时候,和士兵们同甘共苦,吃睡都在一起,一次一个小兵背上长疮,他竟然亲自俯身下去帮他口吸脓血,旁边的士兵都感动
得说不出话来,唯独那个小兵的母亲伤心得号啕大哭道,当年他父亲也是被吴将军吸浓,从此打仗豁出命不要,很快战死,现今我的儿子只怕也活不长了。
  魏文候去世,武侯继位,此时的吴起以镇守西河数十年压得强秦不敢丝毫动弹而名震天下。和鲁国的那些将军一样,魏国的大臣也恨透了这个名声
极臭,才能却又极高的家伙。宰相公叔一直想离间吴起,可是武侯却对吴起青眼有加,居然有意将自己的女儿嫁给吴起。公叔也是驸马爷,但是他的才能比起吴起天
差地远,吴起要是也当了驸马,自己的相位只怕不稳。可是魏武侯既然早就听说了吴起杀妻求将的传奇故事还有心嫁女,只怕他也不在乎别人挑吴起人品的刺。
  不过公叔另有妙策,设计了一个更为精巧的圈套让吴起自行跳入。一次他在魏王面前说,吴起此人反复无常,不知他到底对魏国的忠心如何,不妨
试他一试。魏王也一直有些隐忧,忙问如何试。公叔进言,您不是打算把女儿嫁给他吗,明天召他进宫,直接问他愿不愿意做我们魏国的驸马。吴起此人向来趋炎附
势,您也清楚。如果他对魏国真心的话,肯定满口答应,如果他借口推辞,那就明摆着是有贰心。魏王连连点头。
  当晚公叔请吴起到自己府上做客。吴起兴高采烈地坐在席间,却愕然发现堂堂一国之尊的相国居然恭敬地站在一旁,不住手地端酒上菜,亲自服侍
公主夫人,其媚颜卑下甚至还不如仆人,不由得大吃一惊。散席后公叔拉着吴起入内室,向他大吐苦水,极言驸马生涯的辛酸苦辣,吴起感慨良久,好言相慰。自
然,这是公叔和公主联手演的好戏。第二日,魏武侯问他是否有意迎娶公主,吴起立时大惊神色,转念一想,做驸马虽然一步登天,但不料竟是如此辱人,我吴起就
不信凭自己的才干混不出头,驸马不作也罢。于是婉言谢绝。魏武侯登时神色不善,知道相国所说不假。
  吴起察言观色,明了自己已经得罪了魏王,只得再次出逃。顺着黄河南下之际,望着河西千亩良田,高高的城垛,烈烈飘扬的军旗,一向心肠刚硬
的吴起第一次淌下热泪,到底这是块为之热血奋斗数十年的土地阿,自己一走,只怕很快要易手。这就是著名的“吴子之泣西河”的典故。吴起并没有料错,数年后
秦国轻松攻取了这块心腹要害之地。
  最后吴起到了楚国,他的生命的终点也在那里。楚悼王闻说吴起才绝当世,立时拜他为相,一生苦求富贵的吴起到此算是功德圆满。吴起深感楚王
的知遇之恩,在他的锐意改革之下,整个楚国蒸蒸日上,五谷丰登,百姓安居乐业,国库收入翻了数倍,南平百越之地,北并陈蔡两国,向西再次和老冤家秦军交
手,又再次把秦军打的溃不成军,从此秦军上下一听到吴起的名字人人头大如斗。要扩张就不可避免地北上和魏国作战,面对昔日自己花极大心血一手调教出来的精
锐魏军,吴起毫不手软,屡屡重击,攻占了无数城池。楚国藉此终于积下了其后跻身战国七雄的本钱。但凡改革,都难免要得罪人,秦国的商鞅因变法最后不免被秦
人五马分尸,吴起素来贪鄙傲气,行事酷辣,得罪的人远较商鞅为多。楚悼王活着的时候对他恩宠有加,等到一死,吴起也知道自己难逃善终。其实以吴起的精明,
本可以在楚王病重的时候再次走人,但他实在太累了,一辈子都在不停地被人陷害,跑路,这次真的不想再逃了。
  楚国的一群旧贵族趁楚悼王停尸宫中,就迫不及待地掩杀进去,吴起大窘,慌乱中退到楚王的棺木旁顽抗,最后干脆跃入棺中,抱着楚王尸体不动,那些乱军杀红了眼,一阵箭雨,将吴起和楚王的尸体一并射成了刺猬。

  吴起此举,大有深意,这是中了一辈子反间计的他第一次,也是最后一次用反间计。新楚王登基后,名正言顺地把那些朝楚悼王尸体上射箭的人抓起来
全部族诛。虽说这些人都有拥戴他登基的大功,但俗语有云,高鸟尽,良弓藏,狡兔死,走狗烹,他们今朝既然敢犯上妄为,他日难保不再犯。只是又要杀得利落,
又要安稳众心,不致遭人非议,甚至激起叛乱,就难得很了,不是所有的人都有勾践那种狠戾的心肠和手段。吴起的确送给新楚王诛杀功臣的绝好借口,促他下定决
心,当然最主要的,是替自己抱了仇。
  吴起一生,从道德上说恶劣得一塌糊涂,从功业上说虽然也极显赫,却几沉几浮,最后仍未善终,可以说失败得很,但他和苏秦恰恰相反,一生光
明正大,从来不耍阴谋诡计。从他生平唯一一次反间计看,他倒不是智商低下,或是性格单纯,耍不来权术手腕,而实在是不屑搞这一套。他一直深信单凭自己的旷
代才智就足以立世,这才是他真正可悲的地方。
  圣人孔子有云“以貌取人,失之子羽”,说得是其弟子澹台灭明品行高洁,可是其人形容丑恶,不衬其德。其实论起以德取人,也不免失之吴起阿。

  

  

之九:口蜜腹剑李林甫

   如果在绵延几千年的中国反间史上选出个十项全能的冠军,个人以为非大唐开元,天宝年间名相李林甫莫可。

  李林甫此人可以算是不学有术的典型,他虽学识鄙陋,无甚文才,但论起权术手腕,心机城府,风流天子唐玄宗的麾下名臣能吏无数,却没有一个是他
的对手。但凡他要决心扳倒的政敌,不管是清高孤傲的饱学才士,老成持重的敦厚长者,骄横跋扈的边塞节度史,还是金贵如太子亲王,玄宗身边炙手可热的近侍,
或是六亲不认的酷吏,惟利是图的小人,极尽奸险的佞臣,几乎没有一个逃得出他的算计。最要命的是,这些人即使被他弄得焦头烂额,身家性命有时候都送掉了,
却不知道是他在暗地使劲,因为他越是想整倒某人,就越是结交示好,极尽恭维阿顺之能事,所谓“口有蜜,腹有剑”,决非虚言。宋代大学士欧阳修等人编订古籍
的时候看到以前版本的唐书既冗长混乱,又忠奸不显,于是重编《新唐书》。他们这些道德文人大概狠李林甫狠得入骨,在祸害大唐的奸臣榜上,毫不留情地将他钉
在榜首。
  唐玄宗李隆基称得上是倜傥多才的一代英主,早在少年之时就深得武则天的欣赏,及其年长,快刀斩乱麻一举扫平太平公主的叛乱,端的精明强
干。他在位先些年,任用姚崇,宋景等一代名相,励精图治,国力蒸蒸日上,在历史上留下开元盛世的美名,连大诗人杜甫饱受离乱之苦的时候,回忆起当年的盛
世,也是感慨不已,“忆昔开元盛世日,小邑犹存万家室。”可惜玄宗和那些才智过剩的风流才子型皇帝如李后主,宋徽宗有同样一个毛病,都是逐渐发现处理繁琐
的政事远不如谈玄论道,著诗作文,一边温软在抱,一边欣赏轻歌曼舞来得爽。这原本也不是甚么大事,只要用人得当,历朝历代主昏于上,政清于下的中兴局面屡
见不鲜。可是玄宗误就误在过于自负,认为以自己的精明洞察奸人们岂能讨了好去。他识人用人的手段对付一般的奸佞宵小是绰绰有余,可是对付李林甫这等大滑似
忠的极品就施展不开,反而成了他借以打击政敌的利器。
  说起来李林甫要讨玄宗的欢心也是颇费一番周折。玄宗文采风流,爱才如命,李林甫却自小只知道和一班贵族子弟厮混胡闹,斗鸡走狗,诗词歌赋
等根本一窍不通,甚至当了宰相之后,有一次一位同僚老来得子,他亲笔撰写的贺辞中居然将弄璋之喜误作“弄獐”之喜。(难道抱着个毛茸茸的獐子就真的那么开
心吗?)
他当礼部尚书的时候,就瞄准了宰相的宝位。只是当时的宰相是大才子张九龄。张博学多识,文才绝代,深受玄宗的赏识,且他为人鲠直,素来鄙视李林甫这等无德
小人,屡屡当面痛斥。李林甫狠忌交加,却并不急于出手,一面与张九龄等宰相曲意迎奉,一面猎豹一般静静地瞄视着猎物。
  机会终于到了。中书侍郎严挺之的前妻被他修弃以后,另嫁蔚州刺史王元琰。后来王因被告贪污收入狱中,严挺之详察此案,发现证据不足,将他
保释出来。李林甫马上意识道此案大有文章可作,严挺之和丞相张九龄,裴耀卿都是清流一党,平日互相仰慕,引为知己,那是朝野共知,他们向来一齐和自己为
难,这次实在是一箭数雕的大好机会。他托内侍在玄宗面前密告严挺之私放贪污重犯,有徇私舞弊的嫌疑,并请玄宗征询宰相的意见后再作决定。玄宗找来张九龄,
问他对此案的看法,张据实直言,严挺之历来公私分明,王元琰的夫人诚然是他离异的前妻,但是并无私情牵扯在其中。玄宗冷笑,并无私情?只怕是故剑情深吧,
当即下令把王元琰重新拘禁严查。再细细思量,张九龄平日看似公正严明,关键时候竟然还是偏帮私党,实在让人寒心,于是罢去了张,裴的相位,并将严挺之贬官
千里。当张九龄,裴耀卿两位叩头谢恩,黯然神伤蹒跚着走出正殿的时候,李林甫望着他们的背影嘿嘿冷笑,“看你们今日还敢自称左右丞相?“百官无不簌簌自
危。
  李林甫得以升任丞相,除了设计扳倒张九龄以外,也是他平日紧密勾结内宫的回报。当时玄宗甚是宠爱武惠妃,李林甫就全力巴结这位权倾内宫的
人物,但太子李瑛并非她所出, 武惠妃一直深以为恨。李林甫探知她的心意,也觉察到玄宗其实并不喜欢
太子,只是碍于舆论不敢妄动,这种有赚无陪的好买卖岂有不作之理?他鼓动其他人诬告太子谋反,玄宗正愁没借口,让群臣讨论废太子之事,张九龄等人搬出隋文
帝杨坚误废太子最终丢了大好江山的案例,竭力替太子洗明冤情,唯独李林甫在一旁默默不语。玄宗眼见阻力甚大,一时下不了决心,散朝后单独召见李林甫,李只
说了一句话,这些都是天子的家事,外臣根本没资格插嘴的。玄宗立时转忧为喜,也为李林甫的忠心所感动,狠心废掉了太子。李林甫为了杜绝后患,纠集一帮官员
将太子和另外两个王的勾连谋逆案坐实,并将他们一并处斩。
  太子虽然被杀,可是玄宗属意的新太子并不是武惠妃的儿子寿王李瑁,而是忠王李亨。任那李林甫奸狡胜狐,这次也不幸押错了注。但事已至此,既然明摆着自己是武惠妃,寿王一党,已然得罪了新太子,那干脆就得罪到底,不然他日新太子登基,自己就死无葬身之地了。

  他攻击李亨的方法还是先旁敲侧击,最后一网打尽。当时和他一起为相的是韦坚,李适之二人。韦坚手握大权,又是太子李亨的正妃韦氏的亲兄长,实
在是太子的得力外援,这颗钉子非得拔除不可。说起来韦坚的妻子是李林甫的表妹,他得以当上丞相全赖李林甫在玄宗面前说尽好话,但是如今既然翻脸,也顾不得
那么多了。韦坚交游广阔,朝野内外声望甚隆,又与另一丞相李适之交好,相形之下李林甫反而被孤立了。
  不过这也难不倒李林甫,要剪去太子的旁支韦坚,先要剪去旁支的旁支李适之,逻辑上倒是相当清晰。李适之为人狂放疏阔,除掉他并不费事。有
一次李林甫跟李适之商量说,“地方官员曾经上报华山发现金矿,如果开采出来国库会立时充盈,只是皇上尚不得知。”李适之喜滋滋地跟玄宗汇报,玄宗问李林甫
的意见,李林甫马上正色道,“此事我早就知道,只是华山是大唐的龙脉所在,事关国家气数,不应该随便开采,所以我一直不敢说。”玄宗深怪李适之轻佻浮躁,
觉得他实在不是当宰相的材料。
  当然这还远不足彻底扳倒李适之。李执掌兵部多年,要清洗掉他,一定要从他老巢寻找突破口。(这些兵部的官员应该算是太子旁支的旁支的旁
支,李林甫除了做事果决之外,耐心也实在了得。)这个时候著名的酷吏吉温粉墨登场。汉唐两代有很多共通之处,除了都是天朝大国,国势强盛,兵威赫赫,远近
咸服之外,连宦官乱政,酷吏丛生也如出一辙。酷吏原先并不是一个贬义词,汉朝的著名酷吏郅都,张汤等都是专门整治豪门,杀人如麻的大清官。郅都简直如同包
青天的前世,整日铁黑着一张脸,时号“苍鹰”,但凡他经手的案子,上至王公太子,下到走卒役夫统统没命,汉文帝嫌他杀戮过重,派他镇守边关。当时的匈奴正
是最不可一世的时候,碰上这个煞星也是星点脾气也没有,匈奴单于为了鼓励士气,在平日大练兵的时候将郅都的画像当成箭靶,那些弓马娴熟的神箭手即使远远望
到仍不免气沮,怎么射都射不中。这些汉朝的酷吏,酷则酷矣,但他们血性极足,对别人狠,对自己更狠,一旦犯案,都是毫不犹豫地自杀。唐朝的酷吏比起他们的
祖先,阴狠十倍之,而血气几乎全无了。
  既然清洗兵部成了当前首要任务,作为李林甫麾下第一打手,吉温当然是责无旁贷。他大摇大摆地坐在堂上,先把兵部的官员隔在一个房间,并不
急着严刑逼供,而是先把其他的一些案犯带到堂上立时施以酷刑,惨厉的哀嚎声响彻四野,隔壁的那些官员人人色变,有的当场就吓得尿了裤子。吉温随后把他们领
到堂上,此时当真是要什么口供有什么口供。兵部官员人人反水,攻击前主官李适之的供词积了厚厚的一摞。玄宗开始还有些狐疑,他也曾听说过吉温的名声不太
好,遂另派人复查,结果发现那些人并没有受刑的迹象。玄宗龙心甚慰,大大褒奖了吉温。
  李适之既倒,韦坚也急得浑身汗出。正好立了大功的边将皇甫惟明回朝受赏,他忧心国事,深恶李林甫的奸邪,于是和韦坚,太子李亨商议除掉李
林甫的办法。李林甫的心腹御史中臣杨慎矜,为了及时搬除韦坚自己好登上相位,自告奋勇充当内鬼,打入太子一党,侦测到他们聚会的时间,向玄宗告发。自古天
子没人不怕太子和守边重臣内外勾连的,玄宗得知后大为震怒,罢黜韦坚,将皇甫惟明下狱。李林甫宜将剩勇追余寇,极力将太子扯下水。可是太子李亨实在是个人
物,沉静勇毅,不慌不忙地来个烈士断腕,主动废了爱妃韦氏,至于韦氏兄妹的死活就实在顾不上了。李林甫一不做,二不休,又瞄上了太子的另外一个爱妃杜氏的
父亲,以贪污罪为名将他下狱,李亨的韬晦功夫实在一绝,二次断腕,又主动废掉了杜妃,撇清干系。李林甫这次总算遇到了比他更耐心能忍的硬敌,只好长叹一声
后生可畏后暂时罢手。
  失去靠山的韦坚和李适之就惨了,三堂会审的官员都是李林甫的心腹爪牙,升任丞相的杨慎矜,御史中臣王珙,法曹吉温一齐施力把他们往死里办。总算玄宗存有一丝仁念,将他们举家发配边疆了事。

  李林甫岂肯善罢甘休,他深知对敌人仁慈就是对自己残酷的至理,起用另一位和吉温齐名的大酷吏罗希奭来善后。罗希奭和吉温双剑联手,合称罗钳吉
网,凡是撞到他们手里的人,不死也要脱层皮。(唐朝酷吏贡献给汉语的四字成语中,除了这个罗钳吉网,更有名的似乎是武则天时代那个的请君入瓮。)他刚刚以
朝廷御史的身份追踪到韦坚和皇甫惟明的流放地,还未来得及出手,他们就连同数百亲眷久闻罗钳的鼎鼎恶名,一齐骇得绝望自杀,尸体顺江漂流的到处都是。
此时李林甫的政敌除了顽强的太子之外清除得干干净净,当然宰相的位置也不可能只他一人独控,于是那个甘冒奇险的杨慎矜得偿所愿,升为宰相。为了消除玄宗的
疑虑,他除了提拔朝野皆知的私党杨慎矜到相位之外,又主动推荐另一个出了名的老混混陈希烈和他一同执政。陈希烈是个公认的糊涂蛋,整日只知道谈玄论道,动
不动就老庄齐物,信口雌黄,这点正合迷恋道学的玄宗的心意。从此李林甫的权势达到了极点,干脆就在自己家里办公,前来巴结的朝廷官员经常把他家门口几里之
外的路都堵得水泄不通。陈希烈虽然同为宰相,却几乎门可罗雀,他也不在意,终日左拥右抱,饮酒作乐,对李林甫极尽恭顺之能事。

  虽然位及人臣,李林甫却丝毫不放松警惕,笑里藏刀的功夫更是修炼得出神入化。一次,玄宗想起来当年随着张九龄一起被贬走的严挺之人才堪用,
和李林甫商量把他召入京师。李林甫下朝后找到了严挺之的弟弟和他说,“圣上其实相当挂念你的兄长,你不妨请你哥哥上书说自己年老体衰,希望回京师疗养,这
样就有机会面圣,恢复官职。”严挺之的弟弟感谢不已,依了李林甫的计策,结果玄宗看到严的奏折,感叹道可惜可惜,原来他已经病重,不堪其用了,于是罢了重
新起用他的念头。

  大唐的惯例一向是出将入相,在边关立了战功的将军都有可能
被皇上选中担任宰相。为了断绝他人和自己争竞的可能,李林甫向玄宗进言,胡人大多勇悍善战,又坦直忠心,易于控制,所以边防节度史不妨都让胡人出任。玄宗
当然应允,于是一大批胡人将星脱颖而出,各个能征惯战,威风了得,的确大大震慑了周围的所谓蛮夷之帮,其中有“哥舒夜带刀,单于夜遁逃”的哥舒翰,安边名
将阿史那社尔,著名的亚洲山地战之王高仙芝,当然也有差点玩完整个大唐天下的安禄山,史思明。李林甫此举不管是增强了边防力量也好,或是养虎遗患也好,其
本意在于这些胡人都不识字,而不识字的人想当大唐的宰相那是难于登天。

  不过那个自己一手提拔起来的杨慎矜却渐渐讨得玄宗的欢心,日益骄横,有与自己分庭抗礼之势。和盟友亲信翻脸李林甫也不是第一次,马上召集另
外两个心腹王珙和吉温一齐合谋整垮他。杨慎矜原以为他和吉温以前情同莫逆,多少会手下留情,谁知道吉温更是狠得出乎他意料,居然翻查他的家谱,查实他是隋
朝皇帝的嫡系子孙,虽说已经隔了四五代,但既然是前朝余孽,吉温从他家里查出造反的谶书也是理所当然的。杨慎矜得知自己做梦也梦到长什么样子的谶书居然被
搜了出来,当即连辩解也懒得辩解,伏剑自刎。

  杨慎矜的空位总要有人填的,这是李林甫的一贯战术,为了打击政敌就要团结另一个,等他的任务完毕再提拔新的人物打击并取代他。后世与此类似
的名言是“打鬼借钟馗”,“与天斗,与地斗,与人斗,其乐无穷”等等。其实很多时候并不是当权者喜欢斗,而是他不斗自身的权位就岌岌可危,传说中的其乐无
穷说到底不过是苦中作乐而已,当然也不排除斗人真的斗上了瘾从而产生了类似吸毒的那种心理依赖的可能。李林甫经过一番精心分析,选择了既能讨好玄宗,又因
为不学无术,事事而必须仰仗自己的外戚小流氓杨国忠。这次打了一辈子雁的老猎人李林甫终于被雁啄了眼,他犯了一个简单的错误,就是小看了枕头风的厉害。杨
国忠的妹妹就是那个万千宠爱于一身的著名艳妃杨贵妃。他虽然智商不高,政治手腕又低劣,但是仗着后台硬,李林甫终于抵挡不住。

  更要命的是原先的心腹嗅到暴风雨到来前的气息,纷纷另谋出路,一片众叛亲离的惨景。尤其是合作多年的第一鹰犬吉温居然也投到杨国忠那边,反
戈一击,汹汹逼人,对李林甫打击着实不轻。平心而论这也不能怪吉温不念旧情,他只怕也是被李林甫的所作所为彻底寒了心。吉温算是识时务的聪明人,明了自己
说到底不过是棋子的地位,及时安排好了自己的后路。同样是爪牙的王珙就胡涂得多了,继续对李林甫忠心不二。一生翻云覆雨的李林甫只怕也被他的执着所感动,
可是政治斗争中动了真情最要不得,这样一来他自己的末日也不远了。

  李林甫虽然玩笑里藏刀非常成功,可是时间长了,人人都知道了他的险恶。他怕死了仇家来找他算帐,出入都是前呼后拥,由数百精锐铁甲军荷戟环
卫。自古以来宰相出巡豪华的场面是不少,可是这样如临大敌的排场也确实少见。饶是如此,他依然不放心,经常随机地改变出巡路线,晚上睡觉的房间也是临时决
定。有一次,他的儿子在后花园里看到愁眉不展得父亲,指着在墙外辛勤耕作的农夫长叹道,父亲,你在这样下去只怕我们家以后想放弃荣华富贵,过那些村夫的生
活也难阿,李林甫也是长长叹了口气,摇头无奈道,你什么时候见过骑在老虎身上还能轻易下来的人那?

  风水轮流转,如今是杨国忠派系开始进攻了,最令李林甫想不到的还不是吉温的六亲不认,而是那个公认的糊涂蛋陈希烈率先扛起倒李的大旗,惊得
他差点眼镜跌落。陈希烈等人以其人之道还制其身,还是先打击李林甫旁支的旁支,王珙的儿子王蚶,把他以谋反罪下到牢里,王珙舐犊情深,拼上老命替儿子免
罪,结果自己也身陷泥潭,李林甫此时不顾风险替他唯一的死党辩解,玄宗早就被贵妃娘娘地枕头风吹酥了骨头,又对李这般明显的偏私有所不满,狠狠训斥了他一
顿,并下令将王氏父子枭首示众。

  李林甫一直是在强力支撑,如此一番惊吓,更是把他催到了生命的终点。这时大获全胜的杨国忠假惺惺地跑到李府去探病,李林甫老泪纵横,哀求
道,我死后我们李府的家眷就要拜托你照顾了,杨国忠慨然应允。李林甫接着又道,大唐的万钧重担今后要压到你身上了,你要好自为之阿。杨国忠冷汗顿时出了一
身。说了一辈子假话的李林甫到死终于真情流露。

  李林甫的忧虑不是没有道理的,在他当宰相的数十年,大唐的天下被他弄成了一棵掏空了根基的老树,已经经不起任何风雨了。他在位尚且凭着绝代
的权术手腕镇住天下枭雄,他一死就没人震得住了,更何况顶替他的是不入流的杨国忠。那个视天下如无物的安禄山,生平唯一怕的人就是李林甫。每次他到长安,
第一个就到李府拜访,如果李林甫不想见他,他就害怕得在地上直打滚,大呼我今天要死了,要死了,直到从人告知李相答应见他为止。当安禄山听说李林甫一死,
杨国忠居然当了宰相,狠狠朝地上呸了一声道,我原先以为大唐的宰相何等天人,不料杨国忠这样的无赖居然也能当担任?自此下定了造反的决心。知道杨国忠无能
的人还有那个聪明人吉温,他早就估计到大唐江山可能不保,毅然抛弃烂人杨国忠,转和他的对头安禄山勾通,结果聪明反被聪明误,被人告发通敌身首异处,他一
辈子精于算计,最后一把不料还是压错了庄。杨国忠在叛乱开始不久就被乱兵杀死,他的妹妹杨玉环随后香消玉陨。倒是那个扮猪吃老虎的陈希烈一直安稳得混到安
史之乱平定后的若干年,相比其他走马灯似的大人物,他应该算是下场最好的一个了。

  李林甫总算是死得及时,玄宗念及他几十年的奉献,下令将他厚葬。杨国忠很快把答应李林甫的话忘在脑后,逼着他的家人招供李林甫造反,很快他
的女婿杨齐宣因惧祸主动顺着杨国忠的意思诬告他岳丈和大反贼安禄山勾结,玄宗发觉自己竟然被瞒了几十年,勃然大怒,一面下令把李林甫从地下挖出,一面把李
家几百口全部流放到岭南,天远路迢,一路上死伤惨重。

  李林甫在世的时候,为了给自己最心爱的女儿挑一个可靠的夫婿,以他阅人无数的慧眼千挑万选才找到了人品端方的杨齐宣,并把他一手提拔为谏议
大夫。虽说杨后来的告发确实是无奈之举,李林甫在九泉之下得知后只怕也会伤心得涕泪俱下。即使这次他是为自己家族,也是为大唐唯一一次真诚的落泪,一切终
归于事无补,渔阳鼙鼓动起来,安禄山的数十万塞北铁骑开始扫荡整个中原大地,大唐的盛世已然画上了休止符。

  

  

  

之十: 晚清政潮

  
清光绪三十二年,天津道员段芝贵在给庆亲王奕劻的儿子载振贝勒办的寿宴上,献出花十万大洋买下的天津名伶大美女杨翠喜,并将其秘密送入载府中当小妾。载振
被他的这份重礼弄得心花怒放,作为回报,段芝贵在数月内就由小小的道员升任黑龙江巡抚。这等献美邀宠的案例,古往今来多得去了,玩得好甚至还可以搞出数段
名垂千史的风流佳话,然而段芝贵本人也没料到,这次普普通通的献媚居然引发了晚清的一场巨大的政潮,当朝一等一的显赫人物,权势熏天的直隶总督兼北洋大臣
袁世凯,领军机大臣庆亲王奕劻,内阁学士,军机大臣瞿鸿禨,邮传部尚书,慈禧太后的宠臣岑春煊等等都先后卷入其中,甚至事关国运的一场政治改革也因此而胎
死腹中。

  
段芝贵生平别无他长,只是论起拍马献媚,投机钻营的确称得上是专业人士。他在津门仅仅当一个小小的讲武堂教习的时候,就通过买通袁世凯的师爷得知袁对一名
青楼艳妓一直念念不忘。当他把那位美人买来送入袁府的时候,很自然的就升为四品道员,可是人心苦不足,这次载振路过天津,他又故伎重施,终于一跃而成黑龙
江巡抚,地道的二品大员。这等火箭般的升速在大清的历史上实在罕见,再加上段芝贵此人一向官声不好,满朝文武都在背后指指点点,以敢于直言弹劾不法权贵,
整贪倡廉而名动天下的御史赵启霖上书慈禧太后,狠狠参了段芝贵一本。他虽然顾忌到朝廷脸面,奏折中没有明示幕后的庆亲王父子,慈禧已是勃然大怒,下令不惜
一切代价彻查此事,给天下人一个交代。

  
中国几千年历史虽然没有发展出类似西方的三权分立的政治体制,却也摸索出一套内部制衡的监察手段,御史制度就是对高高在上的皇权和显赫的权贵的有力制约,
以致孙中山先生在草创民国的时候,专门成立了监察院,实际上继承的就是这套行而有效的御史制度。御史官员的品秩都不是很高,但是他们的能量相当大,很大程
度上可以左右舆论,甚至直接影响皇帝的裁决。

  当然御史也不是好当的,这些人第一要不好财,第二要不怕死。不好财是因为打铁要身板硬,要惩治贪官当然先不能让别人抓住把柄,所以充任御史
的官员都相当清廉,即使是在三年清知府,十万雪花银的晚清,那些京城的御史仍是苦守每年数百两银子的微薄俸禄。不怕死是因为他们经常要冒险触怒皇帝的,得
罪高官并不可怕,如果是皇帝在背后支持甚至还是荣升的好机会,可是直接开罪皇帝本人就需要莫大的勇气了。但他们的口号一向是“武死战,文死谏”,动不动就
孔曰成仁,孟曰取义,有的甚至自虐到巴不得皇上把自己杀了好青史流芳。除了那些个别凶悍的大暴君以外,一般的皇帝对他们也是相当头疼,即使经常被他们弄得
灰头土脸,也还轻易杀不得,多数时候还要违心地装出笑脸。明武宗正德皇帝有一次发飙,自己封自己为大将军想带着军队出关和蒙古人作战,三位内阁大员流泪苦
劝都没能劝住,倒是在居庸关被出巡的御史卡死。巡关御史明明知道他是皇帝,照样不买帐,任凭他在关下怎么威胁恐吓就是不开城门,武宗只好怏怏地打马回京,
事后也不敢拿他怎样。一般来说,能当好御史的人大概都是由特殊材料做成的,岳飞曾感叹过,武将不怕死,文官不贪财,天下方有太平之日,这些人当真是既不怕
死,也不贪财,实在是难找得很。幸好几千年的儒家熏陶,培养出了无数轻生重义的忠直之士,尽管被今人讥为愚忠,书呆子,愣头青等等,也确实勇敢担负起了艰
巨无比的监察工作。

  赵启霖的参劾奏章不仅吓坏了段芝贵和贝勒载振,更是让真正的大后台庆亲王奕劻坐立不安。段芝贵当不当的成巡抚是小事一桩,即便儿子因徇私罢
官问题也不是很大,但是他在朝中的政敌绝对不会放弃这个好机会的。当初慈禧太后召四川总督岑春煊入京的时候,岑就在太后面前痛斥奕劻父子贪赃误国,要不是
慈禧有意偏袒,奕劻那次就被罢了官。岑春煊原本是个粗鲁的武官,之所以飞黄腾达全拜庚子国难所赐。八国联军入京,慈禧仓惶西狩,一路上岑春煊领兵护卫,照
顾得无微不至,每天晚上亲自扶着腰刀在寝宫前站岗。慈禧深受感动,此后岑成了她座下第一红人。但是即使是他,那次也没能扳倒奕劻。慈禧精明了得,深知奕劻
手脚不怎么干净那是不假,但胜在没有野心,比起忠心不二,易于操控,贪污受贿什么的都是小节了。不过此次情况不同,太后动了真怒,大大小小的官员都在密切
关注此案,如果真的铁证如山慈禧也未必罩得住。

  更糟糕的是另一位军机重臣,清流的领袖人物瞿鸿禨也发现这个契机,动员一切力量向奕劻发难。平心而论瞿鸿禨和奕劻本人并没有什么深仇大恨,
但是他和北洋大臣袁世凯一直是死对头,这个梁子还是当年戊戌变法袁世凯狠狠摆了光绪皇帝一道时结下的。瞿鸿禨深恨袁世凯两面三刀的小人嘴脸,一直想报复,
只是袁世凯甚得慈禧的宠幸,只能暗伏爪牙,等待时机。

  当年的那场流血变法,袁世凯当然是负有责任。但他是一个精明的政治赌徒,不可能幼稚到把宝押在胜率并不大的光绪身上的。身为一代枭雄,他平
生行事向来不择手段,能用忠君爱国的理念感召的就用爱国的大旗感召那些热血青年,能用私人情谊笼络的就温情脉脉地笼络那些士为知己者死的壮士,能花钱行贿
送美女摆平的更是不吝血本,尤其是为了喂饱这位当朝的首席军机庆亲王,甚至不惜挪用军饷。当然奕劻也是袁世凯在朝中最有力的后援。

  瞿鸿禨牢牢咬住此案不松口,正是为了来个一箭双雕,载振是庆亲王的亲儿子,段芝贵是袁世凯的大红人,再加上此案闹得满城风雨,已经上达天
听,实在是为国除去两位巨奸的天赐良机。钦差大臣载沣,孙家鼐接手此案,很快就将段芝贵一抹到底,但是对于一人之下,万人之上的奕劻,他们也不敢妄动。当
然奕劻也没闲着,一边撒出大把银钱,到处收买证人,一边悄悄的把那位名妓送回天津,嘱咐她如何应对盘查。果然再次复查的时候,段芝贵翻供,拒不承认有献美
行贿的事情,而杨翠喜也只承认在天津自己侍奉过载振,但并没有到他府上当姨太太。段芝贵当初买杨翠喜的时候就留了个心眼,并不是亲自出面去买,而是让另一
个大商人经手的,经手人如今也不认帐,说买过杨翠喜当丫鬟是不假,但并没有将她转手第三方。

  所有的证词汇总到两位钦差手中,虽然漏洞百出,他们也只好装糊涂,再加上有人马上送了三万两银票到那些办案人手中,大家都乐得闷声发大财,
也就马马虎虎把复奏递了上去。瞿鸿禨一看复奏,气的青筋暴跳,但事已至此,也是无可奈何。这时有位工于心计的幕僚提醒他,太后看到这样的复奏只怕要被赵启
霖气死,不妨您干脆火上浇油,只要激起公愤事情就好办了。瞿鸿禨何等机敏,立时恍然,第二日就在太后盛怒之下召开的军机会议上力主严惩御史赵启霖,甚至警
告道赵启霖捕风捉影,诬告亲贵,如不严惩,势必让百官寒心,要是让人效尤,局面就更难收拾了。慈禧本来就有重惩赵启霖的意思,见一向清正的瞿鸿禨居然也不
替他说话,就重重地点了点头。其他人眼见形式逆转,和赵启霖同为清流一党的瞿鸿禨都翻脸了,于是各个指摘赵启霖的不是,主张严惩。谁知道老奸巨猾的奕劻反
而跳出来替赵启霖说话,力主从轻处罚,他恳切地哀求道,赵御史虽然举奏不实,却对百官仍不失是个警告,所谓有则改之,无则加冕,应当从轻发落。慈禧毕竟不
是傻子,见此情形顿时也是心明如镜,只是将赵启霖御史一职罢去了事。

  瞿鸿禨早就联络好一干人等,只待赵启霖一倒霉就一齐鼓噪喊冤大造舆论,甚至在眼巴巴的盼他被慈禧下令砍了脑袋,谁知道奕劻固然是恨他恨得牙
根痒,却也知道分寸,警醒地跳出了圈套。赵启霖敢于上书弹劾,虽说是出于除贪惩腐的公心,并不一定是受了瞿鸿禨的唆使,但至少也是被他默许的,谁知道他们
这些清流战友居然指望用他的血来换奕劻的垮台,光想想只怕也是心寒。扳倒大贪官是重要,也不必玩的这么绝吧,差点玩掉了吃饭的家伙,至于自己得以侥幸脱逃
全赖一心要扳倒的大奸臣奕劻在慈禧面前说尽好话,事后仔细思量会不会神经错乱?

  当然御史中也有聪明人,御史蒋式惺就是看到了奕劻的尴尬处境,狠狠地赚了个名利双收。他逆势而动,上书弹劾庆亲王奕劻收受贿赂,言词激愤,
朝野震惊。以赵启霖之刚愎,尚且不敢将矛头直接对准这位亲王,这位蒋御史莫不是发了疯?慈禧太后迫于百官压力,派钦差清查奕劻的家当。奕劻急得汗珠滚滚,
正好道员吴某来他家拜访,献上一条秘计,让他把家产折合一下以别人的名义存放在汇丰银行,这样就可以躲过大劫。奕劻欣然从之,清查的结果当然是他一不小心
成了大清立国三百年来罕见的清官,蒋式惺所奏不实,被罢去了官职,当然这又是奕劻在慈禧面前求情的结果。蒋御史含恨离职,众人自发把酒相送,一时成了清官
的楷模,御史的偶像。奕劻得胜还家,却愕然发现六十万白花花的银子已经被人取走了,知道中计,却也不敢声张,只是暗地伤心呕血。蒋式惺和吴道员一齐设计,
骗得巨款,他虽然官职没了,但清名既留,又发了大财,也算是不枉在京城一番苦熬了。

  赵启霖劾段芝贵一案虽然收尾,却同时拉开了晚清最后一场大政潮的序幕。奕劻差点被瞿鸿禨设计参倒,痛定思痛,此后当然是和袁世凯结党倾力报复,瞿鸿禨则拉拢了大红人岑春煊和他们抗衡,各出奇计,在慈禧老太后面前极力离间。

  首先倒霉的是岑春煊。袁世凯和他都在太后面前得宠,又都是行伍出身,有军方背景,互相争竞得最激烈。袁世凯几次在慈禧面前告发岑春煊和流亡海
外的保皇党康有为,梁启超等勾结,意图不轨,可太后对岑恩眷正隆,根本听不进去。当时的照相术发明已久,而且重复曝光的相片合成技术也已经出世,袁世凯找
高手伪造了一张康有为和岑春煊的合影给慈禧看,慈禧太后以前见过照相机,知道此物是洋人的奇技淫巧,所摄的东西最真实不过,登时怒发冲冠,把岑春煊赶出京
城。

  其时大清的江山已经摇摇欲坠,慈禧太后有意启动政改,虽没有明示,可袁世凯最善于揣摩上意,于是跳出来主动要求完成十年前戊戌变法中康有
为,梁启超他们未竞的事业,于是朝野大哗。慈禧问计瞿鸿禨,瞿鸿禨痛栽袁世凯此举根本就是看到太后年事已高在替他自己找后路,企图通过政改架空太后的权
利,并和康梁等流亡海外的戊戌余孽勾结,拥立光绪皇帝复位。慈禧又一次气得几乎发狂,撤去了袁世凯的职务,一场真正自上而下的政改成了权利争斗的牺牲品。

  无论是袁世凯,还是瞿鸿禨,都是看透了年迈的慈禧的弱点,一直对当年的那场政变耿耿于怀,最受不得这方面的挑拨。纵使慈禧精明过人,也被他
们当工具一样地反复玩弄。年迈老人当政,大多不是愚顽颟顸就是偏执多疑,即便英明如汉武帝,年青的时候何等睿智神武,到老了照样失心疯逼死了太子,慈禧当
然也不例外。

  至于瞿鸿禨,鉴于以上两位的沉痛教训,真正地做到敏行讷言,不给对方以任何可趁之机。可惜他虽然深沉不露,他的夫人却是位出了名的大嘴巴。
有一次慈禧召瞿鸿禨觐见,又一次讨论奕劻的贪墨问题,并说可能加以惩处。瞿鸿禨回家一高兴忍不住和夫人吐露了太后的意图,她夫人和闺中密友私聊时将这个消
息传播了出去,居然一直传到香港,不久英国泰晤士报刊载了这一传闻。英国驻华大使看到后大吃一惊,大清帝国的首席大臣垮台可不是小事,于是请他夫人在宴会
上转告了慈禧。慈禧闻听才是真正的大吃一惊,仔细想想依稀记得只和瞿鸿禨密谈过此事。奕劻得知后哈哈大笑,连夜弹劾瞿鸿禨勾结洋人报馆,扰乱国政,第二天
瞿鸿禨就被罢免还乡。

  
瞿鸿禨为官极其清廉,对大清的忠心也是日月可鉴。大清灭亡后,他和一帮遗老遗少整日把酒浇愁,以泪洒面,死前已然清贫如洗,相比躲在租界里拿着贪墨的大笔
钱财舒舒服服作寓公的奕劻,他在道德上的确是高的不可同日而语。他是百分之百的清官,奕劻是不折不扣的贪官,但是说起权谋倾轧,他们的手法就没有什么道德
上的高下之分了。

  历史是如此的复杂,以致清官和贪官,能吏和庸才,有心为恶与无心为恶,事实作恶与事实上行善经常组合纠缠在一起让人看不清楚。我们历朝历代
的万千百姓是善良的,在他们的心目中,只要是清官,哪怕是无心作恶而确实做了伤害自己的事情都是可以原谅的,甚至是有心作恶而确实也做了恶那至少也是值得
同情的。他们也是单纯的,只要贪官得到了惩处就已经谢天谢地了,即便贪官们是被不名誉的手法如反间毒计整下去也不打紧。至于正义伸张的手段根本就不重要,
或者说从来也没人关注过。
  

后记

   这个帖子说是写反间毒计,实际上是试图在写人性,不过倒不是人性的阴暗面,而是人性的弱点。

   有千年不变的月亮,就有千年不变的人性,当然就有千年不变的人性的弱点。

   每个人都有自身的弱点,伟人智者也不例外,问题只在于是否能掩饰得巧妙。酒色财气对于一般人就已经很难抵御,当然光这是远远不够的:

   陈平得以离间项羽范增,是因为找到了项羽的弱点,轻易就嫉妒猜疑。

   明末的太监们则不过找到了人性的一个共同弱点,即使钢筋铁骨的人物也经不起反复失望,尤其是精神上和肉体上同时进行的。

   王敦中计无非是因为他把人品看得太重。重视道德并不是一件坏事,但是仅仅因为人品上的不完美就将这个人全盘否定实在不是成事之道,这点汉高祖刘邦就相当高明,从他放手任用声名狼藉的陈平就可以看出。

   相比之下慕容垂就冤枉得很了,他的弱点仅仅在于他和儿子作为刚刚归附的叛臣难免的狐疑心理。尽管这个弱点很难被抓住,但王猛还是充分利用并达到了他的目的。

   贾后的弱点在于心太黑。心黑手毒,行事果决本身并不是弱点,但是这种人大多多断少谋,容易被人利用。晋献公的弱点就普通了,对美色的完全占有欲会让大部分男人疯狂的。

   严世蕃是个厉害角色,他的最后保命一计一举抓住了所有人的弱点,以前的私党卖主求荣的天性,办案官员欲置己于死地而后快的操切,嘉靖必定要掩饰的自尊,一气呵成,堪称经典。

   刘瑾成功地挡住了无数的进攻,但付出的代价是自己成了众矢之的,当然他最直接的弱点是一个不相干的人的造反檄文。

   苏秦是抓住了凶手的贪功心切,吴起一次次中计的根源在于他是个不折不扣的名利狂。

   李林甫则是抓人性弱点的全才,几乎是见招拆招,利用了才子的清高耿介,名利之徒的好大喜功等等,当然他抓住的最大弱点毫无疑问是玄宗的盲目自信。

  
慈禧太后生平最大的弱点在于戊戌变法时架空了光绪帝却没能废得彻底,反而成了一块心病。无数人认识到这一点并加以利用,除了袁世凯,瞿鸿禨,当年在庚子事
变中正是有人利用这一点鼓动她代表大清帝国向全世界宣战,鼓动的方法就是骗她洋人策划要把光绪帝重新扶上皇位。一个人的弱点终于放大成一个民族的悲剧。

   一套二十四史几乎就是完整的政治斗争史,无数的权谋机变,匪夷所思的奇谋秘计充斥其间,如果换一个角度再看,所有这些表象的背后折射出的其实是形形色色的人性的弱点。

  

  
世界上只怕没有哪个民族像我们一样热衷五花八门的计策了,即使是小孩子也都能对各种诡计的普及教材《三国演义》说上几句,当然这远远不够,我们的祖先还总
结出复杂的三十六计,以致我们民族的最高智慧象征诸葛亮之所以千古留名,就是因为传说中的他能用各种计策成功地控制住所有他想算计的人。

   这一点西方人是不认同的。他们眼中的最高智慧象征是牛顿,爱因斯坦这些破解自然奥秘的科学家。亚历山大,恺撒,拿破仑,邱吉尔等等伟人固然是伟人,但是只怕没有西方人认为他们是最有智慧的人。

   即使在国人最引以自豪的计策谋略方面,我们似乎也应该有一点点汗颜的必要。当我们在为几千年前的孙子兵法和简单的田忌赛马的博弈模型而欢呼叫好的时候,西方人发展出了真正的博弈论:

   1944年,大数学家诺依曼和摩根斯坦合作的《博弈论与经济行为》一书问世标志着博弈论的诞生。

   1950年,天才数学家纳什的论文《N人博弈的均衡点》,《非合作博弈》给出了著名的纳什均衡的概念,解决了非零和博弈的难题,博弈论获得重大突破。时至今日,博弈论对经济学,社会学,包括政治学都产生了不可估量的影响。

   不过我们可以聊以自慰的是这些理论上的科学巨人,也就是常说的书呆子,哪怕是混在我国最底层的官场中也会被大字都不识的人轻松击败。其实失败的原因他们本人只怕也很清楚,这就是游戏的真正规则,他们永远也弄不明白。

2006年05月04日

五一是过得挺无聊的。基本上是呆在电脑前面度过的。倒是把House, Desperate Housewives, Prison Break最新的几集都看完了。

人很不在状态,心情也不好,其实去年的五一我也是这样的过法,但心情完全不一样。现在这个状态确实比较难受,工作上不着天,下不着地,感情。。唉。。。

一切都会好起来的。只需要再积极一点再努力一点。嗯!Don’t your life miserable but make it happy!

2006年03月22日

这几天看了一些SIP穿越NAT的东西,我现在大概是对穿越NAT一知半解,东西有点多,整理一下内容,要不就乱了:
1) NAT Traversal 技术
NAT
Traversal
的解决方案提出的和实现的都不少,方案包括最开始看到的STUN(不支持很常用的对称NAT),TURN,ICE。ICE是一个基于STUN和TURN的
框架,目前还是草案,没有找到相关的实现项目。刚刚看到了一个NAT Traversal Best
Practices的文档(附件中有),里面对TURN的评价是实现困难,而ICE也不是100%有效。根据这个文档中提到的两个目前较好的解决方案是开
源的OpenSER和MediaProxy(分别针对SIP中的signal和media流)。我还没有研究它俩,有空看看。

2) 相关资源
VOCAL——无NAT Traversal相关内容,但其网站上有STUND的源码,可用。http://www.vovida.org/
OpenSER——用于SIP signal穿越NAT,http://openser.org
MediaProxy——用于SIP media穿越NAT,http://mediaproxy.ag-projects.com/,http://www.ag-projects.com/MediaProxy.html
在查资料的时候,有个意外的发现,就是看到了YATE(Yet Another Telephony Engine)作者写的文章,里面提到了他们这个项目如何穿越NAT,SKYPE如何穿越NAT。有点意思,http://freshmeat.net/articles/view/2079/


NAT Best
Practices是MediaProxy项目的人写的,有一定参考价值;另外那个文档没有什么新鲜的内容,但是里面对STUN介绍比较多,推荐在需要
了解STUN RFC中提到的4类防火墙的时候和STUN技术的时候参考这个文档,因为它配有示意图,容易理解。


学海无涯。