??xml version="1.0" encoding="utf-8" standalone="yes"?>91亚洲精品视频,亚洲国产成人久久综合一区77,亚洲国产综合无码一区http://www.tkk7.com/cuichang/zh-cnSat, 10 May 2025 10:23:08 GMTSat, 10 May 2025 10:23:08 GMT60oracle 可以用判断某?存储的是否是 数字?asc ?函数 http://www.tkk7.com/cuichang/archive/2010/11/24/338947.htmlccccWed, 24 Nov 2010 08:25:00 GMThttp://www.tkk7.com/cuichang/archive/2010/11/24/338947.htmlhttp://www.tkk7.com/cuichang/comments/338947.htmlhttp://www.tkk7.com/cuichang/archive/2010/11/24/338947.html#Feedback0http://www.tkk7.com/cuichang/comments/commentRss/338947.htmlhttp://www.tkk7.com/cuichang/services/trackbacks/338947.html

cc 2010-11-24 16:25 发表评论
]]>
Linux 技巧:让进E在后台可靠q行的几U方?/title><link>http://www.tkk7.com/cuichang/archive/2009/07/29/288903.html</link><dc:creator>cc</dc:creator><author>cc</author><pubDate>Wed, 29 Jul 2009 08:48:00 GMT</pubDate><guid>http://www.tkk7.com/cuichang/archive/2009/07/29/288903.html</guid><wfw:comment>http://www.tkk7.com/cuichang/comments/288903.html</wfw:comment><comments>http://www.tkk7.com/cuichang/archive/2009/07/29/288903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cuichang/comments/commentRss/288903.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cuichang/services/trackbacks/288903.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="30" sizcache="2"> <tbody sizset="31" sizcache="2"> <tr valign="top" sizset="31" sizcache="2"> <td width="10"></td> <td width="100%" sizset="31" sizcache="2"> <table class="no-print" cellspacing="0" cellpadding="0" width="160" align="right" border="0" sizset="31" sizcache="2"> <tbody sizset="32" sizcache="2"> <tr sizset="32" sizcache="2"> <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td> <td sizset="32" sizcache="2"> <table cellspacing="0" cellpadding="0" width="150" border="0" sizset="32" sizcache="2"> <tbody sizset="32" sizcache="1"> <tr> <td class="v14-header-1-small">文档选项</td> </tr> </tbody> </table> <table class="v14-gray-table-border" cellspacing="0" cellpadding="0" border="0" sizset="33" sizcache="2"> <tbody sizset="34" sizcache="2"> <tr sizset="34" sizcache="2"> <td class="no-padding" width="150" sizset="34" sizcache="2"> <table cellspacing="0" cellpadding="0" width="143" border="0" sizset="34" sizcache="2"> <script language="JavaScript" type="text/javascript"> <!-- document.write('<tr valign="top"><td width="8"><img src="http://www.ibm.com/i/c.gif" width="8" height="1" alt="" /></td><td width="16"><img alt="打印机的版面设|成横向打印模式" height="16" src="http://www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" /></td><td width="122"><p><strong><a class="smallplainlink" href="javascript:print()">打印本页</a></strong></p></td></tr>'); //--> </script> <tbody sizset="34" sizcache="1"> <tr valign="top"> <td width="8"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="8" /></td> <td width="16"><img height="16" alt="打印机的版面设|成横向打印模式" src="http://www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" /></td> <td width="122"> <p><strong><a class="smallplainlink" href="javascript:print()" cmimpressionsent="1">打印本页</a></strong></p> </td> </tr> <noscript></noscript> <form name="email" action="https://www.ibm.com/developerworks/secure/email-it.jsp" sizset="35" sizcache="1" cm1="1"> <input type="hidden" value="本文向您介l在不同的场景下Q让q程在断开q接后依然保持运行的几种Ҏ? name="body" cM3 cm1="1" cm2="0" /><input type="hidden" value="Linux 技巧:让进E在后台可靠q行的几U方? name="subject" cM3 cm1="1" cm2="1" /><input type="hidden" value="cn" name="lang" cM3 cm1="1" cm2="2" /> <script language="JavaScript" type="text/javascript"> <!-- document.write('<tr valign="top"><td width="8"><img src="http://www.ibm.com/i/c.gif" width="8" height="1" alt="" /></td><td width="16"><img src="http://www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="此作为电子邮件发? /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><strong>此作为电子邮件发?/strong></a></p></td></tr>'); //--> </script> <tr valign="top"> <td width="8"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="8" /></td> <td width="16"><img height="16" alt="此作为电子邮件发? src="http://www.ibm.com/i/v14/icons/em.gif" width="16" vspace="3" /></td> <td width="122"> <p><a class="smallplainlink" href="javascript:document.email.submit();" cmimpressionsent="1"><strong>此作为电子邮件发?/strong></a></p> </td> </tr> <noscript></noscript> </form> </tbody> </table> </td> </tr> </tbody> </table> <!--start RESERVED FOR FUTURE USE INCLUDE FILES--><!-- this content will be automatically generated across all content areas --><!--end RESERVED FOR FUTURE USE INCLUDE FILES--><br /> </td> </tr> </tbody> </table> <p>U别Q?中</p> <p><a cmimpressionsent="1">??/a> (<a href="mailto:shenyyi@cn.ibm.com?subject=Linux 技巧:让进程在后台可靠运行的几种方法" cmimpressionsent="1">shenyyi@cn.ibm.com</a>), 软g工程? IBM 中国软g开发中?br /> </p> <p>2008 q?5 ?29 ?/p> <blockquote>惌q程在断开q接后依然保持运行?如果该进E已l开始运行了该如何补救? 如果有大量这c需求如何简化操作?</blockquote><!--start RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--end RESERVED FOR FUTURE USE INCLUDE FILES--> <p>我们l常会碰到这L问题Q用 telnet/ssh d了远E的 Linux 服务器,q行了一些耗时较长的Q务, l果却由于网l的不稳定导致Q务中途失败。如何让命o提交后不受本地关闭终端窗?|络断开q接的干扰呢Q下面D了一些例子, 您可以针对不同的场景选择不同的方式来处理q个问题?/p> <p><a name="N1005B"><span id="iwukksk" class="atitle">nohup/setsid/&</span></a></p> <p><a name="N10062"><span id="ocaqsci" class="smalltitle">场景Q?/span></a></p> <p>如果只是临时有一个命令需要长旉q行Q什么方法能最便的保证它在后台E_q行呢? </p> <table cellspacing="0" cellpadding="0" width="40%" align="right" border="0" sizset="36" sizcache="2"> <tbody sizset="37" sizcache="2"> <tr sizset="37" sizcache="2"> <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td> <td sizset="37" sizcache="2"> <table cellspacing="0" cellpadding="5" width="100%" border="1" sizset="37" sizcache="2"> <tbody sizset="37" sizcache="1"> <tr> <td bgcolor="#eeeeee"><a name="N1006E"><strong>hangup 名称的来?/strong></a><br /> ?Unix 的早期版本中Q每个终端都会通过 modem 和系l通讯。当用户 logout Ӟmodem ׃挂断Qhang upQ电话?同理Q当 modem 断开q接Ӟ׃l终端发?hangup 信号来通知其关闭所有子q程?</td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <p><a name="N10074"><span id="ykwoike" class="smalltitle">解决ҎQ?/span></a></p> <p>我们知道Q当用户注销QlogoutQ或者网l断开Ӟl端会收?HUPQhangupQ信号从而关闭其所有子q程。因此,我们的解军_法就有两U途径Q要么让q程忽略 HUP 信号Q要么让q程q行在新的会话里从而成Z属于此终端的子进E?</p> <strong>1. nohup</strong> <p>nohup 无疑是我们首先想到的办法。顾名思义Qnohup 的用途就是让提交的命令忽?hangup 信号。让我们先来看一?nohup 的帮助信息:</p> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="38" sizcache="2"> <tbody sizset="38" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode">NOHUP(1) User Commands NOHUP(1) NAME nohup - run a command immune to hangups, with output to a non-tty SYNOPSIS nohup COMMAND [ARG]... nohup OPTION DESCRIPTION Run COMMAND, ignoring hangup signals. --help display this help and exit --version output version information and exit </pre> </td> </tr> </tbody> </table> <br /> <p>可见Qnohup 的用是十分方便的,只需在要处理的命令前加上 nohup 卛_Q标准输出和标准错误~省会被重定向到 nohup.out 文g中。一般我们可在结֊?strong>"&"</strong>来将命o同时攑օ后台q行Q也可用<code>"><em>filename</em> 2>&1"</code>来更改缺省的重定向文件名?/p> <br /> <a name="nohup"><strong>nohup CZ</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="39" sizcache="2"> <tbody sizset="39" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 ~]# nohup ping www.ibm.com & [1] 3059 nohup: appending output to `nohup.out' [root@pvcent107 ~]# ps -ef |grep 3059 root 3059 <span id="iamugwm" class="boldcode">984</span> 0 21:06 pts/3 00:00:00 ping www.ibm.com root 3067 984 0 21:06 pts/3 00:00:00 grep 3059 [root@pvcent107 ~]# </pre> </td> </tr> </tbody> </table> <br /> <strong>2。setsid</strong> <p>nohup 无疑能通过忽略 HUP 信号来我们的进E避免中途被中断Q但如果我们换个角度思考,如果我们的进E不属于接受 HUP 信号的终端的子进E,那么自然也就不会受到 HUP 信号的媄响了。setsid p帮助我们做到q一炏V让我们先来看一?setsid 的帮助信息:</p> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="40" sizcache="2"> <tbody sizset="40" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode">SETSID(8) Linux Programmer’s Manual SETSID(8) NAME setsid - run a program in a new session SYNOPSIS setsid program [ arg ... ] DESCRIPTION setsid runs a program in a new session. </pre> </td> </tr> </tbody> </table> <br /> <p>可见 setsid 的用也是非常方便的Q也只需在要处理的命令前加上 setsid 卛_?/p> <br /> <a name="setsid"><strong>setsid CZ</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="41" sizcache="2"> <tbody sizset="41" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 ~]# setsid ping www.ibm.com [root@pvcent107 ~]# ps -ef |grep www.ibm.com root 31094 <span id="mwiugwo" class="boldcode">1</span> 0 07:28 ? 00:00:00 ping www.ibm.com root 31102 29217 0 07:29 pts/4 00:00:00 grep www.ibm.com [root@pvcent107 ~]# </pre> </td> </tr> </tbody> </table> <br /> <p>值得注意的是Q上例中我们的进E?ID(PID)?1094Q而它的父 IDQPPIDQؓ1Q即?init q程 IDQ,q不是当前终端的q程 ID。请此例与<a cmimpressionsent="1">nohup ?/a>中的?ID 做比较?/p> <strong>3?amp;</strong> <p>q里q有一个关?subshell 的小技巧。我们知道,一个或多个命名包含?#8220;()”中就能让q些命o在子 shell 中运行中Q从而扩展出很多有趣的功能,我们现在要讨论的是其中之一?/p> <p>当我们将"&"也放?#8220;()”内之后,我们׃发现所提交的作业ƈ不在作业列表中,也就是说Q是无法通过<code>jobs</code>来查看的。让我们来看看ؓ什么这样就能躲q?HUP 信号的媄响吧?/p> <br /> <a name="N100D5"><strong>subshell CZ</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="42" sizcache="2"> <tbody sizset="42" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 ~]# (ping www.ibm.com &) [root@pvcent107 ~]# ps -ef |grep www.ibm.com root 16270 <span id="iiqeqyg" class="boldcode">1</span> 0 14:13 pts/4 00:00:00 ping www.ibm.com root 16278 15362 0 14:13 pts/4 00:00:00 grep www.ibm.com [root@pvcent107 ~]# </pre> </td> </tr> </tbody> </table> <br /> <p>从上例中可以看出Q新提交的进E的?IDQPPIDQؓ1Qinit q程?PIDQ,q不是当前终端的q程 ID。因此ƈ不属于当前终端的子进E,从而也׃会受到当前终端的 HUP 信号的媄响了?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="43" sizcache="2"> <tbody sizset="43" sizcache="1"> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right" sizset="44" sizcache="2"> <tbody sizset="45" sizcache="2"> <tr align="right" sizset="45" sizcache="2"> <td sizset="45" sizcache="2"><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0" sizset="45" sizcache="2"> <tbody sizset="45" sizcache="1"> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N100E1"><span id="qqmyaag" class="atitle">disown</span></a></p> <p><a name="N100E8"><span id="icqiecs" class="smalltitle">场景Q?/span></a></p> <p>我们已经知道Q如果事先在命o前加?nohup 或?setsid 可以避?HUP 信号的媄响。但是如果我们未加Q何处理就已经提交了命令,该如何补救才能让它避?HUP 信号的媄响呢Q?</p> <p><a name="N100F1"><span id="qiegygw" class="smalltitle">解决ҎQ?/span></a></p> <p>q时惛_ nohup 或?setsid 已经为时已晚Q只能通过作业调度?disown 来解册个问题了。让我们来看一?disown 的帮助信息: </p> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="46" sizcache="2"> <tbody sizset="46" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode">disown [-ar] [-h] [jobspec ...] Without options, each jobspec is removed from the table of active jobs. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is supplied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.</pre> </td> </tr> </tbody> </table> <br /> <p>可以看出Q我们可以用如下方式来达成我们的目的?/p> <table cellspacing="0" cellpadding="0" width="40%" align="right" border="0" sizset="47" sizcache="2"> <tbody sizset="48" sizcache="2"> <tr sizset="48" sizcache="2"> <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td> <td sizset="48" sizcache="2"> <table cellspacing="0" cellpadding="5" width="100%" border="1" sizset="48" sizcache="2"> <tbody sizset="48" sizcache="1"> <tr> <td bgcolor="#eeeeee"><a name="N10105"><strong>灉|q用 CTRL-z</strong></a><br /> 在我们的日常工作中,我们可以?CTRL-z 来将当前q程挂v到后台暂停运行,执行一些别的操作,然后再用 fg 来将挂v的进E重新放回前収ͼ也可?bg 来将挂v的进E放在后収ͼl箋q行。这h们就可以在一个终端内灉|切换q行多个dQ这一点在调试代码时尤为有用。因为将代码~辑器挂起到后台再重新放回时Q光标定位仍然停留在上次挂v时的位置Q避免了重新定位的麻烦?</td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <ul> <li>?code>disown -h <em>jobspec</em> </code>来<strong>某个作业</strong>忽略HUP信号? <li>?code>disown -ah </code>来<strong>所有的作业</strong>都忽略HUP信号? <li>?code>disown -rh </code>来<strong>正在q行的作?/strong>忽略HUP信号?</li> </ul> <p>需要注意的是,当用过 disown 之后Q会把目标作业从作业列表中U除Q我们将不能再?code>jobs</code>来查看它Q但是依然能够用<code>ps -ef</code>查找到它?/p> <p>但是q有一个问题,q种Ҏ的操作对象是作业Q如果我们在q行命o时在l尾加了<strong>"&"</strong>来它成Z个作业ƈ在后台运行,那么׃事大吉了Q我们可以通过<code>jobs</code>命o来得到所有作业的列表。但是如果ƈ没有把当前命令作Z业来q行Q如何才能得到它的作业号呢?{案是?CTRL-zQ按住Ctrl键的同时按住z键)了!</p> <p>CTRL-z 的用途就是将当前q程挂vQSuspendQ,然后我们可以用<code>jobs</code>命o来查询它的作业号Q再?code>bg <em>jobspec</em> </code>来将它放入后台ƈl箋q行。需要注意的是,如果挂v会媄响当前进E的q行l果Q请慎用此方法?/p> <br /> <a name="disown"><strong>disown CZ1Q如果提交命令时已经?#8220;&”命令放入后台运行,则可以直接?#8220;disown”Q?/strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="49" sizcache="2"> <tbody sizset="49" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 build]# cp -r testLargeFile largeFile & [1] 4825 [root@pvcent107 build]# jobs [1]+ Running cp -i -r testLargeFile largeFile & [root@pvcent107 build]# disown -h %1 [root@pvcent107 build]# ps -ef |grep largeFile root 4825 968 1 09:46 pts/4 00:00:00 cp -i -r testLargeFile largeFile root 4853 968 0 09:46 pts/4 00:00:00 grep largeFile [root@pvcent107 build]# logout </pre> </td> </tr> </tbody> </table> <br /> <br /> <a name="disown"><strong>disown CZ2Q如果提交命令时未?#8220;&”命令放入后台运行,可?CTRL-z ?#8220;bg”其攑օ后台Q再使用“disown”Q?/strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="50" sizcache="2"> <tbody sizset="50" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 build]# cp -r testLargeFile largeFile2 [1]+ Stopped cp -i -r testLargeFile largeFile2 [root@pvcent107 build]# bg %1 [1]+ cp -i -r testLargeFile largeFile2 & [root@pvcent107 build]# jobs [1]+ Running cp -i -r testLargeFile largeFile2 & [root@pvcent107 build]# disown -h %1 [root@pvcent107 build]# ps -ef |grep largeFile2 root 5790 5577 1 10:04 pts/3 00:00:00 cp -i -r testLargeFile largeFile2 root 5824 5577 0 10:05 pts/3 00:00:00 grep largeFile2 [root@pvcent107 build]# </pre> </td> </tr> </tbody> </table> <br /> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="51" sizcache="2"> <tbody sizset="51" sizcache="1"> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right" sizset="52" sizcache="2"> <tbody sizset="53" sizcache="2"> <tr align="right" sizset="53" sizcache="2"> <td sizset="53" sizcache="2"><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0" sizset="53" sizcache="2"> <tbody sizset="53" sizcache="1"> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N10166"><span id="suygkkq" class="atitle">screen</span></a></p> <p><a name="N1016D"><span id="scwiggm" class="smalltitle">场景Q?/span></a></p> <p>我们已经知道了如何让q程免受 HUP 信号的媄响,但是如果有大量这U命令需要在E_的后台里q行Q如何避免对每条命o都做q样的操作呢Q?</p> <p><a name="N10176"><span id="iquwqoo" class="smalltitle">解决ҎQ?/span></a></p> <p>此时最方便的方法就?screen 了。简单的_screen 提供?ANSI/VT100 的终端模拟器Q它能够在一个真实终端下q行多个全屏的伪l端。screen 的参数很多,h很强大的功能Q我们在此仅介绍其常用功能以及简要分析一下ؓ什么?screen 能够避免 HUP 信号的媄响。我们先看一?screen 的帮助信息:</p> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="54" sizcache="2"> <tbody sizset="54" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode">SCREEN(1) SCREEN(1) NAME screen - screen manager with VT100/ANSI terminal emulation SYNOPSIS screen [ -options ] [ cmd [ args ] ] screen -r [[pid.]tty[.host]] screen -r sessionowner/[[pid.]tty[.host]] DESCRIPTION Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows. </pre> </td> </tr> </tbody> </table> <br /> <p>使用 screen 很方便,有以下几个常用选项Q?/p> <ul> <li>?code>screen -dmS <em>session name</em> </code>来徏立一个处于断开模式下的会话Qƈ指定其会话名Q? <li>?code>screen -list </code>来列出所有会话? <li>?code>screen -r <em>session name</em> </code>来重新连接指定会话? <li>用快捷键<code>CTRL-a d </code>来暂时断开当前会话?</li> </ul> <br /> <a name="screen"><strong>screen CZ</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="55" sizcache="2"> <tbody sizset="55" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 ~]# screen -dmS Urumchi [root@pvcent107 ~]# screen -list There is a screen on: 12842.Urumchi (Detached) 1 Socket in /tmp/screens/S-root. [root@pvcent107 ~]# screen -r Urumchi </pre> </td> </tr> </tbody> </table> <br /> <p>当我们用“-r”q接?screen 会话后,我们可以在q个伪终端里面ؓ所ƲؓQ再也不用担?HUP 信号会对我们的进E造成影响Q也不用l每个命令前都加?#8220;nohup”或?#8220;setsid”了。这是ؓ什么呢Q让我来看一下下面两个例子吧?/p> <br /> <a name="screen1"><strong>1. 未?screen 时新q程的进E树</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="56" sizcache="2"> <tbody sizset="56" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 ~]# ping www.google.com & [1] 9499 [root@pvcent107 ~]# pstree -H 9499 init─┬─Xvnc ├─acpid ├─atd ├─2*[sendmail] <span id="wgcwiym" class="boldcode">├─sshd─?/span>─sshd───bash───pstree ? <span id="iceqcka" class="boldcode"> └─sshd───bash───ping</span> </pre> </td> </tr> </tbody> </table> <br /> <p>我们可以看出Q未使用 screen 时我们所处的 bash ?sshd 的子q程Q当 ssh 断开q接ӞHUP 信号自然会媄响到它下面的所有子q程Q包括我们新建立?ping q程Q?/p> <br /> <a name="screen2"><strong>2. 使用?screen 后新q程的进E树</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="57" sizcache="2"> <tbody sizset="57" sizcache="1"> <tr> <td class="code-outline"> <pre class="displaycode"> [root@pvcent107 ~]# screen -r Urumchi [root@pvcent107 ~]# ping www.ibm.com & [1] 9488 [root@pvcent107 ~]# pstree -H 9488 init─┬─Xvnc ├─acpid ├─atd <span id="oimeqgg" class="boldcode">├─screen───bash───ping</span> ├─2*[sendmail] </pre> </td> </tr> </tbody> </table> <br /> <p>而用了 screen 后就不同了,此时 bash ?screen 的子q程Q?screen ?initQPID?Q的子进E。那么当 ssh 断开q接ӞHUP 信号自然不会影响?screen 下面的子q程了?/p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="58" sizcache="2"> <tbody sizset="58" sizcache="1"> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right" sizset="59" sizcache="2"> <tbody sizset="60" sizcache="2"> <tr align="right" sizset="60" sizcache="2"> <td sizset="60" sizcache="2"><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0" sizset="60" sizcache="2"> <tbody sizset="60" sizcache="1"> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N101DC"><span id="gaswsqq" class="atitle">ȝ</span></a></p> <p>现在几种Ҏ已经介绍完毕Q我们可以根据不同的场景来选择不同的方案。nohup/setsid 无疑是旉要时最方便的方法,disown 能帮助我们来事后补救当前已经在运行了的作业,?screen 则是在大扚w操作时不二的选择了?/p> <br /> <br /> <p><a name="resources"><span id="ysoiuaa" class="atitle">参考资?</span></a></p> <ul> <li>“<a cmimpressionsent="1">pȝ理员工具包Q进E管理技?/a>”QdeveloperWorks 中国Q?006 q?5 月)介绍?Linux q程理的更多技巧?br /> <br /> <li>“<a cmimpressionsent="1">Linux 技巧:使用 screen 理你的q程会话</a>”QdeveloperWorks 中国Q?007 q?7 月)介绍?screen 的更多技巧?br /> <br /> <li>?<a cmimpressionsent="1">developerWorks 中国|站 Linux 专区</a>中学习更?Linux 斚w的知识?/li> </ul> <br /> <br /> <p><a name="author"><span id="isuoiyg" class="atitle">关于作?/span></a></p> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="61" sizcache="2"> <tbody sizset="61" sizcache="1"> <tr> <td colspan="3"><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /></td> </tr> <tr valign="top" align="left"> <td> <p> </p> </td> <td><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="4" /></td> <td width="100%"> <p>xQIBM 中国软g开发中?WebSphere Portal 部门软g工程师?/p> </td> </tr> </tbody> </table> <br /> <br /> <br /> <p class="no-print"><span id="scoykqy" class="atitle"><a name="rate">Ҏ文的评h</a></span></p> <span id="eyaqcsq" class="no-print" sizset="63" sizcache="2"> <table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="63" sizcache="2"> <tbody sizset="64" sizcache="2"> <tr valign="top" sizset="64" sizcache="2"> <td sizset="64" sizcache="2"> <form action="https://www.ibm.com/developerworks/secure/cnratings.jsp" method="get" sizset="64" sizcache="2" cm1="2"> <input type="hidden" value="Linux 技巧:让进E在后台可靠q行的几U方? name="ArticleTitle" cM3 cm1="2" cm2="0" /><input type="hidden" value="Linux, AIX and UNIX" name="Zone" cM3 cm1="2" cm2="1" /><input type="hidden" value="http://www.ibm.com/developerworks/cn/thankyou/" name="RedirectURL" cM3 cm1="2" cm2="2" /><input type="hidden" value="china" name="localsite" cM3 cm1="2" cm2="3" /> <script language="javascript">document.write('<input type="hidden" name="url" value="'+location.href+'" />');</script><input type="hidden" value="http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/" name="url" cM3 cm1="2" cm2="4" /> <table cellspacing="0" cellpadding="0" border="0" sizset="64" sizcache="2"> <tbody sizset="64" sizcache="1"> <tr> <td><img height="8" alt="" src="http://www.ibm.com/i/c.gif" width="100" border="0" /></td> </tr> <tr valign="top"> <td><input id="one" type="radio" value="1" name="Rating" cM3 cm1="2" cm2="5" /><label for="one">太差Q?(1)</label></td> </tr> <tr valign="top"> <td><input id="two" type="radio" value="2" name="Rating" cM3 cm1="2" cm2="6" /><label for="two">需提高 (2)</label></td> </tr> <tr valign="top"> <td><input id="three" type="radio" value="3" name="Rating" cM3 cm1="2" cm2="7" /><label for="three">一般;可 (3)</label></td> </tr> <tr valign="top"> <td><input id="four" type="radio" value="4" name="Rating" cM3 cm1="2" cm2="8" /><label for="four">好文?(4)</label></td> </tr> <tr valign="top"> <td><input id="five" type="radio" value="5" name="Rating" cM3 cm1="2" cm2="9" /><label for="five">真棒Q?5)</label></td> </tr> </tbody> </table> <br /> <strong><label for="cmts">Q?/strong><br /> <textarea id="cmts" name="Comments" rows="5" wrap="virtual" cols="60" cM3 cm1="2" cm2="10"> </textarea><br /> <br /> <label for="fback"><input id="fback" type="submit" value="反馈意见" cM3 cm1="2" cm2="11" /> </form> </label></label></td> </tr> <tr valign="top"> <td bgcolor="#ffffff"><img height="8" alt="" src="http://www.ibm.com/i/c.gif" width="100" border="0" /></td> </tr> </tbody> </table> </span><br /> <p><!-- --></p> <!--start RESERVED FOR FUTURE USE INCLUDE FILES--><br /> <!--end RESERVED FOR FUTURE USE INCLUDE FILES--><br /> <span id="meiuwec" class="no-print" sizset="71" sizcache="2"> <table cellspacing="0" cellpadding="0" align="right" sizset="71" sizcache="2"> <tbody sizset="72" sizcache="2"> <tr align="right" sizset="72" sizcache="2"> <td sizset="72" sizcache="2"><img height="8" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0" sizset="72" sizcache="2"> <tbody sizset="72" sizcache="1"> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> </span></td> <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td> </tr> </tbody> </table> <span id="imwicaa" class="small">IBM 公司保留?developerWorks |站上发表的内容的著作权。未lIBM公司或原始作者的书面明确许可Q请勿{载。如果您希望转蝲Q请通过 <a cmimpressionsent="1">提交转蝲h表单</a> 联系我们的编辑团队?/span> <img src ="http://www.tkk7.com/cuichang/aggbug/288903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cuichang/" target="_blank">cc</a> 2009-07-29 16:48 <a href="http://www.tkk7.com/cuichang/archive/2009/07/29/288903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tr http://www.tkk7.com/cuichang/archive/2009/07/10/286334.htmlccccFri, 10 Jul 2009 15:53:00 GMThttp://www.tkk7.com/cuichang/archive/2009/07/10/286334.htmlhttp://www.tkk7.com/cuichang/comments/286334.htmlhttp://www.tkk7.com/cuichang/archive/2009/07/10/286334.html#Feedback0http://www.tkk7.com/cuichang/comments/commentRss/286334.htmlhttp://www.tkk7.com/cuichang/services/trackbacks/286334.html1、关于tr
   通过使用 trQ您可以非常Ҏ地实?sed 的许多最基本功能。您可以?tr 看作?sed 的(极其Q简化的变体Q它可以用一个字W来替换另一个字W,或者可以完全除M些字W。您也可以用它来除去重复字符。这是所?tr 所能够做的?br />        tr用来从标准输入中通过替换或删除操作进行字W{换。tr主要用于删除文g中控制字W或q行字符转换。用tr时要转换两个字符Ԍ字符?用于查询Q?字符?用于处理各种转换。tr刚执行时Q字W串1中的字符被映到字符?中的字符Q然后{换操作开始?br /> 带有最常用选项的tr命o格式为:
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file
q里Q?br /> -c 用字W串1中字W集的补集替换此字符集,要求字符集ؓASCII?br /> -d 删除字符?中所有输入字W?br /> -s 删除所有重复出现字W序列,只保留第一个;卛_重复出现字符串压~ؓ一个字W串?br /> input-file是{换文件名。虽然可以用其他格式输入,但这U格式最常用?br /> 2、字W范?br /> 指定字符?或字W串2的内ҎQ只能用单字符或字W串范围或列表?br /> [a-z] a-z内的字符l成的字W串?br /> [A-Z] A-Z内的字符l成的字W串?br /> [0-9] 数字丌Ӏ?br /> \octal 一个三位的八进制数Q对应有效的ASCII字符?br /> [O*n] 表示字符O重复出现指定ơ数n。因此[O*2]匚wOO的字W串?br /> tr中特定控制字W的不同表达方式
速记W含义八q制方式
\a Ctrl-G 铃声\007
\b Ctrl-H 退格符\010
\f Ctrl-L 走行换页\014
\n Ctrl-J 新行\012
\r Ctrl-M 回R\015
\t Ctrl-I tab键\011
\v Ctrl-X \030
3、应用例?br /> Q?Q去除oops.txt里面的重复的写字符
tr -s "[a-z]"<oops.txt >result.txt
Q?Q删除空?br /> tr -s "[\012]" < plan.txt ?tr -s ["\n"] < plan.txt
Q?Q有旉要删除文件中的^MQƈ代之以换?br /> tr -s "[\015]" "[\n]" < file ?tr -s "[\r]" "[\n]" < file
Q?Q大写到写
cat a.txt |tr "[a-z]" "[A-Z]" >b.txt
Q?Q删除指定字W?br />     一个星期的日程表。Q务是从其中删除所有数字,只保留日期。日期有大写Q也有小写格式。因此需指定两个字符范围[a-z]和[A-Z]Q命令tr -cs "[a-z][A-Z]" "[\012*]" 文件每行所有不包含在[a-z]或[A-Z]Q所有希腊字母)的字W串攑֜字符?中ƈ转换Z新行?s选项表明压羃所有新行, -c表明保留所有字母不动。原文g如下Q后跟tr命oQ?br /> tr -cs "[a-z][A-Z]" "[\012*]" <diary.txt
Q?Q{换控制字W?br />     tr的第一个功能就是{换控制字W,特别是从dos向UNIX下蝲文gӞ忘记讄ftp关于回R换行转换的选项时更是如此。cat -v filename 昄控制字符?br />     cat -v stat.txt
    box aa^^^^^12^M
    apple bbas^^^^23^M
    ^Z
猜想‘^ ^ ^ ^ ^ ^’是tab键。每一行以Ctrl-Ml尾Q文件结Ctrl-ZQ以下是改动Ҏ?br /> 使用-s选项Q查看ASCII表。^的八q制代码?36Q^M?15Qtab键是011Q^Z?32 ,下面按步骤完成最l功能?br /> 用tab键替换^ ^ ^ ^ ^ ^Q命令ؓ"\136" "[\011*]"。将l果重定向到临时工作文gstat.tmp
tr -s "[\136]" "[\011*]" <stat.txt >stat.tmp
用新行替换每行末^MQƈ用\n去除^ZQ输入要来自于时工作文件stat.tmp?br /> tr -s "[\015][\032]" "\n" <stat.tmp
要删除所有的tab键,代之以空|使用命o
tr -s "[\011]" "[\040*]" <input.file
Q?Q替换passwd文g中所有冒P代之以tab键,可以增加可读?br /> tr -s "[:]" "[\011]" < /etc/passwd ?tr -s "[:]" "[\t]" < /etc/passwd
Q?Q路径h可读?br />     如果?echo $PATH 或?echo $LD_LIBRARY_PATH {类似的命o来显C\径信息的话,我们看到的将会是一大堆用冒可接在一L路径Q?tr命o可以把这些冒可{换ؓ回RQ这Pq些路径具有很好的可读性了
echo $PATH | tr ":" "\n"
Q?Q可以在vi内用所有这些命令!只要CQ在tr命o前要加上您希望处理的行范围和感叹?Q!Q,?1,$!tr -d '\t'Q美元符可C最后一行)?br /> Q?0Q另外,当有人给您发送了一个在 Mac OS ?DOS/Windows 机器上创建的文本文gӞ您会发现tr非常有用?br />     如果没有文件保存ؓ使用 UNIX 换行W来表示行结束这U格式,则需要将q样的文件{换成本机 UNIX 格式Q否则一些命令实用程序不会正地处理q些文g。Mac OS 的行以回R字符(\r)l束Q许多文本处理工具将q样的文件作Z行来处理。ؓ了纠正这个问题,可以用下列技巧:
Mac -> UNIXQtr "\r" "\n"<macfile > unixfile
UNIX -> MacQtr "\n" "\r"<unixfile > macfile
Microsoft DOS/Windows U定Q文本的每行以回车字W?\r)q后跟换行符(\n)l束。ؓ了纠正这个问题,可以使用下列命oQ?br /> DOS -> UNIXQtr -d "\r"<dosfile > unixfile
UNIX -> DOSQ在q种情况下,需要用awkQ因为tr不能插入两个字符来替换一个字W。要使用?awk 命o?awk '{ print $0"\r" }'<unixfile > dosfile



cc 2009-07-10 23:53 发表评论
]]>
Linux操作pȝ下Y件的安装Ҏ大全http://www.tkk7.com/cuichang/archive/2008/11/14/240427.htmlccccThu, 13 Nov 2008 16:25:00 GMThttp://www.tkk7.com/cuichang/archive/2008/11/14/240427.htmlhttp://www.tkk7.com/cuichang/comments/240427.htmlhttp://www.tkk7.com/cuichang/archive/2008/11/14/240427.html#Feedback0http://www.tkk7.com/cuichang/comments/commentRss/240427.htmlhttp://www.tkk7.com/cuichang/services/trackbacks/240427.html一、rpm包安装方式步骤:


1、找到相应的软g包,比如soft.version.rpmQ下载到本机某个目录Q?

2、打开一个终端,su -成root用户Q?

3、cd soft.version.rpm所在的目录Q?

4、输入rpm -ivh soft.version.rpm


二、deb包安装方式步骤:


1、找到相应的软g包,比如soft.version.debQ下载到本机某个目录Q?

2、打开一个终端,su -成root用户Q?

3、cd soft.version.deb所在的目录Q?

4、输入dpkg -i soft.version.deb


三、tar.gz源代码包安装方式Q?


1、找到相应的软g包,比如soft.tar.gzQ下载到本机某个目录Q?

2、打开一个终端,su -成root用户Q?

3、cd soft.tar.gz所在的目录Q?

4、tar -xzvf soft.tar.gz //一般会生成一个soft目录

5、cd soft

6?/configure

7、make

8、make install


四、tar.bz2源代码包安装方式Q?

1、找到相应的软g包,比如soft.tar.bz2Q下载到本机某个目录Q?

2、打开一个终端,su -成root用户Q?

3、cd soft.tar.bz2所在的目录Q?

4、tar -xjvf soft.tar.bz2 //一般会生成一个soft目录

5、cd soft

6?/configure

7、make

8、make install


五、apt方式安装Q?


1、打开一个终端,su -成root用户Q?

2、apt-cache search soft 注:soft是你要找的Y件的名称或相关信?

3、如?中找C软gsoft.versionQ则用apt-get install soft.version命o?

装Y?注:只要你可以上|,只需要用apt-cache search查找软gQ用apt-get

install软g


六、bin文g安装Q?


如果你下载到的Y件名是soft.binQ一般情况下是个可执行文Ӟ安装Ҏ如下Q?

1、打开一个终端,su -成root用户Q?

2、chmod +x soft.bin

3?/soft.bin //q行q个命o可以安装Y件了


七、不需要安装的软gQ?


有了些YӞ比如lumaqqQ是不需要安装的Q自带jre解压~后可直接运行。假?

下蝲的是lumaqq.tar.gzQ用方法如下:

1、打开一个终端,su -成root用户Q?

2、tar -xzvf lumaqq.tar.gz //q一步会生成一个叫LumaQQ的目?

3、cd LumaQQ

4、chmod +x lumaqq //讄lumaqqq个E序文g为可q行

5、此时就可以q行lumaqq了,用命?/lumaqq卛_Q但每次q行要输入全路径?

切换到刚才生成的LumaQQ目录?

6、ؓ了保证不讄路径可以用Q你可以?bin目录下徏立一个lumaqq的链接,

用命令ln -s lumaqq /bin/ 卛_Q以后Q何时候打开一个终端输入lumaqq可?

启动QQ聊天软g?

7?如果你要想lumaqq有个菜单,使用菜单~辑工具Q比如Alacarte Menu

EditorQ找C面生成的LumaQQ目录里的lumaqq讄一个菜单项可以了Q当然你

也可以直接到 /usr/share/applications目录Q按照里面其?.desktop文g的格

式生成一个自qdesktop文g卛_?/p>

cc 2008-11-14 00:25 发表评论
]]>
Linux下常用压~格式的压羃与解压方?/title><link>http://www.tkk7.com/cuichang/archive/2008/11/14/240422.html</link><dc:creator>cc</dc:creator><author>cc</author><pubDate>Thu, 13 Nov 2008 16:10:00 GMT</pubDate><guid>http://www.tkk7.com/cuichang/archive/2008/11/14/240422.html</guid><wfw:comment>http://www.tkk7.com/cuichang/comments/240422.html</wfw:comment><comments>http://www.tkk7.com/cuichang/archive/2008/11/14/240422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cuichang/comments/commentRss/240422.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cuichang/services/trackbacks/240422.html</trackback:ping><description><![CDATA[<div class="moieyoe" id="art" style="margin: 15px" width="100%"> <h5 class="diaryTitle">Linux下常用压~格式的压羃与解压方?/h5> <strong></strong><br /> 解包Qtar xvf FileName.tar<br /> 打包Qtar cvf FileName.tar DirName<br /> <span style="color: rgb(0,128,0)">Q注Qtar是打包,不是压羃Q)</span><br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.gz</span></strong><br /> 解压1Qgunzip FileName.gz<br /> 解压2Qgzip -d FileName.gz<br /> 压羃Qgzip FileName <br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tar.gz</span></strong><br /> 解压Qtar zxvf FileName.tar.gz<br /> 压羃Qtar zcvf FileName.tar.gz DirName<br /> --------------------------------------------- <br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.bz2</span></strong><br /> 解压1Qbzip2 -d FileName.bz2<br /> 解压2Qbunzip2 FileName.bz2<br /> 压羃Q?bzip2 -z FileName<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tar.bz2</span></strong><br /> 解压Qtar jxvf FileName.tar.bz2 <br /> 压羃Qtar jcvf FileName.tar.bz2 DirName<br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.bz</span></strong><br /> 解压1Qbzip2 -d FileName.bz <br /> 解压2Qbunzip2 FileName.bz<br /> 压羃Q?span style="color: rgb(255,165,0)">未知</span><br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tar.bz</span></strong><br /> 解压Qtar jxvf FileName.tar.bz<br /> 压羃Q?span style="color: rgb(255,165,0)">未知</span><br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.Z</span></strong><br /> 解压Quncompress FileName.Z<br /> 压羃Qcompress FileName<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tar.Z</span></strong><br /> 解压Qtar Zxvf FileName.tar.Z<br /> 压羃Qtar Zcvf FileName.tar.Z DirName<br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tgz</span></strong><br /> 解压Qtar zxvf FileName.tgz<br /> 压羃Q?span style="color: rgb(255,165,0)">未知</span><br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tar.tgz</span></strong><br /> 解压Qtar zxvf FileName.tar.tgz<br /> 压羃Qtar zcvf FileName.tar.tgz FileName<br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.zip</span></strong><br /> 解压Qunzip FileName.zip<br /> 压羃Qzip FileName.zip DirName<br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.rar</span></strong><br /> 解压Qrar a FileName.rar<br /> 压羃Qrar e FileName.rar<br /> <br /> <span style="color: rgb(0,128,0)"><br /> rar请到Q?a target="_blank"><span style="color: rgb(0,0,0)">http://www.rarsoft.com/download.htm</span></a> 下蝲Q?br /> 解压后请rar_static拯?usr/bin目录Q其他由$PATH环境变量指定的目录也可以Q:<br /> [root@www2 tmp]# cp rar_static /usr/bin/rar</span><br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.lha</span></strong><br /> 解压Qlha -e FileName.lha <br /> 压羃Qlha -a FileName.lha FileName<br /> <span style="color: rgb(0,128,0)"><br /> lha请到Q?a target="_blank"><span style="color: rgb(0,0,0)">http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/</span></a>下蝲Q?br /> 解压后请lha拯?usr/bin目录Q其他由$PATH环境变量指定的目录也可以Q:<br /> [root@www2 tmp]# cp lha /usr/bin/</span><br /> ---------------------------------------------<br /> <strong><span style="font-size: 12pt; color: rgb(0,0,255)">.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea</span></strong><br /> 解压QsEx x FileName.* <br /> 压羃QsEx a FileName.* FileName<br /> <span style="color: rgb(0,128,0)"><br /> sEx只是调用相关E序Q本wƈ无压~、解压功能,h意!<br /> sEx请到Q?a target="_blank"><span style="color: rgb(0,0,0)">http://sourceforge.net/projects/sex</span></a>下蝲Q?br /> 解压后请sEx拯?usr/bin目录Q其他由$PATH环境变量指定的目录也可以Q:<br /> [root@www2 tmp]# cp sEx /usr/bin/</span> </div> <img src ="http://www.tkk7.com/cuichang/aggbug/240422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cuichang/" target="_blank">cc</a> 2008-11-14 00:10 <a href="http://www.tkk7.com/cuichang/archive/2008/11/14/240422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rpmhttp://www.tkk7.com/cuichang/archive/2008/11/13/240412.htmlccccThu, 13 Nov 2008 15:23:00 GMThttp://www.tkk7.com/cuichang/archive/2008/11/13/240412.htmlhttp://www.tkk7.com/cuichang/comments/240412.htmlhttp://www.tkk7.com/cuichang/archive/2008/11/13/240412.html#Feedback0http://www.tkk7.com/cuichang/comments/commentRss/240412.htmlhttp://www.tkk7.com/cuichang/services/trackbacks/240412.html rpm -ql **** | more
查找软g是否安装?

cc 2008-11-13 23:23 发表评论
]]>
Google原理QZTQ?/title><link>http://www.tkk7.com/cuichang/archive/2008/10/30/237559.html</link><dc:creator>cc</dc:creator><author>cc</author><pubDate>Thu, 30 Oct 2008 03:34:00 GMT</pubDate><guid>http://www.tkk7.com/cuichang/archive/2008/10/30/237559.html</guid><wfw:comment>http://www.tkk7.com/cuichang/comments/237559.html</wfw:comment><comments>http://www.tkk7.com/cuichang/archive/2008/10/30/237559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cuichang/comments/commentRss/237559.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cuichang/services/trackbacks/237559.html</trackback:ping><description><![CDATA[<p class="g_w_100 g_t_wrap g_t_center g_t_bold g_t_24 g_c_pdin c07" id="blogtitle_fks_085064080094084070082080085095093081084071082094094066"> </p> <div id="ceqkuck" class="g_blog_list"> <div id="ygcgiqe" class="g_t_center g_c_pdin g_p_center c07 content" id="blogtext_fks_085064080094084070082080085095093081084071082094094066" style="width: 760px"> <p style="text-indent: 2em">Google原理QZTQ?/p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">q篇文章中,我们介绍了googleQ它是一个大型的搜烦引擎Qof a large-scale search engineQ的原型Q搜索引擎在文本中应用q泛。Google的设计能够高效地抓网ƈ建立索引Q它的查询结果比其它现有pȝ都高明。这个原型的全文和超q接的数据库臛_包含24‘000‘000个网c我们可以从<a >http://google.stanford.edu/</a> 下蝲?/p> <p style="text-indent: 2em">设计搜烦引擎是一富有挑战性的工作。搜索引擎ؓ上亿个网徏立烦引,其中包含大量q然不同的词汇。而且每天要回{成千上万个查询。在|络中,管大型搜烦引擎非常重要Q但是学术界却很研I它。此外由于技术的快速发展和|页的大量增加,现在建立一个搜索引擎和三年前完全不同?/p> <p style="text-indent: 2em">本文详细介绍了我们的大型搜烦引擎Q据我们所知,在公开发表的论文中Q这是第一描q地如此详细。除了把传统数据搜烦技术应用到如此大量U网中所遇到的问题,q有许多新的技术挑战,包括应用文本中的附加信息改q搜索结果?/p> <p style="text-indent: 2em">本文解册个问题,描述如何q用文本中的附加信息,建立一个大型实用系l。Q何h都可以在|上随意发布信息Q如何有效地处理q些无组l的文本集合,也是本文要关注的问题?/p> <p style="text-indent: 2em">关键?nbsp;World Wide WebQ搜索引擎,信息索,PageRank, Google 1 l论 Web l信息检索带来了新的挑战。Web上的信息量快速增长,同时不断有毫无经验的新用h体验Webq门艺术。h们喜Ƣ用链接来网上冲,通常都以?nbsp;Yahooq样重要的网|搜烦引擎开始。大家认为List(目录)有效地包含了大家感兴的主题Q但是它h主观性,建立和维护的代h高,升慢,不能包括所有深奥的主题。基于关键词的自动搜索引擎通常q回太多的低质量的匹配。问题更遭的是Q一些广告ؓ了赢得h们的xx设法误导自动搜烦引擎?/p> <p style="text-indent: 2em">我们建立了一个大型搜索引擎解决了现有pȝ中的很多问题。应用超文本l构Q大大提高了查询质量。我们的pȝ命名为googleQ取名自googol的通俗拼法Q即10?00ơ方Q这和我们的目标建立一个大型搜索引擎不谋而合?/p> <p style="text-indent: 2em">1.1 |络搜烦引擎—升U换代(scaling upQ:1994-2000 搜烦引擎技术不得不快速升U(scale dramaticallyQ跟上成倍增长的web数量?994q_W一个Web搜烦引擎QWorld Wide Web Worm(WWWW)可以索到110Q?00个网和Web的文件。到1994q?1月,的搜索引擎声U可以检索到2‘000'000 QWebCrawlerQ至100‘000'000个网l文Ӟ来自 Search Engine WatchQ。可以预见到2000q_可检索到的网将过1‘000'000‘000。同Ӟ搜烦引擎的访问量也会以惊人的速度增长。在1997q的三四月䆾QWorld Wide Web Worm q_每天收到1500个查询?/p> <p style="text-indent: 2em">?997q?1月,Altavista 声称它每天要处理大约20'000'000个查询。随着|络用户的增长,?000q_自动搜烦引擎每天处理上亿个查询。我们系l的设计目标要解册多问题,包括质量和可升性,引入升搜烦引擎技术(scaling search engine technologyQ,把它升到如此大量的数据上?/p> <p style="text-indent: 2em">1.2 GoogleQ跟上Web的步伐(Scaling with the WebQ徏立一个能够和当今web规模盔R应的搜索引擎会面许多挑战。抓|页技术必够快Q才能跟上网变化的速度Qkeep them up to dateQ。存储烦引和文档的空间必够大。烦引系l必能够有效地处理上千亿的数据。处理查询必dQ达到每U能处理成百上千个查询(hundreds to thousands per second.Q。随着Web的不断增长,q些d变得来艰巨。然而硬件的执行效率和成本也在快速增长,可以部分抉|q些困难?/p> <p style="text-indent: 2em">q有几个值得注意的因素,如磁盘的寻道旉Qdisk seek timeQ,操作pȝ的效率(operating system robustnessQ。在设计Google的过E中Q我们既考虑了Web的增镉K度Q又考虑了技术的更新。Google的设计能够很好的升处理量数据集。它能够有效地利用存储空间来存储索引。优化的数据l构能够快速有效地存取Q参?.2节)。进一步,我们希望Q相对于所抓取的文本文件和HTML|页的数量而言Q存储和建立索引的代价尽可能的小Q参考附录BQ。对于象Googleq样的集中式pȝQ采取这些措施得C令h满意的系l可升性(scaling propertiesQ?/p> <p style="text-indent: 2em">1. 3设计目标</p> <p style="text-indent: 2em">1.3.1提高搜烦质量我们的主要目标是提高Web搜烦引擎的质量?nbsp;1994q_有h认ؓ建立全搜索烦引(a complete search indexQ可以查找M数据都变得容易。根据Best of the Web 1994 -- Navigators Q?#8220;最好的D服务可以使在Web上搜索Q何信息都很容易(当时所有的数据都可以被dQ?#8221;。然?997q的WebpE然不同。近来搜索引擎的用户已经证实索引的完整性不是评h索质量的唯一标准。用h兴趣的搜索结果往往湮没?#8220;垃圾l果Junk result”中。实际上Q到1997q?1月ؓ止,四大商业搜烦引擎中只有一个能够找到它自己Q搜索自己名字时q回的前十个l果中有它自己)。导致这一问题的主要原因是文档的烦引数目增加了好几个数量Q但是用戯够看的文档数却没有增加。用户仍然只希望看前面几十个搜烦l果。因此,当集合增大时Q我们就需要工具ɾl果_Q在q回的前几十个结果中Q有x档的数量Q。由于是从成千上万个有点相关的文档中选出几十个,实际上,相关的概念就是指最好的文档。高_非常重要Q甚至以响应Q系l能够返回的有关文档的LQؓ代h。o人高兴的是利用超文本链接提供的信息有助于改进搜烦和其它应用。尤其是链接l构和链接文本,为相x的判断和高质量的过滤提供了大量的信息。Google既利用了链接l构又用Canchor文本Q见2.1?.2 节)?/p> <p style="text-indent: 2em">1.3.2搜烦引擎的学术研I着旉的流逝,除了发展q速,Web来商业化?993q_只有1.5%的Web服务是来? com域名。到1997q_过?0%。同Ӟ搜烦引擎从学术领域走q商业。到现在大多数搜索引擎被公司所有,很少技公开术细节。这导致搜索引擎技术很大程度上仍然是暗操作,q們֐做广告(见附录AQ。Google的主要目标是推动学术领域在此斚w的发展,和对它的了解。另一个设计目标是l大家一个实用的pȝ。应用对我们来说非常重要Q因为现代网l系l中存在大量的有用数据(us because we think some of the most interesting research will involve leveraging the vast amount of usage data that is available from modern web systemsQ。例如,每天有几千万个研I。然而,得到q些数据却非常困难,主要因ؓ它们没有商业价倹{我们最后的设计目标是徏立一个体pȝ构能够支持新的关于v量Web数据的研I。ؓ了支持新研究QGoogle以压~的形式保存了实际所抓到的文档。设计google的目标之一是要徏立一个环境其他研究者能够很快进入这个领域,处理量Web数据Q得到满意的l果Q而通过其它Ҏ却很隑־到结果。系l在短时间内被徏立v来,已经有几论文用C Google建的数据库,更多的在h中。我们的另一个目标是建立一个宇宙空间实验室似的环境Q在q里研究者甚臛_生都可以Ҏ们的量Web数据设计或做一些实验?/p> <p style="text-indent: 2em">2. pȝ特点 Google搜烦引擎有两个重要特点,有助于得到高_ֺ的搜索结果?/p> <p style="text-indent: 2em">W一点,应用Web的链接结构计每个网늚Rank|UCؓPageRankQ将?8详l描q它?/p> <p style="text-indent: 2em">W二点,Google利用链接改q搜索结果?/p> <p style="text-indent: 2em">2.1 PageRank:l网|?nbsp;Web的引用(链接Q图是重要的资源Q却被当今的搜烦引擎很大E度上忽视了。我们徏立了一个包?18‘000'000个超链接的图Q它是一个具有重要意义的h。这些图能够快速地计算|页的PageRank|它是一个客观的标准Q较好的W合Z心目中对一个网重要程度的评hQ徏立的基础是通过引用判断重要性。因此在web中,PageRank能够优化关键词查询的l果。对于大多数的主题,在网|题查询中用PageRank优化单文本匹配,我们得到了o人惊叹的l果Q从google.stanford.edu可以得到演示Q。对于Googleȝl中的全文搜索,PageRank也帮了不忙?/p> <p style="text-indent: 2em">2.1.1计算PageRank 文献索中的引用理论用到Web中,引用|页的链接数Q一定程度上反映了该|页的重要性和质量。PageRank发展了这U思想Q网间的链接是不^{的?/p> <p style="text-indent: 2em">PageRank 定义如下: 我们假设T1…Tn指向|页AQ例如,被引用)。参数d是制动因子,使结果在0Q?之间。通常d{于0.85。在下一节将详细介绍d。CQAQ定义ؓ|页 A指向其它|页的链接数Q网A的PageRank值由下式l出Q?nbsp;PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) 注意PageRank的Ş式,分布到各个网中Q因此所有网늚PageRank和是1?nbsp;PageRank或PRQAQ可以用单的q代法计算Q相应规格化Web链接矩阵的主特征向量。中{规模的|站计算26‘000'000|页?nbsp;PageRankDp几小时。还有一些技术细节超Z本文的范围?/p> <p style="text-indent: 2em">2.1.2直觉判断 PageRank被看作用戯为的模型。我们假讄上冲是随机的,不断点击链接Q从不返回,最l烦了,另外随机选一个网重新开始冲。随问一个网늚可能性就是它的PageRank倹{制动因子d是随问一个网늃了的可能性,随机另选一个网c对单个|页或一l网,一个重要的变量加入到制动因子d中。这允许个h可以故意地误导系l,以得到较高的PageRank倹{我们还有其它的PageRank法Q见98c?/p> <p style="text-indent: 2em">另外的直觉判断是一个网|很多|页指向它,或者一些PageRank值高的网|向它Q则q个|页很重要。直觉地Q在Web中,一个网被很多|页引用Q那么这个网值得一看。一个网被象Yahooq样重要的主引用即使一ơ,也值得一看。如果一个网늚质量不高Q或者是死链接,象Yahooq样的主不会链向它?nbsp;PageRank处理了这两方面因素,q过|络链接递归C递?/p> <p style="text-indent: 2em">2.2链接描述文字QAnchor TextQ我们的搜烦引擎寚w接文本进行了Ҏ的处理。大多数搜烦引擎把链接文字和它所铑֐的网(the page that the link is onQ联pv来。另外,把它和链接所指向的网联pv来。这有几点好处?/p> <p style="text-indent: 2em">W一Q通常链接描述文字比网|w更_地描q该|页?/p> <p style="text-indent: 2em">W二Q链接描q文字可能链向的文档不能被文本搜索引擎检索到Q例如图像,E序和数据库。有可能使返回的|页不能被抓到。注意哪些抓不到的网将会带来一些问题。在q回l用户前不了它们的有效性。这U情冉|索引擎可能返回一个根本不存在的网,但是有超U链接指向它。然而这U结果可以被挑出来的Q所以此cȝ问题很少发生。链接描q文字是对被铑֐|页的宣传,q个思想被用在World Wide Web Worm 中,主要因ؓ它有助于搜烦非文本信息,能够用少量的已下载文档扩大搜索范围。我们大量应用链接描q文字,因ؓ它有助于提高搜烦l果的质量。有效地利用链接描述文字技术上存在一些困难,因ؓ必须处理大量的数据。现在我们能抓到24‘000'000个网,已经索到259‘000'000多个链接描述文字?/p> <p style="text-indent: 2em">2.3其它特点除了PageRank和应用链接描q文字外QGoogleq有一些其它特炏V?/p> <p style="text-indent: 2em">W一,所有hit都有位置信息Q所以它可以在搜索中q泛应用邻近性(proximityQ?/p> <p style="text-indent: 2em">W二QGoogle跟踪一些可视化外表l节Q例如字受黑体大号字比其它文字更重要?/p> <p style="text-indent: 2em">W三Q知识库存储了原始的全文html|页?/p> <p style="text-indent: 2em">3 有关工作 Web索研I的历史短。World Wide Web WormQ)是最早的搜烦引擎之一。后来出C一些用于学术研I的搜烦引擎Q现在它们中的大多数被上市公司拥有。与Web的增长和搜烦引擎的重要性相比,有关当今搜烦引擎技术的优秀论文相当。根据Michael MauldinQLycos Inc的首席科学家Q? Q?#8220;各种各样的服务(包括LycosQ非常关注这些数据库的细节?#8221;虽然在搜索引擎的某些特点上做了大量工作。具有代表性的工作有,对现有商业搜索引擎的l果q行传递,或徏立小型的个性化的搜索引擎。最后有关信息检索系l的研究很多Q尤其在有组l机构集合(well controlled collectionsQ方面。在下面两节Q我们将讨论在信息检索系l中的哪些领域需要改q以便更好的工作在Web上?/p> <p style="text-indent: 2em">3.1信息索信息检索系l诞生在几年前,q发展迅速。然而大多数信息索系l研I的对象是小规模的单一的有l织l构的集合,例如U学论文集,或相关主题的新闻故事。实际上Q信息检索的主要基准Qthe Text Retrieval ConferenceQ)Q用规模的、有l织l构的集合作为它们的基准?/p> <p style="text-indent: 2em">大型文集基准只有20GBQ相比之下,我们抓到?4000000个网占147GB。在TREC上工作良好的pȝQ在Web上却不一定生好的结果。例如,标准向量I间模型企图q回和查询请求最相近的文档,把查询请求和文档都看作由出现在它们中的词汇组成的向量。在Web环境下,q种{略常常q回非常短的文档Q这些文档往往是查询词再加几个字。例如,查询“Bill Clinton”Q返回的|页只包?#8220;Bill Clinton Sucks”Q这是我们从一个主要搜索引擎中看到的。网l上有些争议Q用户应该更准确地表达他们想查询什么,在他们的查询h中用更多的词。我们强烈反对这U观炏V如果用h“Bill Clinton”q样的查询请求,应该得到理想的查询结果,因ؓq个主题有许多高质量的信息。象所l的例子Q我们认Z息检索标准需要发展,以便有效地处理Web数据?/p> <p style="text-indent: 2em">3.2有组l结构的集合QWell Controlled CollectionsQ与Web的不同点 Web是完全无l织的异构的大量文档的集合。Web中的文档无论内在信息q是隐含信息都存在大量的异构性。例如,文档内部q了不同的语言Q既有hc语a又有E序Q,词汇Qemail地址Q链接,邮政~码Q电话号码,产品PQ类型(文本QHTMLQPDFQ图像,声音Q,有些甚至是机器创建的文gQlog文gQ或数据库的输出Q。可以从文档中推断出来,但ƈ不包含在文档中的信息UCؓ隐含信息。隐含信息包括来源的信誉Q更新频率,质量Q访问量和引用。不但隐含信息的可能来源各种各样Q而且被检的信息也大不相同,相差可达好几个数量。例如,一个重要主늚使用量,象Yahoo 每天览数达C百万ơ,于此相比无名的历史文章可能十q才被访问一ơ。很明显Q搜索引擎对q两cM息的处理是不同的?nbsp;Web与有l织l构集合之间的另外一个明昑֌别是Q事实上Q向Web上传信息没有M限制。灵zd用这点可以发布Q何对搜烦引擎影响重大的信息,使\由阻塞,加上为牟利故意操U|索引擎,q些已经成ؓ一个严重的问题。这些问题还没有被传l的闭的信息检索系l所提出来。它兛_的是元数据的努力Q这在Web 搜烦引擎中却不适用Q因为网中的Q何文本都不会向用户声UC图操U|索引擎。甚x些公ؓ牟利专门操纵搜烦引擎?/p> <p style="text-indent: 2em">4 pȝ分析QSystem AnatomyQ首先,我们提供高水q的有关体系l构的讨论。然后,详细描述重要的数据结构。最后,主要应用Q抓|页Q烦引,搜烦被严格地检查?nbsp;Figure 1. High Level Google Architecture 4.1Google体系l构概述q一节,我们看看整个系l是如何工作的(give a high levelQ,见图1。本节不讨论应用和数据结构,在后几节中讨论。ؓ了效率大部分Google是用c或c++实现的,既可以在Solaris也可以在 Linux上运行?/p> <p style="text-indent: 2em">Googlepȝ中,抓网(下蝲|页Q是由几个分布式crawlers完成的。一个URL服务器负责向crawlers 提供URL列表。抓来的|页交给存储服务器storeserver。然后,由存储服务器压羃|页q把它们存到知识库repository中。每个网都有一个IDQ称作docIDQ当新URL从网中分析出时Q就被分配一个docID。由索引器和排序器负责徏立烦引index function。烦引器从知识库中读取文档,对其解压~和分析。每个文档被转换成一l词的出现情况,UC命中hits。HitsU录了词Q词在文档中的位|,最接近的字P大小写。烦引器把这些hits分配Cl桶barrel中,产生l过部分排序后的索引。烦引器的另一个重要功能是分析|页中所有的链接Q将有关的重要信息存在链接描qanchors文g中。该文g包含了够的信息Q可以用来判断每个链接链出链入节点的信息Q和链接文本?nbsp;URL分解器resolver阅读链接描述anchors文gQƈ把相对URL转换成绝对URLQ再转换成docID。ؓ链接描述文本~制索引Qƈ与它所指向的docID兌h。同时徏立由docID对组成的链接数据库。用于计所有文档的PageRank倹{用docID分类后的barrelsQ送给排序器sorterQ再ҎwordIDq行分类Q徏立反向烦引inverted index。这个操作要恰到好处Q以便几乎不需要暂存空间。排序器q给出docID和偏U量列表Q徏立反向烦引。一个叫DumpLexicon的程序把q个列表和由索引器生的字典l合在一P建立一个新的字典,供搜索器使用。这个搜索器是利用一个Web服务器,使用由DumpLexicon所生成的字典,利用上述反向索引以及面{PageRank来回{用L提问?nbsp;4.2主要数据l构l过优化的Google数据l构Q能够用较小的代h取大量文档,建立索引和查询。虽然近几年CPU和输入输出速率q速提高。磁盘寻道仍焉?0ms。Q何时候Googlepȝ的设计都可能地避免盘寻道。这Ҏ据结构的设计影响很大?/p> <p style="text-indent: 2em">4.2.1大文件大文g BigFiles是指虚拟文g生成的多文gpȝQ用长度?4位的整型数据d。多文gpȝ之间的空间分配是自动完成的。BigFiles包也处理已分配和未分配文件描q符。由于操U늳l不能满x们的需要,BigFiles也支持基本的压羃选项?/p> <p style="text-indent: 2em">4.2.2知识?nbsp;Figure 2. Repository Data Structure 知识库包含每个网늚全部HTML。每个网는zlibQ见RFC1950Q压~。压~技术的选择既要考虑速度又要考虑压羃率。我们选择zlib的速度而不是压~率很高的bzip。知识库用bzip的压~率接近4Q?。而用zlib的压~率?Q?。文档一个挨着一个的存储在知识库中,前缀是docIDQ长度,URLQ见?。访问知识库不需要其它的数据l构。这有助于数据一致性和升。用其它数据l构重构pȝQ我们只需要修改知识库和crawler错误列表文g?/p> <p style="text-indent: 2em">4.2.3文g索引文g索引保存了有x档的一些信息。烦引以docID的顺序排列,定宽ISAMQIndex sequential access modeQ。每条记录包括当前文件状态,一个指向知识库的指针,文g校验和,各种l计表。如果一个文档已l被抓到Q指针指向docinfo文gQ该文g的宽度可变,包含了URL和标题。否则指针指向包含这个URL的URL列表。这U设计考虑到简z的数据l构Q以及在查询中只需要一个磁盘寻道时间就能够讉K一条记录。还有一个文件用于把URL转换成docID。它是URL校验和与相应docID的列表,按校验和排序。要想知道某个URL的docIDQ需要计URL的校验和Q然后在校验和文件中执行二进制查找,扑ֈ它的docID。通过对这个文件进行合qӞ可以把一批URL转换成对应的docID。URL分析器用q项技术把URL转换成docID。这U成Ҏ新的模式是至关重要的Q否则每个链接都需要一ơ查询,假如用一块磁盘,322‘000'000个链接的数据集合花费一个多月的旉?/p> <p style="text-indent: 2em">4.2.4词典词典有几U不同的形式。和以前pȝ的重要不同是Q词典对内存的要求可以在合理的h格内。现在实现的pȝQ一?56M内存的机器就可以把词典装入到内存中。现在的词典包含14000000词汇Q虽然一些很用的词汇没有加入到词典中)。它执行分两部分—词汇表Q用null分隔的连l串Q和指针的哈希表。不同的函数Q词汇表有一些辅助信息,q超Z本文的范围?/p> <p style="text-indent: 2em">4.2.5 hit list hit list是一文档中所出现的词的列表,包括位置Q字P大小写。Hit list占很大空_用在正向和反向烦引中。因此,它的表示形式有效越好。我们考虑了几U方案来~码位置Q字P大小写—简单编码(3个整型数Q,紧凑~码Q支持优化分配比特位Q,哈夫曼编码。Hit的详l信息见?。我们的紧凑~码每个hit?字节。有两种cdhitQ特Dhit和普通hit。特D?nbsp;hit包含URLQ标题,链接描述文字Qmeta tag。普通hit包含其它每g事。它包括大小写特征位Q字P12比特用于描述词在文档中的位置Q所有超q?095的位|标Cؓ4096Q。字号采用相对于文档的其它部分的相对大小表示Q占3比特(实际只用7个|因ؓ111标志是特Dhit)。特Dhit由大写特征位,字号位ؓ7表示它是Ҏ hitQ用4比特表示Ҏhit的类型,8比特表示位置。对于anchor hit八比特位|位分出4比特用来表示在anchor中的位置Q?比特用于表明anchor出现的哈希表hash of the docID。短语查询是有限的,Ҏ些词没有_多的anchor。我们希望更新anchor hit的存储方式,以便解决地址位和docIDhash域位C的问题?/p> <p style="text-indent: 2em">因ؓ搜烦Ӟ你不会因为文档的字号比别的文档大而特D对待它Q所以采用相对字受?nbsp;hit表的长度存储在hit前。ؓ节省I间hit表长度,在正向烦引中和wordIDl合在一P在反向烦引中和docIDl合存储。这限制它相应地只??比特Q用些技巧,可以从wordID中?bitQ如果大于这些比Ҏ能表C的长度Q用溢出码填充,其后两字节是真正的长度?nbsp;Figure 3. Forward and Reverse Indexes and the Lexicon</p> <p style="text-indent: 2em">4.2.6正向索引实际上,正向索引已经部分排序。它被存在一定数量的barrel中(我们?4个barrelsQ。每个barrel装着一定范围的wordID。如果一文档中的词落到某个 barrelQ它的docID被记录到这个barrel中,紧跟着那些词(文档中所有的词汇Q还是落入该barrel中的词汇Q对应的hitlist。这U模式需要稍多些的存储空_因ؓ一个docID被用多次Q但是它节省了桶数和旉Q最后排序器q行索引旉低编码的复杂度。更q一步的措施是,我们不是存储docID本nQ而是存储相对于该桶最的docID的差。用q种ҎQ未排序的barrel的docID只需24位,省下8位记录hitlist ѝ?/p> <p style="text-indent: 2em">4.2.7反向索引除了反向索引由sorter加工处理之外Q它和正向烦引包含相同的桶。对每个有效的docIDQ字典包含一个指向该词所在桶的指针。它指向由docID和它的相应hitlistl成的doclishQ这个doclist代表了所有包含该词的文档?nbsp;doclist中docID的顺序是一个重要的问题。最单的解决办法是用doclish排序。这U方法合q多个词时很快。另一个可选方案是用文档中该词出现的次数排序。这U方法回{单词查询,所用时间微不道。当多词查询时几乎是从头开始。ƈ且当用其它Rank法改进索引Ӟ非常困难。我们综合了q两U方法,建立两组反向索引barrelQ一lbarrels的hitlist只包含标题和anchor hitQ另一lbarrel包含全部的hitlist。我们首先查W一l烦引桶Q看有没有匹配的,然后查较大的那组桶?/p> <p style="text-indent: 2em">4.3抓网运行网l爬行机器h是一具有挑战性的d。执行的性能和可靠性甚x重要Q还有一些社会焦炏V网l爬行是一w常薄q应用Q它需要成百上千的web服务器和各种域名服务器的参与Q这些服务器不是我们pȝ所能控制的。ؓ了覆盖几十亿的网,Google拥有快速的分布式网l爬行系l。一个URL服务器给若干个网l爬行机器hQ我们采?个)提供URL列表。URL服务器和|络爬行机器人都是用Python实现的。每个网l爬行机器h可以同时打开300个链接。抓取网必够快。最快时Q用4个网l爬行机器h每秒可以爬行100个网c速率达每U?00K。执行的重点是找DNS。每个网l爬行机器h有它自己?nbsp;DNS cacheQ所以它不必每个|页都查DNS。每一百个q接都有几种不同的状态:查DNSQ连接主机,发送请求,接收回答。这些因素ɾ|络爬行机器人成为系l比较复杂的部分。它用异步IO处理事gQ若q请求队列从一个网站到另一个网站不停的抓取|页。运行一个链接到500多万台服务器的网늈行机器hQ?nbsp;1千多万登陆口Q导致了大量的Email和电话。因为网民众多,L些h不知道网l爬行机器h是何物,q是他们看到的第一个网l爬行机器h。几乎每天我们都会收到这LEmail“哦,你从我们的网站看了太多的|页Q你惛_什么?”q有一些h不知道网l搜索机器h避免协议Qthe robots exclusion protocolQ,以ؓ他们的网上写着“版权所有,勿被索引”的字样就会被保护不被索引Q不必说Q这L话很难被web crawler理解。因为数据量如此之大Q还会遇C些意想不到的事情。例如,我们的系l曾l企图抓一个在U游戏,l果抓到了游戏中的大量垃圾信息。解册个问题很单。但是我们下载了几千万网后才发Cq个问题。因为网和服务器的U类J多Q实际上不在大部分Internet上运行它测试一个网늈行机器h是不可能。L有几百个隐含的问题发生在整个web的一个网上Q导致网l爬行机器h崩溃Q或者更p,D不可预测的不正确的行为。能够访问大部分Internet的系l必ȝ力充沛ƈ_ֿ试q。由于象crawlerq样大型复杂的系lL产生q样那样的问题,因此p一些资源读q些 EmailQ当问题发生时解军_Q是有必要的?/p> <p style="text-indent: 2em">4.4Web索引分析—Q何运行在整个Web上的分析器必能够处理可能包含错误的大型集合。范围从HTML标记到标C间几K字节?Q非ASCII字符Q几癑ֱHTML标记的嵌套,各种各样令h难以惌的错误。ؓ了获得最大的速度Q我们没有采用YACC产生上下文无x法CFG分析器,而是采用灉|的方式生词汇分析器Q它自己配有堆栈。分析器的改q大大提高了q行速度Q它的精力如此充沛完成了大量工作。把文档装入barrel建立索引—分析完一文档,之后把该文档装入barrel中,用内存中的hash表—字典,每个词汇被{换成一?nbsp;wordID。当hash表字怸加入新的ҎQ笨拙地存入文g。一旦词汇被转换成wordIDQ它们在当前文档的出现就转换成hitlistQ被写进正向barrel。烦引阶Dƈ行的主要困难是字兔R要共享?/p> <p style="text-indent: 2em">我们采用的方法是Q基本字怸?40万个固定词汇Q不在基本字怸的词汇写入日志,而不是共享字典。这U方法多个烦引器可以q行工作Q最后一个烦引器只需处理一个较的额外词汇日志。排序—ؓ了徏立反向烦引,排序器读取每个正?nbsp;barrelQ以wordID排序Q徏立只有标题anchor hi t的反向烦引barrel和全文反向烦引barrel。这个过E一ơ只处理一个barrelQ所以只需要少量暂存空间。排序阶D也是ƈ行的Q我们简单地同时q行可能多的排序器Q不同的排序器处理不同的桶。由于barrel不适合装入dQ排序器q一步依据wordID和docID把它分成若干子Q以侉K合装入d。然后排序器把每个篮子装入主存进行排序,q把它的内容写回到短反向barrel和全文反向barrel?/p> <p style="text-indent: 2em">4.5搜烦搜烦的目标是提供有效的高质量的搜索结果。多数大型商业搜索引擎好像在效率斚wp了很大力气。因此我们的研究以搜索质量ؓ重点Q相信我们的解决Ҏ也可以用到那些商业系l中?/p> <p style="text-indent: 2em">Google查询评hq程见图4?/p> <p style="text-indent: 2em">1. 分析查询?/p> <p style="text-indent: 2em">2. 把词汇{换成wordID?/p> <p style="text-indent: 2em">3. 在短barrel中查找每个词汇doclist的开头?/p> <p style="text-indent: 2em">4. 扫描doclist直到扑ֈ一匹配所有关键词的文?/p> <p style="text-indent: 2em">5. 计算该文档的rank</p> <p style="text-indent: 2em">6. 如果我们在短barrelQƈ且在所有doclist的末,开始从全文barrel的doclist的开头查找每个词Qgoto W四?/p> <p style="text-indent: 2em">7. 如果不在Mdoclist的结,q回W四步?/p> <p style="text-indent: 2em">8. Ҏrank排序匚w文档Q返回前k个。图4 Google查询评h在有限的响应旉内,一旦找C定数量的匚w文档Q搜索引擎自动执行步?。这意味着Q返回的l果是子优化的。我们现在研I其它方法来解决q个问题。过L据PageRank排序hitQ看来能够改q这U状c?/p> <p style="text-indent: 2em">4.5.1 Rankingpȝ Google比典型搜索引擎保存了更多的web信息。每个hitlish包括位置Q字P大小写。另外,我们q考虑了链接描q文字。Rankl合所有这些信息是困难的。ranking函数设计依据是没有某个因素对rank影响重大。首先,考虑最单的情况—单个词查询。ؓ了单个词查询中一个文档的 rankQGoole在文档的hitlist中查找该词。Google认ؓ每个hit是几U不同类型(标题Q链接描q文字anchorQURLQ普通大字号文本Q普通小字号文本Q?#8230;…Q之一Q每U有它自qcd权重。类型权重徏立了一个类型烦引向量。Google计算hitlist中每Uhit的数量。然后每个hit数{换成count-weight。Count-weight开始随hit数线性增加,很快逐渐停止Q以至于hitC此不相关。我们计?nbsp;count-weight向量和type-weight向量的标量积作ؓ文档的IR倹{最后IR值结合PageRank作ؓ文档的最后rank 对于多词查询Q更复杂些。现在,多词hitlist必须同时扫描Q以便关键词出现在同一文档中的权重比分别出现时高。相邻词的hit一起匹配。对每个匚w hit 的集合计相d。相dZhit在文档中的距,分成10个不同的bin|范围从短语匹配到Ҏ不相兟뀂不仅计每chit敎ͼ而且要计每U类型的盔R度,每个cd怼度对Q有一个类型相d权type-prox-weight。Count转换成count-weightQ计count- weight type-proc-weight的标量积作ؓIR倹{应用某Udebug mode所有这些数和矩阵与查询l果一hC出来。这些显C有助于改进rankpȝ?/p> <p style="text-indent: 2em">4.5.2反馈 rank函数有很多参数象type-weight和type-prox-weight。指明这些参数的正确值有炚w色艺术black art。ؓ此,我们的搜索引擎有一个用户反馈机制。值得信Q的用户可以随意地评hq回的结果。保存反馈。然后,当修改rank函数ӞҎ以前搜烦?nbsp;rankQ我们可以看C改带来的的媄响。虽然不是十全十,但是它给Z一些思\Q当rank函数改变时对搜烦l果的媄响?/p> <p style="text-indent: 2em">5执行和结果搜索结果的质量是搜索引擎最重要的度量标准。完全用戯价体p超Z本文的论q范_对于大多数搜索,我们的经验说明Google的搜索结果比那些主要的商业搜索引擎好。作Z个应用PageRankQ链接描q文字,盔R度的例子Q图4l出了Google搜烦bill Clinton的结果。它说明了Google的一些特炏V服务器对结果进行聚cR这对过滤结果集合相当有帮助。这个查询,相当一部分l果来自 whitehouse.gov域,q正是我们所需要的。现在大多数商业搜烦引擎不会q回M来自whitehouse.gov的结果,q是相当不对的。注意第一个搜索结果没有标题。因为它不是被抓到的。Google是根据链接描q文字决定它是一个好的查询结果。同样地Q第五个l果是一个Email地址Q当然是不可能抓到的。也是链接描q文字的l果。所有这些结果质量都很高Q最后检查没有死链接。因为它们中的大部分PageRankD高。PageRank 癑ֈ比用U色U条表示。没有结果只含Bill没有Clinton或只含Clinton没有Bill。因出现的相q性非帔R要。当然搜索引擎质量的真实试包含q泛的用户学习或l果分析Q此处篇q有限,误者自己去体验GoogleQ?a >http://google.stanford.edu/</a>?nbsp;5.1存储需求除了搜索质量,Google的设计可以随着Web规模的增大而有效地增大成本。一斚w有效地利用存储空间。表1列出了一些统计数字的明细表和Google存储的需求。由于压~技术的应用知识库只需53GB的存储空间。是所有要存储数据的三分之一。按当今盘hQ知识库相对于有用的数据来说比较便宜。搜索引擎需要的所有数据的存储I间大约55GB。大多数查询h只需要短反向索引。文件烦引应用先q的~码和压~技术,一个高质量的搜索引擎可以运行在7GB的新PC?/p> <p style="text-indent: 2em">5.2pȝ执行搜烦引擎抓网和建立索引的效率非帔R要。Google的主要操作是抓网,索引Q排序。很难测试抓全部|页需要多时_因ؓ盘满了Q域名服务器崩溃Q或者其它问题导致系l停止。ȝ来说Q大U需?天时间下?6000000|页Q包括错误)。然而,一旦系l运行顺利,速度非常快,下蝲最?1000000|页只需?3时Q^均每?000000|页Q每U?8.5个网c烦引器和网l爬行机器h同步q行。烦引器比网l爬行机器h快。因为我们花费了大量旉优化索引器,使它不是瓉。这些优化包括批量更新文档烦引,本地盘数据l构的安排。烦引器每秒处理54个网c排序器完全q行Q用4台机器,排序的整个过E大概需?4时?/p> <p style="text-indent: 2em">5.3搜烦执行改进搜烦执行不是我们研究的重炏V当前版本的Google可以??0U间回答查询h。时间大部分p在NFS盘IO上(׃盘普遍比机器慢Q。进一步说QGoogle没有做Q何优化,例如查询~冲区,常用词汇子烦引,和其它常用的优化技术。我们們֐于通过分布式,gQYӞ和算法的改进来提高Google的速度。我们的目标是每U能处理几百个请求。表2有几个现在版本Google响应查询旉的例子。它们说明IO~冲区对再次搜烦速度的媄响?nbsp;6l论 Google设计成可伸羃的搜索引擎。主要目标是在快速发展的World Wide Web上提供高质量的搜索结果。Google应用了一些技术改q搜索质量包括PageRankQ链接描q文字,盔R信息。进一步说QGoogle是一个收集网,建立索引Q执行搜索请求的完整的体pȝ构?/p> <p style="text-indent: 2em">6.1未来的工作大型Web搜烦引擎是个复杂的系l,q有很多事情要做。我们直接的目标是提高搜索效率,覆盖大约100000000个网c一些简单的改进提高了效率包括请求缓冲区Qy妙地分配盘I间Q子索引。另一个需要研I的领域是更新。我们必L一个y妙的法来决定哪些旧|页需要重新抓取,哪些新网需要被抓取。这个目标已l由实现了。受需求驱动,用代理cache创徏搜烦数据库是一个有前途的研究领域。我们计划加一些简单的已经被商业搜索引擎支持的特征Q例如布算术符P否定Q填充。然而另外一些应用刚刚开始探索,例如相关反馈Q聚c(Google现在支持单的ZL名的聚类Q。我们还计划支持用户上下文(象用户地址Q,l果摘要。我们正在扩大链接结构和链接文本的应用。简单的实验证明Q通过增加用户主页的权重或书签QPageRank可以个性化。对于链接文本,我们正在试验用链接周围的文本加入到链接文本。Web搜烦引擎提供了丰富的研究N。如此之多以至于我们不能在此一一列DQ因此在不久的将来,我们希望所做的工作不止本节提到的?/p> <p style="text-indent: 2em">6.2高质量搜索当?nbsp;Web搜烦引擎用户所面的最大问题是搜烦l果的质量。结果常常是好笑的,q且出用户的眼界,他们常常灰心丧气费了宝늚旉。例如,一个最行的商业搜索引擎搜?#8220;Bill Clillton”的结果是the Bill Clinton Joke of the Day: April 14, 1997。Google的设计目标是随着Web的快速发展提供高质量的搜索结果,Ҏ扑ֈ信息。ؓ此,Google大量应用文本信息包括链接结构和链接文本。Googleq用C盔R性和字号信息。评h索引擎是困难的,我们主观地发现Google的搜索质量比当今商业搜烦引擎高。通过PageRank分析链接l构?nbsp;Google能够评h|页的质量。用链接文本描述链接所指向的网|助于搜烦引擎q回相关的结果(某种E度上提高了质量Q。最后,利用盔R性信息大大提高了很多搜烦的相x?/p> <p style="text-indent: 2em">6.3可升U的体系l构除了搜烦质量QGoogle设计成可升的。空间和旉必须高效Q处理整个Web时固定的几个因素非常重要。实现GooglepȝQCPU、访存、内存容量、磁盘寻道时间、磁盘吞吐量、磁盘容量、网lIO都是瓉。在一些操作中Q已l改q的 Google克服了一些瓶颈。Google的主要数据结构能够有效利用存储空间。进一步,|页爬行Q烦引,排序已经_建立大部分web索引Q共 24000000个网,用时不到一星期。我们希望能在一个月内徏?00000000|页的烦引?/p> <p style="text-indent: 2em">6.4研究工具 Google不仅是高质量的搜索引擎,它还是研I工兗Google搜集的数据已l用在许多其它论文中Q提交给学术会议和许多其它方式。最q的研究Q例如,提出了Web查询的局限性,不需要网l就可以回答。这说明Google不仅是重要的研究工具Q而且必不可少Q应用广泛。我们希望Google是全世界研究者的资源Q带动搜索引擎技术的更新换代?nbsp;7致谢 Scott Hassan and Alan Steremberg评h了Google的改q。他们的才智无可替代Q作者由衷地感谢他们。感谢Hector Garcia-Molina, Rajeev Motwani, Jeff Ullman, and Terry Winograd和全部WebBase开发组的支持和富有深刻见解的讨论。最后感谢IBMQIntelQSun和投资者的h支持Qؓ我们提供讑֤。这里所描述的研I是Stanfordl合数字图书馆计划的一部分Q由国家U学自然基金支持Q合作协议号IRI-9411306。DARPA QNASAQInterva研究QStanford数字图书馆计划的工业合作伙伴也ؓq项合作协议提供了资金。参考文?nbsp;?</p> <p style="text-indent: 2em">Google的设计目标是可升U到10亿网c我们的盘和机器大概能处理q么多网c系l各个部分耗费的L间是q行的和U性的。包括网늈行机器hQ烦引器和排序器。扩展后我们认ؓ大多数数据结构运行良好。然?0亿网|q所有常用操作系l的极限Q我们目前运行在Solaris和Linux上)。包括主存地址Q开放文件描q符的数量,|络socket和带宽,以及其它因素。我们认为当|页数量大大过10亿网|Q会大大增加pȝ复杂性?nbsp;9.2集中式烦引体pȝ可升U性随着计算机性能的提高,量文本索引的成本比较公q뀂当然带宽需求高的其它应用如视频Q越来越普遍。但是,与多媒体例如视频相比Q文本品的成本低,因此文本仍然普遍?</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">? Googlepȝ的工作流E图</p> <p style="text-indent: 2em">(注:原图来自Sergey Brin and Lawrence Page, The Anatomy of a Large-Scale Hypertextual. Web Search Engine, 1998.<a >http://www-db.stanford.edu/%7Ebackrub/Google.html</a>)</p> <p style="text-indent: 2em">①Google使用高速的分布式爬行器(Crawler)pȝ中的漫游遍历?Googlebot)定时地遍历网,遍历到的网送到存储服务?Store Server)中?/p> <p style="text-indent: 2em">?nbsp;存储服务器用zlib格式压羃软g这些网进行无损压~处理后存入数据库Repository中。Repository获得了每个网늚完全Html 代码后,对其压羃后的|页及URLq行分析Q记录下|页长度、URL、URL长度和网内容,q赋予每个网一个文档号(docID)Q以便当pȝ出现故障的时候,可以及时完整地进行网늚数据恢复?/p> <p style="text-indent: 2em">③烦引器(Indexer)从Repository中读取数据,以后做以下四步工作:</p> <p style="text-indent: 2em">?a) 读取的数据解压~后q行分析Q它网中每个有意义的词进行统计后Q{化ؓ关键?wordID)的若q烦引项(Hits)Q生成烦引项列表Q该列表包括关键词、关键词的位|、关键词的大和大小写状态等。烦引项列表被存入到数据?Barrels)中,q生成以文档?docID)部分排序的顺排档索引?/p> <p style="text-indent: 2em">索引Ҏ据其重要E度分ؓ两种Q当索引中的关键词出现在URL、标题、锚文本(Anchor Text)和标{中Ӟ表示该烦引项比较重要Q称为特D烦引项(Fancy Hits)Q其余情况则UCؓ普通烦引项(Plain Hits)。在pȝ中每个Hit用两个字?byte)存储l构表示Q特D烦引项??bit)表示大小写,用二q制代码111(??表示是特D烦引项Q其?2位有4位表C特D烦引项的类?即hit是出现在URL、标题、链接结点还是标{中)Q剩?位表Chit在网中的具体位|;普通烦引项是用1位表C大写Q?位表C字体大,其余12位表C在|页中的具体位置?/p> <p style="text-indent: 2em">排档烦引和Hit的存储结构如?所C?/p> <p style="text-indent: 2em">? 排档烦引和Hit的存储结?/p> <p style="text-indent: 2em">值得注意的是Q当Ҏ索引Ҏ自Anchor TextӞҎ索引用来表CZ|的信息Q?位)分Z部分Q?位表CAnchor Text出现的具体位|,?位则用来与表CAnchor Text所链接|页的docID相连接,q个docID是由URL Resolverl过转化存入排档烦引的?/p> <p style="text-indent: 2em">(b)索引器除了对|页中有意义的词q行分析外,q分析网늚所有超文本链接Q将其Anchor Text、URL指向{关键信息存入到Anchor文档库中?/p> <p style="text-indent: 2em">(c)索引器生成一个烦引词?Lexicon)Q它包括两个部分Q关键词的列表和指针列表Q用于倒排档文档相q接(如图3所C??/p> <p style="text-indent: 2em">(d) 索引器还分析过的网늼排成一个与Repository相连接的文档索引(Document Index)Qƈ记录下网늚URL和标题,以便可以准确查找出在Repository中存储的原网内宏V而且把没有分析的|页传给URL ServerQ以便在下一ơ工作流E中q行索引分析?/p> <p style="text-indent: 2em">⑤URL分析器(URL ResolverQ读取Anchor文档中的信息Q然后做⑥中的工作?/p> <p style="text-indent: 2em">?a) 其锚文?Anchor Text)所指向的URL转换成网늚docIDQ?b)该docID与原|页的docID形成“链接?#8221;Q存入Link数据库中Q?c)?nbsp;Anchor Text指向的网늚docID与顺排档Ҏ索引Anchor Hits相连接?/p> <p style="text-indent: 2em">⑦数据库Link记录了网늚链接关系Q用来计网늚PageRank倹{?/p> <p style="text-indent: 2em">⑧文档烦?Document Index)把没有进行烦引分析的|页传递给URL ServerQURL Server则向Crawler提供待遍历的URLQ这Pq些未被索引的网在下一ơ工作流E中被索引分析?/p> <p style="text-indent: 2em">⑨排序器QSorterQ对数据?Barrels)的顺排档索引重新q行排序Q生成以关键?wordID)为烦引的倒排档烦引。倒排档烦引结构如?所C:</p> <p style="text-indent: 2em">? 倒排档烦引结?/p> <p style="text-indent: 2em">?nbsp;生成的倒排档烦引与先前q引器产生的烦引词?Lexicon)相连接生一个新的烦引词表供搜烦?Searcher)使用。搜索器的功能是q|务器实现的,ҎC生的索引词表l合上述的文档烦?Document Index)和Link数据库计的|页PageRank值来匚w索?/p> <p style="text-indent: 2em">在执行检索时QGoogle通常遵@以下步骤Q以下所指的是单个检索词的情况)Q?/p> <p style="text-indent: 2em">(1)检索词转化成相应的wordIDQ?/p> <p style="text-indent: 2em">(2)利用LexiconQ检索出包含该wordID的网늚docIDQ?/p> <p style="text-indent: 2em">(3)Ҏ与Lexicon相连的倒排档烦引,分析各网中的相关烦引项的情况,计算各网和索词的匹配程度,必要时调用顺排档索引Q?/p> <p style="text-indent: 2em">(4)Ҏ各网늚匚wE度Q结合根据Link产生的相应网늚PageRank情况Q对索结果进行排序;</p> <p style="text-indent: 2em">(5)调用Document Index中的docID及其相应的URLQ将排序l果生成索结果的最l列表,提供l检索用戗?/p> <p style="text-indent: 2em">用户索包含多个检索词的情况与以上单个索词的情늱|先做单个索词的检索,然后Ҏ索式中检索符L要求q行必要的布操作或其他操作?/p> <p style="text-indent: 2em"></p> </div> <div id="wiswqyo" class="g_p_center" style="width: 760px"></div> </div> <img src ="http://www.tkk7.com/cuichang/aggbug/237559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cuichang/" target="_blank">cc</a> 2008-10-30 11:34 <a href="http://www.tkk7.com/cuichang/archive/2008/10/30/237559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>who am i和whoami区别 http://www.tkk7.com/cuichang/archive/2008/10/19/235359.htmlccccSun, 19 Oct 2008 15:32:00 GMThttp://www.tkk7.com/cuichang/archive/2008/10/19/235359.htmlhttp://www.tkk7.com/cuichang/comments/235359.htmlhttp://www.tkk7.com/cuichang/archive/2008/10/19/235359.html#Feedback0http://www.tkk7.com/cuichang/comments/commentRss/235359.htmlhttp://www.tkk7.com/cuichang/services/trackbacks/235359.html
who am i 昄的是实际用户ID即用L陆的时候的用户ID
whoami   昄的是有效用户ID.
但在大多数情况下Q实际用户ID和有效用户ID是一致的?/div>
 
?/div>
login:zhx
Pssword:
$who am i
zhx     pts/0    2007-08-16   13:16   (:0.0)
$whoami
zhx
当切换用户后Q?/div>
su
Password:
#who am i
zhx     pts/0   007-08-16   13:16  (:0.0)
#whoami
root
 
也可以说who am i  昄的是切换用户前的实际登陆的用户ID,whoami是切换后的有效的用户IDQ此时此l端h切换后用L讉K权限Q如本文中切换后则具有超U用L讉K权限?/div>
 


who am i ?/span>whoami有何区别Q?/span>

 

首先要说?/span>uid?/span>euidQ?/span>effective user idQ的区别?/span>uid是?/span>login的时候用的idQ?/span>euid则是你当前的有效id。因为登录后我们可以使用su切换用户w䆾Q所?/span>uid?/span>euid可能是不同的Q程序在q行的时候一般看的都?/span>euidQ当然也有特出的Q?/span>who am i是一个?/span>

举个例子Q用LABC登陆Q?/span>su变成rootQ用who am i看到的是ABCQ?/span>whoami命o看到的是root?/span>

login: u1

Password:

$ su

Password:

# /usr/ucb/whoami

root

# who am i

u1         pts/4        10?/span> 31 23:18   (192.168.0.1)



cc 2008-10-19 23:32 发表评论
]]>window.opener ?window.parent的区?/title><link>http://www.tkk7.com/cuichang/archive/2008/09/24/230918.html</link><dc:creator>cc</dc:creator><author>cc</author><pubDate>Wed, 24 Sep 2008 08:16:00 GMT</pubDate><guid>http://www.tkk7.com/cuichang/archive/2008/09/24/230918.html</guid><wfw:comment>http://www.tkk7.com/cuichang/comments/230918.html</wfw:comment><comments>http://www.tkk7.com/cuichang/archive/2008/09/24/230918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cuichang/comments/commentRss/230918.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cuichang/services/trackbacks/230918.html</trackback:ping><description><![CDATA[ <img src ="http://www.tkk7.com/cuichang/aggbug/230918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cuichang/" target="_blank">cc</a> 2008-09-24 16:16 <a href="http://www.tkk7.com/cuichang/archive/2008/09/24/230918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse实用快捷键大?/title><link>http://www.tkk7.com/cuichang/archive/2007/01/20/95022.html</link><dc:creator>cc</dc:creator><author>cc</author><pubDate>Sat, 20 Jan 2007 01:01:00 GMT</pubDate><guid>http://www.tkk7.com/cuichang/archive/2007/01/20/95022.html</guid><wfw:comment>http://www.tkk7.com/cuichang/comments/95022.html</wfw:comment><comments>http://www.tkk7.com/cuichang/archive/2007/01/20/95022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cuichang/comments/commentRss/95022.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cuichang/services/trackbacks/95022.html</trackback:ping><description><![CDATA[俗话?工欲善其事,必先利其?如果大家对开发程序稍微有点发烧的?都知道快捷键对编E中有多大的作用?当然当年Dos用natepad开发程序的除外?,我就是这样一个发烧友? 对各UIDE中的快捷功能颇感兴趣,其是对快捷键这一部分乐此不彼?再加上Eclipse又是本h的最?因此Eclipse中的快捷键就是本人重视的重点?当然,Eclipse的快捷键暂时不是最强的,本h见过快捷键最优秀的IDEq是当属IDEA?里面的快捷键为程序员考虑的面面俱?几乎C只要你想不到,没有按不到的地步??好像l它做广告了).不过说实话很多功能都是Eclipse借鉴Ideaq来的了.但至今我发现在快捷键q方面和别的开发方面Eclipseq是E逊一{了(q仅仅是从Java IDE的角?,废话说,直接切入正题了.<br /><br />今天写的q些快捷键都是本人在实际q用中ȝ出来?自己感觉很实?都是以自q喜好E度来排列了,对于的Eclipse如果没有特别说明都用有 Eclipse3.0.X以上?个别如果出现不符合的话要么是版本的问?要么是和别的pȝU的快捷键有冲突,譬如输入法的冲突?q时需要修改输入法?下面的快捷键都是EclipseҎ?其是针对Java Editer?但有些对Eclipse里面的Text也是实用的了,下面是q些快捷键了(?q些快捷键随着自己学习不断的深入和Eclipse版本不断的提高会慢慢的完善的,有些太普通的没有列出来,如Ctrl+A一c?:<br /><br />Ctrl+1 快速修?最l典的快捷键,׃用多说了)<br /><br />Ctrl+D: 删除当前?<br /><br />Ctrl+Alt+?复制当前行到下一?复制增加)<br /><br />Ctrl+Alt+?复制当前行到上一?复制增加)<br /><br />Alt+?当前行和下面一行交互位|?特别实用,可以省去先剪?再粘贴了)<br /><br />Alt+?当前行和上面一行交互位|?同上)<br /><br />Alt+?前一个编辑的面<br /><br />Alt+?下一个编辑的面(当然是针对上面那条来说了)<br /><br />Alt+Enter 昄当前选择资源(工程,or 文g or文g)的属?br /><br />Shift+Enter 在当前行的下一行插入空?q时鼠标可以在当前行的Q一位置,不一定是最?<br /><br />Shift+Ctrl+Enter 在当前行插入I(原理同上?<br /><br />Ctrl+Q 定位到最后编辑的地方<br /><br />Ctrl+L 定位在某?(对于E序过100的h有音?<br /><br />Ctrl+M 最大化当前的Edit或View (再按则反?<br /><br />Ctrl+/ 注释当前?再按则取消注?br /><br />Ctrl+O 快速显C?OutLine<br /><br />Ctrl+T 快速显C当前类的承结?br /><br />Ctrl+W 关闭当前Editer<br /><br />Ctrl+K 参照选中的Word快速定位到下一?br /><br />Ctrl+E 快速显C当前Editer的下拉列?如果当前面没有昄的用黑体表示)<br /><br />Ctrl+/(键? 折叠当前cM的所有代?br /><br />Ctrl+×(键? 展开当前cM的所有代?br /><br />Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代?<br /><br />Ctrl+Shift+E 昄理当前打开的所有的View的管理器(可以选择关闭,Ȁzȝ操作)<br /><br />Ctrl+J 正向增量查找(按下Ctrl+J?你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显C没有找C,查一个单词时,特别实用,q个功能Idea两年前就有了)<br /><br />Ctrl+Shift+J 反向增量查找(和上条相?只不q是从后往前查)<br /><br />Ctrl+Shift+F4 关闭所有打开的Editer<br /><br />Ctrl+Shift+X 把当前选中的文本全部变呛_?br /><br />Ctrl+Shift+Y 把当前选中的文本全部变为小?br /><br />Ctrl+Shift+F 格式化当前代?br /><br />Ctrl+Shift+P 定位到对于的匚wW?譬如{}) (从前面定位后面时,光标要在匚wW里?后面到前?则反?<br /><br />下面的快捷键是重构里面常用的,本hp己喜Ƣ且常用的整理一??一般重构的快捷键都是Alt+Shift开头的?<br /><br />Alt+Shift+R 重命?(是我自己最q的一个了,其是变量和cȝRename,比手工方法能节省很多力_?<br /><br />Alt+Shift+M 抽取Ҏ (q是重构里面最常用的方法之一?其是对一大堆泥团代码有用)<br /><br />Alt+Shift+C 修改函数l构(比较实用,有N个函数调用了q个Ҏ,修改一ơ搞?<br /><br />Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变?其是多处调用的时?<br /><br />Alt+Shift+F 把Class中的local变量变ؓfield变量 (比较实用的功?<br /><br />Alt+Shift+I 合ƈ变量(可能q样说有点不妥Inline)<br /><br />Alt+Shift+V Ud函数和变?不怎么常用)<br /><br />Alt+Shift+Z 重构的后悔药(Undo)BR><img src ="http://www.tkk7.com/cuichang/aggbug/95022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cuichang/" target="_blank">cc</a> 2007-01-20 09:01 <a href="http://www.tkk7.com/cuichang/archive/2007/01/20/95022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://zbhongtai.com" target="_blank">ۺɫɫ</a>| <a href="http://jogador1.com" target="_blank">ëƬר</a>| <a href="http://www-741.com" target="_blank">þ޾Ʒ</a>| <a href="http://wwwkk2347.com" target="_blank">ŷƵ߹ۿ</a>| <a href="http://haiholr.com" target="_blank">һƬaѲſ֮</a>| <a href="http://gzmsijz.com" target="_blank">߹ۿ˳Ƶڵ</a>| <a href="http://77133144.com" target="_blank">۾ƷҹӰ</a>| <a href="http://805ios.com" target="_blank">һ϶</a>| <a href="http://ju7776.com" target="_blank">99ƷƵ߹ۿ</a>| <a href="http://www-36664.com" target="_blank">޳߲</a>| <a href="http://v1s3u5.com" target="_blank">þþþþaŷa</a>| <a href="http://xmm5pkt.com" target="_blank">ƬվɫƬ</a>| <a href="http://my533.com" target="_blank">ȫaëƬѿ</a>| <a href="http://ynrygc.com" target="_blank">av뾫Ʒۺ</a>| <a href="http://aqdav22.com" target="_blank">þþƷav鶹</a>| <a href="http://jogador1.com" target="_blank">ҹڵ</a>| <a href="http://amgzh.com" target="_blank">ڵƵ </a>| <a href="http://yiren2233.com" target="_blank">޾Ʒa߹ۿ</a>| <a href="http://vankiz.com" target="_blank">þþƷ뾫Ʒר</a>| <a href="http://yy1288.com" target="_blank">av뾫Ʒַ</a>| <a href="http://wwwzs88.com" target="_blank">޹ۺרߵӰ</a>| <a href="http://kdltuliao.com" target="_blank">avƬ߲</a>| <a href="http://dszb0099.com" target="_blank">þþƷëƬѹۿ</a>| <a href="http://www-006688.com" target="_blank">avרavëƬ </a>| <a href="http://onisterwines.com" target="_blank">ƷĻѹۿҹ</a>| <a href="http://zjfxjy.com" target="_blank">޾ƷþþþYW</a>| <a href="http://7766ks.com" target="_blank">ۺϾƷһ</a>| <a href="http://dt677.com" target="_blank">޵һƵ߹ۿ</a>| <a href="http://www026qqcom.com" target="_blank">߿Ƭ˳Ƶ</a>| <a href="http://520xiang.com" target="_blank">ĻƵѹۿ</a>| <a href="http://7778tv.com" target="_blank">žžƷAVպ</a>| <a href="http://www19977.com" target="_blank">ҹƵ</a>| <a href="http://xjscr.com" target="_blank">ۺС˵ɫ</a>| <a href="http://kelingdq.com" target="_blank">aëƬ</a>| <a href="http://xyyfamily.com" target="_blank">Ļ벻Ƶ</a>| <a href="http://cykj-tech.com" target="_blank">þƵƷ</a>| <a href="http://zgbeian.com" target="_blank">㽶Ƶѿ</a>| <a href="http://jjv5.com" target="_blank">ĻӰӾþþ</a>| <a href="http://www-xg5777.com" target="_blank">޾Ʒavɫ</a>| <a href="http://hljc988.com" target="_blank">þ4438 </a>| <a href="http://4eeyy.com" target="_blank">Ļ˾Ʒ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>