凡's profile欢迎来到一凡的共享空间PhotosBlogListsMore Tools Help

凡 一

Location
Photo 1 of 13

JAR 文件是什么?

JAR 文件是什么?

JAR 文件格式以流行的 ZIP 文件格式为基础,用于将许多个文件聚集为一个文件。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

一个 JAR 文件可以用于:

  • 用于发布和使用类库
  • 作为应用程序和扩展的构建单元
  • 作为组件、applet 或者插件程序的部署单位
  • 用于打包与组件相关联的辅助资源

JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的。它们包括:

  • 安全性。可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。
  • 减少下载时间。 如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在一个 HTTP 事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件打开一个新连接。
  • 压缩。JAR 格式允许您压缩文件以提高存储效率。
  • 传输平台扩展。 Java 扩展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,这些扩展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 开发的扩展例子)。
  • 包密封。存储在 JAR 文件中的包可以选择进行 密封,以增强版本一致性和安全性。密封一个包意味着包中的所有类都必须在同一 JAR 文件中找到。
  • 包版本控制。一个 JAR 文件可以包含有关它所包含的文件的数据,如厂商和版本信息。
  • 可移植性。处理 JAR 文件的机制是 Java 平台核心 API 的标准部分。

压缩的和未压缩的 JAR

jar 工具(有关细节参阅 jar 工具 )在默认情况下压缩文件。未压缩的 JAR 文件一般可以比压缩过的 JAR 文件更快地装载,因为在装载过程中要解压缩文件,但是未压缩的文件在网络上的下载时间可能更长。

META-INF 目录

大多数 JAR 文件包含一个 META-INF 目录,它用于存储包和扩展的配置数据,如安全性和版本信息。Java 2 平台识别并解释 META-INF 目录中的下述文件和目录,以便配置应用程序、扩展和类装载器:

  • MANIFEST.MF。这个 manifest 文件定义了与扩展和包相关的数据。
  • INDEX.LIST。 这个文件由 jar 工具的新选项 -i 生成,它包含在应用程序或者扩展中定义的包的位置信息。它是 JarIndex 实现的一部分,并由类装载器用于加速类装载过程。
  • xxx.SF。 这是 JAR 文件的签名文件。占位符 xxx标识了签名者。
  • xxx.DSA。 与签名文件相关联的签名程序块文件,它存储了用于签名 JAR 文件的公共签名。

jar 工具

为了用 JAR 文件执行基本的任务,要使用作为Java Development Kit 的一部分提供的 Java Archive Tool ( jar 工具)。用 jar 命令调用 jar 工具。表 1 显示了一些常见的应用:

表 1. 常见的 jar 工具用法

功能 命令
用一个单独的文件创建一个 JAR 文件 jar cf jar-file input-file...
用一个目录创建一个 JAR 文件 jar cf jar-file dir-name
创建一个未压缩的 JAR 文件 jar cf0 jar-file dir-name
更新一个 JAR 文件 jar uf jar-file input-file...
查看一个 JAR 文件的内容 jar tf jar-file
提取一个 JAR 文件的内容 jar xf jar-file
从一个 JAR 文件中提取特定的文件 jar xf jar-file archived-file...
运行一个打包为可执行 JAR 文件的应用程序 java -jar app.jar







可执行的 JAR

一个 可执行的 jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的JAR 文件中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。

创建可执行 JAR

创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是 com.mycompany.myapp.Sample 。您要创建一个包含应用程序代码的 JAR 文件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest 的文件,并在其中加入以下一行:


Main-Class: com.mycompany.myapp.Sample

然后,像这样创建 JAR 文件:


jar cmf manifest ExecutableJar.jar application-dir

所要做的就是这些了 -- 现在可以用 java -jar 执行这个 JAR 文件 ExecutableJar.jar。

一个可执行的 JAR 必须通过 menifest 文件的头引用它所需要的所有其他从属 JAR。如果使用了 -jar 选项,那么环境变量 CLASSPATH 和在命令行中指定的所有类路径都被 JVM 所忽略。

启动可执行 JAR

既然我们已经将自己的应用程序打包到了一个名为 ExecutableJar.jar 的可执行 JAR 中了,那么我们就可以用下面的命令直接从文件启动这个应用程序:


java -jar ExecutableJar.jar







包密封

密封 JAR 文件中的一个包意味着在这个包中定义的所有类都必须在同一个 JAR 文件中找到。这使包的作者可以增强打包类之间的版本一致性。密封还提供了防止代码篡改的手段。

要密封包,需要在 JAR 的 manifest 文件中为包添加一个 Name 头,然后加上值为“true”的 Sealed 头。与可执行的 JAR 一样,可以在创建 JAR 时,通过指定一个具有适当头元素的 manifest 文件密封一个 JAR,如下所示:


Name: com/samplePackage/
Sealed: true

Name 头标识出包的相对路径名。它以一个“/”结束以与文件名区别。在 Name 头后面第一个空行之前的所有头都作用于在 Name 头中指定的文件或者包。在上述例子中,因为 Sealed 头出现在 Name 头后并且中间没有空行,所以 Sealed 头将被解释为只应用到包 com/samplePackage 上。

如果试图从密封包所在的 JAR 文件以外的其他地方装载密封包中的一个类,那么 JVM 将抛出一个 SecurityException

扩展打包
扩展为 Java 平台增加了功能,在 JAR 文件格式中已经加入了扩展机制。扩展机制使得 JAR 文件可以通过 manifest 文件中的 Class-Path 头指定所需要的其他 JAR 文件。

假设 extension1.jar 和 extension2.jar 是同一个目录中的两个 JAR 文件,extension1.jar 的 manifest 文件包含以下头:


Class-Path: extension2.jar

这个头表明 extension2.jar 中的类是 extension1.jar 中的类的 扩展类。extension1.jar 中的类可以调用 extension2.jar 中的类,并且不要求 extension2.jar 处在类路径中。

在装载使用扩展机制的 JAR 时,JVM 会高效而自动地将在 Class-Path 头中引用的 JAR 添加到类路径中。不过,扩展 JAR 路径被解释为相对路径,所以一般来说,扩展 JAR 必须存储在引用它的 JAR 所在的同一目录中。

例如,假设类 ExtensionClient 引用了类 ExtensionDemo ,它捆绑在一个名为 ExtensionClient.jar 的 JAR 文件中,而类 ExtensionDemo 则捆绑在 ExtensionDemo.jar 中。为了使 ExtensionDemo.jar 可以成为扩展,必须将 ExtensionDemo.jar 列在 ExtensionClient.jar 的 manifest 的 Class-Path 头中,如下所示:


Manifest-Version: 1.0
Class-Path: ExtensionDemo.jar

在这个 manifest 中 Class-Path 头的值是没有指定路径的 ExtensionDemo.jar,表明 ExtensionDemo.jar 与 ExtensionClient JAR 文件处在同一目录中。







JAR 文件中的安全性

JAR 文件可以用 jarsigner 工具或者直接通过 java.security API 签名。一个签名的 JAR 文件与原来的 JAR 文件完全相同,只是更新了它的 manifest,并在 META-INF 目录中增加了两个文件,一个签名文件和一个签名块文件。

JAR 文件是用一个存储在 Keystore 数据库中的证书签名的。存储在 keystore 中的证书有密码保护,必须向 jarsigner 工具提供这个密码才能对 JAR 文件签名。


图 1. Keystore 数据库
Keystore 数据库

JAR 的每一位签名者都由在 JAR 文件的 META-INF 目录中的一个具有 .SF 扩展名的签名文件表示。这个文件的格式类似于 manifest 文件 -- 一组 RFC-822 头。如下所示,它的组成包括一个主要部分,它包括了由签名者提供的信息、但是不特别针对任何特定的 JAR 文件项,还有一系列的单独的项,这些项也必须包含在 menifest 文件中。在验证一个签名的 JAR 时,将签名文件的摘要值与对 JAR 文件中的相应项计算的摘要值进行比较。


清单 1. 签名 JAR 中的 Manifest 和 signature 文件
Contents of signature file META-INF/MANIFEST.MF

Manifest-Version: 1.0
Created-By: 1.3.0 (Sun Microsystems Inc.)

Name: Sample.java
SHA1-Digest: 3+DdYW8INICtyG8ZarHlFxX0W6g=

Name: Sample.class
SHA1-Digest: YJ5yQHBZBJ3SsTNcHJFqUkfWEmI=

Contents of signature file META-INF/JAMES.SF

Signature-Version: 1.0
SHA1-Digest-Manifest: HBstZOJBuuTJ6QMIdB90T8sjaOM=
Created-By: 1.3.0 (Sun Microsystems Inc.)

Name: Sample.java
SHA1-Digest: qipMDrkurQcKwnyIlI3Jtrnia8Q=

Name: Sample.class
SHA1-Digest: pT2DYby8QXPcCzv2NwpLxd8p4G4=

数字签名

一个数字签名是.SF 签名文件的已签名版本。数字签名文件是二进制文件,并且与 .SF 文件有相同的文件名,但是扩展名不同。根据数字签名的类型 -- RSA、DSA 或者 PGP -- 以及用于签名 JAR 的证书类型而有不同的扩展名。

Keystore

要签名一个 JAR 文件,必须首先有一个私钥。私钥及其相关的公钥证书存储在名为 keystores 的、有密码保护的数据库中。JDK 包含创建和修改 keystores 的工具。keystore 中的每一个密钥都可以用一个别名标识,它通常是拥有这个密钥的签名者的名字。

所有 keystore 项(密钥和信任的证书项)都是用唯一别名访问的。别名是在用 keytool -genkey 命令生成密钥对(公钥和私钥)并在 keystore 中添加项时指定的。之后的 keytool 命令必须使用同样的别名引用这一项。

例如,要用别名“james”生成一个新的公钥/私钥对并将公钥包装到自签名的证书中,要使用下述命令:


keytool -genkey -alias james -keypass jamespass 
        -validity 80 -keystore jamesKeyStore 
        -storepass jamesKeyStorePass

这个命令序列指定了一个初始密码“jamespass”,后续的命令在访问 keystore “jamesKeyStore”中与别名“james”相关联的私钥时,就需要这个密码。如果 keystore“jamesKeyStore”不存在,则 keytool 会自动创建它。

jarsigner 工具

jarsigner 工具使用 keystore 生成或者验证 JAR 文件的数字签名。

假设像上述例子那样创建了 keystore “jamesKeyStore”,并且它包含一个别名为“james”的密钥,可以用下面的命令签名一个 JAR 文件:


jarsigner -keystore jamesKeyStore -storepass jamesKeyStorePass 
          -keypass jamespass -signedjar SSample.jar Sample.jar james

这个命令用密码“jamesKeyStorePass”从名为“jamesKeyStore”的 keystore 中提出别名为“james”、密码为“jamespass”的密钥,并对 Sample.jar 文件签名、创建一个签名的 JAR -- SSample.jar。

jarsigner 工具还可以验证一个签名的 JAR 文件,这种操作比签名 JAR 文件要简单得多,只需执行以下命令:


jarsigner -verify SSample.jar

如果签名的 JAR 文件没有被篡改过,那么 jarsigner 工具就会告诉您 JAR 通过验证了。否则,它会抛出一个 SecurityException , 表明哪些文件没有通过验证。

还可以用 java.util.jarjava.security API 以编程方式签名 JAR(有关细节参阅 参考资料)。也可以使用像 Netscape Object Signing Tool 这样的工具。







JAR 索引

如果一个应用程序或者 applet 捆绑到多个 JAR 文件中,那么类装载器就使用一个简单的线性搜索算法搜索类路径中的每一个元素,这使类装载器可能要下载并打开许多个 JAR 文件,直到找到所要的类或者资源。如果类装载器试图寻找一个不存在的资源,那么在应用程序或者 applet 中的所有 JAR 文件都会下载。对于大型的网络应用程序和 applet,这会导致启动缓慢、响应迟缓并浪费带宽。

从 JDK 1.3 以后,JAR 文件格式开始支持索引以优化网络应用程序中类的搜索过程,特别是 applet。JarIndex 机制收集在 applet 或者应用程序中定义的所有 JAR 文件的内容,并将这些信息存储到第一个 JAR 文件中的索引文件中。下载了第一个 JAR 文件后,applet 类装载器将使用收集的内容信息高效地装载 JAR 文件。这个目录信息存储在根 JAR 文件的 META-INF 目录中的一个名为 INDEX.LIST 的简单文本文件中。

创建一个 JarIndex
可以通过在 jar 命令中指定 -i 选项创建一个 JarIndex。假设我们的目录结构如下图所示:


图 2. JarIndex
JarIndex Demo

您将使用下述命令为 JarIndex_Main.jar、JarIndex_test.jar 和 JarIndex_test1.jar 创建一个索引文件:


jar -i JarIndex_Main.jar JarIndex_test.jar SampleDir/JarIndex_test1.jar 

INDEX.LIST 文件的格式很简单,包含每个已索引的 JAR 文件中包含的包或者类的名字,如清单 2 所示:


清单 2. JarIndex INDEX.LIST 文件示例

JarIndex-Version: 1.0

JarIndex_Main.jar
sp

JarIndex_test.jar
Sample

SampleDir/JarIndex_test1.jar
org
org/apache
org/apache/xerces
org/apache/xerces/framework
org/apache/xerces/framework/xml4j







结束语

JAR 格式远远超出了一种压缩格式,它有许多可以改进效率、安全性和组织 Java 应用程序的功能。因为这些功能已经建立在核心平台 -- 包括编译器和类装载器 -- 中了,所以开发人员可以利用 JAR 文件格式的能力简化和改进开发和部署过程。.





参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 参阅 jar 实用程序的命令行选项的文档。


  • Raffi Krikorian 在 ONJava 上发表的文章提供了有关 programmatically signing a JAR file的帮助。


  • 这篇关于 Java Archive Tool的文档解释了创建和操作 JAR 文件可以使用的选项。


  • 文章“ Java Web Start”( developerWorks,2001 年 9 月)描述了如何使用这种技术,以便允许应用程序可以指定所需的 JAR 文件并动态下载它们。


  • 有关 J2EE 服务器(比如 IBM WebSphere Application Server)使用 JAR 文件格式的不同方式,请参阅“ What are Java Archive (JAR) files?


  • JAR 格式是 WAR (Web Archive) 格式的基础,WAR用于在 J2EE 容器中部署 Servlet 和 JSP 应用程序。更多内容请参阅“ What are WAR files?”。


  • JAR 格式也是 EAR (Enterprise Archive) 格式的基础,EAR 用于在 J2EE 容器中部署 EJB。更多内容请参阅“ What are Enterprise Archive (EAR) files?”。
  • 作者简介

    Pagadala J. Suresh 是 IBM Global Services India 的软件工程师。他擅长的领域包括 Java 技术、WebSphere Application Server 和 WebSphere Studio Application Developer (WSAD)、Ariba Buyer。他参与了 WebSphere 的 IBM Redbook 项目。可以通过 pjsuresh@in.ibm.com 与 Pagadala 联系。


     

    Palaniyappan Thiagarajan 是位于印度班加罗尔的 IBM Global Services India 的软件工程师。他是IBM 认证的 IBM WebSphere Application Server V3.5 和 IBM DB2 UDB V7.1 Family Fundamentals 专家。可以通过 tpalaniy@in.ibm.com 与 Palaniyappan 联系。


log4j/log4e的使用(zz)

                                                                                 来源于网络

log4j/log4e的使用 原文作者:天才 Kylin项目小组 log4j简介 简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就 可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。 Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况。 log4j使用方法 下面介绍的是log4j一些理论方面的知识,读者觉得枯燥的话可以跳过本节直接阅读第三节实例部分。   1、定义配置文件   首先使用配置文件将使我们的应用程序更加灵活配置log日志输出方式包括输出优先级、输出目的地、输出格式。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:   ①配置根Logger,其语法为:0   log4j.rootLogger = [ level ] , appenderName, appenderName, …   其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。   ②配置日志信息输出目的地Appender,其语法为:   log4j.appender.appenderName = fully.qualified.name.of.appender.class   log4j.appender.appenderName.option1 = value1   …   log4j.appender.appenderName.option = valueN   其中,Log4j提供的appender有以下几种:   org.apache.log4j.ConsoleAppender(控制台),   org.apache.log4j.FileAppender(文件),   org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),   org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),   org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   ③配置日志信息的格式(布局),其语法为:   log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class   log4j.appender.appenderName.layout.option1 = value1   …   log4j.appender.appenderName.layout.option = valueN   其中,Log4j提供的layout有以下几种:   org.apache.log4j.HTMLLayout(以HTML表格形式布局),   org.apache.log4j.PatternLayout(可以灵活地指定布局模式),   org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),   org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)   Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息   %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL   %r 输出自应用启动到输出该log信息耗费的毫秒数   %c 输出所属的类目,通常就是所在类的全名   %t 输出产生该日志事件的线程名   %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”   %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921   %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)   2、在代码中使用Log4j   ①得到记录器   使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:   public static Logger getLogger( String name)   通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:   static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )   ②读取配置文件   当获得了日志记录器之后,第二步将配置Log4j环境,其语法为: BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。   PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。 例:PropertyConfigurator.configure(".\\src\\log4j.properties")   DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。   ③插入记录信息(格式化日志信息)   当上两个必要步骤执行完毕,就可轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:   Logger.debug ( Object message ) ;   Logger.info ( Object message ) ;   Logger.warn ( Object message ) ;   Logger.error ( Object message ) ; log4j范例程序 下面将使用一个最简单的范例程序来进一步说明log4j的使用方法。程序代码如下: import org.apache.log4j.*; public class LogTest { static Logger logger = Logger.getLogger(LogTest.class.getName()); public static void main(String[] args) { PropertyConfigurator.configure ( “.\\src\log4j.properties”); logger.debug("Debug ..."); logger.info("Info ..."); logger.warn("Warn ..."); logger.error("Error ..."); } } 程序说明: ① static Logger logger = Logger.getLogger(LogTest.class.getName());就是创建一个属于LogTest类的Logger对象,创建时要告知Logger你当前的Class是什么。 ② PropertyConfigurator.configure ( “log4j.properties”)就是说使用当前工程目录下的src文件夹中的log4j.properties文件作为配置文件。若将log4j.properties放在工程根目录下也可不写此句,程序会自动找到配置文件。 ③ logger.debug就是输出debug的信息,logger.info就是输出提示信息,logger.warn就是显示警告信息,logger.error就是显示错误信息。 下面是配置文件log4j.properties的内容: log4j.rootCategory=DEBUG, stdout,R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=log.txt log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss} %-5p %c - %m%n 程序说明: ① log4j.rootCategory=DEBUG, stdout,R 就是说我要显示所有优先权等於和高于Debug的信息。 "stdout",”R”表示我定义了两个输出端(随便什么名字都好)。 ②下面的三行说stdout输出端其实是标准输出Console,也就是屏幕。输出的格式是PatternLayout。转换方式是%5p (%F:%L) - %m%n,即前五格用来显示优先权,再显示当前的文件名,加当前的行数。最后是logger.debug()或logger.info()或logger.warn()或logger.error()里的信息。%n表示回车空行。 ③再加上下面六行则log信息不光显示在屏幕上,而且将被保存在一个叫"log.txt"的文件里,文件最大为100KB。如果文件大小超过100KB,文件会被备份成"log.txt.1",新的"log.txt"继续记录log信息。 接下来我们可以改变log4j.properties,而不需重新编译就可以控制log信息是否显示、log信息的输出端类型、输出方式、输出格式,等等。举例如下: ①在log4j.properties文件里把"log4j.rootCategory=DEBUG,stdout,R"改写成"log4j.rootCategory=OFF, stdout,R",这样所有的log信息都不会显示了;解决了本文开始提出的问题。 ②在log4j.properties文件里把"log4j.rootCategory=DEBUG,stdout,R"改写成"log4j.rootCategory=INFO, stdout,R",这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示; 在web程序中使用log4j注意问题 1、 由于jsp或servlet在执行状态时没有当前路径概念,所有使用PropertyConfigurator.configure(String)语句找log4j.properties文件时要给出相对于当前jsp或servlet的路径转化成为一个绝对的文件系统路径。方法是使用servletcontext.getrealpath(string)语句。例: //得到当前jsp路径 String prefix = getServletContext().getRealPath("/"); //读取log4j.properties PropertyConfigurator.configure(prefix+"\\WEB-INF\\log4j.properties"); 2、相应的log4j.properties设置某个属性时也要在程序中设置绝对路径。例: log4j.appender.R.File属性设置日志文件存放位置。我们可以用读写.properties配置文件的方法进行灵活设置。 log4e使用说明 在了解了log4j的功能后,我们肯定会我们的程序中编写一些Log4j日志记录。对于使用Eclipse的程序员Log4e将是我们最得力的log4j日志编写助手,现在开始Log4e之旅。 Log4e是一个免费的Eclipse Plugin,它可帮助你在你的Java工程中快速加入Log; 我们可以在http://log4e.jayefem.de/index.php/Download网站上下载Log4e最新版本。下载后将相应文件夹拷贝到Eclipse的插件目录下,重新Eclipse,在首选项中会多出一个Log4e选项。 Log4e可以有多个插入Log为一个方法、类,当然也可以在当前位置插入Log,同时其也可以把Sysout.out.println()的转换为log;所有的这一切只需要你点点鼠标或者按一次快捷键,下面我们只以为一个方法插入Log为例来讲解 在Java编辑上下文中点击右键,选择Log4E,你将看到如下界面: 点击Insert Log Statement For This Method,你将看到验证页面: Finish后这时你将看到插入Log后的函数如下: Log4e更多的实例参照http://log4e.jayefem.de

posted on Saturday, November 26, 2005 4:36 PM #keenonjava——cnic

加密安全相关的基础知识一

 
                                                                来源于网络
以上加密锁品牌的工作原理都是大同小异:被保护的软件--加密锁之间形成一一对映的关系,被保护的软件在运行的过程当中不断通过其API
函数向加密锁发指令来判断加密锁是否存在于,软件离开保护锁不能运行。
  但是从其发展历程来看,本人以美国RAINBOW公司的产品生产研发的历程作一个简单的介绍:
 1、从最早由美国RAINBOW公司生产的第一代硬件保护锁,只是通过一个简单查询函数来验证并口的硬件保护锁是否存在,存在则程序继续运行
,不再则软件终止运行,来完成并保护软件开发商的利益;
 2、接着依然是美国RAINBOW公司对自己的第一代的产品进行了改进而形成了第二代的加密锁产品,并且美国RAINBOW公司为其第二代产品取名
为:SENTINEL PRO,其与第一代的产品相比较最大的改变在于加密锁硬件里头的运算芯片由RAINBOW公司写入了一个固定的“加密算法”,但
这个算法是单一的固定的。
 以上两种产品对于软件开发商来说有一个相当大的风险,那就是其必需相信RAINBOW公司不会把买给他们的加密锁买给别的个人,如果RAINBOW
把相同的产品出售给别人的话,别人拿到这个加密锁就能使用开发商的软件。
 3、通过软件开发商对这个问题的重视,RAINBOW公司针对这种情开发出了第三代的加密产品:SENTINEL SUPERPRO,这种产品彻底解决了软件
开发商的后顾之忧。这种产品其运算芯片中内置了28种算法,共分为56个单元,每两个单元可以单独保护一个应用程序,故用RAINBOW公司的说
法其一把锁可以保护28个应用程序;且这种加密锁的每个算法单元所采用的算法因子是由软件开发商自己设定的,当其写入加密锁后对于外界
来说就相当于一个暗箱,是任何人也读不出来的。
 4、但随着解密者的技术的不断提高,RAINBOW中国公司研发出了第四代的产品-智能狗,与现今的差不多所有品牌的加密锁相比较,这种狗有
了一个质的飞跃:其通过在开发过程中把一段代码加密后写入加密狗,当程序运行时再把加密狗里的代码在加密狗里自行运行,程序调用其运
算结果来完成软件的加密,如此就从理论上杜绝了软件被破解的可能。
  现在市面上的加密狗的工作原理不外乎RAINBOW的这两种形式:1、程序发命令查询--加密狗运算后相应程序;2、把源代码放入加密狗内
部执行(现在还只有RAINBOW公司一家有此功能的加密狗)。

  四、两种加密方法
  加密技术通常分为两大类:“对称式”和“非对称式”。
  对称式加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术目前被广泛采用,如美国政府所采用的DES加密标
准就是一种典型的“对称式”加密法,它的Session Key长度为56Bits。
  非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能
打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密
方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中
的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。
  五、加密技术中的摘要函数???????????????
  在对称加密(或叫单密钥加密)中,只有一个密钥用来加密和解密信息。尽管单密钥加密是一个简单的过程,但是双方都必须完全的相信对
方,并都持有这个密钥的备份。但要达到这种信任的级别并不是想像中的那么简单。当双方试图建立信任关系时可能一个安全破坏已经发生了
。首先密钥的传输就是一个重要问题,如果它被截取,那么这个密钥以及相关的重要信息就没有什么安全可言了。
  但是,如果用户要在公共介质 (如互联网) 上传递信息,他需要一种方法来传递密钥,当然物理的发送和接收密钥是最安全的,但有时这
是不可能的。一种解决方法就是通过电子邮件来发送,但这样的信息很容易的被截取到,从而击破了加密的目的。用户不能加密包含密钥的邮
件,因为他们必须共享另一个用来加密含有密钥邮件的密钥。这种困境就产生了问题:如果对称密钥用它们自己来加密,那为什么不直接用相
同的方法在第一步就使用?一个解决方案就是用非对称加密,我们将在本课的后面提到。
  所有类型加密的一个主题就是破解。一种减少使用对称加密所造成的威胁的反措施就是改变密钥的规律性。然而,定期改变密钥经常是困
难的,尤其是你的公司里有很多用户。另外,黑客可以使用字典程序,password sniffing来危及对称密钥的安全,或者通过搜翻办公桌,钱包
以及公文包。对称加密也很容易被暴力攻击的手段击败。
  非对称加密
  非对称加密在加密的过程中使用一对密钥,而不像对称加密只使用一个单独的密钥。一对密钥中一个用于加密,另一个用来解密。如用A加
密,则用B解密;如果用B加密,则要用A解密。
  重要的概念是在这对密钥中一个密钥用来公用,另一个作为私有的密钥;用来向外公布的叫做公钥,另一半需要安全保护的是私钥。非对
称加密的一个缺点就是加密的速度非常慢,因为需要强烈的数学运算程序。如果一个用户需要使用非对称加密,那么即使比较少量的信息可以
也要花上几个小时的时间。
  非对称加密的另一个名称叫公钥加密。麻省里工学院的数学家们在1970年首先开发了非对称密钥(公钥)技术。尽管私钥和公钥都有与数
学相关的,但从公钥中确定私钥的值是非常困难的并且也是非常耗时的。在互联网上通信,非对称加密的密钥管理是容易的因为公钥可以任易
的传播,私钥必须在用户手中小心保护。
  HASH加密把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值。HASH加密用于不想对信息解密或读取。使用这种方法解密在理
论上是不可能的,是通过比较两上实体的值是否一样而不用告之其它信息。HASH加密别一种用途是签名文件。它还可用于当你想让别人检查但
不能复制信息的时候。
  举个例子,一台自动取款机(ATM)不需要解密一个消费者的个人标识数字(PIN)。磁条卡将顾客的代码单向地加密成一段HASH值,一旦插
卡时,ATM机将计算用户PIN的HASH值并产生一个结果,然后再将这段结果与用户卡上的HASH值比较。使用这种方法,PIN是安全的,即使对于那
些维护ATM机的人来说。
 
  六、密钥的管理
  密钥既然要求保密,这就涉及到密钥的管理问题,管理不好,密钥同样可能被无意识地泄露,并不是有了密钥就高枕无忧,任何保密也只
是相对的,是有时效的。要管理好密钥我们还要注意以下几个方面:
  1、密钥的使用要注意时效和次数
  如果用户可以一次又一次地使用同样密钥与别人交换信息,那么密钥也同其它任何密码一样存在着一定的安全性,虽然说用户的私钥是不
对外公开的,但是也很难保证私钥长期的保密性,很难保证长期以来不被泄露。如果某人偶然地知道了用户的密钥,那么用户曾经和另一个人
交换的每一条消息都不再是保密的了。另外使用一个特定密钥加密的信息越多,提供给窃听者的材料也就越多,从某种意义上来讲也就越不安
全了。
  因此,一般强调仅将一个对话密钥用于一条信息中或一次对话中,或者建立一种按时更换密钥的机制以减小密钥暴露的可能性。
  2、多密钥的管理
  假设在某机构中有100个人,如果他们任意两人之间可以进行秘密对话,那么总共需要多少密钥呢?每个人需要知道多少密钥呢?也许很容
易得出答案,如果任何两个人之间要不同的密钥,则总共需要4950个密钥,而且每个人应记住99个密钥。如果机构的人数是1000、10000人或更
多,这种办法就显然过于愚蠢了,管理密钥将是一件可怕的事情。
  Kerberos提供了一种解决这个较好方案,它是由MIT发明的,使保密密钥的管理和分发变得十分容易,但这种方法本身还存在一定的缺点。
为能在因特网上提供一个实用的解决方案,Kerberos建立了一个安全的、可信任的密钥分发中心(Key Distribution Center,KDC),每个用
户只要知道一个和KDC进行会话的密钥就可以了,而不需要知道成百上千个不同的密钥。
  假设用户甲想要和用户乙进行秘密通信,则用户甲先和KDC通信,用只有用户甲和KDC知道的密钥进行加密 ,用户甲告诉KDC他想和用户乙
进行通信,KDC会为用户甲和用户乙之间的会话随机选择一个对话密钥,并生成一个标签,这个标签由KDC和用户乙之间的密钥进行加密,并在
用户甲启动和用户乙对话时,用户甲会把这个标签交给用户乙。这个标签的作用是让用户甲确信和他交谈的是用户乙,而不是冒充者。因为这
个标签是由只有用户乙和KDC知道的密钥进行加密的,所以即使冒充者得到用户甲发出的标签也不可能进行解密,只有用户乙收到后才能够进行
解密,从而确定了与用户甲对话的人就是用户乙。
  当KDC生成标签和随机会话密码,就会把它们用只有用户甲和KDC知道的密钥进行加密,然后把标签和会话钥传给用户甲,加密的结果可以
确保只有用户甲能得到这个信息,只有用户甲能利用这个会话密钥和用户乙进行通话。同理,KDC会把会话密码用只有KDC和用户乙知道的密钥
加密,并把会话密钥给用户乙。
  用户甲会启动一个和用户乙的会话,并用得到的会话密钥加密自己和用户乙的会话,还要把KDC传给它的标签传给用户乙以确定用户乙的身
份,然后用户甲和用户乙之间就可以用会话密钥进行安全的会话了,而且为了保证安全,这个会话密钥是一次性的,这样黑客就更难进行破解
了。同时由于密钥是一次性由系统自动产生的,则用户不必记那么多密钥了,方便了人们的通信。
 七、数据加密的标准
  最早、最著名的保密密钥或对称密钥加密算法DES(Data Encryption Standard)是由IBM公司在70年代发展起来的,并经政府的加密标准筛
选后,于1976年11月被美国政府采用,DES随后被美国国家标准局和美国国家标准协会(American National Standard Institute,ANSI)承认
  DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的"每轮"密钥值由56位的完整密钥
得出来。DES用软件进行解码需用很长时间,而用硬件解码速度非常快。幸运的是,当时大多数黑客并没有足够的设备制造出这种硬件设备。在
1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。当时DES被认为是一种
十分强大的加密方法。
  随着计算机硬件的速度越来越快,制造一台这样特殊的机器的花费已经降到了十万美元左右,而用它来保护十亿美元的银行,那显然是不
够保险了。另一方面,如果只用它来保护一台普通服务器,那么DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务器而花那么多的
钱破解DES密文。
  另一种非常著名的加密算法就是RSA了,RSA(Rivest-Shamir-Adleman)算法是基于大数不可能被质因数分解假设的公钥体系。简单地说就是
找两个很大的质数。一个对外公开的为“公钥”(Prblic key) ,另一个不告诉任何人,称为"私钥”(Private key)。这两个密钥是互补的
,也就是说用公钥加密的密文可以用私钥解密,反过来也一样。
  假设用户甲要寄信给用户乙,他们互相知道对方的公钥。甲就用乙的公钥加密邮件寄出,乙收到后就可以用自己的私钥解密出甲的原文。
由于别人不知道乙的私钥,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面,由于每个人都知道乙的公钥,他们
都可以给乙发信,那么乙怎么确信是不是甲的来信呢?那就要用到基于加密技术的数字签名了。
  甲用自己的私钥将签名内容加密,附加在邮件后,再用乙的公钥将整个邮件加密(注意这里的次序,如果先加密再签名的话,别人可以将
签名去掉后签上自己的签名,从而篡改了签名)。这样这份密文被乙收到以后,乙用自己的私钥将邮件解密,得到甲的原文和数字签名,然后
用甲的公钥解密签名,这样一来就可以确保两方面的安全了。
  八、加密技术的应用
  加密技术的应用是多方面的,但最为广泛的还是在电子商务和VPN上的应用,下面就分别简叙。
  1、在电子商务方面的应用
  电子商务(E-business)要求顾客可以在网上进行各种商务活动,不必担心自己的信用卡会被人盗用。在过去,用户为了防止信用卡的号
码被窃取到,一般是通过电话订货,然后使用用户的信用卡进行付款。现在人们开始用RSA(一种公开/私有密钥)的加密技术,提高信用卡交
易的安全性,从而使电子商务走向实用成为可能。
  许多人都知道NETSCAPE公司是Internet商业中领先技术的提供者,该公司提供了一种基于RSA和保密密钥的应用于因特网的技术,被称为安
全插座层(Secure Sockets Layer,SSL)。
  也许很多人知道Socket,它是一个编程界面,并不提供任何安全措施,而SSL不但提供编程界面,而且向上提供一种安全的服务,SSL3.0现
在已经应用到了服务器和浏览器上,SSL2.0则只能应用于服务器端。
  SSL3.0用一种电子证书(electric certificate)来实行身份进行验证后,双方就可以用保密密钥进行安全的会话了。它同时使用“对称
”和“非对称”加密方法,在客户与电子商务的服务器进行沟通的过程中,客户会产生一个Session
Key,然后客户用服务器端的公钥将Session Key进行加密,再传给服务器端,在双方都知道Session Key后,传输的数据都是以Session Key进
行加密与解密的,但服务器端发给用户的公钥必需先向有关发证机关申请,以得到公证。
  基于SSL3.0提供的安全保障,用户就可以自由订购商品并且给出信用卡号了,也可以在网上和合作伙伴交流商业信息并且让供应商把订单
和收货单从网上发过来,这样可以节省大量的纸张,为公司节省大量的电话、传真费用。在过去,电子信息交换(Electric Data Interchange
,EDI)、信息交易(information transaction)和金融交易(financial transaction)都是在专用网络上完成的,使用专用网的费用大大高
于互联网。正是这样巨大的诱惑,才使人们开始发展因特网上的电子商务,但不要忘记数据加密。
  2、加密技术在VPN中的应用
  现在,越多越多的公司走向国际化,一个公司可能在多个国家都有办事机构或销售中心,每一个机构都有自己的局域网LAN(Local Area
Network),但在当今的网络社会人们的要求不仅如此,用户希望将这些LAN连结在一起组成一个公司的广域网,这个在现在已不是什么难事了
  事实上,很多公司都已经这样做了,但他们一般使用租用专用线路来连结这些局域网 ,他们考虑的就是网络的安全问题。现在具有加密/
解密功能的路由器已到处都是,这就使人们通过互联网连接这些局域网成为可能,这就是我们通常所说的虚拟专用网(Virtual Private
Network ,VPN)。当数据离开发送者所在的局域网时,该数据首先被用户湍连接到互联网上的路由器进行硬件加密,数据在互联网上是以加密
的形式传送的,当达到目的LAN的路由器时,该路由器就会对数据进行解密,这样目的LAN中的用户就可以看到真正的信息了。

Eclipse的快捷键组合功能

Eclipse的快捷键组合功能   来源于网络

  使用Eclipse的快捷键组合功能,让你看起来像是在打电玩。特别是让人想起《真人快打》(Mortal Combat)的感觉。要成为《真人快打》的高手,你必须记住大量的按键顺序。比如,要使出Sub-Zero Skeleton Rip,你必须依次按下和X键。这里的控制杆就是Ctrl,Alt,Shift,字母键,数字键和功能键的组合。

  让我们按照使用频率来看看我最爱用的一些热键组合。(注:以下内容在Eclipse3.02及一上版本通过测试)

  1. Control-Shift-T: 打开类型(Open type)。如果你不是有意磨洋工,还是忘记通过源码树(source tree)打开的方式吧。

  2. Control-Shift-R: 打开资源(不只是用来寻找Java文件)。小提示:利用Navigator视图的黄色双向箭头按钮让你的编辑窗口和导航器相关联。这会让你打开的文件对应显示在导航器的层级结构中,这样便于组织信息。如果这影响了速度,就关掉它。

  3. F3: 打开申明(Open declaration)。或者,利用Declaration Tab(在Java视图模式下,选择Windows --> Show View -- > Declaration)。当你选中代码中的一个方法,然后按这个按键,它会把整个方法在申明方框里显示出来。

  4. Alt-left arrow: 在导航历史记录(Navigation History)中后退。就像Web浏览器的后退按钮一样,在利用F3跳转之后,特别有用。(用来返回原先编译的地方)

  5. Alt-right arrow: 导航历史记录中向前。

  6. Control-Q: 回到最后依次编辑的地方。这个快捷键也是当你在代码中跳转后用的。特别是当你钻的过深,忘记你最初在做什么的时候。

  7. Control-Shift-G: 在workspace中搜索引用(reference)。这是重构的前提。对于方法,这个热键的作用和F3恰好相反。它使你在方法的栈中,向上找出一个方法的所有调用者。一个与此相关的功能是开启“标记”功能(occurrence marking) 。选择Windows->Preferences->Java-> Editor-> Mark Occurrences,勾选选项。这时,当你单击一个元素的时候,代码中所有该元素存在的地方都会被高亮显示。我个人只使用“标记本地变量”(Mark Local Variables)。注意:太多的高亮显示会拖慢Eclipse。

  8. Control-Shift-F: 根据代码风格设定重新格式化代码。我们的团队有统一的代码格式,我们把它放在我们的wiki上。要这么做,我们打开Eclipse,选择WindowPreferencesJavaCode Style,然后设置Code Formatter,Code Style和Organize Imports。利用导出(Export)功能来生成配置文件。我们把这些配置文件放在wiki上,然后团队里的每个人都导入到自己的Eclipse中。

  9. Control-O: 快速概要(quick outline)。通过这个快捷键,你可以迅速的跳到一个方法或者属性,只需要输入名字的头几个字母。

  10. Control-/: 对一行注释或取消注释。对于多行也同样适用。

  11. Control-Alt-down arrow: 复制高亮显示的一行或多行。

  12. Alt-down arrow: 将一行或多行向下移动。Alt-up arrow会向上移动。

  其他的热键在菜单里有。你可以通过按下Control-Shift-L(从3.1版本开始),看到所有快捷键的列表。按下Control-Shift-L两次,会显示热键对话框(Keys Preferences dialog),你可以在这里自己设置热键。我欢迎你在Talkback部分发表你的Eclipse提示。

其他的Eclipse窍门

  我总结了几个相关的小窍门:

  锁定命令行窗口:在命令行视图中(Window Show View Other Basic Console),试试看用滚动锁定按钮来锁定控制台输出不要滚屏。

  使用Ant视图:在我的Java或Debug模式下,我喜欢显示出Ant视图,这样我就可以迅速的运行Ant任务。通过Window  Show View  Other  Ant可以找到该视图。把Ant视图放在屏幕的一角, 通过“添加编译文件(Add Buildfiles)”按钮来添加build.xml文件。在3.1版本中,甚至支持Ant调试脚本语言。

  自动遍历一个集合:for + Control-Space: 如果你还不知道,那么你应该记住Control-Space是自动完成功能。在Eclipse中,你还可以自动完成结构。在一个数组或集合范围内,试试看输入“for”然后按下Control-Space键。Eclipse会问你你想要遍历哪一个集合然后自动完成循环代码。

  使用分级布局:在包浏览视图(Package Explorer view)中默认的布局(扁平式)方式让我困惑,它把包的全名显示在导航树(navigation tree)中。我更喜欢我源码的包和文件系统视图,在Eclipse中叫做分级布局(Hierarchical Layout)。要切换到这种模式,点击包浏览视图中向下的按钮,选择布局(Layout),然后选择分级(Hierarchial)。

  一次显示多个文件:你可以一次浏览多个文件。把不在激活状态的编辑窗口拖到激活窗口的底部或侧边的滚动条上,就可以打开该编辑窗口。这是我能描述该窍门的最好方式了。

  同时打开两个Eclipse:要将改动从一个CVS分支上合并到另外一个上,我喜欢通过同时打开两个工作目录(Workspace)不同Eclipse来实现。这样我可以通过比较CVS上的最新版本看到所有的变化(右键单击工程,然后选择Compare with  Lastest from HEAD)然后把每一个变化都合并到另外一个CVS分支上。启动多个Eclipse的最简单的方法是利用Eclipse Launcher。

  Implementors插件:安装一个能够跳到一个接口的实现的插件。如果你是个dependency injection 粉丝,或者正在基于编写优良的接口工作,那么你需要一个这样的插件来加速代码导航。 你可以在SourceForge找到这个插件。

  就像Modest Mouse乐队的歌曲“Out of Gas”唱的,“意见就像小猫,我已经送给别人”。这些是我的Eclipse小猫,希望你能给它找一个温暖的家。

避免Java EE项目评估中的常见错误

避免Java EE项目评估中的常见错误

来源网络

摘要:
软件开发项目评估是软件开发周期中关键又具备挑战性的一步,它是计划,进度,人员以及其他相关步骤的基础。项目低估会带来紧张的进度,高度压力的工作环境,未可预料的资源紧缺,低质量,项目实施延误等风险, 可以最大限度的破坏客户的生意以及公司的信誉;而另一方面,带有过多不合理泡沫的评估也会导致无效率的资源浪费以及引起客户和公司之间的不信任。评估企业Java项目因为技术的更新成了一个难题,本文通过几个方面透视提供了评估企业Java项目时应该考虑的问题

假如你是一个重要软件项目的项目经理,高层给你的预算已经用完,业务对软件的压力一天天临近,而CIO也已经厌烦了一次次的进度推迟,更要命的是, 你的团队已经被长时间的工作和不合理的进度搞的精疲力尽。这一切听起来是不是很耳熟?这篇文章调查了会导致这种困境的项目评估中常见的错误并提出建议进行提高。
其中的部分论点与技术无关,适用任何软件项目,他们的共同特征是通过不同的方式来提高项目评估。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:Chandan;alexsun(作者的blog:http://blog.matrix.org.cn/page/alexsun)
原文:http://www.matrix.org.cn/resource/article/44/44432_Java+EE.html
关键字:Java EE;project

筛选合适的评估人选
在任何评估过程中,筛选合适的评估人选第一步也是最重要的一步.你需要始终明确的是由合适的人选,而并不一定是最重要的人选,来负责运作分析与评估. 除了正式的评估技术与知识,该人选同时还应当具备该项目的商业领域知识与项目所用的技术知识.一个非技术人员永远都不会明白一个构架约束或技术抉择在真正的开发过程中的含义是什么.

考虑项目建议采用的技术,框架和工具的可用性
Java EE项目可以选择不同的框架与工具,每一种框架都有自己的功能,限制以及学习曲线. 这些因素带来的影响在项目进入开发阶段后非常显著. 在准备一个评估的时候,应当完成初级阶段的调查并找出这些选择对项目的适用性以及影响,在团队目前以及将来的培训中需要适应这些选择.

考虑与 外部/第三方 系统的集成
在软件应用中,外部系统集成是一个千变万化并经常被低估的部分. 更经常的事,在需求文档中仅仅有一行陈述,系统应当使用现存的系统和API 发送/接受 数据. 这部分尤其需要被小心的验证确认, 基于系统细节和通讯协议的复杂性,很多后续的工作需要被计算在内. 如果和外部系统的通信细节”how and when”在作评估的时候不具备的话,这一部分在评估则只能作为设想处理,并且应当被列为在底层设计完成后需要被再评估的部分.请记住,在现实世界中,没有即插即用.

考虑现存的企业构件
大多数组织已经有现成的信息系统的基础构造,一部分可以复用的企业构件是可以并被授权使用在新系统中的. 为了一致性,兼容性,以及节约等不同的原因,客户总是促进兼容.但是,重要的是需要注意到为了达到这种要求,评估中应当包括了解这些构件的设计,和验证它们在新系统中的可行性需要作出的努力.

举个例子, 一个客户可能已经有了用户验证和授权框架,而需要集成到新系统中去.这种情况就存在潜在的”运行时的惊奇”(一般指运行过程中出现错误)。原因是新的业务要求并不是由已经存在的框架来实现的,而且很可能需要某些增强。另外,如果框架的某些功能与限制在评估时还没有具备,那么这必须作为假定记入文档。

考虑已存在的构架标准
考虑现存的标准是另一个在评估经常被忽视的方面,而且对工作造成显著影响, 如果现行标准已经具备的话很多额外工作是可以避免的. 但另一个方面,标准同样可以在实际的设计与实施过程中带来很多限制. 举个例子, 一个简单的要求,获得企业的金融信息并显示在屏幕上,可以简单的在屏幕上增加一个文本区来实现.但是,如果客户已经有了文档服务器来管理整个应用中客户的金融信息就完全是另一回事了. 这样你需要和文档服务器建立通讯协议,exception处理和其他标准.这是一个相当大的工作. 你应该在评估中把构架标准和业务要求放到同等重要的地位.

考虑实际的测试工作量
随着自动测试工具与框架的发展,实际测试工作量已经与学校里古老的创建和执行单元测试的情况大不相同。比如说,如果要求创建和运行JUnit测试案例, 和传统的单元测试方法不同,额外的开发时间和学习曲线是可能的。因此,测试评估中测试的处理方式需要清楚的表明以避免任何分歧。

考虑互相依赖的并行开发
当多个互相依赖的应用在被同时并行开发的时候,情况就更多变了。如果应用依赖于于正在进行的开发, 都需要被标明。每次的交流都应当验证目前的可行性,特别注意给其他开发项目的风险概要。比如,一个应用必须显示用户的信用详细资料,而这个需要同调用企业API通过外部系统获得,但这个企业APIs正在由另一个团队开发,这个API应该在你开发项目的时候处于完成并可用的状态。使用基本的API调用来测试应用然后再用实际调用来替代比直接用实际调用一步到位需要更多的时间,评估应当将这些依赖所产生的影响清楚并专业的标明。

使用 部分-全部 的处理方法
古话说“分而治之”,在软件评估中同样也是这样。将工作分成小块然后对每个小块列出要完成的步骤。这样对每个步骤评估的综合将会比把整个项目当作一个整体来评估精确的多。

结论
今天的IT行业,是按时保质完成产品的激烈竞争,准确的评估是至关重要的。经常被忽略的项目细节,会对评估造成显著的影响。文章中谈到的几点应该与已经成熟的评估技术综合应用,来最大限度消减评估错误的可能。

关于作者
Chandan作为电子商务顾问为印度塔塔咨询服务公司工作超过5年,他近距离参与了为遍布世界的大客户评估,设计以及开发各种大中规模Java EE基础上企业级应用,Chandan作为参与这些项目整个过程的一员分析了评估对开发生命周期过程中不同阶段的影响。作者在印度Jalgaon工程技术学院获得机械工程学士学位。

参考资料:
"Software Project Estimation" by Kathleen Peters:
http://www.spc.ca/downloads/resources/estimate/estbasics.pdf
参考资料“Software Project Estimation”一文详细论述了软件项目评估的四个步骤,开发项目规模评估,开发项目工作量评估,开发项目进度表评估以及开发费用评估,并讨论了在各个步骤的流程,技巧以及常用的计算公式。
Matrix:http://www.matrix.org.cn
Javaworld:http://www.Javaworld.com

终成正果 Sun完整发布Java API文档中文版

 

发布时间

相关类库
阅读/下载

2005/10/31
java.lang
java.util

在线阅读 / 打包下载
2005/12/31
java.awt
java.io
java.text

在线阅读 / 打包下载
2006/02/28
javax.swing

在线阅读 / 打包下载
2006/03/31
java.applet
java.beans
java.maths
java.net
java.nio
java.rmi
java.security
java.sql
javax.accessibility
javax.activity
javax.crypto

在线阅读 / 打包下载
2006/04/30
javax.imageio
javax.management
javax.net
javax.naming
javax.print
javax.rmi
javax.security
javax.sound

在线阅读 / 打包下载
2006/05/31
javax.sql
javax.transaction
javax.xml
org.ietf
org.xml
org.w3c
org.omg

在线阅读 / 打包下载

2006.06.01  来自:Sun

Eclipse中常出现的错误提示及处理方法

该资料将不断更新
1、Fatal exception occurred,Program will exit.
    a、未导入SWT原生包产生的错误提示,“文件--导入---文件系统--下一步”,从“目录。。。浏览”找eclipse安装目录下的\plugins\org.eclipse.swt.win32_3.0.1\os\win32\x86,选上swt-win32-3063.dll,完成即可。
   b、在使用Image类时路径没写对也出现这个提示,如果用相对路径,相对路径的起始点应该是项目主目录
 
2、认证错误:com.jcraft.jsch.JSchException:Session.connect:java.net.COmmectException:Connection refused:connect
    在添加CVS资源库时连接类型选错出现的提示,把连接类型该位“pserver”即可。有的说出现这个提示是因防火墙的原因,关闭防火墙。
 
 
3、今天在做一个界面时,监听器一直不起作用,没任何错误提示,检查了半天代码,原来是一直在用SWT Designer 中的test designer window,而不是运行程序,难怪它没响应。
 
4、打包非Eclipse插件项目时出现的提示:Exception in thread "main" java.lang.NoClassDefFoundError:具体缺少的包,这是缺少支持包出现的提示,将缺少的包从plugins中复制到项目的lib下即可
 
5、java.sql.SQLException: No suitable driver
 at java.sql.DriverManager.getConnection(Unknown Source)
 at java.sql.DriverManager.getConnection(Unknown Source)
 at 具体出错的包名.文件名(文件名.java:出错的行)
装载驱动程序或连接数据库时的错误提示,检查驱动程序或数据库连接路径有无错误

6、java.sql.BatchUpdateException: Syntax error or access violation message from server: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '具体出错的代码' at line 行数"
 at com.mysql.jdbc.Statement.executeBatch(Statement.java:1067)
 at 具体出错的包名.文件(文件名.java:出错的行)
SQL语句有语法错误, 检查相关的SQL语句

一个中国黑客致中国黑客和红客的公开信

来自:转帖
在此之前,大家先读一则寓言:

  一粒榕树的种子偶然落在地里,它对自己生命的未来感到迷惑,抬起头来看见一棵百年的榕树-它的母亲-正昂然地站立在蓝天的背景上.

  种子说:”妈妈,您怎么能如此伟大地站立在大地之上呢?”

  榕树说:”这不是伟大,只是一种偶然的生成呀!我们在季节中长大,吸收雨露阳光,甚至接收狂风与闪电的考验,每一粒榕树的种子,只要健康就会长大,你也一样呀,孩子!”

  种子说:”可是,妈妈!为什么我一直都住在如此阴暗潮湿的土地呢?我要如何才能像您一样挺立呢?”

  “首先,我的孩子,你必须要消失,把自己溶入泥土里,然后发芽,变成一棵树,有一天你就能像我一样,享受蓝天,阳光与风呀!”

  “妈妈,我要先消失,这多么地可怕呀!万一我消失溶入土里,没有长成一棵树,而变成一点泥土呢?这样太冒险了,还是让我保留一半是种子,一半长成树木吧!”

  种子于是自己做了这样的主张,只选择了一半的消失,妈妈长叹一声.不久,那榕树的种子变成泥土,完全地消失了.

  生命的成长,季节的成长也是这样子绝然的.一个人如果没有全身心投入与此刻的溶入,真实的发芽就变成不可能.放下一半的自我,不会是全然的自我.一株花如果不用全心来凋谢,就没有足够的养分长出树叶;一粒种子如果不全心地来消失,就不会从内在最深处长出芽来.

  所有中国黑客和红客,我的同胞们:

  首先声明,我的计算机软件技术、黑客功底,可能不会比你们任何人差:

  我通读过 MINIX,TCP/IP,BSD,LINUX, PL1的源码,我拿过中国高级程序员证书,SUN 的JAVA证书,精通VC和UNIX,对缓冲区溢出,病毒,DDK等均有研究,所以我想我有资格对你们说几句话。

  (如果我提到的一些计算机名词和人名,你们居然不知道,那只能证明你们的无知,和不配称为黑客。)

  如果是真正的黑客,他会知道

1.发明TCP/IP的是美国人 。

2. LINUX的作者,linus大侠现在也在美国工作 。

3. OPEN SOURCE的开创人 STALLMAN 也是美国人,他提倡软件不分国界的自由的精神 。

4. FREE BSD 的作者是美国人,他的SOURCE 让真正的黑客受惠

5.世界级软件科学大师 TANENBAUM,也是美国的客座教授,他的minix, ameba和教材教育了全世界几代黑客。

提到这些,不是崇美,不是恐美,只想证明:

1.很多大师级的美国黑客,他们的理念恰恰是自由、开放、无国界;他们的自由软件,开放源码,是与政治无关的,是超越国界的,给全世界人们带来福音。

2.真正的黑客精神,如stallman所说,是要让人类超越计算机,成为计算机的主宰,从而成为自由的。

  所有的中国黑客和红客,我的同胞们:

  当你们正通过下载美国人写的黑客工具,来攻击美国网络,并且乐此不疲,以为这就是爱国行动的时候,是否想过:

  此时此刻,印度的软件人士,正在努力提高软件技术,他们的软件水平、软件产业已经超越了中国;难道我们不应该痛苦地承认这个现实,并且奋起直追吗?

  中国发明了火药,但是缺少研究精神,结果是被西方人研究改进了以后打中国,这样的教训还少吗?

  中国向来不缺爱国热情,但是我们缺少对科技的认真研究精神,知耻而后勇的追赶精神。难道我们不愿意承认这一点吗?

  从战术上来说,过早暴露自己的实力是不聪明的;冒昧地问一句,如果真的战争爆发了,您的黑客技术完全掌握好了吗,您已经为那一天的到来在进行技术储备吗?

  您有没有想向那些真正为中国科技做出杰出贡献的科学家如钱学森学习呢?

  所有的中国黑客和红客,我的同胞们:

  请把你们的聪明才智用到真正提高你们的水平,对国家的强大有帮助的地方吧:

  如果您愿意对国家有所贡献:

1.中国的863计划中有一个重点研究项目: 并行计算,分布计算,向量计算。您愿意研究它吗?

2. 作为现代通讯技术的一个根本数学基础,大合数的快速因子分解,还是一个难题。您愿意研究它吗?

  如果您想提高技术,对中国的软件技术有所贡献:

1.研究 VC,JAVA

2.研究数据结构,去考高级程序员

3. 研究操作系统,读minix source code

4. 研究tcp/ip, rfc文档

5. 通读linux, 才算达到黑客境界

6. 学习 UML,ROSE,软件工程,达到系统分析员水平。

  如果您对提高中国的科技有兴趣,去研究生物基因,材料技术(纳米技术),计算机技术,航天技术……

  我的同胞们,我愿大声呐喊:

  一个真正的民族主义者,不是义和团,不是太平天国,不是闭关锁国,不是盲目仇外,不是不敢正视自己民族和文化的丑陋和缺点。

  真正的民族主义者是成熟的、清醒的、理智的、务实的民族主义。真正的民族主义者不是种族主义者,不是极端份子,不是战争狂人。

  真正的民族主义者以追求本民族――中华民族的利益最大化为目标、准则、信念。判断一个人是不是真正的民族主义者,判断标准很简单:看他是给本民族的整体利益带来好处,还是损害民族利益。真正的民族主义者最务实,因为他知道坚持原则,同时又懂得策略。让我们成为真正的顶尖黑客!让我们成为真正的民族主义者!?

一个26岁IT工程师写在辞职后

来自:赛迪网 一个26岁IT工程师写在辞职后
  终于决定离开这个城市了,和领导说决定辞职的时候,大家都很平和,彼此说着一些言不由衷的话,因为一周前接到来自另一个城市的offer后,我就和他沟通过,在一家咖啡厅和他整整聊了四个小时,该说的都说了。同事们忙碌的身影晃动成一片幻像,熟悉的声音最后汇成一片嘈杂的响动,跨入电梯那瞬间,才发觉这也许是自己最后一次跨入这个曾经载我上下无数次的电梯,没有很多人离职后的轻松,只是觉得有点茫然,一如我当初第一次跨入这个电梯。

  我,一个26岁的男人,从一个三流大学毕业到现在近四年了。当初高考时候,我报考的专业基本上都是市场营销,可惜最后录取我的恰恰是我半夜起来补在志愿表上的一所三流重点的计算机专业。大学四年一心谋划着考研,考到我心仪的学校和心仪已久的专业,但大四时候一场突如其来的恋爱最终让我功亏一溃。 于是,在那年的岁末,匆匆找了一份工作,就是我刚刚辞去的这一份工作,聊以安生。 而我大学的女友,最终也没能和我到同一个城市,本来根基不劳的感情,在时间的磨蚀下烟消云散。

  四年来,在这个民营的IT公司从小弟做到工程师,再到项目经理,最终成为一个手下七八号人的小领导。 生活的轨迹大抵都是如此吧,我作为世纪初毕业的一个大学生,赶着IT浪潮的尾巴,一路追逐到现在。

  而这期间,我两次报考了当初没能考上的那个研究生,但由于工作后的琐碎以及自己意志的不坚定,都以失败告终,此时我才发现,我的年龄和社会形式注定考研对我来说已经没有意义了。于是,我陷入了尴尬的境地,工作上技术无法精进,管理岗位上升的空间很有限,依靠考研来从事心仪职业的梦想彻底破灭了。毕业近四年后,我失去了方向。

  很自然的,我想到了辞职。 我不是一个安份的人,我想,射手座的性格在我身上体现的尤为明显。 辞职是一个两难的选择,如果不辞职,生活将像现在这样延续下去,我每天重复着现在的工作,心怀郁闷和不甘,我将用我不多的积蓄买一个房子,我有了老婆,接着我有了孩子,直到有一天我做不动了,我的技术无法精进逐渐落伍,而且我也没办法升到高层岗位,或许我将在30多岁的某一天无奈的辞职,不知所措。

  辞职了,前面的路是未知的,我将舍弃过去几年苦心经营的一切,重新开始一个工作,一无所有,唯有残存的理想和青春遗留下的激情。

  这种选择是两难的,尤其当我发现我决定离开的决定深深的伤害了一个爱我多年的女孩时,我进退维谷。在这个城市的几年,一直和她保持着朋友和情人中间状态的关系。 而我的父母,希望我能安心工作,留在这个城市,身为人子,这样做无可厚非。但我还是决定辞职,我也不知道我确切的追求什么,也许只是对现在的一点改变吧。真正决定了,才发现自己原来对这个城市以及这个城市里的人是如此的留恋。当听到电话那头女孩的哭泣时,心如刀割,才发现几年的沉淀,她对我如此重要,伤人伤己,我想,这辈子我将不可避免的为这段感情背负十字架了。

  喜欢听许巍的歌,悲伤中透着一丝欣喜,低沉中蕴涵希望,希望这段有生以来最痛苦的时光能是我生命曲线的拐点,前面的路还是迷茫,希望自己能如逐日的后羿,为了那点光明能一路执着的走下去。

 

甲骨文为推进AJAX和Java技术 广开开源之门

海外媒体最新消息,甲骨文公司下周将在旧金山举行的 JavaOne会议上进行软件捐献,来推进AJAX和 Java 计划,它还将宣布计划向开源Grails工程捐献资源。为了支持AJAX,甲骨文将其AJAX报告工具包提交给开源社区,这是先前捐赠JavaServer Faces(JSF) 的一部分。

  甲骨文的工具和中间件总建筑师兼副总裁特德·法雷尔表示:“人们可以使用JSF工作,但他们可以使用AJAX技术进行显示,人们能在浏览器上获得更多环境。”他还称AJAX意在建立丰富的互联网应用程序,但开发者必须懂得JavaScript和 DHTML。他说:“我们所做的是为开发者学习JavaScript和 DHTML提供理论。”

  法雷尔称甲骨文的技术集成于Web 2.0,能提供更多交互式的互联网应用程序。公司有意把这个工具包像先前捐赠一样捐给一个开源组织,目的是继续通过MyFaces工作,但新的捐献还没有被接受。

  据悉,AJAX捐献在未来两个月内进行。甲骨文会在JavaOne会议上宣布出货一项关于Java 坚持建筑学的(JPA)的工具。开发者可以使用这个工具用EJB3进行编码,执行数据库和Java目标之间的相关计划。甲骨文的JPA命令起源于公司的TopLink Essentials技术。5月16日可以从甲骨文科技网络下载这个工具。

  甲骨文预期它在JPA和AJAX捐献之间起杠杆作用,吸引开发者至其技术。甲骨文将援助作为网络应用程序的开源资源Grails,Grails工程意在促进建立简单互联网应用程序的生产力。

2006.05.12  来自:eNet

Linux 常用命令

Linux 常用命令
在介绍Linux 常用命令之前,一凡先介绍相关的几个的概念,大家可以简单看看。
什么是Linux终端
    键盘和现实器合称为终端,也称控制台,一台计算机的IO设备就是一个物理控制台;在一台机器上用软件方法实现多个乡互不干扰、独立工作的控制台界面,就是实现了多个虚拟控制台。Linux虚拟控制台有六个,如果直接方式选择X WINDOW,那么x window在第7个虚拟终端上。在 Linux 系统中的字符操作控制台界面,通过组合键 Alt + (F1 - F6) 可以切换到另外的控制台。在图像用户界面下通过组合键 Ctrl+Alt + (F1 - F6)可以切换到字符控制台, 每一个控制台是系统中一个完全独立的会话,不同的用户可以同时使用。虚拟控制台使Linux成为一个多用户操作系统。这一多控制台的特点与 Windows 中的多桌面不同。在 Linux 中,每一个控制台可以分别由完全不同的用户来控制。例如,您可能在控制台 1 中以 root身份登录,而在控制台 2 中以 yifan 身份登录。两个控制台在各自的用户空间中运行不同的程序。如果您是在图形模式下,那么您可以打开一个 终端 (terminal)以进入控制台窗口。通常在桌面的任务条上会有终端的按钮。您也可以从上下文菜单(在桌面上单击右键)打开终端 。
什么是shell
   shell是系统用户界面,它提供用户与内核交互的接口。用户就能通过键盘输入指令来操作计算机了,它再将执行结果显示给用户。shell用户界面,也就是我们常说的字符操作界面。shell是一个命令解释器,拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。 shell 是如何执行命令解释的,shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls 和 rm,也可以是购买的商业程序,比如 xv,或者是公用软件(public domain software),就象 ghostview。然后shell试着在搜索路径里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,(学过DOS的朋友,一定对内部,外部命令的含义很了解)将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。
shell的种类
目前流行的Shell有 bash、ksh、csh
  bash是Linux系统默认使用的Shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的Shell是因为它有以下的特色:
  (1)可以使用类似DOS下面的doskey的功能,用上下方向键查阅和快速输入并修改命令。
  (2)自动通过查找匹配的方式,给出以某字串开头的命令。
  (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。
  ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该Shell最大的优点是几乎和商业发行版的ksh完全相容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。
  csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。
一凡在此介绍Linux 常用命令,主要是介绍bash的命令
bash 主要有支持三种通配符:
* 匹配任何字符和任何数目的字符
? 匹配任何单字符
[...] 匹配任何包含在括号里的单字符
有的还支持-,它表示字符范围,如[a-h]表示从a到h的任意一个字符
bash命令的一般格式如下:命令名【选项】【参数1】【参数2】...【选项】是对命令的特别定义,以减号(-)开始,多个选项可以用一个减号(-)连起来,如ls -l -a 与ls -la 相同。【参数】提供命令运行的信息,或者是命令执行过程中所使用的文件名。使用分号(;)可以将两个命令隔开,这样可以实现一行中输入多个命令。命令的执行顺序和输入的顺序相同。有的参数也以--开头。命令、选项和参数可以用空格或TAB隔开。
bash命令补全
在送入命令的任何时刻,可以按<Tab>键,当这样做时,系统将试图补全此时已输入的命令。如果已经输入的字符串不足以唯一地确定它应该使用的命令,系统将发出警告声。再次按<Tab>键,系统则会给出可用来用来补全的字符串清单。使用命令补全功能,可以提高使用长命令或操作较长名字的文件或文件夹的都是非常有意义的。
历史命令
系统会把过去输入过的命令记忆下来,只要按方向键中的上下箭头,就可以选择以前输入过的命令了。
联机帮助
可以通过man命令来查看任何命令的联机帮助信息。它将命令名作为参数,该命令的语法格式为: man 【命令名】 在任何命令之后给--help参数,也可以显示该命令的帮助信息。

Linux的文件与文件类型,和DOS,WIN有点相似,在此不做介绍。注意LINUX文件名区分大小写。

目录和文件的基本操作
1、文件查看和连接命令
将文件连接到一起,用“>”操作将几个文件组合成一个新的文件,或者是用“>>”把文件追加到已存文件的后面。
语法:
cat  [参数]filelist
-n或--number:由1开始对所有输出的行数进行编号
-b或--number-nonblank:和n相似,但对空行不编号
-s:遇到两行空白,替换为一行空白
-v:显示不可打印的字符
filelist:用于结合文件的可选列表。
2、分屏显示命令
类似于cat,但它是每次显示一页,按空格显示下一页,按<q>键退出,按<h〉键给出帮助信息。该命令还有搜索字符的功能。
语法
more  [选项] <file>...
-num:指定每屏显示的行数
-d:在屏幕下面提示信息
-l:more默认遇到送纸符^L会暂停,使用该选项可以取消该功能
-f:计算实际行数
-p:不是以卷动的方式显示每页,而是先清屏再显示
-s:遇到两行空白,替换为一行空白
-u:不显示下划线
+/<string>:在文件中搜索字符串string,并显示字符串所在页的内容
+/<num>:从第num行开始显示
file用于显示的文件

3、按页显示文件。类似于more,但允许在文件中前后移动。
语法:
less [参数]文件名
-i:查询时忽略大小写。
-num:指定每页显示的行数
-p<string>:在文件中搜索字符串string,并从第一个符合条件的地方开始显示
-S:当某列的内容超过显示画面的宽度时,直接将超出的部分截断舍弃,默认情况下会把超出的部分折回来显示
复制、删除和移动命令
1、拷贝文件。
 语法:
 cp[选项]<source><dest>
 cp[选项]<source>....<directory>
 -r  递归拷贝目录
 -f  删除已存在的目标文件再复制
 -a  在备份中尽可能的保留源文件的结构和属性。
2、删除
   rm [选项] <name>....
   该命令用于逐个删除指定的文件或目录。默认清苦下,<name>为文件名,rm命令不删除目录,只有指定-d选项时候,才能删除目录
语法:
-f  强制删除,包括只读文件,并且不给用户任何提示
-i  在删除每个文件时提示用户
-r  递归删除目录下的内容
 
移动或更名文件和目录
语法:
mv  [参数]源文件目标文件
-f  强制复盖已有文件。
-i  在复盖已有文件前提示用户。
-u  在目标文件的时间比原文件新时不复盖目标文件。
-v  在移动文件时输出相关信息。
创建和删除目录命令
1、创建目录命令
mkdir  [参数]目录名
-p  如果父目录不存在,创建所有的父目录。
2、删除空目录。
语法:
rmdir  [参数]目录列表
-p 表示删除指定目录后,如果该目录的父目录为空,则将一并删除
切换工作目录和显示目录命令
1、改变当前工作目录。
语法:
cd 目录名
如果后面不加目录名,则返回用户的根目录,此外用户必须拥有进入该目录的权限。另外cd ~ 指切换到自己的主目录,cd ../.. 可以切换到单前目录的上上目录
2、显示正在工作或当前的目录名。
pwd [参数]
3、列出目录中的内容。
语法:
ls [参数][目录]
-A  显示所有文件,包括隐藏文件(以“.”开头的文件,但不列出当前目录“.”和上级目录“..”
-a  显示所有文件,包括“.”和“..”目录。 
-d  只列出目录名;不列出它的内容。
-l  给出文件的长列表。包括权限、所有权、大小、文件名、最后修改时间等等。
-t   按时间顺序显示
-F   在列出的文件名后以符号表示文件类型,一般文件不加符号,可执行文件“*”,目录加“/”
-R   若目录下有文件,则递归地列出目录下的文件
查找与定位命令
1、查找文件或目录命令
格式
find [path....] [expression]
该命令在目录树层次中从path开始向下查找文件,将符合expression要求的文件列出来。输入命令中第一个以
-、(、)、,、!开始的参数作为expression的部分,在这些符号之前的参数都被认为是要搜索的路径,在这
些符号之后的才被认为是expression的部分,如果不给出path,则使用当前工作的目录,如果不给出expressi
on,则使用-print作为预设expression
expression的参数有二三十个之多,这里只提几个常用的
-amin<n> 在过去n分钟内被访问过的文件
-anewer<file> 比文件file更晚被访问过的文件
-atime<n> 在过去n天被访问过的文件
-cmin<n>  在过去n分钟内修改过的文件
-cnewer<file> 比文件file更新的文件
-ctime<n> 在过去n天内修改过的文件
-empty 内容为空的文件
-gid<n>或-group<name> gid是n或是group名是name的文件
-ipath<p>,-path<p> 路径名称符合p的文件,ipath表示忽略大小写
-name<name>,-iname<name> 文件名称符合name的文件,iname表示忽略大小写
-size<n单位> 文件大小是n个单位
-type<文件类型〉文件类型的含义与名利ls的选型一样
-pid<n> 进程id是n的文件
exp1 exp2 或者exp1 -a exp2 或者exp1 -and exp2 含义相同,表示同时满足这两个条件
!expr或者-not expr 表示expr的否定
exp1 -o exp2 或者exp1 -or exp2 表示满足其中一个条件就可以
2、文件定位命令
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案
名称及路径的资料库,之后当寻找时就只需查询这个资料库,而不必实际深入档案系统之中了。在一般的
distribution 之中,资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用
locate [选项] <search string>
-u 建立资料库,-u 会由根目录开始
-U 建立资料库,-U 则可以指定开始的位置。
-e 将排除在寻找的范围之外。
-l 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因
为 locate 必须至实际的档案系统中取得档案的权限资料。
-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定资料库存的名称。
-d 指定资料库的路径
-h 显示辅助讯息
-v 显示更多的讯息
-V 显示程式的版本讯息
连接命令
ln [选项] <source> <dest>
Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连
结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产
生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可
以跨越不同的档案系统。 ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由
参数决定。 不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份

改变文件或目录的时间命令
touch [选项] <file1> [<file2>....]
-a 改变档案的读取时间记录。
-m 改变档案的修改时间记录。
-c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
-f 不使用,是为了与其他 unix 系统的相容性而保留。
-r 使用参考档的时间记录,与 --file 的效果一样。
-d 设定时间与日期,可以使用各种不同的格式。
-t 设定档案的时间记录,格式与 date 指令相同。
--no-create 不会建立新档案。

备份命令
tar  <主选项> [辅选项] <文件或目录>
tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中
改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创
建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个
文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。
主选项:
c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。
r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘
记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。
t 列出档案文件的内容,查看已经备份了哪些文件。
u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到
备份文件的最后。
x 从档案文件中释放文件。
辅选项:
b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。
f 使用档案文件或设备,这个选项通常是必选的。
k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。
m 在还原文件时,把所有文件的修改时间设定为现在。
M 创建多卷的档案文件,以便在几个磁盘中存放。
v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
w 每一步都要求确认。
z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解
压缩。
tar的最基本的用法举例
  tar -cf all.tar *.jpg
  这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
   tar -rf all.tar *.gif
  这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
    tar -uf all.tar logo.gif
  这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
  tar -tf all.tar
  这条命令是列出all.tar包中所有文件,-t是列出文件的意思
  tar -tvf all.tar |more
  这条命令是列出all.tar包中所有文件,并以分屏方式
压缩和解压命令

gzip命令是用来压缩文件的。它不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令
一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。
gzip [选项] [文件名]
-c 输出并保留原文件
-d 将压缩文件解压,默认情况下为压缩
-l 显示压缩文件的压缩的提示信息
-r 递归的压缩或解压
-t,可以用来测试压缩文件的完整性。如果文件正常,gzip不会给出任何显示。如果想看到OK这两个字母,可
以在测试某个文件时使用-tv参数。
-v 对每个操作的文件,显示文件名和压缩比例
 
 

unzip 命令位于/usr/bin目录中,它们和MS DOS下的pkzip、pkunzip及MS Windows中的Winzip软件功能一样,
将文件压缩成.zip文件,以节省硬盘空间,当需要的时候再将压缩文件用unzip命令解开。该命令使用权限是
所有用户。
unzip [选项] [压缩文件名]
-d<目录> 知道解压的某个目录下,默认为当前目录
-n:解压缩时不要覆盖原有的文件。
-o:不必先询问用户,unzip执行后覆盖原有文件
-j:不处理压缩文件中原有的目录路径,把所有文件解压到同一目录
-v:察看压缩文件的内容,但不解压
-t:检查压缩文件是否正确,但不解压
显示文字命令
echo [-n] <字符串〉
在屏幕上显示字符串,-n表示不换行
显示日立命令
cal [选项] [[月]年]
- j 显示出给定月中的每一天是一年中的第几天(从1月1日算起)。
- y 显示出整年的日历。
-1 显示当月的日历
-3显示前一月,本月,下月的日历
-s以星期天作为一周的第一天
-m以星期一作为一周的第一天
如cal 5 2006
显示2006年5月份的日历

日期时间命令
date [选项] [+FormatString] 显示日期时间
date <setstring> 设置日期时间
它的选项比较多,一凡在此就不一一列出来了
清屏命令clear
软件包管理
RPM全称是 Red Hat Package Manager(Red Hat包管理器)。几乎所有的 Linux 发行版本都使用这种形式的
软件包管理安装、更新和卸载软件。
01、安装
rpm -i ( or --install) options file1.rpm ... fileN.rpm
-h (or --hash) 安装时输出hash记号 (``#'')
--test 只对安装进行测试,并不实际安装。
--percent 以百分比的形式输出安装的进度。
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到由 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy 用 作为 FTP代理
--ftpport 指定FTP的端口号为
通用选项
-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为
02、删除
命令格式:
rpm -e ( or --erase) options pkg1 ... pkgN
参数
pkg1 ... pkgN :要删除的软件包
详细选项
--test 只执行删除的测试
--noscripts 不运行预安装和后安装脚本程序
--nodeps 不检查依赖性

03、升级
命令格式
rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm
参数
file1.rpm ... fileN.rpm 软件包的名字
详细选项
-h (or --hash) 安装时输出hash记号 (``#'')
--oldpackage 允许"升级"到一个老版本
--test 只进行升级测试
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--percent 以百分比的形式输出安装的进度。
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到由 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy 用 作为 FTP代理
--ftpport 指定FTP的端口号为
04、查询
命令格式:
rpm -q ( or --query) options
参数:
pkg1 ... pkgN :查询已安装的软件包
详细选项
-p (or ``-'') 查询软件包的文件
-f 查询属于哪个软件包
-a 查询所有安装的软件包
--whatprovides 查询提供了 功能的软件包
-g 查询属于 组的软件包
--whatrequires 查询所有需要 功能的软件包
信息选项
示软件包的全部标识
-i 显示软件包的概要信息
-l 显示软件包中的文件列表
-c 显示配置文件列表
-d 显示文档文件列表
-s 显示软件包中文件列表并显示每个文件的状态
--scripts 显示安装、卸载、校验脚本
--queryformat (or --qf) 以用户指定的方式显示查询信息
--dump 显示每个文件的所有已校验信息
--provides 显示软件包提供的功能
--requires (or -R) 显示软件包所需的功能

05、校验已安装的软件包
命令格式:
rpm -V ( or --verify, or -y) options
参数
pkg1 ... pkgN 将要校验的软件包名
软件包选项
-p Verify against package file
-f 校验所属的软件包
-a Verify 校验所有的软件包
-g 校验所有属于组 的软件包
详细选项
--noscripts 不运行校验脚本
--nodeps 不校验依赖性
--nofiles 不校验文件属性

06、校验软件包中的文件
语法:
rpm -K ( or --checksig) options file1.rpm ... fileN.rpm
参数:
file1.rpm ... fileN.rpm 软件包的文件名
连接帮助命令
man <command>
info <command>  该功能比man强大,但目前只在Linux中有,其他的UNIX中没有该命令
help <command>
终于把常用命令部分整理好了,但linux编辑器,桌面,网络管理配置,该平台上简单的软件开发。。。。还有好多东西要整理的,希望在两个月内,都能整理出来。

启动与关闭Linux

启动与关闭Linux
点击虚拟机工具栏上的绿色启动按钮或屏幕显示区的start this virtual machine命令,然后按“OK”。
首次启动Red Hat Linux系统,会看到“代理设置”对话框。使用该工具,用户可以设置用户帐号、系统日,声卡等。
Linux系统中有两类帐号:
根用户(root),也叫超级用户帐号,使用这个帐号可以在系统中完成任何工作。
普通用户,这个帐号供普通用户使用,可以进行有限的操作。建议可由普通用户帐号完成的任务,就不要用超级用户。
用户使用Red Hat Linux系统,首先必须登录,使用完后,必须退出系统。用户登录系统时,为了使系统能识别该用户,必须输入用户名和密码,经系统验证后才能登录系统。
Red Hat Linux有两种登录界面:X Window图形界面登录和控制台登录
在控制台登录后,可以执行命令startx启动图形环境。
更改启动方式
Linux系统有六种不同的运行级(Run Level)。在不同的运行级下,系统有不同的状态,这六种运行风别为:
0:停机
1:单用户模式
2:多用户,但是没有NFS
3:完全多用户模式,标准的运行级
4:保留,一般不用
5:X Window图形界面模式
6:重新启动
其中5是X Window图形界面模式,3是控制台界面模式。
在配置文件/ect/inittab中,有一行文本:“id:5:initdefault:”,标志了Linux的默认启动级,5表示X Window图形界面模式,如果改成3,就默认为控制台界面模式。请不要设置成0和6,这两个在系统在关机荷启动中自动使用。
注销
1、图形界面下注销
   选择[主菜单/注销],如果是在控制台界面通过startx进入图形环境,那么执行注销后将回到登录后的控制台界面。
2、控制台注销
   在命令行下输入logout
关闭
1、图形界面下关闭
   选择[主菜单/关闭]
2、控制台关闭
   在命令行下输入halt或者shutdown
   shutdown命令的格式为shutdown [选项] time
   time有两种格式:hh:mm或+m,hh:mm表示几点几分关机,+m表示m分钟后关机,特殊参数now表示立即关机
   halt [选项] 选项-p表示关机时,同时关闭电源。
 
shell及命令,已经整理完70%,明天一早还要去赶飞机,今天就先发布这些,其他的回上海后在发布吧.

Linux的安装(redhat)

Linux的安装
Linux没有严格的系统配置要求,只要有Pentium以上的CPU、64MB以上的内存及1GB左右的硬盘空间就可以,得注意的是Linux安装前要对硬盘规划好,即确定好安装在哪个分区。因为Linux支持的分区格式: Linux Native(根分区)和Linux Swap(数据交换区),与Windows 9x支持的FAT分区格式、 Windows NT支持的NTFS分区格式不兼容。也就是说,如果你还要继续使用Windows 9x、NT的话,Linux就必须安装在单独的分区下.
yifan采用的方法是在虚拟机上安装Linux,这样就不用重新分区了.目前流行的虚拟机软件有VMware和Virtual PC,VMware可以从www.VMware.com或www.VMware.cn下载,安装程序有for Windows和for Linux之分,请下载正确的版本。我的主机是Windows2003 Server,下载的安装程序是VMware-work-Station一4.5.2—8848.exe。
 
安装好VMware然后的配置如下:
    VMware安装完毕后,利用它可以建立多个虚拟机,每新建一个虚拟机,就会要求你建立一个配置文件。这个配置文件实际上相当于新电脑的“硬件配置”,你可以在配置文件中决定虚拟机的硬盘如何配置,内存多大.准备运行哪种操作系统,是否有网络等。配置Linux虚拟机的步骤如下。
    (1)选择File菜单下的“New  Virtual Machine”出现新虚拟机向导后单击“下一步”,选择“Typical”典型安装。
    (2)再单击“下一步”,在选择操作系统界面的“Guest Operation System”中选择  “Linux”,然后单击Version对应的下拉菜单选择具体的Linux版本,  此处我们选择“Red Hat LinuX”。
    (3)单击“下一步”进入安装目录选择界面。该界面上面的文本框是系统的名字,保持默认值即可,下面的文本框需要选择虚拟机操作系统的安装位置。
    (4)根据需要选择好后,单击“下一步”按钮,出现设置虚拟机内存大小的界面。Linux9.O对内存的要求是:文本模式至少需要64MB;图形化模式至少需要128MB,推荐使用192MB。此处我们选择192MB:
    (5)单击“下一步”按钮进入网络连接方式选择界面。VMware有四种网络设置方式,一般来说,Bridged方式使虚拟机就像网络内一台独立的计算机一样,最为方便好用(四种连网方式的区别大家可参考VMware的有关资料)。在此、我们选择Brided方式。
    (6)单击“下一步”按钮进入虚拟磁盘的设置界面。  这里有三种方式(Create a new virtual  disk、Use  an  existing virtual disk、Use a physical disk)可供选择、建议初学者选择“Create a new Virtual  disk”,其含义是新建一个虚拟磁盘,该虚拟磁盘只是主机—卜的一个独立文件。
    (7)在“下一步”中设置磁盘大小。在此、我们采用默认的4GB。
    (8)单击“下一步”进入文件存放路径选择界面。
在此界面可单击Browse按钮进行设置。此处我们使用默认值,单击“完成”按钮。
    至此,完成一个虚拟机的配置。


VMware的配置
    VMware安装完毕后,利用它可以建立多个虚拟机,每新建一个虚拟机,就会要求你建立一个配置文件。这个配置文件实际上相当于新电脑的“硬件配置”,你可以在配置文件中决定虚拟机的硬盘如何配置,内存多大.准备运行哪种操作系统,是否有网络等。配置Linux虚拟机的步骤如下。
    (1)选择File菜单下的“New  Virtual Machine”出现新虚拟机向导后单击“下一步”,选择“Typical”典型安装。
    (2)再单击“下一步”,在选择操作系统界面的“Guest Operation System”中选择  “Linux”,然后单击Version对应的下拉菜单选择具体的Linux版本,  此处我们选择“Red Hat LinuX”。
    (3)单击“下一步”进入安装目录选择界面。该界面上面的文本框是系统的名字,保持默认值即可,下面的文本框需要选择虚拟机操作系统的安装位置。
    (4)根据需要选择好后,单击“下一步”按钮,出现设置虚拟机的一下参数,大家保持默认就可以.设置完后,出现如图ABC所示,  至此,完成一个虚拟机的配置。
    二、VMware下Linux的安装
    以上相当于组装了一台新的计算机,接下来的工作便是安装操作系统了。安装前需做好准备工作:购买一套Red Hat  Linux  x.的安装盘,  共三张。或下载Red Hat  Linux x.安装所需要的三个ISO文件。选择虚拟机"VM"菜单中的"setting"菜单,出现Virtual Machine Settings对话框,在Device中选择"CD-ROM1",请见图Virtual Machine Settings,通过browse按钮,选择第一张光盘的文件.
 
 

    1.启动虚拟机
    点击工具栏上的绿色启动按钮或屏幕显示区的start this virtual machine命令,然后按“OK”。RED HAT会自动进入安装程序的界面。首先询问是以图形界面还是以文本界面安装,依据提示按回车选择图形界面安装,接下来询问是否要测试光驱,这里选择不要即可。方法是:在VMware窗口上单击一下鼠标(实现从Windows切换至VMware),再按键盘上的TAB键,然后按空格。
    注意:光标从Windows切换到VMware只需在VMware窗口上单击鼠标左健,而从VMware回到Windows,则要按Ctrl十Alt。提醒大家的是,在对虚拟机进行操作前一定要确保光标在VMware中,这是初学者最容易忽略的。
    2.设置分区
依提示选择完安装语言、键盘、鼠标、安装类型(与Windows类似,此处不再详述)后进入磁盘分区界面,然是在虚拟机上进行的操作,此处大胆地选“是”就可以。
   在接下来的窗口中一路默认连按“下一步”后,弹出“你已选择了要在—?列驱动器内删除所有分区……”的警告,选择“是”进入引导程序装载界面。
    3.设置根口令
    在引导程序装载界面连按“下一步”。设置完系统语言和时区后进入根口令的设置界面,这里的根口令相当于Windows 2000的系统管理员密码。创建个人用户账号和密码设置,按“下一步”,等待安装软件包,直到出现更换光盘的提示。选择虚拟机"VM"菜单中的"setting"菜单,出现Virtual Machine Settings对话框,在Device中选择"CD-ROM1",请见图Virtual Machine Settings,根据提示通过browse按钮,选择第二张光盘的文件及第三张盘的文件。在安装第三张盘的时候,会有显示器的设置,显卡的内存,可根据具体的设置,一凡建议设置为32M,设置完这步后,点下一步还会有颜色,分别率的设置,读者设置好,可以马上点旁别的测试按钮,测试一下如果出现良好的图形界面,就ok了.
如果大家在安装过程中有什么问题可以加yifan的MSN:yifan_msn@hotmail.com
     
 

Linux基础知识

Linux最早是由芬兰赫尔辛基大学一位叫Linus Torvalds的学生设计的.它是一套免费使用和自由传播的
类NUIX系统,源代码开发,能在各类硬件平台(包括Intel x86系列和RISC处理器)上运行.
 
Linux受广大计算机爱好者喜爱的原因:
 1.Linux在pc计算机上实现了全部的UNIX特性,具有多任务,多用户的能力,而且在很多方面相当稳定高效.
 2.Linux属于自由软件,用户不需要支付任何费用就可以获得它及其它的原代码,并可以对它进行须改,无偿使用它,无约束传播.
 
Linux具有以下主要特性:
  开放性
  开放性是指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。凡遵循国际标准所开发的硬件和软件,都能彼此兼容,可方便地实现互连。
  多用户
  多用户是指系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。Linux和Unix都具有多用户的特性。
  多任务
  多任务是现代计算机的最主要的一个特点。它是指计算机同时执行多个程序,而且各个程序的运行互相独立。Linux系统调度每一个进程平等地访问微处理器。由于CPU的处理速度非常快,其结果是,启动的应用程序看起来好像在并行运行。事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟,用户是感觉不出来的。
  良好的用户界面
  Linux向用户提供了两种界面:'用户界面和系统调用。
  Linux的传统用户界面是基于文本的命令行界面,即shell,它既可以联机使用,又可存在文件上脱机使用。shell有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。可编程Shell是指将多条命令组合在一起,形成一个Shell程序,这个程序可以单独运行,也可以与其他程序同时运行。
  系统调用给用户提供编程时使用的界面。用户可以在编程时直接使用系统提供的系统调用命令。系统通过这个界面为用户程序提供低级、高效率的服务。
Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。
  设备独立性
  设备独立性是指操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。
具有设备独立性的操作系统,通过把每一个外围设备看作一个独立文件来简化增加新设备的工作。当需要增加新设备时、系统管理员就在内核中增加必要的连接。这种连接(也称作设备驱动程序)保证每次调用设备提供服务时,内核以相同的方式来处理它们。当新的及更好的外设被开发并交付给用户时,操作允许在这些设备连接到内核后,就能不受限制地立即访问它们。设备独立性的关键在于内核的适应能力。其他操作系统只允许一定数量或一定种类的外部设备连接。而设备独立性的操作系统能够容纳任意种类及任意数量的设备,因为每一个设备都是通过其与内核的专用连接独立进行访问。
Linux是具有设备独立性的操作系统,它的内核具有高度适应能力,随着更多的程序员加入Linux编程,会有更多硬件设备加入到各种Linux内核和发行版本中。另外,由于用户可以免费得到Linux的内核源代码,因此,用户可以修改内核源代码,以便适应新增加的外部设备。
  供了丰富的网络功能
  完善的内置网络是Linux的一大特点。Linux在通信和网络功能方面优于其他操作系统。其他操作系统不包含如此紧密地和内核结合在一起的连接网络的能力,也没有内置这些联网特性的灵活性。而Linux为用户提供了完善的、强大的网络功能。
  支持Internet是其网络功能之一。Linux免费提供了大量支持Internet的软件,Internet是在Unix领域中建立并繁荣起来的,在这方面使用Linux是相当方便的,用户能用Linux与世界上的其他人通过Internet网络进行通信。
  文件传输是其网络功能之二。用户能通过一些Linux命令完成内部信息或文件的传输。
远程访问是其网络功能之三。Linux不仅允许进行文件和程序的传输,它还为系统管理员和技术人员提供了访问其他系统的窗口。通过这种远程访问的功能,一位技术人员能够有效地为多个系统服务,即使那些系统位于相距很远的地方。
  可靠的系统安全
  Linux采取了许多安全技术措施,包括 对读、写进行权限控制 带保护的子系统 审计跟踪 核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。
  良好的可移植性
  可移植性是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力.
Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。
可移植性为运行Linux的不同计算机平台与其他任何机器进行准确而有效的通信提供了手段,不需要另外增加特殊的和昂贵的通信接口。
   在说Linux特点时,也顺别提一下它的缺点,Linux没有核心团队,来自世界各地的爱好者都可以发布自己的补丁(patch),缺点是源代码可能杂乱无章并且可能相互冲突.其实从另个方面说也是优点,爱好者都可以发布自己的补丁(patch),这使Linux充满着活力,不断更新进步.

Linux与其他操作系统的区别
  Linux可以与MS-DOS、Windows等其他操作系统共存于同一台机器上。它们均为操作系统,具有一些共性,但是互相之间各有特色,有所区别。至于MS-DOS、Windows对我们一般计算机爱好来说是非常熟悉的操作系统了,在此只列出Linux与UNIX的区别.
  某些PC机的Unix和Linux在实现方面相类似。几乎所有的商业Unix版本都基本支持同样的软件、程序设计环境和网络特性。然而,Linux和Unix的商业版本依然存在许多差别。Linux支持的硬件范围和商业Unix不一样。一般来说,商业Unix支持的硬件多一些,可是Linux支持的硬件也在不断扩大。突出的是,Linux至少和商用Unix一样稳定。对许多用户来说,最重要的因素是价格。Linux是免费软件,用户可以从Internet网上下载。如果上网不方便,可以很便宜地通过邮购得到Linux的磁盘或CD-ROM。当然也可以直接从朋友那里得到。商业Unix的价值不应被贬低。除了软件本身的价格外,用户还需支付文档、售后支持和质保费。对于较大的机构,这些都很重要,但是PC机用户也许从中得不到什么好处。许多商业公司和大学等单位已经发现,在实验室用廉价的PC机运行Linux比用工作站运行商业Unix还好。Linux可以在PC机上提供工作站的功能,而PC机的价格是工作站的几分之一。也有一些针对PC机的便宜的Unix,其中最有名的是386BSD。在许多方面,386BSD软件包和Linux兼容,但Linux更适合用户的需求。最显著的是,Linux的开发是开放的,任何志愿者都可以对开发过程做出贡献。相比之下,386BSD是由封闭的团队开发的。正是这样,这两种产品存在着严重的概念上和设计上的差别:Linux的目标是从头开始开发一个完整的Unix系统;386BSD的目标则是对现有的BSD做些修改,以适合80386系统。当然现在也有许多免费的在PC机上运行的UNIX,如NetBSD,FreeBSD,OpenBSD等,NetBSD,FreeBSD,OpenBSD在硬件支持方面不如Linux,在系统性能方面,具专家分析,FreeBSD在网络性能,软件移植和系统规范化上比Linux略强些.

Linux下的目录树
  /
  这就是根目录。在Windows,DOS或者其他类似的操作系统里面,每个分区都会有一个相应的根目录。但是Linux和其他Unix系统把所有的文件都放在一个目录树里面,/ 就是唯一的根目录。一般来讲,根目录下面很少保存什么文件,或者只有一个内核映像在这里。
  /boot
 很多Linux系统把内核映像和其他一些和启动有关的文件放在这里。
  /tmp
  一般只有启动的时候产生的临时文件才会放在这个地方。我们自己的那些临时文件都放在 /var/tmp。
  /mnt
  这个目录下面放着一些用来mount其他设备的子目录,比如说/mnt/cdrom或者/mnt/floppy。
  /lib
  启动的时候所需要用到的库文件都放在这个目录下。那些非启动用的库文件都会放在/usr/lib下。内核模块是被放在/lib/modules/(内核版本)下的。
  /proc
  这个目录在磁盘上其实是不存在的。里面的文件都是关于当前的系统状态的,包括正在运行的进程,硬件状态,内存使用的多少……
  /dev
  这个目录下保存着所有的设备文件。里面有一些Linux内核创建的用来控制硬件设备的特殊文件。注意,网卡设备文件(eth0,ppp0等)不在这儿。
  /var
  这里有一些被系统改变过的数据。比如说/var/tmp,就是用来储存临时文件的。还有很多其他的进程和模块把它们的记录文件也放在这个地方。下面将会列举一些重要的子目录:
  /var/log
  这里放着绝大部分的记录文件。随着时间的增长,这个目录可能会变得很臃肿。所以需要定期来清理一下。
  /var/run
  包括了各种运行时的小信息。
  /var/lib
  包括了一些系统运行的时候需要的文件。如果你用笔记本上网,/var/lib/pcmcia/stab可能会对你有用。
  /var/spool
  邮件,新闻,打印序列的所在地。
  /root
  Root用户的主目录。
  /home
  一般用户的主目录都会放在这个目录下。你可以通过$ cd ~ 来进入你自己的主目录。
  /etc
  如果你是Root用户的话,这个目录应该是你最常来的地方。这里保存着绝大部分的系统配置文件。相对来讲,单个用户的系统配置文件将会保存在这个用户自己的主目录里面。这里的文件会根据你所安装的软件而增减。下面将会列举一下重要的子目录:
  /etc/X11
  这里放着X系统所需要的配置文件。XF86Config就是把配置储存到这个地方的。/etc/X11/fonts里面放着一些服务器需要的字体。还有一些窗口管理器存放的配置文件也是放在这个地方的。
  /etc/init.d
  这个目录保存着启动描述文件,包括各种模块和服务的加载描述。所以如果不清楚的话,最好不要随便删这里的东西。这里的文件都是系统进行配置的,不是用户自己用来配置的。
  /etc/rcS.d
这里放着一些连接到/etc/init.d的连接文件,根据runlevel的不同而执行相应的描述。这里的文件名都是由S来开头的,然后是一个两位的数字——表示各种服务启动的顺序。比如,S24foo就是在S42bar前面执行的。接着就是相应的连接到/etc/init.d下面的文件的名字了。
  /etc/rc0.d - /etc/rc6.d
  这里面也是一些连接文件,和/etc/rcS.d差不多。不同的是,这些只会在指定的runlevel下运行相应的描述。0表示关机,6表示重启。所有以 K开头的文件表示关闭,所有以S开头的文件表示重启。目前来讲,文件的命名方式和/etc/rcS.d是一样的。注意,在Debian下,2表示启动。
  /bin, /sbin
这里分别放着启动的时候所需要的普通程序和系统程序。很多程序在启动以后也很有用,它们放在这个目录下是为它们会经常被其他程序所调用。
  /usr
  这是一个很庞大的目录,几乎所有的文件都放在这下面,除了上面所说的那些。下面将会列举一些重要的子目录:
  /usr/X11R6, /usr/X11, /usr/Xfree86
  这里面保存着X系统所需要的文件,它的目录结构和/usr是一样的。
  /usr/bin
  v二进制可执行文件存放的目录,这里放着绝大部分的应用程序。
  /usr/sbin
  这里放着绝大部分的系统程序。
  /usr/games
  游戏程序和相应的数据会放在这里。
  /usr/include
  这个目录保存着C和C++的头文件。除非你是程序员,否则你可能不会感兴趣。
  /usr/lib
  启动时用不到的库文件都会被放在这里。
  /usr/info
  这里保存着GNU Info程序所需要的数据。
  /usr/man
  这里保存着man程序所需要的数据。
  /usr/src
  这里保存着源代码文件。Linux内核的源代码都放在/usr/src/linux下了。
  /usr/doc
  这里保存着各种文档文件。这些文件可以帮助你了解Linux,解决问题和提供一些技巧。或者你可以通过访问 http://www.linuxdoc.org 来活得更多的知识。
  /usr/local
  这里面保存着本地计算机所需要的文件。在用户进行远程访问的时候特别有意义。这个目录在有些Linux系统下就是一个单独的分区,存放一些这台机子所属的那个用户的文件。里面的结构和/usr是一样的。
  /usr/shared, /usr/share
  这里保存着各种共享文件,比如说某个应用程序所需要的声音文件。

程序人生:终身受用的4个经典故事

来源于网络

1.误会: 
  早年在美国阿拉斯加地方,有一对年轻人结婚,婚后生育,他的太太因难产而死,遗下一孩子。 
  他忙生活,又忙于看家,因没有人帮忙看孩子,就训练一只狗,那狗聪明听话,能照顾小孩,咬着奶瓶喂奶给孩子喝,抚养孩子。 
  有一天,主人出门去了,叫它照顾孩子。 
  他到了别的乡村,因遇大雪,当日不能回来。第二天才赶回家,狗立即闻声出来迎接主人。他把房门开一看,到处是血,抬头一望,床上也是血,孩子不见了,狗在身边,满口也是血,主人发现这种情形,以为狗性发作,把孩子吃掉了,大怒之下,拿起刀来向着狗头一劈,把狗杀死了。 
  之后,忽然听到孩子的声音,又见他从床下爬了出来,于是抱起孩子;虽然身上有血,但并未受伤。 
  他很奇怪,不知究竟是怎么一回事,再看看狗身,腿上的肉没有了,旁边有一只狼,口里还咬着狗的肉;狗救了小主人,却被主人误杀了,这真是天下最令人惊奇的误会。 
  注:误会的事,是人往往在不了解、无理智、无耐心、缺少思考、未能多方体谅对方,反省自己,感情极为冲动的情况之下所发生。 
  误会一开始,即一直只想到对方的千错万错;因此,会使误会越陷越深,弄到不可收拾的地步,人对无知的动物小狗发生误会,尚且会有如此可怕严重的后果,这样人与人之间的误会,则其后果更是难以想象。 

2.钉子: 
  有一个男孩有着很坏的脾气,于是他的父亲就给了他一袋钉子;并且告诉他,每当他发脾气的时候就钉一根钉子在后院的围篱上。 
  第一天,这个男孩钉下了37根钉子。慢慢地每天钉下的数量减少了。他发现控制自己的脾气要比钉下那些钉子来得容易些。 
  终于有一天这个男孩再也不会失去耐性乱发脾气,他告诉他的父亲这件事,父亲告诉他,现在开始每当他能控制自己的脾气的时候,就拔出一根钉子。 
  一天天地过去了,最后男孩告诉他的父亲,他终于把所有钉子都拔出来了。 
  父亲握着他的手来到后院说:你做得很好,我的好孩子。但是看看那些围篱上的洞,这些围篱将永远不能回复成从前。你生气的时候说的话将像这些钉子一样留下疤痕。如果你拿刀子捅别人一刀,不管你说了多少次对不起,那个伤口将永远存在。话语的伤痛就像真实的伤痛一样令人无法承受。 
  注:人与人之间常常因为一些彼此无法释怀的坚持,而造成永远的伤害。如果我们都能从自己做起,开始宽容地看待他人,相信你(你)一定能收到许多意想不到的结果....帮别人开启一扇窗,也就是让自己看到更完整的天空.... 

3.且慢下手: 
 大多数的同仁都很兴奋,因为单位里调来一位新主管,据说是个能人,专门被派来整顿业务;可是日一天天过去,新主管却毫无作为,每天彬彬有礼进办公室,便躲在里面难得出门,那些本来紧张得要死的坏份子,现在反而更猖獗了。 
  他那里是个能人嘛!根本是个老好人,比以前的主管更容易唬! 
  四个月过去,就在真正努力为新主管感到失望时,新主管却发威了--坏份子一律开革,能人则获得晋升。下手之快,断事之准,与四月表现保守的他,简直像是全然换个人。 
  年终聚餐时,新主管在酒过三巡之后致词:「相信大家对我新到任期间的表现,和后来的大刀阔斧,一定感到不解,现在听我说个故事,各位就明白了:「我有位朋友,买了栋带着大院的房子,他一搬进去,就将那院子全面整顿,杂草树一律清除,改种自己新买的花卉,某日原先的屋主往访,进门大吃一惊的问:『那最名贵的牡丹哪里去了?』我这位朋友才发现,他竟然把牡丹当草给铲了。 
  后来他又买了一栋房子,虽然院子更是杂乱,他却是按兵不动,果然冬天以为是杂树的植物,春天里开了繁花;春天以为是野草的,夏天里成了锦蔟;半年都没有动静的小树,秋天居然红了叶。直到暮秋,它才真正认清哪些是无用的植物,而大力铲除,并使所有珍贵的草木得以保存。」说到这儿,主管举起杯来:「让我敬在座的每一位,因为如果这办公室是个花园,你们就都是其间的珍木,珍木不可能一年到头开花结果,只有经过长期的观察才认得出啊! 

4.宽大: 
 这是一个来自越战归来的士兵的故事。他从旧金山打电话给他的父母,告诉他们:「爸妈,我回来了,可是我有个不情之请。我想带一个朋友同我一起回家。」「当然好啊!」他们回答「我们会很高兴见到的。」 
    不过儿子又继续下去「可是有件事我想先告诉你们,他在越战里受了重伤,少了一条胳臂和一只脚,他现在走投无路,我想请他回来和我们一起生活。」 
  「儿子,我很遗撼,不过或许我们可以帮他找个安身之处。」父亲又接着说「儿子,你不知道自己在说些什么。像他这样残障的人会对我们的生活造成很大的负担。我们还有自己的生活要过,不能就让他这样破坏了。我建议你先回家然后忘了他,他会找到自己的一片天空的。」就在此时儿子挂上了电话,他的父母再也没有他的消息了。 
 几天后,这对父母接到了来自旧金山警局的电话,告诉他们亲爱的儿子已经坠楼身亡了。警方相信这只是单纯的自杀案件。于是他们伤心欲绝地飞往旧金山,并在警方带领之下到停尸间去辨认儿子的遗体。 
  那的确是他们的儿子没错,但惊讶的是儿子居然,只有一条胳臂和一条腿。 
  故事中的父母就和我们大多数人一样。要去喜爱面貌姣好或谈吐风趣的人很容易,但是要喜欢那些造成我们不便和不快的人却太难了。我们总是宁愿和那些不如我们健康,美丽或聪明的人保持距离。 
  然而感谢上帝,有些人却不会对我们如此残酷。他们会无怨无悔地爱我们,不论我们多么糟总是愿意接纳我们。今晚在你入睡之前,向上帝祷告请他赐给你力量去接纳他人,不论他们是怎么样的人;请他帮助我们了解那些不同于我们的人。 
  每个人的心里都藏着一种神奇的东西称为「友情」,你不知道它究竟是如何发生何时发生,但你却知道它总会带给我们特殊的礼物。 
  你也会了解友情是上帝给我们最珍贵的赠与!朋友就像是稀奇的宝物。他们带来欢笑,激励我们成功。他们倾听我们内心的话,与我们分享每一句赞美。他们的心房永远为我们而敞开。现在就告诉你的朋友你有多在乎他们。 
  试想:朋友,您一路看下来之后;一定有很深的感触吧。那么,在对别人有所决定与判断之前,首先,请想想这是否是一个「误会」,然后,请考虑您是否一定要钉下这个「钉子」,如果可以的话,请「且慢下手」。 
  因为,当您对别人「宽大」之时,即是对您自己宽大。 

Java之父强烈呼吁 停止无谓的Scripting Flamewar


2006.03.29  来自:CSDN   
 
日前James Gosling接受SYS-CON.TV采访,就其3月初参加纽约的Sun 全球教育研讨会(World Wide Education & Research Conference),JDJ报道其回答提问内容所引发的脚本语言的口水大战进行澄清。
在采访中他说到:
"But I've done more scripting systems than non-scripting systems." (“多年来我也开发了许多脚本的系统和非脚本系统,不过总体而言,还是脚本系统更多一些。”)
接着他描述了现在许多人将语言狭义的分为对立的两类:
“一般认为脚本语言与编译语言是相对而言的。这是一种过于简单和偏激的观点,这种两极化的一分为二法对程序语言设计的分类来讲太过于简陋了。”
“其实将Java ‘对立’PHP、Ruby或其他语言的讨论,都是毫无意义的。”
“我们工作中采用各种语言, Java、PHP和Python,等等。你可以用PHP创建网络表示层(presentation layer),并用Java进行解析。”

Ruby On Rails 创始人:对Java 说再见

 
2006.03.30  来自:CSDN   
 
JDJ News报道,这两周以来围绕Java发生的两件大事:EclipseCon 和TheServerSide Java Symposium,在业界掀起了一场关于Java与动态语言之间的不休争论。
虽然一直没有一个确定的答案,但围绕Java与动态语言(比如Ruby、PHP、Perl和Python)之间的争论从来没有消失过。随着Java的日趋复杂,动态语言的优势——简化和易用就越加凸显出来。如果说Java是一列稳固的货运火车,那Ruby on Rails就是一列时髦的特快列车。
Ruby on Rails 创始人,David Heinemeier Hansson,认为Ruby等动态语言是Java在Web上最大的威胁者。
“Ruby on Rails 展示了你所使用的动态语言比Java更加便于维护,以往所认为只有Java所具备的市场的影响力,现在轮到Rails开始流行了。”
Geir Magnusson,Apache Software Foundation 成员,同时也是Intel's Middleware Products Division 的工程师,曾经向听众调查多少人尝试过Ruby on Rails,结果是半数以上的人举手。不过当问到有多少人采用该产品框架时,几乎所有人都把手放下。
这个小调查表明了企业级Java开发人员还没有准备由Java转向Ruby on Rails开发。不过,Heinemeier Hansson说,“我看到许多Java开发人员都逃避upstream,他们反而对low end让步——对‘大部分人大部分时候都需要’的另一种理解——表达了一种对‘真正需要的静态语言’的强烈渴望。”

程序员该做的事

作者:jshao

1、总结自己一天任务的完成情况
最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多
 
2、考虑自己明天应该做的主要工作
把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作
 
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法
出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢
 
4、考虑自己一天工作完成的质量和效率能否还能提高
一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍
 
5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态
闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示
 
6、记住一位同事的名字及其特点
你认识公司的所有同事吗?你了解他们吗?
 
7、清理自己的代码
今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?
 
8、清理自己的桌面
当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净
 
 
程序员每周该做的事
1、向你的老板汇报一次工作
让你的老板知道你在做什么,这很重要。可以口头、书面、邮件,看你老板的工作方式而定
 
2、进行一次自我总结(非正式)
这周之内自己表现得怎么样?该加分还是扣分?
 
3、制定下周计划
把下周要做的事情列出来,一样要分清楚优先级
 
4、整理自己的文件夹、书柜和电脑文件
把桌面以外的地方也要清理干净,电脑的文件夹,收到的邮件,把过时的垃圾全部清理掉
 
5、与一个非公司的朋友沟通
它山之石,可以攻玉
 
6、看一本杂志
找一本适合自己的专业杂志
 
7、纠正自己或同事一个细节上的不正确做法
《细节决定成败》看过了吗?没看过强烈建议先看看
 
 
程序员每月该做的事
1、至少和一个同事一起吃饭或喝茶
不光了解自己工作伙伴的工作,还要了解他们的生活
 
2、自我考核一次
相对正式地考核自己一下,你对得起这个月的工资吗?
 
3、对你的同事考核一次
你的同事表现怎么样?哪些人值得学习,哪些人需要帮助?
 
3、制定下月的计划,确定下月的工作重点
 
4、总结自己工作质量改进状况
自己的质量提高了多少?
 
5、有针对性地对一项工作指标做深入地分析并得出改进的方案
可以是对自己的,也可以是对公司的,一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话,做的成事,工作上功夫要做足。
 
6、与老板沟通一次
最好是面对面地沟通,好好表现一下自己,虚心听取老板的意见,更重要的是要了解老板当前关心的重点
 
 
程序员每年该做的事
1、年终总结
每个公司都会做的事情,但你真正认真地总结过自己吗?
 
2、兑现给自己、给家人的承诺
给老婆、儿子的新年礼物买了没有?给自己的呢?
 
3、下年度工作规划
好好想想自己明年的发展目标,争取升职/加薪、跳槽还是自己出来干?
 
4、掌握一项新技术
至少是一项,作为程序员一年要是一项新技术都学不到手,那就一定会被淘汰。
掌握可不是看本书就行的,要真正懂得应用,最好你能够写一篇教程发表到你的blog
 
5、推出一种新产品
可以是一个真正的产品,也可以只是一个类库,只要是你创造的东西就行,让别人使用它,也为世界作点贡献。当然如果真的很有价值,收点注册费也是应该的
 
6、与父母团聚一次
常回家看看,常回家看看

当前小说创作点评(二)

私人档案·三言两语   文 / 傅翔
 
——当前小说创作点评

9、刘恒、刘震云、刘毅然、池莉、方方、赵玫、范小青、毕淑敏、蒋韵、张抗抗在列举的这些人当中,比较活跃的大概也就只有池莉、方方、毕淑敏三个了。池莉和方方一样,她们都沿袭着新写实的老路继续不知疲倦地写着,而且也都写得令人满意。她们反映的是这个社会的角角落落及方方面面的问题与故事,由于实实在在,因此仍有不少读者喜欢。但作为一种艺术而言,她们的小说缺少了原初的锋芒,显得有些平庸。而这实际上也是个普遍存在的问题,赵玫、范小青、毕淑敏、蒋韵、张抗抗近期写的小说也无甚出色。赵玫的《朗园》、蒋韵的《红殇》、甚至包括《栎树的囚徒》,张抗抗的《赤彤丹朱》及《情爱画廓》,说到底都不是什么创新之作。她们更关心的似乎是故事,即如何把心中不想放置的故事倒出来,至于艺术处理却无太大的考究。也许,这种小说更大意义上是个人的,而非读者的。这可能也是许多女作家一个致命的弱点吧?显然,这同样是一个不可容忍的过错,仅仅把小说当作自己的私人用品,我想还不如保存好别抖出来为宜。
在这方面,刘恒、刘震云便做得节制,至少,他们可以不写。说实在的,他们都是相当优秀与出色的小说写手,特别是刘恒,他的小说才华是有目共睹的,无论从前期的中篇创作,还是后来的《逍遥颂》及《苍河白日梦》,都显示了作家敏锐的艺术直觉。特别是《苍河白日梦》的深刻给人留下极难忘的印象,它同时也是一部相当出色的小说。从这意义上说,刘恒没有继续努力让人觉得可惜。至于刘震云则是另一回事,在我印象中,刘震云后来的小说都没有前期几个中篇出色,包括《故乡天下黄花》也没什么突破。也许,刘震云也意识到了这一点,见好就收也不失为有自知之明的举动,至少不会徒添读者的厌倦。而这一收缩也说明刘震云也许还有他更愿意努力的事情要做。
另一位叫刘毅然的却似乎不愿意这样寂寞下去。虽然他的名字换了一种方式在电视上出现,但也许拍片的灵感激发了他,他不愿意让手空着了。《奔逃》、《老故事》、《祈祷》一连串就是几十万字轰炸开来。不敢说有什么进步,但毕竟有些分量,然而说到底也就那么加事。《老故事》实实在在是老故事,似乎还能看,但看完了也没了。至于《奔逃》与《祈祷》,由于逃离了刘毅然式的叙述而变得让人感到陌生。大概是操作太快的缘故,写得过于草率了些。

10、梁晓声、洪峰、朱苏进、储福金、潘军、周大新、陈源斌、刘醒龙、河申、谈歌、陈村、阎连科、许谋清、钟道新、皮皮、李贯通、李佩甫、杨争光、程海、京夫、高建群、莫伸……梁晓声的再次兴盛与电视剧《年轮》有关。作为一个知青作家,他的真诚留给许多人深刻的印象。《泯灭》虽不是很出色的作品,但和《浮城》等许多小说一样反映了许多尖锐的社会现实问题。和他为人本身一样,小说和散文都极能体现他那坦荡明了的思想与说话风格。也许,他的小说艺术成就更多只能属于过去的时代,但相对于文坛,梁晓声是不可或缺的。
洪峰已经少写东西了,但不时冒出来的文字总让人感动奇怪。相对于过去的成就,现在的洪峰显得微不足道。《苦界》显示的是作家编造故事的能力,可算够档次的通俗小说。而《东八时区》则平庸无奇,作为长篇勉为其难。总之,洪峰失去的不是讲述故事的能力,而是一种良好的艺术直觉。
朱苏进是应当着重提到的相当优秀的小说家。他的成功源于他极隐蔽的职业才干及良好的语言直觉。《绝望中诞生》及《接近于无限透明》都蕴含了作家非凡的人生洞察与感悟。能在军队题材上取得长足突破无疑与作家思考的深度息息相关,而深度也恰恰是朱苏进小说的闪光点。值得推崇的是,朱苏进小说中的人物往往塑造得有血有肉,而第一人称的叙述激情也让读者欲罢不能。当然,如何把这才华应用到更为广阔的空间去塑造一个群体,这是朱苏进面临的严峻问题。只要作家涉足长篇的创作,这是必须解决的。
接下来的向个作家似乎都没有很独特的艺术追求,但又都是不容忽视的。储福金写得不少,而且富于探索性,但不是很让读者满意。潘军写得有些古怪与灵气,但写得少且不好读。这两位特色型的小说家似乎由于常变且质量不很稳定而缺少关注者。对于他们而言,“如何写”成了小说的主要内容,而不是读者喜欢的“写什么”,自然,困难也就摆在了他们面前。而对于周大新、陈源斌、刘醒龙、何申、谈歌等人而言,“写什么”则是他们唯一的需要。他们的小说也正是在故事的演化中获得了一定的声誉,除此之外,意义也甚为了了。陈村的艺术才华是较早确立的,作为一名残疾人,他的思考更多地渗透在小说之中。可惜目前很少见到他的作品。阎欣宁是创作颇丰的小说家,但质量参差不齐,自然很难引起读者注意。这点在阎连科、许谋清、钟道新、皮皮、李贯通、李佩甫身上也有不同程度的表现。显然,他们都有一个共同的危机,即如何面对小说平庸的问题。平庸是写作不可轻视的潜在劲敌,任何马虎与随意都将导致一个作家的败落,而平庸又是同时存在于“写什么”与“如何写”两方面的。
相对他们而言,后面几位陕西作家显得更加出色。能够实实在在地埋头创作是他们共同的优点,他们更像是纯粹的创作者,既没有放弃创作,更没有放弃生活中真实与深刻的体验。谈论他们无疑是艰难的。而用三言两语概括他们厚实的写作显然有点不自量力,但想谈点总比沉默好,顺此也期能够抛砖引玉吧,毕竟,谈到他们的文章太少了。
在五人中间,杨争光是最小的一位,写得也最少,但却写得更纯粹。很早的《黄尘》可以看到他的小说才华。后来的《黑风景》、《棺材铺》、《赌徒》、《老旦是一棵树》都极具吸引力,在内容与艺术上显示了它们独特的魅力。京夫写得不少也比较传统与现实,他讲述了一个又一个凄绝悲惨的农民故事,讲述得非常地道而平实。《八里情仇》体现了作家沉稳坚实的努力与敏锐而深厚的洞悟。而程海也不例外,《热爱命运》展示的正是作家刻骨铭心的超凡体验与细腻若丝的感觉,对艺术的真诚与对情的真诚相融得相当完美。莫伸的《尘缘》则走向城市,用自己的思索与机智写出了人生的苦痛与挣扎。而高建群则扎根于小镇的历史与现实,相继推出《最后一个匈奴》和《六六镇》,他的处理重大题材的非凡才智由此可见一斑。无疑,这些作家尽管在艺术上还不很让人满意,但在“写什么”的问题上则走在许多作家的前面。

11、迟子建、陈染、海男、斯好、林白、张欣、徐小斌、徐坤、虹影、严歌苓、友友……这是活跃于当前小说创作的作家,除了前面四位,后面几位都是最近几年特别是去年才冒出来的。不知道是否应该感谢世妇会在北京的召开,总之我认为她们的名字变得耳熟能详跟这潮流有着密切的关系,至少对于其中几位是如此。
迟子建与陈染一开始就是纯粹的小说写手,而且也都早有名气,海男则先有诗名才转向小说。一般的习惯也都让这三位女性同站一列,而实际上她们的风格存在明显的分别。迟子建的故事是比较透明的,也是那种比较传统的女性写作,《北极村童话》便是很好的代表。后来的迟子建似乎一直把目光集中于那块神奇的土地上的平凡的人物,《亲亲土豆》、《原野上的羊群》、《白银那》都给人深刻印象。可以看到,这种朴素的写作背后蕴含了作者深厚的故土之情以及对劳动者对亲情与温情的深切体悟。迟子建无疑有着许多同性作家没有具备的小说深度认识,因此她的小说也越出了那个团体的水平线。可以想像,只要迟子建朝这个方向不倦地努力并更确实地深入下去,成就是指日可待的。
与迟子建不同,陈染采取的是一种极端个人化的小说语言。她那禁闭式的生活给了她一种自足的想像空间。从近年小说看来,陈染更多地走向了危险的深渊。如果说她的前期小说还出示了她富于灵感的想像力的话,那么近年的小说则很难说得上讨人喜欢。《私人生活》确实就是私人的生活,它没有提供给读者多少有益的感受。它实际上还不如《与往事干杯》带给人们的感受一样丰富。显然,陈染正在走向一个极端,这个极端将最终堵塞她与读者的通途。正如某些读者指出的那样,陈染小说出示了太多的自恋倾向,小说变成了私人生活的流水账,而对小说叙事技术的过度迷恋又让读者视若畏途。如果这真如作家所说的是一种探索的话,那么我希望她不要再冒这个险,趁早把她的才华投入到更广阔的天地中去。毕竟,陈染有她的独特之处。
相对于前面两位,海男的探索性便更加纯粹。她从小说的叙述及故事的演绎上做出自己极端的阐释。当然,这种阐释有些僵硬,很难让读者满意。但一意孤行的海男似乎无暇顾及这些,她更需要时间把心中一切的狂想倾倒出来。有一点是明了的,海男只能写有她强烈经验参与的小说,也只有这时海男才显得优秀并富于灵气。《疯狂的石榴树》及《我的情人们》都有它独特的意义,这意义便是海男对写作的情有独钟。海男无疑和陈染一样具备着一种可怕的文本痴恋,她们对小说及艺术的纯粹态度令人可敬又让人担忧。也许从这角度上说,海男更适合于做一个出色的诗人,而非小说家。
面对于斯好便更是如此,她实际上是一位优秀的散文作家。和唐敏一样,她的领域是生活与写作,既不太重于写作又对写作有自己独到的体悟。这实际上是一种满足与惬意,是人生的获得与流露。也许,写作在这样的境界中已经并不重要,而对写作有如此认识同样让我钦佩。毕竟,过分的痴迷不悟造就的不是文学天才而是傻瓜与疯子。
林白、张欣、徐小斌、徐坤的小说读过的不多,从一两篇的印象来说显然是不当的,只能说一点聊以交差罢了。林白的《一个人的战争》写得还算出色,至少对于个人心理感受的描摹相当有分量。实际上,它不能简单地等同于陈染的私人化的叙述,面对它,更需要用一种全新的视角去识别它存在的意义。张欣的《掘金时代》粗粗看来无太多的内涵,由于面对当下生存作一种诠释,它缺乏的是深度空间的构筑。当然,能够如此写的作家并不多,由此显示的意义自然有其独到之处。徐小斌则坚持追索古老故事的一种新义,《双鱼星座》给人带来的是清新的感觉。当然,她似乎也是传统的,大概年龄的限制都会在作品有相应的展示吧。对于徐坤,则既有锋芒又有思考,也许是长年读书研究的缘故,她的小说充分显示了艺术的完整性。《沈阳啊沈阳》就是一部好作品,它既有稳重的叙述又不缺乏敏锐的思索。可以说,能把当下情境的日常生活写得如此地道与耐人寻味在别的女性作家身上还属少见。不用说,徐坤是值得期待的。
虹影、严歌苓、友友的出现也许跟“外来户”有关。实际上,除了早期出现的一些篇章有较好表现外,后面的就近乎涂抹随意之作了。由于现在谈论的是当前中国的小说创作问题,我想还是把这些外籍侨民留待以后再说吧。

12、余华、北村、苏童、格非、孙甘露、叶兆言、吕新提到这么一个小说创作群体是使人愉快的,至少在当前小说创作中,他们都是相当有分量的。除了叶兆言之外,另外几位都曾经常被当作先锋小说的代表人物。事实也证明,他们一直处于读者谈论的先锋位置,这点跟他们写作的纯粹态度都是息息相关的。有趣的是,他们都曾在小说文本的实验中取得过辉煌的战果,这些各具魅力的中短篇小说至今仍然活跃在读者心中,而且甚至仍然是他们创作实绩的很好证明。余华的《现实一种》、北村的《聒噪者说》、苏童的《一九三四年的逃亡》、格非的《迷舟》、孙甘露的《信使之函》、叶兆言的《忆秦娥》、吕新的《山中白马》都曾在不同意义上取得读者的赞誉。当然,由于他们都是相当严肃且出色的小说写手,他们值得称赞的小说比比皆是。如《河边的错误》、《活着》、《玛卓的爱情》、《最后的艺术家》、《妻妾成群》、《褐色鸟群》等等都是这样的作品。在这边,我们可以看到前四位作家是相对比较出色的。他们似乎都在恪守一条宁精勿滥的原则,也正是这让他们保持着持久不衰的生命力。作为早在80年代末就成名的他们而言,如今仍然如此辉煌确实不易。由于他们,我想说的话很多,于此却只能作个简单的介绍,这也是一件令人遗憾的事情。
首先谈及的仍然是余华。至今为止,谁也无法否认余华在小说界的地位。作为一个以先锋小说著称的小说家而言,他靠的是节制和勤勉。虽然他的小说举目可数,但那分量却非一般小说家可比。要点出他的代表作是困难的,因为他小说的水准不像许多小说家的小说一样参差不齐。从近年的创作来看。《细雨与呼喊》、《活着》、《许三观卖血记》及一些小短篇都一改原初的叙事风格而直接靠近朴素。这个转变曾经得到了一致的赞赏,特别是对于一般读者而言,这简直是个福音。余华无疑是个严谨与慎重的小说家,《许三观卖血记》的平白的叙事是经过再三磨练的结果,虽然并不怎么震撼人,却也给人一种绵长的韵味。它仍不失为一部出色的作品。可以预言,只要余华能够坚持不懈,我们就有理由等待一部杰作的诞生。
接着谈到的应该就是北村。原来的北村实际上并不是如此引人注目与重要的,然而他却后来居上了。至今为止,北村的重要是无法否认的,特别是在一系列转变完成之后。这个转变显然来得有些突然,原来还是顽固而极端的先锋执著狂,甚至在先锋存在意义的追索上陷入绝望边缘的追逐者,忽然有一天由于信仰的寻找与到位而改变了所有的努力。也许,确实如作家所言,形式已经不再重要,重要的更是精神与心灵。于是便有了《施洗的河》这部奇特而重要的小说。接着,又有了《张生的婚姻》、《玛卓的爱情》、《孙权的故事》、《最后的艺术家》、《运动》等等这样一系列充满激情与力量的诉说。不用说,它们的意义是相当杰出的,原因就在于它的独特性在中国小说界仍然是个空白。也许,这一切都需要相当大的勇气,特别是对于这个无神论的国度而言,这种艺术追求带着的一定是某种实实在在的牺牲与付出。面对它,个人都是苍白无力的,我们所能做的也只有祈祷与祝福。
苏童出现在大家面前已经很有一段时间了,他更像一个传统的小说写手,他的小说总是让人津津乐道。《妻妾成群》那优美叙述与故事交相辉映,给人一种亲切的抚慰。《米》、《我的帝王生涯》、《武则天》也写得极为平稳好看。包括近期的一些短篇,苏童讲故事的能力在小说界都是首屈一指的。他不仅把握了节奏上的快慢,而且把握了故事的可读性,可以说,苏童的故事才是真正纯粹的故事。在这点上,它与“三言二拍”有着割不断的异曲同工之妙。很难说苏童会朝什么方向发展,而对于以好看为目的的小说家而言,我们也不会有什么苛求。
相对于前面三位,格非的学院色彩最浓。一开始的模仿就让他出尽风头,这都与其学院的教育息息相关。有了图书馆的便利,加上博学与变通,《迷舟》与《褐色鸟群》竟也没让人感到模仿的不快,这只能说明作家确实有模仿的天才。《边缘》、《唿哨》、《傻瓜的诗篇》、《敌人》、《欲望的旗帜》等小说的不停涌现说明了格非的不断进取与努力。他明显没有余华的节制,这些作品也都各有各的特色,从此也说明了格非革新的欲望与企图。从最近的《欲望的旗帜》看来,格非似乎太过于草率了,至少对当下生存境遇缺乏深刻的洞察力,这部长篇由此显得有些平庸。我想格非的智力是出色的,相信他还不至于走向由于多而滥的惨败境地。
而对于孙甘露、叶兆言、吕新而言,似乎便没有前面几位那样才华横溢,叶兆言是脚踏实地的实干家,他的小说写得实实在在并富于韵味。《关于厕所》、《风雨无乡》等小说谈不让非常引人注目,却也不乏分寸与厚度。孙甘露却不是这样,《信使之函》一度引人注目并公认具备一种先锋实力,但后面的《呼吸》却令人大失所望。吕新也是如此,前期一些中短篇小说都还饶有生气,一到《抚摸》也让人难以恭维。也许,这都是吃力不讨好的不识时务之举。实际上,并非每个作家都可以写长篇,而一个作家的重要与否也不在于仅用长篇来衡量。明了这点,我想许多作家仍可以成为很好的甚至是很重要的作家。

13、韩东、鲁羊、朱文、何顿、刁斗、述平、东西、李冯、张昱、鬼子、罗望子、邱华栋、丁天、张梅、荒水、赵凝……这是当前相当活跃的小说创作群体,无法否认他们的创作已经渐渐霸占了绝大多数的刊物空间。很遗憾的是,他们的才华与先锋群体之间存着相当大的差距,至少就目前而言,谈论他们似乎都为时过早。虽然他们之中已经很有几个发表了数目惊人的小说,但真正给人耳目一新甚至过目不忘的作品却寥寥无几。这些几乎清一色的都市聒噪者都是与先锋群体同龄的年轻人,因此他们望着同龄人的背影长大,而且也都迫切地希望从先锋作家的阴影中挣脱出来。于是小说也就染上了这种特殊的甚至无病史可查的不治之症。它具体表现在以下几个方面:第一,小说的叙述平庸无奇,它既不朴素也不具备什么探索的勇气,甚至很有几个连语言基本功都没过关。第二,故事几乎一律是都市的一次性消费,写完了拉倒与读完了扔掉几乎可以等同地形容他们绝大多数小说的意义。第三,创作数量惊人,很有几个都目标超过百万,而真正让读者看到并留下印象的却几乎没有。这说明了“迫不及待”对一个作家同样是致命的威胁。第四,实际上也就是上面现象的根源,即作家缺乏应有的良好素质。生活过于散漫,都市浪荡气息阻挠了小说深度空间的构建。自称甚至大言不惭地宣称反深度的小说家是相当可怜的,他除了制造文字垃圾(和一次性消费有点相似)之外还能做什么?而振振有词地把小说创作与一次性消费相比并由此认为挺满足或挺有意义的小说家则让人想到低智力或白痴。显然,一个是精神的创作,一个是物质的创作,两者截然有别;更何况,一次性消费除了制造更多的垃圾外(其实,真垃圾往往还有回收价值),它更重要的是满足了人们某种迫切的物质需要(要吃、喝方面的饥饿与便利及时间的充分利用等等),而我们的小说家给我们带来精神产品是否还具备这一些好处呢?产品没人“吃”还不说,甚至扔掉了也不会有人要,自然也就谈不让“回收”了。更可怕还在于,这些所谓精神一次性产品不“吃”还好,“吃”了让人倒胃口是常有的事。如此看来,这已经不仅是写作的危险而是小说家的危机了。
当然,如此苛求并无什么恶意或说针对什么人发泄不平,作为一种现象出现,它是应当引起每位写作者注意的。特别是在这一批被称为“新状态”或者“新生代”的年轻作家面前,如何确立写作的意义与自身的价值而不是放荡轻浮地面对自己的写作都是至关重要的。自然,单独谈论他们个人创作实绩的时间已经指日可待。从何顿的《我们像葵花》、李冯的《孔子》等长篇看来,他们都有充足的理由不去随意涂抹。而只要真正做到了这点,有心的评论家最终是不会忽略他们的。
写到这里,我想自己已经同样不明智了,说得难听些,简直与一只乌鸦差不多了。确实,做一个作家难,而做一个评论家同样困难。我们所做的一切都是相当有限的,自然也难免挂一漏万。也许,一切都还是时间问题,没有时间的抵达就不会有艺术的抵达。说到底,我们作家评论家都还需要长时间的补课。浮躁的心态常常会导致所有的溃败,假若说还有真正埋头苦干,厚积薄发,十年磨一剑的读书人存在,那我想,他们才是下世纪的主宰者与辉煌的创造者。我们需人的创作素质是,把过去的所有倒空,让自己轻装上阵去迎取一个新世纪的来临。如果有这种意识了,那么,我这篇文章也就达到了最基本的心愿,自然也就不是我和大家过不去了。
    1997年
 
一凡引用傅翔先生文章的目的是列出当代部分小说的名字,而对当前小说创作点评可能是仁者见仁,智者见智。
 
 

当前小说创作点评(一)

私人档案·三言两语   文 / 傅翔
 
——当前小说创作点评
 
 
中国当代的小说所缺乏的就是真诚的批评。本文是一篇很好的评论文章,全文对中国当代几乎全部的小说作家代表的作品进行了阅读,然后进行评论,对于爱好小说写作和阅读的人来说,有利于了解当代中国小说中存在的一些问题。
 
 
整整一年过去了,除了徒劳往返于京城与乡村的巨大缝隙之间,真的说不上做了什么。笔已经实实在在地被搁置了,正如那日益悬空的生存。既然不想做无病呻吟,那么就让它空着吧。心里这样想,于是也就这样做了。就这样做的时候,那心却似乎永远老去了。
恨不得永远停止笔的运动,但读了一年的书的思想老囚不住,总要跳出来。于是破例安慰起自己:就这一次吧,把想说的话三言两语吐出来,对,就是吐出来,吐干净了就走。

于是就想到了“真诚”。在我心目中,这两个字一直具备着许多人所无法体会的分量。在我看来,一个评论家若没有它,不管文章多么漂亮,他都是危险的。危险的写作与危险的批评是一样的,因为迷失了真诚,而有了它,一切的不足都值得原谅。这也就是我对批评的最基本态度与立场。
真诚在某点上意味着非常个人化的叙述,因为真诚本身就是个人。因此真诚的批评并不能代表太多人的观点,甚至有时仅仅就是自己的。但这并不妨碍批评的力量与价值,恰恰相反,真正有力量有价值的批评往往就是这种非常个人化的真诚的批评。因为只有思考才具备个人化,而没有思考的东西恰恰就是雷同的。雷同的见解读者没有义务看,读者需要的就是你在诉说。对,就是你,不是别人。

就这样,我看到了许许多多作家的诉说。与批评家相比,他们的诉说显得丰富而厚实。至少而言,他们相当一部分是独特的,甚至是别人所无法取代的。对于这样的作家,我愿意分别发表我的见解,就算是聒噪与论断,我也没有退路了。当然,既然是真诚的,自然免不了苛求,但却不是敌意的或不负责任的。
由此,就先点上史铁生、张承志、张炜这么三位作家。由于后面谈及的人多,不妨给他们分别安上个次序,先说明的是,它不代表先后之分。另外,诸位被点上的若有什么火气请到最后再发,免得我胆量太小就此打住而弄得此文有头没尾。因为说到底,当前批评的不争气恰恰就在于作家们太关心批评了,而这种关心又恰恰在于爱听好话而不愿听真诚的话。但愿我的苛求能得到在座诸位的谅解与真诚的理解,甚至是同情。

1、史铁生其实一直都挺想谈及这么一位令我敬佩的高大的身影。认真地读过他的几乎所有的文字,包括最后的《务虚笔记》。我看得出他的冥思的智慧以及那不息的生命力。我最佩服的就是他那不老的思想及旺盛的生命激情,而这一切又都与这位智者对残疾的正视及抗争息息相关。倘若没有残疾,自然也就不会有史铁生这个人。因此,残疾造就了作家史铁生,或者更确切地说,是史铁生让残疾放射出无尽的力量与光彩。
然而,致命的也正在此。史铁生经由残疾造就了文学的辉煌,但他却没能超越残疾本身。表面上看,史铁生通过冥想的智慧战胜了死亡,但在本质上却没能超越残疾本身,也就是说,作家本人太看重了残疾本身,以致于一直局限于以残疾人的身份去思考问题。在《我与地坛》等散文篇什中都可以看到,作家一直是以残疾人身份发问的,作家的冥想及动人的诉说也都是经由残疾这个载体的。虽然这本身并没有错,但却给人以一种印象:那就是作家一直对残疾耿耿于怀。这点在《务虚笔记》中特别明显。应该说,这在某种程度上是值得称赞的,因为残疾人并不是都能对人生及生命做出这样有力的发问,甚至更不能像史铁生一样对人生有相当深刻与透彻的参悟。但从苛求的角度而言,史铁生的作品就更像是写给残疾人看的,而对健全人则构不成足够的阅读欲望与阅读享受。好像这种人生思索是史铁生的专利,而不是所有人都应该具备的。因此许多读者读过了就过去了,根本未想到这种深入骨髓的思索应该成为自己警醒与参照的一面旗帜。至多也就不过是一句沉重的感叹而已。正是在这层面上说,史铁生是失败了。
在这意义上失败的史铁生自然不可能是什么大彻大悟的人生洞察者,实际上,史铁生展示给我们的远没有许多人想像的那样高不可攀。而他对人生的发问的追索也更多带着一丝痛苦与挣扎,也带着思考过程中所表现出来的矛盾与茫然。应该指出的是,残疾是远比死亡更难以超越的横亘在残疾人日常生活中的所是。它是如此确定与鲜明,以致于残疾人每时每刻都必须面对它。而死亡则往往与常人相同,而且它不常来打扰安宁生活中的每个人。正由此,《务虚笔记》便常处于残疾的打扰当中。它的冥思应当说是出色的,甚至是非凡的,而许多概念及观念的反思也都让人刻骨铭心。但说到底,《务虚笔记》只能是出色的甚至是非凡的笔记,但不是杰出的小说。在我看来,史铁生更出色的才华在于散文,而不是小说。他可以是一名非凡的思想家与重要的作家,但决不是伟大与杰出的小说家。

2、张承志与史铁生一样,张承志也几乎成了某种力量的象征。这位草原的歌手在某一天突然成了英雄主义的最杰出代表。英雄与好汉都是这个时代每个领域所缺乏的。当气功界有了气功大师,医学界有了神医,文坛也便迫切地呼唤着主宰它的英雄。当然,这英雄只能来自于精神。史铁生当之无愧地成了文坛上的张海迪之后,人们仍然渴望着作为健全人的某种隐蔽的强化的呼喊,于是张承志这位血性汉子便出现在最具男人气慨的西北大荒漠之间。这应当是某种巧合,而这种巧合则又来源于个体人桥的直觉。在这样一个时代精神日益被金钱物欲所吞噬的今天,人们都在心灵深处等待着,在痛苦的瞬间呼告安慰者的到来。
然而,张承志毕竟不是安慰者,说得确切些,他应当是一位幸福者,因为他找到了他的诉说,他的《心灵史》是他的信仰的奔流,但也是回民祖祖辈辈精神的传说。这种信仰的精神对于他及他们都是不倒的。在此,读者更重要的思考并不在于《心灵史》本身所体现的艺术魅力,而在于《心灵史》的价值及带给我们的信仰问题。《心灵史》之所以是一部重要的作品恰恰也就在这里。
可惜的是,张承志也许一时激动过分了。虽然并不怀疑《心灵史》中体现出来的真诚与作者激情澎湃的心情,但我想,走过了分水岭之后的张承志会是什么样子呢?实际上,走过了“荒芜英雄路”的张承志越来越令人失望了。首先,他忘记了《心灵史》中令他豪情万丈的充满幸福体验的信仰;其次,他忘记了西北大荒漠中给他带去高峰体验的“父老乡亲”;最后,他忘记了他“搁笔封刀”的诺言,却仍旧在写着远不如从前的散文。也许,这三条他都没忘,恰好相反,仍旧刻骨铭心。这并非没有可能,但我却觉得仍然令人失望。因为,倘若仍旧刻骨铭心,那只能证明一点,那就是张承志软弱了,至少是对原初的信仰不止一次地动摇过。说到底,信仰是朴素的,它不需要聒噪,也不需要浪漫,更不需要血性的英雄主义。它需要的是平静与寂寞,淡泊与明智,山川大海的浪者,他能够坚守如此平淡的生活吗,就像荒漠中的充满了盼望的那些父老乡亲?是的,张承志不能,于是他又往返于京城与祖国的每个角落,他天生就是个不安分的人。于是,我们更确切地看到了《心灵史》的某种欺骗性,它实际上更多的是一种魂的写作,即心思、情感、意志的进发;而不是充满灵的写作。

3、张炜但不论怎么说,张承志毕竟是一位精神的前行者,他提供给我们的更重要的话题与问题,而不是小说。与张承志不同,张炜则更多地用小说来说话,他试图通过一部接一部长篇的创作来表达他近乎乌托邦的理想。如果说《古船》给张炜矗立起一面大地的旗帜,那么《九月寓言》的出现则让读者看到了作家旗帜下那一排排士兵的奠基。这士兵实际上就是生于斯长于斯的厚实的土地的耕耘者,是祖祖辈辈的农民。应该说,这两部小说(特别是第一部)代表了张炜小说的成就,是张炜耐得住寂寞,与大地为伴的结晶。
遗憾的是,张炜并不是杰出的小说写手。他的成功实际上更源于他的勤奋。说到底,他写大地及与大地息息相生的农民的生活并不透入骨髓,他太富于诗情与浪漫,也太富于理想主义了。《九月寓言》正是在这层上稍逊于《古船》的。而这种乌托邦的倾向则由此舆论的烘托与渲染变得积极起来,如果说张炜开始只是一种理想主义的心灵倾向,那么到了《柏慧》则成了一种资本加以宣扬了。也许是由于和《家族》同时写的缘故,这部小说被陈墨认为是“矫情做作,形式杂乱,缺少气韵”(见《90年代长篇小说概观》,《百花洲》96年2期)。在我看来,《柏慧》自然是失败之作,它甚至在很大程度上成了作者理想代言的一个符号。它只是观念的产物,也由此失去了形象。
到此为止,张炜实际上也和张承志一样成了某种言论的中心代表。张炜也似乎挺满意于这种角色的扮演,于是也便写了不少散文与创作谈申诉自己的主张与理想。表面上看来,大家对这种亲近大地或土地的创作精神都表示热情的赞许,但实际上这里存在一个隐晦的拆衷问题。那就是反对是吃力不讨好的,而沉默则显得冷淡。冷淡对土地的感情,我想在中国的母语中是很难找到的,因而还不如热烈地赞同为好。这实际上又是一次中国人圆滑的展览。很明显,既然大伙儿都没办法做到久居乡村而对乡村一直问心有愧,那么在这么合宜的场合中发表对乡村及大地(当然也就是农民)的赞美的言论都是求之不得的。当然,也不能完全否认许多作家评论家真诚的对土地的感情,更确切地说是对乡村的感情。
而问题也就出在这边。作为一种理想,退守“葡萄园”及大地都无可非议,但硬是作为一种精神的倡导这本身就令人怀疑。估且不论张炜是否真的能“融入野地”,就是从现实而论,如今的乡村与大地又有多少诗意让我们的作家牵肠挂肚?而又有多少人能够真正耐得住寂寞独守家园?也许半年、一年、两年都可以,但若一辈子、十年、八年与大地相依相伴了,我想每位倡导者都会发疯。就说张炜,一个大名鼎鼎的小说家,能融入野地吗?不用说“融入”,就是“进入”都是一件令人钦佩的事情。而实际上呢?济南这省城的大都市总还是抹不断的,毕竟,他还得写小说。也许,这话说得土了些,但我想说明的是,乡村与土地不存在于理想主义的浪漫之中,面对它我们就必须面对血淋淋的严峻的事实。而融入野地也就必然得融入农村那残酷的现实里面,而不是乌托邦的宣言。作为一直呆在农村的我来说,我想这点意见张炜是能够体会的。我也期待张炜能够真正与大地为伍,写出能够“咬人”的小说来。

谈完了上述三位作家的精神立场,心中不免松了一口气。在我心目中,精神永远是一位作家得以站立于世的根基,不管这位作家的精神立场如何,只要有而且坚定,他都是值得人们推崇与敬仰的。当然,分析他们的原因也在于,精神是一种财富,假若能被大家所接受甚至被公众所激赏,那将更是一件人类的幸事。当前,人类面临的就是这种精神的普遍危机,作为人类灵魂的工作者的作家,他没有权力对这种状况漠然视之。正是在这意义上说,我首先选取了这么三位作家作为精神话题的载体,而我阐述的也更多在于精神而不在小说本身。实际上,这三位作家的意义也更多在于此。下面,我将把注意力放在小说身上,但由于篇幅所限,所谈也更多在于皮毛,就此还望读者谅解。

4、王蒙一接触到这两个字,笔就变得尴尬。原因自然是多方面的,而说到底,王蒙不是纯粹的小说家。这位部长级的作家老甩不开被谈论的命运已经是注定的,而且王蒙自己也似乎乐于制造这个中心位置。即便到了90年代,他不仅写小说,还写散文、随笔,也写评论,顺便还搞研究,真是五花八门,样样独到,令人不能不佩服他的旺盛的创作激情。应该说,王蒙的小说有其独到的风格,和他的随笔一样,他在小说中已经惯于冷嘲热讽,加上当过一回部长,语言充满霸气。《暗杀》、《恋爱的季节》、《失态的季节》的发表只能说明王蒙还“有的写”,而在艺术上则没什么突破。甚至在某种意义上说,它们都微露疲态与老态,仿佛是为了支撑面子才去完成似的,自然,也就没有《活动变人形》中的积极与坚决了。
这种失败可能来自于王蒙自视为中心的这种状态身上,而许多作家对王蒙的这种代言人身份也相当警惕。尽管他已经不是文化部长了,但这部长级的待遇还是令许多作家感到了一种距离。于是,王蒙也干脆独来独往,说话也干脆尖锐了许多,从而也引发了许多争论。自然,王蒙也就还在中心,自然也就还装出一副爽朗与豁达的样子。不可否认,王蒙的这种特立独行有他的苦衷。有一点是很值得注意的,那就是他的话很容易被别人所误解。实际上,王蒙并不想充当代言人的身分,他的许多用意深刻的小说及话语都是证明。但大伙儿都把他往那台上推,那他也就只好不辞了,但于内心却充满尴尬与苦楚。对于王蒙而言,这到底是幸运还是一种不幸,只有他自己才知道,但于小说而言,不幸则成定局。

5、莫言与《丰乳肥臀》提及这位并不称职或说徒有虚名的部队作家是一件令人愉快的事情。把莫言与《丰乳肥臀》放在一块是不恰当的,因为莫言本身就足够有魅力令大伙儿轮上一圈。之所以把他和这部长篇放在一起那意思相当明确,就是说这部长篇的意义也不在莫言之下。这样打比方令人可笑,但却可以看到这两者在我心目中的位置。
毋庸置疑,莫言是当前中国难得的相当出色的小说家之一。他是一位好作家。自然,作品也是好作品。实际上,莫言的小说素质与才华很大程度上归功于他的军旅生涯,而说他徒有虚名也仅仅是说他没写出什么军队题材的作品。然而,莫言却又是一位名副其实的“部队作家”,因为他的每一部作品都深深地浸透着军人那特有的气质,而且,莫言也只有在具备这种气质下写出来的作品才是优秀的。像《红高粱》的狂野与蓬勃,像《欢乐十三章》的大胆与暴露,无一不透出莫言那经由部队生涯磨练而成的特有才华。可以说,莫言小说一度才华横溢、激情四射、令人惊叹!可是,莫言一旦离开这种气质造就的良好的语言直觉,那么莫言的失败就已经注定了。除了前期大部分展示着鲜明的莫言感觉的小说外,后面的许多小说或多或少都令人失望。也许可以这样说,莫言天生就是只能写苦难写丑陋的,他的才华一放置在和平年代及和平事件上就默然失色。
这种解释同样适用于《丰乳肥臀》的批评。以我阅读的体会而言,上半部确实曾给了我极大的震动,而且一度以为它并不逊色于任何一部杰作,至少是让我看到了《霸王别姬》的影子。痛心的是,下半部越看越疲软,特别是当我看到“乳罩公司”出现之后,我心想莫言又完了。他决不能走入当下情境之中,这是莫言的禁区。特别是他那种气质及那种语言直觉绝对不能与俗艳的“金钱”或“公司”或“日常生活”放在一块。显然,莫言这部小说一开头就平庸得令人无法想像,至于结尾就更让人痛心疾首了,实际上,莫言在意识形态上犯了一个许多中国作家同样具有的严重错误,那就是任何长篇都想在时间跨度上制造一种横亘古今的气势,似乎唯有这样才能说明问题。而实际上,这种“今”往往破坏了前面所有良好的感觉,真是吃力不讨好、贪多没好处了。在这个问题上,我想倒不妨借鉴一下第五代导演的成功经验,特别是《霸王别姬》,同样反映了文革后的现实,但结局则非常深刻甚至重新掀起了一个震颤人心的高潮。
这明显是一个令人无法容忍的事实。是否也应该提醒一下所有的中国小说家,在写长篇时,千万别把自己当作壁虎或四脚蛇,仿佛那尾巴不是自己的。也许,真该如某些外国人所说的,中国作家应该重新学习如何写作了。
话说回来,《丰乳肥臀》由于出色地继承了莫言前期充满生命力的语言风格及故事风格而仍不失为一部出色的小说。虽然它在“文革”及结尾这段上显得平庸,甚至连开头也平庸,但由于前半部非凡的恢宏的历史画卷的描述,《丰乳肥臀》仍然有它的一席之地,它仍然是一部出色的好小说,也是代表了莫言成就的小说。正是由此,我产生了告别莫言的念头,至少,近几年他不会又让我刮目相看吧?

6、贾平凹曾经一度十分红火的贾平凹似乎显得有些沉默,虽然也还有下江南体验生活的热闹场景,但却明显务实起来了。也许,贾平凹本来就不该沦落得如此俗气,甚至也不该让“大师”这称号沾边,毕竟“大师”更适合街头书商小贩的叫卖以及给气功界的头头们作标签。可叹的是,原来那土里土气的乡村少年在某一天忽然成了街头小巷的畅销通俗小说作家。这显然是作家始料不及的。
实际上,我和许多曾经热烈崇拜贾平凹的读者一样,我也曾对《浮躁》式的小说充满了期待,更对“商州系列”倾心有加。应该说,贾平凹无论在人品或文品方面都曾经赢得许多读者一致的赞誉。那时,正如许多读者所说的:“贾平凹是我心中的贾平凹。”谁都不可能理解这样一位优秀的小说家竟廉价地利用了善良读者的一片痴情。在久经等待隆重推出的《废都》面前,读者也像马位多纳的球迷一样饱含失望甚至是愤怒地离开了他们的明星。这一损失是惨重的,负责的当然只能是明星本人。作家没有想到,他的地位实际上如此突出与重要,而关心他的读者又是如此众多。我想,假若作家早些清醒这样一个事实而不仅仅去征求同行们的廉价的褒奖的话,也许事情还不至于如此一败涂地。这点同样说明了很多问题,包括各行各业的明星,他们都存在一个面向大众的功课。因为地位和升高很容易使人脱离地面脱离大众,从而让自己悬空,于是也容易一叶障目导致惨败。贾平凹的悲剧无疑便如此,虽然他没有忘却他的商州,但自从进入都市以后,他的圈子便太多奶油气及文绉绉的小家子气。他甚至没意识到那么多读者对他的好感及崇拜。本来,作为一个“大师”,这点觉悟是起码应具备的,而这点对读者的义务也是不该忘却的。就像鲁迅一样,他的成功便相当大程度来源于这点义务及动力。没有面向大众也就没有鲁迅,这点是显然的。不管贾平凹在《废都》之后的态度如何,甚至认为说这种话的人是不怀好意,但我却认为,从真诚的角度上说,作家至少应该反省,毕竟,它不是一个两个人的草率的观点。
而回到《废都》本身,我个人认为它并无出色之处,至多它只能看作是一部重要的作品。而重要也在于它的独特以及对现实揭露反映身上。当然,作家没有把分寸把握好,不然它完全可以写得更出色。而从文本的角度上说,它却提供了足够的话题,至少是研究者应当重视的。
在象牙塔自筑的良好感觉一旦解体之后,贾平凹自觉地走向了《白夜》。这是一个可喜的转变。奇怪的是,评论家却失去了热情,甚至仍然处在《废都》的阴影中对它不屑一顾。作为一个优秀的评论家,这种情绪无疑是致命的。在我看来,《白夜》无论从语言还是从故事风格都与《废都》有相当程度的雷同,但在艺术成就上却不可同日而语。我的看法是,《白夜》比《废都》出色得多。由于人物身份的转变,《白夜》更显示出作家的艺术才华。虽然它仍旧显出象牙塔自筑的那种书生气而破坏了城市闲人那种特殊的生存境遇,但它至少关注并写出了一种现实的深刻存在。主人公那种找不到着落点的灵魂无依感是刻画得相当深刻的,甚至在某点上可以成为这个时代人类精神的生动写照。而且,从艺术上说,《白夜》也是出色的。不论是谋篇布局,还是语言与故事,或者鬼戏的穿插,都不造作而显得贴切适当。更可贵的,当下情境的生存图景一旦经由作家的笔便出现了一种距离的美,而不会像许多新写实作家一样那么平庸可怕。可以说,《白夜》是我所见的最为出色的一部描写当前城市生活及生存状况的长篇小说。当然,出色不等于杰出,而问题就在于作家没有深入城市生活的底层与内幕而过多停留于自筑的象牙塔之内(如给主人公及每位作家倾心的人物太多艺术细胞等)。假若能够深入些面向生存维艰的大众或者深入些刻画出金钱与权力及欲望腐蚀下的一张张丑恶嘴脸,那么,《白夜》注定是一部杰作,自然也就不可替代了。由于《白夜》,我想贾平凹仍旧是可以期待的,但愿他不会让我们失望。

7、《白鹿原》这是一部逸出了人们视野的成功之作,虽然它也谈不上伟大,但非凡是配得上的。这也就是单单提它的原因。不提及作者那是因为作品本身最能够说明问题。就像《红楼梦》广为人知而曹雪芹没几个人能够记住一样,《白鹿原》的作者是谁似乎已经并不重要。可以想像,没有《白鹿原》,文坛上是不会留下“陈忠实”这三个字的。而如今,陈忠实及《白鹿原》都注定要进入文学史了,剩下的只不过是分量轻重的问题。
无疑《白鹿原》是对农村反映得最为地道与扎实的作品。纵览全文都给人一种大气沉郁、凝重古朴、疏缓有致的感觉与回味。虽然有一部《百年孤独》挡去了不少光彩,但《白鹿原》仍然是独特的,也是极具中国特色的。它不仅写得地道好看,而且也极富回味的余地。在本世纪初年到本世纪中叶这段历史叙事中,小说都紧扣白鹿原这块土地,把所有大小背景及历史的更变都巧妙地揉进了白鹿两家的演变之中。从而也使人们在故事的讲述中同时看到了大历史及此背景下农民那丰富的生活细节。可贵的还有它透显出来的丰厚的传统文化背景及内涵。当然,鲜明的人物形象及雍容大度的叙事风格都使小说增强了感染力。看过了《白鹿原》,我便实在地看到了中国小说的希望。任何简单地否定《白鹿原》成就的结论显然是草率的,毕竟,没有对白鹿原这块关中大地的透彻把握及对中国农村历史现实的深刻领悟,是无论如何不可能有如此卓越的表现的。
自然,《白鹿原》有它的局限。它不仅回避了历史血淋淋的一面,而且也把农村生活简单化了许多,特别是后半部的处理有些一般化。实际上,过分重视了白鹿两家三代人的明争暗斗而把原本更丰富的农民生活真实置之不顾是一大不小的损失。这点也可以同时引申到人物太典型这一弊病上面。除了白鹿两家,数得上的人物不过七、八个,而且大都与白鹿两家有着密切关系。这对于一部四十万字左右的长篇而言是不合适的,也是不明智的。这点很能说明小说后半部一般化的问题。另外,看过了小说,我们找不到我们需要的意义或者契合我们需要的心灵表达。所有这些,也就是我定义这部小说并非杰出或伟大的缘由。但不管怎么说,《白鹿原》的出现意义重林,甚至给出了一个结论,那就是中国的巨著只能是农村的巨著,而作家也只能是农村的作家。(这句话我想不用解释,只要不从字面上理解就行了。)
8、李锐、张宇、刘心武、王安忆、韩少功把这么几个作家放在一块连我自己也想不清为什么,这更像一次权宜之计,仅仅是为了完成某种适当的言说。除了前两位之外,其他三人都已在文学史上留下了一笔。略微相同的是,他们都一直坚持创作并有新作面世,如李锐的《旧址》、张宇的《痛苦与抚摸》、刘心武的《风过耳》、王安忆的《纪实与虚构》、韩少功的《马桥词典》。它们都在一定程度上得到了读者的关注与赞许,而且也都调集了作家的知识与想像对作家钟爱的人文与历史进行了重组。因此可以说,它们都在一定意义上代表了作家的成就。
韩少功应该称得上是一位优秀的小说家。他值得称赞的地方是,他的小说一直都沿袭了极为浓郁的乡土人文的表达,而且在艺术上极富创新。读韩少功的小说,人们仿佛走进一个清新迷人的童话世界,往往被它那种神秘朦胧的面纱所笼罩。作为一次经验、知识、梦想与创新的集大成者,《马桥词典》自然非同一般。用词典的方式对一个地域的山川人文树碑立传,这本身就足以让人产生不尽的诱惑,而作为一种罕见的实验,它又足以让人感受到作家那非凡的想像力。在小说中,韩少功舒展了自己多方面的才华,并充分在发挥了自己潜在智力,在思想、兴趣爱好各方面都有相当出色的表现。可以说,《马桥词典》是唯一的,因而也是重要的。它必将带给人们许多有益的思考与话题。
相对于韩少功而言,王安忆并不逊色。这位坚强的女人似乎比任何一个男作家更富耐力。同年代的许多作家都偃旗息鼓了,她却一直在诉说着,仿佛流水一般没有尽头、1993年发表《纪实和虚构》讲述的是老而又老的故事,故事本身并不引人入胜,但也给读者留下了深刻的印象。毕竟,它代表了王安忆不息的创造力。之后的《伤心太平洋》、《我爱比尔》等小说实际无太大的成就,只是题材有些改变而已。也许,写这种小说对于王安忆是一种损失,至少对于智力与体力而言是这样。我更希望王安忆能够停下来,重新看看她的“三恋”,然后再决定怎么写,我想并不迟。
而对于刘心武来说,这问题同样存在。如果说《钟鼓楼》还算是一部重要的小说的话,那么《风过耳》至多就只能算优秀了。实际上,刘心武与王安忆一样,写得多了反而显不出水准了。当然,刘心武更具备一种创新的能力,后面的小说也都远比《班主任》意义重大,也称得上小有艺术成就,但至于影响,却不能与《班主任》同日而语。这不知道是时代的悲哀还是作家的悲哀?
也许,时代造就的英雄都很难再超越那个时代吧。而这些不识时务的耕耘者又让人想到些什么呢?
在这层意义上说,李锐和张宇也许会幸运些。他们都用厚重的作品说话,也都辛辛苦苦地埋头苦干着。《厚土》系列是沉重的,而《旧址》也是苦心追索才写成的,因而也写得更纯粹、更投入、更富于激情。在这点上,李锐是非常值得赞赏的。也许,作家都还没有意识到这一点,那就是写历史跟写现实一样同样需要激情,若非到了非写不可,历史是万万不能碰的。写历史甚至比写现实更需要优越的素质,这点在《百年孤独》及昆德拉的小说中都可以深深体会到。然而,也正是缺乏马尔克斯式的激情,几乎每个中国小说家的长篇历史梦想都不同程度破灭了。
《旧址》显然不缺乏激情,它缺乏的是对这古老历史的把握能力。不否认,任何时间的距离都是对作家素质的严峻考验。因此,《旧址》写得并不够充分与舒展,也缺乏对当下的关照与审视。
张宇的《痛苦与抚摸》自然也是一部厚重的小说。作为一个勤奋的探索者,张宇一直扎根于那块中原大地做有益的尝试。《痛苦与抚摸》自然也就是张宇于体验感受过程中挖掘出来古老传说,可惜的是,张宇并不是一个才华横溢的小说写手,因此这部小说提供给人的更多是一种平面的心理感觉,而非心灵深处的震撼。可取的是,它写出了历史文化的深层内蕴与复杂性,使人感觉到它分量不轻。
 

一凡引用傅翔先生文章的目的是列出当代某些小说的名字,而对当前小说创作点评可能是仁者见仁,智者见智。

Pstore

基本上还有一处错误,这个错误很特别,静态从代码上找不到错误,但具体运行时候,运行结果是对是错。

Pstore

共出现了14处错误(分布在10个文件中),只处理掉两处,好想打会儿传奇找找灵感,唉,太晚了,明天再继续吧.

Pstore

jsp部分基本实现完毕,就是在catalog中有两处BUG,一处是 public synchronized int getNumberOfItems(),返回类型应为int,但系统提示错误.另一处可能是类名的引用不对.明天调试测试.希望一切顺利.

趣谈“读书三境界”

重庆市铜梁县大庙中学:代安荣 

  我国现代著名的古典文论学者王国维在《人间词话》里说:“古之成大事业、大学问者,必经过三种之境界。”于是,王国维提出了他著名的读书三境界,也是我们大家所熟知的著名的读书三境界。


  王国维提出的读书三境界,即第一境界是“昨夜西风凋碧树,独上高楼,望尽天涯路。”(晏殊《蝶恋花》),比喻做学问之前,先要有思想准备,看到学海无边、知识无涯,从而激发有志青年奋斗并为之献身的精神和勇气,同时又感慨自己的学问之不足。第二境界是“衣带渐宽终不悔,为伊消得人憔悴。”(柳永《凤栖梧》),比喻开始读书做学问为有所收获,要刻苦攻读,不怕艰苦,为了追求自己心中的最高目标,孜孜不倦,  不怠,纵然是身心交瘁,殚精竭虑,“人比黄花瘦”也矢志不渝,在所不惜。第三境界是“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”(辛弃疾《青玉案• 无夕》),比喻经苦读钻研,一旦你历经艰辛,“九死而未悔”之后,突然有所发现有所得的时候,你就会体会到人生莫大的幸福和快乐,其乐融融。


  无独有偶,学者孙逊也提出了读书三境界 。不同得是,王国维的读书三境界是针对学者从治学的渴望、奋斗、到最后到达成,其间所受的异常的艰辛的真实写照;孙逊所提出的读书三境界则有所不同,他是针对读书的目的而进行的分类。


  孙逊的读书三境界,第一境界是:“采菊东篱下,悠然见南山。”(陶渊明《饮酒》),“辛台折杨

柳,春日路旁情。”(崔国辅《长乐少年行》),这是消遣性读书;第二境界是:“牧人驱犊返,猎马带禽归。”(王绩《野望》),“黄沙百战穿金甲,不破楼兰终不还。”(王昌龄《从军行》),这是功利性读书;第三境界是:“欲穷千里目,更上一层楼。”(王之涣《登鹳鹊楼》),“会当凌绝顶,一览众山小。”(杜甫《望岳》),这是积累性读书。


  这里,王国维和孙逊所采用的都是集句的方法,即集前人诗句或者词句,又主要指集律诗和词中佳句,而自由体诗句恐怕由于“太”自由和“年轻”的原因,则很少见到集之而成诗。集句诗是诗之一体,最早见于西晋傅咸的《七经诗》,文天祥的《集杜诗》二百篇最为出名。王安石后来采用集句作词,形成集句一体。


王国维对读书三种境界的论述,十分精妙。他所引用的三句词,本来是描写爱情的,但王国维通过集句方法进行重组,从而十分精辟、形象的揭示了立业、求知的客观规律,即由浅入深、由低到高、由小到大、由窄到宽、由必然到自由的艰苦跋涉,“曲径通幽”的过程,充满了“山重水复”与“柳暗花明”的交错更替的美好里程。王国维借用他人的诗句,通过自己的重新思维、组合,从而把作者原有诗句的意境进行无限延伸,使其意境在重组中得到升华,从而激励着许多有志青年在漫长的人生道路上不懈追求!