Linux 学习

Linux 学习

http://www.cnitblog.com/woo/archive/2005/11/05/3907.html

 

Linux系统新手学习的11点建议

Posted on 2005-11-05 09:17 stone 阅读(330) 评论(1)   编辑  收藏 收藏至365Key 所属分类: Unix/Linuix/solaris
  随着Linux应用的扩展许多朋友开始接触Linux ,根据学习Windwos的经验往往有一些茫然的感觉 :不知从何处开始学起。这里介绍学习Linux的一些建议。 <br>     一、从基础开始: 常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题 都是很基础的。例如:为什么我使用一个命令的时候 ,系统告诉我找不到该目录,我要如何限制使用者的权限等问题 ,这些问题其实都不是很难的,只要了解了 Linux 的基础之后,应该就可以很轻易的解决掉这方面的问题 。而有些朋友们常常一接触Linux 就是希望构架网站,根本没有想到要先了解一下Linux 的基础。这是相当困难的。 <br>     二、Linux命令是必须学习 虽然Linux桌面应用发展很快,但是命令在Linux中依然有很 强的生命力。Linux是一个命令行组成的操作系统 ,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的 ,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取 、到进行复杂的多媒体图象和流媒体文件的制作。举一个例子 :Linux的常用命令find,察看man文档 ,初学者一定会觉得太复杂而不原意用, 但是你一旦学会就爱不释手.它的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和gre p命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具 来完成,恐怕要多花十几陪的时间. 不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的 和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给 大家,通过这些基础命令的学习我们可以进一步理解Linux系统: 安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh 文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln 系统管理相关命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last 网络操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup 系统安全相关命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho <br>     <br>     三、选择一本好的工具书 工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新 手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不 多,笔者强烈建议阅读影印本的"O'Reilly原版Linux图 书 http://www.oreilly.com.cn/ ",而且出版社还提供了一个非常好的路线图: http://www.oreilly.com.cn/guide/guide_linux.php。<br>     四、选择一个适合你的Linux发行版本 目前全球有超过1百多个Linux发行版本,在国内也能找到十几个 常见版本。如何选择请根据你的需求和能力,Redhat Linux 和Debian Linux是网络管理员的理想选择。对于英语不是很好的读者红旗L inux、中标Linux这些中文版本比较适合。现在一些Linu x网站有一些Linux版本的免费下载,这里要说的是并不适合Li nux初学者。 <br>     五、 养成在命令行下工作: 一定要养成在命令行下工作的习惯,要知道X-window只是运行 在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢 ,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的 。从网管员来说,命令行实际上就是规则,它总是有效的 ,同时也是灵活的。即使是通过一条缓慢的调制解调器线路 ,它也能操纵几千公里以外地远程系统。<br>       六、 选择一个适合你的Linux社区; 随着Linux应用的扩展,出现了不少Linux社区 。其中有一些非常优秀的社区: www.linuxforum.net(国内最高水平GNU站点)、 http://www.chinaunix.net/ (中国最大的Unix技术社区),但是这几个论坛往往是Linux 高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没 有结果。 <br>     七、勤于实践: 要增加自己Linux 的技能,只有通过实践来实现了。所以,赶快找一部计算机 ,赶快安装一个 Linux 发行版本,然后进入精彩的Linux世界。相信对于你自己的 Linux 能力必然大有斩获。此外,人脑不像计算机的硬盘一样 ,除非硬盘坏掉了或者是资料被你抹掉了,否则储存的资料将永远而且 立刻的记忆在硬盘中。在人类记忆的曲线中,你必须要不断的重复练习 才会将一件事情记得比较熟。同样的,学习 Linux 也一样,如果你无法经常学习的话,学了后面的,前面的忘了 。你对Linux命令熟悉后你可以开始搭建一个小的Linux网络 ,这是最好的实践方法。Linux是网络的代名词 ,Linux网络服务功能非常强大,不论是邮件服务器 、Web服务器、DNS服务器等都非常完善。当然你不需搭建所有服 务,可以慢慢来。需要说明的是这个Linux网络对于初学者有两三 台计算机即可,其中一台计算机最好安装Windows系统 。自己多动手,不要非要等着别人帮你解决问题。<br >  &amp ;nbsp;  八、 如何得到联机帮助 和私有操作系统不同,各个Linux的发行版本的技术支持时间都较 短,这对于Linux初学者是往往不够的。其实当你安装了一个完整 的Linux系统后其中已经包含了一个强大的帮助 ,只是可能你还没有发现和使用它们的技巧。 1. 主流Linux发行版都自带非常详细的文档(包括手册页和FAQ ),从系统安装到系统安全,针对不同层次的人的详尽文档 ,仔细阅读文档后40%问题都可在此解决。 2. 查阅经典工具书和Howto,特别是Howto是全球数以万计的L inux、Unix的经验总结非常有参考价值通常40 %的问题同样可以解决。<br>&nbsp ;    九、在Linux论坛获取帮助 如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了 。Linux的使用者一般都是专业人士,他们有着很好的电脑背景且 愿意协助他人,Linux高手更具有鼓励新手的文化精神 。如何在Linux社区获得帮助,需要说明的是你要有周全的思考 ,准备好你的问题,不要草率的发问,否则只会得到到草率的回答或者 根本得 不到任何答案。越表现出在寻求帮助前为解决问题付出的努力 ,你越能得到实质性的帮助。最好先搜寻一下论坛是否有您需要的文章 。这样可以获得事半功倍的效果。 下面笔者在论坛看到的一个好问题:" 安装红旗4.0 后,系统紫光输入法自带的双拼方案和我的习惯不一样 ,如何自定义双拼方案解决?谢谢?"这个问题很简练 ,笔者五分钟后就给出了解决方法:"首先备份原文件到其他目录 ,然后删掉/usr/local/unispim /unispimsp.ksc,编辑/usr/local /unispim/unispimsp.ini ,最后重启动计算机,生成新的unispimsp.ksc"另外得到回复后如果问题解决,向帮助过你的人发个说明 ,让他们知道问题是怎样解决的,这种补充有助于他人在邮件列表 /新闻组/论坛中搜索对你有过帮助的完整解决方案 ,这可能对他们也很有用。 下面看看一个让人无法回答的问题:"救命各位高手 ,向你们请教一些问题:如何在Linux下配制HTTP、FTP 、Samba、DNS、DHCP、Sendmail服务器,谢谢" 这样的问题我想即使Linux高手也很难快速准确精练的回答你。 你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码 或者数据完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件 ,尽量把它剪裁得越小越好。可能你会遇到这种情况 ,对于一个问题会出现不同内容回答,这时你需要通过实践来验证 。另外把这个问题放在其他Linux社区请求帮助也是一种选择 。如果得不到答案,请不要以为我们觉得无法帮助你 。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的 选择。 另外发问的时候一定要注意到某些礼节。因为Linux社区是一个松 散的组织、也不承担回复每个帖子的义务。它不是技术支持。&lt ;br>      十.用Unix思维学习Linux Linux是参照Unix思想设计的,理解掌握Linux必须按照 Unix思维来进行。思想性的转变比暂时性的技术提高更有用 ,因为他能帮助你加快学习速度。 <br>     十一.学习专业英文 如果你想深入学习Linux,看不懂因为文档实在是太难了 。写的最好的,最全面的文档都是英语写的,最先发布的技术信息也都 是用英语写的。即便是非英语国家的人发布技术文档 ,也都首先翻译成英语在国际学术杂志和网络上发表 。安装一个新的软件时先看README,再看INSTALL然后看 FAQ,最后才动手安装,这样遇到问题就知道为什么 。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间 。<br> &nbsp ;   11.最后是Linux学习的路线图:<br>       1. 掌握至少50个以上的常用命令。<br>&amp ;nbsp;  &amp ;nbsp; 2. 熟悉Gnome/KDE等X-windows桌面环境操作 。<br> &nbsp ;   3. 掌握.tgz、.rpm等软件包的常用安装方法 <br>     4. 学习添加外设,安装设备驱动程序(比如网卡) <br>     5. 熟悉Grub/Lilo引导器及简单的修复操作 。 <br>     6. 熟悉Linux文件系统 和目录结构。 <br>     7. 掌握vi,gcc,gdb等常用编辑器,编译器,调试器 。 <br>     8. 理解shell别名、管道、I/O重定向、输入和输出以及shel l脚本编程。 <br>     9. 学习Linux环境下的组网。 以上是笔者学习Linux一些经验,希望对你有些帮助。&lt ;br><br>引文 http://www.chinaitlab.com/www/news/article_show.asp?id=36967
Feedback
 
 
http://www.blogjava.net/nehu/articles/52120.html
 
 

Java入门指南[好文转载]

Posted on 2006-06-12 09:51 小李程式 阅读(39) 评论(0)   编辑  收藏 引用 收藏至365Key 所属分类: 好文转载

 很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔"。但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!

要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。J2SE开发桌面应用软件比起VC,VB,DELPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。所以现在应用最广泛又最好学的就是J2EE了。J2EE又包括许多组件,如JSP,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。

那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。然后你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程 跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?还好,SUN提供了Javabean可以把你的JSP中的Java代码封装起来,便于调用也便于重用。接着就是EJB了,EJB就是Enterprise JavaBean,看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看JavaMail了。

好了,对Java和J2EE有了一些基本概念之后,你就应该编一些程序了,千万不要纸上谈兵哦。最好找一些有实例且带光盘的书来看,这样看到好的程序就可以直接Ctrl+C再Ctrl+V,也不用劳您老大架再亲自把它 再输一遍吧,再说直接复制还不用怕出错,何乐而不为呢!还有就是要经常上一些好的Java编程文章,有好的文章要Cut下来,有问题尽管问,只要问题不是太傻,一般高手都会回答你的。下面介绍几个好的Java方面的编程网站:
CSDN论坛 http://www.csdn.net/ 中国最有名的技术论坛,《程序员》杂志就是他们出版的,你可以在上面提出问题,马上就有人回答你,如果你觉得好,你可以给那人加分;
Java研究组织 http://www.javaresearch.org/ 上面有很多原创文章,高手还是挺多的;
Java开发者 http://www.chinajavaworld.com/ 那里Java资料比较全;
java.com.cn http://www.java.com.cn/ 看这域名就知道有多牛,注册用户快接近一万了,同时在线人数也在一千左右,人气很旺的;
IBM的开发者网络 http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM永远的蓝色巨人;

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗 ?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。所以你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他还愿意不厌其烦地教你,这样好象有点难哦!

还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。学Java必读的两个开源程序就是Jive和Pet Store。

Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 http://www.jdon.com/ 去下载,或到同济技术论坛的服务器上 ftp://nro.shtdu.edu.cn 去下,安装上有什么问题,可以到论坛上去提问。

Pet Store(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要错过了。

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。其实说这种话的人就如当年小日本号称"三个月拿下中国"一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/ ,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)吧,现在很流行的Struts就是它的一种实现方式,不过Struts用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Ref actoring(重整)和极限XP编程,相信你又会上一个台阶。

做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧,你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的来了。。。。。。

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
下面介绍两个好的开源项目网站:
湖北省软件公共开发平台 http://gro.clinux.org/
共创联盟 http://cosoft.org.cn/

哇,好高兴哦,我终于成为高手了!非也,非也。古人云:"识时务者为俊杰"。你知道计算机界现在的发展形势吗?你知道微软的.NET蓝图和SUN ONE计划之间的明争暗斗吗?你知道计算机技术将向何处发展吗?其实从各大计算机厂商最近的动作,都可以看出来"Web服务将是下一代互联网应用的制高点",而微软的.NET蓝图和SUN ONE计划的斗争焦点,也就是Web服务。Web服务就是一个崭新的分布式计算模型,它是一系列标准的综合(XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同语言编写的软件能够轻易的集成起来,使网络资源和Web站点变成一种服务而不是混乱的垃圾场。不远的将来,我们就可以在家里点击一下鼠标,就可以完成出门旅游的全部准备工作,包括定飞机票,定旅游线路,定好房间等。请注意,这所有的一切都是Web站点间自动完成的,再也不用象现在一样,表面上是电子商务,实际上很多环节都是人工操作。也许你会觉得这是天方夜谈,不过就近的说,你也很有可能承接一个项目,要集成两个企业的ERP系统。很有可能上游企业的系统是用Delphi编的,而下游企业的系统是用Java编的。你说你是Java高手,大家都看者你怎么做呢。所以啊,你还得学习新技术,如Web服务,而且你Delphi也要懂一点吧(Delphi6现在已经提供Web服务的控件了)。 你编的Java系统,可能要和.NET集成,所以你.NET要懂一点吧?到最后,你可能发现你已经成为Java高手了,但很多时间却在搞别的技术。太极张三丰里说,最厉害的招式就是没有招式,可能就是这个道理吧!

因为刚刚兴起,所以网上Web服务的资料不是很多,我还是给大家推荐几个网站吧:
中国UDDI技术联盟 http://www.uddi-china.org/
CSDN的柴晓路专栏 http://www.csdn.net/develop/author/ColumnAuthor/fennivel/ (注:柴晓路也是互联网上一个有名的人物,他发表过很多关于Web服务的文章,还出了一书,应该称的上是中国Web服务技术的先行者 )
IBM的开发者网络的XML&Web Service专栏: http://www-900.ibm.com/developerWorks/cn/xml/index.shtml?csdn IBM可是Web服务的力推者

呜…你费劲千心万苦,总算成为Java高手了,怎叫人不由喜极而泣呢!是啊,真不容易,真不简单,真叫人感动啊!那么打个电话告诉我吧,什么?我的电话号码是多少?昏到,你打电话问不就知道了吗,真是的……
why edited on 2004-11-13 19:52


初学Java的朋友,建议您看一看
--------------------------------------------------------------------------------

初学Java的朋友,建议您看一看
Java总有它的千般好处使你选择它,但这些随便翻翻书或在网上逛一圈就能找到答案。在本文中,笔者把自己学习Java的一些切身体会和过程写出来,供初学者做个参考。

我在学习Java的过程中主要围绕以下几个方面来学习:

1.时刻提醒自己Java是一种OOP语言工具,而不仅仅是编码,只有这样才能总体把握和运用Java。

2.在学习的过程中,最好能够了解Java的底层机制,而不是仅仅停留在表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。

3.在学习的过程中一定要动手做、写代码,而不是抱一本书看看就行。很多东西和体会必须自己动手才能真正属于自己,最好能参与一些实际的项目。

4.在学到一定阶段后,你开始希望用学过的东西做些什么。这时的你应该开始学习一些更多、更复杂的知识,比如J2EE平台的构建、EJB的开发等。对于这一部分,我建议最好找一本较薄的书先了解一个大概,心里有个总体的认识,对更多的技术术语做个初步掌握。我认为这个阶段看看《J2EE技术实践》很不错,它可以让你了解J2EE包含的各种技术和框架,同时提供很多实际的例子来加深对J2EE的整体了解。

学习Java的兴趣和决心起了很关键的作用。在有了上述基础后,我便开始一步一步地学习Java。

Java环境的搭建

要运行Java程序,必须安装JDK。JDK是整个Java的核心,其中包括了Java编译器、JVM、大量的Java工具以及Java基础API。

可以从http://Java.sun.com下载JDK,有1.4版本和1.31版本。我的学习环境中首先,采用的是1.31版本。

解压安装。然后,进行环境设置。

1.对于Windows平台要进行以下设置:

set PATH=YOUR_INSTALL_ DIR\bin; C:\Windows;C:\Windows\Command
set classpath=. YOUR_INSTALL_DIR\lib\tools.jar

2.对于Linux平台要编辑/etc/profile文件:

JAVA_HOME=your_install_dir/JDK/j2sdk
CLASSPATH=$JAVA_HOME/lib/tools.jar JAVA_HOME/lib/td.jar JAVA_HOME/jr
-e/lib/rt.jar:.
PATH=$PATH JAVA_HOME/bin
export PATH PS1 USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE
INPUTRC JAVA_HOME CLASSPATH RESIN_HOME

最后,在终端上输入Java看能不能找到这个命令,如果能找到安装就成功了。

下面介绍一下JDK的几个重要的命令:

◆Java执行工具,是启动JVM(虚拟机)并执行class(BYTE CODE)文件的命令;

◆javac 编译器,由.java文件生成.class文件;

◆jar Java压缩打包工具;

◆Javadoc 文档生成器。

最后就是JDK document.tion,这是JDK的联机帮助文档,是最有用和最重要的学习参考文档,应该多看。

开始写自己的代码

现在环境有了,应该写个简单的代码进行测试了。还是从经典的"hello word"开始。

1. 先用编辑器写一代码(我用的是Linux的vi):

[stone@coremsg work]$ vi Hello.Java
public class Hello{
public static void main(String []argc){
System.out.println("Hello Word!");
}
}

2. 编译:

[stone@coremsg work]$ Javac Hello.Java

3. 执行:

[stone@coremsg work]$ Java Hello
Hello Word!

成功了!这就是我的第一个Java程序。从那时起我知道已开始走进Java的世界,接下来就靠自己的努力了。在这个过程中,笔者认为有几点需要注意。

学习一门新的语言,参考书是离不开的。我的建议是开始最好找一本篇幅较短的入门书来学习那些最简单、最基本的东西,包括学习Java语法等。同时,对一个最简单的程序也应该多去调试,多想想如果改动一下会出现什么结果?为什么必须那样写?多去想想这些问题然后去操作,会让你有更多的收获。这样反复地思考是很有用的。此外,在这一阶段还应该多看JDK的联机帮助,尽量多地掌握JDK提供的Java基本类库API。

在有一定基础、能够写一些简单的程序后,可以开始看《Thinking in Java》这本书。它比较完整地介绍了Java的语法、面向对象的特性、核心类库等。通过这一层次的学习能够加深对Java的理解和底层原理的运用,同时又可以完整地了解Java的整个体系。在这一阶段,应该重点学习Java的面向对象编程语言的特性,比如继承、构造器、抽象类、接口、方法的多态、重载、覆盖、Java的异常处理机制等,要对上述概念有非常清楚的了解。这样做的目的,是要让自己把这些技术应用到实践中进行合理的程序设计(比如,你会考虑一个类是用抽象还是接口来设计等)。这就要求必须在大量的实践中去应用和学习。这也是当初很多朋友给我的建议。

学习更多

如果要用Java来完成各种功能更强大的任务,那么就要学习语言以外的更多的东西。

1.Java Web编程

对于Java Web 编程来说,应该而且必须熟悉和掌握HTTP协议,可以参考 Stevens的《TCP/IP 详解》第三卷。Java Servlet技术提供了生成动态Web页面内容的能力,这在你的Java项目中是最基本的功能之一,所以必须学习。通过这一阶段的学习应该掌握Servlet/JSP的Web编程。

2. J2EE的学习

J2EE包含的技术太多了。如果你想坐在桌子旁边抱着一大堆书来学习的话,效果不大的。我建议在开始这一阶段的学习的时候,可以按以下步骤来做,总的思想是"总体把握,各个击破"。

◆ 了解J2EE中的技术术语的含义。

我的感觉是J2EE标准中涉及到的各种技术很多,如果一开始就一个一个去学习的话是不现实的,也是没效果的。我的建议是,先对其中的技术有个大概的了解,比如EJB、JavaIDL、JTA等。可能你不知道怎么去写一个EJB,但是要知道什么是EJB、它能做什么,当有了这样的概念后,再去有目的地学习它就会快 很多。我还要再重复一句??必须要在实践中动手去做才行。

◆ 了解J2EE中的设计模式,这样能帮助你对J2EE做个整体把握。

MVC开发模式被证明是有效的处理方法之一。它可以分离数据访问和数据表现。你可以开发一个有伸缩性的、便于扩展的控制器,来维护整个流程。通过这一层次的学习,当你面对一个项目的时候,应该首先把握它的总体架构的设计,以及决定采用J2EE标准中的哪些技术。

◆ 了解一些J2EE平台的典型案列,加深对这一技术的概念和理解。

平时可以多留意这方面,熟悉一些典型案例,分析它为什么要采用那个时间?那样做能达到什么样的目的?然后联系到自己身边的项目是否可以作为参考。

◆ 学习J2EE下的各种技术。

在有了前几阶段的学习后,可以自己搭建一个J2EE平台开始具体学习每一种技术。你可以参与公司相关项目进行学习,也可以自己搭建一个平台进行学习。这时候应该找点相关的书来一步一步学习,没有捷径可走。如果你不满足于这些,那么还应该更深入地学习UML、设计模式等方面的东西

更多资源:
参与论坛讨论: http://www.java-cn.com/forum/index.jsp
更多技术文章: http://www.java-cn.com/technology/index.jsp



JUnit介绍

一、JUnit简介
JUnit是基于面向对象构建的java单元测试框架。
JUnit是开放源代码项目,可按需要进行扩展。

二、安装JUnit
首先获取JUnit的软件包,从http://www.junit.org 下载最新的软件包。
将软件包在适当的目录下解包。
这样在安装目录下找到一个名为junit.jar的文件,将这个jar文件加入

CLASSPATH系统变量。

三、JUnit框架介绍:
一)TestCase--测试用例,对每个测试类,都要定义一个测试用例。
JUnit支持两种运行单个测试的方法:静态的和动态的方法。
1、静态的方法就是覆盖TestCase类的runTest()方法,一般是采用内部类的方式

创建一个测试实例:
TestCase test01 = new testCar("test getWheels") {
public void runTest() {
testGetWheels();
}
}
采用静态的方法要注意要给每个测试一个名字,这样你就可以区分哪个测试失败

了。

2、动态的方法是用内省来实现runTest()以创建一个测试实例。这要求测试的名

字就是需要调用的测试方法的名字:
TestCase test01 = new testCar("testGetWheels");
JUnit会动态查找并调用指定的测试方法。动态的方法很简洁,但如果你键入了错

误的名字就会得到一个令人奇怪的NoSuchMethodException异常。动态的方法和静

态的方法都很好,你可以按照自己的喜好来选择。

二)TestSuite
一旦你创建了一些测试实例,下一步就是要让他们能一起运行。我们必须定义一

个TestSuite。在JUnit中,这就要求你在TestCase类中定义一个静态的suite()方

法。suite()方法就像main()方法一样,JUnit用它来执行测试。在suite()方法中

,你将测试实例加到一个TestSuite对象中,并返回这个TestSuite对象。一个

TestSuite对象可以运行一组测试。
TestSuite和TestCase都实现了Test接口,而Test接口定义了运行测试所需的方法

。这就允许你用TestCase和TestSuite的组合创建一个TestSuite。
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTest(new testCar("testGetWheels"));
suite.addTest(new testCar("testGetSeats"));
return suite;
}
public static Test suite() {
return new TestSuite(testCar.class);
}

三)TestRunner
有了TestSuite我们就可以运行这些测试了,JUnit提供了三种界面来运行测试
[Text UI] junit.textui.TestRunner
[AWT UI] junit.awtui.TestRunner
[Swing UI] junit.swingui.TestRunner
java junit.textui.TestRunner yourTestclass

Fixture
如果需要在一个或若干个的类执行多个测试,这些类就成为了测试的context。在

JUnit中被称为Fixture。当你编写测试代码时,你会发现你花费了很多时间配置/

初始化相关测试的Fixture。将配置Fixture的代码放入测试类的构造方法中并不

可取,因为我们要求执行多个测试,我并不希望某个测试的结果意外地(如果这

是你要求的,那就另当别论了)影响其他测试的结果。通常若干个测试会使用相

同的Fixture,而每个测试又各有自己需要改变的地方。
为此,JUnit提供了两个方法,定义在TestCase类中。

protected void setUp() throws java.lang.Exception
protected void tearDown() throws java.lang.Exception

覆盖setUp()方法,初始化所有测试的Fixture,如建立数据库连接,将每个测试

略有不同的地方在testXXX()方法中进行配置。
覆盖tearDown(),释放你在setUp()中分配的永久性资源,如数据库连接。
当JUnit执行测试时,它在执行每个testXXXXX()方法前都调用setUp(),而在执行

每个testXXXXX()方法后都调用tearDown()方法,由此保证了测试不会相互影响。

四)Assert
Assert类中定义了相当多的assert方法,主要有assert(),assertEquals(),

assertNull(), assertSame(), assertTrue(), fail()等方法。

Faile失败是一个期望的被assert方法检查到的结果。
Error错误则是意外的问题引起的,如ArrayIndexOutOfBoundsException。

四、测试流程:
1. 扩展TestCase类;
2. 覆盖runTest()方法(可选);
3. 对应测试目标类书写testXXXXX()方法;
4、扩展TestSuite类,重载suite()方法,实现自定义的测试过程;
5. 运行TestRunner进行测试;
zua edited on 2004-12-09 11:56

密码学领域重大发现:山东大学王小云教授成功破解MD5

2004-09-04 09:39

[本站讯]2004年8月17日的美国加州圣巴巴拉,正在召开的国际密码学会议(Crypto'2 004)安排了三场关于hash函数的特别报告。在国际著名密码学家Eli Biham和Antoine Joux相继做了对SHA-1的分析与给出SHA-0的一个碰撞之后,来自山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告。在会场上,当她公布了MD系列算法的 破解结果之后,报告被激动的掌声打断。王小云教授的报告轰动了全场,得到了与会专家 的赞叹。报告结束时,与会者长时间热烈鼓掌,部分学者起立鼓掌致敬,这在密码学会议上是少见的盛况。王小云教授的报告缘何引起如此大的反响?因为她的研究成果作为密码学领域的重大发现宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码 学界的轩然大波。会议总结报告这样写道:"我们该怎么办?MD5被重创了;它即将从应用中淘汰。SHA-1仍然活着,但也见到了它的末日。现在就得开始更换SHA-1了。"

关键词:碰撞=漏洞=别人可以伪造和冒用数字签名。

Hash函数与数字签名(数字手印)

HASH函数,又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法,它有一种类似于指纹的应用。在网络安全协议中,杂凑函数用来处理电子签名,将冗长的签名文件压缩为一段独特的数字信息,像指纹鉴别身份一样保证原来数字签名文件的合法性和安全性。在前面提到的SHA-1和MD5都是目前最常用的杂凑函数。经过这些算法的处理,原始信息即使只更动一个字母,对应的压缩信息也会变为截然不同的"指纹",这就保证了经过处理信息的唯一性。为电子商务等提供了数字认证的可能性。

安全的杂凑函数在设计时必须满足两个要求:其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;其二是找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。现在使用的重要计算机安全协议,如SSL,PGP都用杂凑函数来进行签名,一旦找到两个文件可以产生相同的压缩值,就可以伪造签名,给网络安全领域带来巨大隐患。

MD5就是这样一个在国内外有着广泛的应用的杂凑函数算法,它曾一度被认为是非常安全的。然而,王小云教授发现,可以很快的找到MD5的"碰撞",就是两个文件可以产生相同的"指纹"。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。因此,业界专家普林斯顿计算机教授Edward Felten等强烈呼吁信息系统的设计者尽快更换签名算法,而且他们强调这是一个需要立即解决的
问题。

石破惊天 MD5堡垒轰然倒塌

一石击起千层浪,MD5的破译引起了密码学界的激烈反响。专家称这是密码学界近年来" 最具实质性的研究进展",各个密码学相关网站竞相报导这一惊人突破。

MD5破解专项网站关闭

MD5破解工程权威网站http://www.md5crk.com/ 是为了公开征集专门针对MD5的攻击而设立的,网站于2004年8月17日宣布:"中国研究人员发现了完整MD5算法的碰撞;Wang, Feng, Lai与Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128几个 Hash函数的碰撞。这是近 年来密码学领域最具实质性的研究进展。使用他们的技术,在数个小时内就可以找到MD5 碰撞。……由于这个里程碑式的发现,MD5CRK项目将在随后48小时内结束"。

对此, http://www.readyresponse.org主页专门转载了该报道 http://www.aspenleaf.com
/distributed/distrib- recent.html和几个其它网站也进行了报道。

权威网站相继发表评论或者报告这一重大研究成果

经过统计,在论文发布两周之内,已经有近400个网站发布、引用和评论了这一成果。国内的许多新闻网站也以"演算法安全加密功能露出破绽 密码学界一片哗然"为题报道了 这一密码学界的重大事件。(报导见 http://www.technewsworld.com/perl/board/mboard .pl?board=lnitalkback&thread=895&id=896&display=1&tview=expanded&mview=flat,该
消息在各新闻网站上多次转载。)

数字认证 你的未来不是梦

由于MD5的破译,引发了关于MD5产品是否还能够使用的大辩论。在麻省理工大学Jeffrey I. Schiller教授主持的个人论坛上,许多密码学家在标题为"Bad day at the hash function factory"的辩论中发表了具有价值的意见( http://jis.mit.edu/pipermail/saag/2004q3/000913.html)。这次国际密码学会议的总主席Jimes Hughes发表评论说"我相信这(破解MD5)是真的,并且如果碰撞存在,HMAC也就不再是安全的了,…… 我认为我们应该抛开MD5了。" Hughes建议,程序设计人员最好开始舍弃MD5。他说:"既然现在这种算法的弱点已暴露出来,在有效的攻击发动之前,现在是撤离的时机。"

同样,在普林斯顿大学教授EdwardsFelton的个人网站( http://www.freedom-to-tinker.com/archives/000664.html )上,也有类似的评论。他说:"留给我们的是什么呢?MD5已经受了重伤;它的应用就要淘汰。SHA-1仍然活着,但也不会很长,必须立即更换SHA-1,但是选用什么样的算法,这需要
在密码研究人员达到共识。"

密码学家Markku-Juhani称"这是HASH函数分析领域激动人心的时刻。( http://www.tcs.hut.fi/~mjos/md5/)"

而著名计算机公司SUN的LINUIX专家Val Henson则说:"以前我们说"SHA-1可以放心用 ,其他的不是不安全就是未知", 现在我们只能这么总结了:"SHA-1不安全,其他的都完了"。

针对王小云教授等破译的以MD5为代表的Hash函数算法的报告,美国国家技术与标准局(NIST)于2004年8月24日发表专门评论,评论的主要内容为:"在最近的国际密码学会议(Crypto 2004)上,研究人员宣布他们发现了破解数种HASH算法的方法,其中包括MD4,MD5,HAVA L-128,RIPEMD还有
SHA-0。分析表明,于1994年替代SHA-0成为联邦信息处理标准的SHA-1的减弱条件的变种 算法能够被破解;但完整的SHA-1并没有被破解,也没有找到SHA-1的碰撞。研究结果说明SHA-1的安全性暂时没有问题,但随着技术的发展,技术与标准局计划在2010年之前逐步淘汰SHA-1,换用其他更长更安全的算法(如SHA-224、SHA-256、SHA-384和SHA-512)来替代。"

详细评论见:http://csrc.nist.gov/hash_standards_comments.pdf

2004年8月28日,十届全国人大常委会第十一次会议表决通过了电子签名法。这部法律规定,可靠的电子签名与手写签名或者盖章具有同等的法律效力。电子签名法的通过,标志 着我国首部"真正意义上的信息化法律"已正式诞生,将于2005年4月1日起施行。专家认为,这部法律将对我国电子商务、电子政务的发展起到极其重要的促进作用。王小云教授的发现无异于发现了信息化天空的一个惊人黑洞。我们期待着王小云教授和她的团队能够成就"女娲补天"的壮举,为人类的信息化之路保驾护航。

近几天看到了关于开源的热烈讨论,笔者认为这样的话题可以再深入讨论,故在此不揣冒昧再撰一文。

一、重要性:

1、讨论之火爆,说明现下国内业界人士已对开源有了颇多的接触和认识。这是很好的事情,如果关于开源的概念和讨论有朝一日能够在业外流行开来(如同手机、汽车和D版),那相信国内的软件业将会呈现一次爆炸性的增长,这无疑是业界同道们的福祉。

2、这其实是关系到整个产业链的根本性关键问题,如果认为不值一提的话,就只能说是闭目塞听了。简单举例说明吧:作为国家信息产业的决策者,是重点自主发展开源体系的软件,还是与主流产商(主要是MS)合作?作为各软件公司的经营者,是采用开源体系软件进行开发,还是采用商用软件?作为每一位程序员,在这混乱无比的时代,是主要学习研究开源体系(现在主要是Linux和Java),还是学习研究商用软件(以Windows和.NET为代表)?作为最终用户,是继续沿用D版等待罚单,还是费力学习使用免费产品……。这些,全是都是有关切身利益与方向的大问题。

二、利弊

这样的题目未免太大,笔者只能尽量以所学所用所见的经验再加上部分臆测而论,自然不免以偏概全,姑且作为抛砖引玉之用吧,望各位同道能补充指正。

1、利

(1)基本上是免费的:以国内的GNI Per Capita(人均国民生产总值)而论,商用软件还是很昂贵的。其实就算对于外国人来说,商用软件也很贵,所以Gates等人才能创造商业奇迹,而现下国外开源的风才会刮得那么猛。特别对于程序员来说,如果采用商用体系学习开发的话,机器上的软件价值少说也是以万元计吧。"天下没有免费的午餐",当国人(包括程序员)多年来已经吃惯了"免费午餐"的时候,突然说"午餐不再免费"了,这样的打击真是够呛!所以,如果你没有足够的资金享用商用软件的话,早一天考虑开源体系或许不至于在突然的打击面前束手无策。(笔者以前一直是用JB的,半年前考虑到版权问题用了eclipse,现在发现免费的eclipse竟然更加强大。)

(2)开放源代码的对于学习研究的意义:对于国内大多数的用户(包括程序员),使用开源主要是可以节省资金,而对于程序员中的高手来说,开放的代码才是至宝,原因在于,开源代码是迅速提高程序员水平的捷径。这世上本无天才,所谓的天才正如牛顿所说是"站在巨人的肩膀上"。这就是大家所熟悉的武侠小说中,为何以年青侠客奇遇资深侠客获取盖世武功作为主线的原因。学习前人的好东西,并在其之上发展,这对于学习研究者来说无疑是一件事半功倍的事情。特别对于系统软件(linux)而言,通过修改源代码,实现安全定制与特殊用途,这真是件很好的事情。

(3)开源对于商业价值:客观地说,开源现在基本上是老外的事情,国内的大多数所谓开源,无非是点很简单的代码,找本书看看就有了,没什么值得保密的。这一方面是技术问题,更重要的是市场问题,国外现在已经形成了一个具有现实意义的开源市场,所以开源已经不是什么无利可图的事情了。a、原作者的高声望与高就业机会:如论坛上《开源还是不开,难道是个问题》一文中BT作者的事例,还有就是Linux之父Linus Torvalds、struts的主设计师Craig McClanahan等等。老外的开源软件,很多是由本身在软件公司、教育科研机构工作的程序员业余合作的成果,人家有兴趣、有精力去与人合作,展示他们的天份与想象,目的,就是其作品能够得到广大同道的认可,能够在与同道的不断交流中获得程序水平的提高与设计艺术的享受。同时,也就获取了更好的工作机会。试想,这帮老大如果只是满足于像我等使用商用IDE做点所谓Application的话,即使是到了MS,相信也不会有什么好前途。b、开源软件公司运用服务盈利:如MySQL、JBoss这样红透半边天的免费软件,给人做做所谓"咨询",也就是说以低层软件公司为服务对象,或出点什么书籍、资料等等,其收益能低得了吗?c、免费试用的模式:先免费试用,获取认可与市场之后,再转为商用。这方面J2EE界中的Jive和笔者最近用的MyEclipse、JSF Studio等等都是其中的好例子。免费试用,说白了是一种成本低廉的优秀广告,相当于聪明的水果摊贩试尝西瓜之类的手法。所以说,开源最终也是一种商业模式(为避免本文太长,详见本人的《浅析集中与分散软件商业模式》,稍后完成)。

(4)开源是发展中国家的机会与福祉:这大概就不用说了吧。(举个简单的例子:前几天我已经把JB给卸了)。

其它的优点就由各位道友一一说来吧……

2、弊

(1)难于使用:这是客观事实,但诸位道友如果在享受免费的产品时还在以攻击为要务的话,就未免有些不近人情了。这世上本来就很难有比MS的产品更容易使用的东西,更何况还是免费的。笔者以为,国内大凡从事软件业的同道,考虑任何问题都不要忘了D版。可以说,D版是一个摇篮,我们在其中不断成长;而现在,当D版已经开始限制我们成长的时候,是扔掉它还是睡在其中不再长大,这一个问题。可惜,这其实根本就没有选择,正如摇篮一样,D版是不可能长久的。所以,是准备必要的资金以享受"好用"的商业软件,还是费力去学习、使用、发展"难用"的开源软件,这也许才是一个问题。从实际的角度出发,尽力让产品变得easy也正是开源体系应该努力的方向。

(2)学习开源体系的难度高,时间长

Linux与Windows、J2EE与.NET,玩过的人都知道,谁费劲?表面上看来这个问题很容易定论,其实不然。简单地来说,低层的应用,商用软件的效率较高;高层的应用,开源的价值较大。现在论坛上经常有人咒骂开发难度的降低导致收入下降,甚而将矛头对准Open source,这实在是冤枉好人。"水涨船高"本就是自古以来所有行当的必然规律,而现今IT业偏偏又是那种涨得最快的行当。这一点上不得不提一下MS和Internet,可以说,正是MS与Internet的伟大,将PC与软件传遍了全世界,缘于其方便和易于传播;可也正因为如此,PC与软件又如此轻易地淘汰与贬值。再次提醒诸位,现今的IT是个极其危险的行当。因为其中容易的东西(如操作、简单维护开发)渐渐趋于饱和。所以,如果你试图象"泡沫年代"那样轻易地获取高额利润而到这个 行业淘金的话,或许应该冷静地思考一下了。现今,发达国家的IT业,基本上是属于高技术选手,国内开始有这个趋势,如果市场体制比较合理之后,相信10年后大体上也就如此。当整个行业成熟之后,仍然会有较高的薪水,也有很多机会,只是难度越来越大。所以,与其抱怨像电子论坛那样半小时搞定的东西下载满天飞,不如去考虑一下那些即使下载来,也需要很长时间才能领会的事物(如spring、 ofbiz或.NET的Duwamish)。毕竟,ASP.NET越好用,MS的收益越高,您的¥就越少。当全业界都会做WEB的时候,您是否该考虑点其它的东西,或是把它做得更优秀。不过,请自信一点,如果你考虑收益的话,"社会必要劳动时间"在正常的市场体系下仍是一个公理。

(3)开源的商业价值低?

考虑到money因素,也许有人会说Linux即使再优秀,甚至全面超越了Windows,全面占据了市场,也不可能像Windows赚钱。这您可就太对了。以现阶段的商业应用为而论,MS已经如此优秀,能挤出的油水大体上已经进了MS的腰包。就像过去的十年,OS、办公软件领域,是Windows、Office的胜利,DB是Oracle的胜利,今后也许还是如此。然后,社会经济是不断发展的,新的应用需求是无止境的。现今,软件业正向高度、深度、定制化的方向发展。不过,以笔者估计,今后要想在诞生MS、Oracle这样的通用软件巨无霸只怕是不可能了(Gates迷们可能要失望了)。 数以万计的小型化、专业化、本地化的软件开发服务公司也许是更为现实的景象。所以,是选择商业软件体系还是开源体系进行开发则是一重要的问题。商业体系意味着较高的成本,较低的层次与通常认为较高的效率与暂时较高的市场认可度;开源体系则是较低的成本,较高的层次与通常认为较低的效率(主要是学习、探索、集成的时间长)与潜在的市场空间。何去何从,恐怕还得根据自身实力与周围的市场环境而定。

(4)国内开源的不利形势

众所周知,国内的技术环境是比较差的。由于体制与文化的原因,科技人员在国内的前途向来就是比较惨淡的。以吹嘘和欺诈为主要能力的权钱阶层掌控着国内的市场,这从根本上导致了技术的低水平化。低层次的经济体系也就意味着技术与管理的低水平化,这同样包括软件业的。在这样的条件下,所谓信息系统建设,往往也就是在硬件与商用软件上的大把挥霍。故而以收入和地位而论,营销人才远高于技术人才是不争的事实。所以在这片土地上,想要经过多年积累成为像James Gosling或Anders Heilsberg那样的大师,恐怕是极为艰难的。走入开源体系无疑在技术研究积累上是极好的,最终的收益是高的,但也意味着更多的心血与风险。

其余的弊病望各位道友尽述……

三、总结

"存在即是合理",商业与开源软件现在与未来都将长期存在发展。软件业是有前途的,一如它的艰辛。不管是商业或开源体系,要想获得成功,都要走很长的路。应该说,软件业经过了其喧嚣的火爆之后,渐渐回归理性。"路漫漫其修远兮",愿与诸位同道共勉。

(欢迎参加http://blog.csdn.net/lgx522/archive/2004/07/24/50665.aspx 上的讨论)

需求分析方法探讨
[摘要]本文论述了需求分析的一般方法。介绍了目前通用的需求分析产品特点。结合系统模型,阐述了需求分析与系统建模的关系。
[Abstract] This article describe general method of Requirement Analysis. Introduce the characters of pop Requirement Analysis product. With System Model, expatiate the relationship between requirement analysis and system modeling.
一、 概述
据权威部门统计,目前软件的成功率约为25%,75%的软件是失败的。在这75%的失败中,约有50%以上的软件是由于需求的原因造成的。作为软件的设计和开发人员常抱怨用户需求不明确,需求常处于变更状态。新的需求往往在开发阶段才被用户提出。造成软件的完成日期不断的迟后。
一般的软件企业,往往只口头上注重用户需求。但由于没有科学的管理方法,实际上他们描述的用户需求是杂乱无章的,只言片语的。不能有效地和系统设计、开发保持同步最后开发出来的软件产品和实际有很大的差异。导致软件的失败。有证据表明,在需求阶段修正错误的工作量,是在系统设计阶段修正错误的1/10;是在开发阶段修正错误的1/100,是在发布产品阶段修正错误的1/1000。当然这是对大型系统而言,对于不同的系统,随系统的复杂程度这个比率会有所不同。
用户的需求的增加具有渐进的、增量的特点。随着需求分析人员和用户逐渐深入的交流,用户在不断地整理、规范自己的需求。需求分析人员须牢记的是用户不可能一下子给出一个完整、清晰、规范的用户需求。需求分析人员需从与用户的交流中,不断地挖掘,并加以整理,才能得到想要的需求。
需求分析一般来说需要有一个需求分析的团队,如用户代表、系统分析人员、开发人员、需求管理人员等,他们的分工不同各有侧重点。对于小型或中型项目人员可以兼任。
基于上述原因,需要从理论上规范用户需求的收集和整理。本文结合系统建模,给出了需求分析的一般性方法。它如下的包含了两个方面:
1、 技术层面
给出需求分析的系统框架,它包含了需求的项目、参与需求分析的用户、用户对于需求的可操作权限(安全性)等。
2、 操作层面
给出了需求收集、整理、分析的一般性方法。
其中介绍了系统建模和需求分析间的相互关系,最后介绍了目前几种流行的需求分析产品及它们的特点。

二、 需求分析的基本概念
需求分析的目的是完整、准确地描述用户的需求,跟踪用户需求的变化,将用户的需求准确地反映到系统的分析和设计中,并使系统的分析、设计和用户的需求保持一致。
需求分析的特点是需求的完整性、一致性和可追溯性。
完整性:是准确、全面的描述用户的需求。
一致性:是通过分析整理,剔除用户需求矛盾的方面,规范用户需求。
可追溯性:有两个方面的含义,整理和规范的需求,其一,需要不断的和用户进一步交流,保持和用户最新的需求一致;其二,和系统分析(设计)保持一致。
因此在需求分析之前我们必须建立需求分析技术层面的基本框架,从技术上保证需求分析的要求,在此基础上我们进行的需求分析才能满足项目对需求分析的要求。

三、 需求分析的系统架构
本节描述的是进行需求分析之前,如何在技术层面上建立需求分析的系统架构。

需求分析需要采用需求分析的软件。上图简要描述了需求分析软件的架构。需求分析软件一般采用C/S的结构,需求分析人员作为客户对服务器进行操作,操作主要由四个方面:系统管理(含用户的创建和授权,定义项目的术语表等)、项目视图(涉及项目的相关操作)、需求类型视图(涉及需求类型的相关操作)、需求视图(涉及需求的相关操作)。
项目包含一个或多个需求类型,需求类型包含一个或多个需求。里程碑是特定版本的需求的集合(需求分析软件含有简单的配置管理的功能),它作为软件产品的功能依据。自动文档生成是通过文档模版将里程碑的需求,自动生成相关文档。
3.1 项目
 项目在总体上定义了一个应用和系统所涉及到的需求及需求涉及的范围。它包含了在需求分析过程中参与需求分析的人员、需求类型、包含于需求类型中的需求。此外它还包含了如下信息:
 项目的相关信息(如创建人员)
 项目的里程碑
 外部的可追溯性
 安全性框架等。
3.2 用户/用户组
用户是指参与需求分析的人员,一般由软件产品的最终用户、软件开发人员、系统设计员、测试人员等组成。在需求分析产品中用户包含用户的基本描述和联系方式(如电子邮件)等,目前大多数需求分析产品还含有消息通讯的机制(类似于QQ),及时地将需求的变化告知相关的需求分析人员。
用户组是指具有相同操作权限的一个或多个用户。用户组可以被指定到 特定的项目或需求(用户组中的用户对此具有相应得操作权限)。
3.3 安全性
安全性是指在需求分析过程中,用户对需求的操作权限。安全性防止未授权的用户对关键性需求的操作。安全性是用户/用户组与需求之间的一种关系。
一般来说安全性有三个方面的含义:
 系统管理
系统维护(系统数据备份等)、用户管理、用户组管理等。
 安全性框架
定义用户的基本操作权限。这种操作权限和具体的项目、项目需求无关。如一个用户添加的需求只能由这个用户自己删除等。安全性框架又可以分为两类:
 存取级别(Access Level)创建、查看、维护需求。
 删除级别(Delete Level)删除需求。
 特定需求的安全性
建立用户/用户组与特定需求的关联,以确定此用户/用户组对需求的操作权限。
3.4 需求类型/需求
需求类型通常是以功能划分的较高层次的需求,如用户界面。需求是所要构建的系统或应用所要满足要求的说明,需求可以由业务规则、处理流程、人员的组织结构获得。需求包含于需求类型之中。需求类型/需求一般是用文字描述的,此外还可以通过需求的属性、外部文件来描述需求。
3.5 属性
属性用来描述需求相关特性,属性一般可分为两类。
系统属性:描述需求的系统特点,如需求是否被确认等。
自定义属性:由用户自定义用来描述需求的属性。如描述人员的电话号码等。
3.6需求网格
需求网格是一组相关的需求用网格的形式表示,主要用于需求的分析。一般来说可以定义显示的方式,如针对某个用户显示他所创建的需求、针对某类功能显示相关的需求等等。
3.7 需求映射
考虑这样的背景,在一个实时系统中,数字信号的采集与传输在不同的控制系统中均使用相同的实现方式,它们的需求也相同。在这种情况下我们可以采用需求映射的技术,需求映射是在不同的项目中使用相同的需求。

在图中有三个项目,项目A中的需求R3被共享出来,项目B中的R3的需求映射到项目A中的需求R3。
3.8 可追溯性(Traceability)
可追溯性是需求的一致性表现形式。它主要包含以下几个方面的含义:
 保持和用户要求的同步
必须牢记的是用户需求是不断变化的。需求分析需要适应需求的不断变化。
 保持需求之间的完整和一致
用户从各个层面提出的需求,往往含有相当多的矛盾,需求分析的一个重要的方面是要消除这些矛盾,规范用户的需求。此外需求之间的依赖性也可以通过可追溯性来表示。
 保持需求和系统设计间的同步
在大多数项目中,需求分析和系统设计没有的必然联系,这种情况造成的后果是软件产品和实际的需求相差甚远。例如采用手工的方法,可以使需求与系统设计保持一致。但这种方法是不安全的,因为没有相应的机制来强制相关人员遵守规则。所以必须从技术层面来保证需求和设计的一致,目前大多数的需求分析工具均有和系统设计工具保持同步的插件,如Borland的CaliberRM、IBM的ROSE、Telelogic的DOORS等。
3.9 报告(Report)
报告可以理解是需求的视图,从不同的层次来描述需求,报告可根据需要进行过滤,如针对某一需求类型的报告、针对不明确需求的报告等。报告一般可以分为:
 细节报告
描述需求的细节。
 状态报告
描述需求的状态,需求的状态可分为接受、不明确、拒绝等。
 责任报告
参加需求分析的人员对其负责的需求产生的报告。
3.10 讨论
讨论是在需求分析过程中,需求分析团队成员之间的一种协作机制。这种机制可使相关人员就需求的定义、描述、状态、优先级、一致性、完整性等进行讨论,得出正确的结论。
讨论一般来说分两个级别,项目级别、需求级别。
3.11 文档引用
一个需求的描述可能需要外部的文档,文档引用是用外部文件来描述相关需求的附加信息。目前需求分析产品支持最多的文档类型是MS WORD,此外根据产品的不同,还支持Excel、图像文件、HTML、及OLE等。
3.12 里程碑(BaseLine)
需求是不断变化的,软件产品根据不断变化的需求有不同的版本,每一个版本的软件除了软件自身的BUG外,就是满足新增加的需求,而软件产品需要其实现的功能具有稳定性。里程碑就是需求分析过程的一个阶段结果,这个阶段结果是固定不变的。
3.13 文档的自动生成
参与软件开发的人都有这样的体会,在软件产品完成之前很难给出软件的各种文档,就是给出了相应的文档,文档之间也有各种各样的矛盾。这是需求、设计、开发缺乏同步的表现。
如果我们在软件的开发过程中,严格遵循软件的开发规范,采用相应得软件工程工具,上述情况就可以避免。
在需求分析中,需求分析产品均可以自动根据分析的结果生成相应得文档,文档的格式可以有MS Word、PowerPoint、HTML等。这里我们主要介绍一下Office Word文档的生成方式。
在自动生成文档之前,我们需要定义文档模版。根据所要生成文档的格式和需求分析软件的相关命令,在Office Word创建文档模版。文档模版创建好之后,在需求分析软件中选择里程碑,自动生成出Office Word文档。
四、 需求的收集和整理
需求分析是从用户的角度描述用户的数据、活动、地点(位置)、人员组织、计划、业务逻辑(业务目标)等相关信息的一个过程,它涉及到如何收集用户的需求,以及如何将这些需求规范化等方面。需求分析的第一步工作是界定需求的边界,主要描述项目的、项目的业务要求、项目所要满足的基本特性等。
在第三节中我们简要描述了如何从技术层面上使需求分析的过程规范化,本节主要阐述如何进行需求的收集和整理。
4.1 数据
数据是指需求涉及的相关静态信息。在需求分析过程中,数据是从用户的角度来描述的;在系统设计过程中,数据用面向对象的方法进行整理和规范,最终形成Class Diagram。
4.2 活动
活动是项目要满足的业务逻辑和规则。它至少有二个层次:
 基本目标
简要描述业务逻辑和规则。
 功能描述
描述活动执行的过程,以及在执行过程中涉及到的相关资源、活动之间的关联、依赖性、约束性等。
考虑到需求分析和系统设计的一致性。活动在系统设计阶段,可采用用例来表示,通过序列图、活动图、以及状态图来进行细化。
4.3 人员组织
描述用户人员组织结构。如企业领导、部门、部门人员、相关客户信息等。
4.4 地点(位置)
描述需求和地点、位置相关的系统设计中网络、分布式计算的前置条件。
五、 需求分析软件
目前流行的需求分析软件有IBM公司的RequisitePro、Telelogic公司的DOORS、Borland公司的CaliberRM。这些软件均能满足本文中描述的对需求分析功能上的要求,但各有特点,RequisitePro和大多数系统设计软件有较好的结合,目前的版本对Office 2003的支持不够。DOORS在实时系统的需求分析中有良好的表现。CaliberRM对Office有很好的支持,中文的问题也解决得很好,支持Office 2003的版本。
六、 结论
需求具有渐进的,不断变化的特点。需求分析是一个需求分析团队的工作,在需求分析理论的指导下需要采用需求分析的商业化产品,这样才能保持需求和设计的同步,没有这种同步,需求分析不会有太大的实际意义。
大多数系统设计产品如Rose、Together、Tau、Rhapsody(实时系统的系统设计工具)等,具有部分的需求分析功能,严格意义上它们不是需求分析的产品。但他们均有和需求分析产品的接口。
一般说来软件项目涉及到的很多方面,如需求分析、配置/变更管理、系统设计/建模、测试等。本文只是简要描述了作者对需求分析的一些体会。
参考文献:
1、 David C. Hay 《Requirements Analysis :From Business Views to Architecture》2002 Hall PTR
2、 Borland 《CaliberRm User Guide》
3、 邱仲潘等译 《UML与Rational Rose2002 从入门到精通》电子工业出版社 2002年7月
4、 周靖等译《XML应用的UML建模技术》清华大学出版社 2003年1月
5、 郭旭译 《JAVA 与UML协同应用开发》清华大学出版社 2003年4月
palatum edited on 2004-06-14 18:40

Java数据库连接(JDBC)API是一系列能够让Java编程人员访问数据库的接口,各个开发商的接口并不完全相同。在使用多年的Oracle公司的JDBC后,我积累了许多技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能。

  1、在客户端软件开发中使用Thin驱动程序

  在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。

  2、关闭自动提交功能,提高系统性能

  在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:

  conn.setAutoCommit(false);

  值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。

  3、在动态SQL或有时间限制的命令中使用Statement对象

  在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。

  此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。

  4、利用helper函数对动态SQL命令进行格式化

  在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O"Reilly插入表中的SQL命令,则必须使用二个相连的""""号替换O"Reilly中的"""号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。

  5、利用PreparedStatement对象提高数据库的总体效率

  在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStat ement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。

  6、在成批处理重复的插入或更新操作中使用PreparedStatement对象

  如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():

PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}

  调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。

  7、使用Oracle locator方法插入、更新大对象(LOB)

  Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。

  8、使用SQL92语法调用存储过程

  在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。

  9、使用Object SQL将对象模式转移到数据库中

  既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。

  10、利用SQL完成数据库内的操作

  我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。

  如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用 多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥SQL的功能。

 

精简的Linux C/C++开发环境

Posted on 2005-08-11 17:20 stone 阅读(69) 评论(0)   编辑  收藏 收藏至365Key 所属分类: 学习 、 Unix/Linuix/solaris

VC 6.0 是我最喜欢的编程环境,它功能强大,界面朴实精炼,调试方便。在WINDOWS + C++高手手里它是一个强大的武器,对于windows平台的开发来说,有VC 6.0已经足够了。 *1:p

但是壁有微瑕,由于历史原因,VC6.0不支持C99和标准C++,给我们学习研究ANSI C和标准C++造成了困难。(很多教材上都强调:如果你运行本书上的例子得不到正确的结果,或许跟你的编译器的实现有关,由于历史原因,它们可能不支持标准C++。举个简单参见拙文《在main()前后执行代码(C++版本) 》)

据说VC 2003.net 是完全支持ANSI的,这一点你通过打印__STDC__可以看出来。(支持ANSI标准的结果为1,不支持的结果为0) 。但是M$对它做很多很多标准以外的扩充,使它能够支持最新的WI NDOWS平台的开发,支持.net开发。除了标准C++的语法,还加入很多Manage C++、CLI/C++ 等M$定义的语法,加入了WINDOWS平台API提供的TCHAR宏。(这点从wizzard生成的代码就可以看出来,它默认生成int WINAPI _tmain(int argc, int * argv[]); ?) 这些复杂的东西容易给C++的学习造成误解,是我们分不清那些是标准C++的语素,那些是具体的环境提供的增强版本语素。

那么,什么样的编译器环境才适合学习C++语言呢?偶认为GNU的编译器GCC最适合学习C++,因为它是支持标准最好的编译器,也是免费的软件。GCC在Windows上有一个实现—— MingW。

Dev-cpp 使用了GNU标准的MingW内核,但是整个IDE环境不成熟,界面速度比较慢不说,并且总是有一些烦人的小bug,在某些环境下,它的界面字体显示的极不正常,而且无法改变。

其实,我们只是想写一小段测试代码,来证明自己对C++的理解是否正确,在这种情况下,让我们建立一个工程(甚至可能就包含一个cpp文件,甚至连头文件都没有),委实有点浪费;在这种情况下,让我们装1G~2G的软件,来验证一个观点,嘿嘿,真是有点太杀鸡用牛刀。

其实,我更希望的是,它能够自动生成一段代码,然后让我把关键之处稍作修改,就能证明我的观点; 最好能够与windows平台和注册表无紧密关联,重装系统也无须再安装;最好能够copy到别的机器上也管用,是纯粹的绿色软件,那就最好不过了。

MWEP正是由此而生。我把MingW(含gcc 3.1.0)整合在EditPlus(2.1.2.76)中,整个环境无需安装既可使用,体积娇小、清爽方便。依靠EditPlus强大的可定制能力, 可以外挂各种插件,定制各种工具、脚本、热键,做为教学实验用的IDE,绰绰有余。偶打算慢慢调整它的功能,使它更方便,更人性化。希望大家能够共同努力,帮助我打造这个小兵器。^_^

注1:.Net/JAVA好手不要籍此丢我的黑砖,在我眼里,.NET/JAVA的主要工作都是对应于WEB的,并且它们一般不用来做WINDOWS各种服务、进程调度等等平台相关的开发。


MingGW-3.1.0-1.exe里面已经包含了gcc, g++;虽然gcc、g++有更新的版本,但是MingGW-3.1.0-1.exe的最新稳定版本就是3.1.0-1了

在EditPlus->Preferences->Usertools 中,选中Capture output,
然后单击Output Pattern,去除Use default output pattern,
Regular expression 选择相应的编译器即可.

Source Insight v3.5 也在用,它用来查找tags比较方便,但是没法编译程序。

引 http://blog.vckbase.com/smileonce/archive/2004/11/15/1524.aspx

精简的Linux C/C++开发环境 ---------------


这是一个在vmware中安装的slackware linux 10 kernel 2.4.26,采用定制安装,除去了开发时不常用的包,便于copy到偶的小移动硬盘中带来带去。可用于学习linux 下的c/c++程序开发。

大概能够提供的功能是:

gnu 全套开发包(不含fortran/python/java)
可以smb连到window的共享目录,方便和windows交换文档
可以用终端ssh连到linux上,这样就不需要切换vmware屏幕,并且可以把文本粘出来
man全套手册
tcpip常用命令和工具,自己指定ip或dhcp取ip
gpm服务,便于用鼠标粘文本
vim编辑器
apm服务,高级电源管理,自动关机
rp-ppp,可以进行adsl拨号。
cvs client

时间有限,做好就传上来了,没有仔细测试。如果有需要请自行添加、修改;或者回复本贴,我将在下个版本中修改(时间不定)。

暂定的两个用户:
name       : root
password: vckbase.net
name       : vckbase
password: vckbase

1>请先用root登录,然后将ip地址改为(使用命令:netconfig)你所在的子网内的地址。
2>使用samba把windows共享分区mount上。(例如:mount -t smbfs //smileonce/tmplinux /mnt/samba,其中smileonce是我的台式机,tmplinux是台式机共享的目录,/mnt/samba是linux中的目录)。
3>使用putty可以并在session->hostname中添入linux的ip地址,Protocal选ssh,就可以通过ssh连到linux上,这样做就免去了按Ctrl+Alt在vmware和PC间切换之苦了。

下载地址:ftp://vckbase:[email protected]/user/smileonce/tool/mini_slack_linux/

其中: vmware 4.5.2  37M,  putty 372K, slack.rar 93M


引 http://blog.vckbase.com/smileonce/archive/2004/12/21/2220.html

 
 
 

Linux 常用命令

Linux 系统常用命令格式:
    command  [option]  [argument1]  [argument2]  ...

其中option以"-"开始,多个option可用一个"-"连起来,如"ls -l -a" 与"ls -la"的效果是一样的。根据命令的不同,参数分为可选的或必须的;所有的命令从标准输入接受输入,输出结果显示在标准输出 ,而错误信息则显示在标准错误输出设备。可使用重定向功能对这些设备进行重定向。

命令在正常执行结果后返回一个0值,如果命令出错可未完全完成,则返回一个非零值(在shell中可用变量$?查看)。 在shell script中可用此返回值作为控制逻辑的一部分。

帮助命令:
man  获取相关命令的帮助信息
     例如:man dir 可以获取关于dir的使用信息。

info  获取相关命令的详细使用方法
      例如:info info 可以获取如何使用info的详细信息。
文件操作:
																cat  显示文件内容和合并多个文件 
clear  清屏
chattr  改变文件属性
chgrp  改变文件组权
chmod  改变文件或目录的权限
chown  改变文件的属权
comm  比较两个已排过序的文件
cp  将文件拷贝至另一文件
dd  从指定文件读取数据写到指定文件
df  报告磁盘空间使用情况
diff  比较两个文本文件,列出行不同之处
du  统计目录/文件所占磁盘空间的大小
file  辨识文件类型
emacs  功能强大的编辑环境        
find  搜索文件并执行指定操作(
find2)
grep  按给定模式搜索文件内容
head  显示指定文件的前若干行
less  按页显示文件
ln  创建文件链接
locate  查找符合条件的文件
more  在终端屏幕按帧显示文本文件
mv  文件或目录的移动或更名
rm/rmdir  删除文件/目录
sed  利用script来处理文本文件
sort  对指定文件按行进行排序
tail  显示指定文件的最后部分
touch  创建文件
tr  转换字符
vi  全屏编辑器
wc  显示指定文件中的行数,词数或字符数
which  在环境变量 $PATH 设置的目录里查找符合条件的文件
压缩与备份:
bzip2/bunzip2  .bz2文件的压缩/解压缩程序
cpio  备份文件
dump  备份文件系统
gzip/gunzip  .gz文件的压缩/解压缩程序
gzexe  压缩可执行文件
restore 还原由倾倒(Dump)操作所备份下来的文件或整个文件系统(一个分区)
tar  将若干文件存档或读取存档文件
unarj  解压缩.arj文件
zip/unzip  压缩/解压缩 zip文件
zipinfo  列出zip压缩文件的详细信息
磁盘操作:
																cd/pwd  切换目录/显示当前工作目录
df  显示磁盘的相关信息
du  显示目录或文件的大小
e2fsck  检查ext2/ext3文件系统的正确性
fdisk  对硬盘进行分区	
fsck  检查文件系统并尝试修复错误
losetup  设置循环设备
ls  列出目录内容
mkdir  创建目录
mformat  对MS-DOS文件系统的磁盘进行格式化
mkbootdisk  建立目前系统的启动盘
mke2fs  建立ext2文件系统
mkisofs  制作iso光盘映像文件
mount/umount 加载文件系统/卸载文件系统
quota  显示磁盘已使用的空间与限制
sync  将内存缓冲区内的数据写入磁盘
tree  以树状图列出目录的内容
系统操作:
																alias  设置指令的别名
chkconfig  检查,设置系统的各种服务
clock  调整 RTC 时间
date  显示或设置系统时间与日期
dmesg  显示开机信息
eval  重新运算求出参数的内容
exit  退出目前的shell
export  设置或显示环境变量
finger  查找并显示用户信息
free  显示内存状态
hostid  显示主机标识
hostname  显示主机名
id  显示用户标识
kill  删除执行中的程序或工作
last  列出目前与过去登入系统的用户相关信息
logout  退出系统
lsmod  显示已载入系统的模块
modprobe  自动处理可载入模块
passwd  设置用户密码
ps  process status 报告程序状况
reboot  重启计算机
rhwo  查看系统用户
rlogin  远程登入
rpm  管理Linux各项套件的程序
shutdown  关机 
su switch user 变更用户身份
top  显示,管理执行中的程序
uname  显示系统信息
useradd/userdel	 添加用户 / 删除用户
w  显示目前注册的用户及用户正运行的命令
whereis	 确定一个命令的二进制执行码,源码及帮助所在的位置
who  列出正在使用系统的用户
whois  查找并显示用户信息
网络通信:
																
																		arp  网地址的显示及控制
ftp  文件传输
lftp  文件传输
mail  发送/接收电子邮件
mesg  允许或拒绝其他用户向自己所用的终端发送信息
mutt  E-mail管理程序
ncftp  文件传输
netstat  显示网络连接、路由表和网络接口信息
pine  收发电子邮件,浏览新闻组
ping  向网络上的主机发送 icmp echo request 包
ssh  安全模式下的远程登录
telnet  远程登录
talk  与另一用户对话
traceroute  显示到达某一主机所经由的路径及所使用的时间
wget 从网络上自动下载文件
write  向其他用户的终端写信息
http://www.math.ecnu.edu.cn/~jypan/linux/  
 
 
 
 
linux下Vi编辑器命令大全
 
文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑 器有ex,sed和vi等,其中,使用最为广泛的是vi ,而vi命令繁多,论坛里好像这方面的总结不多,以下稍做总结 ,以资共享!渴望更正和补充!

进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern 匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑

移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用 p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带"\"的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时 ,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为comma nd的输入并执行之,若不指定n1,n2,则表示将整个文件内容作 为command的输入
:r!command:将命令command的输出结果放到当前行

寄存器操作
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中 ?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中 ?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中 ?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里 ?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除 寄存器中。

VI的使用
------------------------------ ------------------------------ --------------------


一、插入文本
┌──┬────────────┐
│命令│描述│
├──┼────────────┤
│i │在当前字符前插入文本│
├──┼────────────┤
│I │在行首插入文本  │
├──┼────────────┤
│a │在当前字符后添加文本│
├──┼────────────┤
│A │在行末添加文本│
├──┼────────────┤
│o │在当前行后面插入一空行│
├──┼────────────┤
│O │在当前行前面插入一空行│
├──┼────────────┤
│R │以改写方式输入文本│
└──┴────────────┘
二、移动光标
┌─────┬───────────┐
│命令│描述│
├─────┼───────────┤
│j或下箭头 │向下移动一行│
├─────┼───────────┤
│k或上箭头 │向上移动一行│
├─────┼───────────┤
│h或左箭头 │左移一个字符│
├─────┼───────────┤
│l或右箭头 │右移一个字符│
├─────┼───────────┤
│w │右移一个词│
├─────┼───────────┤
│W │右移一个以空格分隔的词│
├─────┼───────────┤
│b │左移一个词│
├─────┼───────────┤
│B │左移一个以空格分隔的词│
├─────┼───────────┤
│0 │移到行首│
│Ctrl-F│向前翻页│
├─────┼───────────┤
│Ctrl-B│向后翻页│
├─────┼───────────┤
│nG│到第n行 │
├─────┼───────────┤
│G │到最后一行│
└─────┴───────────┘
三、替换文本
┌─────┬──────┐
│命令│描述│
├─────┼──────┤
│$ │到行尾│
├─────┼──────┤
│( │到句子的开头│
├─────┼──────┤
│) │到句子的末尾│
├─────┼──────┤
│{ │到段落的开头│
├─────┼──────┤
│} │到段落的末尾│
└─────┴──────┘

四、删除文本
┌───┬───────────┐
│命令│描述  │
├───┼───────────┤
│r │替换一个字符  │
├───┼───────────┤
│c │修改文本直到按下Esc健 │
├───┼───────────┤
│cw│修改下一个词  │
├───┼───────────┤
│cnw │修改接下来的n个词 │
└───┴───────────┘
五、文本编辑
┌──┬──────────────────────┐
│命寺│描述│
├──┼──────────────────────┤
│yy│将一行文本移到缺省缓冲区中  │
├──┼──────────────────────┤
│yn│将下一个词移到缺省缓冲区中  │
├──┼──────────────────────┤
│ynw │将后面的n个词移到缺省缓冲区中 │
├──┼──────────────────────┤
│p │如果缺省缓冲区中包含一行文本,则在当前│
││行后面插入一个空行井将缺省缓冲区中的声│
││容粘贴到这一行中;如果缺省缓冲区中包含│
││多个词,把这些词粘贴到光标的右边.│
├──┼──────────────────────┤
│P │如果缺省缓冲区中包含一行文本,则正当前  │
│  │行前面插入一个空行井将缺省缓冲区中的内  │
││容粘贴到这一行中;如果缺省缓冲区中包含  │
│  │多个词,把这些词粘贴到光标的左边  │
└──┴──────────────────────┘
六、保存退出
┌───────────┬───────────────┐
│命令│描述│
├───────────┼───────────────┤
│zz│保存并退出│
├───────────┼───────────────┤
│:w filename │写入文件  │
├───────────┼───────────────┤
│:W│写入文件│
├───────────┼───────────────┤
│:x│保存(如果当前文件修改过)并退出│
├───────────┼───────────────┤
│:q! │不保存文件,直接退出  │
├───────────┼───────────────┤
│:q│退出vi│
└───────────┴───────────────┘



VI常用技巧

ideal(2002-01-29 11:24)

〖返回〗〖转发〗

VI命令可以说是Unix/Linux世界里最常用的编辑文件的命 令了,但是因为它的命令集众多,很多人都不习惯使用它 ,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势 ,并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和 高级应用技巧。

一、基本命令介绍

---- 1.光标命令

k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Li nux中使用键盘右边的4个光标键,但是记住这4个命令还是非常有 用的。这4个键正是右手在键盘上放置的基本位置。
nG——跳转命令。n为行数,该命令立即使光标跳到指定行。
Ctrl+G——光标所在位置的行数和列数报告。
w、b——使光标向前或向后跳过一个单词。
---- 2.编辑命令
i、a、r——在光标的前、后以及所在处插入字符命令(i =insert、a=append、r=replace)。
cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。
x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符 以及删除整行的命令。
---- 3.查找命令
---- /string、?string——从光标所在处向后或向前查找相 应的字符串的命令。
---- 4.拷贝复制命令
---- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。

二、常见问题及应用技巧

---- 1.在一个新文件中读/etc/passwd中的内容 ,取出用户名部分。
---- vi file
---- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
---- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所 有部分。
---- 您也可以在指定的行号后读入文件内容,例如使用命令":3r /etc/passwd"从新文件的第3行开始读入 /etc/passwd的所有内容。
---- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。
---- #cat squid.conf.default | grep -v ^$ | grep -v ^#

---- 2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限 ,不能存盘,需要将所做修改存入临时文件。
---- vi file
---- :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件 ,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1 ,我们可以键入如下命令。
---- vi file
---- :20,59w /tmp/1

---- 3.用VI编辑一个文件,但需要删除大段的内容。
---- 首先利用编辑命令"vi file"打开文件,然后将光标移到需要删除的行处按Ctrl +G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。
---- :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除 ,也可以在要删除的开始行和结束行中用ma、mb命令标记 ,然后利用":a,bd"命令删除。

---- 4.在整个文件的各行或某几行的行首或行尾加一些字符串。
---- vi file
---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入"some string"。
---- :%s/$/some string/g 在整个文件每一行的行尾添加"some string"。
---- :%s/string1/string2/g 在整个文件中替换"string1"成"string2"。
---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的"string1"成 "string2"。
---- 注意: 其中s为substitute,%表示所有行,g表示global 。

---- 5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中 。
---- vi file1 file2
---- yy 在文件1的光标处拷贝所在行
---- :n 切换到文件2 (n=next)
---- p 在文件2的光标所在处粘贴所拷贝的行
---- :n 切换回文件1

---- 6.替换文件中的路径。
---- 使用命令":%s#/usr/bin#/bin#g "可以把文件中所有路径/usr/bin换成/bin 。也可以使用命令":%s//usr/bin//bin/g "实现,其中""是转义字符,表明其后的"/"字符是具有实际意义 的字符,不是分隔符
 
 
 
网络配置文件
在linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作。系统中重要的有关网络配置文件为:

◆ /etc/sysconfig/network
◆ /etc/HOSTNAME
◆ /etc/hosts
◆ /etc/services
◆ /etc/host.conf
◆ /etc/nsswitch.conf
◆ /etc/resolv.conf
◆ /etc/rc.d/init.d/network

接下来我们将对这些文件逐一讲述,这些文件都可以在系统运行时进行修改,不用启动或者停止任何守护程序,更改会立刻生效(除了/etc/sysconfig/network)。另外,这些文件都支持由"#"开头的注释,每一个文件都有在UNIX手册页中的第5部分中有一项,可以用man命令来获取它们。

◆ /etc/sysconfig/network 网络设置
该文件用来指定服务器上的网络配置信息,包含了控制和网络有关的文件和守护程序的行为的参数。下面是一个例子文件:

NETWORKING=yes
HOSTNAME=machine1
GATEWAY= 210.34.6.2
FORWARD_IPV4=yes
GATEWAYDEV=

其中,NETWORK=yes/no 表示网络是否被配置;
HOSTNAME=hostname hostname 表示服务器的主机名;
GATEWAY=gw-ip gw-ip 表示网络网关的IP地址;
FORWARD_IPV4=yes/no 是否开启IP转发功能;
GAREWAYDEV=gw-dev gw-dw 表示网关的设备名,如:eth0等;
为了和老的一些软件相兼容,"/etc/HOSTNAME"文件应该用和HOSTNAME=hostname相同的主机名。

◆ /etc/HOSTNAME 主机名

该文件包含了系统的主机名称,包括完全的域名,如:

192.168.0.1 machine1.domain machine1

这个文件是在启动时从文件/etc/sysconfig/network中的HOSTNAME行中得到的,用于在启动时设置系统的主机名。

◆ /etc/hosts IP地址和主机名的映射

/etc/hosts中包含了IP地址和主机名之间的映射,还包括主机名的别名,IP地址的设计使计算机容易识别,但对于人却很难记住它们,为了解决这个问题,创建了/etc/hosts这个文件。下面是一个例子文件:

127.0.0.1 machine1 localhost.localdomain localhost
192.168.1.100 machine7
192.168.1.101 otherpc otheralias

在这个例子中,本机名是machine1,otherpc还有别名otheralias,它可以指向otheralias。。一旦配置完机器的网络配置文件,应该重新启动网络以使修改生效,使用下面的命令来重新启动网络:

/etc/rc.d/init.d/network restart

/etc/hosts文件通常含有主机名、localhost和系统管理员经常使用的系统别名,有时候telnet到linux机器要等待很长时间,可以通过在"/etc/hosts"加入客户的机器的IP地址和主机名的匹配项,就可以减少登录等待时间。在没有域名服务器情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址,否则,其他的主机名通常使用DNS来解决,DNS客户部分的配置在文件/etc/resolv.conf中。

◆ /etc/services

/etc/services中包含了服务名和端口号之间的映射,不少的系统程序要使用这个文件,下面是RedHat 安装时缺省的/etc/services中的前几行:

tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users

最左边一列是主机服务名,中间一列是端口号,"/" 后面是端口类型,可以是TCP也可以是UDP。任何后面的列都是前面服务的别名。在这个文件中也存在着别名,它们出现在端口号后面,在上述例子中sink和null 都是discard服务的别名。

◆ /etc/host.conf 配置名字解析器

有两个文件声明系统到哪里寻找名字信息来配置UNIX名字解析器的库。文件/etc/host.conf由版本5的libc库所使用 ,而/etc/nsswitch.conf由版本6使用(glibc )。问题在于一些程序使用其中一个,而一些使用另一个,所以将两个文件都配置正确是必要的。

/etc/host.conf文件指定如何解析主机名,linux通过解析器库来获得主机名对应的IP地址。下面是RedHat安装后缺省的"/etc/host.conf"内容:

order hosts,bind
multi on

※"order " 指定主机名查询顺序,其参数为用逗号隔开的查找方法,支持的查找方法为bind、hosts和nis,分别代表DNS、/etc/hosts和NIS,这里规定先查询"/etc/hosts"文件然后再使用DNS来解析域名。
※"trim" 表明当通过DNS进行地址到主机名的转换时,域名将从主机名中被裁剪掉,trim可以被多个域包含多次,对/etc/hosts和NIS查询方法不起作用,注意在/etc/hosts和NIS表中主机名是被适当地(有或没有全域名)列出的。
※"multi" 指定是否"/etc/hosts"文件中指定的主机可以有多个地址,值为on表示允许,拥有多个IP地址的主机一般称为具有多个网络界面。
※"nospoof " 指是否允许对该服务器进行IP地址欺骗,值为on表示不允许,IP欺骗是一种攻击系统安全的手段,通过把IP地址伪装成别的计算机,来取得其它计算机的信任。
※"alert" 当nospoof指令为on时,alert控制欺骗的企图是否用syslog工具进行记录,值为on表示使用,缺省值为off。
※"rccorder" 如果被设置为on,所有的查询将被重新排序,所以在同一子网中的主机将首选被返回,缺省值为off。

◆ /etc/nsswitch.conf 配置名字解析器

/etc/nsswitch.conf文件是由S u n公司开发并用于管理系统中多个配置文件查找的顺序,它比/etc/host.conf文件提供了更多的功能。/etc/nsswitch.conf中的每一行或者是注释(以#号开头)或者是一个关键字后跟冒号和一系列要试用的有顺序的方法。每一个关键字是在/etc/目录可以被/etc/nsswitch.conf控制的/etc文件的名字。下面是可以被包含的关键字:

※aliases 邮件别名;
※passwd 系统用户;
※group 用户组;
※shadow 隐蔽口令;
※hosts 主机名和I P地址;
※networks 网络名和号;
※protocols 网络协议;
※services 端口号和服务名称;
※ethers 以太网号;
※rpc 远程进程调用的名称和号
※netgroup 网内组

下面也是可以包含的关键字:

※files 除了netgroup,对其他关键字都有效。在相应的/etc文件中寻找记录
※db 除了netgroup,对其他关键字都有效。在相应的/var/db数据库中寻找记录。对长文件很有效,如passwd文件已经 超过500项。要从标准/etc文件中产生这些文件,应改变目录到/var/db并运行run命令
※compat 兼容性模式,对passwd、group和shadow文件有效。在本模式中,将先在对应的/etc文件中查找。如果想进行NIS查找,需要第一个值(用户名或组名)为加号( + ),后面跟对应数量的冒号( : ) ( /etc/passwd为6个, /etc/group为3个, /etc/shadow为8个)。如在/etc/passwd文件中,下面一行应被包含在文件尾: + : * : : : : :
※dns 只对hosts有意义。像在/etc/resolvconf配置的,在DNS中进行查找
※nis 对所有的关键字都有意义。如NIS是可以用的,在NIS服务器中查找
※[ STATUS = action ] 控制名字服务的行为。STATUS是SUCCESS(操作被成功执行)、NOTFOUND (记录没找到)、UNAVAIL (所选择的服务不可用)和TRYAGAIN (服务暂时不可用,请重试)中的一个。action是return (终止查找并返回当前状态)或continue (继续这一行的其他项)中的一个。如hosts: dns nis [NOTFOUND=return] files将会首先在DNS中,然后在NIS中查找主机名 。只有当前两项都不可用时才使用文件/etc/hosts

◆ /etc/resolv.conf 配置DNS客户

文件/etc/resolv.conf配置DNS客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。下面是一个例子文件:

search mydom.edu.cn
nameserver 210.34.0.14
nameserver 210.34.0.2

合法的参数及其意义如下:
※nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个I P地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver.
※domain 声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( . )前面的内容。
※search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用。
※sortlist 允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。Red Hat中没有提供缺省的/ e t c / r e s o l v. c o n f文件,它的内容是根据在安装时给出的选项动态创建的。

◆ /etc/init.d/network 主机地址、子网掩码和网关

不像很多其他的UNIX和linux操作系统, Red Hat当前并不能自动地通过/etc/hostname和/etc/hosts文件来配置网络。为了改变主机缺省的IP地址,必须直接编辑/etc/init.d/network脚本使其反映正确的网络配置。这个文件包括了声明IP地址、掩码、网络、广播地址和缺省路由器的变量。下面是这个文件中相应的部分:

IPADDR=192.168.1.100
NETMASK= 255.255.255.0
BROADCAST=192.168.1.255
GATEWAY= 192.168.1.1
linux下oracle+jdk+tomcat的配置
 
http://www.qingcha.org/article.php/61
linux下oracle+jdk+tomcat的配置
2003-11-17    清茶       点击: 2150
http://www.loveunix.net/index.php?showtopic=5763
在linux7.1上安装jdk+tomcat+oracle9i 笔记

Firer2000
2003-10-30
本文借鉴了 http://www.puschitz.com/的文章:
Installing Oracle 9i on RedHat Linux 7.1, 7.2, 7.3, 8.0 , 9, Red Hat Advanced Server 2.1, and on Red Hat Enterprise Linux Advanced Server 3 (RHEL AS 3)
机器配置:hp lh6000
cpu pIII 700
内存 512M
两块 36G硬盘,做raid0
Linux版本:RedHat Linux.7.1
分区: /boot :100M swap :1024M / :所有剩余空间
选择安装xwindow、kde。
设置xwindow可以支持如xmanager这样的工具远程登陆 linux。设置如下:
#vi /etc/X11/xdm/xdm-config
在最后一行: DisplayManager.requestPort: 0 前面加!号注释掉此行。
#vi /etc/X11/xdm/Xservers
在最后一行::0 local /usr/X11R6/bin/X 前面加#号注释掉这一行。
#vi /etc/X11/xdm/Xaccess
找到#* #any host can get a login window
把这一行前面的#号去掉,变成:
* #any host can get a login window
最后运行#xdm。这样使用xmanager等工具就可以连接Li nux了!!!
如果想要每次启动自动启动xdm,那么请在/etc/rc.d /rc.local文件尾部加入/etc/X11R6/bin /xdm
安装oracle9i
Oracle9i for Linux 可以从下面的站点下载:
http://otn.oracle.com/software/products/or...s/linuxsoft.htm
一共有三个软件包:
Linux9i_Disk1.cpio.gz
Linux9i_Disk2.cpio.gz
Linux9i_Disk3.cpio.gz
解包
如果要一步解开这些包使用如下命令:
zcat Linux9i_Disk1.cpio.gz | cpio -idmv
zcat Linux9i_Disk2.cpio.gz | cpio -idmv
zcat Linux9i_Disk3.cpio.gz | cpio –idmv
如果两步解开这些包:
第一步:解压
#gunzip -d Linux9i_Disk1.cpio.gz
#gunzip -d Linux9i_Disk2.cpio.gz
#gunzip -d Linux9i_Disk3.cpio.gz
第二步:解包:
cpio -idmv < Linux9i_withjre_Disk1.cpio
cpio -idmv < Linux9i_nojre_Disk2.cpio
cpio -idmv < Linux9i_Disk3.cpio
进行完上面的操作后,会得到Disk1, Disk2 ,Disk3 三个文件夹。这三个文件夹是oracle9i的安装文件

交换空间
Oracle 推荐的交换空间大小为物理内存的两倍或者最少 512MB,采用两者之中大的那个值。我建议使用更多的交换空间 ,特别是你有其他的程序运行在 Oracle 服务器上时,我的 PC 有 256MB 内存,我使用了 600MB 的交换空间。如果在安装 Oracle 时没有足够的交换空间,特别是在建库时,将会导致系统几分钟没有任 何反应。
检查交换空间:
cat /proc/swaps
增加交换空间:

dd if=/dev/zero of=tmpswap bs=1k count=300000
chmod 600 tmpswap
mkswap tmpswap
swapon tmpswap
"binutils" RPM 版本的问题
7.1 和 7.2 随带的 binutils RPM 包使 9i 的 Universial Installer 不能跑起来,也没有更新的版本能解决这个问题,你可以有两个选择:
下载下面版本的 RPM 包,"降级" Oracle 服务器上的 binutil :
ftp://ftp.redhat.com/pub/redhat/linux/7.0...0.18-1.i386.rpm
安装:binutils-2.10.0.18-1.i386.rpm
#rpm –Uvh --force --nodeps binutils-2.10.0.18-1.i386.rpm
安装完 Oracle 后,别忘了把 binutil 升级回去。
另外一个简单的办法时在安装中等待出现下面的错误,然后手工修复:
"Error invoking target install of makefile /opt/oracle/product/9.0.1 /plsql/lib/ins_plsql.mk"
修复方法:
编辑 $ORACLE_HOME/bin/genclntsh 把
LD_SELF_CONTAINED="-z defs"
改成:
LD_SELF_CONTAINED=""
然后运行脚本:$ORACLE_HOME/bin /genclntsh:
$ $ORACLE_HOME/bin/genclntsh

Created /opt/oracle/product/9.0.1/lib /libclntst9.a

然后选择重试。
安装 JDK
下载 JDK 1.3.1 或者 Blackdown 1.1.8_v3(我总是使用 Blackdown ,这是 Oracle 以前推荐给 Linux 用户的)。
根据 JDK 的文档,把 JDK 安装在 /usr/local 目录下并建立 JDK 的符号连接到 /usr/local/java:
#bzip2 -dc jdk118_v3-glibc-2.1.3.tar.bz2 | tar xf - -C /usr/local
#ln -s /usr/local/jdk118_v3 /usr/local/java
建立 Oracle 用户
groupadd dba
groupadd oinstall
useradd -g oinstall -G dba oracle
passwd oracle
建立 Oracle 目录
mkdir /opt/oracle
mkdir /opt/oracle/product
mkdir /opt/oracle/product/9.0.1
chown -R oracle.oinstall /opt/oracle
mkdir /var/opt/oracle
chown oracle.dba /var/opt/oracle
chmod 755 /var/opt/oracle
设置 Oracle 环境
以 Oracle 用户进入,建立 $HOME/.bash_profile:
# Oracle Environment
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle /product/9.0.1
export ORACLE_SID=test
export ORACLE_TERM=xterm
#export TNS_ADMIN= 设置这个变量,如果 sqlnet.ora, tnsnames.ora等不在$ORACLE_HOME /network/admin 目录下。

export NLS_LANG=AMERICAN;
export ORA_NLS33=$ORACLE_HOME/ocommon /nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME /lib:/lib:/usr/lib:/usr /openwin/lib
LD_LIBRARY_PATH=$LD_LIBRARY _PATH:/usr/td/lib:/usr/ucblib: /usr/local/lib
export LD_LIBRARY_PATH
# Set shell search paths:
PATH=/bin:/usr/bin:/usr/sbin: /etc:/opt/bin:/usr/ccs/bin: /usr/openwin/bin:/opt/local /GNU/bin
PATH=$PATH:/opt/local/bin:/opt /NSCPnav/bin:$ORACLE_HOME/bin
PATH=$PATH:/usr/local/samba /bin:/usr/ucb:
export PATH
# CLASSPATH must include the following JRE locations:
CLASSPATH=$ORACLE_HOME/JRE: $ORACLE_HOME/jlib:$ORACLE_HOME /rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE _HOME/network/jlib

以下是我的$HOME/.bash_profile文件的内容
# .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME /binBASH_ENV=$HOME/.bashrcexpor t BASH_ENV PATHunset USERNAMEexport ORACLE_BASE=/opt/oracle export ORACLE_HOME=/opt/oracle /product/9.0.1 export ORACLE_SID=test export ORACLE_TERM=xterm export NLS_LANG=AMERICAN; export ORA_NLS33=$ORACLE_HOME/ocommon /nls/admin/data LD_LIBRARY_PATH=$ORACLE_HOME /lib:/lib:/usr/lib:/usr /openwin/lib LD_LIBRARY_PATH=$LD_LIBRARY _PATH:/usr/td/lib:/usr/ucblib: /usr/local/lib export LD_LIBRARY_PATH PATH=/bin:/usr/bin:/usr/sbin: /etc:/opt/bin:/usr/ccs/bin: /usr/openwin/bin:/opt/local /GNU/bin PATH=$PATH:/opt/local/bin:/opt /NSCPnav/bin:$ORACLE_HOME/bin PATH=$PATH:/usr/local/samba /bin:/usr/ucb: export PATH CLASSPATH=$ORACLE_HOME/JRE: $ORACLE_HOME/jlib:$ORACLE_HOME /rdbms/jlib CLASSPATH=$CLASSPATH:$ORACLE _HOME/network/jlib export CLASSPATH

启动 runInstaller
Oracle 不再支持字符模式的安装,因此必须设置 DISPLAY 变量,假设节点名为 oracleserver,那么 oracleserver 必须允许 runInstaller 显示 X 信息。如果你不在远程安装数据库,可以跳过下面的第一和第二步。
第一步:yourdesktop:user$ xhost +oracleserver
第二步:从 oracleserver 的控制台上以 Oracle 用户执行:
oracleserver:oracle$ export DISPLAY=yourdesktop:0.0
第三步a:从第一张 CD ,执行 runInstaller (不要 cd 到 /mnt/cdrom !)
oracleserver:oracle$ mount /mnt/cdrom
oracleserver:oracle$ /mnt/cdrom/runInstaller
第三步b:或者从下载点:
oracleserver:oracle$ Disk1/RunInstaller
(注意:使用我的这种安装方式,不用设置DISPLAY变量)
运行 Oracle 安装
下面是我回答 runInstaller 的问题: What would you like as the base directory (Inventory Location): /opt/oracle/oraInventory
UNIX Group Name (permission for updating Oracle software): oinstall
Full path name of the Oracle Home: /opt/oracle/product/9.0.1
JDK Home Directory: /usr/local/java
注意:
如果没有"降级" binutils 包的话,安装到第三张 CD 时,你会看到下面的错误:
"Error invoking target install of makefile /opt/oracle/product/9.0.1 /plsql/lib/ins_plsql.mk"
解决的办法请看后面的"Oracle 安装错误"。
你可能还会碰到 "Oracle Net Configuration Assistant" 挂起的问题,请参考后面的"Oracle 安装中重要的技巧和提示"。
启动 Oracle 9i 数据库
9i 中已经没有 svrmgrl 了,所有的管理工作都听过 sqlplus 来完成:
dba$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup

Oracle 安装中重要的技巧和提示
如果遇到 gunzip 出错,检查文件的校验和:
$ md5sum Linux9i_Disk1.cpio.gz Linux9i_Disk2.cpio.gz Linux9i_Disk3.cpio.gz
f1a99eb8c8aca1d69a9eeaa8858570d 7 Linux9i_Disk1.cpio.gz
f2444c0fa53c898e7d2f78c184829d7 d Linux9i_Disk2.cpio.gz
ec655402d8bc547ed031f14122da574 b Linux9i_Disk3.cpio.gz
不要 cd 到 /mnt/cdrom 执行 ./runInstaller !
否则你将不能在安装时弹出 CD,因为 unmount 不能把挂接着的 CD 卸下来。
如果忘记了设置 DISPLAY 环境变量或者忘记赋予数据库服务器在桌面 PC 上显示 X 信息的权限(例如: xhost +oracleserver),将得到下面的错误:
Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server
解决的办法是:rm -rf /tmp/OraInstall
如果不这样做,安装程序将挂在那里,没有任何错误信息 。同时也要检查 runInstaller 是否在后台停止了运行。
当 runInstaller 开始配置工具时,"Oracle Net Configuration Assistant" 会挂起,简单的解决办法是停止其配置,重新配置或者继续安装 ,当其他安装结束后,再来一次"Retry"。
如果在安装中系统停止了反应,可能就是没有足够的交换空间了 。如果发生这样的事情,只能等待到系统反应为止。
Oracle 的安装还需要运行 make 等程序,在生产环境中,你或许没有安装编译器和其他开发工具 ,所以,需要临时安装下面的几个包:
cpp, egcs, egcs-c++, glibc-devel, kernel-headers 。
如果不能成功安装 9i 而需要重来的话,需要清除下面的文件和目录:
rm -rf /etc/oraInst.loc /etc/oratab /tmp/OraInstall
rm -rf $ORACLE_BASE/*
/tmp/
Oracle 安装错误
下面是别人关于 Oracle 安装时碰到的问题和解决的办法,我并没有遇到其中的大多数问题 ,因此不能确定这些解答是否正确,如果你有好的解决办法或者其他问 题,可以写信给我,我将会加入到这个文件中。
首先检查/tmp/OraInstall 中的错误日志,如果遇到 make 的错误,检查: $ORACLE_HOME/install/make.log 。
"Error invoking target install of makefile /opt/oracle/product/9.0.1 /plsql/lib/ins_plsql.mk"
"Error invoking target install of makefile /opt/oracle/product/9.0.1 /precomp/lib/ins- precomp.mk"
"Error invoking target install of makefile /opt/oracle/product/9.0.1 /precomp/lib/ins-net-client"
"Error invoking target install of makefile /opt/oracle/product/9.0.1 /precomp/lib/ins-oemagent"
编辑 $ORACLE_HOME/bin/genclntsh 把
LD_SELF_CONTAINED="-z defs"
改成:
LD_SELF_CONTAINED=""
然后运行脚本:$ORACLE_HOME/bin /genclntsh:
$ $ORACLE_HOME/bin/genclntsh

Created /opt/oracle/product/9.0.1/lib /libclntst9.a
$
在错误对话框中点击 重试。
"Error in setting permissions of file/directory /opt/oracle/jre/1.1.8/bin/i686 /native_threads/.extract_args.
当错误框打开时,手工找到并从安装 jre 的目录下拷贝文件 .extract_args 到 runInstaller 提示文件丢失的地方。
安装JDK1.3.1
我使用的安装包是j2sdk-1_3_1-linux-i386-rpm.bin
#chmod +x j2sdk-1_3_1-linux-i386-rpm.bin
#./ j2sdk-1_3_1-linux-i386-rpm.bin
这样就会生成rpm安装包
#rpm –ivh j2sdk-1_3_1-linux-i386-rpm
安装成功后,jdk将被安装在/usr/java/jdk1.3 .1目录下
编辑/etc/profile文件,加入如下几行:
JAVA_HOME=/usr/java/jdk1.3.1
export JAVA_HOME
CLASSPATH=/usr/java/jdk1.3.1 /lib:/usr/java/jdk1.3.1/jre/lib
export CLASSPATH
PATH=$PATH:/usr/java/jdk1.3.1 /bin:/usr/java/jdk1.3.1/jre/bin
然后推出。Jdk安装设置就完成了。
验证jdk的安装:
#java -version
会提示java的版本是1.3.1的。
安装tomcat。
下载tomcat的安装文件:jakarta-tomcat.tar.gz
#tar zxvf jakarta-tomcat.tar.gz
#cp –R jakarta-tomcat /usr/tomcat (将解压的文件夹复制到/usr下)
#cd /usr/tomcat/bin
#./startup.sh (启动tomcat)
验证tomcat正常运行
在ie浏览器输入 http://tomcatserver:8080
如果出现tomcat的界面就是成功了!!!很简单的!!!

如果要连接oracle,需要编辑/ust/tomcat /conf目录下的server.xml文件。还要有oracle的驱动程序!
 
http://study.qqcf.com/web/109 /13088.htm
循序渐进学习LINUX之软件配置
LINUX配置

   在这里,配置的对象并非内核,而是软件。至于网络的配置 ,主要在安装系统是已经基本完成;也可以进入GUI界面从菜单选择 liloconf来配置。

   与WINDOWS一样,在LINUX系统可以从光盘 、软盘安装应用软件;但不同的是,它需要用命令mount来登录光 驱、软驱。而且,软件大多是经过压缩的,所以还需要懂得如何解压 。最后必须配置、编译才能运行。下面分四个方面进行介绍:

   一、mount登录

   LINUX的软驱设备用特殊文件/dev/fd0 ,文件系统是msdos,因此用以下命令登录,读取软盘内容:

   # mount -t msdos /dev/fd0 /mnt/floppy
   # cd /mnt/floppy
   同理,键入以下命令读光盘:
   # mount -t iso9660 /dev/hdb /mnt/cdrom
   # cd /mnt/cdrom
   然后,用cp命令将所需的软件拷贝到系统中。
   退出软驱、光驱用umount命令。注意,不能在其目录中使用此命 令,而应先cd到其他目录,再使用:umount /mnt/cdrom。

   二、安装软件

   for LINUX的软件一般是以.gz或.tar或者.tar .gz结尾的。前者是由gzip压缩的,后者是先用tar归档 ,在用gzip压缩而成的。

   1、以.gz结尾的为压缩文件,用命令:gzip -d filename来解压,得到的文件在当前目录中,但已没有了.gz。

   2、以.tar结尾的为归档文件,用命令:tar -xvf filename来展开,生成的文件与源文件在同一目录中,只是少了.tar。

   3、以.tar.gz结尾的文件最常见,可直接用命令:gzip -cd filename | tar xfv -来安装。

   一般情况下,这类文件的第一项是一个目录,所以用上面的命令时会创 建出这一个目录,并把所有的文件都存在此目录之下 。如果是特殊情况,可先用命令:tar -tvf filename | more 来查看文件的第一项。倘若它并不是目录,则先创建一个目录 ,把文件放在此目录之下,在用命令:tar -xvf filename来安装。

   经过以上步骤,会生成README及INSTALL等文件 。用vi来仔细阅读这些文件造处于LINUX有关的部分 ,更具体是进行配置。一般的步骤是:(1)./config, (2)make install,(3)make。主要的变化在第一步 ,其后面需要参数,可见入命令来选择:./config --help。

   三、实践举例笔者曾配置了apache(阿帕其服务器) 、php3两个软件。

   先从网上下载for LINUX的软件apache.tar.gz、php3.tar.gz。

   1、由于apache.tar.gz大于1.44M,所以笔者在center_5的MSDOS上用telnet命令登录 LINUX,通过put将其上传。

   2、笔者将这两个软件放在/usr/src目录之下 ,用命令gzip -cd apache.tar.gz(php3.tar.gz)| tar xfv -来安装。这样会看到两个目录:apache_1.3.6和php-3.0.7。

   3、在第一个目录之下,会看到非常重要的文件:README 、INSTALL。如果此时是在GUI界面,则可以打开两个xte rm,一个用于仔细阅读,一个则用于根据文件的提示进行配置。

   4、在第二个目录中,也会很快的找到文件:INSTALL、INSTALL.DSO 、README.QNX。步骤与3相似。由于这两个文件相互关联,必须先配置前者。

   5、配置完后,进入/apache_1.3.6/conf /httpd.conf。在文件里面,理解其注释 ,删除或增加一些选项前的"#"。保存文件后,执行命令/usr /src/apache_1.3.6/bin/apachectl start,即打开http,然后可以在Netscape Communication来浏览网页。

   心得体会在学习的一个多月来,笔者面对的是一个全新的操作系统 ,绝大多数操作是通过自己键入命令来实现的,从而能够深入到一定层 次的了解操作系统内核。

   1、懂得了UNIX的一些基本命令;
   2、熟悉vi文本编辑;
   3、知道如何在LINUX、UNIX上编写、编译C、C++ 、JAVA程序;
   4、进一步了解了网络原理,动手配置了网络应用软件 ,从而也清楚了软件安装的一般步骤。
   5、毕竟现今for LINUX的应用软件少,而且RedHat LINUX不支持中文,因而还不能完全脱离WINDOWS。因此 ,应发挥LINUX是一个非常优秀的网络服务器操作系统的优点 ,扬长避短。

   由于有关操作系统的知识不够,所以还不能自己修改、开发内核 ,暂时停留在一般性了解、基本操作的基础上。因为笔者学习LINU X是为了先在PC机上了解UNIX,这是最主要的目的。当然 ,这一段时间的学习就是围绕着这个目的开展的。
 

 

http://www.11401.com/web/system/04/6448.html
Linux系统中网络配置详解
 
 从 Linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置 网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装 ,网络服务的设置和网络安全性三个方面来介绍一下linux系统中 网络的设置.

一.安装和配置网络设备

  在安装linux时,如果你有网卡,安装程序将会提示你给出tcp /ip网络的配置参数,如本机的ip地址,缺省网关的ip地址,DNS的ip地址等等.根据这些配置参数,安装程序将会自动把网卡(linux系统首先要支持)驱动程序编译到内核中去.但是我们一定要了解加载网卡驱动程序的过程,那么在以后改变网卡,使用多个网卡的时候我们就会很容易的操作.网卡的驱动程序是作为模 块加载到内核中去的 ,所有linux支持的网卡驱动程序都是存放在目录/lib /modules/(linux版本号)/net/ ,例如inter的82559系列10/100M自适应的引导网卡的驱动程序是eepro100.o,3COM的3C509 ISA网卡的驱动程序是3C509.o,DLINK的pci 10网卡的驱动程序是via-rhine.o,NE2000兼容性网卡的驱动程序是ne2k-pci.o和ne .o.在了解了这些基本的驱动程序之后,我们就可以通过修改模块配置文件来更换网卡或者增加网卡.

  1. 修改/etc/conf.modules 文件
  这个配置文件是加载模块的重要参数文件,大家先看一个范例文件
  #/etc/conf.modules
  alias eth0 eepro100
  alias eth1 eepro100
  这个文件是一个装有两块inter 82559系列网卡的linux系统中的conf .modules中的内容.alias命令表明以太口(如eth0)所具有的驱动程序的名称,alias eth0 eepro100说明在零号以太网口所要加载的驱动程序是eepr o100.o.那么在使用命令 modprobe eth0的时候, 系统将自动将eepro100.o加载到内核中.对于pci的网卡 来说,由于系统会自动找到网卡的io地址和中断号,所以没有必要在conf.modules中使用选项options 来指定网卡的io地址和中断号.但是对应于ISA网卡,则必须要在conf.modules中指定硬件的io地址或中断号, 如下所示,表明了一块NE的ISA网卡的conf.modules文件 .
  alias eth0 ne
  options ne io=0x300 irq=5
  在修改完conf.modules文件之后,就可以使用命令来加载模块,例如要插入inter的第二块网卡:
  #insmod /lib/modules/2.2.14/net /eepro100.o
  这样就可以在以太口加载模块eepro100.o.同时,还可以使用命令来查看当前加载的模块信息:
  [root@ice /etc]# lsmod
  Module Size Used by
  eepro100 15652 2 (autoclean)
  返回结果的含义是当前加载的模块是eepro100 ,大小是15652个字节,使用者两个,方式是自动清除.

  2. 修改/etc/lilo.conf文件
  在一些比较新的linux版本中,由于操作系统自动检测所有相关的硬件,所以此时不必修改/etc/lilo.conf文件.但是对于ISA网卡和老的版本,为了在系统初始化中对新加的网卡进行初始化,可以修改lilo.conf文件.在/etc/lilo.conf文件中增加如下命令:
  append="ether=5,0x240,eth0 ether=7,0x300,eth1"
  这条命令的含义是eth0的io地址是0x240,中断是5,eth1的io地址是0x300,中断是7.
  实际上,这条语句来自在系统引导影像文件时传递的参数,
  LILO: linux ether=5,0x240,eth0 ether=7,0x300,eth1
  这种方法也同样能够使linux系统配置好两个网卡.类似的,在使用三个以上网卡的时候,也可以依照同样的方法.
  在配置好网卡之后,就应该配置TCP/IP的参数,在一般情况下, 在安装linux系统的同时就会提示你配置网络参数.但是之后如果我们想要修改网络设置,可以使用如下的命令:
  #ifconfig eth0 A.B.C.D netmask E.F.G.H
  A.B.C.D 是eth0的IP地址,E.F.G.H是网络掩码.
  其实,在linux系统中我们可以给一块网卡设置多个ip地址,例如下面的命令:
  #ifconfig eth0:1 202.112.11.218 netmask 255.255.255.192
  然后,使用命令#ifconfig -a 就可以看到所有的网络接口的界面:
  eth0   Link encap:Ethernet HWaddr 00:90:27:58:AF:1A
       inet addr: 202.112.13.204 Bcast: 202.112.13.255 Mask:255.255.255.192
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
       RX packets:435510 errors:0 dropped:0 overruns:0 frame:2
       TX packets:538988 errors:0 dropped:0 overruns:0 carrier:0
       collisions:318683 txqueuelen:100
       Interrupt:10 Base address:0xc000

  eth0:1  Link encap:Ethernet HWaddr 00:90:27:58:AF:1A
       inet addr:202.112.11.218 Bcast: 202.112.11.255 Mask: 255.255.255.192
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
       Interrupt:10 Base address:0xc000

  lo    Link encap:Local Loopback
       inet addr:127.0.0.1 Mask: 255.0.0.0
       UP LOOPBACK RUNNING MTU:3924 Metric:1
       RX packets:2055 errors:0 dropped:0 overruns:0 frame:0
       TX packets:2055 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
  我们看到网络接口有三个,eth0 , eth0:1,lo,eth0是真实的以太网络接口,eth0:1和eth0是同一块网卡,只不过绑定了另外的一个地址,lo是会送地址。eth0和eth0:1可以使用不同网段的ip地址,这在同一个物理网段却使用不同的网络地址的时候十分有用。
  另外,网卡有一种模式是混杂模式(prosimc),在这个模式下,网卡将会接收网络中所有的数据包,一些linux下的网络监听工具例如tcpdump,snort等等都是把网卡设置为混杂模式.
  ifconfig命令可以在本次运行的时间内改变网卡的ip地址,但是如果系统重新启动,linux仍然按照原来的默认的设置启动 网络接口。这时候,可以使用netconfig或netconf命令来重新设置默认网络参数。netconfig 命令是重新配置基本的tcp/ip参数,参数包括是否配置为动态获得ip地址(dhcpd和bootp),网卡的ip地址,网络掩码,缺省网关和首选的域名服务器地址。netconf命令可以详细的配置所有网络的参数,分为客户端任务,服务器端任务和其他的配置三个部分,在客户端的配置中,主要包括基本主机的配置(主机名,有效域名,网络别名,对应相应网卡的ip地址,网络掩码,网络设备名,网络设备的内核驱动程序),DNS地址配置,缺省网关的地址配置,NIS地址配置,ipx接口配置,ppp/slip的配置等等。在服务器端配置中,主要包括NFS的配置,DNS的配置,ApacheWebServer配置,Samba的配置和Wu-ftpd的配置。在其他的配置选项中,一个是关于/etc/hosts文件中的主机配置,一个是关于/etc/networks文件中的网络配置信息,最后是关于使用linuxconf配置的信息。
  在linuxconf命令下,同样也可以配置网络信息,但是大家可以发现,linuxconf程序是调用netconf来进行网络配置的。
  另外,在/etc/sysconfig/network-scripts目录下存放着系统关于网络的配置文件,范例如下:

  ifcfg-eth0*  ifdown-post*  ifup-aliases*  ifup-ppp*
  ifcfg-eth1*  ifdown-ppp*   ifup-ipx*    ifup-routes*
  ifcfg-lo*   ifdown-sl*   ifup-plip*    ifup-sl*
  ifdown@    ifup@      ifup-post*    network-functions

  ifcfg-eth0是以太口eth0的配置信息,它的内容如下:

  DEVICE="eth0"              /*指明网络设备名称*/
  IPADDR=" 202.112.13.204"         /*指明网络设备的ip地址*/
  NETMASK="255.255.255.192"        /*指明网络掩码*/
  NETWORK=202.112.13.192         /*指明网络地址*/
  BROADCAST= 202.112.13.255         /*指明广播地址*/
  ONBOOT="yes"               /*指明在系统启动时是否激活网卡*/
  BOOTPROTO="none"             /*指明是否使用bootp协议*/
  
  所以,我们也可以修改这个文件来进行linux下网络参数的改变。

二 网络服务的配置:

  在这一部分,我们并不是详细的介绍具体的网络服务器(DNS,FTP,WWW,SENDMAIL)的配置(那将是巨大的篇幅),而是介绍一下与linux网络服务的配置相关的文件.

1. LILO的配置文件
  在linux系统中,有一个系统引导程序,那就是lilo (linux loadin),利用lilo可以实现多操作系统的选择启动.它的配置文件是 /etc/lilo.conf.在这个配置文件中,lilo的配置参数主要分为两个部分,一个是全局配置参数, 包括设置启动设备等等.另一个是局部配置参数,包括每个引导影像文件的配置参数.在这里我就不详细介绍每个参数,特别的仅仅说明两个重要的参数--------password和restricted选项,password选项为每个引导的影像文件加入口令保护.我们都知道,在linux系统中有一个运行模式是单用户模式,在这个模式下,用户是以超级用户的身份登录到linux系统中.人们可以通过在lilo引导的时候加入参数 (linux single 或linux init 0)就可以不需要口令直接进入单用户模式的超级用户环境中, 这将是十分危险的.所以在lilo.conf中增加了password的配置选项来为每个影像文件增加口令保护.你可以在全局模式中使用password选项(对所有影像文件都加入相同的口令),或者为每个单独的影像文件加入口令.这样一来,在每次系统启动时,都会要求用户输入口令.也许你觉得每次都要输入口令很麻烦,可以使用restricted选项,它可以使lilo仅仅在linux启动时输入了参数(例如 linux single)的时候才会检验密码.这两个选项可以极大的增加系统的安全性 ,建议在lilo.conf文件中设置它们.由于password在/etc/lilo.conf文件是以明文存放的,所以必须要将/etc/lilo.conf文件的属性改为仅仅root可读(0400).
  另外,在lilo的早期版本中,存在着引导扇区必须存放到前1024柱面的限制,在lilo的2.51版本中已经突破了这个限制,同时引导界面也变成了图形界面更加直观.最新版本的下载站点:
  ftp://166.111.136.3/pub/linux/lilo/lilo-2.51.tar.gz
  下载解压后,使用命令make install即可完成安装.
  注意: 物理安全才是最基本的安全,即使在lilo.conf中增加了口令保护,如果没有物理安全,恶意闯入者可以使用启动软盘启动linux系统.

2. 域名服务的配置文件
  (1)/etc/HOSTNAME 在这个文件中保存着linux系统的主机名和域名.范例文件

   ice.xanet.edu.cn

  这个文件表明了主机名ice,域名是xanet.edu.cn
  (2)/etc/hosts和/etc/networks文件 在域名服务系统中,有着主机表机制,/etc/hosts和/etc/networks就是主机表发展而来在/etc/hosts中存放着你不需要DNS系统查询而得的主机ip地址和主机名的对应,下面是一个范例文件:
  # ip 地址 主机名 别名
  127.0.0.1      localhosts        loopback
   202.117.1.13    www.xjtu.edu.cn     www
  202.117.1.24     ftp.xjtu.edu.cn     ftp

  在/etc/networks 中,存放着网络ip地址和网络名称的一一对应.它的文件格式和/etc/hosts是类似的
  (3)/etc/resolv.conf 这个文件是DNS域名解析器的主要配置文件,它的格式十分简单,每一行由一个主关键字组成./etc/resolv.conf的关键字主要有:
  domain   指明缺省的本地域名,
  search   指明了一系列查找主机名的时候搜索的域名列表,
  nameserver 指明了在进行域名解析时域名服务器的ip地址.下面给出一个范例文件:

  #/etc/resolv.conf
  domain    xjtu.edu.cn
  search     xjtu.edu.cn edu.cn
  nameserver   202.117.0.20
  nameserver  202.117.1.9

  (4)/etc/host.conf 在系统中同时存在着DNS域名解析和/etc/hosts的主机表机制时,由文件/etc/host.conf来说明了解析器的查询顺序.范例文件如下:

  #/etc/host.conf
  order hosts,bind     #解析器查询顺序是文件/etc/hosts,然后是DNS
  multi on         #允许主机拥有多个ip地址
  nospoof on        #禁止ip地址欺骗

3. DHCP的配置文件
  /etc/dhcpd.conf是DHCPD的配置文件,我们可以通过在/etc/dhcpd.conf文件中的配置来实 现在局域网中动态分配ip地址,一台linux主机设置为dhcpd服务器, 通过鉴别网卡的MAC地址来动态的分配ip地址.范例文件如下:

  option domain-name "chinapub.c

...

你可能感兴趣的:(Linux 学习)