??xml version="1.0" encoding="utf-8" standalone="yes"?>美女国产一区二区,国产中文日韩欧美,免费国产一区http://www.aygfsteel.com/yifeng661/category/16308.htmlzh-cnWed, 28 Feb 2007 18:08:05 GMTWed, 28 Feb 2007 18:08:05 GMT60在Linux下Jdk的安装和Java环境变量的设|??http://www.aygfsteel.com/yifeng661/articles/79694.html伊峰伊峰Tue, 07 Nov 2006 12:49:00 GMThttp://www.aygfsteel.com/yifeng661/articles/79694.htmlhttp://www.aygfsteel.com/yifeng661/comments/79694.htmlhttp://www.aygfsteel.com/yifeng661/articles/79694.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/79694.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/79694.html ?/span> Linux ?/span> Jdk 的安装和 Java 环境变量的设|?/span>

1 、到 www.sun.com 下蝲最新版本的 j2sdk for linux

2 、安?/span> jdk1.4.2 for linux, 以下是在 Redhat Linux 9 下ؓ例:

   ?/span> root w䆾d

   (1) 打开一个终?/span>

   (2) 输入命o ls -l 查看安装文g的权?/span>

   (3) 输入命o chmod a+x j2sdk-1_4_2_01-linux-i586-rpm.bin, l所有的用户d执行的权限?/span>

   (4) 安装 jdk

      ./j2sdk-1_4_2_01-linux-i586-rpm.bin

      此步完成后,会生?/span> j2sdk-1_4_2_01-linux-i586.rpm 的文?/span>

       查看权限

      ls -l

      l?/span> j2sdk-1_4_2_01-linux-i586.rpm 赋执行权?/span>

      chmod +x j2sdk-1_4_2_01-linux-i586.rpm

      安装 j2sdk-1_4_2_01-linux-i586.rpm

      rpm -ivh j2sdk-1_4_2_01-linux-i586-rpm

      出现授权协议Q按 Enter 键接?/span>

   (5) 使用默认的安装位|,?/span> /usr/java/ 下,?/span> /usr/java/j2sdk1.4.2_01

3 、设|环境变?/span>

   使用 Vi ~辑器进行环境变量的~辑Q?/span>

   在终端中输入命o

   vi /etc/profile.d/java.sh

   q样可以在所有的用户中?/span>

   在新?/span> java.sh 中输入以下内容:

   #set java environment

   export J***A_HOME=/usr/java/j2sdk1.4.2_01

   export CLASSPATH=.:$J***A_HOME/lib:$J***A_HOME/jre/lib

   export PATH=$J***A_HOME/bin:$J***A_HOME/jre/bin:$PATH

   保存退?/span>

   PATH  ?/span>  CLASSPATH  都指定\径列表,列表中的各项  ( 卛_个\?/span> 之间使用分隔W分隔。在  Windows  下,分隔W是分号  (;) Q而在  Linux  下,分隔W是冒号  (:) ?/span>

4 、给 java.sh 分配权限

   输入以下命oQ?/span>

   chmod 755 /etc/profile.d/java.sh

5 、重启计机

   在终端中输入如下命oQ测?/span> jdk 是否安装成功

  java -version

照着q个配置好了Q^_^Q原来用修改/etc/profileҎQ结果把pȝ搞死了)

折腾了一下午Q可以了Q^_^Q算是有Ҏ获吧Q嘿嘿,jdkl于装成功了

/html>

伊峰 2006-11-07 20:49 发表评论
]]>
linux基础学习http://www.aygfsteel.com/yifeng661/articles/79405.html伊峰伊峰Mon, 06 Nov 2006 06:57:00 GMThttp://www.aygfsteel.com/yifeng661/articles/79405.htmlhttp://www.aygfsteel.com/yifeng661/comments/79405.htmlhttp://www.aygfsteel.com/yifeng661/articles/79405.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/79405.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/79405.html阅读全文

伊峰 2006-11-06 14:57 发表评论
]]>
Xp下安装SQL2000或者其他Y件系l提CZ前有挂v的安装操?要求重启pȝ的解军_?/title><link>http://www.aygfsteel.com/yifeng661/articles/76097.html</link><dc:creator>伊峰</dc:creator><author>伊峰</author><pubDate>Thu, 19 Oct 2006 02:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/yifeng661/articles/76097.html</guid><wfw:comment>http://www.aygfsteel.com/yifeng661/comments/76097.html</wfw:comment><comments>http://www.aygfsteel.com/yifeng661/articles/76097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yifeng661/comments/commentRss/76097.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yifeng661/services/trackbacks/76097.html</trackback:ping><description><![CDATA[ <table width="530" align="center" border="0"> <tbody> <tr> <td valign="top" align="left"> <table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="0" cellpadding="0" width="96%" border="0"> <tbody> <tr> <td bgcolor="#e8f0f1">  sql2000安装时说有以前挂L文g存在Q让重启</td> </tr> <tr> <td> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <div align="right"> </div> </td> </tr> </tbody> </table> <span id="wmqeeuq" class="oblog_text">  需要去注册表里删一些东西, <br /><br />1Q添?删除E序中彻底删除sql server?<br /><br />2Q将没有删除的sql server目录也删除掉?<br /><br /><br />3Q打开注册表编辑器Q在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations目Qƈ删除它。这样就可以清除安装暂挂目 </span> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/yifeng661/aggbug/76097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yifeng661/" target="_blank">伊峰</a> 2006-10-19 10:56 <a href="http://www.aygfsteel.com/yifeng661/articles/76097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(?怎样使按钮响应回车键 http://www.aygfsteel.com/yifeng661/articles/74505.html伊峰伊峰Wed, 11 Oct 2006 03:10:00 GMThttp://www.aygfsteel.com/yifeng661/articles/74505.htmlhttp://www.aygfsteel.com/yifeng661/comments/74505.htmlhttp://www.aygfsteel.com/yifeng661/articles/74505.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/74505.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/74505.html<script language="javascript" event="onkeydown" for="document"> 
if(event.keyCode==13) 

document.all('Button1').focus(); 
document.all('Button1').click(); 

</script> 

伊峰 2006-10-11 11:10 发表评论
]]>
(?从图像提交表?/title><link>http://www.aygfsteel.com/yifeng661/articles/74504.html</link><dc:creator>伊峰</dc:creator><author>伊峰</author><pubDate>Wed, 11 Oct 2006 03:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/yifeng661/articles/74504.html</guid><wfw:comment>http://www.aygfsteel.com/yifeng661/comments/74504.html</wfw:comment><comments>http://www.aygfsteel.com/yifeng661/articles/74504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yifeng661/comments/commentRss/74504.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yifeng661/services/trackbacks/74504.html</trackback:ping><description><![CDATA[ <h4> <a name="jakartastrutsckbk-CHP-3-SECT-6.1"> </a>问题</h4> <p>你想要用户能够通过点击一个不在HTML表单标签中的囑փ来提交表单?/p> <h4> <a name="jakartastrutsckbk-CHP-3-SECT-6.2"> </a>动作要领</h4> <p>适应一个对JavaScript URL 的链接来提交表单Q?br /></p> <br /> <div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <div> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">html:link </span> <span style="COLOR: #ff0000">href</span> <span style="COLOR: #0000ff">="javascript:document.myform.submit(  )"</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">html:img </span> <span style="COLOR: #ff0000">page</span> <span style="COLOR: #0000ff">="/submit-form.gif"</span> <span style="COLOR: #ff0000"> <br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />               alt</span> <span style="COLOR: #0000ff">="Submit"</span> <span style="COLOR: #ff0000"> border</span> <span style="COLOR: #0000ff">="0"</span> <span style="COLOR: #0000ff">/></span> <span style="COLOR: #000000"> <br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">html:link</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> </div> <br /> <p> <a name="jakartastrutsckbk-CHP-3-SECT-6.3"> </a> </p> <h4>动作变化</h4> <p>Web 应用l常使用可点ȝ囑փ来提交表单而不是仅仅通过表单按钮。Struts <a name="jakartastrutsckbk-CHP-3-ITERM-1540"></a><a name="jakartastrutsckbk-CHP-3-ITERM-1541"></a><a name="jakartastrutsckbk-CHP-3-ITERM-1542"></a>的html:image标签可以用来产生一个显C图像的HTML input type="image" 标签。但是,对于复杂?HTML 布局Qƈ不L能够图像嵌入在表单<form> . . . </form>标签之中。有些时候,一?HTML 面可能在页面的某一D可能有多个表单Q而提交页面的囑փ则在面的另一个区域。比如,工具条风格的囑փ按钮?/p> <p>上面的方法可以用于从表单之外的图像提交表单。所昄的图像嵌套在html:link标签中。该链接通过执行一行JavaScript来提交表单。在上面的代码中QJavaScript 提交名为MyForm 的表单。表单名U必d配struts-config.xml文g中所配置的action元素的name属性。下面是q种Ҏ产生的HTML 代码Q?/p> <p> </p> <div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <div> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">a </span> <span style="COLOR: #ff0000">href</span> <span style="COLOR: #0000ff">="javascript:document.myform.submit(  )"</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">img </span> <span style="COLOR: #ff0000">src</span> <span style="COLOR: #0000ff">="/myapp/struts-power.gif"</span> <span style="COLOR: #ff0000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />         border</span> <span style="COLOR: #0000ff">="0"</span> <span style="COLOR: #ff0000"> alt</span> <span style="COLOR: #0000ff">="Submit"</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">a</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> </div> <p> </p> <p>虽然你可以直接用上qHTML标记而不是Struts html标签Q如果那L话你失去那些标{所提供的特征。通过使用Struts tagQ你׃是必要指定context 名称Qƈ且你可以使图像名U和替换文本来自于资源束 (如果你需要的??/p> <p>另一个办法是使用html:img 标签的onclick属性:</p> <p> </p> <div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <div> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">html:img </span> <span style="COLOR: #ff0000">page</span> <span style="COLOR: #0000ff">="/submit-form.gif"</span> <span style="COLOR: #ff0000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />       onclick</span> <span style="COLOR: #0000ff">="document.MyForm.submit( );"</span> <span style="COLOR: #ff0000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />           alt</span> <span style="COLOR: #0000ff">="Submit"</span> <span style="COLOR: #ff0000"> border</span> <span style="COLOR: #0000ff">="0"</span> <span style="COLOR: #0000ff">/></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> </div> <p> </p> <p>q种方式的缺ҎQ有些浏览器q不提供囑փ是可以点ȝ一些可视提C线索。因为图像嵌入到一个链接中Q大多数览器都会在改变鼠标指针以提C囑փ是可以点ȝ?/p> <img src ="http://www.aygfsteel.com/yifeng661/aggbug/74504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yifeng661/" target="_blank">伊峰</a> 2006-10-11 11:09 <a href="http://www.aygfsteel.com/yifeng661/articles/74504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(?javascript 常用代码大全http://www.aygfsteel.com/yifeng661/articles/74496.html伊峰伊峰Wed, 11 Oct 2006 02:47:00 GMThttp://www.aygfsteel.com/yifeng661/articles/74496.htmlhttp://www.aygfsteel.com/yifeng661/comments/74496.htmlhttp://www.aygfsteel.com/yifeng661/articles/74496.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/74496.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/74496.html阅读全文

伊峰 2006-10-11 10:47 发表评论
]]>
(?利用iText在JSP中生成PDF报表http://www.aygfsteel.com/yifeng661/articles/74494.html伊峰伊峰Wed, 11 Oct 2006 02:41:00 GMThttp://www.aygfsteel.com/yifeng661/articles/74494.htmlhttp://www.aygfsteel.com/yifeng661/comments/74494.htmlhttp://www.aygfsteel.com/yifeng661/articles/74494.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/74494.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/74494.html  iText是一个开放源码的JavacdQ可以用来方便地生成PDF文g。大安过讉Khttp://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948下蝲最新版本的cdQ下载完成之后会得到一?jar包,把这个包加入JDK的classpath卛_使用。如果生成的PDF文g中需要出C文、日文、韩文字W,则还需要通过讉Khttp://itext.sourceforge.net/downloads/iTextAsian.jar下蝲iTextAsian.jar包?/p>

  关于iTextcd的用,http://www.lowagie.com/iText/tutorial/index.html有比较详l的教程。该教程从入门开始,比较pȝCl了在PDF文g中放入文字、图片、表格等的方法和技巧。读完这片教E,大致可以做一些从单到复杂的PDF文g了。不q,试图通过教程解决在生成PDF文gq程中遇到的所有困难无疑是一U奢望。所以,阅读iText的api文昑־非常重要。读者在下蝲cd的同Ӟ也可以下载类库的文?/p>

  如何利用iText在javaE序中生成PDF报表

  以下是上q教E中一个最单的例子Q这个例子刻M通过iText生成PDF文g的一般程序框架。读者只需要在document.open();和document.close();两条语句中间加入自己希望攑֜PDF文g中的内容卛_。该例子只在PDF文g中加了“Hello World“一行文字?/p>


Document document = new Document();

try

{

 PdfWriter.getInstance(document, new FileOutputStream ("Chap0101.pdf"));

 document.open();

 document.add(new Paragraph("Hello World"));

}

catch(DocumentException de)

{

 System.err.println(de.getMessage());

}

catch(IOException ioe)

{

 System.err.println(ioe.getMessage());

}

document.close();

  ׃上的例子可见Q程序的框架十分清楚明了。然而在PDF中指定文字、图甅R表格的位置是一仉帔R烦的事情。除了不断地在程序中修改位置、然后运行程序、生成PDF文g、观察元素在PDF中的位置是否合理q样的过E以外,gq没有其它更好的Ҏ?/p>

  如何通过JSP生成PDF报表

  q一部分是在iText的教E中所没有的,|上的相兌料也比较。我曑֜CSDN上看q有人开帖询问实现细节,有h回复了实现的原理Q先在服务器上生成PDF文gQ然后用户通过点击指向PDF文g的超链接选择下蝲或打开。这是一个思\Q或者说是思\之一。本文实Cq个思\Q又l出另外一个思\q过两种途径实现之?/p>

  1Q直接在服务器上生成PDF文g?/p>

Q?@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*"%Q?/p>

Q?

 String filename = "PDF"+(new Random()).nextInt()+".pdf" ;

 Document document = new Document(PageSize.A4);

 ServletOutputStream out1 = response.getOutputStream();

 try

 {

  PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename) );

  document.open();

  document.add(new Paragraph("Hello World"));

  document.close();

 }

 catch(Exception e){}%Q?

 

  上面的程序在服务器上生成了一个静态的PDF文g。显Ӟ每次q行所得的PDF文g的名U应该是独一无二不能有重的。本E序通过随机函数来命名生成的PDF文g。本E序的缺点就是,每次q行都会在服务器上生一个PDF文gQ如果不及时删除Q数量会来大Q这昄是站点维护者所不愿意看到的?/p>

 

  2Q将PDF文g通过的形式输送到客户端的~存。这样做的好处是不会在服务器上留下Q何“遗q”?/p>

 

  iQ直接通过JSP面生成

 

 

Q?@

page import="java.io.*,java.awt.Color,com.lowagie.text.*,com.lowagie.text.pdf.*"%Q?/p>

Q?

 response.setContentType( "application/pdf" );

 Document document = new Document();

 ByteArrayOutputStream buffer = new ByteArrayOutputStream();

 PdfWriter writer=PdfWriter.getInstance( document, buffer );

 document.open();

 document.add(new Paragraph("Hello World"));

 document.close();

 DataOutput output = new DataOutputStream( response.getOutputStream() );

 byte[] bytes = buffer.toByteArray();

 response.setContentLength(bytes.length);

 for( int i = 0; i Q?bytes.length; i++ )

 {

  output.writeByte( bytes[i] );

 }

%Q?

 

  iiQ通过Servlet生成

 

 

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import com.lowagie.text.*;

import com.lowagie.text.pdf.*;

public void doGet(HttpServletRequest request, HttpServletResponse response)

 throws IOException,ServletException

 {

  Document document = new Document(PageSize.A4, 36,36,36,36);

  ByteArrayOutputStream ba = new ByteArrayOutputStream();

  try

  {

   PdfWriter writer = PdfWriter.getInstance(document, ba);

   document.open();

   document.add(new Paragraph("Hello World"));

  }

  catch(DocumentException de)

  {

   de.printStackTrace();

   System.err.println("A Document error:" +de.getMessage());

  }

  document.close();

  response.setContentType("application/pdf");

  response.setContentLength(ba.size());

  ServletOutputStream out = response.getOutputStream();

  ba.writeTo(out);

  out.flush();

 }



伊峰 2006-10-11 10:41 发表评论
]]>
(?HOOK专题http://www.aygfsteel.com/yifeng661/articles/72742.html伊峰伊峰Fri, 29 Sep 2006 02:45:00 GMThttp://www.aygfsteel.com/yifeng661/articles/72742.htmlhttp://www.aygfsteel.com/yifeng661/comments/72742.htmlhttp://www.aygfsteel.com/yifeng661/articles/72742.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/72742.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/72742.htmlHOOK专题
目录
  • 基本概念
  • q行机制
  • 钩子cd
  • 作?

基本概念
钩子(Hook)Q是Windows消息处理机制的一个^?应用E序可以在上面设|子E以监视指定H口的某U消息,而且所监视的窗口可以是其他q程所创徏的。当消息到达后,在目标窗口处理函C前处理它。钩子机制允许应用程序截获处理window消息或特定事件?/div>
钩子实际上是一个处理消息的E序D,通过pȝ调用Q把它挂入系l。每当特定的消息发出Q在没有到达目的H口前,钩子E序先捕获该消息,亦即钩子函数先得到控
制权。这旉子函数即可以加工处理Q改变)该消息,也可以不作处理而l传递该消息Q还可以强制l束消息的传递?/div>
q行机制
1、钩子链表和钩子子程Q?/div>
每一个Hook都有一个与之相兌的指针列表,UC为钩子链表,ql来l护。这个列表的指针指向指定的,应用E序定义的,被Hook子程调用的回调函敎ͼ也就是该钩子的各个处理子E。当与指定的Hookcd兌的消息发生时Q系l就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修Ҏ息,或者停止消息的前进Q避免这些消息传递到下一个Hook子程或者目的窗口。最q安装的钩子攑֜铄开始,而最早安装的钩子攑֜最后,也就是后加入的先获得控制权?/div>
Windows q不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸蝲QWindows 侉K攑օ占用的内存,q更新整个Hook链表。如果程序安装了钩子Q但是在未卸蝲钩子之前q束了Q那么系l会自动为它做卸载钩子的操作?/div>
钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函敎ͼ只能定义为普通的C函数。用以监视系l或某一特定cd的事Ӟq些事g可以是与某一特定U程兌的,也可以是pȝ中所有线E的事g?/div>
钩子子程必须按照以下的语法:
LRESULT CALLBACK HookProc
(
 	int nCode, 
     	WPARAM wParam, 
     	LPARAM lParam
);
HookProc是应用程序定义的名字?/div>
nCode参数是Hook代码QHook子程使用q个参数来确定Q务。这个参数的g赖于HookcdQ每一UHook都有自己的Hook代码特征字符集?/div>
wParam和lParam参数的g赖于Hook代码Q但是它们的典型值是包含了关于发送或者接收消息的信息?/div>
2、钩子的安装与释放:
使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。SetWindowsHookEx函数L在Hook铄开头安装Hook子程。当指定cd的Hook监视的事件发生时Q系l就调用与这个Hook兌的Hook铄开头的Hook子程。每一个Hook链中的Hook子程都决定是否把q个事g传递到下一个Hook子程。Hook子程传递事件到下一个Hook子程需要调用CallNextHookEx函数?/div>
HHOOK SetWindowsHookEx( 
     int idHook,      // 钩子的类型,卛_处理的消息类?
     HOOKPROC lpfn,   // 钩子子程的地址指针。如果dwThreadId参数?
			   // 或是一个由别的q程创徏的线E的标识Q?
			   // lpfn必须指向DLL中的钩子子程?
			   // 除此以外Qlpfn可以指向当前q程的一D钩子子E代码?
			   // 钩子函数的入口地址Q当钩子钩到M消息后便调用q个函数?
     HINSTANCE hMod,  // 应用E序实例的句柄。标识包含lpfn所指的子程?
DLL?
			   // 如果dwThreadId 标识当前q程创徏的一个线E,
			   // 而且子程代码位于当前q程QhMod必须为NULL?
			   // 可以很简单的讑֮其ؓ本应用程序的实例句柄?
     DWORD dwThreadId // 与安装的钩子子程相关联的U程的标识符?
			   // 如果?Q钩子子E与所有的U程兌Q即为全局钩子?
                 ); 
  函数成功则返回钩子子E的句柄Q失败返回NULL?/div>
  以上所说的钩子子程与线E相兌是指在一钩子链表中发l该U程的消息同时发送给钩子子程Q且被钩子子E先处理?/div>
在钩子子E中调用得到控制权的钩子函数在完成对消息的处理后Q如果想要该消息l箋传递,那么它必调用另外一个SDK中的API函数CallNextHookEx来传递它Q以执行钩子链表所指的下一个钩子子E。这个函数成功时q回钩子链中下一个钩子过E的q回|q回值的cd依赖于钩子的cd。这个函数的原型如下Q?/div>
LRESULT CallNextHookEx
			(
				HHOOK hhk;
				int nCode;
				WPARAM wParam;
				LPARAM lParam;
			 );
hhk为当前钩子的句柄Q由SetWindowsHookEx()函数q回?/div>
NCodeZl钩子过E的事g代码?/div>
wParam和lParam 分别是传l钩子子E的wParam|其具体含义与钩子cd有关?/div>
钩子函数也可以通过直接q回TRUE来丢弃该消息QƈL该消息的传递。否则的话,其他安装了钩子的应用E序不会接收到钩子的通知而且q有可能产生不正的l果?/div>
钩子在用完之后需要用UnHookWindowsHookEx()卸蝲Q否则会造成ȝ。释N子比较简单,UnHookWindowsHookEx()只有一个参数。函数原型如下:
UnHookWindowsHookEx
(
	HHOOK hhk;
);
函数成功q回TRUEQ否则返回FALSE?/div>
3、一些运行机Ӟ
在Win16环境中,DLL的全局数据Ҏ个蝲入它的进E来说都是相同的Q而在Win32环境中,情况却发生了变化QDLL函数中的代码所创徏的Q何对象(包括变量Q都归调用它的线E或q程所有。当q程在蝲入DLLӞ操作pȝ自动把DLL地址映射到该q程的私有空_也就是进E的虚拟地址I间Q而且也复制该DLL的全局数据的一份拷贝到该进E空间。也是说每个进E所拥有的相同的DLL的全局数据Q它们的名称相同Q但其值却q不一定是相同的,而且是互不干涉的?/div>
因此Q在Win32环境下要惛_多个q程中共享数据,必进行必要的讄。在讉K同一个Dll的各q程之间׃n存储器是通过存储器映文件技术实现的。也可以把这些需要共享的数据分离出来Q放|在一个独立的数据D里Qƈ把该D늚属性设|ؓ׃n。必ȝq些变量赋初|否则~译器会把没有赋初始值的变量攑֜一个叫未被初始化的数据D中?/div>
#pragma data_seg预处理指令用于设|共享数据段。例如:
#pragma data_seg("SharedDataName")
HHOOK hHook=NULL;
#pragma data_seg()
?pragma data_seg("SharedDataName")?pragma data_seg()之间的所有变量将被访问该Dll的所有进E看到和׃n。再加上一条指?pragma comment(linker,"/section:.SharedDataName,rws"),那么q个数据节中的数据可以在所有DLL的实例之间共享。所有对q些数据的操作都针对同一个实例的Q而不是在每个q程的地址I间中都有一份?/div>
当进E隐式或昑ּ调用一个动态库里的函数Ӟpȝ都要把这个动态库映射到这个进E的虚拟地址I间?以下U?地址I间")。这使得DLL成ؓq程的一部分Q以q个q程的n份执行,使用q个q程的堆栈?/div>
4、系l钩子与U程钩子Q?/div>
SetWindowsHookEx()函数的最后一个参数决定了此钩子是pȝ钩子q是U程钩子?/div>
U程勑֭用于监视指定U程的事件消息。线E勾子一般在当前U程或者当前线E派生的U程内?/div>
pȝ勑֭监视pȝ中的所有线E的事g消息。因为系l勾子会影响pȝ中所有的应用E序Q所以勾子函数必L在独立的动态链接库(DLL) 中。系l自动将包含"钩子回调函数"的DLL映射到受钩子函数影响的所有进E的地址I间中,卛_q个DLL注入了那些进E?/div>
几点说明Q?/div>
Q?Q如果对于同一事gQ如鼠标消息Q既安装了线E勾子又安装了系l勾子,那么pȝ会自动先调用U程勑֭Q然后调用系l勾子?
Q?Q对同一事g消息可安装多个勾子处理过E,q些勑֭处理q程形成了勾子链。当前勾子处理结束后应把勑֭信息传递给下一个勾子函数?
Q?Q勾子特别是pȝ勑֭会消耗消息处理时_降低pȝ性能。只有在必要的时候才安装勑֭Q在使用完毕后要及时卸蝲?/div>
钩子cd
每一U类型的Hook可以使应用程序能够监视不同类型的pȝ消息处理机制。下面描q所有可以利用的Hookcd?/div>
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks
WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到H口q程的消息。系l在消息发送到接收H口q程之前调用WH_CALLWNDPROC Hook子程Qƈ且在H口q程处理完消息之后调用WH_CALLWNDPROCRET Hook子程?/div>
WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCTl构Q再传递到Hook子程?/div>
CWPRETSTRUCTl构包含了来自处理消息的H口q程的返回|同样也包括了与这个消息关联的消息参数?/div>
2、WH_CBT Hook
在以下事件之前,pȝ都会调用WH_CBT Hook子程Q这些事件包括:
1. Ȁz,建立Q销毁,最化Q最大化Q移动,改变寸{窗口事Ӟ
2. 完成pȝ指oQ?/div>
3. 来自pȝ消息队列中的Ud鼠标Q键盘事Ӟ
4. 讄输入焦点事gQ?/div>
5. 同步pȝ消息队列事g?/div>
Hook子程的返回值确定系l是否允许或者防止这些操作中的一个?/div>
3、WH_DEBUG Hook
在系l调用系l中与其他Hook兌的Hook子程之前Q系l会调用WH_DEBUG Hook子程。你可以使用q个Hook来决定是否允许系l调用与其他Hook兌的Hook子程?/div>
4、WH_FOREGROUNDIDLE Hook
当应用程序的前台U程处于I闲状态时Q可以用WH_FOREGROUNDIDLE Hook执行低优先的Q务。当应用E序的前台线E大概要变成I闲状态时Q系l就会调用WH_FOREGROUNDIDLE Hook子程?/div>
5、WH_GETMESSAGE Hook
应用E序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数q回的消息。你可以使用WH_GETMESSAGE Hookȝ视鼠标和键盘输入Q以及其他发送到消息队列中的消息?/div>
6、WH_JOURNALPLAYBACK Hook
WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到pȝ消息队列。可以用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连l的鼠标和键盘事件。只要WH_JOURNALPLAYBACK Hook已经安装Q正常的鼠标和键盘事件就是无效的?/div>
WH_JOURNALPLAYBACK Hook是全局HookQ它不能象线E特定Hook一样用?/div>
WH_JOURNALPLAYBACK Hookq回时|q个值告诉系l在处理来自回放Hook当前消息之前需要等待多长时_毫秒Q。这׃Hook可以控制实时事g的回放?/div>
WH_JOURNALPLAYBACK是system-wide local hooksQ它們不會被注射CQ何行E位址I間?/div>
7、WH_JOURNALRECORD Hook
WH_JOURNALRECORD Hook用来监视和记录输入事件。典型的Q可以用这个Hook记录q箋的鼠标和键盘事gQ然后通过使用WH_JOURNALPLAYBACK Hook来回放?/div>
WH_JOURNALRECORD Hook是全局HookQ它不能象线E特定Hook一样用?/div>
WH_JOURNALRECORD是system-wide local hooksQ它們不會被注射CQ何行E位址I間?/div>
8、WH_KEYBOARD Hook
在应用程序中QWH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息Q这些消息通过GetMessage or PeekMessage functionq回。可以用这个Hook来监视输入到消息队列中的键盘消息?/div>
9、WH_KEYBOARD_LL Hook
WH_KEYBOARD_LL Hook监视输入到线E消息队列中的键盘消息?/div>
10、WH_MOUSE Hook
WH_MOUSE Hook监视从GetMessage 或?PeekMessage 函数q回的鼠标消息。用这个Hook监视输入到消息队列中的鼠标消息?/div>
11、WH_MOUSE_LL Hook
WH_MOUSE_LL Hook监视输入到线E消息队列中的鼠标消息?/div>
12、WH_MSGFILTER ?WH_SYSMSGFILTER Hooks
WH_MSGFILTER ?WH_SYSMSGFILTER Hooks使我们可以监视菜单,滚动条,消息框,对话框消息ƈ且发现用户用ALT+TAB or ALT+ESC l合键切换窗口。WH_MSGFILTER Hook只能监视传递到菜单Q滚动条Q消息框的消息,以及传递到通过安装了Hook子程的应用程序徏立的对话框的消息。WH_SYSMSGFILTER Hook监视所有应用程序消息?/div>
WH_MSGFILTER ?WH_SYSMSGFILTER Hooks使我们可以在模式循环期间qo消息Q这{h于在L息@环中qo消息?/div>
通过调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。通过使用q个函数Q应用程序能够在模式循环期间使用相同的代码去qo消息Q如同在L息@环里一栗?/div>
13、WH_SHELL Hook
外壳应用E序可以使用WH_SHELL HookL攉要的通知。当外壳应用E序是激zȝq且当顶层窗口徏立或者销毁时Q系l调用WH_SHELL Hook子程?/div>
WH_SHELL 共有Q钟情況Q?/div>
1. 只要有个top-level、unowned H口被生、v作用、或是被摧毁Q?/div>
2. 当Taskbar需要重L个按钮;
3. 当系l需要显C关于Taskbar的一个程序的最化形式Q?/div>
4. 当目前的键盘布局状态改变;
5. 当用者按Ctrl+EscL行Task ManagerQ或相同U别的程序)?/div>
按照惯例Q外壛_用程序都不接收WH_SHELL消息。所以,在应用程序能够接收WH_SHELL消息之前Q应用程序必调用SystemParametersInfo function注册它自己?/div>

伊峰 2006-09-29 10:45 发表评论
]]>Linux下Y件的安装与卸?/title><link>http://www.aygfsteel.com/yifeng661/articles/71602.html</link><dc:creator>伊峰</dc:creator><author>伊峰</author><pubDate>Sun, 24 Sep 2006 13:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/yifeng661/articles/71602.html</guid><wfw:comment>http://www.aygfsteel.com/yifeng661/comments/71602.html</wfw:comment><comments>http://www.aygfsteel.com/yifeng661/articles/71602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yifeng661/comments/commentRss/71602.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yifeng661/services/trackbacks/71602.html</trackback:ping><description><![CDATA[在Windows 下安装Y件时Q只需q行软g的安装程序(setup、install{)或者用zip{解压羃软g解开卛_安装Q运行反安装E序Quninstall?unware、“卸载”等Q就能将软g清除q净Q完全图形化的操作界面,单到只要用鼠标一直点几Z下一步”就可以了。而Linux好象׃一样了Q很?的初学者都抱怨在Linux下安装和卸蝲软g非常地困难,没有像用Windows旉么直观。其实在Linux下安装和卸蝲软g也非常简单,同样也有?装向导或解压安装的方式,不相同的只不q是除了二进制Ş式的软g分发外,q有许许多多以源代码形式分发的Y件包Q下面就来详l地讲一讲这些Y件的安装与卸 载: <br /><br />一、二q制分发软g包的安装与卸?<br />Linux软g的二q制分发是指事先已经~译好二q制形式的Y件包的发布Ş式,其优Ҏ安装使用ҎQ缺点则是缺乏灵zL,如果该Y件包是ؓ特定的硬?操作pȝq_~译的,那它׃能在另外的^台或环境下正执行?<br />1?.rpm形式的二q制软g?<br />安装Qrpm -ivh *.rpm <br />卸蝲Qrpm -e packgename <br />?明:RPMQRedHat Packge ManagerQ是RedHat公司出的软g包管理器Q用它可以很容易地对rpm形式的Y件包q行安装、升U、卸载、验证、查询等操作Q安装简单,而卸 载时也可以将软g安装在多处目录中的文件删除干净Q因此推荐初学者尽可能使用rpm形式的Y件包。rpm的参C-i是安装,-v是校验,-h是用散列W?昄安装q度Q?.rpm是Y件包的文件名Q这里的*.rpmҎ*.src.rpm以外的以rpm为后~的文ӞQ参?e是删除Y件包Q?packgename是Y件包名,与Y件包的文件名有所区别Q它往往是文件名中位于版本号前面的字W串Q例如apache-3.1.12- i386.rpm和apache-devel-3.1.12-i386.rpm是Y件包文g名,它们的Y件包名称分别是apache和apache- devel。更多的rpm参数误行参看手册页Qman rpm?<br />如果你不喜欢在字W界面下安装或卸载这些Y件包Q完全可以在X-Window下用图形界面的软g包管理程序,如glint、xrpmq样的图形接口,或者是KDE的kpackge{,q样对Y件包的安装、升U、卸载、验证和查询可以通过点击鼠标来轻村֮成?<br />2?.tar.gz/*.tgz?.bz2形式的二q制软g?<br />安装Qtar zxvf *.tar.gz ?tar yxvf *.bz2 <br />卸蝲Q手动删?<br />?明:*.tar.gz/*.bz2形式的二q制软g包是用tar工具来打包、用gzip/bzip2压羃的,安装时直接解包即可。对于解压后只有单一目录 的YӞ卸蝲时用命o“rm -rf 软g目录名”;如果解压后文件分散在多处目录中,则必M一手动删除Q稍ȝQ,想知道解压时向系l中安装了哪些文Ӟ可以用命令“tar ztvf *.tar.gz?“tar ytvf *.bz2”获取清单。tar的参数z是调用gzip解压Qx是解包,v是校验,f是显C结果,y是调用bzip2解压Qt是列出包的文件清单。更多的?数请参看手册:man tar?<br />如果你更喜欢囑Ş界面的操作,可以在X-Window下用KDE的ArK压羃案理工具?<br />3、提供安装程序的软g?<br />q?cY件包已经提供了安装脚本或二进制的安装向导E序Qsetup、install、install.sh{)Q只需q行它就可以完成软g的安装;而卸载时 也相应地提供了反安装的脚本或E序。例如SUN公司的StarOffice办公软g套g׃用名为setup的安装程序,而且在Y件安装后提供反安装的?能,目前q种cd的Y件包q比较少Q因其安装与卸蝲的方式与Windows软g一P所以就无需多讲了?<br /><br />二、源代码分发软g包的安装与卸?<br />Linux软g的源代码分发是指提供了该软g所有程序源代码的发布Ş式,需要用戯q译成可执行的二进制代码ƈq行安装Q其优点是配|灵z,可以随意L或保留某些功?模块Q适应多种g/操作pȝq_及编译环境,~点是难度较大,一般不适合初学者用?<br />1?.src.rpm形式的源代码软g?<br />安装Qrpm -rebuild *.src.rpm <br />cd /usr/src/dist/RPMS <br />rpm -ivh *.rpm <br />卸蝲Qrpm -e packgename <br />说明Qrpm --rebuild *.src.rpm命o源代码~译q在/usr/src/dist/RPMS下生成二q制的rpm包,然后再安装该二进制包卛_。packgename如前所q?<br />2?.tar.gz/*.tgz?.bz2形式的源代码软g?<br />安装Qtar zxvf *.tar.gz ?tar yxvf *.bz2 先解?<br />然后q入解压后的目录Q?<br />./configure 配置 <br />make ~译 <br />make install 安装 <br />卸蝲Qmake uninstall ?手动删除 <br />?明:解压后先阅读说明文gQ可以了解安装有哪些需求,有必要时q需改动~译配置。有些Y件包的源代码在编译安装后可以用make install命o来进行卸载,如果不提供此功能Q则软g的卸载必L动删除。由于Y件可能将文g分散地安装在pȝ的多个目录中Q往往很难把它删除q净Q?那你应该在编译前q行配置Q指定Y件将要安装到目标路径Q?/configure --prefix=目录名,q样可以使用“rm -rf 软g目录名”命令来q行q净d的卸载。与其它安装方式相比Q需要用戯q译安装是最隄Q它适合于用Linux已有一定经验的人,一般不推荐初学?使用?<br /><br />关于Linux下Y件的安装与卸载lanche已经讲了q么多,但可能还会有人问怎么知道一个tar.gz/bz2包是二进?文g包呢q是源代码包Q如果你用过压羃工具׃明白Q压~包未必是软gQ它也可能是备䆾的许多图片,也可能是打包在一L普通资料,要分辨它到底是什?最好的办法是查看包里的文件清单,使用命otar ztvf *.tar.gz / tar ytvf *.bz2或者在X-Window下用图形化的ArK压羃案理工具都可以,源代码包里的文g往往会含有种U源代码文gQ头文g*.h、c代码源文?*.c、C++代码源文?.cc/*.cpp{;而二q制包里的文件则会有可执行文Ӟ与Y件同名的往往是主执行文gQ,标志是其所在\径含有名?bin的目录(仅有数例外Q。原来这么简单呀Q还不快点自p试! <br /><br /><br /><span style="COLOR: red">W二?/span>Q?<br /><br />如何安装Linux的Y?<br /><br />在windows 下安装Y件大安觉得很容易,只要双击setup或是install的图标,然后跟着向导一步一步的按提C做可以了Q但是在linux下安装Y件就不像 windows下那样容易了Q有时你扑ֈ的是没有~译q的软g源码Q那更加的ȝ了,q里׃l一下如何安装linux的Y件啦Q?<br />linux下的软g一般都是经q压~的Q主要的格式有这几种Qrpm、tar、tar.gz、tgz{。所以首先拿到Y件后W一件事是解压~?<br />一?在xwindow下以rpm格式的Y件安装比较容易,只要在把鼠标Ud文g上单d键,在弹出的菜单里会有专门的三项Q只有在右键单击rpm文g才会?玎ͼshow infoQupgrade和installQ这三项的意思大安很清楚了Q我׃多说了。rpm格式说了Q接着是tarQtar.gzQtgz{,?xwindow下双击这些格式的文g׃自动解压~的Q是解压~而不是像rpm那样有install选项的,install文g会在你解压羃后才出现Q不 q这里我要先说一下,在你双击install前徏议先好好看一下readmeQ因Z所要安装这些Y件可能是没有~译的,所以看一下会比较好?<br />二?说完了xwindow下的安装和解压羃Q接着说在文本模式下如何解压羃和安装,q有~译源码了。首先说rpm的,以rootw䆾登陆后(用其他的w䆾登陆 也可以但有些软g׃能被安装Q键入rpm Qi你所要解压羃的文Ӟ扩展名(当然是rpmQ也不是很难吧,q里我要说的是“-i”意思是installQ如果你惌卸蝲或是要执行其他的指o打 rpm Q-helpQ看电脑l你的提C吧Qؓ了照N些E文不太好的h我这里就写几个常用的参数Q-eQ卸载相关的应用E序Q-UQ注意是大写Q:升软g包, QpqlQ列出rpm软g包的相关信息Q-qfQ查找指定文件属于哪个Y件包。至于那些其他格式的软g则可以用gunzipQgzipQtar?unzip{指令来解压~,然后再运行install。通过解包后会得到一些文Ӟ然后q入刚才解压~后文g目录用“ls QF Qcolor”指令看一下所得到的文Ӟ一般有两种情况Q第一U是文g为已l编译好的程序(无须再编译了Q用上面的察看文件命令会以带“*”标记的亮绿?昄Q第二种则是需要由你自q译的源代码。得到的是源代码的话Q就需要我们自q译来得到可运行的E序。编译源代码听到~译是不是就吓到你了呢,其实?I了也就加上几句话而已Q对初学者是有些困难想用好的操作pȝ需要学习嘛Q等你学会了在MM前露一手的时候想惛_……,在编译之前先要认真的阅读一?readme文Q老鸟们就不需要了吧,{你阅读完了以后执?<br />./configure <br />make <br />make installQ只有Rootw䆾才能执行此命令)Q编译完成之后便会在当前目录或src子目录下得到软g的可执行E序?<br />介绍完了Q大家是不是觉的RPM的Y件安装比较容易一点呢Q但我个人意见初学者还是多选择RPM格式以外的YӞ因ؓ通过~译软g的源码可以ؓ你以后编译内核打下一定的基础。(上v 张国荣) <br /><br /><br /><span style="COLOR: red">W三?/span>Q?<br /><br />L安装、卸载Linux软g <br /><br />Linux 软g的安装和卸蝲一直是困扰许多新用LN。在Windows中,我们可以使用软g自带的安装卸载程序或在控刉板中的“添?删除E序”来实现。与?相类|在Linux下有一个功能强大的软g安装卸蝲工具Q名为RPM。它可以用来建立、安装、查询、更新、卸载Y件。该工具是在命o行下使用的。在 Shell的提C符后输入rpmQ就可获得该命o的帮助信息?<br /><br />软g的安?<br />Linux下Y件的安装主要有两U不同的形式。第一U安装文件名为xxx.tar.gzQ另一U安装文件名为xxx.i386.rpm。以W一U方式发行的软g多ؓ以源码Ş式发送的Q第二种方式则是直接以二q制形式发送的?<br /><br />对于W一U,安装Ҏ如下Q?<br /><br />1.首先Q将安装文g拯至你的目录中。例如,如果你是以rootw䆾d上的Q就Y件拷贝至/root中?<br /><br />#cp xxx.tar.gz /root <br /><br />2.׃该文件是被压~ƈ打包?应对其解压羃。命令ؓQ?<br /><br />#tar xvzf filename.tar.gz <br /><br />3.执行该命令后Q安装文件按路径Q解压羃在当前目录下。用ls命o可以看到解压~后的文件。通常在解压羃后生的文g中,有“Install”的文g。该文g为纯文本文gQ详l讲qC该Y件包的安装方法?<br /><br />4.执行解压~后产生的一个名为configure的可执行脚本E序。它是用于检查系l是否有~译时所需的库Q以及库的版本是否满编译的需要等安装所需要的pȝ信息。ؓ随后的编译工作做准备。命令ؓQ?./configure?<br /><br />5.查通过后,生成用于编译的MakeFile文g。此Ӟ可以开始进行编译了。编译的q程视Y件的规模和计机性能的不同,所耗费的时间也不同。命令ؓQ?make?<br /><br />6.成功~译后,键入如下的命令开始安装: <br /><br />#make install <br /><br />7.安装完毕Q应清除~译q程中生的临时文g和配|过E中产生的文件。键入如下命令: <br /><br />#make clean <br />#make distclean <br /><br />xQY件的安装l束?<br /><br />对于W二U,其安装方法要单得多?<br /><br />同第一U方式一P安装文件拷贝至你的目录中。然后用rpm来安装该文g。命令如下: <br /><br />#rpm -i filename.i386.rpm <br /><br />rpm自动将安装文g解包QƈY件安装到~省的目录下。ƈY件的安装信息注册到rpm的数据库中。参数i的作用是使rpmq入安装模式?<br /><br />软g的卸?<br />1.软g的卸载主要是使用rpm来进行的。卸载Y仉先要知道软g包在pȝ中注册的名称。键入命令: <br /><br />#rpm -q -a <br /><br />卛_查询到当前系l中安装的所有的软g包?<br /><br />2.定了要卸蝲的Y件的名称Q就可以开始实际卸载该软g了。键入如下命令即可卸载YӞ <br /><br />#rpm -e [package name] <br /><br />参数e的作用是使rpmq入卸蝲模式。对名ؓ[package name]的Y件包q行卸蝲。由于系l中各个软g包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm给予提Cƈ停止卸蝲。你可以使用如下的命令来忽略依赖关系Q直接开始卸载: <br /><br />#rpm -e [package name] -nodeps <br /><br />忽略依赖关系的卸载可能会Dpȝ中其它的一些Y件无法用?<br /><br /><span style="COLOR: red">补充</span>Q?<br /><br />如果是以.binl尾的二q制软gQ可以用以下Ҏ安装Q以so-6_0-beta-bin-linux-zh-Tw1.binZQ: <br /><br />在so-6_0-beta-bin-linux-zh-Tw1.bin所在文件夹下运行模拟终?<br />输入Q?<br />./so-6_0-beta-bin-linux-zh-Tw1.bin <br />q按回RQ?<br /><br />当然也可以输入: <br />./so 再用[Tab]键补?<br /><br />Q?/表示当前目录Q如果终端不在该软g所在目录下打开Q则在Y件名前尚需输入相应的\径。) <br /><br />如果在图形界面,也可直接单击Q或双击Q视具体的鼠标设|而定Q进行安装!<br /><img src ="http://www.aygfsteel.com/yifeng661/aggbug/71602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yifeng661/" target="_blank">伊峰</a> 2006-09-24 21:57 <a href="http://www.aygfsteel.com/yifeng661/articles/71602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux基本操作知识http://www.aygfsteel.com/yifeng661/articles/71601.html伊峰伊峰Sun, 24 Sep 2006 13:53:00 GMThttp://www.aygfsteel.com/yifeng661/articles/71601.htmlhttp://www.aygfsteel.com/yifeng661/comments/71601.htmlhttp://www.aygfsteel.com/yifeng661/articles/71601.html#Feedback0http://www.aygfsteel.com/yifeng661/comments/commentRss/71601.htmlhttp://www.aygfsteel.com/yifeng661/services/trackbacks/71601.html 3.1 d和退出系l?/strong>

  1. 启动pȝ
  通常LILO是安装在MBR上的Q计机启动后,MBR上的E序被执行,出C个不是很漂亮的图形:左边是一个小U帽囑փQ右边列Z可以启动的操作系l,你可以用键盘箭头切换。刚安装好后默认值是LinuxQ也是你不选择Q一会儿自己启动Linux?
  如果你想默认的选择是Windows的话Q那你可以在启动Linux后,用vi修改/etc目录下的lilo.conf文gQ加上default=windowsQ然后再执行/sbin/lilo重新生成LILO?

  2. 用户d
  Linux是一个真正意义上的多用户操作pȝQ用戯使用该系l,首先必须dQ用完pȝ后,必须退出。用L录系l时Qؓ了ɾpȝ能够识别该用P必须输入用户名和密码Q经pȝ验证无误后才可以dpȝ使用?
  Linux下有两种用户Q?
  1Q?root用户Q超U权限者,pȝ的拥有者,在Linuxpȝ中有且只有一个root用户Q它可以在系l中M操作。在pȝ安装时所讑֮的密码就是root用户的密码?
  2Q?普通用PLinuxpȝ可以创徏许多普通用Pqؓ其指定相应的权限Q其有限地使用Linuxpȝ?
  关于用户的管理,我们在后面详细说明?
  用户d分两步进行:
  1Q?输入用户的登录名Q系l根据该d名来识别用户Q?
  2Q?输入用户的口令,该口令是用户自己选择的一个字W串Q对其他用户完全保密Q是dpȝ时识别用L唯一ҎQ因此每一个用户都应该保护好自q口oQ?
  pȝ在徏立之初,仅有root用户Q其它的用户则是由root用户创徏的。由于root用户的权限太大了Q所以如果root用户误操作将可能造成很大的损失。所以徏议系l管理员已新Z个用P只有需要做pȝl护、管理Q务时才以root用户d?
  下面是一个登录实例:Q其中黑体字入)
  Red Hat Linux release 7.1 (Seawolf)
  Kernerl 2.4.2-2 on an i686
  Home login:root
  Password:
  在上面的例子中,我们发现在Password后面是空的,其实q不是不输入密码Q而是在输入时QLinuxpȝ不会把它昄出来Q这L来保护密码!

   如果d成功的话Q我们将获得ShellQShell是用来与用户交互的程序,它就象DOS中的COMMAND.COMQ不q在Linux下可以有多种 Shell供选择Q如bash、csh、ksh{)提示W,如果以root用户d的话Q那么获得的提示W是?”,否则是?”?
  提示Q如果当时在安装时设|ؓ一启动p入图形界面的话,那系l启动后Q用L录界面将是图形化的,有点象WindowsQ而且当你输入正确的用户名与密码,׃直接q入X Window。这个设|是可以修改的:
  ?etc目录下有一个inittab文gQ其中有一行配|:
  id:3:default
  其中Q数?是代表一启动q入字符l端Q如果改?则代表一启动q入X Window?

  3. 修改口o
  Z更好C护用户帐L安全QLinux允许用户在登录之后随时用passwd命o修改自己的口令。修改口令需要经历:
  1Q?输入原来的口令,如果口o输错Q将中止E序Q无法修改口令;
  2Q?输入新的口oQ?
  3Q?提示重复一遍新的口令,如果两次输入的口令相dQ则口o修改成功?
  需要注意的是,Red Hat Linux 7.1Z更好C护口令,如果你输入的新口令过于简单,它将会拒l修攏V下面就是一个修改口令的实例Q(其中黑体字ؓ输入Q?
  $ passwd
  Changing password for user1
  (current) UNIX password: ß 在些输入原来的密?
  New UNIX password: ß 输入新的密码
  Retype new UNIX password: ß 再输入一遍新的密?
  Passwd:all authentication tokens updated successfully ß 修改成功Q?
  注意Q在q里输入的口令同样不会显C出来?
  而如果是root用户修改口oQ则不需要输入老密码!也就是说Q它可以修改M用户的口令?

  4. 退出登?
  不论你是root用户q是普通用P只需单地执行exit命o可以退出登录?

  5. 关闭机器
  在Linuxpȝ中,普通用h无权关闭pȝ的!只有root用户才能够关闭它。当然如果你是按x按钮则别当别论。我们可以通过以下几种Ҏ实现Q?
  1Q?按下CTRL+ALT+DELl合键,q样pȝ重新启动!
  2Q?执行reboot命oQ这Ll也重新启动!
  3Q?执行shutdown -h now命oQ这Ll将关闭计算机!
  4Q?执行halt命oQ可以关闭计机?
  注意千万不要随意采用关机、重启动键等方式关闭pȝQ那样会DLinux文gpȝ遭受破坏Q?

  6. 虚拟控制?
  Linux是真正的多用h作系l,可以同时接受多个用户的远E和本地dQ也允许同一个用户多ơ登录。Linux为本地用P也就是做在计机面前的用P提供了虚拟控制台讉K方式Q允许用户在同一旉从不同的控制台进行多ơ登录?
  虚拟控制台的选择可以通过按ALT键加上F1-F6六个功能键来实现。例如,用户d后,按一下ALT+F2l合键,用户又可以看到“login:”提C符Q这其实是W二个虚拟控制台Q而这时再按下ALT+F1l合键,用户则又可以回到W一个虚拟控制台?
   大家可以通过使用虚拟控制台来感受Linuxpȝ多用LҎ。例如用户可以在某一虚拟控制Cq行的工作尚未结束时Q就可以切换到另一个虚拟控制台?开始另一工作。例如在开发Y件时Q可以在一个控制台上编辑程序,在另一个控制台上进行编译,在第三个控制C查阅信息?br />
  3.2 文g与目录操?/strong>
  与其它操作系l一P在Linuxpȝ下用L数据和程序也是以文g的Ş式保存的。所以在使用Linux的过E中Q是l常要对文g与目录进行操作的。现在我们就以一个Window用户的立场来学习一下Linux下的文g与目录操作方法?

  1. 文g名与文gcd
  文g名是一个文件的标识。从q个角度来说Q文件名的规则与Windows 9x下的是基本上相同的。它同样是由字母、数字、下划线、圆点组成,最大的长度?55个字W?
   与Windows 9x一PLinuxpȝ中也有普通文件和目录文gQ不q目录文件在Window中被UCؓ目录是了。而在Linuxpȝ中有一U特D的文gQ那是?备文件。在Linuxpȝ中,把每一个I/O讄都映成Z个文Ӟ可以象普通文件一样处理,q就使得文g与设备的操作可能统一。从用户的用h_ 对I/O讑֤的用和一般文件的使用几乎一Pq样可以不必了解I/O讑֤的细节?

  2. 目录l构
  与Windows下一P在Linux中也是通过目录来组l文件的。但不同的是Q在Linux下只有一个根目录Q而不象Windows那样一个分Z个根目录。如果有多个分区的话Q就需要将其它分区mount到根目录上来用?
  大家回忆一下当时ؓLinux分区Ӟ有一个选项要填Q那是Mount PointQ我们将其中一个写成了?”,也就是根目录Q这点与Windows相反Q一个是“\”,一个是?”,真是天生冤家Q。其它脑蚩赡?home?usr?
  安装完系l后Q你会发?home?usr是根目录下面的home、usr目录Q对了,整个分区q于该目录了?
  安装完Linux后,有许许多多的目录Q下面我们就说明一些重要的目录Q?
  /binQ存攄一癑֤个Linux下常用的命o、工?
  /devQ存攄Linux下所有的讑֤文gQ?br />
  /homeQ用户主目录Q每Z个用P׃在这里新Z个与用户同名的目录,l该用户一个自qI间
  /lost+foundQ顾名思义Q一些丢q文g可能可以在这里找?
   /mntQ外部设备的挂接点,通常用cdrom与floppy两个子目录!它的存在化了光盘与Y盘的使用。你只需在塞入光盘后Q运行:mount /mnt/cdromQ就可以光盘上的内容Mount?mnt/cdrom上,你就可以讉K了。不q你使用完成后,应该d该目录,q执?umount /mnt/cdrom。同LQY盘就是mount /mnt/floppy和umount /mnt/floppy了?
  /procQ这其实是一个假的目录,通过q里你可以访问到内存里的内容?
  /sbinQ这里存攄pȝU的命o与工?
  /usrQ通常用来安装各种软g的地?
  /usr/X11R6 X Window目录
  /usr/bin?usr/sbin 一些后安装的命令与工具
  /usr/include?usr/lib?usr/share 则是存放一些共享链接库
  /usr/local 常用来安装新软g
  /usr/src Linux源程?
  /bootQLinux是从这里启动的
  /etcQ这里存攑֜Linux大部分的配置文g
  /libQ静态链接库
  /rootQroot用户的主目录Q这是Ҏ之一Q?
  /varQ通常用来存放一些变化中的东西!
  /var/logQ存攄l日?
  /var/spoolQ存放一些邮件、新闅R打印队列等
  另外Q要说明的是Q在Linux下“当前目录”、“\径”等概念与Windows下是一L?
  3. 昄文g内容
  使用qDOS命o的h都应该知道,我们可以使用type命o来查看一个文件的内容。在Linux下有五个相关的命令,功能各有千秋Q不q它们都象type命o一P只能用来查看文本文g?
  1Q?cat命o
  cat命o是最象type命o的,使用的方法很单:“cat 文g名”。不q比type命o更强大的是,它可以同时查看多个文Ӟ“cat 文g名一 文g名二”?
  2Q?more命o
   如果文本文g比较长,一屏无法显C完Q那么用cat命o可能无法看清。这里我们可以简单地使用more来代替cat命o卛_。其效果与type 文g?pcM。用more命o一ơ显CZ屏文本,昄满后Q停下来Qƈ提示出已昄全部内容的百分比Q按I格键就可以看到下一屏?
  3Q?less命o
  less命o的功能几乎和more命o一P也是按页昄文gQ不同之处在于less命o在显C文件时允许用户既可以向前又可以向后阅文g?
  Ø 向前:按b键;
  Ø 向后:按p键;
  Ø 指定位置Q输入百分比
  Ø 退出:q
  我经怋用more和lessQ几乎不使用cat查看文g?
  4Q?head命o
  通过head命o可以仅查看某文g的前几行Q格式ؓQ?
  head 行数 文g?
  如果未指定行敎ͼ则用默认?0?
  5Q?tail命o
  与head命o相对应的Q我们可以用tail命o来查看文件尾部的内容。通常用来实时监测某个文g是否被修改,通常用来观察日志。如Q?
  tail -f maillog

  4. ~辑文g
  在Red Hat Linux 7中有许多文字~辑工具Q其中最常用的应该是viQ这是一个广泛应用于所有UNIXpȝ的编辑器。它的用有些特别:
  首先Q可以用命令“vi 文g名”打开一个文件?
  刚启动的时候,vi处于命o状态,不能够输入Q何字W。在q个状态下Q可以用方向键q行UdQ而需要输入内ҎQ你需要输入“i”或“a”命令进入编辑状态。编辑完成后Q你需要按下“ESC”键回到命o状态?
  在命令状态下Q你可以输入?q!”不存盘退出,输入?wq”存盘退出?

  5. 文g的复制、删除与Ud
  大家都早已熟知在DOS下我们可以用copy、del、move命o来实现文件的复制、删除与Ud。下面我们说说如何在Linuxpȝ中做以上操作?
  1Q?cp命oQ文?目录复制命o
  它的语法格式为:cp [选项] 源文件或目录 目标文g或目?
  常用的选项有:
  Ø a 该选项常在复制目录时用,它保留链接、文件属性,q归地复制目录,pDOS中的xcopy /s一?
  Ø f 如果目标文g或目录已存在Q就覆盖它,q且不做提示

  Ø i 与f选项正好相反Q它在覆盖时Q会让用户回{“Y”来认
  Ø p 使用该选项Q复制文件时保留修Ҏ间和讉K权限
  Ø r 若给出的源是一个目录,那么cp递归复制该目录下所有的子目录和文gQ不q这要求目标也是一个目录名
  另外Q大家要注意的是Q如果源是文件名Q目标是目录名的话,那么使用cp命o可以指定多个源文件名。如Q?
  $ cp a.txt b.txt /home/user1
  该命令将把a.txt和b.txt文g复制?home/usr1目录中?
  2Q?rm命oQ文?目录删除命o
  它的语法格式为:rm [选项] 文g ?
  常用的选项有:
  Ø f 在删除过E中不给M指示Q直接删?
  Ø r 指示rm参C列出的全部目录和子目录都递归地删?
  Ø i 交互式的删除Q每个文件在删除旉l出提示
  使用rm命o时一定要心Q特别是以root用户dӞ我就看到q一个朋友在使用rm命o删除/home/tmp目录时将命o“rm -rf /home/tmp”误输成?“rm -rf / home/tmp”,l果{他走回电脑面前Q整个系l都被删除了Q?
  3Q?mv命oQ文?目录Ud命o
  它的语法格式为:mv [选项] 源文件或目录 目标文g或目?
  常用的选项有:
  Ø f 如果操作要覆盖某已有的目标文件时不给M指示
  Ø i 交互式的操作Q如果操作要覆盖某已有的目标文g时会询问用户是否覆盖
  mv命o的执行效果与参数cd的不同而不同!
  W一参数Q源Q?W二个参敎ͼ目标Q?l果
  文g?文g?源文g名改为目标文件名
  文g?目录?文件移动到目标目录
  目录?目录?目标目录已存在:源目录移动到目标目录
  目标目录不存在:改名
  目录?文g?出错

  6. 目录相关操作
  1Q?创徏新目录:mkdirQ它的用与DOS下的md相同Qmkdir 目录名;
  2Q?删除I目录:rmdirQ它的用与DOS下的rd相同Qrmdir 目录名;
   3Q?改变目录QcdQ它的用与DOS下的cd命o基本相同Q唯一一个不同的是,不管目录名是什么,cd与目录名之间必须有空|也就是:“cd/”?“cd..”、“cd.”都是非法的Q而应该输入:“cd /”、“cd ..”、“cd .”,如果直接输入命o“cd”,而不加Q何参敎ͼ回到这个用Lȝ录?
  4Q?昄当前目录Qpwd
  5Q?列目录命令:lsQ相当于DOS下的dir
  它的语法为:ls [选项] [目录或文件]
  常用的选项有:
  Ø a 昄指定目录下所有的子目录与文gQ包括隐藏文Ӟ
  Ø c 按文件的修改旉排序
  Ø l 采用长格式来昄文g的详l信息,每个文g一行信息,其内容ؓQ文件类型与权限 链接?文g属主 文g属组 文g大小 最q修Ҏ?文g?

  7. 文g与目录的权限操作
  在Linuxpȝ中,每一个文件和目录都有相应的访问许可权限,我们可以用它来确定谁可以通过何种方式Ҏ件和目录q行讉K和操作。文件或目录的访问权限分为可诅R可写和可执行三U,分别以rQwQx表示Q其含义为:
  r w x
  文g 可读 可写 可执?
  目录 可列出目?可在目录中做写操?可以讉K该目?
  在文件被创徏Ӟ文g所有者可以对该文件的权限q行讄?
  对于一个文件来_可以用户分成三U,q对其分别赋予不同的权限Q?
  1Q?文g所有?
  2Q?与文件所有者同l用?
  3Q?其它用户
  每一个文件或目录的访问权限都有三l,每组用三位表C,如:
  d rwx r-x r--
  W一部分Q这里的d代表目录Q其它的有:- 代表普通文?c 代表字符讑֤文gQ?
  W二部分Q文件所有者的权限字,q里为r w x表示可读、可写、可执行 (目录的可执行指的可以q入目录)Q?
  W三部分Q与文g所有者同l的用户的权限字Q这里ؓr - x表示可读、不可写、可执行。由于同l用户之间交较多,让他看看文gQ别乱改p了嘛?
  W四部分Q其它用L权限字,q里? - -Q当然给我无关的人嘛Q我的文件当然不但不l你写,也不让你诅R?
  1Q?文g/目录权限讄命oQchmod
  q是Linuxpȝ理员最常用到的命o之一Q它用于改变文g或目录的讉K权限。该命o有两U用法:
  Ø 用包含字母和操作W表辑ּ的文字设定法
  其语法格式ؓQchmod [who] [opt] [mode] 文g/目录?
  其中who表示对象Q是以下字母中的一个或l合Q?
  uQ表C文件所有?
  gQ表C同l用?
  oQ表C其它用?
  aQ表C所有用?
  opt则是代表操作Q可以ؓQ?
  +Q添加某个权?
  -Q取消某个权?
  =Q赋予给定的权限Qƈ取消原有的权?
  而mode则代表权限:
  rQ可?
  wQ可?
  xQ可执行
  例如Qؓ同组用户增加Ҏ件a.txt的读写权限:
  chmod g+rw a.txt
  Ø 用数字设定法
  而数字设定法则更为简单:chmod [mode] 文g?
  关键是mode的取|一开始许多初学者会被搞p涂Q其实很单,我们rwx看成二进制数Q如果有则有1表示Q没有则?表示Q那么rwx r-x r--则可以表C成为:
  111 101 100
  再将其每三位转换成ؓ一个十q制敎ͼ是754?
  例如Q我们想让a.txtq个文g的权限ؓQ?
  自己 同组用户 其他用户
  可读 ???
  可写 ??
  可执?
  那么Q我们先Ҏ上表得到权限串ؓQrw-rw-r--Q那么{换成二进制数是110 110 100Q再每三位{换成Z个十q制敎ͼ得?64Q因此我们执行命令:
  chmod 664 a.txt
  2Q?改变文g的属d令:chown
  语法格式很简单:chown [选项] 用户?文g/目录?
  其中最常用的选项是“R”,加上q个参数Q可以将整个目录里的所有子目录和文件的属主都改变成指定用户?
  3Q?改变文g属组命oQchgrp
  该命令也很简单:chgrp l名 文g?
  3.3 用户理

  用户理Q主要的工作是建立一个合法的用户帐户、设|和理用户的密码、修改用户帐L属性以及在必要时删除已l废弃的用户帐号?

  1. 增加一个新用户
  在Linuxpȝ中,只有root用户才能够创Z个新用户Q如下的命o新Z个登录名user1的用戗?br />
  # useradd user1
  但是Q这个用戯不能够登录,因ؓq没l它讄初始密码Q而没有密码的用户是不能够dpȝ的。在默认情况下,会?home目录下新Z个与用户名相同的用户ȝ录。如果需要另外指定用户主目录的话Q那么可以用如下命令:
  # useradd -d /home/xf user1
  同时Q该用户d时将获得一个ShellE序Q?bin/bashQ而假如你不想让这个用L录,也就可以指定该用LShellE序为:/bin/falseQ这栯用户即dQ也不能够执行Linux下的命oQ?
  # useradd -s /bin/false user1
  在Linux中,新增一个用L同时会创Z个新l,q个l与该用户同名,而这个用户就是该l的成员。如果你惌新的用户归属于一个已l存在的l,则可以用如下命令:
  # useradd -g user user1
  q样该用户就属于userl的一员了。而如果只是想让其再属于一个组Q那么应该用:
  # useradd -G user user1
  完成了这一操作后,你还应该使用passwd命o为其讄一个初始密码?

  2. 删除一个用?
  删除用户Q只需使用一个简单的命o“userdel 用户名”即可。不q最好将它留在系l上的文件也删除掉,你可以用“userdel -r 用户名”来实现q一目的?

  3. 修改用户属?
  在前面我们看C在新Z个用L时候如何指定它的用户主目录Q如何指定它的ShellQ如何设|它所属的l…等{。在Linux中提供了一个命令来实现Q?
  usermod -gl名 -G l名 -d 用户ȝ?-s 用户Shell
  q有一U直接的ҎQ那是修改/etc/passwd文gQ在q个文g中每个用户占用一行,它的内容为:
  用户?密码:用户ID:lID:用户全名:用户ȝ?用户Shell
  不过值得注意的是Q密码这一w常是用一?号代替的Q你是看不到的?

  4. 增加一个组
  q记得Linux的文件可以ؓ同组的h、非同组的h讄不同的访问权限吗Q我们可以根据自q需要创建用LQ?
  groupadd l名

  5. 删除一个组
  同样的,我们有时会需要删除一个组Q它的命令就是groupdel l名?

  6. 修改l成?
  如果我们需要将一个用户加入一个组Q只需~辑/etc/group文gQ将用户名写到组名的后面。例如将newuser用户加入到softdevelopl,只需扑ֈsoftdevelopq一行:
  softdevelop:x:506:user1,user2
  然后在后面加上newuserQŞ成:
  softdevelop:x:506:user1,user2,newuser
  另外Q在Red Hat Linux中还提供一个图形化的用L理工PuserconfQ通过它可以更直接地进行用L理?
  3.4 q程理

  Linux是一个多用户多Q务的操作pȝ。多用户是指多个用户可以在同一旉使用计算机系l;多Q务是指Linux可以同时执行几个dQ它可以在还未执行完一个Q务时又执行另一Q务?
  在Linuxpȝ上所有运行的东西都可以称之ؓ一个进E。每个用户Q务、每个系l管理守护进E,都可以称之ؓq程。Linux用分时管理方法用所有的d共同分npȝ资源。下面我们就看一下如何控制这些进E?br />
  1. 启动q程
  在Linuxpȝ中有两种启动q程的方法:
  1Q?直接输入命oQ就直接启动一个进E?
  Ø 在普通情况下Q进E将在前台执行,q时我们无法再执行新的命?
  Ø 如果我们在命令之后加上一个?amp;”,那行q程会攑֜后台执行Q我们仍然可以执行新的命?
  2Q?通过at、cron、crontab命o可以像Windows中的计划d一样定时启动某个进E,具体的用方法大家可以用man 命o名来查询?

  2. 查看q程
  在Linuxpȝ中,我们可以使用ps命o来查看正在运行的q程例如Q?
  列出属于当前用户的进E:
  # ps
  PID TTY TIME CMD
  16767 pts/1 0:00 ps
  18029 pts/1 0:00 bash
  其中PID代表q程IDQTTY是该q程是由哪个控制台启动的QCMD则是命o?
  如果你想列出更详l的信息Q则可用命令:“ps -auxw”?

  3. l止q程
  一个进E在d完成之后Q将会自动完成。如果要中途中止该q程的话Q有两种ҎQ?
  1Q?对于在前台运行的E序Q直接通过l合键CTRL+C可以中止进E;
  2Q?而对于在后台q行的程序,则需要通过前面介绍的ps命o扑ֈ它的q程P然后使用“kill q程号”来l止该进E?


  3.5 盘理

  pȝ软g和应用YӞ都要以文件的形式存储在计机的磁盘空间中Q做为系l管理员应随时监视磁盘空间的使用情况。我们可以用下面两个命令来实现Q?

  1. df命o
  dfQ就是Disk FreeQ顾名思义是查磁盘上q剩下多空间等信息。下面是一个用实例:
  # df
  FileSystem 1k-blocks Used Available Use% Mounted on
  /dev/hda5 4134900 1749728 2175124 45% /
  /dev/hda6 6048320 5741092 0 100% /home
  共显CZ6列信息:
  1Q?FileSystemQ硬盘分?
  2Q?1k-blocksQ按K计算的分区大?
  3Q?UsedQ已l用的分区大小Q按K计算Q?
  4Q?AvailableQ还要用的分区大?
  5Q?Use%Q已使用的空间所占百分比
  6Q?Mounted onQ挂接点
  可以看到/home是另一个分区,现在I间已经用完了!q都时当时没有规划好Q?
  如果对与以K单位表C硬盘空_那么你可以用df -mQ这样就会以M单位?

  2. du命o
  duQ就是disk usageQ就是看一下磁盘用了多少。下面就是一个用实例:
  # pwd
  /var/log
  # du
  4 ./uucp
  776 .
  在这里,我们使用du命o列出?var/log目录所占用的磁盘空间。它l计Z该目录有一个子目录QuucpQ占用了4KQ?var/log目录下的文g则共?76K?
  该命令还有一些常用的选项Q用来完成更多的功能Q?
  Ø -a 列出当前目录下所有的文g、子目录、子目录下的文g、子目录下的子目录…的盘占用情况
  Ø -b 以字节ؓ单位表示占用的磁盘空?
  Ø -c 在最后显C出一个统计?
  3.6 软g安装

  在Red Hat Linux下,应用软g的安装包通常有两U格式:
  1Q?rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux创造的一U包装格式?
  2Q?tar包,如software-1.2.3-1.tar.gz。它是用UNIXpȝ的打包工具tar打包的?
  而且Q大多数Linux应用软g包的命名也有一定的规律Q它遵@Q?
  名称-版本-修正?cd
  例如Q?
  sfotware-1.2.3-1.i386.rpm
  软g名称Qsoftware
  版本P1.2.3
  修正版本Q?
  可用q_Qi386Q适用于Intel 80x86q_?
  cdQrpmQ说明是一个rpm包?
  ҎLinux应用E序软g安装包中的内容不同可以分为:Q?
  1Q?是可执行文gQ也是解开包后可以直接运行的。在Windows中所有的软g包都是这U类型。安装完q个E序后,你就可以使用。不q下载时要注意这个Y件是否是你所使用的^収ͼ否则无法正常安装?
  2Q?另一U则是源E序Q也p开包后Q你q需要用编译器其~译成ؓ可执行文件。这在Windowspȝ中是几乎没有的,因ؓWindows的思想是不开放源E序的?
  通常Q用tar打包的,都是源程序;而用rpm打包的则常是可执行程序?

  1.搞定使用rpm打包的应用Y?
  rpm可谓是Redhat公司的一大A献,它Linux的Y件安装工作变得更加简单容易?br />
  1Q?安装Q?
  我只需单的一句话Q就可以说完。执行:
  rpm -ivh rpm软g包名
  更高U的Q请见下表:
  rpm参数 参数说明
  -i 安装软g
  -t 试安装Q不是真的安?
  -p 昄安装q度
  -f 不管M错误
  -U 升安装
  -v 套件是否正安?
  q些参数可以同时采用。更多的内容可以参考RPM的命令帮助?
  2Q?卸蝲Q?
  我同样只需单的一句话Q就可以说完。执行:
  rpm -e 软g?
  不过要注意的是,后面使用的是软g名,而不是Y件包名。例如,要安装software-1.2.3-1.i386.rpmq个包时Q应执行Q?
  rpm -ivh software-1.2.3-1.i386.rpm
  而当卸蝲Ӟ则应执行Q?
  rpm -e software?

  2Q?搞定使用tar打包的应用Y?
  1Q?安装Q?
  整个安装q程可以分ؓ以下几步Q?
  Ø 取得应用软gQ通过下蝲、购买光盘的Ҏ获得Q?
   Ø 解压~文Ӟ一般tar包,都会再做一ơ压~,如gzip、bz2{,所以你需要先解压。如果是最常见的gz格式Q则可以执行Q“tar -xvzf 软g包名”,可以一步完成解压与解包工作。如果不是,则先用解压YӞ再执行“tar -xvf 解压后的tar包”进行解包;
  Ø 阅读附带的INSTALL文g、README文gQ?
  Ø 执行?/configure”命令ؓ~译做好准备Q?
  Ø 执行“make”命令进行Y件编译;
  Ø 执行“make install”完成安装;
  Ø 执行“make clean”删除安装时产生的时文件?
   好了Q到此大功告成。我们就可以q行应用E序了。但q时Q有的读者就会问Q我怎么执行呢?q也是一个Linux特色的问题。其实,一般来_Linux 的应用Y件的可执行文件会存放?usr/local/bin目录下!不过qƈ不是“放四v皆准”的真理Q最可靠的还是看q个软g的INSTALL?README文gQ一般都会有说明?
  2Q?卸蝲Q?
  通常软g的开发者很考虑到如何卸载自q软gQ而tar又仅是完成打包的工作Q所以ƈ没有提供良好的卸载方法。一般都提供 make uninstall 来卸载Y件的?br />

转自 http://rsgd.blogbus.com/index.html


伊峰 2006-09-24 21:53 发表评论
]]> վ֩ģ壺 | ٹ| | ʹ| ƽ| ԭ| | | | ľ| گ| | ɽ| | Ϋ| Ͽ| ³| | ÷| ʯ| | | | | | | | | | ͳ| | | ֹ| | | | | | ˮ| | Ӣɳ|