1、由于还得一段时间单位才配笔记本,(约半个多月),因此我暂无法上机。
2、我刚到北京一周,JAVA基础的书未带,需要过一段时间回家去拿(坐8个小时车回家,再坐8个小时回来)。
因此目前情况,我先从网上找些相关的资料看看。
正在关注 Linux 、开源、IT 的个人博客。
1、由于还得一段时间单位才配笔记本,(约半个多月),因此我暂无法上机。
2、我刚到北京一周,JAVA基础的书未带,需要过一段时间回家去拿(坐8个小时车回家,再坐8个小时回来)。
因此目前情况,我先从网上找些相关的资料看看。
本学习档案的用于记录针对flying的JAVA学习目标的咨询进度。我将在本档案的后续评论中添加阶段性的咨询进度和方案调整。
flying,善于学习,无任何JAVA基础,只有BASIC基础,97年通过全国计算机等级考试二级——Basic语言。。(亦无C、VB基础),稍了解一些VBSCRIPT。
JAVA学习目标暂定为第一步:通过全国计算机等级考试二级——JAVA语言
本站提供JAVA学习方案建议(摘自邮件):
|
JAVA学习日记 孟大兴(littlebat, admin)
我希望这样:
第一步:通过计算机国计算机等级考试二级——JAVA
第二步:深入学习。
第三步:学习STRUTS、HIBERNATE等。
目前,我希望开始从第一步学习。
备注:本人JAVA基础为0,尚不会HELLO JAVA程序,需要开始学。
但有BASIC基础(97年通过全国计算机等级考试二级BASIC)。
所谓的“兴趣点拓展法”就是:基于知识都是相通的原理,以当前被咨询者最愿意解决的问题为出发点构建知识体系。兴趣是学习的良好动力。
我有一个叔叔,五十多岁,当年初中没有毕业,前段时间开始学电脑,他的目的是用电脑刻录光盘。所以,他对刻录软件非常有兴趣,他现在连字也不会打,但却把我给他安装的Nero刻录软件的文档看了一个遍,还有windows media player里面的刻录功能也点出来看,并提出一个我也不知道的问题。我答应帮助他学会电脑,于是,我从打字的基础、操作系统等传统的学习路线出发教他,他却因背不了字根表而中断了打字的学习(他的拼音也不会)。我想,对这位叔叔,我不能以一般的路线教他学电脑,他对刻录感兴趣,我可以以此为拓展点构建整个电脑操作的知识体系。这样,他学起来比较有兴趣。
还有,我的老婆对电脑也没有兴趣,但她认为自己应该掌握电脑技能,但对一步一步的照书本学习觉得烦,用她的话说就是“从你那里学现成的就比看书快多了”。不过,老婆现在喜欢聊天,我如果从聊天软件出发引导她自觉的构建整个电脑基础知识系统,应该是比较有效的。
一位老师在邮件中说:
|
我觉得这位老师说得很有道理。要让学习者保持JAVA学习的信心和兴趣,这是第一重要的咨询技巧。我将在以后的咨询实践中贯彻这个道理。
总之,总是以被咨询者当前最有兴趣、最迫切希望解决和学习的知识点出发来构建他的知识体系。
这个兴趣点就是他这门知识入门的切入点和契机。
前两天,一位朋友在QQ上向我问一个问题,他说他下载了一个人力资源管理系统,可是不知道怎么编译它?
我答:一般的源码都有Readme文件或ant脚本,可以照此编译。。。
他回复说:里面的说明只有3行:数据库文件在data中,用户名**,密码**;其余什么都没有?
我答:您看它是用什么IDE开发的,最简单的方法是导入开发它的IDE环境中,如果没有,那就只有用javac命令手工编译了。。。
看到这,我给这个人力资源系统下了一个大概的结论,没有详细的文档,没有自动编译脚本,初学者难以把它编译成功。
恰好,我的"学习日记V0.9"也是这样一个“初学都难以编译成功”的程序。它是我初学JAVA完成的第一个成形的程序,可以运行,但是正由于是初学的实习之作。毛病不少。其中一个毛病就是源代码组织不合理,没有详细的文档,没有自动编译脚本。
于是,我们就只有用javac命令来手工编译这些程序了,关于javac命令,您用javac -help在线帮助可以看到全部的用法,只不过初学者可能对其中的含义不是很明白。我也是一个入门级的水平,对其中的全部用法也不是都用过和明白。所以,与其说我开展的是JAVA学习日记网站免费提供JAVA学习入门咨询服务,还不如说是借此机会和大家聊聊JAVA学习,共同交流、共同进步。下面我就借怎样编译成功learndiaryV0.9源码说说javac命令的基本用法,包括:-classpath -cp -sourcepath -d 各个选项。也算是对那位朋友的一个详细的解答。
1、您下载了learndiaryV0.9.rar并解开后,会看到以下文件清单:
learndairydbV0.9.sql,数据库文件;learndiaryV0.9.war,编译好的程序文件;src,源代码文件目录;readme.html,使用说明。
您按照里面readme.html文件的步骤应该能把这个程序运行起来(如果您不知道怎样导入数据库,请参考一下这篇日记:mysql数据库的导出和导入)。但是,初学者想修改src里面的源文件并编译运行只能用javac命令手工编译。而且,因为这个程序是用ultraedit手工写的,您想把它导入一个集成开发环境也不太容易。所以,我就用编译src里面的源码为例说说javac命令的基本用法;
2、我们把编译好的类文件放在哪里呢?
跟源文件放在一起肯定不是一个好办法,那么,在解开的目录中建一个名为build的文件夹,与src文件夹在同一目录下。build文件夹用于保存编译好的class文件;
3、让我们来初步试一试编译src里的源文件吧。(我用的是ubuntu 6.06 linux平台+jdk1.5,在windows平台下的路径表示有所不同,您需要改一下)
learndiaryV0.9源码没有按包结构存放,如:src文件夹下面包含4个文件夹:action actionform dao model util,其中的一个类文件:LearnDiaryDB.java就直接放在dao文件夹下面,而LearnDiaryDB.java中的包结构是: package com.learndiary.website.dao;
标准的存放位置是./src/com/learndiary/website/dao。但是,这不妨害我们把源文件编译成类文件。
进入src文件夹所在的目录:
|
用javac命令编译src文件夹下的源文件到build文件夹下面:
|
结果如何呢?
长长的报错和警告,片断如下:
|
“警告:编码 UTF8 的不可映射字符”是怎么一回事呢?
原来learndiaryV0.9源程序里面有硬编码的中文字符,我用的是gb2312编码,而我现在的编译环境(ubuntu 6.06 linux)的默认编码是utf8,于是,需要指定encoding选项为: -encoding gb2312
而后面那些“找不到符号”、“软件包***不存在”的提示就是没有指定源码中引用到的其它类的路径了,这需要在classpath选项中指定,根据出错信息,我们为了方便,我们在当前目录下建一个名为compilelib的文件夹,把编译需要的库文件拷贝到这个文件夹下面,compilelib与src目录是同级的。确认编译需要的库文件可能不是一次尝试就能全部找出的,有时您需要根据出错信息从网上搜索,以判断是需要哪个库文件,一般来说,这些库文件在我下面说的两个地方都应该找得到,即:程序的WEB-INF/lib目录下面和web程序容器的通用库目录(如tomcat5.0是common/lib)下面。
到哪里去找哪些需要的库文件呢?
1)、用解压软件解开当前目录下面那个learndiaryV0.9.war文件,进入里面的那个WEB-INF/lib目录,把里面的activation.jar, mail.jar, struts.jar库文件拷贝到compilelib目录中;
2)、把您使用的tomcat(我用的是5.0版)安装目录下面common/lib下面的servlet-api.jar也拷贝到compilelib目录中;
于是,compilelib目录下面有如下库文件:
|
然后,执行:
|
(windows下面的classpath分隔符是分号; ,而不是这里linux下面的冒号: )
再解释一下"./src/*/*.java"通配符,它表示编译src目录下面第一层所有目录中的所有java文件,而“./src/*/*/*.java”则表示编译src目录下面第二层所有目录中的所有java文件,learndiaryV0.9的源码只有两层深,如果碰到有的程序的源码有多层深,那您就多添几层了,我还没有找到手工用javac命令把一个目录下面所有目录层次的java文件在一句里面指定好一次全部编译的方法,有谁知道提示一下,谢谢:)
于是,按package组织好的类文件就被编译好放在build目录了,它的组织结构是这样的: ./build/com/learndiary/website/action/...
然后,您就可以把这些编译好的类拷贝到程序的WEB-INF/classes目录下面了。
按理说,我们已经成功的编译了learndiaryV0.9,那还需要我们做什么呢?
我们这里的目的是借编译learndiaryV0.9说说javac命令的用法,所以,我还得继续把字打下去:)
4、您会发现上面的-classpath的选项里没有当前目录. (点号),难道不需要当前目录吗?在javac命令里的-sourcepath选项与-classpath选项有什么区别呢?这两个问题我们以只编译./src/action/disgoal/DisGoalContentAction.java这个文件来说明。
首先,我们把整个源码根据包结构重新组织好,即在src目录下面建一个./src/com/learndiary/website/的目录结构(据个人经验,这样才能单独编译成功DisGoalContentAction.java),再把原来src目录下的那些文件夹移到website文件夹下面去,这样DisGoalContentAction.java的路径就是:./src/com/learndiary/website/action/disgoal/DisGoalContentAction.java
然后,我们回到src目录的上层目录,执行javac命令如下:
|
但是,您会发现报错如下:
|
这是因为DisGoalContentAction.java中引用的用户源文件找不到,这时,我们的-sourcepath选项出场了,添加这个选项的命令如下:
|
一切OK了,并且,DisGoalContentAction.java引用到的几个源文件同时被编译进build目录了。
其中,“-sourcepath ./src”的作用是告诉javac到这个目录下面去找它要的东西。
实际上,-sourcepath这个选项完全可以被-classpath代替,只不过classpath除了可以找源文件,还可以找类文件,而sourcepath却只可以找源文件。也就是说,下面这个命令与上面的命令是等效的:
|
但是,反过来,用-sourcepath代替-classpath却不行,如下面的命令是不会执行成功的:
|
于是,我们再来说说classpath中当前路径 . 的作用。
假如您在当前目录下建了一个目录mypackage,再在mypackage下面写了一个Hello.java文件,并以mypackage为包,即它的头部有一句 package mypackage;
然后,您在当前目录(mypackage的父目录)下执行 javac ./mypackage/Hello.java,编译成功。在mypackage目录生成类文件Hello.class,然后,您在当前目录下执行:java -classpath test mypackage.Hello ,其中test是一个不存在的目录,目的是屏蔽系统的classpath中环境变量中定义的当前路径。您会发现类似下面的报错:
|
改过来,使当前路径生效:java -classpath . mypackage.Hello
执行结果就正常了。
所以,classpath当前路径 . 的作用就是告诉java从当前路径开始找它要的东西。
另外,javac中选项 -cp是选项-classpath的缩写,是完全等效的。
以上用编译learndiaryV0.9来说了javac命令的基本用法包括:-classpath -cp -sourcepath -d 各个选项。javac命令还有其它的选项,您用javac -help在线帮助可以看到,不过不常用,我也没有用过,就不写了。
5、一个疑问:
在我们编译DisGoalContentAction.java这一个java源文件的时候为什么必须要告诉它引用的其它源文件的搜索路径(用选项 -sourcepath ./src 告知),而前面编译learndiaryV0.9中src目录中全部源文件时却不用告诉它们彼此引用的其它源文件的搜索路径呢?而且,上面编译全部源文件时还并没有按包的结构组织源代码。大家可以探讨一下这是为什么?
今天就写到这里了。如您要转载本文请注明原始出处为:借如何编译learndiaryV0.9源码说说javac命令的基本用法: http://java.learndiary.com/diaries/3262.jsp 和作者信息: littlebat。我会在本文的原始出处随时对本文进行修定或补充。由于本人水平有限,错漏之处在所难免,欢迎您的批评指正和交流。谢谢。
JAVA学习日记 孟大兴
2007年5月28日早上初稿
所谓“咨询服务”,不过是先走一步者告诉后来一步者,哪儿有陷阱,别走弯路。
据我的观点,有两种“咨询服务”:
一种是问题驱动的,碰到一个问题向人提问,得到一个解决问题的答案,短平快,结束;
一种是全面系统的、从多方面的学习潜能的开发出发,针对个人的基础和学习习惯,个性化的跟踪咨询者的学习状态和提供相关建议的咨询,这个咨询服务是不能立马看到效果的,但是对咨询者的长远学习能力的培养有利。JAVA学习日记着重于后面这种咨询服务,当然,也不完全排除对当前问题的解答,但解答的出发点和方式还是诱导出您长远的、良好的解决问题的素质。
那么,我们怎么开展JAVA学习入门咨询服务呢?
1、首先,您要有自己的JAVA学习目标。
您需要问自己为什么学JAVA?学到哪个程度?是做网站?做手机程序?做桌面程序?做游戏?或者您是学软件工程的,学JAVA的目的是为软件工程作辅助的?还是仅仅是为增加知识面的泛泛了解?还有,您准备用多少时间来达到这个目标?您一天能用多少时间来学JAVA?
2、评估您的现有知识结构。
您学过程序吗?您学过C语言吗?您知道OOP吗?您学过数据库吗?您对网页制作和网站建设了解多少?做JAVA游戏您有没有丰富的想像力以构建故事情节?。。。
3、向我们提出您参加JAVA学习入门咨询的意愿。
经过您的上面两个方面的自我评估,您需要用我们给出的联系方式(见:JAVA学习日记网站免费提供JAVA学习入门咨询服务
)提交您的意愿。我们会为您建立学习档案(为了大家交流,如果您没有反对,您的学习档案将被公开),并提交您对上面两个方面的自我评估。我们根据您的评估为您制定学习策略和建议学习路线。
4、您需要在本站注册,写下您的JAVA学习目标或加入别人已经建立的JAVA学习目标。
我们要求您在本站注册,像本站已有的用户那样。写下您自己的JAVA学习目标或加入别人已经建立的JAVA学习目标。在平时的学习过程中,您可以记下自己的学习日记。这样,一方面方便大家的交流,另一方面我们可以更好的跟踪您的学习进度,为您随时调整学习路线提出建议。
5、您需要每周都与我们进行沟通。
沟通的方式包括:在本站记下您的学习日记、用本站提供的联系方式(见:JAVA学习日记网站免费提供JAVA学习入门咨询服务)与我们联系。我们需要及时跟踪咨询效果,并为您调整学习策略的建议。如果,您没有事先的告知,中断与本站的咨询联系一周。本站视您为自动放弃咨询资格。并将把您的咨询资格留给别人。(本站咨询人数限3人)
6、本站咨询服务完全免费。
JAVA学习日记 孟大兴
2007年5月25日上午
在我建立的JAVA学习日记网站提供JAVA学习入门咨询服务的目标中(我把拥有帮助别人JAVA学习入门的能力作为了一个自己的目标),我提到的咨询服务的最终效果是“入门为止”,那么,什么是我心里的“JAVA学习入门”呢?
说老实话,我学习JAVA至今5年了,由于自己没有进一步提高的需要,我的JAVA水平也仅是我想像中的“入门”而已。
所谓“入门”,有一句中国的古话“师傅领进门,修行在个人。”,也就是说,入门之后,您已经具备根据自己的需要,能进一步的自主的有效的学习并拥有技能。再打个比方,就像卫星已经被火箭送入了太空,可以自由的遨游了。这里,学习的技能将让您能够如您所愿的达成您的学习目标,您已经得到了“点金之术”,而不仅仅是金子。
下面把这个“入门”的概念运用在“JAVA学习”上,来聊一下“JAVA学习入门”的标准。这也是JAVA学习日记网站承诺的JAVA学习入门咨询的最终咨询效果的标准。
1、您对JAVA的整个家族成员有了一个全局性的了解。
您已经来到JAVA海洋的岸边,您能够看见海洋中的一座座闪着金光(您可以把它当成是金子的光,也可以当作是知识的光。。。)的岛屿,它们是JAVA的各个运用领域,如:J2EE, JAVA桌面程序,JAVA手机程序,JAVA游戏,JAVA图形,等等。您知道它们大概是什么样子,您也知道怎样才能到达那些岛屿。
2、您对怎样达到您的JAVA学习目标了然于胸。
您知道怎样解决日常工作中的问题,您知道到哪儿去找答案,您知道要达到您的学习需要去读哪些书,需要去哪些网站。您知道为了达到您的学习目标,哪些知识是重点要掌握的,哪些是需要了解的。也就是说,您能分清主次。
3、您能知道如何正确的与人交流JAVA学习问题。
您能知道什么时候向人提问,怎样提问,您能知道怎么样与人共享学习目标和学习经验,从而达到共同进步目的。您不会吝惜自己回答别人以正确的方式和正确的态度向您提的问题,因为能够提出好问题的人就是值得您交往的学友和老师,毫无疑问,您最终将从回答别人的问题中获益。
4、您对JAVA周边技术都有恰当的掌握。
JAVA不是孤立的,它与数据库,应用服务器,操作系统,数据结构,网页设计,您的想像力。。。等等,都是互相联系的。只掌握JAVA语法,您是永远作不出一个完整的程序的;所以,您根据自己的侧重点,对JAVA的周边技术都有主次分明的、恰当的掌握。
以上说的都是JAVA学习入门后必须具备的基本素质。下面谈谈我认为JAVA学习入门后需要掌握的JAVA技能与知识。相对于以上几点,我反而认为这些技能和知识是次要的。而我们JAVA学习日记网站JAVA学习入门咨询服务的重点也在上面几点素质的诱导和启发--这些素质您本来就有的,我们的咨询服务只不过是把您的这些未被开发的素质显现出来,从而为您进一步的JAVA技能的获取和人生各种技能的获取打下基础。
5、您能够根据自己的需要作出一个完整的可运行的程序或小系统。
您能根据自己的需要,自己设计,编码,调试运行成功一个程序。在完成这个小程序的过程中,您可以模仿和借鉴别人的系统和代码,但绝不是照抄,您能读懂自己代码和设计的含义,您能够根据出现的问题,去用多种途径解决问题:捕捉出错信息;看文档,如必备的J2SE文档;上网用搜索引擎查答案;上论坛或向周围的人提问请教。。。您在自己完成的系统中,有自己的思想,有自己的代码,您能知道您的代码中的绝大部分代码的含义,对暂时不甚了了的部分您也能圈定问题的影响范围和评估其重要性,以确定解决它的紧迫性--要知道,不是您碰到的任何一个问题都需要挖根问底的,您要根据自己的目的把时间花在最关键的地方。而在完成这个小系统的过程中,尽量不要使用Eclipse, JBuilder, Netbean等集成IDE环境,虽然它们有利于已入门者提高生产效率,但却不利于初学者练习和掌握基础知识;也不要求您用UML来设计,但您最好能用自己的方式作一个简单的设计,如:把需求列出来,把页面布局用草图画出来。。。,而且,作为周边知识的掌握,您最好是能看懂UML设计图;初学者作的系统,我觉得没有必要要求您有良好的面向对象设计,对系统有恰当的分层--我觉得这些是入门以后要做的事,您要做好这些事,设计模式之类的东西肯定是要学的。再强调一点,我不认为未入门者看设计模式是恰当的。
这个问题写多了,但要说完整不容易,也许后面为有专门的日记来写这个问题。
6、您已经比较完整和认真的精读过一本JAVA基础知识的书了,对JAVA基础有比较完整和重点突出的掌握。您有良好的面向对象的概念--虽然您还不能自如的运用它。
关于JAVA基础知识的书,我首推《JAVA编程思想》,英文书名:Thinking in Java。对这类书,您不能泛泛的读,要精读,对上面的例子和习题都要尽量认真的去做完。学这些书的时候,建议只用记事本,或UltraEdit之类的文本编辑器+Jdk,或者再加上一个mysql数据库和Tomcat服务器就行了。根据您的需要,如您暂时不打算做JAVA桌面程序,那么关于AWT(Abstract Window Toolkit)和Swing之类的东西可以大概看一下,知道是怎么一回事。但是,作为JAVA的基础,那些基础的包的东西一定要掌握,如lang的包,util的包等等,其中,J2SE中的容器类(Collections)必须要掌握,因为它们能够帮您省很多事,您需要知道什么时候用List,Set 或 Map?什么时候用ArrayList, LinkedList?您能正确的、熟练的使用如:Comparator,Iterator等重要的辅助性质的类。。。
良好的面向对象概念非常重要,您需要知道什么是面向对象,什么是封装、继承、多态?什么是包?并在编程中能有意识的运用这些概念。
7、您已经拥有良好的编码习惯和规范。
如JAVA的各个元素的命名规范,代码的缩进写作,甚至数组的排列等等。良好的写作规范是一个很重要的基本功。对代码的可读性和可维护性都很重要。
JAVA学习入门的标准是一个见仁见智的问题,可能每个人都有自己的JAVA学习入门标准。而上面仅是我的一人之见,自己也是一个入门者而已,偏颇和错漏之处还望批评和指正。谢谢。
今天就写到这里了。如您要转载本文请注明原始出处为:JAVA学习入门标准之我见: http://java.learndiary.com/diaries/3256.jsp 和作者信息: littlebat。我会在本文的原始出处随时对本文进行修定或补充。并欢迎您的留言反馈和交流。谢谢。
JAVA学习日记 孟大兴
2007年5月24日上午初稿
转自:Novell Ubuntu Linux命令大全使用方法: http://www.lslnet.com/linux/docs/linux-7400.htm
*********************************************************************************************************
Novell Ubuntu Linux命令大全使用方法
蓝森林 http://www.lslnet.com 2007年4月28日 20:01
1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件
文件管理 # ls ls -l或ll 列出当前目录下文件的详细信息
文件管理 # pwd pwd 查看当前所在目录的绝对路经
文件管理 # cd cd .. 回当前目录的上一级目录
文件管理 # cd cd - 回上一次所在的目录
文件管理 # cd cd ~ 或 cd 回当前用户的宿主目录
文件管理 # cd cd ~用户名 回指定用户的宿主目录
2 文件管理 # mkdir mkdir 目录名 创建一个目录
文件管理 # mkdir mkdir –p 递归式去创建一些嵌套目录
文件管理 # rmdir Rmdir 空目录名 删除一个空目录
3 文件管理 # rm rm 文件名 文件名 删除一个文件或多个文件
文件管理 # rm rm -rf 非空目录名 递归删除一个非空目录下的一切,不让提式-f
4 文件管理 # cat cat文件名 一屏查看文件内容
5 文件管理 # more more文件名 分页查看文件内容
6 文件管理 # less less 文件名 可控分页查看文件内容
7 文件管理 # grep grep字符 文件名 根据字符匹配来查看文件部分内容
8 文件管理 # mv mv 路经/文件 /经/文件 移动相对路经下的文件到绝对路经下
文件管理 # mv mv 文件名 新名称 在当前目录下改名
9 文件管理 # cp cp /路经/文件 ./ 移动绝对路经下的文件到当前目录下
10 文件管理 # find find 路经 -name “字符串” 查找路经所在范围内满足字符串匹配的文件和目录
11 文件管理 # ln ln 源文件 链接名 创建当前目录源文件的硬链接
ln /home/test /usr/test1 在/usr下建立/home/test的硬链接
12 文件管理 # ln Ln -s a b 创建当前目录下a的符号链接b
13 文件管理 # touch touch file1 file2 创建两个空文件
14 磁盘管理 # df df 用于报告文件系统的总容量,使用量,剩余容量。
15 磁盘管理 # du du -b /home 查看目前/HOME目录的容量(k)及子目录的容量(k)。
16 磁盘管理 # fdisk fdisk -l 查看系统分区信息
17 磁盘管理 # fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区
18 磁盘管理 # mkfs.ext3 Mkfs.ext3 /dev/sdb1
为第一块SCSI硬盘的第一主分区格式化成
ext3的文件系统
mkfs.ext2 Mkfs.ext2/dev/sdb2 格式化成ext2文件系统
19 磁盘管理 # mount mount -t 文件系统类型 设备路经 访问路经 磁盘管理 # 文件系统类型
ISO9660 光驱文件系统
vfat Fat文件系统(windows)
挂载光驱 # mount –t iso9660 /dev/cdrom /mnt/cdrom
挂载FAT # mount –t vfat /dev/hda5 /mnt/cdrom 挂第一个ide的第五个逻辑分区
17 磁盘管理 # Umount /mnt/cdrom 卸载/mnt/cdrom为空
18 文件权限 # chmod chmod u+s file 为file的属主加上特殊权限
chmod g+r file 为file的属组加上读权限
chmod o+w file 为file的其它用户加上写权限
chmod a-x file 为file的所有用户减去执行权限
chmod 765 file 为file的属主设为完全权限,属组设成读写权,其它用户具有读和执心权限
19 文件权限 # chown chown root /home 把/home的属主改成root用户
20 文件权限 # chgrp chgrp root /home 把/home的属组改成root组
21 打印管理 # redhat-config-printer-tui 进入安装打印机界面
22 打印管理 # lp lp –d hptr file 打印file到hptr的打印机上
23 打印管理 # lpq Lpq –P 打印机名 查看打印机的状态
24 打印管理 # lprm Lprm –P 打印机名 a 删除打印机内的打印作业
25 打印管理 # disable Disable –r “changing paper” HPtr 禁用打印机并提示原因
26 打印管理 # enable Enable HPtr 重新启用被禁用的
27 用户管理 # useradd Useradd 创建一个新的用户
28 用户管理 # groupadd Groupadd 组名 创建一个新的组
29 用户管理 # passwd Passwd 用户名 为用户创建密码
30 用户管理 # Passwd -d Passwd -d用户名 删除用户密码也能登陆
31 用户管理 # Passwd -l Passwd -l用户名 锁定账号密码
32 用户管理 # Passwd -u Passwd -u用户名 解锁账号密码
33 用户管理 # Passwd -S Passwd -S用户名 查询账号密码
34 用户管理 # Usermod -l Usermod -l 新用户名 老用户名 为用户改名
35 用户管理 # Usermod -L Usermod -L 要锁定用户名 锁定用户登陆
36 用户管理 # Usermod -U Usermod –U解锁用户名 解锁用户登陆
37 用户管理 # Usermod -u Usermod –u 501用户名 改变用户UID
38 用户管理 # Userdel Userdel–r 用户名 删除用户一切
39 用户管理 # Groupmod -n Groupmod –n新用户名 老用户名 为组改名
40 用户管理 # Groupmod -g Groupmod –g 501 组名 改变组GID
41 用户管理 # groupdel Groupdel组名 先应删它的用户 删除组
42 用户管理 # gpasswd -a gpasswd -a 用户名 组名 增加用户到组
43 用户管理 # Id id 用户名 查用户信息
44 软件管理 # rpm -qa rpm –qa | less 查询已安装RPM
45 软件管理 # rpm –qa | grep ftp 查询指定RPM
46 软件管理 # rpm -q rpm -q 已安装的RPM包 查是否安装
47 软件管理 # rpm -q telnet-server 查看telnet服务器包
48 软件管理 # rpm -qi rpm –qi 软件包名称 查看软件的描述信息
49 软件管理 # rpm -ql rpm –ql软件包名称 查询软件包的文件列表
50 软件管理 # rpm -qf rpm –qf软件包名称 查询某个文件所属的软件包
51 软件管理 # rpm -qp rpm –qp软件包全名 查询未安装的软件包信息
52 软件管理 # rpm -e rpm –e 软件包名称 删除具体的软件包
53 软件管理 # rpm -U rpm –Uvh软件包全名 升级软件包并显示过程
54 软件管理 # rpm -ivh rpm –ivh 软件包全名 安装软件包并显示过程
55 软件管理 # rpm -V rpm –V软件包名称 验证软件包的大小,类型等
56 软件管理 # tar -c 创建包 –x 释放包 -v 显示命令过程 –z 代表压缩包
57 软件管理 # tar -cf tar –cvf benet.tar /home/benet 把/home/benet目录打包
58 软件管理 # tar -czf tar –zcvf benet.tar.gz /mnt 把目录打包并压缩
59 软件管理 # tar –tf tar –tf benet.tar 看非压缩包的文件列表
60 软件管理 # tar –tzf tar –tf benet.tar.gz 看压缩包的文件列表
61 软件管理 # tar –xf tar –xf benet.tar 非压缩包的文件恢复
62 软件管理 # tar –zxvf tar –zxvf benet.tar.gz 压缩包的文件解压恢复
63 软件管理 # tar -jxvf tar –jxvf benet.tar.bz2
64 软件管理 # diff diff file1 file2 > 补丁名.patch 为新旧文件生成补丁文件
65 软件管理 # diff diff file1 file2 比较两个文件的区别
66 软件管理 # Patch Patch file补丁名.patch 打补丁
67 软件管理 # ./configure --prefix=/usr/local/ 编译前配置
68 软件管理 # make 编译
69 软件管理 # make install 安装编译好的源码包
70 启动管理 # reboot Init 6 重启LINUX系统
71 启动管理 # Halt Init 0 Shutdown –h now 关闭LINUX系统
72 启动管理 # runlevel 显示系统运行级
73 启动管理 # Init [0123456] 改变系统运行级,7种
74 启动管理 # Chkconfig –-list [服务名称] 查看服务的状态
75 启动管理 # Chkconfig –-level <运行级> <服务名> on|off|set 设置服务的启动状态
76 启动管理 # Chkconfig <服务名> on|off|set 设置非独立服务启状态
77 进程管理 # Top动态 Ps-aux静态 进程树pstree 查看系统进程
78 进程管理 # 程序名 & 后台运行程序
79 进程管理 # fg 把后台运行的进程调回前台
80 进程管理 # bg 把前台运行进程调到后台
81 进程管理 # renice Renice +1 180 把180号进程的优先级加1
82 进程管理 # kill Kill PID 终止某个PID进程
83 进程管理 # at at 5pm + 3 days /bin/ls 指定三天后下午5:00执行/bin/ls
84 进程管理 # crontab Crontab -e 用VI的形式来编辑自动周期性任务
85 进程管理 # crontab Crontab -l 查看自动周期性任务
86 进程管理 # crontab Crontab -r 删除自动周期性任务
87 进程管理 # crond Service crond 马上启动自动周期性服务 Service crond <启动|停止|重启|状态>
实现磁盘配额 (注安装LINUX时建立/home分区)
目标:对用户zhao在/home目录上实现soft limit为5k,hard limit 为10k的磁盘配额
实现步骤:
1. 修改包含/home的行, #vi /etc/fstab, 改为:defaults,usrquota。也就是增加usrquota项。然后保存退出。
2、卸载/home目录 #umount /home
3. 挂接/home目录 #mount /home
4、增加用户zhao #useradd zhao
5、修改密码 #passwd zhao
6、生成关于/home目录的quota信息 # quotacheck -cmug /home
#quotacheck -vu /home
7、查看所有用户的信息 #repquota -au
8、设置配额 #edquota -u zhao
将soft 和hard 分别改为5和10
9、保存并退出 #wq!
10、修改时间 #edquota -t
11、 #wq!
12.开启/home上的磁盘配额功能 #quotaon /home
13.查询配额 #quota -u zhao
14.验证配额 #su - zhao
$touch myfile
Ubuntu一些很必要的命令
安装
查看软件xxx安装内容
dpkg -L xxx
查找软件
apt-cache search 正则表达式
查找文件属于哪个包
dpkg -S filename
apt-file search filename
查询软件xxx依赖哪些包
apt-cache depends xxx
查询软件xxx被哪些包依赖
apt-cache rdepends xxx
增加一个光盘源
sudo apt-cdrom add
系统升级
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
清除所以删除包的残余配置文件
dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P -
编译时缺少h文件的自动处理
sudo auto-apt run ./configure
查看安装软件时下载包的临时存放目录
ls /var/cache/apt/archives
备份当前系统安装的所有包的列表
dpkg --get-selections | grep -v deinstall > ~/somefile
从上面备份的安装包的列表文件恢复所有包
dpkg --set-selections < ~/somefile
sudo dselect
清理旧版本的软件缓存
sudo apt-get autoclean
清理所有软件缓存
sudo apt-get clean
删除系统不再使用的孤立软件
sudo apt-get autoremove
系统
查看内核
uname -a
查看Ubuntu版本
cat /etc/issue
查看内核加载的模块
lsmod
查看PCI设备
lspci
查看USB设备
lsusb
查看网卡状态
sudo ethtool eth0
查看CPU信息
cat /proc/cpuinfo
显示当前硬件信息
lshw
硬盘
查看硬盘的分区
sudo fdisk -l
查看IDE硬盘信息
sudo hdparm -i /dev/hda
查看STAT硬盘信息
sudo hdparm -I /dev/sda
或
sudo apt-get install blktool
sudo blktool /dev/sda id
查看硬盘剩余空间
df -h
df -H
查看目录占用空间
du -hs 目录名
优盘没法卸载
sync
fuser -km /media/usbdisk
内存
查看当前的内存使用情况
free -m
进程
查看当前有哪些进程
ps -A
中止一个进程
kill 进程号(就是ps -A中的第一列的数字)
或者 killall 进程名
强制中止一个进程(在上面进程中止不成功的时候使用)
kill -9 进程号
或者 killall -9 进程名
图形方式中止一个程序
xkill 出现骷髅标志的鼠标,点击需要中止的程序即可
查看当前进程的实时状况
top
查看进程打开的文件
lsof -p
ADSL
配置 ADSL
sudo pppoeconf
ADSL手工拨号
sudo pon dsl-provider
激活 ADSL
sudo /etc/ppp/pppoe_on_boot
断开 ADSL
sudo poff
查看拨号日志
sudo plog
网络
根据IP查网卡地址
arping IP地址
查看当前IP地址
ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'
查看当前外网的IP地址
w3m -no-cookie -dump www.ip138.com|grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}'
w3m -no-cookie -dump ip.loveroot.com|grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}'
查看当前监听80端口的程序
lsof -i :80
查看当前网卡的物理地址
arp -a | awk '{print $4}'
ifconfig eth0 | head -1 | awk '{print $5}'
立即让网络支持nat
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -I POSTROUTING -j MASQUERADE
查看路由信息
netstat -rn
sudo route -n
手工增加删除一条路由
sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
修改网卡MAC地址的方法
sudo ifconfig eth0 down #关闭网卡
sudo ifconfig eth0 hw ether 00:AA:BB:CCD:EE #然后改地址
sudo ifconfig eth0 up #然后启动网卡
统计当前IP连接的个数
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n
统计当前20000个IP包中大于100个IP包的IP地址
tcpdump -tnn -c 20000 -i eth0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 > 100 '
屏蔽IPV6
echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6
服务
添加一个服务
sudo update-rc.d 服务名 defaults 99
删除一个服务
sudo update-rc.d 服务名 remove
临时重启一个服务
/etc/init.d/服务名 restart
临时关闭一个服务
/etc/init.d/服务名 stop
临时启动一个服务
/etc/init.d/服务名 start
设置
配置默认Java使用哪个
sudo update-alternatives --config java
修改用户资料
sudo chfn userid
给apt设置代理
export http_proxy=http://xx.xx.xx.xx:xxx
修改系统登录信息
sudo vim /etc/motd
中文
转换文件名由GBK为UTF8
sudo apt-get install convmv
convmv -r -f cp936 -t utf8 --notest --nosmart *
转换文件内容由GBK为UTF8
iconv -f gbk -t utf8 $i > newfile
转换 mp3 标签编码
sudo apt-get install python-mutagen
find . -iname “*.mp3” -execdir mid3iconv -e GBK {} /;
控制台下显示中文
sudo apt-get install zhcon
使用时,输入zhcon即可
文件
快速查找某个文件
whereis filenamefind 目录 -name 文件名
查看文件类型
file filename
显示xxx文件倒数6行的内容
tail -n 6 xxx
让tail不停地读地最新的内容
tail -n 10 -f /var/log/apache2/access.log
查看文件中间的第五行(含)到第10行(含)的内容
sed -n '5,10p' /var/log/apache2/access.log
查找包含xxx字符串的文件
grep -l -r xxx .
查找关于xxx的命令
apropos xxx
man -k xxx
通过ssh传输文件
scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
查看某个文件被哪些应用程序读写
lsof 文件名
把所有文件的后辍由rm改为rmvb
rename 's/.rm$/.rmvb/' *
把所有文件名中的大写改为小写
rename 'tr/A-Z/a-z/' *
删除特殊文件名的文件,如文件名:--help.txt
rm -- --help.txt 或者 rm ./--help.txt
查看当前目录的子目录
ls -d */. 或 echo */.
将当前目录下最近30天访问过的文件移动到上级back目录
find . -type f -atime -30 -exec mv {} ../back /;
将当前目录下最近2小时到8小时之内的文件显示出来
find . -mmin +120 -mmin -480 -exec more {} /;
删除修改时间在30天之前的所有文件
find . -type f -mtime +30 -mtime -3600 -exec rm {} /;
查找guest用户的以avi或者rm结尾的文件并删除掉
find . -name '*.avi' -o -name '*.rm' -user 'guest' -exec rm {} /;
查找的不以java和xml结尾,并7天没有使用的文件删除掉
find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} /;
统计当前文件个数
ls /usr/bin|wc -w
显示当前目录下2006-01-01的文件名
ls -l |grep 2006-01-01 |awk '{print $8}'
压缩
解压缩 xxx.tar.gz
tar -zxvf xxx.tar.gz
解压缩 xxx.tar.bz2
tar -jxvf xxx.tar.bz2
压缩aaa bbb目录为xxx.tar.gz
tar -zcvf xxx.tar.gz aaa bbb
压缩aaa bbb目录为xxx.tar.bz2
tar -jcvf xxx.tar.bz2 aaa bbb
Nautilus
显示隐藏文件
Ctrl+h
显示地址栏
Ctrl+l
特殊 URI 地址
* computer:/// - 全部挂载的设备和网络
* network:/// - 浏览可用的网络
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
* smb:/// - 可用的 windows/samba 网络资源
* x-nautilus-desktop:/// - 桌面项目和图标
* file:/// - 本地文件
* trash:/// - 本地回收站目录
* ftp:// - FTP 文件夹
* ssh:// - SSH 文件夹
* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
* themes:/// - 系统主题文件夹
查看已安装字体
在nautilus的地址栏里输入”fonts:///“,就可以查看本机所有的fonts
程序
详细显示程序的运行信息
strace -f -F -o outfile
日期和时间
设置日期
#date -s mm/dd/yy
设置时间
#date -s HH:MM
将时间写入CMOS
hwclock --systohc
读取CMOS时间
hwclock --hctosys
控制台
不同控制台间切换
Ctrl + ALT + ←
Ctrl + ALT + →
指定控制台切换
Ctrl + ALT + Fn(n:1~7)
控制台下滚屏
SHIFT + pageUp/pageDown
控制台抓图
setterm -dump n(n:1~7)
数据库
mysql的数据库存放在地方
/var/lib/mysql
从mysql中导出和导入数据
mysqldump 数据库名 > 文件名 #导出数据库
mysqladmin create 数据库名 #建立数据库
mysql 数据库名 < 文件名 #导入数据库
忘了mysql的root口令怎么办
sudo /etc/init.d/mysql stop
sudo mysqld_safe --skip-grant-tables &
sudo mysqladmin -u user password 'newpassword''
sudo mysqladmin flush-privileges
修改mysql的root口令
sudo mysqladmin -uroot -p password '你的新密码'
其它
下载网站文档
wget -r -p -np -k http://www.21cn.com
· -r:在本机建立服务器端目录结构;
· -p: 下载显示HTML文件的所有图片;
· -np:只下载目标站点指定目录及其子目录的内容;
· -k: 转换非相对链接为相对链接。
如何删除Totem电影播放机的播放历史记录
rm ~/.recently-used
如何更换gnome程序的快捷键
点击菜单,鼠标停留在某条菜单上,键盘输入任意你所需要的键,可以是组合键,会立即生效;
如果要清除该快捷键,请使用backspace.
*******************************************************************************************
转帖完毕
本来,对于linux操作系统,我是不大追求新的,一方面是自己的机器太老了,一方面是没有需要。所以,我家里的redhat linux9.0可能用了都有1年了也没有去动过。但是,这几天,我把redhat linux9.0去掉了,用硬盘iso文件(ubuntu-6.06-alternate-i386.iso)安装ubuntu的方法安装了Ubuntu6.06桌面版。
我为什么去掉redhat linux9.0呢?套用一位linuxsir.org上的朋友的话是“现在谁还用这”。
当我编译安装一个新的软件时,总是告诉我这样那样的库过时,要升级;还有前一段时间在linux下用得好好的MilyQQ和LumaQQ不知是安装了(或升级了)什么东西的缘故,突然一齐罢工都不能用了,我又畏惧去找原因,生怕又有一大堆东西要掌握,而我现在的重点不在于此;然后就是我安装了firefox的flash 9.0插件后,firefox只要一浏览有flash的网页往往就会崩溃。于是,我终于要下决心离开redhat linux9.0了。本来想找它的后续桌面版Fedora,但是Fedora的光盘有六张(我不知道到底需要几张光盘才能安装它?也不知道Fedora能不能进行硬盘安装?),我自己原来下过Ubuntu的硬盘iso安装文件,也在单位的P4 1.7G + 256M的机器上用过几天Ubuntu(因为我嫌它运行慢了和有点不适应它的“大包大揽”的自动化安装方式和它的默认UTF-8的locale编码,后来就没有用了),只有约700M大小,所以我就用Ubuntu了。
下面分享一下我用硬盘iso文件安装Ubuntu的经验。具体步骤在上面提到的那篇日记中有:用硬盘iso文件(ubuntu-6.06-alternate-i386.iso)安装ubuntu的方法
其中要注意的是:
1)、要选英文安装语言,以后安好了在安装中文包;我选中文安装语言时,出现了安装不能继续前进的问题,也不知道是不是语言问题引起的,反正是第二次选择英文安装语言后没有出现这个问题了;
2)、原来的/home(用户数据)和/usr/local(用户程序)分区,在安装程序分区时直接挂载到相应的挂载点,并选择“keep data existed”(大概是这样,意思是保持原来的数据不变)就行了;
3)、如果安装grub不成功时,重复安装一次“基本系统”(英文大概是“base system”吧)就成了(我试过两次都是这样);
4)、grub命令中的root (hd1,0)是要确定vmlinuz和initrd.gz(或initrd.img之类)文件所在的分区,一般来说是boot分区,如果没有划分boot分区(听说这样不科学,不过我就是这样的:))那就是根分区(/)(例如:在根分区下作了/boot目录下的vmlinuz和initrd.img文件的链接为/vmlinuz和/initrd.img);我的认识就是这样的,如果哪位大侠发现有什么错漏之处还望指点一二,谢谢。
5)、下面这个问题害得我刚装好Ubuntu一天又在今天中午重新安装Ubuntu了。
我下载了一个zhcon0.2.6的deb包安装(Ubuntu仓库里的zhcon0.2.3过时了,而且在我的系统上不能工作),报告说libc6版本低了,我又下载一个最新的libc6的deb包准备安装,却又报告缺哪个包。。。,又缺哪个包。。。
然后我准备用Ubuntu的新得立包管理系统更新libc6,报告3 broken,不能更新,而且快捷菜单里只有卸载的选项,一选择卸载又有许多与libc6有关的东西要更改。。。弄来弄去,就是不能继续更新libc6了。我知道如果我花时间去找解决方法也找得快。但是,我感觉不如重新装来得快:)
我感觉这是我不能适应Ubuntu安装方式的原因,牵涉面太宽了,而且这种自动化的方式使我手动控制变得有点不太方便。也许是没有深入Ubuntu的原因吧?
不过,从这个事件我得到一个教训,在Ubuntu下,用新得立自动包管理方式不能安装的东西,不要尝试用deb包去安装,如果deb包的东西打破了新得立系统的统一管理方式可能会有麻烦(像我碰到的那样)。这时,我觉得,最好的方式还是从源码编译手动安装的好(我还没有试着在ubuntu下编译安装zhcon0.2.6,但在redhat linux9.0下成功的)。
6)、我感觉AMD Duron 700 + 384M的机器比原来单位上的P4 1.7G + 256M的机器跑Ubuntu桌面版还要快点,可能是前者的内存多点吧?
7)、每个系统都有它自己的脾气,如果我们摸准了它的脾气,它就会乖乖听话,给我们卖力工作的:)
Windows XP操作系统现在在搞正版认证,如果你在自动更新中下载了正版认证的更新,如果你是盗版的Windows XP,那么,你的系统就会被盖上一个戳,标记为盗版,告诉你是盗版软件的受害者。还有,如果你到Microsoft的网站去下载新版的IE7,就会要求你先进行正版认证。我想,我坚持把linux作为自己的工作系统是应该不会错的,不为别的,清静,省心,省钱,还是正版:)
转自:成功的道路是目标铺出来的: http://www.student.gov.cn/zxpd/hs4799.htm
转帖正文:
**********************************************************************
成功的道路是目标铺出来的 蒋光宇
心理学家曾经做过这样一个实验:
组织三组人,让他们分别向着10千米以外的三个村子进发。
第一组的人既不知道村庄的名字,又不知道路程有多远,只告诉他们跟着向导走就行了。刚走出两三千米,就开始有人叫苦;走到一半的时候,有人几乎愤怒了,他们抱怨为什么要走这么远,何时才能走到头,有人甚至坐在路边不愿走了;越往后走,他们的情绪也就越低落。
第二组的人知道村庄的名字和路程有多远,但路边没有里程碑,只能凭经验来估计行程的时间和距离。走到一半的时候,大多数人想知道已经走了多远,比较有经验的人说:“大概走了一半的路程。”于是,大家又簇拥着继续向前走。当走到全程的3/4的时候,大家情绪开始低落,觉得疲惫不堪,而路程似乎还有很长。当有人说:“快到了!”“快到了!”大家又振作起来,加快了行进的步伐。
第三组的人不仅知道村子的名字、路程,而且公路旁每一千米就有一块里程碑。人们边走边看里程碑,每缩短一千米大家便有一小阵的快乐。行进中他们用歌声和笑声来消除疲劳,情绪一直很高涨,所以很快就到达了目的地。
心理学家得出了这样的结论:当人们的行动有了明确目标的时候,并能把自己的行动与目标不断地加以对照,进而清楚地知道自己的行进速度和与目标之间的距离,人们行动的动机就会得到维持和加强,就会自觉地克服一切困难,努力达到目标。
这使人联想到罗斯福总统的夫人与萨尔洛夫将军的一次对话。罗斯福总统的夫人在本宁顿学院念书的时候,打算在电讯业找一份工作,以补助生活 。她的父亲为她引见了自己的一个好朋友——当时担任美国无线电公司董事长的萨尔洛夫将军。
将军热情地接待了她,并认真地问:“想做哪一份工作?”
她回答说:“随便吧。”
将军神情严肃地对她说:“没有任何一类工作叫‘随便’。”
片刻之后,将军目光逼人,以长辈的口吻提醒她说:“成功的道路是目标铺出来的。”
如果人生没有目标,就好比在黑暗中远征。人生要有目标,一辈子的目标,一个时期的目标,一个阶段的目标,一个年度的目标,一个月份的目标,一个星期的目标,一天的目标……一个人追求的目标越高越直接,他进步得就越快,对社会也就越有益。有了崇高的目标,只要矢志不渝地努力,就会成为壮举。
如果将心理学家的结论用哲人的语言来表达,那就是:“伟大的目标构成伟大的心灵 ,伟大的目标产生伟大的动力,伟大的目标形成伟大的人物。”
文章来源:(《思维与智慧》2004年第12期)
摘自首都科技网
***************************************************************************
转载完毕