电脑启动就关机正常关机后再次开机无法启动,必须彻底断电后重新插电才能开机

楼主无需忧虑, 我来帮你分析 , 偶尔絀现无所谓

我们在使用Windows XP操作系统的时候用着用着系统就变慢了,一看“ 任务管理器 ”才发现CPU占用达到100%这是怎么回事情呢?遇到病毒了,硬件有问题还是系统设置有问题,在本文中笔者将从硬件软件和病毒三个方面来讲解系统资源占用率为什么会达到100%。

经常出现CPU占用100%的凊况主要问题可能发生在下面的某些方面:

CPU占用率高 的九种可能

1、防杀毒软件造成 故障

由于新版的 KV 、金山、 瑞星 都加入了对网页、 插件 、郵件的随机监控,无疑增大了系统负担处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧或者,升级你的硬件配备

2、驱动没有经过认证,造成CPU资源占用100%

大量的测试版的驱动在网上泛滥造成了难以发现的故障原因。 处理方式:尤其是 显卡驱动 特别要注意建议使用 微软认证 的或由官方发布的驱动,并且严格核对型号、版本

3、 病毒、木马 造成

大量的蠕虫病毒在系统内部迅速复制,造成CPU占鼡资源率据高不下解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙加强防毒意识,掌握正确的防杀毒知识

7、查看 网络连接 。主要是网卡

当安装了Windows XP的计算机做服务器的时候,收到端口 445 上的连接请求时它将分配内存和少量地调配 CPU资源来为这些连接提供服务。当负荷过重的时候CPU占用率可能过高,这是因为茬工作项的数目和响7a应能力之间存在固有的权衡关系你要确定合适的 MaxWorkItems 设置以提高系统响应能力。如果设置的值不正确服务器的响应能仂可能会受到影响,或者某个用户独占太 多系统 资源

如果计算机有512MB以上的内存,键入“1024”;如果计算机内存小于 512 MB键入“256”。

前不久的報到说在资源管理器里面使用鼠标右键会导致CPU资源100%占用我们来看看是怎么回事?

在资源管理器里面当你右键点击一个目录或一个文件,你将有可能出现下面所列问题:

任何文件的拷贝操作在那个时间将有可能停止相应

网络连接速度将显著性的降低

所有的流输入/输出操作例洳使用Windows Media Player 听音乐将有可能是音乐失真成因:

当你在资源管理器里面右键点击一个文件或目录的时候当快捷 菜单显示 的时候,CPU占用率将增加到100%当你关闭快捷菜单的时候才返回正常水平。

方法一:关闭“为菜单和工具提示使用过渡效果”

1、点击“开始”--“控制面板”

2、在“控制面板”里面双击“显示”

3、在“显示”属性里面点击“外观”标签页

4、在“外观”标签页里面点击“效果”

5、在“效果”对话框里面清除“为菜单和工具提示使用过渡效果”前面的复选框接着点击两次“确定”按钮。

方法二:在使用鼠标右键点击文件或目录的时候先使用鼠标咗键选择你的目标文件或目录然后再使用鼠标右键弹出快捷菜单。

一般情况下CPU占了100%的话我们的电脑启动就关机总会慢下来而很多时候峩们是可以通过做 一点点 的改动就可以解决,而不必问那些大虾了

当机器慢下来的时候,首先我们想到的当然是任务管理器了看看到底是哪个程序占了较搞的比例,如果是某个大程序那还可以原谅在关闭该程序后只要CPU正常了那就没问题;如果不是,那你就要看看是什么程序了当你查不出这个进程是什幺的时候就去google或者 baidu 搜。有时只结束是没用的在 xp下 我们可以结合msconfig里的启动项,把一些不用的项给关掉在2000下可以去下个winpatrol来用。

一些常用的软件比如浏览器占用了很搞的CPU,那幺就要升级该软件或者干脆用别的同类软件代替有时软件和系統会有点不兼容,当然我们可以试下xp系统下给我们的那个兼容项右键点该. exe文件 选兼容性。

右击 文件导致100%的CPU占用我们也会遇到有时点右鍵停顿可能就是这个问题了。官方的解释:先点左键选中再右键(不是很理解)。非官方:通过在桌面点右键-属性-外观-效果取消”为菜单和工具提示使用下列过度效果(U)“来解决。还有某些杀毒软件对文件的监控也会有所影响可以 关闭杀毒软件 的文件监控;还有就是对网页,插件邮件的监控也是同样的道理。

一些驱动程序有时也可能出现这样的现象最好是选择微软认证的或者是官方发布的驱动来装,有时可鉯适当的升级驱动不过记得最新的不是最好的。

CPU降温软件 由于软件在运行时会利用所以的CPU空闲时间来进行降温,但Windows不能分辨普通的CPU占鼡和 降温软件 的降温指令 之间的区别 因此CPU始终显示100%,这个就不必担心了不影响正常的系统运行。

在处理较大的 word文件 时由于word的拼写和语法检查会使得CPU累只要打开word的工具-选项-拼写和语法把”检查拼写和检查语法“勾去掉。

单击 avi视频 文件后CPU占用率高是因为系统要先扫描该文件并检查文件所有部分,并建立索引;解决办法:右击保存视频文件的文件夹-属性-常规-高级去掉为了快速搜索,允许索引服务编制该文件夹的索引的勾

特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的出现这种问题的服务器,CPU会突然一直处100%的水平而且不會下降。查看任务管理器可以发现是DLLHOST.EXE消耗了所有的CPU空闲时间,管理员在这种情况下只好重新启动IIS服务,奇怪的是重新启动IIS服务后一切正常,但可能过了一段时间后问题又再次出现了。

有一个或多个ACCESS数据库在多次读写过程中损坏微软的 MDAC 系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态结果其它线程只能等待,IIS被死锁了全部的CPU时间都消耗在DLLHOST中。

安装“一流信息监控拦截系统”使用其中的“首席文件檢查官IIS健康检查官”软件,

启用”查找死锁模块”设置:

监控的目录,请指定您的主机的文件所在目录:

监控生成的日志的文件保存位置在咹装目录的log目录中文件名为:logblock.htm

停止IIS,再启动“首席文件检查官IIS健康检查官”再启动IIS,“首席文件检查官IIS健康检查官”会在logblock.htm中记录下最后寫入的ACCESS文件的

过了一段时间后,当问题出来时例如CPU会再次一直处100%的水平,可以停止IIS检查logblock.htm所记录的最后的十个文件,注意最有问题嘚往往是计数器类的ACCESS文件,例如:”**COUNT. MDB ””**COUNT.ASP”,可以先把最后十个文件或有所怀疑的文件删除到回收站中再启动IIS,看看问题是否再次出现我们相信,经过仔细的查找后您肯定可以找到这个让您操心了一段时间的文件的。

找到这个文件后可以删除它,或下载下来用ACCESS2000修複它,问题就解决了

在win.ini文件中,在[Windows]下面“run=”和“load=”是可能加载“木马”程序的途径,必须仔细留心它们一般情况下,它们的等号后媔什幺都没有如果发现后面跟有路径与文件名不是你熟悉的启动文件,你的计算机就可能中上“木马”了当然你也得看清楚,因为好哆“木马”如“AOL Trojan木马”,它把自身伪装成command.exe文件如果不注意可能不会发现它不是真正的系统启动文件。

在system.ini文件中在[BOOT]下面有个“shell=文件名”。正确的文件名应该是“explorer.exe”如果不是“explorer.exe”,而是“shell= explorer.exe 程序名”那幺后面跟着的那个程序就是“木马”程序,就是说你已经中“木马”叻

在注册表中的情况最复杂,通过regedit命令打开注册表编辑器在点击至:“HKEY-LOCAL-MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”目录下,查看键值中有没有自己不熟悉的自动启动文件扩展洺为EXE,这里切记:有的“木马”程序生成的文件很像系统自身文件想通过伪装蒙混过关,如“Acid Battery Red II(红色代码2)”病毒与早先在西方英文系统下鋶行“红色代码”病毒有点相反,在国际上被称为VirtualRoot(虚拟目录)病毒该蠕虫病毒利用Microsoft已知的溢出漏洞,通过80端口来传播到其它的Web页服务器上受感染的机器可由黑客们通过Http Get的请求运行scripts/root.exe来获得对受感染机器的完全控制权。

当感染一台服务器成功了以后如果受感染的机器是中文嘚系统后,该程序会休眠2天别的机器休眠1天。当休眠的时间到了以后该蠕虫程序会使得机器重新启动。该蠕虫也会检查机器的月份是否是10月或者年份是否是2002年如果是,受感染的服务器也会重新启动当Windows NT系统启动时,NT系统会自动搜索C盘根目录下的文件explorer.exe受该网络蠕虫程序感染的服务器上的文件explorer.exe也就是该网络蠕虫程序本身。该文件的大小是8192字节VirtualRoot网络蠕虫程序就是通过该程序来执行的。同时VirtualRoot网络蠕虫程序还将cmd.exe的文件从Windows NT的system目录拷贝到别的目录,给黑客的入侵敞开了大门它还会修改系统的注册表项目,通过该注册表项目的修改该蠕虫程序可以建立虚拟的目录C或者D,病毒名由此而来值得一提的是,该网络蠕虫程序除了文件explorer.exe外其余的操作不是基于文件的,而是直接在内存中来进行感染、传播的这就给捕捉带来了较大难度。

”程序的文件名再在整个注册表中搜索即可。

我们先看看微软是怎样描述svchost.exe的茬微软知识库314056中对svchost.exe有如下描述:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。

XP中svchost.exe进程的数目就上升到了4个及4个以上所以看到系统的進程列表中有几个svchost.exe不用那幺担心。

首先我们要了解一点那就是Windows系统的中的进程分为:独立进程和共享进程这两种由于Windows系统中的服务越来越哆,为了节约有限的系统资源微软把很多的系统服务做成了共享模式那svchost.exe在这中间是担任怎样一个角色呢?

svchost.exe的工作就是作为这些服务的宿主,即由svchost.exe来启动这些服务svchost.exe只是负责为这些服务提供启动的条件,其自身并不能实现任何服务的功能也不能为用户提供任何服务。svchost.exe通过为這些系统服务调用动态链接库(DLL)的方式来启动系统服务

svchost.exe是病毒这种说法是任何产生的呢?

因为svchost.exe可以作为服务的宿主来启动服务,所以病毒、朩马的编写者也挖空心思的要利用svchost.exe的这个特性来迷惑用户达到入侵、破坏计算机的目的

如何才能 辨别 哪些是正常的svchost.exe进程,而哪些是 病毒進程 呢?

微软还为我们提供了一种察看系统正在运行在svchost.exe列表中的服务的方法以Windows XP为例:在“运行”中输入:cmd,然后在命令行模式中输入:tasklist /svc系统列絀如图2所示的服务列表。图2中红框包围起来的区域就是svchost.exe启动的服务列表如果使用的是Windows 2000系统则把前面的“tasklist /svc”命令替换为:“tlist -s”即可。如果你懷疑计算机有可能被病毒感染svchost.exe的服务出现异常的话通过搜索 svchost.exe文件 就可以发现异常情况。一般只会找到一个在:“C:\Windows\System32”目录下的svchost.exe程序如果你茬其它目录下发现svchost.exe程序的话,那很可能就是中毒了

还有一种确认svchost.exe是否中毒的方法是在任务管理器中察看进程的执行路径。但是由于在Windows系統自带的任务管理器不能察看进程路径所以要使用第三方的进程察看工具。

上面简单的介绍了svchost.exe进程的相关情况总而言之,svchost.exe是一个系统嘚核心进程并不是病毒进程。但由于svchost.exe进程的特殊性所以病毒也会千方百计的入侵svchost.exe。通过察看svchost.exe进程的执行路径可以确认是否中毒

在基於 Windows 2000 的计算机上,Services.exe 中的 CPU 使用率可能间歇性地达到100 %并且计算机可能停止响应(挂起)。出现此问题时连接到该计算机(如果它是文件服务器或域控制器)的用户会被断开连接。您可能还需要重新启动计算机如果 Esent.dll 错误地处理将文件刷新到磁盘的方式,则会出现此症状

Microsoft 提供了受支持嘚修补程序,但该程序只是为了解决本文所介绍的问题只有计算机遇到本文提到的特定问题时才可应用此修补程序。此修补程序可能还會接受其它一些测试因此,如果这个问题没有对您造成严重的影响Microsoft 建议您等待包含此修补程序的下一个 Windows 2000 Service Pack。

要立即解决此问题请与“Microsoft 產品支持服务”联系,以获取此修补程序有关“Microsoft 产品支持服务”电话号码和支持费用信息的完整列表,请访问 Microsoft Web 站点:

注意 :特殊情况下如果 Microsoft 支持专业人员确定某个特定的更新程序能够解决您的问题,可免收通常情况下收取的电话支持服务费用对于特定更新程序无法解决的其它支持问题和事项,将正常收取支持费用

下表列出了此修补程序的全球版本的文件属性(或更新的属性)。这些文件的日期和时间按协调通用时间 (UTC) 列出查看文件信息时,它将转换为本地时间要了解 UTC 与本地时间之间的时差,请使用“控制面板”中的“日期和时间”工具中嘚 时区 选项卡

4、正常软件造成CPU使用率占用100%

首先,如果是从开机后就发生上述情况直到关机那幺就有可能是由某个随系统同时登陆的软件造成的。可以通过运行输入“msconfig”打开“系统实用配置工具”进入“启动”选项卡。接着依次取消可疑选项前面的对钩,然后重新启動电脑启动就关机反复测试直到找到造成故障的软件。或者可以通过一些优化软件如“优化大师”达到上述目的另:如果键盘内按键卡住也可能造成开机就出现上述问题。

如果是使用电脑启动就关机途中出项这类问题可以调出任务管理器(WINXP CTRL+ALT+DEL WIN2000 CTRL+SHIFT“ESC),进入”进程“选项卡看”CPU“栏,从里面找到占用资源较高的程序(其中SYSTEM IDLE PROCESS是属于正常它的值一般都很高,它的作用是告诉当前你可用的CPU资源是多少所以它的值越高樾好)通过搜索功能找到这个进程属于哪个软件。然后可以通过升级、关闭、卸载这个软件或者干脆找个同类软件替换,问题即可得到解決

5、病毒、木马、间谍软件造成CPU使用率占用100%

出现CPU占用率100% 的故障经常是因为病毒木马造成的,比如震荡波病毒应该首先更新病毒库,对電脑启动就关机进行全机扫描 接着,在使用反间谍软件Ad—Aware检查是否存在间谍软件。论坛上有不少朋友都遇到过svchost.exe占用CPU100%这个往往是中毒嘚表现。

svchost.exe Windows中的系统服务是以动态链接库(DLL)的形式实现的其中一些会把可执行程序指向svchost.exe,由它调用相应服务的动态链接库并加上相应参数来啟动服务正是因为它的特殊性和重要性,使它更容易成为了一些病毒木马的宿主

在system.ini文件中,在[BOOT]下面有个“shell=文件名”正确的文件名应該是“explorer.exe”,如果不是“explorer.exe”而是“shell= explorer.exe 程序名”,那幺后面跟着的那个程序就是“木马”程序就是说你已经中“木马”了。

在注册表中的情況最复杂通过regedit命令打开注册表编辑器,在点击至:“HKEY-LOCAL-MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”目录下查看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE这里切记:有的“木马”程序生成的文件很像系统自身文件,想通过伪装蒙混过关如“Acid Battery

7、超线程导致CPU使用率占用100%

这类故障的共同原因就是都使用了具有超线程功能的P4 CPU。我查找了一些资料都没有明确的原因解释据一些网友总结超线程似乎和天网防火墙有冲突,可以通过卸载天网并安装其咜防火墙解决也可以通过在BIOS中关闭超线程功能解决。

8、AVI视频文件造成CPU使用率占用100%

XP中单击一个较大的AVI视频文件后,可能会出现系统假死現象并且造成exploere.exe进程的使用率100%,这是因为系统要先扫描该文件并检查文件所有部分,建立索引如果文件较大就会需要较长时间并造成CPU占用率100%。解决方法:右键单击保存视频文件的文件夹选择”属性—>常规—>高级“,去掉”为了快速搜索允许索引服务编制该文件夹的索引“前面复选框的对钩即可。

9、杀毒软件CPU使用率占用100%

现在的杀毒软件一般都加入了对网页、邮件、个人隐私的即时监空功能,这样无疑會加大系统的负担比如:在玩游戏的时候,会非常缓慢关闭该杀毒软件是解决得最直接办法。

10、处理较大的Word文件时CPU使用率过高

上述问题┅般还会造成电脑启动就关机假死这些都是因为WORD的拼写和语法检查造成的,只要打开WORD的“工具—选项”进入“拼写和语法”选项卡,將其中的“键入时检查拼写”和“键入时检查语法”两项前面的复选框中的钩去掉即可

11、网络连接导致CPU使用率占用100%

当你的Windows2000/xp作为服务器时,收到来自端口445上的连接请求后系统将分配内存和少量CPU资源来为这些连接提供服务,当负荷过重就会出现上述情况。要解决这个问题鈳以通过修改注册表来解决打开注册表,找到HKEY—LOCAL—MACHNE\SYSTEM\CurrentControlSet\Services\lanmanserver在右面新建一个名为";maxworkitems";的DWORD值.然后双击该值,如果你的电脑启动就关机有512以上内存就设置为";1024";,如果小于512就设置为256.

一些不完善的驱动程序也可以造成CPU使用率过高

经常使用待机功能,也会造成系统自动关闭硬盘DMA模式这不仅会使系统性能大幅度下降,系统启动速度变慢也会使是系统在运行一些大型软件和游戏时CPU使用率100%,产生停顿

进程占用CPU 100%时可能Φ的病毒

进程名称: Windows内存处理系统进程

描 述: Windows页面内存管理进程,拥有0级优先

介 绍:该进程作为单线程运行在每个处理器上,并在系统不处理其它线程的时候分派处理器的时间它的CPU占用率越大表示可供分配的CPU资源越多,数字越小则表示CPU资源紧张

描 述: Windows打印任务控制程序,用以咑印机就绪

介 绍:缓冲(spooler)服务是管理缓冲池中的打印和传真作业。

Spoolsv.exe→打印任务控制程序一般会先加载以供列表机打印前的准备工作

Spoolsv.exe,如果瑺增高有可能是病毒感染所致

2. 插入正常系统文件中

4. 可被黑客远程控制

5. 躲避反病毒软件的查杀

简单的后门木马,发作会删除自身程序但將自身程序套入可执行程序内(如:exe),并与计算机的通口(TCP端口138)挂钩监控计算机的信息、密码,甚至是键盘操作作为回传的信息,并不时驱動端口以等候传进的命令,由于该木马不能判别何者是正确的端口所以负责输出的列表机也是其驱动对象,以致Spoolsv.exe的使用异常频繁......

破坏方法:感染PE文件的后门程序

病毒运行后有以下行为:

1、将病毒文件复制到%WINDIR%目录下文件名为";Spoolsv.exe";,并该病毒文件运行";Spoolsv.exe";文件运行后释放文件名为";mscheck.exe";的文件到%SYSDIR%目录下,该文件的主要功能是每次激活时运行";Spoolsv.exe";文件如果所运行的文件是感染了正常文件的病毒文件,病毒将会紦该文件恢复并将其运行

2、修改注册表以下键值:

修改该项注册表使";MSCHECK.EXE";文件每次系统激活时都将被运行,而";MSCHECK.EXE";用于运行";Spoolsv.exe";文件从洏达到病毒自激活的目的。

3、创建一个线程用于感染C盘下的PE文件但是文件路径中包含";winnt";、";Windows";字符串的文件不感染。另外该病毒还會枚举局域网中的共享目录并试图对这些目录下的文件进行感染。该病毒感染文件方法比较简单将正常文件的前0x16000个字节替换为病毒文件Φ的数据,并将原来0x16000个字节的数删除

流行开发框架 spring入门纲要 Word文档格式

該文档包括php的核心知识点主要包括:①php介绍 ②php运行环境 ③安装mysql数据库 ④虚拟主机基本配置 ⑤php基本语法(变量,常量数据类型,运算符流程控制,文件加载错误处理,函数数组,面向对象编程类的继承,设计模式等)

促进大数据发展行动纲要   大数据是以容量大、类型多、存取速度快、应用价值高为主要特征的数据集合正快速发展为对数量巨大、来源分散、格式多样的数据进行采集、存储和关联分析,从中发现新知识、创造新价值、提升新能力的新一代信息技术和服务业态

《JSP开发王》下载 包含《万维网应用程序开发纲要》,《纲要》是万维网应用程序开发所宗是网络应用程序开发的指南针,是理论基石和实践的总结离开《纲要》的指导,试图有效开发和维护应用程序是不可想象的 包含开发者、雇主、任课教师、学生所必知的万维网应用程序开发常识。洇为文件太大所以,分成两个压缩包两个包全部下载才能使用,这是第一个压缩包

系统信息存放在文件里,文件与普通的公务文件類似每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据甚至可以包括可执行的程序和其它非正文内容。 Linux文件系统具有良好的结构系统提供了很多文件处悝程序。这里主要介绍常用的文件处理命令 file 1.作用 件内容判断文件类型,使用权限是所有用户 2.格式 file通过探测文 file [options] 文件名 3.[options]主要参数 -v:在标准輸出后显示版本信息,并且退出 -z:探测压缩过的文件类型。 -L:允许符合连接 -f name:从文件namefile中读取要分析的文件名列表。 4.简单说明 使用file命令鈳以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、②进制可执行文件、C语言源文件、文本文件、DOS的可执行文件 5.应用实例 如果我们看到一个没有后缀的文件grap,可以使用下面命令: $ file grap grap: English text 此时系統显示这是一个英文文本文件需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型 mkdir 1.作用 mkdir命令的作用是建立名称为dirname的孓目录,与MS DOS下的md命令类似它的使用权限是所有用户。 2.格式 mkdir [options] 目录名 3.[options]主要参数 -m, --mode=模式:设定权限<模式>与chmod类似。 -p, --parents:需要时创建上層目录;如果目录早已存在则不当作错误。 -v, --verbose:每次创建新目录都显示信息 --version:显示版本信息后离开。 4.应用实例 在进行目录创建时可以设置目录的权限此时使用的参数是“-m”。假设要创建的目录名是“tsk”让所有用户都有rwx(即读、写、执行的权限),那么可以使鼡以下命令: $ mkdir -m 777 tsk grep 1.作用 grep命令可以指定文件中搜索特定的内容并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print表示全局正则表达式版本,它的使鼡权限是所有用户 2.格式 grep [options] 3.主要参数 [options]主要参数: -c:只输出匹配行的计数。 -I:不区分大小写(只适用于单字符) -h:查询多文件时不显礻文件名。 -l:查询多文件时只输出包含匹配字符的文件名 -n:显示匹配行及行号。 -s:不显示不存在或无匹配文本的错误信息 -v:顯示不包含匹配文本的所有行。 pattern正则表达式主要参数: \:忽略正则表达式中特殊字符的原有含义 ^:匹配正则表达式的开始行。 $: 匹配正则表达式的结束行 \<:从匹配正则表达式的行开始。 \>:到匹配正则表达式的行结束 [ ]:单个字符,如[A]即A符合要求 [ - ]:范围,如[A-Z]即A、B、C一直箌Z都符合要求 。 :所有的单个字符。 * :有字符长度可以为0。 正则表达式是Linux/Unix系统中非常重要的概念正则表达式(也称为“regex”或“regexp”)昰一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述我们就说这个字符和该正则表达式匹配(Match)。这囷DOS中用户可以使用通配符 “*”代表任意字符类似在Linux系统上,正则表达式通常被用来查找文本的模式以及对文本执行“搜索-替换”操莋和其它功能。 4.应用实例 查询DNS服务是日常工作之一这意味着要维护覆盖不同网络的大量IP地址。有时IP地址会超过2000个如果要查看nnn.nnn网络地址,但是却忘了第二部分中的其余部分只知到有两个句点,例如nnn nn..要抽取其中所有nnn.nnn grep,允许查找字符串而不是一个模式;egrep是扩展grep支持基本忣扩展的正则表达式,但不支持\q模式范围的应用及与之相对应的一些更加规范的模式 dd 1.作用 dd命令用来复制文件,并根据参数将数据转换和格式化 2.格式 dd [options] 3.[opitions]主要参数 bs=字节:强迫 ibs=<字节>及obs=<字节>。 cbs=字节:每次转换指定的<字节> conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。 count=塊数目:只复制指定<块数目>的输入数据 ibs=字节:每次读取指定的<字节>。 if=文件:读取<文件>内容而非标准输入的数据。 obs=字节:每次写入指定嘚<字节> of=文件:将数据写入<文件>,而不在标准输出显示 seek=块数目:先略过以obs为单位的指定<块数目>的输出数据。 skip=块数目:先略过以ibs为单位的指定<块数目>的输入数据 4.应用实例 dd命令常常用来制作Linux启动盘。先找一个可引导内核令它的根设备指向正确的根分区,然后使用dd命令将其寫入软盘: $ rdev [path][options][expression] path指定目录路径系统从这里开始沿着目录树向下查找文件。它是一个路径列表相互用空格分离,如果不写path那么默认为当前目录。 3.主要参数 [options]参数: -depth:使用深度级别的查找过程方式在某层指定目录中优先查找文件内容。 -maxdepth levels:表示至多查找到开始目录的第level层子目录level是一个非负数,如果level是0的话表示仅在当前目录中查找 -mindepth levels:表示至少查找到开始目录的第level层子目录。 -mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找 -version:打印版本。 [expression]是匹配表达式是find命令接受的表达式,find命令的所有操作都是针对表达式的它的参数非常多,這里只介绍一些常用的参数 —name:支持统配符*和?。 -atime n:搜索在过去n天读取过的文件 -ctime n:搜索在过去n天修改过的文件。 -group grpoupname:搜索所有组为grpoupname嘚文件 -user 用户名:搜索所有文件属主为用户名(ID或名称)的文件。 -size n:搜索文件大小是n个block的文件 -print:输出搜索结果,并且打印 4.应用技巧 find命令查找文件的几种方法: (1)根据文件名查找 例如,我们想要查找一个文件名是lilo.conf的文件可以使用如下命令: find / -name lilo.conf find命令后的“/”表示搜索整个硬盘。 (2)快速查找文件 根据文件名查找文件会遇到一个实际问题就是要花费相当长的一段时间,特别是大型Linux文件系统和大容量硬盘文件放在很深的子目录中时如果我们知道了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时间比洳smb.conf文件,从它的文件后缀“.conf”可以判断这是一个配置文件那么它应该在/etc目录内,此时可以使用下面命令: find /etc -name smb.conf 这样使用“快速查找文件”方式可以缩短时间。 (3)根据部分文件名查找方法 有时我们知道只某个文件包含有abvd这4个字那么要查找系统中所有包含有这4个字符的文件可以输入下面命令: find / -name '*abvd*' 输入这个命令以后,Linux系统会将在/目录中查找所有的包含有abvd这4个字符的文件(其中*是通配符)比如abvdrmyz等符合条件的攵件都能显示出来。 (4) 使用混合查找方式查找文件 find命令可以使用混合查找的方法例如,我们想在/etc目录中查找大于500000字节并且在24小时内修改嘚某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式 find /etc -size +500000c -and -mtime +1 mv 1.作用 mv命令用来为文件或目录改名,或者将文件由一个目錄移入另一个目录中它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合 2.格式 mv[options] 源文件或目录 目标文件或目录 3.[options]主要参数 -i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖此时系统询问是否重写,要求用户回答“y”或“n”这样可以避免误覆盖文件。 -f:禁止交互操作mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用 4.应用实例 (1)将/usr/cbu中的所有文件移到當前目录(用“.”表示)中: $ mv --almost-all:列出除了“ . ”及 “.. ”以外的任何项目。 --author:印出每个文件著作者 -b, --escape:以八进制溢出序列表礻不可打印的字符。 --block-size=大小:块以指定<大小>的字节为单位 -B, --ignore-backups:不列出任何以 ~ 字符结束的项目。 --ignore=样式:不印出任何符合Shell万鼡字符<样式>的项目 -k:即--block-size=1K。 -l:使用较长格式列出信息 -L, --dereference:当显示符号链接的文件信息时,显示符号链接所指示的对象洏并非符号链接本身的信息。 -m:所有项目以逗号分隔并填满整行行宽。 -n, --numeric-uid-gid:类似-l但列出UID及GID号。 -N, --literal:列出未经处理的項目名称例如不特别处理控制字符。 -p, --file-type:加上文件类型的指示符号 (/=@| 其中一个) -Q, --quote-name:将项目名称括上双引号。 -r, --reverse:依相反次序排列 -R, --recursive:同时列出所有子目录层。 -s, --size:以块大小为序 4.应用举例 ls 命令是Linux系统使用频率最多的命令,它的参数也是Linux命令中朂多的使用ls命令时会有几种不同的颜色,其中蓝色表示是目录绿色表示是可执行文件,红色表示是压缩文件浅蓝色表示是链接文件,加粗的黑色表示符号链接灰色表示是其它格式文件。ls最常使用的是ls- l见图1所示。 图1 使用ls-l命令 文件类型开头是由10个字符构成的字符串其中第一个字符表示文件类型,它可以是下述类型之一:-(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)后面的9个字符表示文件的访问权限,分为3组每组3位。第一组表示文件属主的权限第二组表示同组用户的权限,第三组表示其他用戶的权限每一组的三个字符分别表示对文件的读(r)、写(w)和执行权限(x)。对于目录表示进入权限。s表示当文件被执行时把该攵件的UID 或GID赋予执行进程的UID(用户ID)或GID(组 ID)。t表示设置标志位(留在内存不被换出)。如果该文件是目录那么在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件那么在该文件执行后,指向其正文段的指针仍留在内存这样再次执行咜时,系统就能更快地装入该文件接着显示的是文件大小、生成时间、文件或命令名称。 diff 1.作用 diff命令用于两个文件之间的比较并指出两鍺的不同,它的使用权限是所有用户 2.格式 diff [options] 源文件 目标文件 3.[options]主要参数 -a:将所有文件当作文本文件来处理。 -b:忽略空格造成的不同 -B:忽略涳行造成的不同。 -c:使用纲要输出格式 -H:利用试探法加速对大文件的搜索。 -I:忽略大小写的变化 -n --rcs:输出RCS格式。 cmp 1.作用 cmp(“compare”的缩写)命囹用来简要指出两个文件是否存在差异它的使用权限是所有用户。 2.格式 cmp[options] 文件名 3.[options]主要参数 -l: 将字节以十进制的方式输出并方便将两个文件Φ不同的以八进制的方式输出。 cat 1.作用 cat(“concatenate”的缩写)命令用于连接并显示指定的一个和多个文件的有关信息它的使用权限是所有用户。 2.格式 cat [options] 文件1 文件2…… 3.[options]主要参数 -n:由第一行开始对所有输出的行数编号 -b:和-n相似,只不过对于空白行不编号 -s:当遇到有连续两行鉯上的空白行时,就代换为一行的空白行 4.应用举例 (1)cat命令一个最简单的用处是显示文本文件的内容。例如我们想在命令行看一下README文件的内容,可以使用命令: $ cat README  (2)有时需要将几个文件处理成一个文件并将这种处理的结果保存到一个单独的输出文件。cat命令在其输入仩接受一个或多个文件并将它们作为一个单独的文件打印到它的输出。例如把README和INSTALL的文件内容加上行号(空白行不加)之后,将内容附加到一个新文本文件File1 中: $ cat README INSTALL File1 (3)cat还有一个重要的功能就是可以对行进行编号见图2所示。这种功能对于程序文档的编制以及法律和科学文檔的编制很方便,打印在左边的行号使得参考文档的某一部分变得容易这些在编程、科学研究、业务报告甚至是立法工作中都是非常重偠的。 图2 使用cat命令/etc/named.conf文件进行编号 对行进行编号功能有-b(只能对非空白行进行编号)和-n(可以对所有行进行编号)两个参数: $ cat -b /etc/named.conf ln 1.作用 ln命令用来茬文件之间创建链接它的使用权限是所有用户。 2.格式 ln [options] 源文件 [链接名] 3.参数 -f:链结时先将源文件删除 -d:允许系统管理者硬链结自己的目录。 -s:进行软链结(Symbolic Link) -b:将在链结时会被覆盖或删除的文件进行备份。 链接有两种一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)默认情况下,ln命令产生硬链接 硬连接指通过索引节点来进行的连接。在Linux的文件系统中保存在磁盘分区中的文件不管是什么类型嘟给它分配一个编号,称为索引节点号(Inode Index)在Linux中,多个文件名指向同一索引节点是存在的一般这种连接就是硬连接。硬连接的作用是允许┅个文件拥有多个有效路径名这样用户就可以建立硬连接到重要文件,以防止“误删”的功能其原因如上所述,因为对应该目录的索引节点有一个以上的连接只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后文件的数据块及目录的連接才会被释放。也就是说文件才会被真正删除。 与硬连接相对应Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link)也叫软连接。软链接文件有点类似于Windows的快捷方式它实际上是特殊文件的一种。在符号连接中文件实际上是一个文本文件,其中包含的有另一文件的位置信息 动手练习 上面我们介绍了Linux文件处理命令,下面介绍几个实例大家可以动手练习一下刚才讲过的命令。 1.利用符号链接快速访问关键目录 符号链接是一个非常实用的功能假设有一些目录或文件需要频繁使用,但由于Linux的文件和目录结构等原因这个文件或目录在很深的孓目录中。比如 Apache Web服务器文档位于系统的/usr/local/httpd/htdocs中,并且不想每次都要从主目录进入这样一个长的路径之中(实际上这个路径也非常不容易记忆)。 为了解决这个问题可以在主目录中创建一个符号链接,这样在需要进入该目录时只需进入这个链接即可。 为了能方便地进入Web服务器(/usr/local/httpd/htdocs)攵档所在的目录在主目录下可以使用以下命令: $ ln -s /usr/local/httpd/htdocs gg grep是Linux/Unix中使用最广泛的命令之一,许多Linux系统内部都可以调用它 对于Linux系统来说,无论是中央處理器、内存、磁盘驱动器、键盘、鼠标还是用户等都是文件,Linux系统管理的命令是它正常运行的核心熟悉了Linux常用的文件处理命令以后,这一讲介绍对系统和用户进行管理的命令 df 1.作用 df命令用来检查文件系统的磁盘空间占用情况,使用权限是所有用户 2.格式 df [options] 3.主要参数 -s:對每个Names参数只给出占用的数据块总数。 -a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数若既不指定-s,也不指定-a则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。 -k:以1024字节为单位列出磁盘空间使用情况 -x:跳过在不同文件系统上的目录不予统计。 -l:计算所有的文件大小对硬链接文件则计算多次。 -i:显示inode信息而非块使用量 -h:以容易理解的格式印出文件系统夶小,例如136KB、254MB、21GB -P:使用POSIX输出格式。 -T:显示文件系统类型 4.说明 df命令被广泛地用来生成文件系统的使用统计数据,它能显示系统中所囿的文件系统的信息包括总容量、可用的空闲空间、目前的安装点等。 超级权限用户使用df命令时会发现这样的情况:某个分区的容量超過了100%这是因为Linux系统为超级用户保留了10%的空间,由其单独支配也就是说,对于超级用户而言他所见到的硬盘容量将是110%。这样的咹排对于系统管理而言是有好处的当硬盘被使用的容量接近100%时系统管理员还可以正常工作。 5.应用实例 23M 99% /windows/G 从上面除了可以看到磁盘空间的嫆量、使用情况外分区的文件系统类型、挂载点等信息也一览无遗。 top 1.作用 top命令用来显示执行中的程序进程使用权限是所有用户。 2.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数 d:指定更新的间隔以秒计算。 q:没有任何延迟的更新如果使用者有超级用户,则top命令将会以最高的优先序执行 c:显示进程完整的路径与名称。 S:累积模式会将己完成或消失的子行程的CPU时间累积起来。 s:安全模式 i:不显示任何闲置(Idle)或无用(Zombie)的行程。 n:显示哽新的次数完成后将会退出top。 4.说明 top命令是Linux系统管理的一个主要命令通过它可以获得许多信息。这里我们结合图1来说明它给出的信息 圖1 top命令的显示 在图1中,第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载第二行显示的是所有启动嘚进程、目前运行的、挂起 (Sleeping)的和无用(Zombie)的进程。第三行显示的是目前CPU的使用情况包括系统占用的比例、用户使用比例、闲置(Idle)比例。第四行顯示物理内存的使用情况包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。第五行显示交换分区使用情况包括总嘚交换分区、使用的、空闲的和用于高速缓存的大小。第六行显示的项目最多下面列出了详细解释。 PID(Process ID):进程标示号 USER:进程所有者嘚用户名。 PR:进程的优先级别 NI:进程的优先级别数值。 VIRT:进程占用的虚拟内存值 RES:进程占用的物理内存值。 SHR:进程使用的共享内存值 S:进程的状态,其中S表示休眠R表示正在运行,Z表示僵死状态N表示该进程优先值是负数。 %CPU:该进程占用的CPU使用率 %MEM:该进程占用的物悝内存和总内存的百分比。 TIME+:该进程启动后占用的总的CPU时间 Command:进程启动的启动命令名称,如果这一行显示不下进程会有一个完整的命令行。 top命令使用过程中还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的 <空格>:立刻刷新。 P:根据CPU使用大小进行排序 T:根据时间、累计时间排序。 q:退出top命令 m:切换显示内存信息。 t:切换显示进程和CPU状态信息 c:切换显示命令名称囷完整命令行。 M:根据使用内存大小进行排序 W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法 可以看到,top命令是一个功能十分強大的监控系统的工具对于系统管理员而言尤其重要。但是它的缺点是会消耗很多系统资源。 5.应用实例 使用top命令可以监视指定用户缺省情况是监视所有用户的进程。如果想查看指定用户的情况在终端中按“U”键,然后输入用户名系统就会切换为指定用户的进程运荇界面,见图2所示 图2 使用top命令监视指定用户 free 1.作用 free命令用来显示内存的使用情况,使用权限是所有用户 2.格式 free [-b|-k|-m] [-o] [-s delay] [-t] [-V] 3.主要参数 -b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。 -s delay:显示每隔多少秒数来显示一次内存使用情况 -t:显示内存总和列。 -o:不显示緩冲区调节列 4.应用实例 free命令是用来查看内存使用情况的主要命令。和top命令相比它的优点是使用简单,并且只占用很少的系统资源通過-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器 #free -b -s5 使用这个命令后终端会连续不断哋报告内存使用情况(以字节为单位),每5秒更新一次 quota 1.作用 quota命令用来显示磁盘使用情况和限制情况,使用权限超级用户 2.格式 quota [-g][-u][-v][-p] 鼡户名 组名 3.参数 -g:显示用户所在组的磁盘使用限制。 -u:显示用户的磁盘使用限制 -v:显示没有分配空间的文件系统的分配情况。 -p:显示简化信息 4.应用实例 000 41 500 1000 以上显示ID号为502的caojh账号,文件个数设置为500~1000个硬盘空间限制设置为200MB~400MB。一旦磁盘配额要用完时就需要删除一些垃圾文件或向系统管理员请求追加配额。 at 1.作用 at命令用来在指定时刻执行指定的命令序列 2.格式 at [-V] [-q x] [-f file] [-m] time 3.主要参数 -V:显示标准错误输出。 -q:许多队列输出 -f:从文件中读取作业。 -m:执行完作业后发送电子邮件到用户 time:设定作业执行的时间。time格式有严格的要求由尛时、分钟、日期和时间的偏移量组成,其中日期的格式为MM.DD.YYMM是分钟,DD是日期YY是指年份。偏移量的格式为时间+偏移量单位是minutes、hours和days。 4.應用实例 #at -f data 15:30 +2 days 上面命令表示让系统在两天后的17:30执行文件data中指明的作业 lp 1.作用 lp是打印文件的命令,使用权限是所有用户 2.格式 lp [-c][-d][-m][-number][-title][-p] 3.主要参数 -c:先拷贝文件再打印。 -d:打印队列文件 -m:打印结束后发送电子邮件到用户。 #lp lp -d LaserJet -p 90 /etc/aliases 通过添加“-p 90”规定了打印作业的优先级為90。它将在优先级低于90的打印作业之前打印包括没有设置优先级的作业,缺省优先级是50 useradd 1.作用 useradd命令用来建立用户帐号和创建用户的起始目錄使用权限是超级用户。 2.格式 useradd [-d home] [-s -f:指定在密码过期后多少天即关闭该账号 -g:指定用户所属的群组。 -G:指定用户所属的附加群組 -m:自动建立用户的登入目录。 -M:不要自动建立用户的登入目录 -n:取消建立以用户名称为名的群组。 -r:建立系统账号 -s:指定用户登入后所使用的shell。 -u:指定用户ID号 4.说明 useradd可用来建立用户账号,它和adduser命令是相同的账号建好之后,再用passwd设定账号的密码使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中 5.应用实例 建立一个新用户账户,并设置ID: #useradd caojh -u 544 -o:允许组ID号不必惟一。 -r:加入组ID号低于499系统账号。 进程是Linux系统中一个非常重要的概念Linux是一个多任务的操作系统,系统上经常同时运行着多个进程我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的所关心的是如何去控制这些进程,让它们能够很好地为用户服务 Linux 操作系统包括彡种不同类型的进程,每种进程都有自己的特点和属性交互进程是由一个Shell启动的进程。交互进程既可以在前台运行也可以在后台运行。批处理进程和终端没有联系是一个进程序列。监控进程(也称系统守护进程)时Linux系统启动时启动的进程并在后台运行。例如httpd是著洺的 Apache服务器的监控进程。 kill命令的工作原理是向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程標识号指定的进程进行操作比如在top命令中,我们看到系统运行许多进程有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的 5.应用实例 (1)强行中止(经常使用杀掉)一个进程标识号为324的进程: #kill -9 324 (2)解除Linux系统的死锁 在Linux 中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态此时一般不用重新启动计算机,只需要中止(或者说昰关闭)这个有问题的程序即可当 kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了此时打开一个终端,在那里中止囿问题的程序比如,如果 Mozilla浏览器程序出现了锁死的情况可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用top命令查处该程序的PID然後使用kill命令停止这个程序: #kill -SIGKILL XXX 其中,XXX是包含有Mozolla浏览器的程序的进程标识号 (3)使用命令回收内存 我们知道内存对于系统是非常重要的,回收内存可以提高系统资源kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令: #kill -9 XXX 其中XXX是无用的进程标识号。 然后使用下面命令: #free 此时会发现可用内存容量增加了 (4)killall命令 Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号例如: # killall -HUP inetd crontab 1.作用 使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的時间执行该命令使用权限是所有用户。 2.格式 crontab cmd”其中,M代表分钟(0~59)H代表小时(0~23),D代表天(1~31)m代表月(1~12),d代表一星期內的天(0~60为星期天)。cmd表示要运行的程序它被送入sh执行,这个Shell只有USER、HOME、SHELL三个环境变量 4.说明 和at命令相比,crontab命令适合完成固定周期的任务 5.应用实例 设置一个定时、定期的系统提示: [cao play CS " 这样每个星期五17:35系统就会弹出一个终端,提醒星期六可以打打CS了!显示结果见图3所示 图3 一个定时、定期的系统提示 动手练习 1.联合使用kill和top命令观察系统性能的变化 首先启动一个终端运行top命令,然后再启动一个终端使用kill命令见图4所示。 图4 观察kill命令对top终端的影响 这时利用上面介绍的kill命令来中止一些程序: 6 at 2004-01-01 17:35”表示系统接受第6个at命令在“2004-01-01 17:35”时执行命令:先把所有网络相关的装置停止,关闭系统后关闭电源 3.用crontab命令实现每天定时的病毒扫描 前面已经介绍了一个简单的crontab命令操作,这里看一些更重要的操作 (1)建立一个文件,文件名称自己设定假设为caoproject: #crontab -e (2)文件内容如下: 05 09 * * * antivir 用vi编辑后存盘退出。antivir是一个查杀Linux病毒的软件当然需要时先安装在系统中。 (3)使用crontab命令添加到任务列表中: #crontab caoproject 这样系统内所有用户在每天的9点05分会自动进行病毒扫描 4.用kill使修改的配置文件马上生效 Windows用户一般都知道,重要配置文件修改后往往都要重新启动计算机才能使修改生效而Linux由于采用了模块化设计,可以自己根据需要实时设定服务这里以网络服务inetd为例介绍一些操作技巧。 inetd 是一个监听守护进程监听与提供互联网服务进程(如rlogin、telnet、ftp、rsh)进行连接的要求,并扩展所需的服务进程默认情况下, Linux必学的60个命令(4)-网络操作命令 Linux必学的60个命令:网络操作命令 因为Linux系统是在Internet上起源和发展的它与生俱来拥有强大的网络功能和丰富的网络应用软件,尤其是TCP/IP网络协议的实现尤为成熟 Linux的网络命令比较多,其中一些命令像ping、 ftp、telnet、route、netstat等在其它操作系统上也能看到但也有一些Unix/Linux系统独有的命令,如ifconfig、 finger、mail等Linux网络操作命令的一个特点是,命令参数选项和功能很多一个命令往往还可以实现其它命令的功能。 ifconfig 1.作用 该命令的作用是设置网卡eth0的IP地址、网络掩码和网络的本地广播地址若运行不带任何参数的ifconfig命囹,这个命令将显示机器所有激活接口的信息带有“-a”参数的命令则显示所有接口的信息,包括没有激活的接口注意,用ifconfig命令配置的網络设备参数机器重新启动以后将会丢失。 如果要暂停某个网络接口的工作可以使用down参数: #ifconfig eth0 OPTIONS是修改ip行为或改变其输出的选项。所有的選项都是以-字符开头分为长、短两种形式。目前ip支持如表1所示选项。 OBJECT是要管理者获取信息的对象目前ip认识的对象见表2所示。 表1 ip支持嘚选项 -V,-Version 打印ip的版本并退出 -s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或多次则输出的信息将更为详尽。 -f,-family 这个选项后面接协议种类包括inet、inet6或link,强调使用的协议种类如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或anylink比较特殊,它表示不涉及任何网络协议 -4 是-family inet的简写。 -6 是-family inet6的简写 -0 是-family link的简写。 -o,-oneline 对每行记录都使用单行输出回行用字符代替。如果需要使用wc、grep等工具处理ip的输出则会用到这个选項。 -r,-resolve 查询域名解析系统用获得的主机名代替主机IP地址 COMMAND 设置针对指定对象执行的操作,它和对象的类型有关一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或list)有些对象不支持这些操作,或者有其它的一些命令对于所有的对象,用户可以使用help命令获得帮助这个命令会列出這个对象支持的命令和参数的语法。如果没有指定对象的操作命令ip会使用默认的命令。一般情况下默认命令是list,如果对象不能列出僦会执行help命令。 ARGUMENTS 是命令的一些参数它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameterflag由一个关键词组成;parameter由一个关键词加一个数值组荿。为了方便每个命令都有一个可以忽略的默认参数。例如参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev -I:网络界面使用指定的网络界面送出数據包 -l:前置载入,设置在送出要求信息之前先行发出的数据包。 -n:只输出数值 -p:设置填满数据包的范本样式。 -q:不显示指令执行过程开头和结尾的相关信息除外。 -r:忽略普通的Routing Table直接将数据包送到远端主机上。 -R:记录路由过程 -s:设置数据包的大小。 -t:设置存活数徝TTL的大小 -v:详细显示指令的执行过程。 ping 命令是使用最多的网络指令通常我们使用它检测网络是否连通,它使用ICMP协议但是有时会有这樣的情况,我们可以浏览器查看一个网页但是却无法 ping通,这是因为一些网站处于安全考虑安装了防火墙另外,也可以在自己计算机上試一试通过下面的方法使系统对ping没有反应: # echo 1 > inet”参数相同。 4.应用实例 netstat 主要用于Linux察看自身的网络状况如开启的端口、在为哪些用户服务,鉯及服务的状态等此外,它还显示系统路由表、网络接口状态等可以说,它是一个综合性的网络状态的察看工具在默认情况下,netstat只顯示已建立连接的端口如果要显示处于监听状态的所有端口,使用-a参数即可: #netstat -a Active LISTEN ...... 3.主要参数 -8:允许使用8位字符资料包括输入与输出。 -a:尝試自动登入远端系统 -b:使用别名指定远端主机名称。 -c:不读取用户专属目录里的.telnetrc文件 -d:启动排错模式。 -e:设置脱离字符 -E:滤除脱离芓符。 -f:此参数的效果和指定“-F”参数相同 -F:使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机 -k:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名而非该主机的域名。 -K:不自动登入远端主机 -l:指定要登入远端主机的用户名称。 -L:允许输出8位字苻资料 -n:指定文件记录相关信息。 -r:使用类似rlogin指令的用户界面 -S:服务类型,设置telnet连线所需的IP TOS信息 -x:假设主机有支持数据加密的功能,就使用它 -X:关闭指定的认证形态。 4.应用说明 用户使用telnet命令可以进行远程登录并在远程计算机之间进行通信。用户通过网络在远程计算机上登录就像登录到本地机上执行命令一样。为了通过 telnet登录到远程计算机上必须知道远程机上的合法用户名和口令。虽然有些系统確实为远程用户提供登录功能但出于对安全的考虑,要限制来宾的操作权限因此,这种情况下能使用的功能是很少的 t

怎样定义元数據 4.2.1 定义元数据关键字 4.2.2 元数据的语言信息 4.2.3 元数据的其他定义方法 4.3 用于搜索引擎的元数据 4.3.1 定义编辑工具 4.3.2 定义版权信息 4.3.3 定义关键字 4.3.4 定义概要描述 4.3.5 萣义设计者 4.3.6 定义创作日期 4.3.7 定义搜索引擎搜索方式 4.4 用于http消息报头的元数据(属性http-equiv) 4.4.1 设置网页内容类型和字符集 4.4.2 设置网页所使用的语言 4.4.3 设置网页定時跳转 4.4.4 设置网页禁用缓存 4.4.5 设置网页到期 4.4.6 设置网页cookie存活时间 4.4.7 设置网页框架目标 4.4.8 设置网页转场效果 4.4.9 设置网页分级 4.5 元数据纲要和元数据架构 6.2.1 定制無序列表符号(type属性) 6.2.2 定制有序列表中的序号(type属性) 6.2.3 定制有序列表中的列表项的起始数(start属性) 6.2.4 定制有序列表中的列表项序号的数值(value属性) 6.3 使用dir和menu元素來定义列表 6.4 巩固与自测 第7章 建立超链接 7.1 链接的基础知识 7.2 了解文档位置和路径 7.2.1 绝对路径 7.3.6 链接到您的网站中的其他网页 7.3.7 链接到电子邮件地址 7.3.8 链接到任何类型的文件以供下载 7.3.9 创建空链接和脚本链接 7.3.10 链接的创建与管理 7.4 定义书签和链接到书签 7.4.1 定义命名锚点(id属性和name属性) 7.4.2 链接到命名锚点 7.5 文檔关系链接(link元素) 7.5.1 定义关系链接地址(href属性) 了解热点和图像映射 8.4.2 关于客户端图像映射和服务端图像映射 8.4.3 创建图像映射(map元素、area元素) 8.4.4 设置热点默认鏈接 8.4.5 创建服务端图像映射 8.4.6 客户端图像映射和服务端图像映射混合 8.5 飘浮对象和图文混排 8.5.1 飘浮对象的定义 8.5.2 飘浮对象周围的文本的流动 8.6 巩固与自測 第9章 使用表格 9.1 了解表格 使用热键导航 10.10 设置禁用控件和设置只读控件 10.10.1 设置禁止控件 10.10.2 设置只读控件 10.11 表单提交 10.11.1 表单提交的方法 10.11.2 结果良好的控件 10.11.3 瀏览器怎样发送表单数据 10.11.4 表单内容的类型 10.12 巩固与自测 第11章 使用框架集结构 11.1 框架集的基本语法 11.1.1 框架文档声明 计算机文字字符编码简介 14.1.2 使用html文檔字符集和选择字符编码 14.1.3 指定字符编码 14.1.4 字符编码的优先级 14.1.5 在html文档中使用字符引用 14.2 指定文档内容的语言(lang属性) 14.2.1 语言代码 14.2.2 语言代码的继承 14.2.3 浏览器對语言代码的解释 14.3 定义文本和表格的方向 14.3.1 unicode规范定义的文本字符方向 14.3.2 unicode双向运算法则 14.3.3 文本方向的继承 14.3.4 使用bdo元素忽略双向运算法则 14.3.5 表格的方向 14.4 body元素用于全局呈现 14.5 网页国际化和区域化的相关名词 14.6 巩固与自测 第15章 应用样式表呈现和布局 15.1 为什么要使用样式表 15.1.1 过去的不足和样式表的优点 16.1 使鼡表格进行网页设计和布局的方法 16.1.1 了解布局模块 16.1.2 表格布局的方法 16.2 在dreamweaver中使用表格 16.2.1 在“布局”模式下使用表格进行网页布局 16.2.2 在“布局”模式下修改网页布局 16.2.3 设置“布局”模式的首选参数 16.2.4 将内容添加到布局单元格中 16.3 使用嵌套表格进行网页布局实务 16.3.1 通过嵌套表格实现布局 16.3.2 怎样在文本周围保留空白区域 16.3.3 怎样设置复杂的边缘饰纹 16.3.4 布局的最后润色 16.4 使用框架进行网页布局实务 16.4.1 框架和表格的关系 16.4.2 在dreamweaver中使用框架 16.5 巩固与自测 第4篇 创建和发布网站篇 第17章 网页、网站和网络应用程序 17.1 安装和设置网络应用程序的运行环境

怎样定义元数据 4.2.1 定义元数据关键字 4.2.2 元数据的语言信息 4.2.3 え数据的其他定义方法 4.3 用于搜索引擎的元数据 4.3.1 定义编辑工具 4.3.2 定义版权信息 4.3.3 定义关键字 4.3.4 定义概要描述 4.3.5 定义设计者 4.3.6 定义创作日期 4.3.7 定义搜索引擎搜索方式 4.4 用于http消息报头的元数据(属性http-equiv) 4.4.1 设置网页内容类型和字符集 4.4.2 设置网页所使用的语言 4.4.3 设置网页定时跳转 4.4.4 设置网页禁用缓存 4.4.5 设置网页到期 4.4.6 設置网页cookie存活时间 4.4.7 设置网页框架目标 4.4.8 设置网页转场效果 4.4.9 设置网页分级 4.5 元数据纲要和元数据架构 6.2.1 定制无序列表符号(type属性) 6.2.2 定制有序列表中的序號(type属性) 6.2.3 定制有序列表中的列表项的起始数(start属性) 6.2.4 定制有序列表中的列表项序号的数值(value属性) 6.3 使用dir和menu元素来定义列表 6.4 巩固与自测 第7章 建立超链接 7.1 鏈接的基础知识 7.2 了解文档位置和路径 7.2.1 绝对路径 7.3.6 链接到您的网站中的其他网页 7.3.7 链接到电子邮件地址 7.3.8 链接到任何类型的文件以供下载 7.3.9 创建空链接和脚本链接 7.3.10 链接的创建与管理 7.4 定义书签和链接到书签 7.4.1 定义命名锚点(id属性和name属性) 7.4.2 链接到命名锚点 7.5 文档关系链接(link元素) 7.5.1 定义关系链接地址(href属性) 叻解热点和图像映射 8.4.2 关于客户端图像映射和服务端图像映射 8.4.3 创建图像映射(map元素、area元素) 8.4.4 设置热点默认链接 8.4.5 创建服务端图像映射 8.4.6 客户端图像映射和服务端图像映射混合 8.5 飘浮对象和图文混排 8.5.1 飘浮对象的定义 8.5.2 飘浮对象周围的文本的流动 8.6 巩固与自测 第9章 使用表格 9.1 了解表格 使用热键导航 10.10 設置禁用控件和设置只读控件 10.10.1 设置禁止控件 10.10.2 设置只读控件 10.11 表单提交 10.11.1 表单提交的方法 10.11.2 结果良好的控件 10.11.3 浏览器怎样发送表单数据 10.11.4 表单内容的类型 10.12 巩固与自测 第11章 使用框架集结构 11.1 框架集的基本语法 11.1.1 框架文档声明 计算机文字字符编码简介 14.1.2 使用html文档字符集和选择字符编码 14.1.3 指定字符编码 14.1.4 芓符编码的优先级 14.1.5 在html文档中使用字符引用 14.2 指定文档内容的语言(lang属性) 14.2.1 语言代码 14.2.2 语言代码的继承 14.2.3 浏览器对语言代码的解释 14.3 定义文本和表格的方姠 14.3.1 unicode规范定义的文本字符方向 14.3.2 unicode双向运算法则 14.3.3 文本方向的继承 14.3.4 使用bdo元素忽略双向运算法则 14.3.5 表格的方向 14.4 body元素用于全局呈现 14.5 网页国际化和区域化的楿关名词 14.6 巩固与自测 第15章 应用样式表呈现和布局 15.1 为什么要使用样式表 15.1.1 过去的不足和样式表的优点 16.1 使用表格进行网页设计和布局的方法 16.1.1 了解咘局模块 16.1.2 表格布局的方法 16.2 在dreamweaver中使用表格 16.2.1 在“布局”模式下使用表格进行网页布局 16.2.2 在“布局”模式下修改网页布局 16.2.3 设置“布局”模式的首选參数 16.2.4 将内容添加到布局单元格中 16.3 使用嵌套表格进行网页布局实务 16.3.1 通过嵌套表格实现布局 16.3.2 怎样在文本周围保留空白区域 16.3.3 怎样设置复杂的边缘飾纹 16.3.4 布局的最后润色 16.4 使用框架进行网页布局实务 16.4.1 框架和表格的关系 16.4.2 在dreamweaver中使用框架 16.5 巩固与自测 第4篇 创建和发布网站篇 第17章 网页、网站和网络應用程序 17.1 安装和设置网络应用程序的运行环境

8. 4 EIS层的国际化 8. 4. 1 持久性的本地化数据 8. 4. 2 数据库模式的国际化 8. 5 使用XML相关的国际化方法 8. 5. 1 使用XSLT生成动态的夲地化内容 8. 5. 2 应用系统的局部元素通信 8. 5. 3 在不同的应用系统之间进行局部元素的通信 8. 6 错误信息和日志消息的本地化 8. 6. 1 客户消息和应用系统的异常 8. 6. 2

EmEditor昰日本的江村软件公司(Emurasoft)所开发的一款在Windows平台上运行的文字编辑程式。EmEditor以运作轻巧、敏捷而又功能强大、丰富著称得到许多用户的好評。Windows内建的记事本程式由于功能太过单薄所以有不少用户直接以EmEditor取代。EmEditor的发行最早始于1997年迄今仍在持续发展中。 简介[1]简单好用的[2]文本編辑器支持多种配置,自定义颜色、字体、工具栏、快捷键设置可以调整行距,避免中文排列过于紧密具有选择文本列块的功能(按ALT 鍵拖动鼠标),并允许无限撤消、重做总之功能多多,使用[3]方便是替代记事本的最佳编辑器。 软件版本:V12.0.8[4] 软件大小: 9.43 MB 软件语言: 英文软件 授權方式: 共享软件 软件分类:国外软件 运行环境:Win2003,WinXP,Win2000,Win9X 更新日志: ·修正了一定的宏观问题的eeFindSaveHistory标志 ·修正了若干宏观问题“与document.selection.Text =”。 ·修正了一个自定义标记的标记列表“对话框中的若干问题 ·修正了一定的问题查找栏拖和下降 ·修正了一定的菜单栏和日文输入法相关的问题。 ·修正了一定的问题项目相关的插件模板属性UI ·修正了一个自定义工具栏“对话框中的若干问题。 ·修正了某些错误的相关搜索宏记录的 ·修正了一定的问题,关系到“同步选择光标位置”复选框纲要插件 ·修正了其他错误。 编辑本段使用强大的查找功能 Windows系统自带的“记事本”的查找替换功能很弱,但EmEditor弥补了这一点它支持的查找替换规则更加详细实用,对查找出的结果可以突出显示并可以批量查找替换未打开嘚TXT、HTML、DOC等格式的文件中的内容:选择“搜索”菜单下的“在文件中查找”或“在文件中替换”命令,打开查相应对话框(如图1)输入自巳想要替换的内容即可。 EmEditor 提示:批量替换的操作将无法撤消或恢复因此最终替换之前请务必慎重,或者事先做好源文件的备份工作  編写程序更轻松 EmEditor给学习网页及程序设计的朋友提供了许多贴心的功能,它可以为HTML、CSS、PHP、ASP、Perl、PerlScript、C#、C/C++、Java、JavaScript等语言提供一些基本框架并能将特殊的语句突出显示,让人一目了然这为编程人员免去了不少工作,也可以为编程初学者提供一些帮助 自定义与宏功能   EmEditor的强大还表现茬它提供强大的自定义功能,可以在“工具”菜单设置文件关联、自定义菜单和工具栏、管理常用工具和插件等(如图2)点击“工具/自萣义”可以打开自定义窗口(如图2),这里提供了众多选项我们能够通过设置让EmEditor更加符合自己的使用习惯。  此外宏功能也是EmEditor一大亮點,比如需要书写相同的签名信息时就可以在EmEditor中先录制一个签名信息的录入过程的宏,点击菜单栏中的“宏/开始停止录制”皆可开始录淛进行完录制动作后,点击同一按钮即可完成录制当需要调用签名时,点击工具栏上的运行宏按钮便可以轻松完成 细节人性化   EmEditor在許多细节上也非常人性化,比如Word中方便的拖曳操作被保留了下来这样在进行文字编辑的时候就再也不用反复的“剪切”和“粘贴”了,輕轻一拖就能搞定对于编辑好的文字还可进行打印预览,这能方便我们排版打印文本同时它有丰富的实用工具栏,并能根据自己的需偠进行定制我们只要把常用的工具放在工具栏上,操作就会更加简便和目前流行的浏览器一样,EmEditor也支持标签浏览你可以在同一个EmEditor中咑开多个标签页,切换起来非常方便  使用插件更精彩 同TC和firefox一样,EmEditor的插件非常丰富插件安装后都可以“Tools/Plug-ins”进行快速调用。这里笔者姠朋友们推荐几个比较实用的插件:MnzkOpenFolder:安装后可以在EmEditor调用资源管理器直接打开某个文件夹,但前提是必须对这些文件夹进行注册注册的方法是打开“Tools/Plug-ins/Customize Plug-ins”对话框,对MnzkOpenFolder插件的属性进行设置就可以了 ToSimplifiedChinese:可以将繁体中文字符快速转换为简体中文,这样在阅读某些特殊字符格式的電子小说或者繁体文档时将非常方便。 显示类插件:显示类插件非常丰富各有所长,它们可以实现窗口分割(包括横向、纵向分割)、显礻标尺、显示行号显示参考线、改变行距、自动滚屏等功能 编辑本段优点1、对中文支持好 EmEditor 2、支持插件,开放接口 3、界面友好 4、启动速度佷快 5、虽然不是免费软件但如果你用于教育用途,可以免费向作者申请注册码 编辑本段缺点1、很基本的功能由插件实现不太稳定,如玳码折叠、行号等 2、不太稳定,与115优蛋、金山快译有冲突但出问题的机率不是很大 3、本软件为共享版软件,用户可能面临收费通知 编輯本段EmEditor优势原理EmEditor的快速性源于其程序的构造和两个版本的核心程序EmEditor可以从多个程序构造进行启动,例如增加程序的属性设定窗口中等内嫆也不会影响程序操作的速度同时核心程序由两个最优化的版本构成。它们是Windows NT/2000/XP的版本和Windows 95/98/Me的版本公开的EmEditor虽然同时装有两个版本的程序,泹在安装过程中安装程序自动检出操作系统的版本只将最合适的版本复制到执行程序中。正因为向着最优化的努力EmEditor做到了尽可能地缩尛核心程序的容量(256KB)。 文字处理软件的最基本的功能是文字处理为了实现文字处理的最优化,EmEditor也尽了努力并实现了目标。对于文章的大尛以及文字行数和列数没有限制用EmEditor不管你的文章是否含有换行符,即使容量为几MB的文件也可以很快地打开编辑和其它的许多文字处理軟件不同,EmEditor可以垂直或水平滚动窗口数百万行或数百万列当然你也可以在1秒中内同时打开多个EmEditor窗口,而且同时不影响内存的使用文字處理的功能是EmEditor得以生存的理由,网页设计者用它来编辑HTML或者Perl程序文件程序员用它来编辑源程序,很多人想使用轻便简单的记事本软件此时EmEditor就会显得很有用处。 但是在追求轻便快速的同时又要满足用户各种不同的需求,就会有腹背受敌的感觉此时EmEditor采取的办法是插件(plug-in)的導入。以此实现特别功能的扩张功能通过简洁轻便的插件的使用,几乎可以实现所有的特殊功能例如拼写检查功能也可以通过插件的導入来实现。

下载 第1章开发思想 命名是所有事的开始 要真正掌握一门编程语言,不仅要理解它的语法和语义更重要的是掌握语言所体現的哲 学思想、语言产生和发展的背景以及设计特点。 1.1 PHP与我 大家是否想过为什么会有这么多的编程语言?除了所谓“主流语言”例如C、C + +、 P a s c a l等之外还有其他的如L o g o l、C o b o l、F o r t r a n、S i m u l a和许多更加特殊的语言。当列出一 个项目的梗概时大多数软件开发者不会真正地考虑到可以使用多种编程语言;他们都有自己 偏爱的语言(也许是公司指定的一种语言),了解它的优点和它的缺点并根据语言的具体特点 修正项目。但当克垺所选语言的缺陷时就可能会增加不必要的额外工作。 了解如何使用一门语言却缺乏其特定的概念知识就好像一个开卡车的人想参加②轮马车 比赛一样,当然一般来讲他应该懂得如何驾驶二轮马车,他甚至可能在终点线上跻身前列 但他绝不可能成为一个出色的车手,除非他熟悉新车的独特之处 类似地,当面向对象程序设计( o o p)程序员编写一个应用程序的时候他会尽力使程序满 足项目要求,处理哃一个任务不同的程序员会运用不同的方式。哪种方式更好每一个程序 员会说他(她)的方法最好,但只有那些熟悉两种概念—o o p和过程化编程—的人能够作出 判断 前面提到的每一种语言代表一种解决问题的特定方法,这些问题多属于具有特殊要求的某 一特殊种类因為这些语言集中在一个有限的应用领域内,他们的成功性也限制在这些领域 像C和P a s c a l这样的语言变得如此流行,就是因为它们被广泛应用並且它们不针对特殊问题, 却提供了能很好地解决普遍问题的工具 那么P H P是如何适应这一体系的呢?尽管它被称之为一种语言但P H P并不是┅种真正独立 的语言,而是许多语言的混和体它主要用C的句法,但与C有很大不同它是被解释的, P H P 能识别不同的变量类型但没有严格嘚类型检查, P H P识别类但没有结构体类型,类似的例子 很多但你可能已领会到了关键一点: P H P融合了许多种不同的解决问题的思想,形成叻一种全 新的、独一无二的方法 为了能够用P H P成功地开发We b应用程序,我们鼓励你首先回答下述问题: P H P是我的项目 所需的理想语言吗问得恏。如果我们说不那我们就会显得很愚笨(谁会去写一本关于他们 第一部分高级P H P 认为不好的东西的书呢?)让我们重新阐述这个问题,对项目来说有比P H P更好的语言吗这 次我们可以很有把握地回答,如果你正在从事网络应用程序的开发 P H P就是为你准备的最好的 语言。 1.2 计劃的重要性 你为什么应该阅读这一部分 即使你是一个很熟悉P H P的职业程序员我们也建议你阅读下面的部分,因为这里包 含了成功开发的基夲知识如果你对所讨论的题目已很熟悉,也应该花时间浏览一下 你可能会发现新的信息—新的题观点、新的解决方法、新的答案,你對解决未来项目 的不同方面的问题了解得越多你就能越好地抓住关键点,并且用更好的方式处理我 们希望你信任我们是职业开发者,並相信我们的经验这将使你在以后受益。 在深入探讨P H P特定问题之前先让我们从一个更广泛的观点开始。不论你使用什么语言 也不论伱在什么平台上开发。有一些问题在应用开发中是总会涉及到的 当从事一个专业项目的时候,考虑一下你正在做什么是至关重要的“叻解你的敌人,永远 不要低估它”尽管你的项目并不是一个真正的敌人,这句话的寓意仍然适用在转向其他题目 时,要知道项目的所囿技术条件、目标平台、用户并且决不要低估那些没有考虑周全的小问 题的重要性。 据我们的经验计划占用了5 0 %的开发时间。项目越大它的纲要就应该越详尽。这一原则 既适用于同你的顾客相联系并与他们密切合作以确定一个总的项目概要又适用于与你的开发 者探讨確定一个编码概要。在一致性和可维护性上花的气力越少就越容易在重新打开旧文件 并设法清除错误或添加新的特征时遇到问题。 计划所用时间与项目大小并不一定成比例例如,想一下要设计的一个搜索算法这一应 用程序只需要在一堆信息中进行基本的,搜索并能根據规则抽取数据由于数据已经存在,所 以创建和输出将不会需要太多的努力这一应用程序将把它的大部分运行时间花在搜索循环上。 這个循环也许用不了1 0 0行代码但是为一个优化的循环选择设计一个优化的算法很容易耗费一 整天的时间,这个小小的循环也许是设计阶段朂庞大的部分但另一方面,你可以在不到一天 的时间内策划好数千行的代码 同样,我们假定需要一个小脚本来列出某个目录中的所有攵件你能够很快地完成它,使 其能从事某一特定任务在一个特定的目录列出所有文件,不必再担心它了—问题已解决 可以转向其他任务,把你的程序抛在脑后但另外一种策略是考虑一下以后的某个时间,甚至 可能是在一个完全不同的项目中—你可能会再一次需要一種类似的工具仅仅一遍又一遍地 重做目录列举器,每一个对应一个特定的任务这简直是在浪费时间。因此当首次遇到这种 情况时,應该考虑到这一点应从一个目录列举器中创建一个分离的模块,允许它列举不同的 目录有选择性地递推子目录,甚至允许使用通配符你可以创建一个“防弹”函数,它即能 处理大多数特例又能完美地应付一个目录列举器的普通要求。采用这种策略经过几个项目之 后你将拥有一个工具参数的库,可以安全地重新使用和依赖这个库从而可以极大地减省开 发时间。 2部分第一部分分高级PHP 下载 当然有了┅个日益增大的免费工具函数库,依然不能满足全部需要也不能优化这个库 以适应特殊需求,有些库太庞大以致不能随处安装因为每┅次选中都必须分析几百K字节的代 码,这将严重降低站点的性能在这种情况下,需要用1 0 0 %自己创造的优化解决方案以取代 非最优解决方案。 更大的项目如果缺乏计划将导致更多的错误在开发后期,可能会遇到没有或无法预见的 困难这是由于缺乏计划的时间和工作,这些困难可能会严重到让你彻底地重组整个项目例 如,对一个依赖额外数据库提取层的数据库支持的应用程序其数据库提取层仅能接收攵本数 据,但后来你发现也需要用它接收数值性的数据通过工作区转换,可以使它能够接收数值性 数据但后来你又感觉到这个工作区仍旧不能满足需要,这时唯一能做的就是改变数据库接口 这需要重构提取层并对所有主代码调用进行检查,当然也需要清除先前创建的笁作区 这样,数小时甚至整天的工作将不得不耗费在本来从一开始就可以避免的问题上这些问 题往往决定了程序开发的成败,因为“時间是你永远都不可能充分拥有的珍贵资源”下面的内 容将针对大部分基本的却是非常重要的开发中的实际问题进行讨论:改善代码质量以及基本设 计和文件管理的问题。陈述完这些后我们创建一个应用程序接口( A P I),采取简单的、实用 的方式使你熟悉这一新的思想嘫后我们从头创建一个A P I,在纸上从理论上开发它并明确一 些实用规则来帮助你实施下一个A P I,例如风格问题、以及商业技巧等 1.3 编码规范 恏的编码和差的编码之间究竟有何区别呢?实际上这个问题很简单。好的代码(确实好 的代码)能够像一本书一样被阅读你能从任何哋方读起,并且能够时刻意识到你所读的这些 行是干什么用的它们在什么条件下执行,它们所要求的设置即使你缺乏背景知识,遇到叻 一个错综复杂的算法你也能很快看出它所从事的任务,以及它的风格 举个例子,然后说“照着做”总是很容易的但我想这一章应該使你打下写专业化代码的 坚固基础,这一基础将区分真正精心编制的代码和一个草草完成的程序段抱歉的是,由于篇 幅所限我们不能按我们所希望的那样详尽地讨论良好的代码书写风格的每一方面,但本章将 给你一个很好的开始我们期望你能迅速获得专用的材料,鉯熟悉软件设计和工程的每一要点 编码是一个很广的领域,几乎是一门独立的科学有许多论文论述它,虽然这些论文大多很乏 味很悝论化,但在应用中是不可放弃的下面我们就最重要的问题进行最基本的讨论。 1.3.1 选择名字 选择变量名可能是程序员最常做、但却想得最尐的如果你已建立了这些在大项目中出现 的变量名字、类型、定义位置的清单,那么你就创建了一个类似于小电话簿的东西你想让你 嘚清单成为什么样子呢?不同的命名方案已发展起来了它们有不同的思想及各自的优点和缺 点,这些方案一般分为两类:简短的变量和函数名及谈话式的变量和函数名(描述变量类型和 目的的更长的名字) 某个电话目录可能是这个样子的,如表1 - 1所示 第1章认开发思想部汾3 下载 表1-1 电话目录 姓名地址电话 J . D . 3 8 2 W. S -3 9 5 1 M . S . 2 0 4 E . R . -8 3 8 2 这份列表非常有意思:该列表有两个条目,但并没有更多的信息人名只有首字母,没有 全称;只有房间号但没有街道名;只有电话号码的一部分,却没有完整的号码 让我们看另外一个例子,如表1 - 2所示 表1-2 电话目录 姓名地址电话 h t 5 f t 9 i n a g e 3 2 J o h n 386 West Street,L o s + 1-5 5 5-3 0 4-3 9 i a S m i t h f e m a l e s i n g l e U S A,E a r t h 在这个例子中每个人的名字包括身高、年龄、性别及婚姻状况。地址中不但包括街道和 城市而且也包括州、国家、甚至星球。电话号码附加了国家和地区号 第二种解决方案比第一种好吗?两个都不是最好的在程序课上讲授的这两种解决方案, 都不令人满意定义一种类型t p I n t t e g e r C o u n t e r I n s t a n c e这样长的名字)也是不可 接受的,尤其当我们从事的是像压缩这样复杂的缓冲操作的时候更是如此 这只是普遍思想被误鼡的一个简单例子,该怎么办解决的办法是选择好的整体思想,然 后在适当的地方加以例外处理当写一个应用程序时,应该知道你的玳码从事的是什么工作 能够快速地从一点转到另一点—但其他人可能认为这并不容易。如果你从开发组的某个人手 中获得一个源文件并需要添加一些特征首先必须对其进行整体把握,并区分代码的各个部分 理想情况下,这一过程将和阅读源文件平行进行但由于在没囿提示和公共样本帮你理清代码 来阅读的情况下,这是不可能做到的所以在源代码中包含尽可能多的额外信息,并且使得明 显的事实不噫于混淆就显得很重要了 那么如何能查知这些信息,并将其合并入自己的代码呢 ? 使代码更易读。 4部分第一部分分高级PHP 下载 ? 如果可能选择谈话式名字。 ? 尽可能添加一些注释 ? 保持清晰、一致的函数接口。 ? 把代码结构化成逻辑群 ? 抽出单独代码块。 ? 使用文件来将函数分类 ? 编写文档。 下面将讨论上述各主题 1.3.2 使代码更易读 在阅读的时候,为了理解文章的含义你的大脑必须分析从你的眼聙里获得的信息,识别 出重要的部分然后把这些部分译成正确的代码。这个分析过程分两步执行:形式分析和逻辑 分析首先通过检查攵章的可视结构来执行形式分析,例如:检查段落、行、列甚至词之间的 空隙这一过程打破了对文章的整体了解,将其分成更小块的树形结构假想一个结构严密的 树,有顶部的树节和底部的树叶树的顶部包含着最一般的信息,例如你要读段落顺序,树 的底部是诸如┅行中的词序或是一个词中的字母顺序的一些东西 逻辑分析过程将提取这些形式信息,然后按顺序遍历此树并设法将信息译成有意义嘚结 果,这是一种语法上的翻译(这个句子有什么样的结构),还是一种语境式的翻译(这句话是 什么意思)在此处讨论中并不重要。重要的是:形式分析的结果越好逻辑分析就越容易、 越快、越好。 逻辑分析能补偿形式分析中失去的信息但仅仅是在一个有限的程喥上补偿。 你也许能读懂前面的这个句子但要花费比读本书其他句子更长的时间和更多的注意力, 在第一步分析中一些重要的信息(間距)丢失了,你并不习惯这样 我们可以通过添加一些标点使其变得更简单易懂。 标点是进行形式分析的有用信息注意到阅读这一版夲或把注意力集中在所选的任意一点 上要容易得多。下一步: 这是你阅读句子的常规方式即阅读文章时最习惯的方式,但我们也可用多荇结构描述这 个句子: 这是可以让你能尽快地理解这个句子极端的方法的一种上面的断句阻碍了自然的阅读语 序,因为你并不习惯读一個在句法上被拆成单元的句子但对于源代码来说,这是一个优势 第1章认开发思想部分5 下载 因为源代码经常包含复杂的结构、公式等。使源代码保持清晰的外在形式、结构以帮助读者理 解是很重要的这可以通过使用缩进和在适当的位置放置编程语言的关键词来实现。 让峩们看一个简短的P H P程序: 这个代码本身也许并不是智力劳动的精品我们只观察一下它的结构,如果以前没有读过 这个片段你能够一下僦指出主代码的起始处吗?你能标记出主代码中最初的和最后的说明 吗即使你能一下子找到想找的地方,你的眼睛也会不由自主的从行艏开始从左到右的浏览 在你认为目标可能在的地方停下来。你的大脑也要重复读这一行因为你会不时丢失形式分析 得来的信息。为了彌补起步时信息的缺乏你的大脑(逻辑分析区)也会采取这一步,并强调 两次正如电脑启动就关机一样,你的头脑的能力是有限的所以,当你的大脑确实想要理解和记忆源代 码时逻辑分析区就在缺乏能力的情况下承担了额外工作。但是理解和记忆恰恰是你想让人们 茬读你的源代码时所达到的也是你在读别人的源代码时想要达到的。 因此这就是为什么格式化源代码很有用的原因。还有别的原因吗噢,是的格式好的 源代码看起来让人赏心悦目。 下面是一些指导原则其中阐述了我们所认为的在格式化源代码时的最优风格。请注意 这些指导原则不是强制要求的,但可以认为是一般的规范许多工业的和开放式的项目已经用 这种方式将源代码格式化了。 并且采鼡这种风格经常会带来收益。 ? 块标志符( < ?、? >、< ? p h p、< %、% >、{、}等等)要放在不同的行里 ? 用tab 缩进所有的块(理想情况下,把t a b宽度改成不超过4嘚值) ? 在关键词和关系对象符之间要留有空隙,特别是在进行计算时尤其要这样做 ? 将代码的逻辑块分别放在连续的行里,使逻辑塊分组并在块之间留有空行。 ? 用空行的方式分隔各个块 ? 用空行的方式把函数头、函数脚和代码的其余部分分开(输入全局变量被看莋是函数头的一部分)。 ? 把每一块的注释并入代码 ? 在同一块内把所有行的注释放置在同样的一些列中。 作为一个例子清单1 - 2给出了某段格式化的代码。 清单1-2 重新格式化的代码片断 6部分第一部分分高级PHP 下载 大家可以看到这一小块代码读起来要容易得多。 在代码中空格嘚使用可以进一步把参数和关键词分开: 以上看似毫无必要,不过要记住:这些代码要被嵌入几千行代码之中所以必须改变你的 观点。囿些人说在书写源代码文本时括号之间的空隙与其说有帮助不如说分散了人们的注意 力——我们必须承认,有些时候这是事实本书中嘚例子也并不都使用这种格式。我们认为 是否使用这种格式最后由你自己决定,最重要的则是:要保持一致性一旦你决定采用某种风 格,就一定要坚持至项目的完成如果你在修改别人的源代码,你也要尽量遵守他们的风格 在职业开发中,一致性是最重要的原则之一 要注意阅读所有源程序的例子,并尽量模仿他们的风格调整你自己的风格直至和这些最 初的例子很接近为止,一旦你对这种风格很熟悉你会发现你所做出的努力没有白费。 在进一步阐述之前我们举两个例子来更好地说明这一点,如图1 - 1和图1 - 2所示 图1-1 坏的代码 图1 - 1中源代碼是要建立一个S Q L语句,除了最后的一行是把一个包含“ select *”的字符串 赋给一个名为$ q u e r y的变量外我们看不出图1 - 1中还有什么说明了该段代码的目嘚。与之相反 在图1 - 2中的代码中,你就比较容易理解代码的所有目的 第1章认开发思想部分7 下载 图1-2 好的代码 我认为代码就应该是这样,至尐应该近似这样代码应该有清楚的结构、很好的注释,并 且很容易理解 1.3.3 添加注释 我们无论怎样强调添加注释都不过分,尽管编程时你鈳能认为这是最微不足道的事情在 编写高质量的代码时,注释是很重要的在解决复杂问题的时候,很少有两个人会有完全一样 的想法某些问题对于一个人可能是一目了然,而对于另外一个人可能是模糊不清的在这种 情况下,注释就是大有裨益的只要需要,你都应該把它们添加到代码中 目前主要有两种注释:头注释(例如文件头注释、模块头或函数头注释)和内部注释。头 注释主要起介绍性作用告诉读者一个文件要做哪些事情,或下面这一大段代码是关于什么的 内部注释用在函数内,或嵌入代码中以解释代码的某一行或某一塊所做的工作 下面介绍这些注释的外在感观及其所包含内容的概念。现在这些注释通常可通过快速应 用开发工具( R A D)或其他授权帮助笁具来产生,但由于在撰写本书时仍没有适合P H P的类似 系统所以这些注释应该是手编的,尽管这会增加一些额外的工作量 下面按照注释類型的抽象程度,从最抽象的到最具体的来讨论 保持注释不断更新 要记住在编写函数之中或之前就将其注释好,仅仅为了加注释而读一個文件是非常 令人厌烦的工作同时,要注意在以后的某个时候如果对进行函数的修改就要适当地 更新你的注释。例如若增加或去掉铨局变量,那么你也要在注释中对它们的使用注释 进行更新;同样如果参数顺序、类型等发生变化也是如此。 使用宏来加速你的注释 在伱最喜欢的编辑器中为每一种注释类型创建宏并给它们分配热键(例如,为文 件头分配Ctrl+Alt+Fl为模块头分配Ctrl+Alt+F2等等)。 8部分第一部分分高级PHP 下載 如果编辑器支持的话可以把变量引入注释中,这种创建详细的有大量信息的注释 工作就变成了一个创建简短对话框问题 1. 文件头注释 攵件头可以像清单1 - 3那样编排 清单1-3 文件头注释 你可能偏爱使用多行注释创建的对话框,有人认为这样美观(如清单1 - 4所示) 清单1-4 文件头注释(使鼡多行注释) 2.在U N I X中提取块注释 在U N I X系统中,下面的g r e p命令从源程序中提取这样的块注释: grep '^[\\\/]*\*' source.php3 选择什么样的风格来格式化你的标题并不重要但選择的由文件头包含的信息是很重要的。 就像在上面例子中所看到的标题应该包含一些整体信息,如:关于模块作者等的细节条目要 按┅种有意义的顺序放置(例如包含一个长描述和一个短描述是没有意义的,当读完长描述 后就已经不再需要短描述了),下面的清单列出了我们所提倡的信息类型及其顺序: 第1章认开发思想部分9 下载 1)模块文件名 2)短模块描述(一行)。 3)长模块描述 4)关于用法、偠求、警告等的注释。 5)作者的名字和联系信息 6)模块的创建和最后修改日期。 7)版权注意事项 8)许可注意事项。 9)转变记录、主页、分配文件等的指针 1 0)最后,如果需要变化记录中的摘要。 如果这些听起来太多了那么记住,宁可有多余的信息也不要缺乏信息,当然这并非 在所有范围及所有条件下都合适,我们没有在前述的例子中包含所有情况然而,你应该设法 向你的标题中放置尽可能多嘚数据—这是一种良好的习惯最坏的情况是有些人可能不去读 它,但有可能有些人感激它—也许就是你自己因为在一个商业化项目中,如果你忽视了版 权和许可注意事项而当别的程序员免费更新你的代码时,则会导致令人头疼的后果 3.模块头注释 如果在一个文件中鈈止一个模块(例如,当某个模块组的一个模块包含三个函数时)应该 在第一个函数前放一个信息量很大的标头。模块头形如清单1 - 5所示 清单1-5 模块头注释 这些标题按顺序可能包含如下各项: 1) 短模块描述。 2) 细节模块描述 10部分第一部分分高级PHP 下载 3) 函数原型清单。 4) 标記/注解 多行注释再一次表现出其优越性。 4.函数头注释 函数头应足够细致地为每一个函数(见清单1 - 6)描述句法、目的和必要的调用者信息这 些注释的重要性,相对于内部注释来说是次要的函数头注释的目的是让程序员在模块开发和 扩展中迅速了解每一个函数的要求,這些要求是为最初没有建立这些函数的“外人”所提供的 缺乏函数头注释的源代码经常需要开发者深入其中找到所要信息,而这一点经瑺会导致错误 因为不是所有隐藏的陷阱(有时它们隐藏得很好)都会被发现。 清单1-6 典型的函数头注释 一个函数头注释应按顺序包含如下各项: 1)函数原型 2)函数细节描述。 3)标记/注解 4)参数描述。 5)返回值描述 6)全局引用。 7)作者和最后一次修改的日期 5.内部注釋 第1章认开发思想部分11 下载 内部注释直接放入代码中,并直接解释所有产生的问题当你编写代码时,每件事你自己 当然是很清楚的这僦是有人经常不写注释的一般原因。后来当你重新打开这个文件时(甚至 也许是一年之后)你也许已遗忘你用的所有结构及使用它们的原因,这是我们经常遇到的一个 问题在我们自己的代码中或别人的代码中使用内部注释的原则是:注释越多越好这一原则的 唯一例外是,注释不能被滥用到让人们对代码模糊不清的程度同时,注意不要注释显而易见 的东西清单1 - 7列举了一些例子。 清单1-7 不好的内嵌注释 在苐一行中因加1而增大的$ b a s e i n d e x代码是需要注释的语句吗?我们表示怀疑每一个 人都能看得出$ b a s e i n d e x正加上1。但它为什么加1为什么正好加1?更好的紸释大致是这样的: 跳至我们所指的下一个指数它仅有一个元素的距离。 第二个注解有同样的问题但产生的原因不同。程度员把算法嘚完整参考传送至代码中 却又包含了很多不适当的“垃圾”,当然详细描述你所做的事情是好的,但你必须弄清楚什么 是重要的什麼是不重要的。 当你给代码添写注释时要考虑如下问题 ? 你在做什么? ? 为什么要做这件事 ? 为什么要采用这种方式做? ? 为什么要茬这个地方做 ? 这个代码如何影响其他代码? ? 这个代码要求什么 ? 你的方法有什么缺陷吗? 例如当你分析字符串的时候,记录输叺串的格式你的分析器的偏差(它对输入中的错 误的反应)和它的输出。如果这些信息太多以致不能直接嵌入你的代码,那么至少要咹置一 个指针指向一个外部文件,在此文件中读者能够了解到分析器的各个方面同时,要记住更 新函数头注释即设置一个对此文件嘚链接。 12部分第一部分分高级PHP 下载 1.3.4 选择谈话式名字 正如前面所提到的为函数和变量选择合适的名字在编程中是一个很重要的问题。一般凊 况下当为一个变量选择名字时,首先要确定它是全局变量还是局部变量如果此变量仅在函 数的局部作用范围内可见,那么就给它选┅个简洁、准确的名字来陈述此变量的内容或意义 这个变量名应该至少包含两个词,这两个词或者被下划线分开或者被大写字母分开洳清单1 - 8 所示。 清单1-8 局部变量名实例 记住不要混用命名方案要么都用小写字母来写变量名,用下划线来分隔词要么使用大 写字母来分隔詞。不要用大写字母来分隔一个变量而用下划线来分隔另一个这会导致错误, 并且表现出不好的风格一旦定好你自己的风格,就一直堅持到项目结束 每一个全局变量都应该有一个前缀来标识它所属的模块,这一方案帮助把全局变量赋给它 们的模块同时也可避免出自鈈同模块的同名变量在全局范围内产生冲突。前缀应该用下划线 和变量名分开并应该包含一个词—多数是一个缩写(见清单1 - 9)。 清单1-9 全局变量名的例子 小尺寸优势 创建更小的项目每一个项目都用不同的命名风格。原因如下: ? 你能发现你偏爱的风格 ? 当你不得不适应別人风格时,能够很快变得熟练 如上例所示,全局变量名倾向于比局部变量名长这不仅是因为全局变量具有模块前缀, 也是为了分清铨局变量和局部变量当一个变量的定义和初始化因隐藏在一个你接触不到的模 块中而变得未知时,用变量的名字来思考它的意义和内容僦显非常重要这在实践中当然有个 极限—没人想记住多于四十个字母的名字—但这只是一般意义上的极限。 从根本上讲你应该命名全局变量就像向某人描述它一样。例如如何描述变量 $ p h p P o l l s _ l a s t I p,你可能不知道p h p P o l l s是做什么的但这个名字暗示它和p o l l s有一些关系。 l a s t I P意指它是最后一个I P哪一个I P,你不知道显然,这个全局变量的名字选得不太好因 为它并没有准确地描述其内容。现在假定你问这个变量的含义是什么答案是,它包含最后一 个投票者的I P现在想想该给它取一个什么名字? $phpPolls_ last_voters_IP听起来如何更好一 点,不是吗尽管这个名字可能很好,但它仍不匼适因为你曾见过另外两个同样出自p h p P o l l s 第1章认开发思想部分13 下载 的全局变量,都以p h p P o l l s 为前缀然后紧跟一个词,出于一致性的考虑你可以決定在名字 内部仅用大写字母来分隔不同的词: $ p h p P o l l s l a s t Vo t e r s I P。 函数名也应该用与全局变量名相同的相近风格加以处理但略有不同。函数命名应描述咜 们的功能而且要符合语流让名字符合语流是通过确定函数行为、并选择在该名字大量出现之 处最适合的名字来实现的。 例如如果用┅个函数确定一个用户目前是否在线,它可能有以下名字中的一个: 考虑到返回值类型上述清单中只有第一个和最后一个名字是合适的。假定函数将返回一 个布尔值那么它经常用在一个与i f ( )语句的连接处。在那里它一般是这样的: 选择1: 选择2: 在第一个选择中,函数名看起来不是很恰当“If the user status of Jahn then do something.” 再检查一下,第二种可能性:“If the John is online then do something.”第二个观点没有打破语流, 并且在第一眼见到的时候给人留下了更多印象第┅个选择把问题公开化:什么身份被谈及?该 身份如何返回第二个函数名清楚地表示这个函数会检查某人的在线状况并返回一个布尔值。 如果检查结果在函数的变量参数中返回又会怎样 选择1: 选择2 : 14部分第一部分分高级PHP 下载 尽管u s e r s t a t u s ( )并非一个不好的名字,但g e t o n l i n e s t a t u s ( )更好一些“g e t”这個词很清 楚地表明函数检索在线状态并将其存于某个地方—或者在一个全局变量中,或者在一个函数 变量中 )或将两个词交换顺序,这将佷好地适应模块前缀 你的代码是两种语言的还是三种语言的 对代码最普遍的批评之一涉及“民族化”,一种程序语言(起源于英语)与叧一种程 序语言搅合在一起在我们的实际例子中,(To b i a s源于意大利语Ti源于德语),当我们 检查各自国家程序员开发的项目时我们发现他們喜欢使用德语和意大利语变量名和函 数名而不是用英语。这导致了一种奇怪的混淆正如你不会在你的日常信件中混用英语、 法语、西癍牙语等一样,所以你在编程时也需要保持语言一致性,使用英文名字编写 PHP程序还有助于外国人理解你写的程序。 1.3.5 保持清晰一致的接ロ 你也许不愿意再看到“一致性”这个词但对于接口设计来讲,它是编程基石中的关键一 块 非常不幸的是,P H P本身恰恰存在如何违反这┅点的例子 你在驾驶汽车的时候,油门在右而刹车板在左当你换一辆车时,你希望情况也是如此 无论你在哪里,你都希望红灯意味著停止而绿灯意味着前进。类似地当你用一个库访问文 件,且需要把一个文件句柄传给函数时如果输出函数把文件h a n d u句柄作为第一个參数,输出 函授将其作为最后一个参数而另一个把它作为中间参数,那么这会令人感到莫名其妙 当设计接口时,你应该首先考虑如下問题: ? 通过这个接口交换什么数据 ? 我到底需要什么参数? ? 大多数(或所有)的接口函数所共有的参数是什么 ? 这些参数最合乎邏辑的顺序是什么? 把它们牢记在心中一旦你决定采用何种方式去做,你就应该在你的模块中保持参数一致 性即使内部函数也应遵从這一点。这一策略将使你以后能从接口中获得内部函数另外,当 )的一个快速替代并且大部分人会 从调用e r e g r e p l a c e ( ) (接收相反顺序的参数)转到调用s t r r e p l a c e ( )。当然这种说法有一定道理, 第1章认开发思想部分15 下载 但是为什么r e g e x函数按一种与字符串函数相反的顺序接收参数呢因为在P H P中,r e g e x函数反 映了在C中的相应函数在开发一个应用程序的时候,看到s t r r e p l a c e ( )从其余函数中突现出来 是很别扭的事在勾勒下一个接口的轮廓时,注意不要让這种情况发生在你的身上 1.3.6 将代码结构化为逻辑群 应用程序通常包含不同的函数群,每一个函数完成一项特定的任务并(或)应用于特殊嘚 应用领域例如,在写一个支持数据库的应用程序时一个函数群应该仅仅对处理数据库访问 负责,这个代码确立了它自己的存在能夠安全地从程序的其余部分分离出来—只要你设计 得好。逻辑上只从事一项特定任务的函数群应该用某种方法设计以使他们能够被独立哋处理, 这些函数在形式上也应该和主代码分开建立一个模块。在运行一个应用程序之前你应该建 立一个能将所有函数归类在一起的函数清单,形成一个模块并为每一个模块创建一个各自独 立的设计计划。要注意创建详细的数据流程图以便使模块能够满足应用程序嘚各种要求。做 一个书面的整体计划其重要性不可低估。由于篇幅所限我们不能够再深入谈及这个问题, 但我们建议你读一些关于设計方法的好书 1.3.7 抽取单独的代码块 抽取代码块是一项在设计和实施阶段都应该做的事情,通常一个函数应该能完成以下工作: 1)开一个文件 2)从文件中打读取数据。 3)证实数据(将数据合法化) 4)更正数据中的错误。 5)将数据写入文件 6)关闭文件。 每一步都可以“包裝”成单独的一个程序块抽取这些块并从中创建单独的函数是一种很 好的方法。这不仅使你能够在别的函数中重新使用每一个程序块(伱可能在别的地方也需要文 件操作的支持)而且还能使代码更容易阅读和纠错,你可以使被抽取的部分“放弹”给它们 装备“纠错器”,以支持更多的东西如果你采用内嵌法无法做到这一点,你的代码会很快变得 异常庞大而冗赘另外,如果你在其他的函数中使用哃样的程序块时产生需纠正的错误,你 将不得不在使用此块的所有其他的函数中反复进行同样的纠正 通过提取,可以把关键部分放在中惢位置只要更改一行程序,就可以改变所有相关函数 的行为 1.4 使用文件将函数分类 我们已经论述过对源代码使用复合式文件是有好处的,但我们也同样建议你为其他资源使 用文件这些资源可以是配置数据、客户标题、页脚或其他模板,以及任何从你的项目中可以 抽出来莋为一个单独实体而存在的东西 在一个项目中使用模块有很多好处: 16部分第一部分分高级PHP 下载 ? 可以获得更小更容易维护的源代码文件。 ? 可以对每一个文件进行不同的修改而不必在整个项目中进行检查以进行一个微小的修 改。 ? 可以将部分资源从项目中分离出来用茬其他项目中。 ? 许多开发组成员能够同时工作在一个项目上而不必在检查时将所有的文件合并成修正控 制系统。 以上论述适用于一个項目中存在的大部分资源 文件应根据其内容加以命名。如果一些文件从属于一个更大的群体可以给它们加一个共 同的前缀,文件一般應该放在项目根目标的子目录下例如,一个数据库提取层其中有可访 问不同数据库的模块,这些模块被“包装”成单独的文件 每个攵件名应冠以前缀d b a (这里 d b a代表database abstraction),这样你就得到了d b a m y s q ld b a o d 文件有对整个项目的全局化“选项”。该配置文件应该包含独立的源文件所需要大的能使其在 全局范围内可用的选项。这种“选项”可包括环境选项如站点名、文件系统位置等等。 停留在(普通的) 路径上 当某子目录包含配置文件时要一直使用相对路径以确保项目在文件系统及用户系 统上是灵活的—不依赖开发环境的任何特定条件,就像在其他环境丅一样能保持一 般化的东西就要尽量让它一般化。 1.5 编写文档 除了注释和结构化以外文档也是值得注意的,一个项目的文件记录可能是伱的用户将要 见到的项目的第一部分而第一部分是至关重要的。 规范化写出的文档应该是开发过程中惯例性的一步正如你希望微型电話或其他哪怕是在 很小的商店中购买的技术产品都有一本写得很好的手册一样,你的用户也希望从你那里得到较 好的文档(更不用说他们鈳能会为此而付一大笔钱了) 和注释一样,文件记录通常是在R A D工具的帮助下产生的很不幸,目前还不存在专为 P H P设计的相应工具所以寫手册是一项费力不讨好,但却很有必要的—份工作并且,这并不 会影响你的工作效率一个完整的手册应具有像书一样的内容结构,┅般包括以下几项: 第1章认开发思想部分17 下载 ? 介绍 ? 内容表。 ? 用户指导 ? 技术文件。 ? 开发者指导 ? 完整的函数参考。 用户指導应该详细地描述为标准用户设置的应用程序接口(如果有的话)的所有特征在 这一部分不要太专业化,它应该仅仅是一个“如何”程喥上的描述但要确保每一方面都阐述 得很详尽。技术文件应该为对技术感兴趣的用户和管理者而写并应包含应用程序的技术要求、 使鼡和引入的规范以及关于内在数据处理的信息(只要这是读者所感兴趣的)当然,这也要在 你许可的允许范围之内如果你允许用户看见囷(或)修改源代码,那么编写一份开发者指导 来解释项目的结构、数据流、内在关系以及列出所有的函数参考(包括内在函数)并要囿完整 的描述。 如果你在一个开发组中工作职业技术作者将是这一群体的有力助手——他们有书写技术 文件的经验,也有充裕的时间讓一个有开发任务的组员同时写文件记录会导致大量额外的压 力,因为程序开发者总是很忙碌的他们不想误期。 1.6 一个API设计实例 参照所有嘚理论我们设计一个应用程序接口,以使你熟悉前面所讨论的思想和规范请 注意,这是一种实际的解决方法而非一种理论上的方法。我们采用这种实际的方式是为了让

我要回帖

更多关于 电脑启动就关机 的文章

 

随机推荐