灿烂的阳光,苦涩的生活,认真做,你能行!

发布新日志

  • linux系统中top指令的详细使用方法以及一些符号的含义 (转)

    2011-07-11 16:29:37

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows任务管理器。下面详细介绍它的使用方法。

    top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
    Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
    Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
    Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
    Swap: 192772k total, 0k used, 192772k free, 123988k cached

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
    14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
    1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
    2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
    3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

    统计信息区
    前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

    01:06:48 当前时间
    up 1:22 系统运行时间,格式为时:分
    1 user 当前登录用户数
    load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
    三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

    第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

    Tasks: 29 total 进程总数
    1 running 正在运行的进程数
    28 sleeping 睡眠的进程数
    0 stopped 停止的进程数
    0 zombie 僵尸进程数
    Cpu(s): 0.3% us 用户空间占用CPU百分比
    1.0% sy 内核空间占用CPU百分比
    0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
    98.7% id 空闲CPU百分比
    0.0% wa 等待输入输出的CPU时间百分比
    0.0% hi
    0.0% si

    最后两行为内存信息。内容如下:

    Mem: 191272k total 物理内存总量
    173656k used 使用的物理内存总量
    17616k free 空闲内存总量
    22052k buffers 用作内核缓存的内存量
    Swap: 192772k total 交换区总量
    0k used 使用的交换区总量
    192772k free 空闲交换区总量
    123988k cached 缓冲的交换区总量。
    内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
    该数值即为这些内容已存在于内存中的交换区的大小。
    相应的内存再次被换出时可不必再对交换区写入。

    进程信息区
    统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

    序号 列名 含义
    a PID 进程id
    b PPID 父进程id
    c RUSER Real user name
    d UID 进程所有者的用户id
    e USER 进程所有者的用户名
    f GROUP 进程所有者的组名
    g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
    h PR 优先级
    i NI nice值。负值表示高优先级,正值表示低优先级
    j P 最后使用的CPU,仅在多CPU环境下有意义
    k %CPU 上次更新到现在的CPU时间占用百分比
    l TIME 进程使用的CPU时间总计,单位秒
    m TIME+ 进程使用的CPU时间总计,单位1/100秒
    n %MEM 进程使用的物理内存百分比
    o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
    q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    r CODE 可执行代码占用的物理内存大小,单位kb
    s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    t SHR 共享内存大小,单位kb
    u nFLT 页面错误次数
    v nDRT 最后一次写入到现在,被修改过的页面数。
    w S 进程状态。
    D=不可中断的睡眠状态
    R=运行
    S=睡眠
    T=跟踪/停止
    Z=僵尸进程
    x COMMAND 命令名/命令行
    y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
    z Flags 任务标志,参考 sched.h

    默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

    更改显示内容
    通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。

    按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。

    按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

    命令使用

    1. 工具(命令)名称
    top
    2.工具(命令)作用
    显 示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间 对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
    3.环境设置
    在Linux下使用。
    4.使用方法
    4.1使用格式
    top [-] [d] [p] [q] [c] [C] [S] [s] [n]
    4.2参数说明
    d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
    p 通过指定监控进程ID来仅仅监控某个进程的状态。
    q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
    S 指定累计模式
    s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
    i 使top不显示任何闲置或者僵死进程。
    c 显示整个命令行而不只是显示命令名
    4.3其他
      下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
      Ctrl+L 擦除并且重写屏幕。
      h或者? 显示帮助画面,给出一些简短的命令总结说明。
      k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
      i 忽略闲置和僵死进程。这是一个开关式命令。
      q 退出程序。
      r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
      S 切换到累计模式。
      s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
      f或者F 从当前显示中添加或者删除项目。
      o或者O 改变显示项目的顺序。
      l 切换显示平均负载和启动时间信息。
      m 切换显示内存信息。
      t 切换显示进程和CPU状态信息。
      c 切换显示命令名称和完整命令行。
      M 根据驻留内存大小进行排序。
      P 根据CPU使用百分比大小进行排序。
      T 根据时间/累计时间进行排序。
    W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

  • 主机资源监控工具NMON介绍及使用(转)

    2011-07-11 14:54:08

    在性能测试过程中,对主机资源的监控有着重要意义。一方面,在测试过程中可以判断加压是否成功、系统是否能承受当前压力,确保系统安全;另一方面,测试结束后,通过对监控数据的整理,可以为性能分析、发现问题、寻找瓶颈提供数据支持。本文将结合工作中的实际情况,介绍Unix、Linux操作系统中常用的资源监控工具NMON及使用方法。

    一、NMON介绍
         nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具, nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中。nmon工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。并且,nmon运行不会占用过多的系统资源,通常情况下CPU利用率不会超过2%。
         针对不同的操作系统版本,nmon有相应版本的程序,需要注意的是该文件需要执行授权操作方可正常运行。

    二、NMON使用方法
         实际工作中,nmon有三种常用的使用模式,分别是实时监控、后台监控和定期监控模式。下面分别加以介绍。
         1、实时监控:在完成配置后,只需要“#./nmon”命令即可运行程序,通过一些快捷键调取关心的系统资源指标进行显示,如按键“C”可以查看CPU相关信息;按键“D”可以查看磁盘信息;按键“T”可以查看系统的进程信息;“M”对应内存、“N”对应网络等等,完整的快捷键对应内容可以通过帮助(按键“H”)查看,可以显示Linux系统CPU、内存、进程信息,包括了CPU的用户、系统、等待和空闲状态值,可用内存、缓存大小以及进程的CPU消耗等详细指标。该种方式显示信息实时性强,能够及时掌握系统承受压力下的运行情况,每颗CPU利用率是多少、内存使用多少、网络流量多少、磁盘读写……这些数据实时刷新,一目了然。但是如果我们希望将一段时间的资源情况记录下来,以备后续的分析工作,则需要以另一种方式使用nmon。

         2、后台监控:为了配合性能测试,我们往往需要将一个时间段内系统资源消耗情况记录下来,这时可以使用命令:./nmon -f -s 10      -c 360。说明:
         -f :按标准格式输出文件名称:<hostname>_YYYYMMDD_HHMM.nmon
         -s :每隔n秒抽样一次,这里为10秒
         -c :取出多少个抽样数量,这里为360,即监控=10*360/3600=1小时
         该命令启动后,会在nmon所在目录下生成监控文件,并持续写入资源数据,直至360个监控点收集完成——即监控1小时,这些操作均自动完成,无需手工干预,测试人员可以继续完成其他操作。如果想停止该监控,需要通过“#ps –ef|grep nmon”查询进程号,然后杀掉该进程以停止监控。

         3、定期监控:除配合性能测试的短期监控,我们也可以实现对系统的定期监控,作为运营维护阶段的参考。定期监控可通过“#crontab -e”命令实现,在最后一行添加“0 8 * * 1,2,3,4,5 /nmon -f -s 30 -c 1200”,表示:周一到周五,从早上08点开始,监控10个小时(到18:00整为止)。

    三、NMON监控结果分析
         通过后台监控和定期监控,我们可以得到扩展名为nmon的监控文件,这些文件记录着系统资源的数据,需要配合分析工具进行解读。nmon analyser.xls可以将.nmon文件转化为Excel文件,并生成统计图,直观显示系统资源情况。
          在测试过程中,我们往往需要更加详细的信息以分析系统性能情况,如果认为磁盘IO偏高,我们需要进一步获取磁盘的详细信息加以分析,在nmon结果中打开“DISK_SUMM”标签页结合系统实际设置,可以进一步确定造成问题的原因,如系统日志级别过低等等。NMON能够提供CPU、内存、硬盘、网络等各方面的信息,对于我们的分析工作能够提供很好的数据支持。
         另外,我们可以通过一些输出参数的调整以得到偏重不同角度、或不同形式的统计结果,其中比较常用的“Intervals”参数,该参数定义了原始.nmon文件的取值范围,即统计内容取自原始数据的哪部分。因为原始数据是多个采样点的集合,通过设置“Intervals”的开始、结束值。(如开始为1,结束为60,根据前文的设置,可知这是截取了前十分钟的数据进行统计展示)

         总结:本文介绍了适合在Unix、Linux操作系统中使用的主机资源监控工具NMON,并简单说明了其使用方法和常用监控方式。在实际项目中,为了建立完善的监控体系,还可能需要与其他工具、方法配合使用,以达到我们的测试目标。

  • Nmon 工具使用说明

    2011-07-07 14:51:20

    本文来自:http://sunligang-chenghaijie.blogspot.com/2009/01/nmon.html

    Nmon 工具是 IBM 提供的免费的监控 AIX 系统与 Linux 系统资源的工具。该工具可将服务器的系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工具进行数据的统计分析,非常利用 UNIX 或者 Linux 系统的性能数据分析。Nmon 工具使用起来非常简单,下面将分步骤介绍如何使用该工具。

    一、安装 nmon
    首先我们在 IBM 的官方网站上下载 nmon 工具,下载时需注意要下载对应的系统版本。我们这里以 debian31 为例,下载的是 nmon_x86_11f.zip 版本,该版本支持 ubuntu。下载后解压,改名为 nmon 并上传到 Linux 中。在 Linux 的终端中输入 ls 可以看到:
    slg@slg-desktop:~/桌面/GVS项目/nmon$ ls
    nmon_x86_debian31 nmon_x86_knoppix5 nmon_x86_rhel3 nmon_x86_sles10
    nmon_x86_fedora5 nmon_x86_rhel2 nmon_x86_rhel4 nmon_x86_sles9

    为了能够正常的使用 nmon 工具,我们需要修改相关文件的权限。我们这里所使用的 Linux 系统是 ubuntu,所以,我们仅修改”nmon_x86_debian31”文件
    的权限即可。为了方便,直接改为 777,命令如下:chmod 777 nmon_x86_debian31修改完成后,我们就完成了 nmon 工具的安装,接下来介绍一下该工具的使用。

    二、使用 nmon
    nmon 工具使用非常简单。首先我们启动该工具,在 nmon 目录下,输入 ./nmon_x86_debian31 打开界面,根据提示信息即可进行操作,
    ┌nmon─11f─────────────────────Hostname=slg-desktop──Refresh= 2secs ───10:12.08──────────────────────────────────────────────┐
    │ │
    │ ------------------------------ For help type H or ... │
    │ # # # # #### # # nmon -? - hint │
    │ ## # ## ## # # ## # nmon -h - full │
    │ # # # # ## # # # # # # │
    │ # # # # # # # # # # To start the same way every time │
    │ # ## # # # # # ## set the NMON ksh variable │
    │ # # # # #### # # │
    │ ------------------------------ │
    │ │
    │ Use these keys to toggle statistics on/off: │
    │ c = CPU l = CPU Long-term - = Faster screen updates │
    │ m = Memory j = Filesystems + = Slower screen updates │
    │ d = Disks n = Network V = Virtual Memory │
    │ r = Resource N = NFS v = Verbose hints │
    │ k = kernel t = Top-processes . = only busy disks/procs │
    │ h = more options q = Quit │
    │───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│

    如输入c显示cpu信息;
    CPU Utilisation ──────────────────────────────────────────────────────────────────────────────────────────────────────────│
    │ +-------------------------------------------------+ │
    │CPU User% Sys% Wait% Idle|0 |25 |50 |75 100| │
    │ | Please wait gathering data │
    │ +-------------------------------------------------+ │
    │──────────────────────────────────────────────────────────────────────────────────────────


    三、输出文件


    上面所讲的只是在服务器监控,我们真正需要的是如何收集这些数据并处理分析它们。nmon 提供了一个 nmon_analyser 的分析工具,可利用 excel 进行统计结果的分析。在测试的时候,我们可使用下列命令进行数据的输出:
    ./ nmon_x86_debian31 –fT –s 5 –c 5
    上面命令的含义是,-f 输出文件,-T 输出最耗资源的进程,-s 收集数据的时间间隔,-c 收集次数。比如,我们测试场景需要执行 20 分钟,那么我们需要每隔 10 秒监控 Linux系统资源就可以写成:
    ./ nmon_x86_debian31 –fT –s 10 –c 120
    120 是次数,也就是 20 分钟/10 秒=120 次。完成后会在当前目录生成一个.nmon 的文
    件。如图:
    slg@slg-desktop:~/桌面/GVS项目/nmon$ ls
    nmon_x86_debian31 nmon_x86_knoppix5 nmon_x86_rhel3 nmon_x86_sles10 slg-desktop_090113_1024.nmon
    nmon_x86_fedora5 nmon_x86_rhel2 nmon_x86_rhel4 nmon_x86_sles9
    nmon 输出文件的命名方式是服务器名_日期时间.nmon,我们在测试结束后,可到相应的目录下提取这些文件。


    四、分析数据

    打开nmon analyser v334
    设置宏的安全级别是低 ,之后点击 Analyser NMON data 按钮 输入文件 保存成excel格式即可。

  • nmon安装与使用说明

    2011-07-07 14:27:14

    1. 上传nmon4aix_11e.tar.gz里的文件到aix服务器上

    把源文件nmon4aix_11e.tar.gz解压到本地D/

    ftp://192.168.1.10


    cd /home

    mkdir nmon

    /*FTP服务器上根目录下建立nmon目录。*/

    Bin

    /*采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。*/

    lcd

    /*定位本地默认文件夹,在前面我事先在D:盘创建的。*/

    !dir

    /*查看本地文件夹中的文件及目录*/

    put nmon

    put nmon_aix51

    put nmon_aix52ml2

    put nmon_aix52ml5

    put nmon_aix53

    /*将当前目录(d:\中的文件上传到FTP服务器默认目录。可以用"mput *.*"将所有文件上传到FTP服务器上。*/

    2.修改文件权限使其可以执行

    chmod 755 nmon

    chmod 755 nmon_aix51

    chmod 755 nmon_aix52ml2

    chmod 755 nmon_aix52ml5

    chmod 755 nmon_aix53

    3.执行nmon

       设置终端类型

    export TERM=vt220

    进入/home/nmon目录

    cd /home/nmon

    运行监控程序

    ./nmon

    按空格

    然后按“c”键

    然后按“m”键


  • windows下openbravoERP的安装

    2011-07-03 20:46:23

    系统:       windows xp
    所需软件: 1.openbravoERP-2.35-windows-installer
                    2.oracleXE
                    3.apache-tomcat-6.0.14
                    4.jdk-6u2-windows-i586-p
                    5.apache-ant-1.7.0-bin
    安装步骤:
                   1.先安装jdk-6u2-windows-i586-p(默认路径)
                   2.安装apache-tomcat-6.0.14(默认路径)端口设置为8081
                   3.安装oracleXE 端口8080
                   4.安装apache-ant-1.7.0-bin直接以文件夹存放
                   5.系统设置:
                          我的电脑——属性——高级——环境变量——用户变量(JAVA_HOME=java中jdk文件夹的路径;ANT_HOME=ant文件夹的路 径;CATALINA_HOME=tomcat文件夹的路径;CATALINA_OPTS=-server -Xms=512M -Xms=512M)——系统变量(classpath=.;java中jdk文件夹中lib文件夹中tools.jar;java中jdk文件夹中 lib文件夹中dt.jar)(path=java中jdk文件夹中的bin目录;ant中的bin目录)
                  6.设置完毕后重启电脑
    注:以上安装时使用默认路径是为了便于安装,路径可以更改。
                  7.双击openbravoERP-2.35-windows-installer安装
                  8.安装时编译时间有点长需要等待安装完毕后初始用户名:Openbravo  初始密码:openbravo

  • vim使用技巧

    2009-09-17 11:19:36

    ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      2 ;:文档来源: http://www.rayninfo.co.uk/vimtips.html                              
      3 ;:翻译参考: 没有记,请原作者见谅                                                
      4 ;:文档日期: 2006-10-13 11:19:04                                                 
      5 ;:更新记录:                                                                     
      6 ;:作  者: li3                                                                 
      7 ;:生成工具: 2Html.vim                                                           
      8 ;:blog.asp?name=li3                                         
      9 ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     10
     11 ;:--------------------------------------------------------------------------------
     12 ;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
     13 ;:想这样,请编辑$VIM\mswin.vim
     14 ;:--------------------------------------------------------------------------------
     15 /joe/e                              ;: 设置光标到匹配"joe"的末尾
     16 /joe/e+1                            ;: 设置光标到匹配"joe"的末尾再后移一位
     17 /joe/s-2                            ;: 设置光标到匹配"joe“的开头再前移两位
     18 /joe/+3                             ;: 搜索“joe” 找到后将光标下移3行
     19 /^joe.*fred.*bill/                  ;: 匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
     20 /^[A-J]\+/                          ;: 搜索行首非'A'到’J‘重复一次以上的行
     21 /begin\_.*end                       ;: 多行匹配
     22 /fred\_s*joe/i                      ;: 多行搜索可以是任何空白字符包括\n,\t等等
     23 /fred\|joe                          ;: 搜索fred或者joe
     24 /.*fred\&.*joe                      ;: 搜索同时包括fred跟joe的行
     25 /\<fred\>/i                         ;: 搜索独立的单词fred
     26 /\<\d\d\d\d\>                       ;: 搜索独立的4位数字
     27 /\D\d\d\d\d\D                       ;: 搜索恰好4位的数字
     28 /\<\d\{4}\>                         ;: 同/\<\d\d\d\d\>
     29 /\([^0-9]\|^\)%.*%                  ;: 查找以非0~9数字或在行首的%%所包括的内容
     30 ;:" 查找空行
     31 /^\n\{3}                            ;: 匹配三连续的空行
     32 ;:" 使用正则表达式组查找
     33 /\(fred\).*\(joe\).*\2.*\1
     34 ;:" 正则表达式重复
     35 /^\([^,]*,\)\{8}
     36 ;:" visual 下搜索
     37 :vmap // y/<C-R>"<CR>               ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
     38 :vmap <silent> // y/<C-R>=escape(@",'\\/.*$^~[]')<CR><CR>          ;: 包括空白字符
     39 ;:" \zs 和 \ze 匹配原 :h /\zs
     40 /<\zs[^>]*\ze>                      ;: 匹配<与>所包含的内容
     41 ;:" 零宽度匹配 :h /\@=
     42 /<\@<=[^>]*>\@=                     ;: 查找<与>所包含的内容
     43 /<\@<=\_[^>]*>\@=                   ;: 多行匹配<与>所包含的内容
     44 ;:" 多行查找 \_ 的意思是包括换行符
     45 /<!--\_p\{-}-->                     ;: 匹配<与>所包含的所有内容
     46 /fred\_s*joe/i                      ;: 匹配fred开始到joe,之间一定得是空白字符
     47 /bugs\(\_.\)*bunny                  ;: 匹配所有bugs到bunny的字符串
     48 :h \_                               ;: help
     49 ;:" 查找函数声明,nmap为normal模式下的键盘映射
     50 :nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
     51 ;:" 查找多个文件
     52 :bufdo /searchstr/                  ;: 在多个文件缓冲区里执行查找
     53 ;:" 更好的多文件查找定位方法
     54 :bufdo %s/searchstr/&/gic           ;: 在多个文件缓冲区里查找,按下n停止
     55 ;:" 怎样不使用 / 来查找网址
     56 ?http://www.vim.org/                ;: 向后查找
     57 ;:" 查找指定字符以外的字符串
     58 /\c\v([^aeiou]&\a){4}               ;: 查找4个辅音字母
     59 ;:-----------------------------------------------------------------------------
     60 ;:#替换
     61 :%s/fred/joe/igc                    ;: 普通替换命令
     62 :%s/\r//g                           ;: 删除 DOS 的换行符 ^M
     63 ;:" 你的文本文件是否乱七八糟的排成一行?使用如下命令
     64 :%s/\r/\r/g                         ;: 转换 DOS 回车符 ^M 为真正的回车符
     65 :%s= *$==                           ;: 删除行尾空白
     66 :%s= \+$==                          ;: 同上
     67 :%s#\s*\r\?$##                      ;: 删除尾部空白和dos换行符
     68 :%s#\s*\r*$##                       ;: 同上
     69 ;:" 删除空行
     70 :%s/^\n\{3}//                       ;: 删除连续3个空行
     71 :%s/^\n\+/\r/                       ;: 压缩空行,多个替换为一个
     72 :%s#<[^>]\+>##g                      ;: 删除html的tag部分
     73 :%s#<\_.\{-1,}>##g                  ;: 多行删除 html 的tags (非贪婪方式)
     74 ;:" IF YOU ONLY WANT TO KNOW ONE THING
     75 :'a,'bg/fred/s/dick/joe/igc         ;: 非常有用
     76                                     ;# 译释:''a,''b指定一个范围:mark a ~ mark b
     77                                     ;# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
     78                                     ;# 看后面,g//是一个全局显示命令
     79                                     ;# s/dick/joe/igc则对于这些满足条件的行进行替换
     80 ;:" 复制列
     81 :%s= [^ ]\+$=&&=                    ;: 复制最后一列
     82 :%s= \f\+$=&&=                      ;: 复制最后一列
     83 :%s= \S\+$=&&                       ;: 复制最后一列
     84 ;:" 记忆(反向引用)
     85 :s/\(.*\):\(.*\)/\2: \1/            ;: 将两个字段颠倒
     86 :%s/^\(.*\)\n\1$/\1/                ;: 删除重复行
     87 ;:" 非贪婪匹配 \{-}
     88 :%s/^.\{-}pdf/new.pdf/              ;: 删除第一个pdf
     89 ;:" use of optional atom \?
     90 :%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc   ;: lowercase with optional leading characters
     91 ;:" 跨越尽量多的行
     92 :%s/<!--\_.\{-}-->//                ;: 删除多行注释
     93 :help /\{-}                         ;: 查看非贪婪匹配的更多帮助
     94 ;:" 使用寄存器替换
     95 :s/fred/<c-r>a/g                    ;: 将fred替换为寄存器a里的内容 #<c-r>为按下Ctrl与r
     96 :s/fred/<c-r>asome_text<c-r>s/g
     97 :s/fred/\=@a/g                      ;: 比较好的办法,不显示替换内容
     98 ;:" 在一行里写多种命令
     99 :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d| %s/gif/jpg/
    100 :%s/a/but/gie|:update|:next         ;: 当使用 @: 来重复
    101 ;:" 或运算
    102 :%s/suck\|buck/loopy/gc             ;: 替换suck或者buck(这里|不是管道)
    103 ;:" 调用vim函数
    104 :s/__date__/\=strftime("%c")/       ;: 将__date__替换成当前日期,使用strftime函数
    105 ;:" 处理列,替换所有在第三列中的str1
    106 :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
    107 ;:" 交换第一列跟第四列
    108 :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
    109 ;:" 过滤form中的内容放在寄存器里
    110 :redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
    111 :nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR>
    112 ;:" 两位以上的数字减三(带进位。这个命令挺有趣)
    113 :%s/\d\+/\=(submatch(0)-3)/
    114 ;:" 包含loc或者functions的行中的数字加6
    115 :g/loc\|function/s/\d/\=submatch(0)+6/
    116 ;:" 比上面更好的方法
    117 :%s#txtdev\zs\d#\=submatch(0)+1#g
    118 :h /\zs                            ;查看帮助
    119 ;:" 前缀为gg的数字加6
    120 :%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
    121 :h zero-width                      ;查看帮助
    122 ;:" 替换一个特定字符串为数字
    123 :let i=10 | 'a,'bg/Abc/s/yy/\=i/ |let i=i+1 ;# 将yy转换成10,11,12等等
    124 ;:" 比上面的更精确
    125 :let i=10 | 'a,'bg/Abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # 将xxyy 转换成 xx11,xx12,xx13
    126 ;:" 将查找内容放入内存,然后用\zs进行简单替换
    127 :%s/"\([^.]\+\).*\zsxx/\1/
    128 ;:" 将xx替换为此行内容
    129 :nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#
    130 ;:" 将Vis选中的内容用<>括起来
    131 :vmap <leader>z :<C-U>%s/\<<c-r>*\>/
    132 ;:-----------------------------------------------------------------------------
    133 ;:" 下面举一些在替换中使用替换的例子
    134 ;:" 多种分符可以被用在替换中
    135 :%s,\(all/.*\)\@<=/,_,g             ;: 用 _ 替换 "all/"之后的 /  
    136 ;:" 同样的功能
    137 :s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#
    138 :s#all/#&^M#|s#/#_#g|-j!            ;" 查找断行,并合并为一行
    139 ;:" 在替换命令中使用替换
    140 :%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
    141 ;:-----------------------------------------------------------------------------
    142 ;:" 全局显示命令
    143 :g/gladiolli/#                      ;: 查找并显示匹配的行号
    144 :g/fred.*joe.*dick/                 ;: 显示所有含有 fred,joe & dick的行
    145 :g/\<fred\>/                        ;: 显示单一单词fred
    146 :g/^\s*$/d                          ;: 删除所有空行
    147 :g!/^dd/d                           ;: 删除不含字符串''dd''的行
    148 :v/^dd/d                            ;: 同上
    149 :g/fred/,/joe/d                     ;: 删除所有的从fred到joe
    150 :g/-------/.-10,.d                  ;: 以-------为标记删除之前的10行
    151 :g/{/ ,/}/- s/\n\+/\r/g             ;: 删除 {...}之间的空行
    152 :v/\S/d                             ;: 删除空行
    153 :v/./,/./-j                         ;: 压缩空行
    154 :g/^$/,/./-j                        ;: 同上
    155 :g/<input\|<form/p                  ;: 或运算
    156 :g/^/put_                           ;: 双倍行宽 (pu = put)
    157 :g/^/m0                             ;: 颠倒文件 (m = move)
    158 :'a,'bg/^/m'b                       ;: 颠倒选中的 a 到 b
    159 :g/^/t.                             ;: 重复行
    160 :g/fred/t$                          ;: 拷贝行从fred到结尾
    161 :g/stage/t'a                        ;: 拷贝行从stage 到 marker a(a为标记的位置)
    162 :g/\(^I[^^I]*\)\{80}/d              ;: 删除最少包含80个tab的行
    163 ;:" 隔行替换
    164 :g/^/ if line('.')%2|s/^/zz /
    165 ;:" 查找标记a与b 间所有包含 "somestr"
    166 ;:" 复制所有"otherstr"后的行
    167 :'a,'bg/somestr/co/otherstr/        ;: co(py) or mo(ve)
    168 :'a,'bg/str1/s/str1/&&&/|mo/str2/   ;" 范围同上,进行替换
    169 :%norm jdd                          ;: 隔行删除
    170 ;:" 增加数字 (键入 <c-a>)            ;#在MS-Windows中<c-a>已经被定义为全选
    171 :.,$g/^\d/exe "norm! \<c-a>"        ;: 增加从当前行首到结尾的数字
    172 :'a,'bg/\d\+/norm! ^A               ;: 增加数字
    173 ;:" 保存全局命令的结果 (注意必须使用添加模式) 你需要使用 qaq 清空寄存器a.
    174 ;:"save results to a register/paste buffer 存储结果到 寄存器/粘贴 到 a
    175 :g/fred/y A                         ;: 添加配备行到寄存器到 a
    176 :g/fred/y A | :let @*=@a            ;: 放入复制缓冲区
    177 :let @a=''|g/Barratt/y A |:let @*=@a
    178 :'a,'b g/^Error/ . w >> errors.txt  ;" 将查找内容放入一个文件 (文件必须存在)
    179 ;:" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
    180 :g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
    181 ;:" 用文件中的内容替换字符串,-d 表示删除“标记”
    182 :g/^MARK$/r tmp.ex | -d
    183 ;:" 精致的显示方法
    184 :g/<pattern>/z#.5                   ;: 带行号显示  
    185 :g/<pattern>/z#.5|echo "==========" ;: 漂亮的显示  
    186 ;:" 用 g// 执行正常命令
    187 :g/|/norm 2f|r*                     ;: 替换第二个|为*
    188 ;:" 在新窗口中显示查找结果
    189 :nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
    190 ;:-----------------------------------------------------------------------------
    191 ;:" 全局命令和替换命令联姻 (强大的编辑能力)
    192 :'a,'bg/fred/s/joe/susan/gic        ;: 可以使用反向引用来匹配
    193 :g/fred/,/joe/s/fred/joe/gic        ;: 非行模式
    194 ;:-----------------------------------------------------------------------------
    195 ;:" 先找fred,然后找joe
    196 :/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
    197 ;:-----------------------------------------------------------------------------
    198 ;:" create a new file for each line offile eg 1.txt,2.txt,3,txt etc
    199 ;:" 将每一行的内容存成一个文件,文件名为 行号.txt  如 1.txt,2.txt 等
    200 :g/^/exe ".w ".line(".").".txt"
    201 ;:-----------------------------------------------------------------------------
    202 ;:" 绝对精华
    203 ;:-----------------------------------------------------------------------------
    204 * # g* g#                           ;: 查找当前光标下的单词(单个单词) (<cword>) (向前/向后)
    205 %                                   ;: 匹配括号 {}[]()
    206 .                                   ;: 重复上次操作
    207 @:                                  ;: 重复上次的命令
    208 matchit.vim                         ;: 适%能匹配 <script> <?php等标记
    209 <C-N><C-P>                          ;: 插入模式下自动完成填词
    210 <C-X><C-L>                          ;: 行自动完成(超级有用)
    211 /<C-R><C-W>                         ;: 把单个<cword>单词放入搜索或者命令行
    212 /<C-R><C-A>                         ;: 把字符串中有的单词<CWORD>放入搜索或者命令行
    213 :set ignorecase                     ;: 忽略大小写
    214 :syntax on                          ;: 打开语法高亮 Perl,HTML,PHP 等等
    215 :h regexp<C-D>                      ;: 按ctrl+d得到包含regexp的列表
    216                                     ;:  (按tab自动不齐)
    217 ;:-----------------------------------------------------------------------------
    218 ;:" 简单编辑更新 _vimrc文件
    219 :nmap ,s :source $VIM/_vimrc        ;:普通模式下的键盘映射 ,s映射成加载用户目录下的_vimrc文件
    220 :nmap ,v :e $VIM/_vimrc             ;:,v映射成打开_vimrc文件
    221 ;:-----------------------------------------------------------------------------
    222 ;:#VISUAL 模式 (方便增加 HTML 标签)
    223 :vmap sb "zdi<C-R>z<ESC>            ;: 在 VISUALLY模式下将选中的文本前后分别加上
    224 :vmap st "zdi<?= <C-R>z ?><ESC>     ;: 加上 <?= ?>
    225 ;:-----------------------------------------------------------------------------
    226 ;:"vim 7 tabs
    227 vim -p fred.php joe.php             ;: 在新tab中打开文件
    228 :tabe fred.php                      ;: 在新tab中打开 fred.php
    229 :tab ball                           ;: 每一个文件一个tab
    230 ;:" vim 7  .vimrc 配置使用tabs
    231 :nnoremap gf <C-W>gf
    232 :cab      e  tabe
    233
    234 ;:-----------------------------------------------------------------------------
    235 ;:" 浏览
    236 :e .                                ;: 文件浏览器
    237 :Exp(lore)                          ;: 浏览文件
    238 :Sex(plore)                         ;: 分割窗口浏览文件
    239 :browse e                           ;: 打开windows 的 ‘选择文件’对话
    240 :ls                                 ;: 显示缓冲区
    241 :cd ..                              ;: 设置当前目录位置
    242 :args                               ;: 查看当前打开的所有文件
    243 :args *.php                         ;: 打开所有 *.php文件
    244 :lcd %:p:h                          ;: 改变路径到当前编辑的文件
    245 :autocmd BufEnter * lcd %:p:h       ;: 放入.vimrc自动完成上面的命令
    246 ;:-----------------------------------------------------------------------------
    247 ;:" 缓冲区浏览(一直排名前10的vim脚本)
    248 ;:" 需要 bufexplorer.vim http://www.vim.org/script.php?script_id=42
    249 \be                                 ;: 缓冲浏览器中查看缓冲列表
    250 \bs                                 ;: 同上,但是分割窗口
    251 ;:-----------------------------------------------------------------------------
    252 ;:" 转换大小写
    253 guu                                 ;: 将正行的字母转换成小写
    254 gUU                                 ;: 将正行的字母转换成大写
    255 Vu                                  ;: 转换选中的行(小写)
    256 VU                                  ;: 转换选中的行(大写)
    257 g~~                                 ;: 反向转换
    258 vEU                                 ;: 转换词大写
    259 vE~                                 ;: 反向转换词
    260 ggguG                               ;: 将当前编辑文件内容全部转换成小写
    261 ;:" Visually 模式下选择所有的字母及数字 (放入 .vimrc文件中)
    262 vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
    263 :%s/[.!?]\_s\+\a/\U&\E/g            ;:" 大写所有句子的第一个字母
    264 ;:-----------------------------------------------------------------------------
    265 gf                                  ;: 打开当前光标下或后的文件
    266 :nnoremap gF :view <cfile><cr>      ;: 打开当前光标下或后的文件, 如果不存在则创建
    267 ga                                  ;: 显示当前光标下单个字的ascii,十进制,十六进制……
    268 ggVGg?                              ;: 将整个文件用rot13编码……(谁看得懂啊~~hoho)
    269 ggg?G                               ;: 同上 (针对大文件)
    270 :8 | normal VGg?                    ;: 将第八行用rot13编码
    271 :normal 10GVGg?                     ;: 同上
    272 <C-A>,<C-X>                         ;: 增加,减少当前光标下的数字
    273                                     ;: win32 用户需要重定义 CNTRL-A
    274 <C-R>=5*5                           ;: 插入25 (小型计算器)
    275 ;:-----------------------------------------------------------------------------
    276 ;:" 几个彩蛋……
    277 :h 42                               ;: also http://www.google.com/search?q=42
    278 :h holy-grail
    279 :h!
    280 ;:-----------------------------------------------------------------------------
    281 ;:" 标记 & 移动
    282 '.                                  ;: 跳回最后编辑的行 (超有用)
    283 `.                                  ;: 同上,但是定位编辑点
    284 g;                                  ;: 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)
    285 g,                                  ;: 这个是较心的位置 (同上)
    286 :changes :打出改变表
    287 :h changelist                       ;: 查看“改变表跳转”的帮助
    288 <C-O>                               ;: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
    289 <C-I>                               ;: 依次沿着你的跳转记录向前跳
    290 :ju(mps)                            ;: 列出跳转轨迹
    291 :help jump-motions
    292 :history                            ;: 列出历史记录
    293 :his c                              ;: 命令行历史
    294 :his s                              ;: 搜索历史
    295 q/                                  ;: 搜索命令历史的窗口
    296 q:                                  ;: 命令行命令历史的窗口
    297 :<C-F>                              ;: 历史窗口
    298 ;:-----------------------------------------------------------------------------
    299 ;:" 缩写 & 映射
    300 :map <f7> :'a,'bw! c:/aaa/x
    301 :map <f8> :r c:/aaa/x
    302 :map <f11> :.w! c:/aaa/xr<CR>
    303 :map <f12> :r c:/aaa/xr<CR>
    304 :ab php                             ;: 查看以php开头的缩写
    305 :map ,                              ;: 列出所有的映射(以逗号开始的)
    306 ;:" 允许映射 F10 (win32)
    307 set wak=no                          ;: :h winaltkeys
    308 ;:" 映射中常使用的表示
    309 <CR>                                ;: 回车
    310 <ESC>                               ;: Esc
    311 <LEADER>                            ;: 右斜杠
    312 <BAR>                               ;: 管道符号
    313 <BACKSPACE>                         ;: 退格键
    314 <SILENT>                            ;: 不回显
    315 #显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
    316 :nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
    317 :map <f2> /price only\\|versus/     :在map中需要用反斜线 \
    318 ;:-----------------------------------------------------------------------------
    319 ;:" 简单的 PHP 调试将所有显示的变量放入寄存器a
    320 iab phpdb exit("<hr>Debug <C-R>a ");
    321 ;:-----------------------------------------------------------------------------
    322 ;:" 使用寄存器来映射 (放入 .vimrc文件自动加载)
    323 :let @m=":'a,'bs/"
    324 :let @s=":%!sort -u"
    325 ;:-----------------------------------------------------------------------------
    326 ;:" 列出寄存器
    327 :reg                                ;: 显示当前所有的寄存器
    328 :reg a                              ;: 显示寄存器a中的内容
    329 ;:"1p....                             ;: 引用一个叫1的寄存器
    330 :let @y='yy@"'                      ;: pre-loading registers (put in .vimrc)
    331 qqq                                 ;: 清空寄存器 "q"
    332 ;:-----------------------------------------------------------------------------
    333 ;:" 一些有用的决窍
    334 ;:"ayy@a                              ;: 把当前行作为命令执行
    335 yy@"                                ;: 上面的匿名寄存器
    336 u@.                                 ;: 只执行键入的命令
    337 ;:-----------------------------------------------------------------------------
    338 ;:" 从其它命令处获得输入(需要外部命令)
    339 :r!ls.exe                           ;: 从ls 获得输入插入到当前位置
    340 !!date                              ;: 从date获得输入(删除当前行)
    341 ;:" 使用外部sort排序
    342 :%!sort -u                          ;: 用sort排序整个文件(结果覆盖整个文件)
    343 :'a,'b!sort -u                      ;: 从mark a到mark b之间的内容进行排序
    344 !1} sort -u                         ;: 排序一个段落
    345 :g/^$/;,/^$/-1!sort                 ;: 排序一个选中内容 ( ; 号非常重要)
    346 ;:-----------------------------------------------------------------------------
    347 ;:" 多文件管理 (基本的)
    348 :bn                                 ;: 跳转到下一个buffer
    349 :bp                                 ;: 跳转到前一个buffer
    350 :wn                                 ;: 保存当前buffer并跳转到下一个buffer (超有用)
    351 :wp                                 ;: 保存当前buffer并跳转到前一个buffer
    352 :bd                                 ;: 把当前文件从buffer移出 (超有用)
    353 :bun                                ;: 卸载当前buffer (关闭这个窗口但是不移出)
    354 :badd file.c                        ;: 添加file.c到buffer列表
    355 :b 3                                ;: 前往第三个 buffer
    356 :b main                             ;: 前往含有main的buffer中 比如说 main.c
    357 :sav php.html                       ;: 把当前文件存为php.html并打开
    358 :sav! %<.bak                        ;: 换一个后缀名保存 (旧方法)
    359 :sav! %:r.cfm                       ;: 同上
    360 :sav %:s/fred/joe/                  ;: 替换文件名
    361 :sav %:s/fred/joe/:r.bak2           ;: 替换文件和后缀
    362 :!mv % %:r.bak                      ;: 重命名当前文件
    363 :help filename-modifiers
    364 :e!                                 ;: 打开未修改之前的文件
    365 :w c:/aaa/%                         ;: 存储文件到指定位置
    366 :e #                                ;: 编辑标记为#的文件在buffer中
    367 :rew                                ;: 返回到第一个可编辑的文件
    368 :brew                               ;: 回到第一个buffer
    369 :sp fred.txt                        ;: 分割窗口打开fred.txt
    370 :sball,:sb                          ;: 把所有的 buffers分割显示在一个窗口中 (超有用)
    371 :scrollbind                         ;: in each split window
    372 :map <F5> :ls<CR>:e #               ;: 按F5显示所有buffer, 并显示行号
    373 :set hidden                         ;: 允许不保存当前buffer而进行切换
    374 ;:-----------------------------------------------------------------------------
    375 ;:" 在分割窗口中快速切换
    376 map <C-J> <C-W>j<C-W>_
    377 map <C-K> <C-W>k<C-W>_
    378 ;:-----------------------------------------------------------------------------
    379 ;:" 录制命令 (最好的技巧)
    380 qq                                  ;:# 录制命令放入 q寄存器
    381 ..                                  ;:输入一些命令
    382 q                                   ;:# 录制结束
    383 @q                                  ;:执行放入寄存器q中的内容
    384 @@                                  ;:重复
    385 5@@                                 ;:重复5次
    386 ;:" 编辑一个 寄存器/录制
    387 "qp                                 ;:显示寄存器q中的内容(普通模式下)
    388 <ctrl-R>q                           ;:显示寄存器q中的内容 (插入模式下)
    389                                     ;:" 你现在可以看到记录内容,随便编辑
    390 "qdd                                ;:删除,重新存入q
    391 @q                                  ;:执行 录制/寄存器 q
    392 ;:" 在可视块中运行记录
    393 ;:1) 定义记录/寄存器
    394 qq:s/ to/ from/g^Mq
    395 ;:2) 定义可视块
    396 V}
    397 ;:3) 键入                               ;: 将显示下面信息
    398 :'<,'>
    399 ;:4)完成如下操作
    400 :'<,'>norm @q
    401 ;:-----------------------------------------------------------------------------
    402 ;:"宏记录的map (命令方式结束)
    403 nnoremap ] @q:w!<bar>bd
    404 ;:-----------------------------------------------------------------------------
    405 ;:" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
    406 ;:" 记出
    407 v                                   ;: 进入可视化模式
    408 V                                   ;: 进入可视化行选择模式
    409 <C-V>                               ;: 进入可视化块选择模式
    410 gv                                  ;: 重新选择
    411 o                                   ;: 选择的区域头尾移动
    412 "*y                                 ;: 复制选择区域到paste buffer
    413 V%                                  ;: 选择一个匹配段
    414 V}J                                 ;: 合并一个段落
    415 V}gJ                                ;: 合并一个段落,并保留空格
    416 ;:-----------------------------------------------------------------------------
    417 ;:" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
    418 0<c-v>10j2ld
    419 ;:-----------------------------------------------------------------------------
    420 ;:" 如何用可视块拷贝几列
    421 ;:" 可视块(并非通常的 v 命令)
    422 <C-V>,然后通过移动命令选择列 (win32 <C-Q>)
    423 然后执行 c,d,y,r 等命令
    424 ;:-----------------------------------------------------------------------------
    425 ;:"用一个块替换另一个块
    426 复制第一个块: ctrl-v move "ay
    427 复制第二个块: ctrl-v move cctrl-o "aP <esc>
    428 ;:-----------------------------------------------------------------------------
    429 ;:" _vimrc 基本设置
    430 :set incsearch                      ;: 输入搜索命令时,立即显示目前输入的模式对应的匹配。匹配的字符串被高亮。
    431 :set wildignore=*.o,*.obj,*.bak,*.exe  ;: tab补全时忽略这些忽略这些
    432 :set shiftwidth=3                   ;: 设置自动缩进为3个字符
    433 :set vb t_vb=".                     ;: 安静模式,关闭响铃跟闪烁
    434 :set browsedir=buffer               ;: 设置文件浏览使用的目录
    435                                     ;: 注:last 使用文件浏览器最近访问相同的目录。
    436                                     ;:     buffer 使用相关缓冲区的目录。
    437                                     ;:     current 使用当前目录。
    438                                     ;:     {path} 使用指定目录。
    439 ;:-----------------------------------------------------------------------------
    440 ;:" 启动windows中的IE
    441 :nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p<CR>
    442 :nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
    443 ;:-----------------------------------------------------------------------------
    444 ;:" 在vim里打开ftp
    445 cmap ,r :Nread ftp://209.51.134.122/public_html/index.html
    446 cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
    447 gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
    448 ;:-----------------------------------------------------------------------------
    449 ;:" 向寄存器中添加内容 (使用相应寄存器名称的大写)
    450 ;:" 复制5行放入a寄存器,然后向下跳转10行再复制5行
    451 "a5yy
    452 10j
    453 "A5yy
    454 ;:-----------------------------------------------------------------------------
    455 [I                                  ;: 显示当前行中字符的所有匹配(超级有用)
    456 ;:-----------------------------------------------------------------------------
    457 ;:" 常规缩进
    458 :'a,'b>>                            ;: 将mark a到mark b之间的内容进行两次缩进
    459 ;:" 虚拟模式下缩进 (可重复)
    460 :vnoremap < <gv                     ;: 这是一个虚拟模式下的键盘映射
    461                                     ;: < 映射为<gv " < 意为向内缩进,
    462                                     ;: gv 上面已有解释,为重复上次选区
    463                                     ;: <gv 也就是先向内缩进然后再选择刚才的选区
    464                                     ;: 这样就可以只按 < 实现重复缩进了
    465 :vnoremap > >gv                     ;: 向内缩进,原理同上
    466 ;:" 块缩进
    467 >i{
    468 >a{
    469 ;:" also
    470 >% and <%                           ;:自己试试看吧,涉及到用 { 的语言很有用,比如c,c++等
    471 ;:-----------------------------------------------------------------------------
    472 ;:" 重定向 & 粘贴到寄存器 * (*为寄存器名称)
    473 :redir @*                           ;: 重定向命令到paste缓冲区
    474 :redir END                          ;: 结束
    475 :redir >> out.txt                   ;: 重定向到文件
    476 ;:" 操作粘贴缓冲区
    477 "*yy                                ;: 复制到寄存器
    478 "*p                                 ;: 从寄存器中粘贴一行
    479 ;:" 复制到粘贴缓冲区 (扩展模式)
    480 :'a,'by*                            ;: 复制一个范围到粘
    480 :'a,'by*                            ;: 复制一个范围到粘贴寄存器
    481 :%y*                                ;: 复制一个括号匹配到粘贴缓冲区
    482 :.y*                                ;: 复制当前行到粘贴缓冲区
    483 ;:" 从剪贴板上过滤非可打印字符
    484 ;:" 当从一些 GUI 程序粘贴时会有用处
    485 :nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
    486 ;:-----------------------------------------------------------------------------
    487 ;:" 重新格式化文本
    488 gq}                                 ;: 合并一个段落
    489 gqap                                ;: 当前段落
    490 ggVGgq                              ;: 全部段落
    491 Vgq                                 ;: 当前行
    492 :s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g ;:" 在70列的时候换行
    493 ;:-----------------------------------------------------------------------------
    494 ;:" 命令使用于多个文件
    495 :argdo %s/foo/bar/e                 ;: 在所有文件上操做 :args
    496 :bufdo %s/foo/bar/e
    497 :windo %s/foo/bar/e
    498 :argdo exe '%!sort'|w! 
  • 测试工具LoadRunner和OpenSTA比较分析

    2009-05-15 15:07:08

    MILY: 宋体">项目

    描述

    LoadRunner

    OpenSTA

    协议

    测试工具可以捕捉、处理及回放通信协议

    支持多种协议。按照协议数量收费,支持多种协议录制功能。

    仅支持HTTP 1.0 / 1.1 / HTTPS (SSL)

    回放功能

    回放脚本及脚本调试工具

    扩展的记录功能支持参数和服务器信息的浏览,还可浏览及比较已录制网页版本与客户端返回的信息,脚本生成器包括了调试工具、支持断点调试和单步跟踪。

    类似的回放功能但没有综合比较功能。有调试功能,包括控制器、断点设定和单步跟踪。

    脚本语言

    窗体顶端

    使用中间介质来代表被捕获的协议数据和操作回放数据窗体底端

     

    称为TSL,使用标准C语言语法而且允许添加C函数库,对工具支持的不同协议有广泛的定制功能。

    使用专有的类似“BASIC”语言的自动化脚本语言SCL。在已有的功能上有些限制例如字符串操作、支持文档对象模型(DOM直接处理。

    扩展性

    工具功能性扩展

    附加的TSL或者C函数库 受限与工具的功能性。

    SCL脚本模块可以定义到Include文件里,开源使得功能可以用C++进行扩展。

    脚本界面

    编辑脚本的应用程序工具的界面

    多种捕捉模式 支持高级的文本浏览和低级的HTTP浏览,并且支持图形化的树形结构和脚本浏览方式,脚本浏览方式支持功能区分入口。

    低级的HTTP浏览并且提供图形树表示的DOM结构。可视化的被捕获的HTML渲染与寻址服务器头表。有语言敏感、语法颜色凸显的编程功能。

    相关性

    从动态数据中替换数值从而能够成功回放的任务。

    自动关联功能,包括在录制中录制后比较录制与重放效果。但是不支持所有的模式捕获。

    手动关联使用互动的DOM架构。自动生成脚本代码的功能用来辅助变量代换。

    Cookie 管理

    HTTP cookies的检测、录制和回放,并需要额外的代码来管理javascript生成的cookies

    HTTP头存根自动管理如果需要可以手动操纵。

    HTTP头存根自动管理如果需要可以手动操纵。

    参数化

    自动地调整动态数据参数从而更准确模拟真实用户。往往是对话(session)管理所必须的

    可扩充的数据输入接口包括数据库查询的向导界面。没有标准的函数来锁定数据源保持分布式测试中被并发访问数据的唯一性。

    可扩充的数据输入接口包括自动生成测试数据的向导界面。标准功能包括了对数据文件的顺序、随机、伪随机访问。分布式测试中,有标准的通用函数来维护单个或多个负载注入器(injector)的参数的唯一性。

    控制器

    管理和实施测试

    实时监控功能。情景自动生成。对虚拟用户、脚本、脚本组的单独控制。脚本的运行安排,执行进度显示及循环控制

    实时监控功能。简单拖放多情景测试配置支持模块化脚本并允许在在运行时加入新的情景/虚拟用户。没有情景自动生成。允许在多用户负载测试过程中对整个测试或者特定用户进行http监测和调试。

    监控

    在执行期间捕获资源使用信息,包括显示并用于建立性能测试报告。

    支持多种模式。 支持在线图形显示、Apache/Netscape/IIS其他监视器需另外支付费用。新的机制允许远程用户通过浏览器界面实时监控结果。注意:通过防火墙监控需要制定TCP/IP端口。未来版本的LoadRunner应使用HTTP消息避免此类问题。

    支持Windows NT/2000中集成的性能图形显示以及SNMP信息收集。各种测试信息包括虚拟用户状特性、自定义状态和活动信息。 基于Web的监视器可以穿过防火墙运行在远程机器上。 执行过程中的联机图形以及监视结果会用于最后的报告。

    分布式测试

    把压力生成分布到多个产生压力的机器的能力

    支持由单一控制器管理多个负载生成器。

    支持由单一控制器管理多个负载生成器。同一网络使用TCP/IP或基于WebHTTP远程控制负载生成器。

    虚拟IP地址

    模拟不同IP地址访问系统的能力。尤其对负载平衡系统非常有用

    支持虚拟IP包括IP转发时的路由自动更新。

    没有嵌入虚拟IP功能。

    广域网/局域网仿真

    在测试中模拟不同网络结构的能力

    7.6版本新加入的功能。允许在局域网测试时仿真延时、丢包、连接故障及动态路由效果。需要专门的许可证书。

    没有嵌入广域网/局域网仿真功能。

    缓存

    模拟网络浏览器缓存页面的能力

    可以控制浏览器回放时的缓存仿真以及每个虚拟用户的设置。

    没有特别的功能虽然可以效仿简单的脚本代码。

    用户网速模拟

    模拟真实用户不同网络速度的能力

    可以回放时仿真不同的网络速度

    没有嵌入模拟真实用户不同网络速度的功能

    分布式/远程压力生成

    为了产生大量负载需要额外的负载生成器,并需要集中控制

    可以控制多个负载生成器及收集结果。使用HTTP端口可穿过防火墙控制远程的负载发生器。

    可以控制多个负载生成器及收集结果。使用HTTP端口可穿过防火墙控制远程的负载发生器.

    报告&分析

    检查和分析测试的结果,包括定时器、监控的资源和以图形方式显示的结果。

    大范围的混合式图表功能——Word中自动生成报告。分析器可以作为单独的应用程序分发给用户

    简单的图表足够分析统计负载有关的关键数据和资源使用情况资源使用的显示支持覆盖图,可以输出到 Excel无许可证限制,任何用户都可以浏览数据 免费的工具和Excel宏都可透过公共用户论坛获取。

    可量测性

    工具生成多少虚拟用户及相应的资源使用的能力。 实际可利用资源取决于数量、规模和脚本的复杂度。

    资源的限制主要是线程数量及内存大小。在NT/2K操作系统上每个虚拟用户会占到1 Mb内存。 Windows 95 98 & Unix的效率更低些。每台PC的最大虚拟用户数大约为1500

    主要使用的资源是内存。在一个单核P4处理器及Windows 2k上测试一个简单的ASP页面如果达到3000用户的负载需要1GB内存。 未经证实的报告说明Win2k机器上对于复杂的脚本最多可以支持1664个虚拟用户。可能有线程限制。没有许可证书限制。

    初始成本

    购买软机及证书的费用不包括升级或支持。

    没有虚拟用户的软件基本价为16000美元。额外的费用是通过每种协议、监控资源和虚拟用户来收取。

    免费并可以通过www.OpenSTA.org下载。可供下载的有: 先前版本; 自动安装包和当前源代码(附有MS C++ Visual Studio 6简单build指令)

    虚拟用户成本

    大多数商业工具按照虚拟用户的数量收费。额外的硬件也需要额外费用。

    价格范围大:虚拟用户的费用从2510000美元到100066000美元。临时的虚拟用户大约是每天3.50美元(1000分钟) 这不是正式的报价。

    免费,无许可证书限制

    技术支持 & 专家咨询

    该工具支持的可用服务和费用。

    根据M.I. 此项费用每年大约为初始成本的1/5 包括升级。 MI和其合伙公司还提供咨询服务(包括etest协会)  

    众多的独立资源。 Etest协会对每次远程技术支持收取美元50,也提供收费的专家咨询。网上资源包括网页和电子邮件论坛。升级是免费的(大约每3-6个月)

    培训

    工具的培训服务

  • 如何使用Nikto漏洞扫描工具检测网站安全

    2009-01-12 09:19:52

    http://netsecurity.51cto.com/art/200712/62159.htm

    【51CTO.com 独家特稿】随着信息技术的发展,网络应用越来越广泛,很多企业单位都依靠网站来运营,正因为业务的不断提升和应用,致使网站的安全性显得越来越重要。另一方面,网络上的黑客也越来越多,而且在利益驱使下,很多黑客对网站发起攻击,并以此谋利。作为网站的管理人员,应该在黑客入侵之前发现网站的安全问题,使网站能更好的发挥作用。那么究竟如何检查网站的安全隐患和漏洞呢?
    下面我们介绍一款开放源代码的Web漏洞扫描软件,网站管理员可以用它对WEB站点进行安全审计,尽早发现网站中存在的安全漏洞。
    Nikto是一款开放源代码的、功能强大的WEB扫描评估软件,能对web服务器多种安全项目进行测试的扫描软件,能在230多种服务器上扫描出 2600多种有潜在危险的文件、CGI及其他问题,它可以扫描指定主机的WEB类型、主机名、特定目录、COOKIE、特定CGI漏洞、返回主机允许的 http模式等等。它也使用LibWhiske库,但通常比Whisker更新的更为频繁。Nikto是网管安全人员必备的WEB审计工具之一。
    Nikto最新版本为2.0版,官方下载网站:http://www.cirt.net/
    Nikto是基于PERL开发的程序,所以需要PERL环境。Nikto支持Windows(使用ActiveState Perl环境)、Mac OSX、多种Linux 或Unix系统。Nikto使用SSL需要Net::SSLeay PERL模式,则必须在Unix平台上安装OpenSSL。具体的可以参考nikto的帮助文档。
    从官方网站上下载nikto-current.tar.gz文件,在Linux系统解压操作:
    tar -xvf nikto-current.tar.gz
    gzip -d nikto-current.tar
    解压后的结果如下所示:
    Config.txt、docs、kbase、nikto.pl、plugins、 templates
    Nikto的使用说明:
    Nikto扫描需要主机目标IP、主机端口。默认扫描的是80端口。扫描主机目标IP地址可以使用选项-h(host)。下面将扫描IP为192.168.0.1的TCP 80端口,如下所示:
    perl nkito.pl –h 192.168.0.1
    也可以自定义扫描的端口,可以使用选项-p(port),下面将扫描IP为192.168.0.1的TCP 443端口,如下所示:
    perl nikto.pl –h 192.168.0.1 –p 443
    Nikto也可以同时扫描多个端口,使用选项-p(port),可以扫描一段范围(比如:80-90),也可以扫描多个端口(比如:80,88,90)。下面扫描主机的80/88/443端口,如下所示:
    Perl nikto.pl –h 192.168.0.1 –p 80,88,443
    如果运行Nikto的主机是通过HTTP proxy来访问互联网的,也可以使用代理来扫描,使用选项-u(useproxy)。下面将通过HTTP proxy来扫描,如下所示:
    Perl nikto.ph –h 192.168.0.1 –p 80 –u
    Nikto的更新:
    Nikto的升级可以通过-update的命令来更新插件和数据库,如下所示:
    Perl nikto.ph –update
    也可以通过从网站下载来更新插件和数据库:http://updates.cirt.net/
    Nikto的选项说明:
    -Cgidirs
    扫描CGI目录。
    -config
    使用指定的config文件来替代安装在本地的config.txt文件
    -dbcheck
    选择语法错误的扫描数据库。
    -evasion
    使用LibWhisker中对IDS的躲避技术,可使用以下几种类型:
    1.随机URL编码(非UTF-8方式)
    2.自选择路径(/./)
    3.虚假的请求结束
    4.长的URL请求
    5.参数隐藏
    6.使用TAB作为命令的分隔符
    7.大小写敏感
    8.使用Windows路径分隔符\替换/
    9.会话重组
    -findonly
    仅用来发现HTTP和HTTPS端口,而不执行检测规则
    -Format
    指定检测报告输出文件的格式,默认是txt文件格式(csv/txt/htm)
    -host
    目标主机,主机名、IP地址、主机列表文件。
    -id
    ID和密码对于授权的HTTP认证。格式:id:password
    -mutate
    变化猜测技术
    1.使用所有的root目录测试所有文件
    2.猜测密码文件名字
    3.列举Apache的用户名字(/~user)
    4.列举cgiwrap的用户名字(/cgi-bin/cgiwrap/~user)
    -nolookup
    不执行主机名查找
    -output
    报告输出指定地点
    -port
    扫描端口指定,默认为80端口。
    -Pause
    每次操作之间的延迟时间
    - Display
    控制Nikto输出的显示
    1.直接显示信息
    2.显示的cookies信息
    3.显示所有200/OK的反应
    4.显示认证请求的URLs
    5.Debug输出
    -ssl
    强制在端口上使用SSL模式
    -Single
    执行单个对目标服务的请求操作。
    -timeout
    每个请求的超时时间,默认为10秒
    -Tuning
    Tuning 选项控制Nikto使用不同的方式来扫描目标。
    0.文件上传
    1.日志文件
    2.默认的文件
    3.信息泄漏
    4.注射(XSS/scrīpt/HTML)
    5.远程文件检索(Web 目录中)
    6.拒绝服务
    7.远程文件检索(服务器)
    8.代码执行-远程shell
    9.SQL注入
    a.认证绕过
    b.软件关联
    g.属性(不要依懒banner的信息)
    x.反向连接选项
    -useproxy
    使用指定代理扫描
    -update
    更新插件和数据库
    例子:使用Nikto扫描目标主机10.0.0.12的phpwind论坛网站。
    Perl nikto.pl –h 10.0.0.12 –o test.txt
    查看test.txt文件,如下图所示:
    图1
    通过上面的扫描结果,我们可以发现这个Phpwind论坛网站,是在windows操作系统上,使用Apache/2.2.4版本,Php/5.2.0版本,以及系统默认的配置文件和路径等。
    综上所述,Nikto工具可以帮助我们对Web的安全进行审计,及时发现网站存在的安全漏洞,对网站的安全做进一步的扫描评估。
     
     
  • 测试网站各项性能的31 个免费在线工具(转帖)

    2009-01-05 10:28:03

    你是否肯定你的网站完全兼容各大浏览器?是否知道多少秒可以打开你的网站? 是否可以自信地说你的网站根本就没有打不开的时候? 是否……
    虽然它看似不重要,但这些在一定程度上也对你的网站的访问量产生了影响 。这里列出了一份31 个免费在线测试工具,你可以通过这些工具来测试你的网站,并根据结果对你的网站进行修改。

    网站代码验证 没人可以细致到保证自己的网站代码都是正确的,你可以通过以下测试来验证网站代码是否正确。

    1 . WDG HTML Validator 一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。( 强烈推荐 )

    2 . W3C Markup Validation Service 对 HTML 和 XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

    3 . W3C CSS Validation Service 用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”。

    4 . RUWF XML Syntax Checker 用于查找 XML 文件的错误。

    5 . W3C Feed Validation Service 用于查找 Atom 和 RSS feed 中的错误语法。( 这个我经常用到 )

    6 . W3C Link Checker 用于搜寻查明你网站内的所有链接里是否有断链。( 强烈推荐 )

    7 . Juicy Studio Link Analyser 测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。
    网站的使用性
    我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

    8 . Watchfire WebXACT 所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。( 强烈推荐 )

    9 . ATRC Web Accessibility Checker 测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

    10 . WAVE 3.0 Web Accessibility Tool 高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。( 强烈推荐 )

    11 . TAW Web Accessibility Test 测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

    12 . HiSoftware CynthiaSays portal 采用了非常严格的规则来测试网页( 根据 section 508 和 WCAG 1.0 规则 ),生成的报告也极为详细( 详细到很难看懂 )。

    13 . HERA Accessibility testing with Style 使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

    14 . Juicy Studio CSS Analyser 进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

    15 . Juiciy Studio Readability Test 分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不( 根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用 )
    网站的速度
    打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

    16 . Web Page Analyzer from Website Optimization 一个很好的工具,它在分析完一个网页后,会为减少加载时间提出优化建议,着重优化物体的数目,图片和网站的总体大小。( 强烈推荐 )

    17 . WebSitePulse Test Tools 有一系列的工具来确定网站的加载速度和主机信息。

    18 . Internet Supervision Url Check 从世界各地不同的服务器来测试你的网站的加载时间,用于确定是不是各地的来访者都能顺利快速的打开你得网站。
    浏览器模拟工具
    这是一个普遍的问题,因为现在有着很多的操作系统和浏览器,你得网站必须得兼容它们,但这绝不是一件容易的事。通过下列工具,你可以了解你得网站在各种浏览器上的显示效果。

    19 . Browsershots 能给出你的网站在不同浏览器下显示效果的截图,包括:Firefox 和 Internet Explorer ( Windows )、Firefox 和 Safari ( Mac OS X )、Iceweasal 和 Konqueror ( Linux ),但是结果要在 1 - 3 小时后才能出来。

    20 . IE NetRenderer 实时生成你的网站在 Internet Explorer 5.5 、6.0 和 7.0 下的截图。

    21 . MobiReady Report 分析使用手机访问网页的兼容性问题,会生成一份详细的报告,并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。
    搜索引擎优化 (SEO)
    一个网站,如果对搜索引擎有着比较好的友好度,一定会比较有竞争力。

    22 . UrlTrends 会显示网站的访客是如何通过搜索引擎来到你的网站,还有各个流量是多少。这些数据是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, AltaVista 和其他一些网站。( 强烈推荐 )

    23 . iWEBTOOL Backlink Checker 一个很好的工具,它能找出有什么站点链接到你的站点,那些站点是什么类型的站点。

    24 . iWEBTOOL Multi-Rank Checker 显示你网站的 Alexa 和 Google PageRank 数值。

    25 . Microsoft adCenter Labs: Advertising and Keyword Research Tools 一个极好的工具,用于分析和预测你网站的来访者和市场。( 强烈推荐 )

    26 . Domain Tools Whois lookup 一个 WHOIS 网络工具。

    27 . SEO-Browser 可以让你看到在搜索引擎眼里一样的网站( 去掉所有的”美丽”配件 )。

    28 . SEO Workers SEO Analysis Tool 非常有用的工具,分析了网站上的各种分类特征,包括 meta 标签、关键字密度及加载时间。( 强烈推荐 )

    29 . Seekport Seekbot 可以分析网站的数据和内容,以得出搜索引擎会如何有效的解释分析的网站。

    30 . SEO Chat SEO Tools 用以分析网站 Google adsense 盈利潜力,关键字密度,Meta tag 等等……

    31 . Marketleap Search Engine Marketing Tools 用来分析网页,让你知道你的网站检索、设定的关键字好不好。
  • 什么是CGI

    2008-12-30 13:36:45

    CGI是CommonGatewayInterface 的简称。是一个用于定Web服务器与外部程序之间通信方式的标准,使得外部程序能生成HTML、图像或者其他内容,而服务器处理的方式与那些非外部程序生成的HTML、图像或其他内容的处理方式是相同的。因此,CGI程序册仅使你能生成表态内容而能生动态内容。使用CGI的原因在于它是一个定义良好并被广泛支持的标准,没有CGI就不可能实现动态的Web页面,除非使用一些服务器中提供的特殊方法(如今,也有除CGI之外的其他技术逐渐在成为标准)。

    CGI主要的功能是在WWW环境下,藉由从客户端传递一些讯息给WWWServer,再由WWWServer去启动所指定的程式码来完成特定的工作。所以更明确的说,CGI仅是在WWWServer上可执行的程式码,而她的工作就是控制讯息要求而且产生并传回所需的文件。使用CGI,你的Server可以读取并显示在客户端无法读取的格式(像是SQLDataBase)。而且可以像闸道(Gateway)一样,在伺服端和客户端之间,产生客户端所需要的讯息。基本上,在此种主从式(Client/Server)的环境之下,其IPC(InterProcess Communication)的协定是利用讯息传递及记忆体分享(环境变数)的方式来完成。CGI有其特定的写法及规格,必须遵守其原则,方可达到主从端资讯交流的目的。

  • 脚本下载说明

    2008-12-23 17:25:28

    浏览器对于scrīpt的下载是避免并行进行的。HTTP/1.1协议中规定浏览器和同一host之间只建立最多两个连接,也就是说允许的最大并行度为2(当然,对IE和Firefox来说,你都可以通过修改浏览器的设置来扩大这个并行度)。但对于scrīpt的下载来说,浏览器在开始下载scrīpt之后,是不会并行的下载其他element的。不会并行下载scrīpt这一点是一个事实,但浏览器为什么要采用这种策略,以及浏览器我们提到的“将scrīpt放到HTML文件中尽量靠近尾部”到底能起到多大的作用,需要注意哪些事项,我希望在这篇文章中进一步的进行讨论。

    将scrīpt放到HTML文件中尽量靠近尾部”的方法来提高用户感觉上的响应时间

     

  • svn记录版本

    2008-12-17 09:20:52

    1 右键-repo-brower

    2trunk

    3tag-create folder 命名一个版本名称

    4再将trunk/deployment copy to  3的文件夹中/deployment   /source

    5出版本时候加上trunk下的版本号,这是公司的要求

  • HTTP常见错误 400/401/403/404/500及更多

    2008-12-11 14:54:35

    HTTP 错误 400
    400 请求出错
    由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。

    HTTP 错误 401
    401.1 未授权:登录失败
    此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。
    请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。
    401.2 未授权:服务器的配置导致登录失败
    此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。此错误通常由未发送正确的 WWW 验证表头字段所致。
    请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。
    401.3 未授权:由于资源中的 ACL 而未授权
    此错误表明客户所传输的证书没有对服务器中特定资源的访问权限。此资源可能是客户机中的地址行所列出的网页或文件,也可能是处理客户机中的地址行所列出的文件所需服务器上的其他文件。
    请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。
    401.4 未授权:授权服务被筛选程序拒绝
    此错误表明 Web 服务器已经安装了筛选程序,用以验证连接到服务器的用户。此筛选程序拒绝连接到此服务器的真品证书的访问。
    请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。
    401.5 未授权:ISAPI/CGI 应用程序的授权失败
    此错误表明试图使用的 Web服务器中的地址已经安装了 ISAPI 或 CGI程序,在继续之前用以验证用户的证书。此程序拒绝用来连接到服务器的真品证书的访问。
    请记录试图访问的完整地址,并与 Web服务器的管理员联系以确认您是否具有访问所请求资源的权限

    HTTP 错误 403
    403.1 禁止:禁止执行访问
    如果从并不允许执行程序的目录中执行 CGI、ISAPI或其他执行程序就可能引起此错误。
    如果问题依然存在,请与 Web 服务器的管理员联系。
    403.2 禁止:禁止读取访问
    如果没有可用的默认网页或未启用此目录的目录浏览,或者试图显示驻留在只标记为执行或脚本权限的目录中的HTML 页时就会导致此错误。
    如果问题依然存在,请与 Web 服务器的管理员联系。
    403.3 禁止:禁止写访问
    如果试图上载或修改不允许写访问的目录中的文件,就会导致此问题。
    如果问题依然存在,请与 Web服务器的管理员联系。
    403.4 禁止:需要 SSL
    此错误表明试图访问的网页受安全套接字层(SSL)的保护。要查看,必须在试图访问的地址前输入https:// 以启用 SSL。
    如果问题依然存在,请与 Web服务器的管理员联系。
    403.5 禁止:需要 SSL 128
    此错误消息表明您试图访问的资源受 128位的安全套接字层(SSL)保护。要查看此资源,需要有支持此SSL 层的浏览器。
    请确认浏览器是否支持 128 位 SSL安全性。如果支持,就与 Web服务器的管理员联系,并报告问题。
    403.6 禁止:拒绝 IP 地址
    如果服务器含有不允许访问此站点的 IP地址列表,并且您正使用的 IP地址在此列表中,就会导致此问题。
    如果问题依然存在,请与 Web服务器的管理员联系。
    403.7 禁止:需要用户证书
    当试图访问的资源要求浏览器具有服务器可识别的用户安全套接字层(SSL)证书时就会导致此问题。可用来验证您是否为此资源的合法用户。
    请与 Web服务器的管理员联系以获取有效的用户证书。
    403.8 禁止:禁止站点访问
    如果 Web服务器不为请求提供服务,或您没有连接到此站点的权限时,就会导致此问题。
    请与 Web 服务器的管理员联系。
    403.9 禁止访问:所连接的用户太多
    如果 Web太忙并且由于流量过大而无法处理您的请求时就会导致此问题。请稍后再次连接。
    如果问题依然存在,请与 Web 服务器的管理员联系。
    403.10 禁止访问:配置无效
    此时 Web 服务器的配置存在问题。
    如果问题依然存在,请与 Web服务器的管理员联系。
    403.11 禁止访问:密码已更改
    在身份验证的过程中如果用户输入错误的密码,就会导致此错误。请刷新网页并重试。
    如果问题依然存在,请与 Web服务器的管理员联系。
    403.12 禁止访问:映射程序拒绝访问
    拒绝用户证书试图访问此 Web 站点。
    请与站点管理员联系以建立用户证书权限。如果必要,也可以更改用户证书并重试。

    HTTP 错误 404
    404 找不到
    Web 服务器找不到您所请求的文件或脚本。请检查URL 以确保路径正确。
    如果问题依然存在,请与服务器的管理员联系。

    HTTP 错误 405
    405 不允许此方法
    对于请求所标识的资源,不允许使用请求行中所指定的方法。请确保为所请求的资源设置了正确的 MIME 类型。
    如果问题依然存在,请与服务器的管理员联系。

    HTTP 错误 406
    406 不可接受
    根据此请求中所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体。
    如果问题依然存在,请与服务器的管理员联系。

    HTTP 错误 407
    407 需要代理身份验证
    在可为此请求提供服务之前,您必须验证此代理服务器。请登录到代理服务器,然后重试。
    如果问题依然存在,请与 Web 服务器的管理员联系。

    HTTP 错误 412
    412 前提条件失败
    在服务器上测试前提条件时,部分请求标题字段中所给定的前提条件估计为FALSE。客户机将前提条件放置在当前资源 metainformation(标题字段数据)中,以防止所请求的方法被误用到其他资源。
    如果问题依然存在,请与 Web 服务器的管理员联系。

    HTTP 错误 414
    414 Request-URI 太长
    Request-URL太长,服务器拒绝服务此请求。仅在下列条件下才有可能发生此条件:
    客户机错误地将 POST 请求转换为具有较长的查询信息的 GET 请求。
    客户机遇到了重定向问题(例如,指向自身的后缀的重定向前缀)。
    服务器正遭受试图利用某些服务器(将固定长度的缓冲区用于读取或执行 Request-URI)中的安全性漏洞的客户干扰。
    如果问题依然存在,请与 Web 服务器的管理员联系。

    HTTP 错误 500
    500 服务器的内部错误
    Web 服务器不能执行此请求。请稍后重试此请求。
    如果问题依然存在,请与 Web服务器的管理员联系。

    HTTP 错误 501
    501 未实现
    Web 服务器不支持实现此请求所需的功能。请检查URL 中的错误,如果问题依然存在,请与 Web服务器的管理员联系。

    HTTP 错误 502
    502 网关出错
    当用作网关或代理时,服务器将从试图实现此请求时所访问的upstream 服务器中接收无效的响应。
    如果问题依然存在,请与 Web服务器的管理员联系。

    转载:http://www.xiazaichina.com/bbs/viewthread.php?tid=1502

  • IIS服务器的配置,及在其中发布网站

    2008-10-23 10:57:47

    一、IIS服务器的配置

    在控制面板中选择添加删除程序;在弹出的页面中,选择“添加删除组建”,然后选择相应的IIS服务组建进行安装;

    二、IIS下发布网站

    一种不建虚拟目录的方法:(已经使用过,成功)
    1)依次展开本地计算机--网站--默认网站;
    右击默认网站的属性。
    在[网站]标签页中,[IP地址]中分配该服务器的IP,[TCP端口]中输入端口号(默认80)。
    在[主目录]标签页中,[本地路径]中选择你要发布站点的文件夹,然后勾选脚本资源访问、读取,[执行权限]中选择脚本和可执行文件。
    在[文档]标签页中,添加默认文档。
    将网站发布到该文件夹中,之后可通过域名直接访问。

    2)首先到控制面板--管理工具中打开IIS;
    依次展开本地计算机--网站--默认网站;
    右击默认网站,选择新建--虚拟目录:在[别名]中输入虚拟目录名称(如test),在[目录]中选择你要发布站点的文件夹,在[允许下列权限]中勾选读取、运行脚本,完成。
    将网站生成后发布到上述文件夹中。然后就可以通过http://localhost/test/访问。

  • Media Player属性大全

    2008-10-09 13:36:35

    播放: MediaPlayer.Play()
    暂停: MediaPlayer.Pause()
    定位: MediaPlayer.SetCurrentEntry(lWhichEntry)
          MediaPlayer.Next()
          MediaPlayer.Previous()
    循环: MediaPlayer.PlayCount = 0
    0:the clip plays repeatedly
    1:once
    停止: MediaPlayer.Stop()
    ==================================
    AllowChangeDisplaySize 返回或设置最终用户是否能设置显示尺寸(逻辑型)
    AllowScan 返回或设置是否允许扫描(逻辑型)
    AnimationAtStart 返回或设置控件开始播放之前是否先播放一个动画序列(逻辑型)
    AudioStream 返回或设置音频流的编号(用于多音频流的剪辑,默认为-1)(长整型)
    AutoRewind 返回或设置媒体文件播放完毕后是否自动回绕(逻辑型)
    AutoSize 返回或设置是否自动调整控件大小来适应载入的媒体(逻辑型)
    AutoStart 返回或设置在载入媒体文件之后是否自动开始播放(逻辑型)
    Balance 返回或设置指定立体声媒体文件的播放声道(-10000为左声道,10000为右声道,0为立体声)(长整型)
    Bandwidth 返回或设置当前文件的带宽(长整型)
    BaseURL 返回基本的 HTTP URL(字符串)
    BufferingCount 返回媒体文件回放时缓冲的总时间(长整型)
    BufferingProgress 返回缓冲完成的百分比(长整型)
    BufferingTime 返回缓冲的时间(双精度型)
    CanPreview 返回或设置当前显示的剪辑是能否被预览(逻辑型)
    CanScan 返回或设置当前文件是否支持快进或快退(逻辑型)
    CanSeek 返回或设置当前文件是否能搜索并定位到某个时间(逻辑型)
    CanSeekToMarkers 返回或设置文件是否支持搜索到标签(逻辑型)
    CaptioningID 返回在标题中显示的帧或控件的名称(字符串)
    ChannelDescrīption 返回电台的描述(字符串)
    ChannelName 返回电台的名称(字符串)
    ChannelURL 返回电台的元文件的位置(字符串)
    ClickToPlay 返回或设置是否可以通过点击图像暂停或播放剪辑(逻辑型)
    ClientID 返回客户端唯一的标识符(字符串)
    CodecCount 返回文件使用的可安装的 codecs 的个数(长整型)
    ContactAddress 返回电台的联系地址(字符串)
    ContactEmail 返回电台的联系电子邮件地址(字符串)
    ContactPhone 返回电台的联系电话(字符串)
    CreationDate 返回剪辑的创建日期(日期型)
    CurrentMarker 返回或设置当前书签号码(长整型)
    CurrentPosition 返回或设置剪辑的当前位置(双精度型)
    CursorType 返回或设置指针类型(长整型)
    DefaultFrame 返回或设置控件的默认目标 Http 帧(字符串)
    DisplayBackColor 返回或设置显示面板的背景色(OLE_COLOR 值)
    DisplayForeColor 返回或设置显示面板的前景色(OLE_COLOR 值)
    DisplayMode 返回或设置显示面板是否用秒或帧的形式显示当前位置(MPDisplayModeConstants 值)
    DisplaySize 返回或设置图像显示窗口的大小(MPDisplaySizeConstant 值)
    Duration 返回或设置剪辑剪辑的播放时间(双精度型)
    EnableContextMenu 返回或设置是否允许使用上下文菜单(逻辑型)
    Enabled 返回或设置控件是否可用(逻辑型)
    EnableFullScreenControls 返回或设置全屏幕控制是否可用(逻辑型)
    EnablePositionControls 返回或设置位置控制是否可用(逻辑型)
    EnableTracker 返回或设置搜索栏控制是否可用(逻辑型)
    ErrorCode 返回当前错误代码(长整型)
    ErrorCorrection 返回当前剪辑的错误修正类型(长整型)
    ErrorDescrīption 返回当前错误的描述(字符串)
    FileName 返回或设置要播放的剪辑的文件名称(字符串)
    HasError 返回控件是否发生错误(逻辑型)
    HasMultipleItems 返回或设置控件是否包含某些多重项目的内容(逻辑型)
    ImageSourceHeight 返回或设置当前剪辑的原始图像高度(长整型)
    ImageSourceWidth 返回或设置当前剪辑的原始图像宽度(长整型)
    InvokeURLs 返回或设置 URL 是否自动发送请求(逻辑型)
    IsBroadcast 返回或设置源是否进行广播(逻辑型)
    IsDurationValid 返回或设置持续时间值是否有效(逻辑型)
    Language 返回或设置用于本地化语言支持的当前区域语言(长整型)
    LostPackets 返回丢失的数据包数量(长整型)
    MarkerCount 返回文件书签的数量(长整型)
    Mute 返回或设置控件是否播放声音(逻辑型)
    OpenState 返回控件的内容源状态(长整型)
    PlayCount 返回或设置一个剪辑播放的次数(长整型)
    PlayState 返回控件的当前操作状态(长整型)
    PreviewMode 返回或设置控件是否处在预览模式(逻辑型)
    Rate 返回或设置回放帧频(双精度型)
    ReadyState 返回控件是否准备就绪(ReadyStateConstant 值)
    ReceivedPackets 返回已接收到的数据包的数量(长整型)
    ReceptionQuality 返回最后 30 秒接收到的数据包的百分比(长整型)
    RecoveredPackets 返回已转换的数据包的数量(长整型)
    SAMIFileName 返回或设置 closed-captioning 文件名(字符串)
    SAMILang 返回或设置 closed captioning 语言(字符串)
    SAMIStyle 返回或设置 closed captioning 风格(字符串)
    SelectionEnd 返回或设置流的结束位置(双精度型)
    SelectionStart 返回或设置流的起始位置(双精度型)
    SendErrorEvents 返回或设置控件是否发送错误事件(逻辑型)
    SendKeyboardEvents 返回或设置控件是否发送键盘事件(逻辑型)
    SendMouseClickEvents 返回或设置控件是否发送鼠标单击事件(逻辑型)
    SendMouseMoveEvents 返回或设置控件是否发送鼠标移动事件(逻辑型)
    SendOpenStateChangeEvents 返回或设置控件是否发送打开状态改变事件(逻辑型)
    SendPlayStateChangeEvents 返回或设置控件是否发送播放状态改变事件(逻辑型)
    SendWarningEvents 返回或设置控件是否发送警告事件(逻辑型)
    ShowAudioControls 返回或设置是否显示音频控制(逻辑型)
    ShowCaptioning 返回或设置是否显示字幕(逻辑型)
    ShowControls 返回或设置控制面板是否可见(逻辑型)
    ShowDisplay 返回或设置是否显示显示面板(逻辑型)
    ShowGotoBar 返回或设置是否显示跳转栏(逻辑型)
    ShowPositionControls 返回或设置是否显示位置控制(逻辑型)
    ShowStatusBar 返回或设置是否显示状态栏(逻辑型)
    ShowTracker 返回或设置是否显示搜索栏(逻辑型)
    SourceLink 返回内容文件的路径(字符串)
    SourceProtocol 返回用于接收数据的协议(长整型)
    StreamCount 返回媒体帧的数量(长整型)
    TransparentAtStart 返回或设置在开始播放之前和停止之后控件是否透明(逻辑型)
    VideoBorder3D 返回或设置视频边框是否显示为 3D 效果(逻辑型)
    VideoBorderColor 返回或设置视频边框的颜色(OLE_颜色)
    VideoBorderWidth 返回或设置视频边框的宽度(长整型)
    Volume 返回或设置音量(长整型)
    ==============================================
    Mediaplayer属性和方法

    属性/方法名:说明:
    [基本属性]  
    URL:String; 指定媒体位置,本机或网络地址
    uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
    playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
    enableContextMenu:Boolean; 启用/禁用右键菜单
    fullScreen:boolean; 是否全屏显示
    [controls] wmp.controls //播放器基本控制
    controls.play; 播放
    controls.pause; 暂停
    controls.stop; 停止
    controls.currentPosition:double; 当前进度
    controls.currentPositionString:string; 当前进度,字符串格式。如“00:23”
    controls.fastForward; 快进
    controls.fastReverse; 快退
    controls.next; 下一曲
    controls.previous; 上一曲
    [settings] wmp.settings //播放器基本设置
    settings.volume:integer; 音量,0-100
    settings.autoStart:Boolean; 是否自动播放
    settings.mute:Boolean; 是否静音
    settings.playCount:integer; 播放次数
    [currentMedia] wmp.currentMedia //当前媒体属性
    currentMedia.duration:double; 媒体总长度
    currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24”
    currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Descrīption"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址
    currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
    currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
    [currentPlaylist] wmp.currentPlaylist //当前播放列表属性
    currentPlaylist.count:integer; 当前播放列表所包含媒体数
    currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia

  • 网站相关

    2008-10-09 13:16:14

    暂无