<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_嵌入天地</title><subtitle type="text">-----&gt;&gt;&gt;&gt;&gt;嵌入式 文学 管理 米国 卡通 以及其他 公益广告:你可知道,看帖回复和评论是一种美德! 另，兄弟姐妹们，假如有技术问题交流，请直接发送到我的信箱!</subtitle><id>http://feed.cnblogs.com/blog/u/9388/rss</id><updated>2012-02-01T06:27:59Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/9388/rss"/><entry><id>http://www.cnblogs.com/hpunix/archive/2012/02/01/2334507.html</id><title type="text">PMP之思维――我的PMP备考之旅</title><summary type="text">很庆幸，在石老师（石泉）和徐老师的指导下，及个人的近三月于苦读下，参加了2011、12、10日的PMP考试，于2011、1、13日收到了意内，但是又有点意外的Congratulation, 成绩是4P1M，估计应该是通过的中上等，但是不得不考虑，这个P仅仅是一个相对值，而不是对某个领域真正掌握的真正如何。书归正传，之前，因为工作上的需要，两三年之前，接触过PMP，感觉挺好玩的，当时停留在简单的应用上，觉得PMP这东西，就是将项目管理这种抽象的东西，人为的给程式化了，用着蛮容易量化的，凡是项目喜欢弄个风险矩阵显摆显摆（那个时候大部分国内公司不大注重风险这块，知道的很少）；这不，最近获悉，公司支持</summary><published>2012-02-01T06:27:00Z</published><updated>2012-02-01T06:27:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/archive/2012/02/01/2334507.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/archive/2012/02/01/2334507.html"/><content type="html">&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;很庆幸，在石老师（石泉）和徐老师的指导下，及个人的近三月于苦读下，参加了&lt;/span&gt;&lt;span lang="EN-US"&gt;2011&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;10&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;日的&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;考试，于&lt;/span&gt;&lt;span lang="EN-US"&gt;2011&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;13&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;日收到了意内，但是又有点意外的&lt;/span&gt;&lt;span lang="EN-US"&gt;Congratulation, &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;成绩是&lt;/span&gt;&lt;span lang="EN-US"&gt;4P1M&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，估计应该是通过的中上等，但是不得不考虑，这个&lt;/span&gt;&lt;span lang="EN-US"&gt;P&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;仅仅是一个相对值，而不是对某个领域真正掌握的真正如何。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;书归正传，之前，因为工作上的需要，两三年之前，接触过&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，感觉挺好玩的，当时停留在简单的应用上，觉得&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这东西，就是将项目管理这种抽象的东西，人为的给程式化了，用着蛮容易量化的，凡是项目喜欢弄个风险矩阵显摆显摆（那个时候大部分国内公司不大注重风险这块，知道的很少）；这不，最近获悉，公司支持考&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;呀，并且过了全报销，那就考吧，可别过了这个村，没了这个店。于是乎，就以最快的速度报了名，领了书和资料。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;先说复习吧，刚开始根据先前应付考试的经验，按照&lt;/span&gt;&lt;span lang="EN-US"&gt;PDCA&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的周期，分三个步骤，大约也就是看三遍书（因为也就两、三个月，时间不是大大的有呀，这个可是时间限制型项目）。直接看一遍课本；读一遍蓝宝书，顺便看完后面的习题（中间对照教材，当是第二遍看书，并且穿插着听课），大查漏，同时建立考试思维，看石老师说的和自己理解的，关于考的重点是不是一致；第三轮，就是做卓越的模拟题，小补缺。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第一遍，看书。因为之前接触过这个东西，深知是很枯燥的，只得硬着头皮，每天定计划看吧，基本一天可以过一章（大约&lt;/span&gt;&lt;span lang="EN-US"&gt;30&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页），看到中后部的时候心里有点发毛，不知道看书效果如何，感觉为了看书而看书，检查吧，发的资料和蓝宝书上面的试题又舍不得做，因为考虑到后面有一个系统性的轮廓之后，做那些东西才更有意义。就到网上下了一个汪博士的分章试题，一章题目做和核对答案也就半个小时搞定了，这个时候，竟然惊讶的发现，我的神，感觉都觉得明白和看懂的东西，正确率基本在一半左右徘徊呀。当然，这个阶段，我也没有深究试题为什么做错和作对，而是把做错的记录下来，另册保留，作为一个结果，我也明白了，哦，题目原来也是可以这样考得。因为看书效果不好，该阶段回炉一次。简言之，该阶段，更重要的是能够建立起一个大的&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的知识架构，同时能够清楚，题目会是怎么样的方式出，进而明白，看书是很重要的（一句话都有可能是一个题目额，看书热情空前提高）。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第二遍，蓝宝书。这个阶段中穿插了，针对考试的提高化。根据我个人的感觉，想通过，蓝宝书习题外部分仔细看，加上石老师的讲课好好听，是绝对没有问题的。因为是书是带重点和知识面扩展的，讲课呢，是将抽象的项目管理程式化的&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的再一次程式化，是精华中的精华了（不是托）。期间，有几个小插曲。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第一个呢是，因为我的性子里是个知其然而必想知其所以然的主，所以老师讲的，书上说的一些对我比较新的东东，又到电脑上&lt;/span&gt;&lt;span lang="EN-US"&gt;GOOGLE&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;了一把，像什么&lt;/span&gt;&lt;span lang="EN-US"&gt;X&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;理论，&lt;/span&gt;&lt;span lang="EN-US"&gt;Y&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;理论呀，而这些东西，以人力资源管理和质量管理为多（事后想，其实这两个领域能够考得很广的），这个结合&lt;/span&gt;&lt;span lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;月的考试来说，功力有点浪费，&lt;/span&gt;&lt;span lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;月考得更多的是深，而不是广。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第二个呢，网上偶得一个号称&lt;/span&gt;&lt;span lang="EN-US"&gt;9000&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;块钱培训资料的&lt;/span&gt;&lt;span lang="EN-US"&gt;PDF&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的东东，其实这个东西不是说的多么好，而内容呢，基本是石老师讲的那些，然后呢有好多是从题目总结的出来的一些答题思路（有好多直接看像是废话，废话不废话，后面咱会提到）。其实，现在想起来，石老师的课，还是有点时间太紧，让石老师有点不能完全发挥和覆盖到额。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第三个呢，我被有幸和不幸被选为了第八小组的组长（有点遗憾和愧疚，没有能够组织多少活动）。现在我确实理解了，假如，是想考考玩玩的，这个小组完全可以不参加，完全可以不积极；假如是想考过的，特别是针对时间很紧的童鞋们，这个确实是一个非常好的方法，为嘛呢？&lt;/span&gt;&lt;span lang="EN-US"&gt;A: &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;每个人都有一个思维和学习的盲区，什么叫盲区呢，就是某个，某些问题，你可能费好大劲，都搞不明白；而其他一部分人可以根据自己的思维方式，很容易的记住，理解。实际上，每个人之间的这些盲区基本是不相同的的。小组交流可以扫除，和简化这些盲区的理解和记忆。&lt;/span&gt;&lt;span lang="EN-US"&gt; B. &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;学问，学问，没有交流，何来学问呢。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;前两遍下来，感觉也差不多了，蓝宝书的题目也正确率很高了，感觉差不多了，就转到了第三步（这个时间大约过去了接近&lt;/span&gt;&lt;span lang="EN-US"&gt;2/3&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;, &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;说来也巧，第一次做模拟题，碰上了石老师的第四模拟题，后面看起来是有点小难的（卓越的简章上说，后期模拟题需要对到&lt;/span&gt;&lt;span lang="EN-US"&gt;150&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个左右），我第四模拟题做下来才&lt;/span&gt;&lt;span lang="EN-US"&gt;115&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个左右，都不够及格线，当时有点懵，有点无措，不知道咋办了，并且有好多题目返回头看，不知道考得是什么东西，书上也直接找不到。&lt;/span&gt;&lt;span lang="EN-US"&gt;Sigh! &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;痛定思痛，考虑了&lt;/span&gt;&lt;span lang="EN-US"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;天后，决定再度扩展一下，找了&lt;/span&gt;&lt;span lang="EN-US"&gt;Rita&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP FASTrack&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，估计有&lt;/span&gt;&lt;span lang="EN-US"&gt;1700&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;道题目左右（能做多少做多少），按照&lt;/span&gt;&lt;span lang="EN-US"&gt;5&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个阶段，然后分别做，一遍作对的放过，一遍做错，但是能够理解的记录思路，放过，多遍不理解的强制记忆。结果整理了一个各个过程的一个零星知识点（接上文，和先前&lt;/span&gt;&lt;span lang="EN-US"&gt;9000&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的培训资料里的废话，很像，很多重合的；并且后面很多最新的真题讲解里面，直接套上就能用，也满实用的，就是过程比较费时间）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;还有后面模拟题，我把它当成一个检测的工具。当然，我在没有扩展&lt;/span&gt;&lt;span lang="EN-US"&gt;1700&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个题目之前，觉得那些模拟题，应该是石老师从网上，或者往年题拼凑来的，要不么，都有&lt;/span&gt;&lt;span lang="EN-US"&gt;10&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;套左右（看编号，不知道是不是真的有哦），不过，看过&lt;/span&gt;&lt;span lang="EN-US"&gt;1700&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;之后，才知道，是真正的精挑细选过了，过程我没有看见，但是质量真的不是一个层面的。反正，上面的错题，我都仔细思考和理解过了（当然，一套题上总有&lt;/span&gt;&lt;span lang="EN-US"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;道，感觉老师给的答案不是太对，没有说，呵呵）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;2011&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;10&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;日，记得还算是有阳光，不过天气是清冷的（考场没得空调和暖气，凉快的很呀），拿到试卷一看，我赛，一百多页，并且感觉见过的题目很少，就一个一个的做把，&lt;/span&gt;&lt;span lang="EN-US"&gt;110&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个左右（一半左右的时间），忍不住，放松一下，放放氺，喝了一杯咖啡，然后另外一半时间做了剩余的&lt;/span&gt;&lt;span lang="EN-US"&gt;90&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个，将先前标记没有把握的重新优选了一下（其实，是不知道考什么的题目，&lt;/span&gt;&lt;span lang="EN-US"&gt;2011&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;10&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;日的题目，即使考完，感觉真正有把握的额题目不到&lt;/span&gt;&lt;span lang="EN-US"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;成，整个一个跟着感觉走），直到成绩出之前，都在嘀咕到底过还是不过。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;忘了，题目中加了一个&amp;#8220;&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;之思维&amp;#8221;，整个过程里面没有突出，突出一下。针对&lt;/span&gt;&lt;span lang="EN-US"&gt;2011&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;年&lt;/span&gt;&lt;span lang="EN-US"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;月&lt;/span&gt;&lt;span lang="EN-US"&gt;10&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;日这种考试来说，我可以说是歪打正着，因为他的题目和之前完全重复上的少之又少，另外呢&lt;/span&gt;&lt;span lang="EN-US"&gt;PM&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的日常工作，就是能从繁杂，而看不出优先级的工作中，挑出重点（题目那个长呀，你能很快的扫一遍，然后确定他说的什么东西，并且错误率很低，这个也考了）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第一遍复习，我建立了&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;思维之框架，知道&lt;/span&gt;&lt;span lang="EN-US"&gt;9&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;领域，&lt;/span&gt;&lt;span lang="EN-US"&gt;5&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;过程的轮廓（书是按照领域划分的哦，不知是&lt;/span&gt;&lt;st1:stockticker&gt;&lt;span lang="EN-US"&gt;PMI&lt;/span&gt;&lt;/st1:stockticker&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;有意还是无意，确实是有帮助的）。第二遍复习，我在&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;思维框架之上，补充了细节，听课，蓝宝书，一个都不能少。第三遍呢，我尝试把&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;横过来了，按照过程来理解；每个过程之间呢，整理了好多小主题（叫他答题思路也好，&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;思维也好，反正是这么个东东）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;最后，感谢石老师！感谢程希！感谢过所有在&lt;/span&gt;&lt;span lang="EN-US"&gt;PMP&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;之路上帮助过我的人！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2334507.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/archive/2012/02/01/2334507.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2110324.html</id><title type="text">十分钟掌握diff&amp;amp;patch用法(转)</title><summary type="text">From:http://huoding.com作者:老王作为程序员，了解diff&amp;amp;patch命令是非常必要的。比如说我们发现某个项目有bug代码，而自己又没有svn的提交权限，那么此时最合适的解决方法就是用diff命令做一个补丁发给项目成员。项目成员通过patch命令可以立刻知道你的意图。有人会说直接传一个新文件不是更简单？不要忘了，一个patch文件尺寸更小传输更快，而且可以明显的看到都做了哪些修改。保证当前目录是demo名录：# mkdir demo# cd demo先模拟一个项目目录old：# mkdir -p old/a/b# vi old/a/b/foo.txtold_lin</summary><published>2011-07-19T02:57:00Z</published><updated>2011-07-19T02:57:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2110324.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2110324.html"/><content type="html">&lt;p&gt;From:http://huoding.com&lt;/p&gt;&#xD;
&lt;p&gt;作者:老王&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;作为程序员，了解&lt;a href="http://linux.die.net/man/1/diff" target="_blank"&gt;diff&lt;/a&gt;&amp;amp;&lt;a href="http://linux.die.net/man/1/patch" target="_blank"&gt;patch&lt;/a&gt;命令是非常必要的。比如说我们发现某个项目有bug代码，而自己又没有svn的提交权限，那么此时最合适的解决方法就是用diff命令做一个补丁发给项目成员。项目成员通过patch命令可以立刻知道你的意图。有人会说直接传一个新文件不是更简单？不要忘了，一个patch文件尺寸更小传输更快，而且可以明显的看到都做了哪些修改。&lt;br /&gt;&lt;br /&gt;保证当前目录是demo名录：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# mkdir demo&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# cd demo&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;先模拟一个项目目录old：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# mkdir -p old/a/b&lt;br /&gt;# vi old/a/b/foo.txt&lt;br /&gt;old_line_1&lt;br /&gt;old_line_2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;假设我们发现项目old有bug代码，下面我们先拷贝一个新目录new，并在此修改bug代码：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# cp -r old new&lt;br /&gt;# vi new/a/b/foo.txt&lt;br /&gt;new_line_1&lt;br /&gt;new_line_2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;保证old和new两个目录都在当前目录下，下面就可以使用diff命令了，不要使用绝对路径，而应该使用相对路径，至于原因，看到文章结尾你就清楚了：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# LC_ALL=C TZ=UTC0 &lt;/span&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;diff -Naur old new &amp;gt; foo.patch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;如果不在意字符集，时差等问题，也可以省略LC_ALL=C TZ=UTC0环境变量：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# diff -Naur old new &amp;gt; foo.patch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;其中-Naur参数属于固定打法，不管是对一个文件，还是对一个目录，在使用这个参数基本就可以了。&lt;br /&gt;&lt;br /&gt;大概浏览一下补丁文件：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# cat foo.patch&lt;br /&gt;diff -Naur old/a/b/foo.txt new/a/b/foo.txt&lt;br /&gt;--- old/a/b/foo.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2009-12-07 20:40:07.000000000 +0800&lt;br /&gt;+++ new/a/b/foo.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2009-12-07 20:41:51.000000000 +0800&lt;br /&gt;@@ -1,2 +1,2 @@&lt;br /&gt;-old_line_1&lt;br /&gt;-old_line_2&lt;br /&gt;+new_line_1&lt;br /&gt;+new_line_2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;加减号后面的内容是有用的内容，其他的内容是方便你查阅的相关信息内容，补丁制作完成。&lt;br /&gt;&lt;br /&gt;此时的文件目录结构大概如下所示：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;#tree&lt;br /&gt;demo&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;|-- old&lt;br /&gt;|&amp;nbsp;&amp;nbsp; `-- a&lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `-- b&lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `-- foo.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;|-- new&lt;br /&gt;|&amp;nbsp;&amp;nbsp; `-- a&lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `-- b&lt;br /&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `-- foo.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;`&lt;/span&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;-- foo.patch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;下面看看如何使用patch来应用补丁，要注意的是当前目录是demo，试试下面命令：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# patch -p0 &amp;lt; foo.patch&lt;br /&gt;patching file old/a/b/foo.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这里唯一需要说明的是p0的含义，因为在foo.patch补丁文件里的路径信息是这样的：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;--- old/a/b/foo.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;p表示跳过几级目录，因为是在demo目录下使用的patch命令，old目录就在demo目录下，所以不必跳过任何目录，而应该使用old/a/b/foo.txt完整路径，所以此时使用的是p0。&lt;br /&gt;&lt;br /&gt;查看一下目标文件，你会发现内容已经修改成新的了：&lt;br /&gt;&lt;br /&gt;# cat old/a/b/foo.txt&lt;br /&gt;new_line_1&lt;br /&gt;new_line_2&lt;br /&gt;&lt;br /&gt;此时如果你再次使用patch命令，系统会问你是否想还原：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# patch -p0 &amp;lt; foo.patch&lt;br /&gt;patching file old/a/b/foo.txt&lt;br /&gt;Reversed (or previously applied) patch detected!&amp;nbsp; Assume -R? [n] y&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;查看一下目标文件，你会发现内容已经还原成旧的了：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# cat old/a/b/foo.txt&lt;br /&gt;old_line_1&lt;br /&gt;old_line_2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;如果你想严格指定是应用补丁可以使用下面命令（就是增加N参数）：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# patch -Np0 &amp;lt; foo.patch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;如果你想严格指定是还原补丁可以使用下面命令（就是增加R参数）：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# patch -Rp0 &amp;lt; foo.patch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;注释：在本例中，每次应用补丁后，自己还原补丁，以备后用继续试验，我就不多说了。&lt;br /&gt;&lt;br /&gt;看到这里如果你对patch的p参数还不太清楚的话，接着往下看，我们改变一下当前路径：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# cd old&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;此时就应该是p1，而不是p0了，引用foo.patch文件的路径也要相对变一下，因为当前目录已经是old了：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# patch -p1 &amp;lt; ../foo.patch&lt;br /&gt;patching file a/b/foo.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;因为此时我们是在old下使用patch命令，和a子目录平级，而补丁文件foo.patch里的路径声明是：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;--- old/a/b/foo.txt&lt;br /&gt;&lt;br /&gt;也就是说第一个斜线左边的old/部分已经没用了，这就是p1的含义！&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;继续往深度变换路径，依次测试使用p2,p3参数：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# cd a&lt;br /&gt;&lt;br /&gt;# patch -p2 &amp;lt; http://www.cnblogs.com/foo.patch&lt;br /&gt;patching file b/foo.txt&lt;br /&gt;&lt;br /&gt;# cd b&lt;br /&gt;&lt;br /&gt;# patch -p3 &amp;lt; http://www.cnblogs.com/../foo.patch&lt;br /&gt;patching file foo.txt&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;在本例中，p3已经是最深目录了，此时可以省略p参数：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;# patch &amp;lt;&lt;/span&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt; http://www.cnblogs.com/../foo.patch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;" face="宋体"&gt;patching file foo.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;也就是说，不使用p参数的时候，patch命令会忽略任何目录，直接使用文件。&lt;br /&gt;&lt;br /&gt;下面接着文章前面说的为什么使用diff命令时最好不要使用绝对路径，而应该使用相对路径？&lt;br /&gt;&lt;br /&gt;答：如果你在使用diff的时候使用的是绝对路径，那么补丁文件里的文件路径信息会类似下面的样子：&lt;br /&gt;&lt;br /&gt;--- /a/b/c/d/e/f/g/bar.txt&lt;br /&gt;&lt;br /&gt;如此一来，当别人想应用你的补丁时，因为目录结构肯定有差异，所以就不得不费力判断到底使用p几。这样一来就很容易出错，相反，如果使用相对路径的话，大多数时候，p0或者p1就足够了，不易出错。&lt;br /&gt;&lt;br /&gt;跟着本文的步骤操作一下，肯定能掌握diff&amp;amp;patch用法，基本上使用diff时就是"diff -Naur FROM TO"（FROM, TO为变量）这样的固定打法，然后在使用patch的时候，先看看补丁文件的大致内容，结合当前目录以确定需要跳过的目录数，然后套用"patch -pN &amp;lt; patch.file"（N为变量）即可。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2110324.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2110324.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109690.html</id><title type="text">LDS文件语法规则</title><summary type="text">最近在看Linux内核时，总是遇到一些和连接脚本相关的东东，搞得人一头雾水，终于下定决心把它搞明白，写下一点心得，希望对和我一样的人有所帮助！ 连接脚本的格式====================连接脚本是文本文件.你写了一系列的命令作为一个连接脚本. 每一个命令是一个带有参数的关键字,或者是一个对符号的赋值. 你可以用分号分隔命令. 空格一般被忽略.文件名或格式名之类的字符串一般可以被直接键入. 如果文件名含有特殊字符,比如一般作为分隔文件名用的逗号, 你可以把文件名放到双引号中. 文件名中间无法使用双引号.你可以象在C语言中一样,在连接脚本中使用注释, 用&amp;#39;/*&amp;#39;和&amp;#3</summary><published>2011-07-18T08:31:00Z</published><updated>2011-07-18T08:31:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109690.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109690.html"/><content type="html">&lt;p&gt;最近在看Linux内核时，总是遇到一些和连接脚本相关的东东，搞得人一头雾水，终于下定决心把它搞明白，写下一点心得，希望对和我一样的人有所帮助！ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;连接脚本的格式&lt;br /&gt;====================&lt;/p&gt;&#xD;
&lt;p&gt;连接脚本是文本文件.&lt;/p&gt;&#xD;
&lt;p&gt;你写了一系列的命令作为一个连接脚本. 每一个命令是一个带有参数的关键字,或者是一个对符号的赋值. 你可&lt;br /&gt;以用分号分隔命令. 空格一般被忽略.&lt;/p&gt;&#xD;
&lt;p&gt;文件名或格式名之类的字符串一般可以被直接键入. 如果文件名含有特殊字符,比如一般作为分隔文件名用的逗&lt;br /&gt;号, 你可以把文件名放到双引号中. 文件名中间无法使用双引号.&lt;/p&gt;&#xD;
&lt;p&gt;你可以象在C语言中一样,在连接脚本中使用注释, 用'/*'和'*/'隔开. 就像在C中,注释在语法上等同于空格.&lt;/p&gt;&#xD;
&lt;p&gt;简单的连接脚本示例&lt;br /&gt;============================&lt;/p&gt;&#xD;
&lt;p&gt;许多脚本是相当的简单的.&lt;/p&gt;&#xD;
&lt;p&gt;可能的最简单的脚本只含有一个命令: 'SECTIONS'. 你可以使用'SECTIONS'来描述输出文件的内存布局.&lt;/p&gt;&#xD;
&lt;p&gt;'SECTIONS'是一个功能很强大的命令. 这里这们会描述一个很简单的使用. 让我们假设你的程序只有代码节,&lt;br /&gt;初始化过的数据节, 和未初始化过的数据节. 这些会存在于'.text','.data'和'.bss'节, 另外, 让我们进一&lt;br /&gt;步假设在你的输入文件中只有这些节.&lt;/p&gt;&#xD;
&lt;p&gt;对于这个例子, 我们说代码应当被载入到地址'0x10000'处, 而数据应当从0x8000000处开始. 下面是一个实现&lt;br /&gt;这个功能的脚本:&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = 0x10000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text : { *(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = 0x8000000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data : { *(.data) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .bss : { *(.bss) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;你使用关键字'SECTIONS'写了这个SECTIONS命令, 后面跟有一串放在花括号中的符号赋值和输出节描述的内容.&lt;/p&gt;&#xD;
&lt;p&gt;上例中, 在'SECTIONS'命令中的第一行是对一个特殊的符号'.'赋值, 这是一个定位计数器. 如果你没有以其&lt;br /&gt;它的方式指定输出节的地址(其他方式在后面会描述), 那地址值就会被设为定位计数器的现有值. 定位计数器&lt;br /&gt;然后被加上输出节的尺寸. 在'SECTIONS'命令的开始处, 定位计数器拥有值'0'.&lt;/p&gt;&#xD;
&lt;p&gt;第二行定义一个输出节,'.text'. 冒号是语法需要,现在可以被忽略. 节名后面的花括号中,你列出所有应当被&lt;br /&gt;放入到这个输出节中的输入节的名字. '*'是一个通配符,匹配任何文件名. 表达式'*(.text)'意思是所有的输&lt;br /&gt;入文件中的'.text'输入节.&lt;/p&gt;&#xD;
&lt;p&gt;因为当输出节'.text'定义的时候, 定位计数器的值是'0x10000',连接器会把输出文件中的'.text'节的地址设&lt;br /&gt;为'0x10000'.&lt;/p&gt;&#xD;
&lt;p&gt;余下的内容定义了输出文件中的'.data'节和'.bss'节. 连接器会把'.data'输出节放到地址'0x8000000'处. 连接&lt;br /&gt;器放好'.data'输出节之后, 定位计数器的值是'0x8000000'加上'.data'输出节的长度. 得到的结果是连接器会&lt;br /&gt;把'.bss'输出节放到紧接'.data'节后面的位置.&lt;/p&gt;&#xD;
&lt;p&gt;连接器会通过在必要时增加定位计数器的值来保证每一个输出节具有它所需的对齐. 在这个例子中, 为'.text'&lt;br /&gt;和'.data'节指定的地址会满足对齐约束, 但是连接器可能会需要在'.data'和'.bss'节之间创建一个小的缺口.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;就这样,这是一个简单但完整的连接脚本.&lt;/p&gt;&#xD;
&lt;p&gt;简单的连接脚本命令.&lt;br /&gt;=============================&lt;/p&gt;&#xD;
&lt;p&gt;在本章中,我们会描述一些简单的脚本命令.&lt;/p&gt;&#xD;
&lt;p&gt;设置入口点.&lt;br /&gt;-----------------------&lt;/p&gt;&#xD;
&lt;p&gt;在运行一个程序时第一个被执行到的指令称为"入口点". 你可以使用'ENTRY'连接脚本命令来设置入口点.参数&lt;br /&gt;是一个符号名:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENTRY(SYMBOL)&lt;/p&gt;&#xD;
&lt;p&gt;有多种不同的方法来设置入口点.连接器会通过按顺序尝试以下的方法来设置入口点, 如果成功了,就会停止.&lt;/p&gt;&#xD;
&lt;p&gt;* `-e'入口命令行选项;&lt;/p&gt;&#xD;
&lt;p&gt;* 连接脚本中的`ENTRY(SYMBOL)'命令;&lt;/p&gt;&#xD;
&lt;p&gt;* 如果定义了start, 就使用start的值;&lt;/p&gt;&#xD;
&lt;p&gt;* 如果存在,就使用'.text'节的首地址;&lt;/p&gt;&#xD;
&lt;p&gt;* 地址`0'.&lt;/p&gt;&#xD;
&lt;p&gt;处理文件的命令.&lt;br /&gt;---------------------------&lt;/p&gt;&#xD;
&lt;p&gt;有几个处理文件的连接脚本命令.&lt;/p&gt;&#xD;
&lt;p&gt;`INCLUDE FILENAME'&lt;br /&gt;在当前点包含连接脚本文件FILENAME. 在当前路径下或用'-L'选项指定的所有路径下搜索这个文件,&lt;br /&gt;你可以嵌套使用'INCLUDE'达10层.&lt;/p&gt;&#xD;
&lt;p&gt;`INPUT(FILE, FILE, ...)'&lt;br /&gt;`INPUT(FILE FILE ...)'&lt;br /&gt;'INPUT'命令指示连接器在连接时包含文件, 就像它们是在命令行上指定的一样.&lt;/p&gt;&#xD;
&lt;p&gt;比如,如果你在连接的时候总是要包含文件'subr.o',但是你对每次连接时要在命令行上输入感到厌烦&lt;br /&gt;, 你就可以在你的连接脚本中输入'INPUT (subr.o).&lt;/p&gt;&#xD;
&lt;p&gt;事实上,如果你喜欢,你可以把你所有的输入文件列在连接脚本中, 然后在连接的时候什么也不需要,&lt;br /&gt;只要一个'-T'选项就够了.&lt;/p&gt;&#xD;
&lt;p&gt;在一个'系统根前缀'被配置的情况下, 一个文件名如果以'/'字符打头, 并且脚本也存放在系统根&lt;br /&gt;前缀的某个子目录下, 文件名就会被在系统根前缀下搜索. 否则连接器就会企图打开当前目录下的文&lt;br /&gt;件. 如果没有发现, 连接器会通过档案库搜索路径进行搜索.&lt;/p&gt;&#xD;
&lt;p&gt;如果你使用了'INPUT (-lFILE)', 'ld'会把文件名转换为'libFILE.a', 就象命令行参数'-l'一样.&lt;/p&gt;&#xD;
&lt;p&gt;当你在一个隐式连接脚本中使用'INPUT'命令的时候, 文件就会在连接时连接脚本文件被包含的点上&lt;br /&gt;被包含进来. 这会影响到档案搜索.&lt;/p&gt;&#xD;
&lt;p&gt;`GROUP(FILE, FILE, ...)'&lt;br /&gt;`GROUP(FILE FILE ...)'&lt;br /&gt;除了文件必须全是档案文件之外, 'GROUP'命令跟'INPUT'相似, 它们会被反复搜索,直至没有未定义&lt;br /&gt;的引用被创建.&lt;/p&gt;&#xD;
&lt;p&gt;`OUTPUT(FILENAME)'&lt;br /&gt;'OUTPUT'命令命名输出文件. 在连接脚本中使用'OUTPUT(FILENAME)'命令跟在命令行中使用'-o &lt;br /&gt;FILENAME'命令是完全等效的. 如果两个都使用了, 那命令行选项优先.&lt;/p&gt;&#xD;
&lt;p&gt;你可以使用'OUTPUT'命令为输出文件创建一个缺省的文件名,而不是常用的'a.out'.&lt;/p&gt;&#xD;
&lt;p&gt;`SEARCH_DIR(PATH)'&lt;br /&gt;`SEARCH_DIR'命令给'ld'用于搜索档案文件的路径中再增加新的路径. 使用`SEARCH_DIR(PATH)'跟在&lt;br /&gt;命令行上使用'-L PATH'选项是完全等效的. 如果两个都使用了, 那连接器会两个路径都搜索. 用命&lt;br /&gt;令行选项指定的路径首先被搜索.&lt;/p&gt;&#xD;
&lt;p&gt;`STARTUP(FILENAME)'&lt;br /&gt;除了FILENAME会成为第一个被连接的输入文件, 'STARTUP'命令跟'INPUT'命令完全相似, 就象这个文&lt;br /&gt;件是在命令行上第一个被指定的文件一样. 如果在一个系统中, 入口点总是存在于第一个文件中,那&lt;br /&gt;这个就很有用.&lt;/p&gt;&#xD;
&lt;p&gt;处理目标文件格式的命令.&lt;br /&gt;-----------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;有两个处理目标文件格式的连接脚本命令.&lt;/p&gt;&#xD;
&lt;p&gt;`OUTPUT_formAT(BFDNAME)'&lt;br /&gt;`OUTPUT_formAT(DEFAULT, BIG, LITTLE)'&lt;br /&gt;`OUTPUT_formAT'命令为输出文件使用的BFD格式命名. 使用`OUTPUT_formAT(BFDNAME)'跟在命令行上&lt;br /&gt;使用'-oformat BFDNAME'是完全等效的. 如果两个都使用了, 命令行选项优先.&lt;/p&gt;&#xD;
&lt;p&gt;你可在使用`OUTPUT_formAT'时带有三个参数以使用不同的基于'-EB'和'-EL'的命令行选项的格式.&lt;/p&gt;&#xD;
&lt;p&gt;如果'-EB'和'-EL'都没有使用, 那输出格式会是第一个参数DEFAULT, 如果使用了'-EB',输出格式会是&lt;br /&gt;第二个参数BIG, 如果使用了'-EL', 输出格式会是第三个参数, LITTLE.&lt;/p&gt;&#xD;
&lt;p&gt;比如, 缺省的基于MIPS ELF平台连接脚本使用如下命令:&lt;/p&gt;&#xD;
&lt;p&gt;OUTPUT_formAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这表示缺省的输出文件格式是'elf32-bigmips', 但是当用户使用'-EL'命令行选项的时候, 输出文件就会&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 被以`elf32-littlemips'格式创建.&lt;/p&gt;&#xD;
&lt;p&gt;`TARGET(BFDNAME)'&lt;br /&gt;'TARGET'命令在读取输入文件时命名BFD格式. 它会影响到后来的'INPUT'和'GROUP'命令. 这个命令跟&lt;br /&gt;在命令行上使用`-b BFDNAME'相似. 如果使用了'TARGET'命令但`OUTPUT_formAT'没有指定, 最后的&lt;br /&gt;'TARGET'命令也被用来设置输出文件的格式.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;其它的连接脚本命令.&lt;br /&gt;----------------------------&lt;/p&gt;&#xD;
&lt;p&gt;还有一些其它的连接脚本命令.&lt;/p&gt;&#xD;
&lt;p&gt;`ASSERT(EXP, MESSAGE)'&lt;br /&gt;确保EXP不等于零,如果等于零, 连接器就会返回一个错误码退出,并打印出MESSAGE.&lt;/p&gt;&#xD;
&lt;p&gt;`EXTERN(SYMBOL SYMBOL ...)'&lt;br /&gt;强制SYMBOL作为一个无定义的符号输入到输出文件中去. 这样做了,可能会引发从标准库中连接一些&lt;br /&gt;节外的库. 你可以为每一个EXTERN'列出几个符号, 而且你可以多次使用'EXTERN'. 这个命令跟'-u'&lt;br /&gt;命令行选项具有相同的效果.&lt;/p&gt;&#xD;
&lt;p&gt;`FORCE_COMMON_ALLOCATION'&lt;br /&gt;这个命令跟命令行选项'-d'具有相同的效果: 就算指定了一个可重定位的输出文件('-r'),也让'ld'&lt;br /&gt;为普通符号分配空间.&lt;/p&gt;&#xD;
&lt;p&gt;`INHIBIT_COMMON_ALLOCATION'&lt;br /&gt;这个命令跟命令行选项`--no-define-common'具有相同的效果: 就算是一个不可重位输出文件, 也让&lt;br /&gt;'ld'忽略为普通符号分配的空间.&lt;/p&gt;&#xD;
&lt;p&gt;`NOCROSSREFS(SECTION SECTION ...)'&lt;br /&gt;这个命令在遇到在某些特定的节之间引用的时候会产生一条错误信息.&lt;/p&gt;&#xD;
&lt;p&gt;在某些特定的程序中, 特别是在使用覆盖技术的嵌入式系统中, 当一个节被载入内存时,另外一个节&lt;br /&gt;就不会在内存中. 任何在两个节之间的直接引用都会是一个错误. 比如, 如果节1中的代码调用了另&lt;br /&gt;一个节中的一个函数,这就会产生一个错误.&lt;/p&gt;&#xD;
&lt;p&gt;`NOCROSSREFS'命令带有一个输出节名字的列表. 如果'ld'遇到任何在这些节之间的交叉引用, 它就&lt;br /&gt;会报告一个错误,并返回一个非零退出码. 注意, `NOCROSSREFS'命令使用输出节名,而不是输入节名.&lt;/p&gt;&#xD;
&lt;p&gt;`OUTPUT_ARCH(BFDARCH)'&lt;br /&gt;指定一个特定的输出机器架构. 这个参数是BFD库中使用的一个名字. 你可以通过使用带有'-f'选项&lt;br /&gt;的'objdump'程序来查看一个目标文件的架构.&lt;/p&gt;&#xD;
&lt;p&gt;为符号赋值.&lt;br /&gt;===========================&lt;/p&gt;&#xD;
&lt;p&gt;你可以在一个连接脚本中为一个符号赋一个值. 这会把一个符号定义为一个全局符号.&lt;/p&gt;&#xD;
&lt;p&gt;简单的赋值.&lt;br /&gt;------------------&lt;/p&gt;&#xD;
&lt;p&gt;你可以使用所有的C赋值符号为一个符号赋值.&lt;/p&gt;&#xD;
&lt;p&gt;`SYMBOL = EXPRESSION ;'&lt;br /&gt;`SYMBOL += EXPRESSION ;'&lt;br /&gt;`SYMBOL -= EXPRESSION ;'&lt;br /&gt;`SYMBOL *= EXPRESSION ;'&lt;br /&gt;`SYMBOL /= EXPRESSION ;'&lt;br /&gt;`SYMBOL &amp;lt;&amp;lt;= EXPRESSION ;'&lt;br /&gt;`SYMBOL &amp;gt;&amp;gt;= EXPRESSION ;'&lt;br /&gt;`SYMBOL &amp;amp;= EXPRESSION ;'&lt;br /&gt;`SYMBOL |= EXPRESSION ;'&lt;/p&gt;&#xD;
&lt;p&gt;第一个情况会把SYMBOL定义为值EXPRESSION. 其它情况下, SYMBOL必须是已经定义了的, 而值会作出相应的调&lt;br /&gt;整.&lt;/p&gt;&#xD;
&lt;p&gt;特殊符号名'.'表示定位计数器. 你只可以在'SECTIONS'命令中使用它.&lt;/p&gt;&#xD;
&lt;p&gt;EXPRESSION后面的分号是必须的.&lt;/p&gt;&#xD;
&lt;p&gt;表达式下面会定义.&lt;/p&gt;&#xD;
&lt;p&gt;你在写表达式赋值的时候,可以把它们作为单独的部分,也可以作为'SECTIONS'命令中的一个语句,或者作为&lt;br /&gt;'SECTIONS'命令中输出节描述的一个部分.&lt;/p&gt;&#xD;
&lt;p&gt;符号所在的节会被设置成表达式所在的节.&lt;/p&gt;&#xD;
&lt;p&gt;下面是一个关于在三处地方使用符号赋值的例子:&lt;/p&gt;&#xD;
&lt;p&gt;floating_point = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _etext = .;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bdata = (. + 3) &amp;amp; ~ 3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data : { *(.data) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;在这个例子中, 符号`floating_point'被定义为零. 符号'-etext'会被定义为前面一个'.text'节尾部的地址.&lt;br /&gt;而符号'_bdata'会被定义为'.text'输出节后面的一个向上对齐到4字节边界的一个地址值.&lt;/p&gt;&#xD;
&lt;p&gt;PROVIDE&lt;br /&gt;-------&lt;/p&gt;&#xD;
&lt;p&gt;在某些情况下, 一个符号被引用到的时候只在连接脚本中定义,而不在任何一个被连接进来的目标文件中定&lt;br /&gt;义. 这种做法是比较明智的. 比如, 传统的连接器定义了一个符号'etext'. 但是, ANSI C需要用户能够把&lt;br /&gt;'etext'作为一个函数使用而不会产生错误. 'PROVIDE'关键字可以被用来定义一个符号, 比如'etext', 这个&lt;br /&gt;定义只在它被引用到的时候有效,而在它被定义的时候无效.语法是 `PROVIDE(SYMBOL = EXPRESSION)'.&lt;/p&gt;&#xD;
&lt;p&gt;下面是一个关于使用'PROVIDE'定义'etext'的例子:&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _etext = .;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PROVIDE(etext = .);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;在这个例子中, 如果程序定义了一个'_etext'(带有一个前导下划线), 连接器会给出一个重定义错误. 如果,&lt;br /&gt;程序定义了一个'etext'(不带前导下划线), 连接器会默认使用程序中的定义. 如果程序引用了'etext'但不&lt;br /&gt;定义它, 连接器会使用连接脚本中的定义.&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS命令&lt;br /&gt;================&lt;/p&gt;&#xD;
&lt;p&gt;'SECTIONS'命令告诉连接器如何把输入节映射到输出节, 并如何把输出节放入到内存中.&lt;/p&gt;&#xD;
&lt;p&gt;'SECTIONS'命令的格式如下:&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;每一个SECTIONS-COMMAND可能是如下的一种:&lt;/p&gt;&#xD;
&lt;p&gt;* 一个'ENTRY'命令.&lt;/p&gt;&#xD;
&lt;p&gt;* 一个符号赋值.&lt;/p&gt;&#xD;
&lt;p&gt;* 一个输出节描述.&lt;/p&gt;&#xD;
&lt;p&gt;* 一个重叠描述.&lt;/p&gt;&#xD;
&lt;p&gt;'ENTRY'命令和符号赋值在'SECTIONS'命令中是允许的, 这是为了方便在这些命令中使用定位计数器. 这也可&lt;br /&gt;以让连接脚本更容易理解, 因为你可以在更有意义的地方使用这些命令来控制输出文件的布局.&lt;/p&gt;&#xD;
&lt;p&gt;输出节描述和重叠描述在下面描述.&lt;/p&gt;&#xD;
&lt;p&gt;如果你在连接脚本中不使用'SECTIONS'命令, 连接器会按在输入文件中遇到的节的顺序把每一个输入节放到同&lt;br /&gt;名的输出节中. 如果所有的输入节都在第一个文件中存在,那输出文件中的节的顺序会匹配第一个输入文件中&lt;br /&gt;的节的顺序. 第一个节会在地址零处.&lt;/p&gt;&#xD;
&lt;p&gt;输出节描述&lt;br /&gt;--------------------------&lt;/p&gt;&#xD;
&lt;p&gt;一个完整的输出节的描述应该是这个样子的:&lt;/p&gt;&#xD;
&lt;p&gt;SECTION [ADDRESS] [(TYPE)] : [AT(LMA)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } [&amp;gt;REGION] [AT&amp;gt;LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]&lt;/p&gt;&#xD;
&lt;p&gt;大多数输出节不使用这里的可选节属性.&lt;/p&gt;&#xD;
&lt;p&gt;SECTION边上的空格是必须的, 所以节名是明确的. 冒号跟花括号也是必须的. 断行和其他的空格是可选的.&lt;/p&gt;&#xD;
&lt;p&gt;每一个OUTPUT-SECTION-COMMAND可能是如下的情况:&lt;/p&gt;&#xD;
&lt;p&gt;* 一个符号赋值.&lt;/p&gt;&#xD;
&lt;p&gt;* 一个输入节描述.&lt;/p&gt;&#xD;
&lt;p&gt;* 直接包含的数据值.&lt;/p&gt;&#xD;
&lt;p&gt;* 一个特定的输出节关键字.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;输出节名.&lt;br /&gt;-------------------&lt;/p&gt;&#xD;
&lt;p&gt;输出节的名字是SECTION. SECTION必须满足你的输出格式的约束. 在一个只支持限制数量的节的格式中,比如&lt;br /&gt;'a.out',这个名字必须是格式支持的节名中的一个(比如, 'a.out'只允许'.text', '.data'或'.bss').如果&lt;br /&gt;输出格式支持任意数量的节, 但是只支持数字,而没有名字(就像Oasys中的情况), 名字应当以一个双引号中的&lt;br /&gt;数值串的形式提供.一个节名可以由任意数量的字符组成,但是一个含有任意非常用字符(比如逗号)的字句必须&lt;br /&gt;用双引号引起来.&lt;/p&gt;&#xD;
&lt;p&gt;输出节描述&lt;br /&gt;--------------------------&lt;/p&gt;&#xD;
&lt;p&gt;ADDRESS是关于输出节中VMS的一个表达式. 如果你不提供ADDRESS, 连接器会基于REGION(如果存在)设置它,或&lt;br /&gt;者基于定位计数器的当前值.&lt;/p&gt;&#xD;
&lt;p&gt;如果你提供了ADDRESS, 那输出节的地址会被精确地设为这个值. 如果你既不提供ADDRESS也不提供REGION, 那&lt;br /&gt;输出节的地址会被设为当前的定位计数器向上对齐到输出节需要的对齐边界的值. 输出节的对齐要求是所有输&lt;br /&gt;入节中含有的对齐要求中最严格的一个.&lt;/p&gt;&#xD;
&lt;p&gt;比如:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text . : { *(.text) }&lt;/p&gt;&#xD;
&lt;p&gt;和&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text : { *(.text) }&lt;/p&gt;&#xD;
&lt;p&gt;有细微的不同. 第一个会把'.text'输出节的地址设为当前定位计数器的值. 第二个会把它设为定位计数器的&lt;br /&gt;当前值向上对齐到'.text'输入节中对齐要求最严格的一个边界.&lt;/p&gt;&#xD;
&lt;p&gt;ADDRESS可以是任意表达式; 比如,如果你需要把节对齐对0x10字节边界,这样就可以让低四字节的节地址值为&lt;br /&gt;零, 你可以这样做:&lt;/p&gt;&#xD;
&lt;p&gt;.text ALIGN(0x10) : { *(.text) }&lt;/p&gt;&#xD;
&lt;p&gt;这个语句可以正常工作,因为'ALIGN'返回当前的定位计数器,并向上对齐到指定的值.&lt;/p&gt;&#xD;
&lt;p&gt;指定一个节的地址会改变定位计数器的值.&lt;/p&gt;&#xD;
&lt;p&gt;输入节描述&lt;br /&gt;-------------------------&lt;/p&gt;&#xD;
&lt;p&gt;最常用的输出节命令是输入节描述.&lt;/p&gt;&#xD;
&lt;p&gt;输入节描述是最基本的连接脚本操作. 你使用输出节来告诉连接器在内存中如何布局你的程序. 你使用输入节&lt;br /&gt;来告诉连接器如何把输入文件映射到你的内存中.&lt;/p&gt;&#xD;
&lt;p&gt;输入节基础&lt;br /&gt;---------------------------&lt;/p&gt;&#xD;
&lt;p&gt;一个输入节描述由一个文件名后跟有可选的括号中的节名列表组成.&lt;/p&gt;&#xD;
&lt;p&gt;文件名和节名可以通配符形式出现, 这个我们以后再介绍.&lt;/p&gt;&#xD;
&lt;p&gt;最常用的输入节描述是包含在输出节中的所有具有特定名字的输入节. 比如, 包含所有输入'.text'节,你可以&lt;br /&gt;这样写:&lt;/p&gt;&#xD;
&lt;p&gt;*(.text)&lt;/p&gt;&#xD;
&lt;p&gt;这里,'*'是一个通配符,匹配所有的文件名. 为把一部分文件排除在匹配的名字通配符之外, EXCLUDE_FILE可&lt;br /&gt;以用来匹配所有的除了在EXCLUDE_FILE列表中指定的文件.比如:&lt;/p&gt;&#xD;
&lt;p&gt;(*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors))&lt;/p&gt;&#xD;
&lt;p&gt;会让除了`crtend.o'文件和`otherfile.o'文件之外的所有的文件中的所有的.ctors节被包含进来.&lt;/p&gt;&#xD;
&lt;p&gt;有两种方法包含多于一个的节:&lt;/p&gt;&#xD;
&lt;p&gt;*(.text .rdata)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.text) *(.rdata)&lt;/p&gt;&#xD;
&lt;p&gt;上面两句的区别在于'.text'和'.rdata'输入节的输出节中出现的顺序不同. 在第一个例子中, 两种节会交替&lt;br /&gt;出现,并以连接器的输入顺序排布. 在第二个例子中,所有的'.text'输入节会先出现,然后是所有的'.rdata'节.&lt;/p&gt;&#xD;
&lt;p&gt;你可以指定文件名,以从一个特定的文件中包含节. 如果一个或多个你的文件含有特殊的数据在内存中需要特&lt;br /&gt;殊的定位,你可以这样做. 比如:&lt;/p&gt;&#xD;
&lt;p&gt;data.o(.data)&lt;/p&gt;&#xD;
&lt;p&gt;如果你使用一个不带有节列表的文件名, 那输入文件中的所有的节会被包含到输出节中. 通常不会这样做, 但&lt;br /&gt;是在某些场合下这个可能非常有用. 比如:&lt;/p&gt;&#xD;
&lt;p&gt;data.o&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;当你使用一个不含有任何通配符的文件名时, 连接器首先会查看你是否在连接命令行上指定了文件名或者在&lt;br /&gt;'INPUT'命令中. 如果你没有, 连接器会试图把这个文件作为一个输入文件打开, 就像它在命令行上出现一样.&lt;br /&gt;注意这跟'INPUT'命令不一样, 因为连接器会在档案搜索路径中搜索文件.&lt;/p&gt;&#xD;
&lt;p&gt;输入节通配符&lt;br /&gt;---------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;在一个输入节描述中, 文件名或者节名,或者两者同时都可以是通配符形式.&lt;/p&gt;&#xD;
&lt;p&gt;文件名通配符'*'在很多例子中都可以看到,这是一个简单的文件名通配符形式.&lt;/p&gt;&#xD;
&lt;p&gt;通配符形式跟Unix Shell中使用的一样.&lt;/p&gt;&#xD;
&lt;p&gt;`*'&lt;br /&gt;匹配任意数量的字符.&lt;/p&gt;&#xD;
&lt;p&gt;`?'&lt;br /&gt;匹配单个字符.&lt;/p&gt;&#xD;
&lt;p&gt;`[CHARS]'&lt;br /&gt;匹配CHARS中的任意单个字符; 字符'-'可以被用来指定字符的方讧, 比如[a-z]匹配任意小字字符.&lt;/p&gt;&#xD;
&lt;p&gt;`\'&lt;br /&gt;转义其后的字符.&lt;/p&gt;&#xD;
&lt;p&gt;当一个文件名跟一个通配符匹配时, 通配符字符不会匹配一个'/'字符(在UNIX系统中用来分隔目录名), 一个&lt;br /&gt;含有单个'*'字符的形式是个例外; 它总是匹配任意文件名, 不管它是否含有'/'. 在一个节名中, 通配符字&lt;br /&gt;符会匹配'/'字符.&lt;/p&gt;&#xD;
&lt;p&gt;文件名通配符只匹配那些在命令行或在'INPUT'命令上显式指定的文件. 连接器不会通过搜索目录来展开通配&lt;br /&gt;符.&lt;/p&gt;&#xD;
&lt;p&gt;如果一个文件名匹配多于一个通配符, 或者如果一个文件名显式出现同时又匹配了一个通配符, 连接器会使用&lt;br /&gt;第一次匹配到的连接脚本. 比如, 下面的输入节描述序列很可能就是错误的,因为'data.o'规则没有被使用:&lt;/p&gt;&#xD;
&lt;p&gt;.data : { *(.data) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data1 : { data.o(.data) }&lt;/p&gt;&#xD;
&lt;p&gt;通常, 连接器会把匹配通配符的文件和节按在连接中被看到的顺序放置. 你可以通过'SORT'关键字改变它, 它&lt;br /&gt;出现在括号中的通配符之前(比如, 'SORT(.text*)'). 当'SORT'关键字被使用时, 连接器会在把文件和节放到&lt;br /&gt;输出文件中之前按名字顺序重新排列它们.&lt;/p&gt;&#xD;
&lt;p&gt;如果你对于输入节被放置到哪里去了感到很困惑, 那可以使用'-M'连接选项来产生一个位图文件. 位图文件会&lt;br /&gt;精确显示输入节是如何被映射到输出节中的.&lt;/p&gt;&#xD;
&lt;p&gt;这个例子显示了通配符是如何被用来区分文件的. 这个连接脚本指示连接器把所有的'.text'节放到'.text'中, 把所有的'.bss'节放到'.bss'. 连接器会把所有的来自文件名以一个大写字母开始的文件中的'.data'节放进'.DATA'节中; 对于所有其他文件, 连接器会把'.data'节放进'.data'节中.&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text : { *(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .DATA : { [A-Z]*(.data) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data : { *(.data) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .bss : { *(.bss) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;输入节中的普通符号.&lt;br /&gt;-----------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;对于普通符号,需要一个特殊的标识, 因为在很多目标格式中, 普通符号没有一个特定的输入节. 连接器会把&lt;br /&gt;普通符号处理成好像它们在一个叫做'COMMON'的节中.&lt;/p&gt;&#xD;
&lt;p&gt;你可能像使用带有其他输入节的文件名一样使用带有'COMMON'节的文件名。你可以通过这个把来自一个特定输&lt;br /&gt;入文件的普通符号放入一个节中，同时把来自其它输入文件的普通符号放入另一个节中。&lt;/p&gt;&#xD;
&lt;p&gt;在大多数情况下，输入文件中的普通符号会被放到输出文件的'.bss'节中。比如：&lt;/p&gt;&#xD;
&lt;p&gt;.bss { *(.bss) *(COMMON) }&lt;/p&gt;&#xD;
&lt;p&gt;有些目标文件格式具有多于一个的普通符号。比如，MIPS ELF目标文件格式区分标准普通符号和小普通符号。&lt;br /&gt;在这种情况下，连接器会为其他类型的普通符号使用一个不同的特殊节名。 在MIPS ELF的情况中， 连接器&lt;br /&gt;为标准普通符号使用'COMMON'，并且为小普通符号使用'.common'。这就允许你把不同类型的普通符号映射到&lt;br /&gt;内存的不同位置。&lt;/p&gt;&#xD;
&lt;p&gt;在一些老的连接脚本上，你有时会看到'[COMMON]'。这个符号现在已经过时了， 它等效于'*(COMMON)'。&lt;/p&gt;&#xD;
&lt;p&gt;输入节和垃圾收集&lt;br /&gt;---------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;当连接时垃圾收集正在使用中时（'--gc-sections')，这在标识那些不应该被排除在外的节时非常有用。这&lt;br /&gt;是通过在输入节的通配符入口外面加上'KEEP()'实现的，比如'KEEP(*(.init))'或者'KEEP(SORT(*)(.sorts))&lt;br /&gt;'。&lt;/p&gt;&#xD;
&lt;p&gt;输入节示例&lt;br /&gt;---------------------&lt;/p&gt;&#xD;
&lt;p&gt;接下来的例子是一个完整的连接脚本。它告诉连接器去读取文件'all.o'中的所有节，并把它们放到输出节&lt;br /&gt;'outputa'的开始位置处， 该输出节是从位置'0x10000'处开始的。 从文件'foo.o'中来的所有节'.input1'&lt;br /&gt;在同一个输出节中紧密排列。 从文件'foo.o'中来的所有节'.input2'全部放入到输出节'outputb'中，后面&lt;br /&gt;跟上从'foo1.o'中来的节'.input1'。来自所有文件的所有余下的'.input1'和'.input2'节被写入到输出节&lt;br /&gt;'outputc'中。&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputa 0x10000 :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; all.o&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foo.o (.input1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputb :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foo.o (.input2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foo1.o (.input1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputc :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.input1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.input2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;输出节数据&lt;br /&gt;-------------------&lt;/p&gt;&#xD;
&lt;p&gt;你可以通过使用输出节命令'BYTE','SHORT','LONG','QUAD',或者'SQUAD'在输出节中显式包含几个字节的数据&lt;br /&gt;每一个关键字后面都跟上一个圆括号中的要存入的值。表达式的值被存在当前的定位计数器的值处。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lsquo;BYTE&amp;rsquo;，&amp;lsquo;SHORT&amp;rsquo;，&amp;lsquo;LONG&amp;rsquo;&amp;lsquo;QUAD&amp;rsquo;命令分别存储一个，两个，四个，八个字节。存入字节后，定位计&lt;br /&gt;数器的值加上被存入的字节数。&lt;/p&gt;&#xD;
&lt;p&gt;比如，下面的命令会存入一字节的内容1,后面跟上四字节，其内容是符号'addr'的值。&lt;/p&gt;&#xD;
&lt;p&gt;BYTE(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG(addr)&lt;/p&gt;&#xD;
&lt;p&gt;当使用64位系统时，&amp;lsquo;QUAD&amp;rsquo;和&amp;lsquo;SQUAD&amp;rsquo;是相同的；它们都会存储8字节，或者说是64位的值。而如果软硬件&lt;br /&gt;系统都是32位的，一个表达式就会被作为32位计算。在这种情况下，&amp;lsquo;QUAD&amp;rsquo;存储一个32位值，并把它零扩展&lt;br /&gt;到64位， 而&amp;lsquo;SQUAD&amp;rsquo;会把32位值符号扩展到64位。&lt;/p&gt;&#xD;
&lt;p&gt;如果输出文件的目标文件格式有一个显式的endianness，它在正常的情况下，值就会被以这种endianness存储&lt;br /&gt;当一个目标文件格式没有一个显式的endianness时, 值就会被以第一个输入目标文件的endianness存储。&lt;/p&gt;&#xD;
&lt;p&gt;注意， 这些命令只在一个节描述内部才有效，而不是在它们之间， 所以，下面的代码会使连接器产生一个错&lt;br /&gt;误信息：&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } }&lt;/p&gt;&#xD;
&lt;p&gt;而这个才是有效的：&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } }&lt;/p&gt;&#xD;
&lt;p&gt;你可能使用&amp;lsquo;FILL&amp;rsquo;命令来为当前节设置填充样式。它后面跟有一个括号中的表达式。任何未指定的节内内存&lt;br /&gt;区域（比如，因为输入节的对齐要求而造成的裂缝）会以这个表达式的值进行填充。一个'FILL'语句会覆盖到&lt;br /&gt;它本身在节定义中出现的位置后面的所有内存区域；通过引入多个&amp;lsquo;FILL&amp;rsquo;语句，你可以在输出节的不同位置&lt;br /&gt;拥有不同的填充样式。&lt;/p&gt;&#xD;
&lt;p&gt;这个例子显示如何在未被指定的内存区域填充'0x90'：&lt;/p&gt;&#xD;
&lt;p&gt;FILL(0x90909090)&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lsquo;FILL&amp;rsquo;命令跟输出节的&amp;lsquo;=FILLEXP&amp;rsquo;属性相似，但它只影响到节内跟在&amp;lsquo;FILL&amp;rsquo;命令后面的部分，而不是&lt;br /&gt;整个节。如果两个都用到了，那&amp;lsquo;FILL&amp;rsquo;命令优先。&lt;/p&gt;&#xD;
&lt;p&gt;输出节关键字&lt;br /&gt;-----------------------&lt;/p&gt;&#xD;
&lt;p&gt;有两个关键字作为输出节命令的形式出现。&lt;/p&gt;&#xD;
&lt;p&gt;`CREATE_OBJECT_SYMBOLS'&lt;br /&gt;这个命令告诉连接器为每一个输入文件创建一个符号。而符号的名字正好就是相关输入文件的名字。&lt;br /&gt;而每一个符号的节就是`CREATE_OBJECT_SYMBOLS'命令出现的那个节。&lt;/p&gt;&#xD;
&lt;p&gt;这个命令一直是a.out目标文件格式特有的。 它一般不为其它的目标文件格式所使用。&lt;/p&gt;&#xD;
&lt;p&gt;`CONSTRUCTORS'&lt;br /&gt;当使用a.out目标文件格式进行连接的时候， 连接器使用一组不常用的结构以支持C++的全局构造函&lt;br /&gt;数和析构函数。当连接不支持专有节的目标文件格式时， 比如ECOFF和XCOFF，连接器会自动辩识C++&lt;br /&gt;全局构造函数和析构函数的名字。对于这些目标文件格式，&amp;lsquo;CONSTRUCTORS&amp;rsquo;命令告诉连接器把构造&lt;br /&gt;函数信息放到&amp;lsquo;CONSTRUCTORS&amp;rsquo;命令出现的那个输出节中。对于其它目标文件格式，&amp;lsquo;CONSTRUCTORS&amp;rsquo;&lt;br /&gt;命令被忽略。&lt;/p&gt;&#xD;
&lt;p&gt;符号`__CTOR_LIST__'标识全局构造函数的开始，而符号`__DTOR_LIST'标识结束。这个列表的第一个&lt;br /&gt;WORD是入口的数量，紧跟在后面的是每一个构造函数和析构函数的地址，再然后是一个零WORD。编译&lt;br /&gt;器必须安排如何实际运行代码。对于这些目标文件格式，GNU C++通常从一个`__main'子程序中调用&lt;br /&gt;构造函数，而对`__main'的调用自动被插入到`main'的启动代码中。GNU C++通常使用'atexit'运行&lt;br /&gt;析构函数，或者直接从函数'exit'中运行。&lt;/p&gt;&#xD;
&lt;p&gt;对于像&amp;lsquo;COFF&amp;rsquo;或&amp;lsquo;ELF&amp;rsquo;这样支持专有节名的目标文件格式，GNU C++通常会把全局构造函数与析构&lt;br /&gt;函数的地址值放到'.ctors'和'.dtors'节中。把下面的代码序列放到你的连接脚本中去，这样会构建&lt;br /&gt;出GNU C++运行时代码希望见到的表类型。&lt;/p&gt;&#xD;
&lt;p&gt;__CTOR_LIST__ = .;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.ctors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG(0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __CTOR_END__ = .;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __DTOR_LIST__ = .;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.dtors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG(0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __DTOR_END__ = .;&lt;/p&gt;&#xD;
&lt;p&gt;如果你正使用GNU C++支持来进行优先初始化，那它提供一些可以控制全局构造函数运行顺序的功能，&lt;br /&gt;你必须在连接时给构造函数排好序以保证它们以正确的顺序被执行。当使用'CONSTRUCTORS'命令时，&lt;br /&gt;替代为`SORT(CONSTRUCTORS)'。当使用'.ctors'和'dtors'节时，使用`*(SORT(.ctors))'和&lt;br /&gt;`*(SORT(.dtors))' 而不是`*(.ctors)'和`*(.dtors)'。&lt;/p&gt;&#xD;
&lt;p&gt;通常，编译器和连接器会自动处理这些事情，并且你不必亲自关心这些事情。但是，当你正在使用&lt;br /&gt;C++，并自己编写连接脚本时，你可能就要考虑这些事情了。&lt;/p&gt;&#xD;
&lt;p&gt;输出节的丢弃。&lt;br /&gt;-------------------------&lt;/p&gt;&#xD;
&lt;p&gt;连接器不会创建那些不含有任何内容的输出节。这是为了引用那些可能出现或不出现在任何输入文件中的输入&lt;br /&gt;节时方便。比如：&lt;/p&gt;&#xD;
&lt;p&gt;.foo { *(.foo) }&lt;/p&gt;&#xD;
&lt;p&gt;如果至少在一个输入文件中有'.foo'节，它才会在输出文件中创建一个'.foo'节&lt;/p&gt;&#xD;
&lt;p&gt;如果你使用了其它的而不是一个输入节描述作为一个输出节命令，比如一个符号赋值，那这个输出节总是被&lt;br /&gt;创建，即使没有匹配的输入节也会被创建。&lt;/p&gt;&#xD;
&lt;p&gt;一个特殊的输出节名`/DISCARD/'可以被用来丢弃输入节。任何被分配到名为`/DISCARD/'的输出节中的输入&lt;br /&gt;节不包含在输出文件中。&lt;/p&gt;&#xD;
&lt;p&gt;输出节属性&lt;br /&gt;-------------------------&lt;/p&gt;&#xD;
&lt;p&gt;上面，我们已经展示了一个完整的输出节描述，看下去就象这样：&lt;/p&gt;&#xD;
&lt;p&gt;SECTION [ADDRESS] [(TYPE)] : [AT(LMA)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } [&amp;gt;REGION] [AT&amp;gt;LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]&lt;/p&gt;&#xD;
&lt;p&gt;我们已经介绍了SECTION, ADDRESS, 和OUTPUT-SECTION-COMMAND. 在这一节中，我们将介绍余下的节属性。&lt;/p&gt;&#xD;
&lt;p&gt;输出节类型&lt;br /&gt;...................&lt;/p&gt;&#xD;
&lt;p&gt;每一个输出节可以有一个类型。类型是一个放在括号中的关键字，已定义的类型如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;`NOLOAD'&lt;br /&gt;这个节应当被标式讵不可载入，所以当程序运行时，它不会被载入到内存中。&lt;/p&gt;&#xD;
&lt;p&gt;`DSECT'&lt;br /&gt;`COPY'&lt;br /&gt;`INFO'&lt;br /&gt;`OVERLAY'&lt;br /&gt;支持这些类型名只是为了向下兼容，它们很少使用。它们都具有相同的效果：这个节应当被标式讵不&lt;br /&gt;可分配，所以当程序运行时，没有内存为这个节分配。&lt;/p&gt;&#xD;
&lt;p&gt;连接器通常基于映射到输出节的输入节来设置输出节的属性。你可以通过使用节类型来重设这个属性，&lt;br /&gt;比如，在下面的脚本例子中，&amp;lsquo;ROM&amp;rsquo;节被定址在内存地址零处，并且在程序运行时不需要被载入。&lt;br /&gt;&amp;lsquo;ROM&amp;rsquo;节的内容会正常出现在连接输出文件中。&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM 0 (NOLOAD) : { ... }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;输出节LMA&lt;br /&gt;..................&lt;/p&gt;&#xD;
&lt;p&gt;每一个节有一个虚地址（VMA）和一个载入地址（LMA）；出现在输出节描述中的地址表达式设置VMS&lt;/p&gt;&#xD;
&lt;p&gt;连接器通常把LMA跟VMA设成相等。你可以通过使用&amp;lsquo;AT&amp;rsquo;关键字改变这个。跟在关键字&amp;lsquo;AT&amp;rsquo;后面的表达式&lt;br /&gt;LMA指定节的载入地址。或者，通过`AT&amp;gt;LMA_REGION'表达式， 你可以为节的载入地址指定一个内存区域。&lt;/p&gt;&#xD;
&lt;p&gt;这个特性是为了便于建立ROM映像而设计的。比如，下面的连接脚本创建了三个输出节：一个叫做&amp;lsquo;.text&amp;rsquo;&lt;br /&gt;从地址&amp;lsquo;0x1000&amp;rsquo;处开始，一个叫&amp;lsquo;.mdata&amp;rsquo;，尽管它的VMA是'0x2000'，它会被载入到'.text'节的后面，最&lt;br /&gt;后一个叫做&amp;lsquo;.bss&amp;rsquo;是用来放置未初始化的数据的，其地址从'0x3000'处开始。符号'_data'被定义为值&lt;br /&gt;'0x2000', 它表示定位计数器的值是VMA的值，而不是LMA。&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text 0x1000 : { *(.text) _etext = . ; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .mdata 0x2000 :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AT ( ADDR (.text) + SIZEOF (.text) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { _data = . ; *(.data); _edata = . ;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .bss 0x3000 :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { _bstart = . ;&amp;nbsp; *(.bss) *(COMMON) ; _bend = . ;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;这个连接脚本产生的程序使用的运行时初始化代码会包含象下面所示的一些东西，以把初始化后的数据从ROM&lt;br /&gt;映像中拷贝到它的运行时地址中去。注意这节代码是如何利用好连接脚本定义的符号的。&lt;/p&gt;&#xD;
&lt;p&gt;extern char _etext, _data, _edata, _bstart, _bend;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *src = &amp;amp;_etext;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *dst = &amp;amp;_data;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ROM has data at end of text; copy it. */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (dst &amp;lt; &amp;amp;_edata) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dst++ = *src++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Zero bss */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (dst = &amp;amp;_bstart; dst&amp;lt; &amp;amp;_bend; dst++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dst = 0;&lt;/p&gt;&#xD;
&lt;p&gt;输出节区域&lt;br /&gt;.....................&lt;/p&gt;&#xD;
&lt;p&gt;你可以通过使用`&amp;gt;REGION'把一个节赋给前面已经定义的一个内存区域。&lt;/p&gt;&#xD;
&lt;p&gt;这里有一个简单的例子:&lt;/p&gt;&#xD;
&lt;p&gt;MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS { ROM : { *(.text) } &amp;gt;rom }&lt;/p&gt;&#xD;
&lt;p&gt;输出节Phdr&lt;br /&gt;...................&lt;/p&gt;&#xD;
&lt;p&gt;你可以通过使用`:PHDR'把一个节赋给前面已定义的一个程序段。如果一个节被赋给一个或多个段，那后来分&lt;br /&gt;配的节都会被赋给这些段，除非它们显式使用了':PHDR'修饰符。你可以使用':NONE'来告诉连接器不要把节&lt;br /&gt;放到任何一个段中。&lt;/p&gt;&#xD;
&lt;p&gt;这儿有一个简单的例子：&lt;/p&gt;&#xD;
&lt;p&gt;PHDRS { text PT_LOAD ; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS { .text : { *(.text) } :text }&lt;/p&gt;&#xD;
&lt;p&gt;输出段填充&lt;br /&gt;...................&lt;/p&gt;&#xD;
&lt;p&gt;你可以通过使用'=FILLEXP'为整个节设置填充样式。FILLEXP是一个表达式。任何没有指定的输出段内的内存&lt;br /&gt;区域（比如，因为输入段的对齐要求而产生的裂缝）会被填入这个值。如果填充表达式是一个简单的十六进制&lt;br /&gt;值，比如，一个以'0x'开始的十六进制数字组成的字符串，并且尾部不是'k'或'M'，那一个任意的十六进制数&lt;br /&gt;字长序列可以被用来指定填充样式；前导零也变为样式的一部分。对于所有其他的情况，包含一个附加的括号&lt;br /&gt;或一元操作符'+'，那填充样式是表达式的最低四字节的值。在所有的情况下，数值是big-endian.&lt;/p&gt;&#xD;
&lt;p&gt;你还可以通过在输出节命令中使用'FILL'命令来改变填充值。&lt;/p&gt;&#xD;
&lt;p&gt;这里是一个简单的例子:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS { .text : { *(.text) } =0x90909090 }&lt;/p&gt;&#xD;
&lt;p&gt;覆盖描述&lt;br /&gt;-------------------&lt;/p&gt;&#xD;
&lt;p&gt;一个覆盖描述提供一个简单的描述办法，以描述那些要被作为一个单独内存映像的一部分载入内存，但是却要&lt;br /&gt;在同一内存地址运行的节。在运行时，一些覆盖管理机制会把要被覆盖的节按需要拷入或拷出运行时内存地址，&lt;br /&gt;并且多半是通过简单地处理内存位。 这个方法可能非常有用，比如在一个特定的内存区域比另一个快时。&lt;/p&gt;&#xD;
&lt;p&gt;覆盖是通过&amp;lsquo;OVERLAY&amp;rsquo;命令进行描述。&amp;lsquo;OVERLAY&amp;rsquo;命令在&amp;lsquo;SECTIONS&amp;rsquo;命令中使用，就像输出段描述一样。&lt;br /&gt;&amp;lsquo;OVERLAY&amp;rsquo;命令的完整语法如下：&lt;/p&gt;&#xD;
&lt;p&gt;OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECNAME1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } [:PHDR...] [=FILL]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECNAME2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT-SECTION-COMMAND&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } [:PHDR...] [=FILL]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } [&amp;gt;REGION] [:PHDR...] [=FILL]&lt;/p&gt;&#xD;
&lt;p&gt;除了&amp;lsquo;OVERLAY&amp;rsquo;关键字，所有的都是可选的，每一个节必须有一个名字（上面的SECNAME1和SECNAME2）。在&lt;br /&gt;&amp;lsquo;OVERLAY&amp;rsquo;结构中的节定义跟通常的&amp;lsquo;SECTIONS&amp;rsquo;结构中的节定义是完全相同的，除了一点，就是在&amp;lsquo;OVERLAY&amp;rsquo;&lt;br /&gt;中没有地址跟内存区域的定义。&lt;/p&gt;&#xD;
&lt;p&gt;节都被定义为同一个开始地址。所有节的载入地址都被排布，使它们在内存中从整个'OVERLAY'的载入地址开&lt;br /&gt;始都是连续的（就像普通的节定义，载入地址是可选的，缺省的就是开始地址；开始地址也是可选的，缺省的&lt;br /&gt;是当前的定位计数器的值。）&lt;/p&gt;&#xD;
&lt;p&gt;如果使用了关键字`NOCROSSREFS'， 并且在节之间存在引用，连接器就会报告一个错误。因为节都运行在同一&lt;br /&gt;个地址上，所以一个节直接引用另一个节中的内容是错误的。&lt;/p&gt;&#xD;
&lt;p&gt;对于'OVERLAY'中的每一个节，连接器自动定义两个符号。符号`__load_start_SECNAME'被定义为节的开始载&lt;br /&gt;入地址。符号`__load_stop_SECNAME'被定义为节的最后载入地址。SECNAME中的不符合C规定的任何字符都将&lt;br /&gt;被删除。C（或者汇编语言）代码可能使用这些符号在必要的时间搬移覆盖代码。&lt;/p&gt;&#xD;
&lt;p&gt;在覆盖区域的最后，定位计数器的值被设为覆盖区域的开始地址加上最大的节的长度。&lt;/p&gt;&#xD;
&lt;p&gt;这里是一个例子。记住这只会出现在&amp;lsquo;SECTIONS&amp;rsquo;结构的内部。&lt;/p&gt;&#xD;
&lt;p&gt;OVERLAY 0x1000 : AT (0x4000)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text0 { o1/*.o(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text1 { o2/*.o(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;这段代码会定义'.text0'和'.text1'，它们都从地址0x1000开始。&amp;lsquo;.text0'会被载入到地址0x4000处，而&lt;br /&gt;'.text1'会被载入到紧随'.text0'后的位置。下面的几个符号会被定义：`__load_start_text0', &lt;br /&gt;`__load_stop_text0', `__load_start_text1', `__load_stop_text1'.&lt;/p&gt;&#xD;
&lt;p&gt;拷贝'.text1'到覆盖区域的C代码看上去可能会像下面这样：&lt;/p&gt;&#xD;
&lt;p&gt;extern char __load_start_text1, __load_stop_text1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memcpy ((char *) 0x1000, &amp;amp;__load_start_text1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;__load_stop_text1 - &amp;amp;__load_start_text1);&lt;/p&gt;&#xD;
&lt;p&gt;注意'OVERLAY'命令只是为了语法上的便利，因为它所做的所有事情都可以用更加基本的命令加以代替。上面&lt;br /&gt;的例子可以用下面的完全特效的写法：&lt;/p&gt;&#xD;
&lt;p&gt;.text0 0x1000 : AT (0x4000) { o1/*.o(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __load_start_text0 = LOADADDR (.text0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __load_start_text1 = LOADADDR (.text1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));&lt;/p&gt;&#xD;
&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;============&lt;/p&gt;&#xD;
&lt;p&gt;连接器在缺省状态下被配置为允许分配所有可用的内存块。你可以使用&amp;lsquo;MEMORY&amp;rsquo;命令重新配置这个设置。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lsquo;MEMORY&amp;rsquo;命令描述目标平台上内存块的位置与长度。你可以用它来描述哪些内存区域可以被连接器使用，&lt;br /&gt;哪些内存区域是要避免使用的。然后你就可以把节分配到特定的内存区域中。连接器会基于内存区域设置节&lt;br /&gt;的地址，对于太满的区域，会提示警告信息。连接器不会为了适应可用的区域而搅乱节。&lt;/p&gt;&#xD;
&lt;p&gt;一个连接脚本最多可以包含一次'MEMORY'命令。但是，你可以在命令中随心所欲定义任意多的内存块，语法&lt;br /&gt;如下：&lt;/p&gt;&#xD;
&lt;p&gt;MEMORY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;NAME是用在连接脚本中引用内存区域的名字。出了连接脚本，区域名就没有任何实际意义。区域名存储在一个&lt;br /&gt;单独的名字空间中，它不会和符号名，文件名，节名产生冲突，每一块内存区域必须有一个唯一的名字。&lt;/p&gt;&#xD;
&lt;p&gt;ATTR字符串是一个可选的属性列表，它指出是否为一个没有在连接脚本中进行显式映射地输入段使用一个特定&lt;br /&gt;的内存区域。如果你没有为某些输入段指定一个输出段，连接器会创建一个跟输入段同名的输出段。如果你定&lt;br /&gt;义了区域属性，连接器会使用它们来为它创建的输出段选择内存区域。&lt;/p&gt;&#xD;
&lt;p&gt;ATTR字符串必须包含下面字符中的一个，且必须只包含一个：&lt;br /&gt;`R'&lt;br /&gt;只读节。&lt;br /&gt;`W'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可读写节。&lt;br /&gt;`X'&lt;br /&gt;可执行节。&lt;br /&gt;`A'&lt;br /&gt;可分配节。&lt;br /&gt;`I'&lt;br /&gt;已初始化节。&lt;br /&gt;`L'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 同&amp;lsquo;I&amp;rsquo;&lt;br /&gt;`!'&lt;br /&gt;对前一个属性值取反。&lt;/p&gt;&#xD;
&lt;p&gt;如果一个未映射节匹配了上面除'!'之外的一个属性，它就会被放入该内存区域。'!'属性对该测试取反，所以&lt;br /&gt;只有当它不匹配上面列出的行何属性时，一个未映射节才会被放入到内存区域。&lt;/p&gt;&#xD;
&lt;p&gt;ORIGIN是一个关于内存区域地始地址的表达式。在内存分配执行之前，这个表达式必须被求值产生一个常数，&lt;br /&gt;这意味着你不可以使用任何节相关的符号。关键字'ORIGIN'可以被缩写为'org'或'o'(但是，不可以写为，比&lt;br /&gt;如&amp;lsquo;ORG&amp;rsquo;）&lt;/p&gt;&#xD;
&lt;p&gt;LEN是一个关于内存区域长充（以字节为单位）的表达式。就像ORIGIN表达式，这个表达式在分配执行前也&lt;br /&gt;必须被求得为一个常数值。关键字'LENGTH'可以被简写为&amp;lsquo;len'或'l'。&lt;/p&gt;&#xD;
&lt;p&gt;在下面的例子中，我们指定两个可用于分配的内存区域：一个从0开始，有256kb长度，另一个从0x4000000&lt;br /&gt;开始，有4mb长度。连接器会把那些没有进行显式映射且是只读或可执行的节放到'rom'内存区域。并会把另&lt;br /&gt;外的没有被显式映射地节放入到'ram'内存区域。&lt;/p&gt;&#xD;
&lt;p&gt;MEMORY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rom (rx)&amp;nbsp; : ORIGIN = 0, LENGTH = 256K&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ram (!rx) : org = 0x40000000, l = 4M&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;一旦你定义了一个内存区域，你也可以指示连接器把指定的输出段放入到这个内存区域中，这可以通过使用&lt;br /&gt;'&amp;gt;REGION'输出段属性。比如，如果你有一个名为'mem'的内存区域，你可以在输出段定义中使用'&amp;gt;mem'。如&lt;br /&gt;果没有为输出段指定地址，连接器就会把地址设置为内存区域中的下一个可用的地址。如果总共的映射到一&lt;br /&gt;个内存区域的输出段对于区域来说太大了，连接器会提示一条错误信息。&lt;/p&gt;&#xD;
&lt;p&gt;PHDRS命令&lt;br /&gt;=============&lt;/p&gt;&#xD;
&lt;p&gt;ELF目标文件格式使用&amp;ldquo;程序头&amp;rdquo;，它也就是人们熟知的&amp;ldquo;节&amp;rdquo;。程序头描述了程序应当如何被载入到内存中。&lt;br /&gt;你可以通过使用带有'-p'选项的&amp;lsquo;objdump&amp;rsquo;命令来打印出这个程序头。&lt;/p&gt;&#xD;
&lt;p&gt;当你在一个纯ELF系统上运行ELF程序时，系统的载入程序通过读取文件头来计算得到如何来载入这个文件。这&lt;br /&gt;只在程序头被正确设置的情况下才会正常工作。本手册并不打算介绍系统载入程序如何解释文件头的相关细节&lt;br /&gt;问题；关于更多信息，请参阅ELF ABI。&lt;/p&gt;&#xD;
&lt;p&gt;连接顺在缺省状态下会自己创建一个可用的程序头。但是，在某些情况下，你可能需要更为精确地指定程序头。&lt;br /&gt;你可以使用命令&amp;lsquo;PHDRS&amp;rsquo;达到这个目的。当连接器在连接脚本中看到&amp;lsquo;PHDRS&amp;rsquo;命令时，它只会创建被指定了&lt;br /&gt;的程序头。&lt;/p&gt;&#xD;
&lt;p&gt;连接器只在产生ELF输出文件时关心&amp;lsquo;PHDRS&amp;rsquo;命令。在其它情况下，连接器只是简单地忽略&amp;lsquo;PHDRS&amp;rsquo;。&lt;/p&gt;&#xD;
&lt;p&gt;下面是&amp;lsquo;PHDRS&amp;rsquo;命令的语法。单词&amp;lsquo;PHDRS&amp;rsquo;，&amp;lsquo;FILEHDR&amp;rsquo;，&amp;lsquo;AT&amp;rsquo;和&amp;lsquo;FLAGS&amp;rsquo;都是关键字。&lt;/p&gt;&#xD;
&lt;p&gt;PHDRS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ FLAGS ( FLAGS ) ] ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;NAME只在连接脚本的&amp;lsquo;SECTIONS&amp;rsquo;命令中引用时用到。它不会被放到输出文件中。程序头的名字会被存储到单独&lt;br /&gt;的名字空间中。每一个程序头都必须有一个唯一的名字。&lt;/p&gt;&#xD;
&lt;p&gt;某些特定类型的程序头描述系统载入程序要从文件中载入到内存的节。在连接脚本中，你通过把可载入的输出节放&lt;br /&gt;到段中来指定这些段的内容。你可以使用&amp;lsquo;:PHDR&amp;rsquo;输出节属性把一个节放到一个特定的段中。&lt;/p&gt;&#xD;
&lt;p&gt;把某些节放到多个段中也是正常的。这仅仅暗示了一个内存段中含有另一个段。你可以重复使用&amp;lsquo;:PHDR&amp;rsquo;，在每&lt;br /&gt;一个应当含有这个节的段中使用它一次。&lt;/p&gt;&#xD;
&lt;p&gt;如果你使用&amp;lsquo;:PHDR&amp;rsquo;把一个节放到多个段中，那连接器把随后的所有没有指定&amp;lsquo;:PHDR&amp;rsquo;的可分配节都放到同一个&lt;br /&gt;段中。这是为了方便，因为通常一串连续的节会被放到一个单独的段中。你可以使用&amp;lsquo;:NONE&amp;rsquo;来覆盖缺省的段，&lt;br /&gt;告诉连接器不要把节放到任何一个段中。&lt;/p&gt;&#xD;
&lt;p&gt;你可能在程序头类型后面使用&amp;lsquo;FILEHDR&amp;rsquo;和&amp;lsquo;PHDRS&amp;rsquo;关键字来进一步描述段的内容。&amp;lsquo;FILEHDR&amp;rsquo;关键字表示段应&lt;br /&gt;当包含ELF文件头。&amp;lsquo;PHDRS&amp;rsquo;关键字表示段应当包含ELF程序头本身。&lt;/p&gt;&#xD;
&lt;p&gt;TYPE可以是如下的一个。数字表示关键字的值。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_NULL' (0)&lt;br /&gt;表示一个不用的程序头。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_LOAD' (1)&lt;br /&gt;表示这个程序头描述了一个被从文件中载入的段。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_DYNAMIC' (2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 表示一个可以从中找到动态链接信息的段。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_INTERP' (3)&lt;br /&gt;&amp;nbsp; 表示一个可以从中找到关于程序名解释的段。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_NOTE' (4)&lt;br /&gt;表示一个存有备注信息的段。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_SHLIB' (5)&lt;br /&gt;&amp;nbsp; 一个保留的程序头类型，被定义了，但没有被ELF ABI指定。&lt;/p&gt;&#xD;
&lt;p&gt;`PT_PHDR' (6)&lt;br /&gt;表示一个可以从中找到程序头的段。&lt;/p&gt;&#xD;
&lt;p&gt;EXPRESSION&lt;br /&gt;一个给出程序头的数值类型的表达式。这可以在使用上面未定义的类型时使用。&lt;/p&gt;&#xD;
&lt;p&gt;你可以通过使用&amp;lsquo;AT&amp;rsquo;表达式指定一个段应当被载入到内存中的一个特定的地址。这跟&lt;br /&gt;在输出节属性中使用&amp;lsquo;AT&amp;rsquo;命令是完全一样的。程序头中的&amp;lsquo;AT&amp;rsquo;命令会覆盖输出节属&lt;br /&gt;性中的。&lt;/p&gt;&#xD;
&lt;p&gt;连接器通常会基于组成段的节来设置段属性。你可以通过使用&amp;lsquo;FLAGS&amp;rsquo;关键字来显式指&lt;br /&gt;定段标志。FLAGS的值必须是一个整型值。它被用来设置程序头的&amp;lsquo;p_flags'域。&lt;/p&gt;&#xD;
&lt;p&gt;这里是一个关于&amp;lsquo;PHDRS&amp;rsquo;的例子。它展示一个在纯ELF系统上的一个标准的程序头设置。&lt;/p&gt;&#xD;
&lt;p&gt;PHDRS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; headers PT_PHDR PHDRS ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; interp PT_INTERP ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text PT_LOAD FILEHDR PHDRS ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data PT_LOAD ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dynamic PT_DYNAMIC ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = SIZEOF_HEADERS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .interp : { *(.interp) } :text :interp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text : { *(.text) } :text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .rodata : { *(.rodata) } /* defaults to :text */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = . + 0x1000; /* move to a new page in memory */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data : { *(.data) } :data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .dynamic : { *(.dynamic) } :data :dynamic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;VERSION命令&lt;br /&gt;===============&lt;/p&gt;&#xD;
&lt;p&gt;在使用ELF时，连接器支持符号版本。符号版本只在使用共享库时有用。动态连接器在运行一个&lt;br /&gt;可能跟一个更早版本的共享库链接程序时，可以使用符号版本来选择一个函数的特定版本。&lt;/p&gt;&#xD;
&lt;p&gt;你可以直接在主连接脚本中包含一个版本脚本，或者你可以以一个隐式连接脚本的形式提供这个&lt;br /&gt;版本脚本。你也可以使用&amp;lsquo;--version-script'连接器选项。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lsquo;VERSION&amp;rsquo;命令的语法很简单：&lt;/p&gt;&#xD;
&lt;p&gt;VERSION { version-script-commands }&lt;/p&gt;&#xD;
&lt;p&gt;版本脚本命令的格式跟Sun在Solaris 2.5中的连接器的格式是完全一样的。版本脚本定义一个版本&lt;br /&gt;节点树。你可以在版本脚本中指定节点名和依赖关系。你可以指定哪些符号被绑定到哪些版本节点&lt;br /&gt;上，你还可以把一组指定的符号限定到本地范围，这样在共享库的外面它们就不是全局可见的了。&lt;/p&gt;&#xD;
&lt;p&gt;最简单的演示版本脚本语言的方法是出示几个小例子：&lt;/p&gt;&#xD;
&lt;p&gt;VERS_1.1 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foo1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; old*;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; original*;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new*;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VERS_1.2 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foo2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } VERS_1.1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VERS_2.0 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bar1; bar2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } VERS_1.2;&lt;/p&gt;&#xD;
&lt;p&gt;这个示例版本脚本定义了三个版本节点。第一个版本节点定义为&amp;lsquo;VERS_1.1&amp;rsquo;它没有其它的依赖。&lt;br /&gt;脚本把符号&amp;lsquo;foo1&amp;rsquo;绑定给&amp;lsquo;VERS_1.1&amp;rsquo;。它把一些数量的符号限定到本地范围，这样它们在共&lt;br /&gt;享库的外面就不可见了；这是通过通配符来完成的，所以任何名字以&amp;lsquo;old&amp;rsquo;，&amp;lsquo;original&amp;rsquo;或&lt;br /&gt;&amp;lsquo;new&amp;rsquo;开头的符号都会被匹配。可用的通配符跟在shell中匹配文件名时一样。&lt;/p&gt;&#xD;
&lt;p&gt;下面，版本脚本定义一个节点&amp;lsquo;VER_1.2&amp;rsquo;。这个节点依赖&amp;lsquo;VER_1.1&amp;rsquo;。脚本把符号&amp;lsquo;foo2&amp;rsquo;绑&lt;br /&gt;定给节点&amp;lsquo;VERS_1.2&amp;rsquo;。&lt;/p&gt;&#xD;
&lt;p&gt;最后，版本脚本定义节点&amp;lsquo;VERS_2.0&amp;rsquo;。这个节点依赖&amp;lsquo;VERS_1.2&amp;rsquo;。脚本把符号&amp;lsquo;bar1&amp;rsquo;和&lt;br /&gt;&amp;lsquo;bar2 &amp;rsquo;绑定给版本节点&amp;lsquo;VERS_2.0&amp;rsquo;。&lt;/p&gt;&#xD;
&lt;p&gt;当连接器发现一个定义在库中的符号没有被指定绑定到一个版本节点，它会把它绑定到一个未指&lt;br /&gt;定基础版本的库。你可以通过使用&amp;lsquo;global: *;&amp;rsquo;把所有未指定的符号绑定到一个给定的版本节&lt;br /&gt;点上。&lt;/p&gt;&#xD;
&lt;p&gt;版本节点的名字没有任何特殊的含义只是为了方便人们阅读。版本&amp;lsquo;2.0&amp;rsquo;可以出现在&amp;lsquo;1.1&amp;rsquo;和&lt;br /&gt;&amp;lsquo;1.2&amp;rsquo;之间。但是，在书写版本脚本时，这会是一个引起混乱的办法。&lt;/p&gt;&#xD;
&lt;p&gt;如果在版本脚本中，这是一个唯一的版本节点，节点名可以被省略。这样的版本脚本不给符号赋&lt;br /&gt;任何版本，只是选择哪些符号会被全局可见而哪些不会。&lt;/p&gt;&#xD;
&lt;p&gt;{ global: foo; bar; local: *; };&lt;/p&gt;&#xD;
&lt;p&gt;当你把一个程序跟一个带有版本符号的共享库连接时，程序自身知道每个符号的哪个版本是它需&lt;br /&gt;要的，而且它还知道它连接的每一个节享库中哪些版本的节点是它需要的。这样，在运行时，动&lt;br /&gt;态载入程序可以做一个快速的确认，以保证你连接的库确实提供了所有的程序需要用来解析所有&lt;br /&gt;动态符号的版本节点。用这种方法，就有可能让每一个动态连接器知道所有的外部符号不需要通&lt;br /&gt;过搜索每一个符号引用就能解析。&lt;/p&gt;&#xD;
&lt;p&gt;符号版本在SunOS上做次版本确认是一种很成熟的方法。一个被提出来的基本的问题是对于外部&lt;br /&gt;函数的标准引用会在需要时被绑定到正确的版本，但不是在程序启动的时候全部被绑定。如果一&lt;br /&gt;个共享库过期了，一个需要的界面可能就不存在了；当程序需要使用这个界面的时候，它可能会&lt;br /&gt;突然地意外失败。有了符号版本后，当用户启动他们的程序时，如果要使用的共享库太老了的话，&lt;br /&gt;用户会得到一条警告信息。&lt;/p&gt;&#xD;
&lt;p&gt;GNU对Sun的版本确认办法有一些扩展。首先就是能在符号定义的源文件中把一个符号绑定到一个&lt;br /&gt;版本节点而不是在一个版本脚本中。这主要是为了减轻库维护的工作量。你可以通过类似下面的&lt;br /&gt;代码实现这一点：&lt;/p&gt;&#xD;
&lt;p&gt;__asm__(".symver original_foo,foo@VERS_1.1");&lt;/p&gt;&#xD;
&lt;p&gt;在C源文件中。这句会给函数'original_foo'取一个别名'foo'，并绑定到版本节点`VERS_1.1'。&lt;br /&gt;操作符'local:'可以被用来阻止符号'original_foo'被导出。操作符'.symver'使这句优先于版&lt;br /&gt;本脚本。&lt;/p&gt;&#xD;
&lt;p&gt;第二个GNU的扩展是在一个给定的共享库中允许同一个函数的多个版本。通过这种办法，你可以&lt;br /&gt;不增加共享库的主版本号而对界面做完全不相容的修改。&lt;/p&gt;&#xD;
&lt;p&gt;要实现这个，你必须在一个源文件中多次使用'.symver'操作符。这里是一个例子：&lt;/p&gt;&#xD;
&lt;p&gt;__asm__(".symver original_foo,foo@");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm__(".symver old_foo,foo@VERS_1.1");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm__(".symver old_foo1,foo@VERS_1.2");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm__(".symver new_foo,foo@@VERS_2.0");&lt;/p&gt;&#xD;
&lt;p&gt;在这个例子中，&lt;a href="mailto:'foo@'"&gt;'foo@'&lt;/a&gt;表示把符号'foo'绑定到一个没有指基版本的符号上。含有这个例子的源&lt;br /&gt;文件必须定义4个C函数：`original_foo', `old_foo', `old_foo1', 和`new_foo'.&lt;/p&gt;&#xD;
&lt;p&gt;当你有一个给定符号的多个定义后，有必要有一个方法可以指定一个缺省的版本，对于这个符号&lt;br /&gt;的外部引用就可以找到这个版本。用这种方法，你可以只声明一个符号的一个版本作为缺省版本，&lt;br /&gt;否则，你会拥有同一个符号的多个定义。&lt;/p&gt;&#xD;
&lt;p&gt;如果你想要绑定一个引用到共享库中的符号的一个指定的版本，你可以很方便地使用别名（比如，&lt;br /&gt;old_foo),或者你可以使用'.symver'操作符来指定绑定到一个外部函数的特定版本。&lt;/p&gt;&#xD;
&lt;p&gt;你也可以在版本脚本中指定语言。&lt;/p&gt;&#xD;
&lt;p&gt;VERSION extern "lang" { version-script-commands }&lt;/p&gt;&#xD;
&lt;p&gt;被支持的'lang'有&amp;lsquo;C&amp;rsquo;，&amp;lsquo;C++&amp;rsquo;和&amp;lsquo;Java&amp;rsquo;。&lt;/p&gt;&#xD;
&lt;p&gt;连接脚本中的表达式&lt;br /&gt;=============================&lt;/p&gt;&#xD;
&lt;p&gt;连接脚本语言中的表达式的语法跟C的表达式是完全是致的。所有的表达式都以整型值被求值。所有&lt;br /&gt;的表达式也被以相同的宽度求值。在32位系统是它是32位，否则是64位。&lt;br /&gt;　　　　&lt;br /&gt;你可以在表达式中使用和设置符号值。&lt;/p&gt;&#xD;
&lt;p&gt;连接器为了使用表达式，定义了几个具有特殊途的内建函数。&lt;/p&gt;&#xD;
&lt;p&gt;常数&lt;br /&gt;---------&lt;/p&gt;&#xD;
&lt;p&gt;所有的常数都是整型值。&lt;/p&gt;&#xD;
&lt;p&gt;就像在C中，连接器把以'0'开头的整型数视为八进制数，把以'0x'或'0X'开头的视为十六进制。连接器&lt;br /&gt;把其它的整型数视为十进制。&lt;/p&gt;&#xD;
&lt;p&gt;另外，你可以使用'K'和'M'后缀作为常数的度量单位，分别为'1024'和'1024*1024'。比如，下面的三个&lt;br /&gt;常数表示同一个值。&lt;/p&gt;&#xD;
&lt;p&gt;_fourk_1 = 4K;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _fourk_2 = 4096;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _fourk_3 = 0x1000;&lt;/p&gt;&#xD;
&lt;p&gt;符号名&lt;br /&gt;------------&lt;/p&gt;&#xD;
&lt;p&gt;除了引用，符号名都是以一个字母，下划线或者句号开始，可以包含字母，数字，下划线，句点和连接号。&lt;br /&gt;不是被引用的符号名必须不和任何关键字冲突。你可以指定一个含有不固定它符数或具有跟关键字相同名&lt;br /&gt;字但符号名必须在双引号内：&lt;/p&gt;&#xD;
&lt;p&gt;"SECTION" = 9;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "with a space" = "also with a space" + 10;&lt;/p&gt;&#xD;
&lt;p&gt;因为符号可以含有很多非文字字符，所以以空格分隔符号是很安全的。比如，'A-B'是一个符号，而'A - B'&lt;br /&gt;是一个执行减法运算的表达式。&lt;/p&gt;&#xD;
&lt;p&gt;定位计数器&lt;br /&gt;--------------------&lt;/p&gt;&#xD;
&lt;p&gt;一个特殊的连接器变量"dot"'.'总是含有当前的输出定位计数器。因为'.'总引用输出段中的一个位置，它&lt;br /&gt;只可以出现在'SECTIONS'命令中的表达式中。'.'符号可以出现在表达式中一个普能符号允许出现的任何位&lt;br /&gt;置。&lt;/p&gt;&#xD;
&lt;p&gt;把一个值赋给'.'会让定位计数器产生移动。这会在输出段中产生空洞。定位计数器从不向前移动。&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file1(.text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = . + 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file2(.text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . += 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file3(.text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } = 0x12345678;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;在前面的例子中，来自'file1'的'.text'节被定位在输出节'output'的起始位置。它后面跟有1000byte的&lt;br /&gt;空隙。然后是来自'file2'的'.text'节，同样是后面跟有1000byte的空隙，最后是来自'file3'的'.text'&lt;br /&gt;节。符号'=0x12345678'指定在空隙中填入什么样的数据。&lt;/p&gt;&#xD;
&lt;p&gt;注意：'.'实际上引用的是当前包含目标的从开始处的字节偏移。通常，它就是'SECTIONS'语句，其起始地&lt;br /&gt;址是0，因为'.'可以被用作绝对地址。但是如果'.'被用在一个节描述中，它引用的是从这个节起始处开始&lt;br /&gt;的偏移，而不是一个绝对地址。这样，在下面这样一个脚本中：&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = 0x100&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = 0x200&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . = 0x500&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . += 0x600&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;'.text'节被赋于起始地址0x100，尽管在'.text'输入节中没有足够的数据来填充这个区域，但其长&lt;br /&gt;度还是0x200bytes。（如果数据太多，那会产生一条错误信息，因为这会试图把'.'向前移）。'.data'&lt;br /&gt;节会从0x500处开始，并且它在结尾处还会有0x600的额外空间。&lt;/p&gt;&#xD;
&lt;p&gt;运算符&lt;br /&gt;---------&lt;/p&gt;&#xD;
&lt;p&gt;连接器可以识别标准的C的算术运算符集, 以及它们的优先集.&lt;/p&gt;&#xD;
&lt;p&gt;优先集&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 结合性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 运算符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 备注&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (highest)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !&amp;nbsp; -&amp;nbsp; ~&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; /&amp;nbsp; %&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +&amp;nbsp; -&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt;&amp;nbsp; &amp;lt;&amp;lt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ==&amp;nbsp; !=&amp;nbsp; &amp;gt;&amp;nbsp; &amp;lt;&amp;nbsp; &amp;lt;=&amp;nbsp; &amp;gt;=&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ||&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; right&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ? :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; right&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;=&amp;nbsp; +=&amp;nbsp; -=&amp;nbsp; *=&amp;nbsp; /=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (lowest)&lt;br /&gt;&amp;nbsp; 注: (1) 前缀运算符 (2) *Note Assignments::.&lt;/p&gt;&#xD;
&lt;p&gt;求值&lt;br /&gt;----------&lt;/p&gt;&#xD;
&lt;p&gt;连接器是懒惰求表达式的值。它只在确实需要的时候去求一个表达式的值。&lt;/p&gt;&#xD;
&lt;p&gt;连接器需要一些信息，比如第一个节的起始地址的值，还有内存区域的起点与长度，在做任何连接的&lt;br /&gt;时候这都需要。在连接器读取连接脚本的时候，这些值在可能的时候被计算出来。&lt;/p&gt;&#xD;
&lt;p&gt;但是，其它的值（比如符号的值）直到内存被分配之后才会知道或需要。这样的值直到其它信息（比&lt;br /&gt;如输出节的长度）可以被用来进行符号赋值的时候才被计算出来。&lt;/p&gt;&#xD;
&lt;p&gt;直到内存分配之后，节的长度才会被知道，所以依赖于节长度的赋值只能到内存分配之后才会被执行。&lt;/p&gt;&#xD;
&lt;p&gt;有些表达式，比如那些依赖于定位计数器'.'的表达式，必须在节分配的过程中被计算出来。&lt;/p&gt;&#xD;
&lt;p&gt;如果一个表达式的结果现在被需要，但是目前得不到这个值，这样会导致一个错误。比如，象下面这&lt;br /&gt;样一个脚本：&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text 9+this_isnt_constant :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { *(.text) }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;会产生一个错误信息'non constant expression for initial address'.&lt;/p&gt;&#xD;
&lt;p&gt;表达式的节&lt;br /&gt;----------------------------&lt;/p&gt;&#xD;
&lt;p&gt;当一个连接器计算一个表达式时，得到的结果可能是一个绝对值，也可能跟某个节相关。一个节相关的&lt;br /&gt;表达式是从一个节的基地址开始的固定的偏称值。&lt;/p&gt;&#xD;
&lt;p&gt;表达式在连接脚本中的位置决定了它是绝对的或节相关的。一个出现在输出节定义中的表达式是跟输出&lt;br /&gt;节的基地址相关的。一个出现在其它地方的表达式则是绝对的。&lt;/p&gt;&#xD;
&lt;p&gt;如果你通过'-r'选项指定需要可重位输出，那一个被赋为节相关的表达式的符号就会是可重定位的。意&lt;br /&gt;思是下一步的连接操作会改变这个符号的值。符号的节就是节相关的表达式所在的节。&lt;/p&gt;&#xD;
&lt;p&gt;一个被赋为绝对表达式的符号在后面进一步的连接操作中会始终保持它的值不变。符号会是绝对的，并&lt;br /&gt;不会有任何的特定的相关节。&lt;/p&gt;&#xD;
&lt;p&gt;如果一个表达式有可能会是节相关的，你可以使用内建函数'ABSOLUTE'强制一个表达式为绝对的。比如，&lt;br /&gt;要创建一个被赋为输出节'.data'的末尾地址的绝对符号：&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data : { *(.data) _edata = ABSOLUTE(.); }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;如果没有使用'ABSOLUTE'，'_edata'会跟节'.data'相关。&lt;/p&gt;&#xD;
&lt;p&gt;内建函数&lt;br /&gt;-----------------&lt;/p&gt;&#xD;
&lt;p&gt;为了使用连接脚本表达式，连接脚本语言含有一些内建函数。&lt;/p&gt;&#xD;
&lt;p&gt;`ABSOLUTE(EXP)'&lt;br /&gt;返回表达式EXP的绝对值（不可重定位，而不是非负）。主要在把一个绝对值赋给一个节定义内的&lt;br /&gt;符号时有用。&lt;/p&gt;&#xD;
&lt;p&gt;`ADDR(SECTION)'&lt;br /&gt;返回节SECTION的绝对地址（VMA）。你的脚本之前必须已经定义了这个节的地址。在接下来的例子&lt;br /&gt;中，'symbol_1'和'symbol_2'被赋以相同的值。&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS { ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .output1 :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; start_of_output_1 = ABSOLUTE(.);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .output :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; symbol_1 = ADDR(.output1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; symbol_2 = start_of_output_1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... }&lt;/p&gt;&#xD;
&lt;p&gt;`ALIGN(EXP)'&lt;br /&gt;返回定位计数器'.'对齐到下一个EXP指定的边界后的值。&amp;lsquo;ALIGN&amp;rsquo;不改变定位计数器的值，它只是&lt;br /&gt;在定位计数器上面作了一个算术运算。这里有一个例子，它在前面的节之后，把输出节'.data'对齐&lt;br /&gt;到下一个'0x2000'字节的边界，并在输入节之后把节内的一个变量对齐到下一个'0x8000'字节的边界。&lt;/p&gt;&#xD;
&lt;p&gt;SECTIONS { ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data ALIGN(0x2000): {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; variable = ALIGN(0x8000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... }&lt;/p&gt;&#xD;
&lt;p&gt;这个例子中前一个'ALIGN'指定一个节的位置，因为它是作为节定义的可选项ADDRESS属性出现的。第&lt;br /&gt;二个&amp;lsquo;ALIGN&amp;rsquo;被用来定义一个符号的值。&lt;/p&gt;&#xD;
&lt;p&gt;内建函数'NEXT'跟&amp;lsquo;ALIGN&amp;rsquo;非常相似。&lt;/p&gt;&#xD;
&lt;p&gt;`BLOCK(EXP)'&lt;br /&gt;这是'ALIGN'的同义词，是为了与其它的连接器保持兼容。这在设置输出节的地址时非常有用。&lt;/p&gt;&#xD;
&lt;p&gt;`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这跟下面的两个表达同义：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ALIGN(MAXPAGESIZE) + (. &amp;amp; (MAXPAGESIZE - 1)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 或者：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ALIGN(MAXPAGESIZE) + (. &amp;amp; (MAXPAGESIZE - COMMONPAGESIZE)))&lt;/p&gt;&#xD;
&lt;p&gt;隐式连接脚本&lt;br /&gt;=======================&lt;/p&gt;&#xD;
&lt;p&gt;如果你指定了一个连接器输出文件，而连接器不能识别它是一个目标文件还是档案文件，它会试图把它读作&lt;br /&gt;一个连接脚本。如果这个文件不能作为一个连接脚本被分析，连接器就会报告一个错误。&lt;/p&gt;&#xD;
&lt;p&gt;一个隐式的连接器脚本不会替代缺省的连接器脚本。&lt;/p&gt;&#xD;
&lt;p&gt;一般，一个隐式的连接器脚本只包含符号赋值，或者'INPUT','GROUP'或'VERSION'命令。&lt;/p&gt;&#xD;
&lt;p&gt;BFD&lt;br /&gt;***&lt;/p&gt;&#xD;
&lt;p&gt;连接器通过BFD库来对目标文件和档案文件进行操作。这些库允许连接器忽略目标文件的格式而使用相关的&lt;br /&gt;例程来操作目标文件。只要简单地创建一个新的BFD后台并把它加到库中，一个不同的目标文件格式就会被&lt;br /&gt;支持。但是为了节约运行时内存，连接器和相关的工具一般被配置为只支持可用的目标文件格式的一个子集，&lt;br /&gt;你可以使用'objdump -i'来列出你配置的所有支持的格式。&lt;/p&gt;&#xD;
&lt;p&gt;就像大多数的案例，BFD是一个在多种相互有冲突的需求之间的一个折中，影响BFD设计的一个最主要的因&lt;br /&gt;素是效率。因为BFD简化了程序和后台，更多的时间和精力被放在了优化算法以追求更快的速度。&lt;/p&gt;&#xD;
&lt;p&gt;BFD解决方案的一个副产品是你必须记住有信息丢失的潜在可能。在使用BFD机制时，有两处地方有用信息可&lt;br /&gt;能丢失：在转化时和在输出时。&lt;/p&gt;&#xD;
&lt;p&gt;它如何工作: BFD概要。&lt;br /&gt;===============================&lt;/p&gt;&#xD;
&lt;p&gt;当一个目标文件被打开时，BFD子程序自动确定输入目标文件的格式。然后它们在内存中用指向子程序的指针&lt;br /&gt;构建一个描述符，这个描述符被用作存取目标文件的数据结构元素。&lt;/p&gt;&#xD;
&lt;p&gt;因为需要来自目标文件的不同信息，BFD从文件的不同节中读取它们，并处理。比如，连接器的一个非常普遍&lt;br /&gt;的操作是处理符号表。每一个BFD后台提供一个在目标文件的符号表达形式跟内部规范格式之间的转化的函数，&lt;br /&gt;当一个连接器需要一个目标文件的符号表时，它通过一个内存指针调用一个来自相应的BFD后台的子程序，这&lt;br /&gt;个子程序读取表并把它转化为规范表。然后，连接器写输出文件的符号表，另一个BFD后台子程序被调用，以&lt;br /&gt;创建新的符号表并把它转化为选定的输出格式。&lt;/p&gt;&#xD;
&lt;p&gt;信息丢失。&lt;br /&gt;----------------&lt;/p&gt;&#xD;
&lt;p&gt;在输出的过程中，信息可能会被丢失。BFD支持的输出格式并不提供一致的特性，并且在某一种格式中可以被&lt;br /&gt;描述的信息可能在另一种格式中没有地方可放。一个例子是在'b.out'中的对齐信息，在一个'a.out'格式的&lt;br /&gt;文件中，没有地方可以存储对齐信息，所以当一个文件是从'b.out'连接而成的，并产生的是一个'a.out'的&lt;br /&gt;文件，对齐信息就不会被传入到输出文件中（连接器还是在内部使用对齐信息，所以连接器的执行还是正确的）&lt;/p&gt;&#xD;
&lt;p&gt;另一个例子是COFF节名字。COFF文件中可以含有不限数量的节，每一个都有一个文字的节名。如果连接的目标是&lt;br /&gt;一种不支持过多节的格式（比如，'a.out'）或者是一种不含有节名的格式（比如，Oasys格式），连接器不&lt;br /&gt;能像通常那样简单地处理它。你可以通过把所需的输入输出节通过连接脚本语言进行详细映射来解决这下问题。&lt;/p&gt;&#xD;
&lt;p&gt;在规范化的过程中信息也会丢失。BFD内部的对应于外部格式的规范形式并不是完全详尽的；有些在输入格式&lt;br /&gt;中的结构在内部并没有对应的表示方法。这意味着BFD后台在从外部到内部或从内部到外部的转化过程中不能&lt;br /&gt;维护所有可能的数据。&lt;/p&gt;&#xD;
&lt;p&gt;这个限制只在一个程序读取一种格式并写成另一种格式的时候会是一个问题。每一个BFD后台有责任维护尽可能&lt;br /&gt;多的数据，内部的BFD规范格式具有对BFD内核不透明的结构体，只导出给后台。当一个文件以一种格式读取后，&lt;br /&gt;规范格式就会为之产生。同时，后台把所有可能丢失的信息进行存储。如果这些数据随后会写以相同的格式写&lt;br /&gt;回，后台程序就可以使用BFD内核提供的跟选前准备的相同的规范格式。因为在后台之间有大量相同的东西，在&lt;br /&gt;把big endianCOFF拷贝成littile endian COFF时，或者'a.out'到'b.out'时，不会有信息丢失。当一些混合格&lt;br /&gt;式被连接到一起时，只有那些格式跟目标格式不同的文件会丢失信息。 &lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109690.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109690.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109674.html</id><title type="text">AWK应用简介</title><summary type="text">1.什么是awk? 你可能对UNIX比较熟悉，但你可能对awk很陌生，这一点也不奇怪，的确，与其优秀的功能相比，awk还远没达到它应有的知名度。awk是什么？与其它大多数UNIX命令不同的是，从名字上看，我们不可能知道awk的功能：它既不是具有独立意义的英文单词，也不是几个相关单词的缩写。事实上，awk是三个人名的缩写，他们是：Aho、(Peter) Weinberg和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。 AWK的功能是什么？与sed和grep很相似，awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强</summary><published>2011-07-18T08:17:00Z</published><updated>2011-07-18T08:17:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109674.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109674.html"/><content type="html">&lt;p  style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;什么是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk? &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;你可能对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;比较熟悉，但你可能对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;很陌生，这一点也不奇怪，的确，与其优秀的功能相比，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;还远没达到它应有的知名度。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是什么？与其它大多数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令不同的是，从名字上看，我们不可能知道&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的功能：它既不是具有独立意义的英文单词，也不是几个相关单词的缩写。事实上，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是三个人名的缩写，他们是：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Aho&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(Peter) Weinberg&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(Brain)Kernighan&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。正是这三个人创造了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk---&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;一个优秀的样式扫描与处理工具。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;AWK&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的功能是什么？与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;很相似，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是一种样式扫描与处理工具。但其功能却大大强于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供了极其强大的功能：它几乎可以完成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所能完成的全部工作，同时，它还可以可以进行样式装入、流控制、数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;**&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的确拥有自己的语言：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序设计语言，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的三位创建者已将它正式定义为：样式扫描和处理语言。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;为什么使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk? &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;即使如此，你也许仍然会问，我为什么要使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk? &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的第一个理由是基于文本的样式扫描和处理是我们经常做的工作，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所做的工作有些象数据库，但与数据库不同的是，它处理的是文本文件，这些文件没有专门的存储格式，普通的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具有特殊的存储格式，这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到，我们就应当找到处理它们的简便易行的方法，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;有很多这方面的工具，例如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sort&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;以及&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;find&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;等等，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是其中十分优秀的一种。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的第二个理由是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是一个简单的工具，当然这是相对于其强大的功能来说的。的确，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;有许多优秀的工具，例如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;天然的开发工具&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言及其延续&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C++&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;就非常的优秀。但相对于它们来说，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;完成同样的功能要方便和简捷得多。这首先是因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供了适应多种需要的解决方案：从解决简单问题的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令行到复杂而精巧的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序设计语言，这样做的好处是，你可以不必用复杂的方法去解决本来很简单的问题。例如，你可以用一个命令行解决简单的问题，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不行，即使一个再简单的程序，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言也必须经过编写、编译的全过程。其次，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;本身是解释执行的，这就使得&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序不必经过编译的过程，同时，这也使得它与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序能够很好的契合。最后，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;本身较&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言简单，虽然&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;吸收了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言很多优秀的成分，熟悉&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言会对学习&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;有很大的帮助，但&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;本身不须要会使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;mdash;&amp;mdash;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;一种功能强大但需要大量时间学习才能掌握其技巧的开发工具。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的第三个理由是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是一个容易获得的工具。与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C++&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言不同，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;只有一个文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(/bin/awk)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，而且几乎每个版本的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;都提供各自版本的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，你完全不必费心去想如何获得&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。但&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言却不是这样，虽然&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;天然的开发工具，但这个开发工具却是单独发行的，换言之，你必须为你的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;版本的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言开发工具单独付费（当然使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;版者除外），获得并安装它，然后你才可以使用它。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;基于以上理由，再加上&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;强大的功能，我们有理由说，如果你要处理与文本样式扫描相关的工作，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;应该是你的第一选择。在这里有一个可遵循的一般原则：如果你用普通的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;工具或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;有困难的话，试试&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;仍不能解决问题，则便用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言，如果&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言仍然失败，则移至&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C++&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;3.awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的调用方式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;前面曾经说过，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供了适应多种需要的不同解决方案，它们是：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;一、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令行，你可以象使用普通&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令一样使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，在命令行中你也可以使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序设计语言，虽然&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;支持多行的录入，但是录入长长的命令行并保证其正确无误却是一件令人头疼的事，因此，这种方法一般只用于解决简单的问题。当然，你也可以在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序中引用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令行甚至&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序脚本。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;二、使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-f&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;选项调用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许将一段&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序写入一个文本文件，然后在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令行中用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-f&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;选项调用并执行这段程序。具体的方法我们将在后面的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语法中讲到。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;三、利用命令解释器调用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序：利用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;支持的命令解释器功能，我们可以将一段&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序写入文本文件，然后在它的第一行加上&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;#!/bin/awk -f &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;并赋予这个文本文件以执行的权限。这样做之后，你就可以在命令行中用类似于下面这样的方式调用并执行这段&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;脚本文本名&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;待处理文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;4.awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的语法：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;与其它&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令一样，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;拥有自己的语法：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...] &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;参数说明：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;-F re:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;更改其字段分隔符。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;parameter: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;该参数帮助为不同的变量赋值。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;'prog': awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的程序语句段。这个语句段必须用单拓号：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;括起，以防被&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;解释。这个程序语句段的标准形式为：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;'pattern {action}' &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;其中&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;pattern&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;参数可以是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;正则表达式中的任何一个，它可以使用语法&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;/re/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;再加上一些样式匹配技巧构成。与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;类似，你也可以使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;","&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;分开两样式以选择某个范围。关于匹配的细节，你可以参考附录，如果仍不懂的话，找本&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;书学学&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（本人是在学习&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;ed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;时掌握匹配技术的）。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; action&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;参数总是被大括号包围，它由一系统&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句组成，各语句之间用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;";"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;分隔。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;解释它们，并在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;pattern&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;给定的样式匹配的记录上执行其操作。与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;类似，你也可以使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;ldquo;#&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;作为注释符，它使&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;ldquo;#&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;到行尾的内容成为注释，在解释执行时，它们将被忽略。你可以省略&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; pattern&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; action&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之一，但不能两者同时省略，当省略&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;pattern&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;时没有样式匹配，表示对所有行（记录）均执行操作，省略&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;action&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;时执行缺省的操作&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;mdash;&amp;mdash;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在标准输出上显示。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;-f progfile:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;调用并执行&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;progfile&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;指定有程序文件。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;progfile&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是一个文本文件，他必须符合&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的语法。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;in_file:awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的输入文件，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许对多个输入文件进行处理。值得注意的是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不修改输入文件。如果未指定输入文件，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;将接受标准输入，并将结果显示在标准输出上。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;支持输入输出重定向。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;5.awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的记录、字段与内置变量：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;前面说过，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;处理的工作与数据库的处理方式有相同之处，其相同处之一就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;支持对记录和字段的处理，其中对字段的处理是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不能实现的，这也是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;优于二者的原因之一。在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中，缺省的情况下总是将文本文件中的一行视为一个记录，而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;借用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的方法，用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1,2,3...&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这样的方式来顺序地表示行（记录）中的不同字段。特殊地，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表示整个行（记录）。不同的字段之间是用称作分隔符的字符分隔开的。系统默认的分隔符是空格。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许在命令行中用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-F re&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的形式来改变这个分隔符。事实上，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;用一个内置的变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;FS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;来记忆这个分隔符。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中有好几个这样的内置变量，例如，记录分隔符变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;RS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、当前工作的记录数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;等等，本文后面的附表列出了全部的内置变量。这些内置的变量可以在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序中引用或修改，例如，你可以利用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;变量在模式匹配中指定工作范围，也可以通过修改记录分隔符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;RS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;让一个特殊字符而不是换行符作为记录的分隔符。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;显示文本文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;myfile&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中第七行到第十五行中以字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;%&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;分隔的第一字段，第三字段和第七字段：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk -F % 'NR==7,NR==15 {printf 1 3 7}' &lt;br /&gt;&lt;br /&gt;6.awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的内置函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之所以成为一种优秀的程序设计语言的原因之一是它吸收了某些优秀的程序设计语言（例如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）语言的许多优点。这些优点之一就是内置函数的使用，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;定义并支持了一系列的内置函数，由于这些函数的使用，使得&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供的功能更为完善和强大，例如，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;使用了一系列的字符串处理内置函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这些函数看起来与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; C &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言的字符串处理函数相似，其使用方式与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言中的函数也相差无几&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，正是由于这些内置函数的使用，使&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;处理字符串的功能更加强大。本文后面的附录中列有一般的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所提供的内置函数，这些内置函数也许与你的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;版本有些出入，因此，在使用之前，最好参考一下你的系统中的联机帮助。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;作为内置函数的一个例子，我们将在这里介绍&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数，这个函数使得&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言的输出相一致。实际上，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中有许多引用形式都是从&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言借用过来的。如果你熟悉&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言，你也许会记得其中的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数，它提供的强大格式输出功能曾经带我们许多的方便。幸运的是，我们在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中又和它重逢了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;几乎与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言中一模一样，如果你熟悉&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言的话，你完全可以照&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言的模式使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。因此在这里，我们只给出一个例子，如果你不熟悉的话，请随便找一本&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言的入门书翻翻。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;显示文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;myfile&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中的行号和第&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;字段：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk '{printf"%03d%s\n",NR,1}' myfile &lt;br /&gt;&lt;br /&gt;7.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在命令行使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;按照顺序，我们应当讲解&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序设计的内容了，但在讲解之前，我们将用一些例子来对前面的知识进行回顾，这些例子都是在命令行中使用的，由此我们可以知道在命令行中使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是多么的方便。这样做的原因一方面是为下面的内容作铺垫，另一方面是介绍一些解决简单问题的方法，我们完全没有必要用复杂的方法来解决简单的问题&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;----&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;既然&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供了较为简单的方法的话。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：显示文本文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;mydoc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配（含有）字符串&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;"sun"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的所有行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk '/sun/{print}' mydoc &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;由于显示整个记录（全行）是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的缺省动作，因此可以省略&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;action&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;项。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk '/sun/' mydoc &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：下面是一个较为复杂的匹配的示例：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk '/[Ss]un/,/[Mm]oon/ {print}' myfile &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;它将显示第一个匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Sun&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sun&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行与第一个匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Moon&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;moon&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行之间的行，并显示到标准输出上。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：下面的示例显示了内置变量和内置函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;length&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（）的使用：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk 'length(0)&amp;gt;80 {print NR}' myfile &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;该命令行将显示文本&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;myfile&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中所有超过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;80&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个字符的行号，在这里，用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表示整个记录（行），同时，内置变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不使用标志符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;''&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：作为一个较为实际的例子，我们假设要对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中的用户进行安全性检查，方法是考察&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;/etc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;下的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;passwd&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;文件，检查其中的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;passwd&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;字段（第二字段）是否为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;"*"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，如不为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;"*"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，则表示该用户没有设置密码，显示出这些用户名（第一字段）。我们可以用如下语句实现：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;#awk -F: '2=="" {printf("%s no password!\n",1' /etc/passwd &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在这个示例中，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;passwd&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;文件的字段分隔符是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;ldquo;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，因此，必须用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-F&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;：来更改默认的字段分隔符，这个示例中也涉及到了内置函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的使用。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;8.awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如同其它程序设计语言一样，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许在程序语言中设置变量，事实上，提供变量的功能是程序设计语言的其本要求，不提供变量的程序设计语言本人还从未见过。&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供两种变量，一种是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;内置的变量，这前面我们已经讲过，需要着重指出的是，与后面提到的其它变量不同的是，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序中引用内置变量不需要使用标志符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（回忆一下前面讲过的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的使用）。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供的另一种变量是自定义变量。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;允许用户在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序语句中定义并调用自已的变量。当然这种变量不能与内置变量及其它&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;保留字相同，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中引用自定义变量必须在它前面加上标志符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言不同的是，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中不需要对变量进行初始化，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;根据其在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中第一次出现的形式和上下文确定其具体的数据类型。当变量类型不确定时，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;默认其为字符串类型。这里有一个技巧：如果你要让你的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序知道你所使用的变量的明确类型，你应当在在程序中给它赋初值。在后面的实例中，我们将用到这一技巧。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;运算与判断：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;作为一种程序设计语言所应具有的特点之一，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;支持多种运算，这些运算与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言提供的几本相同：如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;%&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;等等，同时，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;也支持&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言中类似&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;++&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;+=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;=+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;=-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之类的功能，这给熟悉&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言的使用者编写&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序带来了极大的方便。作为对运算功能的一种扩展，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;还提供了一系列内置的运算函数（如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sqr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;cos&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sin&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;等等）和一些用于对字符串进行操作（运算）的函数（如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;length&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;substr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;等等）。这些函数的引用大大的提高了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的运算功能。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;作为对条件转移指令的一部分，关系判断是每种程序设计语言都具备的功能，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;也不例外。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中允许进行多种测试，如常用的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;==&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（等于）、！&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（不等于）、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（大于）、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（小于）、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（大于等于）、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（小于等于）等等，同时，作为样式匹配，还提供了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;~&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（匹配于）和！&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;~&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（不匹配于）判断。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;作为对测试的一种扩充，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;也支持用逻辑运算符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;:!(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;非&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（与）、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;||&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（或）和括号（）进行多重判断，这大大增强了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的功能。本文的附录中列出了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所允许的运算、判断以及操作符的优先级。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;9.awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的流程控制&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;流程控制语句是任何程序设计语言都不能缺少的部分。任何好的语言都有一些执行流程控制的语句。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供的完备的流程控制语句类似于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言，这给我们编程带来了极大的方便。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END: &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中两个特别的表达式，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，这两者都可用于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;pattern&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中（参考前面的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语法），提供&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之后列出的操作（在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;{}&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;内）将在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;开始扫描输入之前执行，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之后列出的操作将在扫描完全部的输入之后执行。因此，通常使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;来显示变量和预置（初始化）变量，使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;来输出最终结果。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：累计销售文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;xs&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中的销售金额（假设销售金额在记录的第三字段）：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk &lt;br /&gt;&amp;gt;'BEGIN { FS=":";print "&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;统计销售金额&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;";total=0} &lt;br /&gt;&amp;gt;{print 3;total=total+3;} &lt;br /&gt;&amp;gt;END {printf "&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;销售金额总计：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;%.2f",total}' sx &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（注：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供的第二提示符，如要在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言中换行，则需在行尾加反斜杠&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;\&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在这里，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;预置了内部变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;FS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（字段分隔符）和自定义变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;total,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;同时在扫描之前显示出输出行头。而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;则在扫描完成后打印出总合计。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、流程控制语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;提供了完备的流程控制语句，其用法与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言类似。下面我们一一加以说明：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2.1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;if...else&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;格式：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;if(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;) &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1 &lt;br /&gt;else &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2 &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;格式中&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;可以是多个语句，如果你为了方便&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;判断也方便你自已阅读，你最好将多个语句用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;{}&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;括起来。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;分枝结构允许嵌套，其格式为：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;if(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;{if(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1 &lt;br /&gt;else &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2 &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;3 &lt;br /&gt;else {if(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;3) &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;4 &lt;br /&gt;else &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;5 &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;6 &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;当然实际操作过程中你可能不会用到如此复杂的分枝结构，这里只是为了给出其样式罢了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2.2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;格式为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;while(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;) &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2.3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;do-while&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;格式为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;do &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;}while(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;条件判断语句）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2.4&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;格式为：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;for(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;初始表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;终止条件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;步长表达式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;) &lt;br /&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; while&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;do-while&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句中允许使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;break,continue&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句来控制流程走向，也允许使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这样的语句来退出。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;break &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中断当前正在执行的循环并跳到循环外执行下一条语句。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;continue&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;从当前位置跳到循环开始处执行。对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的执行有两种情况：当&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; exit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句不在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中时，任何操作中的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令表现得如同到了文件尾，所有模式或操作执行将停止，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;模式中的操作被执行。而出现在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;将导致程序终止。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：为了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中的自定义函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;定义和调用用户自己的函数是几乎每个高级语言都具有的功能，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;也不例外，但原始的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;并不提供函数功能，只有在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;nawk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或较新的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;版本中才可以增加函数。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数的使用包含两部分：函数的定义与函数调用。其中函数定义又包括要执行的代码（函数本身）和从主程序代码传递到该函数的临时调用。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数的定义方法如下：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数名&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;参数表&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;){ &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数体&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;gawk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中允许将&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;省略为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;func&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，但其它版本的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不允许。函数名必须是一个合法的标志符，参数表中可以不提供参数（但在调用函数时函数名后的一对括号仍然是不可缺少的），也可以提供一个或多个参数。与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言相似，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的参数也是通过值来传递的。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中调用函数比较简单，其方法与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言相似，但&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;比&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语言更为灵活，它不执行参数有效性检查。换句话说，在你调用函数时，可以列出比函数预计（函数定义中规定）的多或少的参数，多余的参数会被&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所忽略，而不足的参数，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;将它们置为缺省值&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或空字符串，具体置为何值，将取决于参数的使用方式。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;函数有两种返回方式：隐式返回和显式返回。当&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;执行到函数的结尾时，它自动地返回到调用程序，这是函数是隐式返回的。如果需要在结束之前退出函数，可以明确地使用返回语句提前退出。方法是在函数中使用形如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;return &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;返回值&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;格式的语句。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：下面的例子演示了函数的使用。在这个示例中，定义了一个名为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;print_header&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的函数，该函数调用了两个参数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;FileName&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; PageNum&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; FileName&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;参数传给函数当前使用的文件名，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;PageNum&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;参数是当前页的页号。这个函数的功能是打印（显示）出当前文件的文件名，和当前页的页号。完成这个功能后，这个函数将返回下一页的页号。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;nawk &lt;br /&gt;&amp;gt;'BEGIN{pageno=1;file=FILENAME &lt;br /&gt;&amp;gt;pageno=print_header(file&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;pageno)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;；&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;调用函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;print_header &lt;br /&gt;&amp;gt;printf("&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;当前页页号是：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;%d\n",pageno); &lt;br /&gt;&amp;gt;} &lt;br /&gt;&lt;br /&gt;&amp;gt;#&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;定义函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;print_header &lt;br /&gt;&amp;gt;function print_header(FileName,PageNum){ &lt;br /&gt;&amp;gt;printf("%s %d\n",FileName,PageNum); &amp;gt;PageNum++;return PageNUm; &lt;br /&gt;&amp;gt;} &lt;br /&gt;&amp;gt;}' myfile &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;执行这个程序将显示如下内容：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;myfile 1 &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;当前页页号是：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2 &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;高级输入输出&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;1.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;读取下一条记录：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句导致&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;读取下一个记录并完成模式匹配，然后立即执行相应的操作。通常它用匹配的模式执行操作中的代码。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;next&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;导致这个记录的任何额外匹配模式被忽略。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;2.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;简单地读取一条记录&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; getline &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录，那么&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;将尤其有用。它完成一般字段的分离&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;设置字段变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; 0 FNR NF NR)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。如果成功则返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，失败则返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（到达文件尾）。如果需简单地读取一个文件，则可以编写以下代码：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：示例&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;{while(getline==1) &lt;br /&gt;{ &lt;br /&gt;#process the inputted fields &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;也可以使&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;保存输入数据在一个字段中，而不是通过使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline variable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的形式处理一般字段。当使用这种方式时，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NF&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;被置成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;FNR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;被增值。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;用户也可以使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&amp;lt;"filename"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;方式从一个给定的文件中输入数据，而不是从命令行所列内容输入数据。此时，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;将完成一般字段分离（设置字段变量&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NF)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。如果文件不存在，返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-1,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;成功，返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;表示失败。用户可以从给定文件中读取数据到一个变量中，也可以用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; stdin(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;标准输入设备）或一个包含这个文件名的变量代替&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;filename&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。值得注意的是当使用这种方式时不修改&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;FNR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;NR&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;另一种使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句的方法是从&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令接受输入，例如下面的例子&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;例：示例从&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;UNIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令接受输入&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;{while("who -u"|getline) &lt;br /&gt;{ &lt;br /&gt;#process each line from the who command &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;当然，也可以使用如下形式&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;"command" | getline variable &lt;br /&gt;&lt;br /&gt;3.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;关闭文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中允许在程序中关闭一个输入或输出文件，方法是使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;close&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;语句。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;close("filename" &lt;br /&gt;&lt;br /&gt;filename&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;可以是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;打开的文件（也可以是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;stdin,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;包含文件名的变量或者&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;getline&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;使用的确切命令）。或一个输出文件（可以是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;stdout&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，包含文件名的变量或使用管道的确切命令）。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;4.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;输出到一个文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中允许用如下方式将结果输出到一个文件：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;printf("hello word!\n"&amp;gt;"datafile" &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;printf("hello word!\n"&amp;gt;&amp;gt;"datafile" &lt;br /&gt;&lt;br /&gt;5.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;输出到一个命令&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中允许用如下方式将结果输出到一个命令：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;printf("hello word!\n"|"sort-t','" &lt;br /&gt;&lt;br /&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;混合编程&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;可以作为一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令使用，因此&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;能与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;批处理程序很好的融合在一起，这给实现&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;程序的混合编程提供了可能。实现混合编程的关键是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之间的对话，换言之，就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;与&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;之间的信息交流&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;:awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;从&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中获取所需的信息（通常是变量的值）、在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;中执行&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令行、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell script&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;将命令执行的结果送给&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;awk&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;处理以及&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell scri&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109674.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109674.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109670.html</id><title type="text">GREP应用简介(转)</title><summary type="text">1. grep简介grep （global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来）是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展，支持更多的re元字符， fgrep就是fixed grep或fast grep，它们把所有的字母都看作单词，也就是说，正则表达式中的元字符表示回其自身的字面意义，不再特殊。Linux使用GNU版本的g</summary><published>2011-07-18T08:14:00Z</published><updated>2011-07-18T08:14:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109670.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109670.html"/><content type="html">&lt;p  style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1. grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;简介&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;global search regular expression(RE) and print out the line,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;全面搜索正则表达式并把行打印出来）是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹配的行打印出来。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Unix&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;家族包括&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;fgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;fgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的命令只跟&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;有很小不同。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的扩展，支持更多的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;re&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;元字符，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; fgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;fixed grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;fast grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，它们把所有的字母都看作单词，也就是说，正则表达式中的元字符表示回其自身的字面意义，不再特殊。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Linux&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;GNU&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;版本的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。它功能更强，可以通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-G&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-E&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-F&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令行选项来使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;fgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的功能。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的工作方式是这样的，它在一个或多个文件中搜索字符串模板。如果模板包括空格，则必须被引用，模板后的所有字符串被看作文件名。搜索的结果被送到屏幕，不影响原文件内容。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;可用于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;shell&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;脚本，因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;通过返回一个状态值来说明搜索的状态，如果模板搜索成功，则返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，如果搜索不成功，则返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，如果搜索的文件不存在，则返回&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。我们利用这些返回值就可进行一些自动化的文本处理工作。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2. grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;正则表达式元字符集（基本集）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;^&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;锚定行的开始&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'^grep'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配所有以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;开头的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;$&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;锚定行的结束&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'grep$'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配所有以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;结尾的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配一个非换行符的字符&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'gr.p'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;gr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;后接一个任意字符，然后是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;*&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配零个或多个先前字符&lt;/span&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; &lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'*grep'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配所有一个或多个空格后紧跟&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; .*&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;一起用代表任意字符。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配一个指定范围内的字符，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'[Gg]rep'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[^]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配一个不在指定范围内的字符，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'[^A-FH-Z]rep'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配不包含&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;A-R&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;T-Z&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的一个字母开头，紧跟&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;rep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;(..)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;标记匹配字符，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'(love)'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;love&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;被标记为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;lt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;锚定单词的开始，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;:'&lt;br /&gt;&lt;br /&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;锚定单词的结束，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'grep&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配包含以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;结尾的单词的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;重复字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;次，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'0'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配包含&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;重复字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;至少&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;次，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'o'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配至少有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;重复字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，至少&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;次，不多于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;次，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'o'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;5--10&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;w&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配文字和数字字符，也就是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[A-Za-z0-9]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'Gw*p'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;G&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;后跟零个或多个文字或数字字符，然后是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;W&lt;br /&gt;&lt;br /&gt;w&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的反置形式，匹配一个或多个非单词字符，如点号句号等。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;b&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;单词锁定符，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;: 'bgrepb'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;只匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;3. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;用于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt; grep -E&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的元字符扩展集&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;+&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配一个或多个先前的字符。如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'[a-z]+able'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，匹配一个或多个小写字母后跟&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;able&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的串，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;loveable,enable,disable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;等。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配零个或多个先前的字符。如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'gr?p'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;gr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;后跟一个或没有字符，然后是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;a|b|c&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep|sed&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;sed&lt;br /&gt;&lt;br /&gt;()&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;分组符号，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;love(able|rs)ov+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;loveable&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;lovers&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，匹配一个或多个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;ov&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x,x,x&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;作用同&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;x,x,x&lt;br /&gt;&lt;br /&gt;4. POSIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;字符类&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;为了在不同国家的字符编码中保持一至，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;POSIX(The Portable Operating System Interface)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;增加了特殊的字符类，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:alnum:]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;A-Za-z0-9&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的另一个写法。要把它们放到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;号内才能成为正则表达式，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[A- Za-z0-9]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[[:alnum:]]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;。在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;Linux&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;下的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;除&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;fgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;外，都支持&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;POSIX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的字符类。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:alnum:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;文字数字字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:alpha:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;文字字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:digit:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;数字字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:graph:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;非空字符（非空格、控制字符）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:lower:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;小写字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:cntrl:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;控制字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:print:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;非空字符（包括空格）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:punct:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;标点符号&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:space:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;所有空白字符（新行，空格，制表符）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:upper:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;大写字符&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;[:xdigit:]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;十六进制数字（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0-9&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;a-f&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;A-F&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;5. Grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;命令选项&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;同时显示匹配行上下的？行，如：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep -2 pattern filename&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;同时显示匹配行的上下&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-b&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--byte-offset&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;打印匹配行前面打印该行所在的块号码。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-c,--count&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;只打印匹配的行数，不显示匹配的内容。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-f File&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--file=File&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;从文件中提取模板。空文件中包含&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个模板，所以什么都不匹配。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-h&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--no-filename&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;当搜索多个文件时，不显示匹配文件名前缀。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--ignore-case&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;忽略大小写差别。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-q&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--quiet&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;取消显示，只返回退出状态。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;则表示找到了匹配的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-l&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--files-with-matches&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;打印匹配模板的文件清单。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-L&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--files-without-match&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;打印不匹配模板的文件清单。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--line-number&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;在匹配的行前面打印行号。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--silent&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;不显示关于不存在或者无法读取文件的错误信息。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-v&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--revert-match&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;反检索，只显示不匹配的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-w&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--word-regexp&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果被&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;引用，就把表达式做为一个单词搜索。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;-V&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;--version&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;显示软件版本信息。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;6. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;实例&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;要用好&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;这个工具，其实就是要写好正则表达式，所以这里不对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的所有功能进行实例讲解，只列几个例子，讲解一个正则表达式的写法。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;$ ls -l | grep '^a'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;通过管道过滤&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;ls -l&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;输出的内容，只显示以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;开头的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;$ grep 'test' d*&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;显示所有以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;开头的文件中包含&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;test&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;$ grep 'test' aa bb cc&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;显示在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;aa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;bb&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;cc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;文件中匹配&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;test&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;$ grep '[a-z]' aa&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;显示所有包含每个字符串至少有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;个连续小写字符的字符串的行。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;$ grep 'w(es)t.*' aa&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;如果&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;west&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;被匹配，则&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;es&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;就被存储到内存中，并标记为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，然后搜索任意个字符（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;.*&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;），这些字符后面紧跟着另外一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;es&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;（），找到就显示该行。如果用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;egrep&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;grep -E&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;，就不用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;号进行转义，直接写成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;'w(es)t.*'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"&gt;就可以了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-family: Times New Roman;" face="Times New Roman"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109670.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109670.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109668.html</id><title type="text">Linux Find 命令精通指南(转)</title><summary type="text">作者：Sheryl Calish简单介绍这一无处不在的命令的强大的方面以及混乱的方面。Linux find 命令是所有 Linux 命令中最有用的一个，同时也是最混乱的一个。它很难，因为它的语法与其他 Linux 命令的标准语法不同。但是，它很强大，因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令，您不但可以找到具这些属性任意组合的文件，还可以对它找到的文件执行操作。本文的目的是，通过概述 find 命令的用途和潜能，简化该命令的学习和使用。同时，它将针对 find 命令的某些最强大但最混乱的方面提供一个基本的指南和参考。[注意：本文使用的 find 版本是 GN</summary><published>2011-07-18T08:12:00Z</published><updated>2011-07-18T08:12:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109668.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109668.html"/><content type="html">&lt;p align="left"&gt;作者：Sheryl Calish&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;简单介绍这一无处不在的命令的强大的方面以及混乱的方面。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;Linux find 命令是所有 Linux 命令中最有用的一个，同时也是最混乱的一个。它很难，因为它的语法与其他 Linux 命令的标准语法不同。但是，它很强大，因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令，您不但可以找到具这些属性任意组合的文件，还可以对它找到的文件执行操作。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;本文的目的是，通过概述 find 命令的用途和潜能，简化该命令的学习和使用。同时，它将针对 find 命令的某些最强大但最混乱的方面提供一个基本的指南和参考。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[注意：本文使用的 find 版本是 GNU 版本，因此，某些细节可能与其他版本的 find 有所不同。]&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;基本格式&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;开始之前，我们先来看一下 find 命令的基本结构：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find&amp;nbsp;&amp;nbsp; start_directory&amp;nbsp; test&amp;nbsp; options&amp;nbsp;&amp;nbsp; criteria_to_match&lt;br /&gt;action_to_perform_on_results&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在以下命令中，find 将开始在当前目录（用&amp;ldquo;.&amp;rdquo;表示）中查找任何扩展名为&amp;ldquo;java&amp;rdquo;的文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -name&amp;nbsp; "*.java"&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面是该命令所找到的命令的缩略清单：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -name&amp;nbsp; "*.java"&lt;br /&gt;./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java&lt;br /&gt;./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java&lt;br /&gt;..&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[注意：如果您从本文剪切并粘贴来运行该 find 命令，您可能需要使用自己的键盘替换双引号 (&amp;ldquo;&amp;rdquo;) 才能得出正确的结果。]&lt;/p&gt;&#xD;
&lt;p align="left"&gt;以下命令将执行相同的操作。在这两种情况下，您都需要对通配符进行转义以确保它传递到 find 命令并且不由 shell 解释。因此，请将您的搜索字符串放到引号里，或者在它前面加上反斜线：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -name&amp;nbsp; \*.java&lt;/p&gt;&#xD;
&lt;p align="left"&gt;尽管 find 的所有参数均为可选，但是如果您未指定从哪里开始搜索，搜索默认将在当前目录中开始。如果您不指定要匹配的测试连接、选项或值，您的结果将不完整或者无区别。&lt;br /&gt;&lt;br /&gt;运行以下三个 find 命令将得出同样的结果 &amp;mdash; 当前目录和所有子目录中的所有文件（包括隐藏文件）的完整清单：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find &lt;br /&gt;find .&lt;br /&gt;find . -print&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这类似于运行一个带 -la 选项的 ls 命令。如果您希望上述命令的输出包含完整的路径名（或许是为了备份），您将需要指定起始目录的完整路径：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /home/bluher -name \*.java&lt;br /&gt;/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java&lt;br /&gt;/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/&lt;br /&gt;...&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行，以下命令将下到 /usr、/home /tmp 目录查找所有 jar 文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /usr /home /tmp &amp;nbsp;-name &amp;nbsp;"*.jar"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;但是，如果您没有相应的权限，您在开始浏览许多系统目录时将生成错误消息。以下是一个示例：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find:&amp;nbsp; /tmp/orbit-root: Permission denied&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您可以通过附加您的搜索字符串来避免混乱的输出，如下所示：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /usr /home&amp;nbsp; /tmp -name "*.jar" 2&amp;gt;/dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这会将所有错误消息发送到空文件，因此提供清理器输出。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;默认情况下，find 是区分大小写的。对于不区分大小写的 find，将 -iname 测试替换为 -name 测试。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find downloads&amp;nbsp; -iname "*.gif"&lt;br /&gt;downloads/.xvpics/Calendar05_enlarged.gif&lt;br /&gt;downloads/lcmgcfexsmall.GIF&lt;/p&gt;&#xD;
&lt;p align="left"&gt;除文件名外，您还可以按类型搜索文件。例如，您可以使用以下命令查找一个目录中的所有子目录：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -type d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您可以使用以下命令查找您的/usr 目录中的所有符号链接：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /usr -type l&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这可能会列出 3,000 多个链接。以下的任何一个命令使用根权限运行都将列出 /usr 目录中的链接以及它所指向的文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;# find /usr/bin&amp;nbsp; -type l&amp;nbsp; -name "z*" -exec ls&amp;nbsp; -l {} \;&lt;br /&gt;lrwxrwxrwx 1 root&amp;nbsp; root 8 Dec 12 23:17 /usr/bin/zsh -&amp;gt; /bin/zsh&lt;br /&gt;lrwxrwxrwx 1 root&amp;nbsp; root 5 Dec 12 23:17 /usr/bin/zless -&amp;gt; zmore&lt;br /&gt;lrwxrwxrwx 1 root&amp;nbsp; root 9 Dec 12 23:17 /usr/bin/zcat -&amp;gt; /bin/zcat&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /usr/bin -type&amp;nbsp; l&amp;nbsp; -name "z*" -ls&lt;/p&gt;&#xD;
&lt;p align="left"&gt;但是，第二个更短的命令将列出更多的文件，以及目录和 inode 信息：在本文后面的部分中，我们将讨论 -exec 和 -ls 操作的用法。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;其他 find 可以找到的文件类型包括：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;bull; b &amp;mdash; 块（缓存）特殊&lt;br /&gt;&amp;bull; c &amp;mdash; 字符（未缓存）特殊&lt;br /&gt;&amp;bull; p &amp;mdash; 命名管道 (FIFO)&lt;br /&gt;&amp;bull; s &amp;mdash; 套接字&lt;/p&gt;&#xD;
&lt;p align="left"&gt;使用根作为 find 命令的起点会极大地降低系统的速度。如果您必须运行这样一个命令，您可以在非高峰时段或晚上运行它。您可以使用以下语法将输出重定向到一个文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find&amp;nbsp; /&amp;nbsp;&amp;nbsp; -print &amp;gt; masterfilelist.out&lt;/p&gt;&#xD;
&lt;p align="left"&gt;如果您错误地输入一个 find 命令，生成大量不必要的输出，只需按 CTRL-C 中断该命令，这将停止最近执行的命令。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在 具多个文件系统的企业网络上，限制 find 查找的文件也是一个特别好用的方法。尽可能多地使用选项和测试以减少系统上的负载。用于此目的的两个最有用的选项是 -xdev 和 -mount。它们通过阻止 find 下到其他文件系统（如 MS-DOS、CD-ROM 或 AFS）上的目录中缩短了搜索范围。这将搜索限制为同一类型的文件系统作为起始目录。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;如果运行 mount 命令，双引导系统上的用户可以使用这些选项。假设涉及 Windows 分区，您可以使用类似以下的命令安装它：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;mount -t vfat&amp;nbsp; /dev/sda1 /mnt/msdos&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您使用的实际命令取决于您的系统设置。您可以通过运行 df 或执行以下命令验证该分区已安装：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /mnt/msdos&amp;nbsp; -name "*.txt" 2&amp;gt; /dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您应该看到 MS Windows 分区上列出了很多的文件。现在，运行以下带 -mount 或 -xdev 选项的命令：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -name&amp;nbsp; "*.txt" -mount 2&amp;gt; /dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;或者&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -name&amp;nbsp; "*.txt" -xdev 2&amp;gt; /dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;还可以使用 -fstype 测试明确告知 find 在哪个文件系统中查找，如以下示例中所示：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -name&amp;nbsp; "*.txt" -fstype vfat 2&amp;gt; /dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;查找时间&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;bull; mtime &amp;mdash; 文件内容上次修改时间 &lt;br /&gt;&amp;bull; atime &amp;mdash; 文件被读取或访问的时间&lt;br /&gt;&amp;bull; ctime &amp;mdash; 文件状态变化时间&lt;/p&gt;&#xD;
&lt;p align="left"&gt;mtime 和 atime 的含义都是很容易理解的，而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据，因此，如果与文件有关的元数据发生变化，则 inode 数据也将变化。这可能是由一系列操作引起的，包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下，文件内容不会被读取或修改，因此 mtime 和 atime 不会改变，但 ctime 将发生变化。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这些时间选项都需要与一个值 n 结合使用，指定为 -n、n 或 +n。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;bull; -n 返回项小于 n &lt;br /&gt;&amp;bull; +n 返回项大于 n &lt;br /&gt;&amp;bull; n 返回项正好与 n 相等&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面，我们来看几个例子，以便于理解。以下命令将查找在最近 1 小时内修改的所有文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -mtime -1&lt;br /&gt;./plsql/FORALLSample&lt;br /&gt;./plsql/RegExpDNASample&lt;br /&gt;/plsql/RegExpSample&lt;/p&gt;&#xD;
&lt;p align="left"&gt;用 1 取代 -1 运行同一命令将查找恰好在 1 小时以前修改的所有文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -mtime 1&lt;/p&gt;&#xD;
&lt;p align="left"&gt;上述命令不会生成任何结果，因为它要求完全吻合。以下命令查找 1 个多小时以前修改的所有文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -mtime +1&lt;/p&gt;&#xD;
&lt;p align="left"&gt;默认情况下，-mtime、-atime 和 -ctime 指的是最近 24 小时。但是，如果它们前面加上了开始时间选项，则 24 小时的周期将从当日的开始时间算起。您还可以使用 mmin、amin 和 cmin 查找在不到 1 小时的时间内变化了的时间戳。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;如果您在登录到您的帐户后立即运行以下命令，您将找到在不到 1 分钟以前读取的所有文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -amin -1&lt;br /&gt;./.bashrc&lt;br /&gt;/.bash_history&lt;br /&gt;./.xauthj5FCx1&lt;/p&gt;&#xD;
&lt;p align="left"&gt;应该注意的是，使用 find 命令查找文件本身将更改该文件的访问时间作为其元数据的一部分。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您还可以使用 -newer、-anewer 和 &amp;ndash;cnewer 选项查找已修改或访问过的文件与特定的文件比较。这类似于 -mtime、-atime 和 &amp;ndash;ctime。&lt;br /&gt;&lt;br /&gt;&amp;bull; -newer 指内容最近被修改的文件&lt;br /&gt;&amp;bull; -anewer 指最近被读取过的文件&lt;br /&gt;&amp;bull; -cnewer 指状态最近发生变化的文件&lt;/p&gt;&#xD;
&lt;p align="left"&gt;要查找您的主目录中自上一个 tar 文件以来以某种方式编辑过的所有文件，使用以下命令：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -newer&amp;nbsp; backup.tar.gz&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;按大小查找文件&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;-size 选项查找满足指定的大小条件的文件。要查找所有大于 5MB 的用户文件，使用&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -size&amp;nbsp; +5000000c 2&amp;gt; /dev/null&lt;br /&gt;/var/log/lastlog&lt;br /&gt;/var/log/cups/access_log.4&lt;br /&gt;/var/spool/mail/bluher&lt;/p&gt;&#xD;
&lt;p align="left"&gt;结尾的&amp;ldquo;c&amp;rdquo;以字节为单位报告我们的结果。默认情况下，find 以 512 字节块的数量报告大小。如果我们将&amp;ldquo;c&amp;rdquo;替换为&amp;ldquo;k&amp;rdquo;，我们还会看到以千字节的数量报告的结果，如果使用&amp;ldquo;w&amp;rdquo;，则会看到以两字节字的数量报告的结果。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;-size 选项经常用于搜索所有零字节文件并将它们移至 /tmp/zerobyte 文件夹。以下命令恰好可以完成这一任务：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find test -type f&amp;nbsp; -size 0 -exec mv {} /tmp/zerobyte \;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;-exec 操作允许 find 在它遇到的文件上执行任何 shell 命令。在本文的后面部分，您将看到其用法的更多示例。大括号允许移动每个空文件。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;选项 -empty 还可用于查找空文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find test -empty&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;test/foo&lt;br /&gt;test/test&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;按权限和所有者查找&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;要监视您的系统安全离不开 find 命令。您可以使用符号或八进制表示法查找面向广大用户开放的文件，如下所示：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -type f&amp;nbsp; -perm a=rwx -exec ls -l {} \;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;或者&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -type f&amp;nbsp; -perm 777 -exec ls -l {} \;&lt;br /&gt;-rwxrwxrwx 1 bluher&amp;nbsp; users 0 May 24 &lt;st1:time minute="14" hour="14"&gt;14:14&lt;/st1:time&gt; ./test.txt&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在这一部分中，在上面和下面的命令中，我们使用了 -exec ls -l 操作，因此，您可以看到返回的文件的实际权限。以下命令将查找可由&amp;ldquo;other&amp;rdquo;和组写入的文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find plsql -type f&amp;nbsp; -perm -ug=rw -exec ls -l {} \; 2&amp;gt;/dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;或者&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find plsql -type f&amp;nbsp; -perm -220 -exec ls -l {} \; 2&amp;gt;/dev/null &lt;br /&gt;-rw-rw-rw- 1 bluher users 4303&amp;nbsp; Jun&amp;nbsp; 7&amp;nbsp;&amp;nbsp; 2004 plsql/FORALLSample/doc/otn_new.css&lt;br /&gt;-rw-rw-rw- 1 bluher users 10286 Jan&amp;nbsp; 12&amp;nbsp; 2005&amp;nbsp; plsql/FORALLSample/doc/readme.html&lt;br /&gt;-rw-rw-rw- 1 bluher users 22647 Jan&amp;nbsp; 12&amp;nbsp; 2005&amp;nbsp; plsql/FORALLSample/src/config.sql&lt;br /&gt;..&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下一个命令将查找由用户、组或二者共同写入的文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find plsql -type f&amp;nbsp; -perm /ug=rw -exec ls -l {} \; 2&amp;gt;/dev/null, or,&lt;br /&gt;find plsql -type f&amp;nbsp; -perm /220 -exec ls -l {} \; 2&amp;gt;/dev/null &lt;br /&gt;-rw-r--r-- 1 bluher users 21473&amp;nbsp; May&amp;nbsp; 3 16:02 plsql/regexpvalidate.zip&lt;br /&gt;-rw-rw-rw- 1 bluher users 4303&amp;nbsp; Jun&amp;nbsp; 7&amp;nbsp;&amp;nbsp; 2004 plsql/FORALLSample/doc/otn_new.css&lt;br /&gt;-rw-rw-rw- 1 bluher users 10286 Jan&amp;nbsp; 12&amp;nbsp; 2005&amp;nbsp; plsql/FORALLSample/doc/readme.html&lt;br /&gt;-rw-rw-rw- 1 bluher users 22647 Jan&amp;nbsp; 12&amp;nbsp; 2005&amp;nbsp; plsql/FORALLSample/src/config.sql&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您可能会看到以下命令在 Web 和较早的手册中引用过：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find . -perm +220&amp;nbsp; -exec ls -l {} \; 2&amp;gt; /dev/null&lt;/p&gt;&#xD;
&lt;p align="left"&gt;+ 符号的作用与 / 符号相同，但是现在新版 GNU findutils 中不支持使用该符号。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;要查找您的系统上所有人都可以写入的所有文件，使用以下命令：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -wholename&amp;nbsp; '/proc' -prune&amp;nbsp; -o&amp;nbsp; -type f -perm -0002 -exec ls -l {} \;&lt;br /&gt;-rw-rw-rw- 1 bluher users 4303&amp;nbsp; Jun&amp;nbsp; 7&amp;nbsp;&amp;nbsp; 2004/home/bluher/plsql/FORALLSample/doc/otn_new.css&lt;br /&gt;-rw-rw-rw- 1 bluher users 10286 Jan&amp;nbsp; 12&amp;nbsp; 2005&amp;nbsp; /home/bluher/plsql/FORALLSample/doc/readme.html&lt;br /&gt;...&lt;/p&gt;&#xD;
&lt;p align="left"&gt;第 4 个权限将在稍后进行讨论，但最后一个字段中的&amp;ldquo;2&amp;rdquo;是文件权限中的&amp;ldquo;other&amp;rdquo;字段，也称为写入位。我们在权限模式 0002 前面使用了破折号，以指明我们希望看到为 other 设置了写权限的文件，无论其他权限设置为什么。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;上述命令还引入了三个新概念。针对文件模式&amp;ldquo;/proc&amp;rdquo;使用 -wholename 测试，如果该模式已找到，-prune 可防止 find 下到该目录中。布尔类型&amp;ldquo;-o&amp;rdquo;使 find 可以针对其他目录处理该命令的其余部分。由于每个表达式之间有一个假设的隐式 and 运算符 (-a)，因此，如果左侧的表达式计算结果为 false，and 之后的表达式将不进行计算；因此需要 -o 运算符。Find 还支持布尔类型 -not、!，就像使用括号强行优先一样。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;系统管理员经常使用 find 通过用户或组的名称或 ID 搜索特定用户或组的常规文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[root] $&amp;nbsp; find / -type f -user bluher -exec ls -ls {}&amp;nbsp; \;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面是这样一个命令的高度精简的输出示例：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;4 -rw-r--r-- 1 bluher users 48&amp;nbsp; May&amp;nbsp; 1 &lt;st1:time minute="9" hour="3"&gt;03:09&lt;/st1:time&gt;&amp;nbsp; /home/bluher/public_html/.directory&lt;br /&gt;4 -rw-r--r-- 1 bluher users 925&amp;nbsp; May&amp;nbsp; 1 &lt;st1:time minute="9" hour="3"&gt;03:09&lt;/st1:time&gt; /home/bluher/.profile&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您还可以使用 find 按组查找文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[root] $ find /&amp;nbsp; -type f -group users&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -type d -gid&amp;nbsp; 100&lt;/p&gt;&#xD;
&lt;p align="left"&gt;该命令将列出由 ID 为 100 的组拥有的目录。要找到相应的 uid 或 gid，您可以针对 /etc/passwd 或 /etc/group 文件运行 more 或 cat 命令。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;除了查找特定已知用户和组的文件外，您还会发现它对于查找没有这些信息的文件也很有用。下一个命令将识别未列在 /etc/passwd 或 /etc/group 文件中的文件：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -nouser -o&amp;nbsp; -nogroup&lt;/p&gt;&#xD;
&lt;p align="left"&gt;上述命令可能不会在您的系统上生成实际的结果。但是，它可用于识别或许在经常移动后没有用户或组的文件。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;好了，现在我们可以解决本部分开始时提到的格外重要的权限了。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;SGID 和 SUID 是特殊访问权限标志，可以分配给基于 UNIX 的操作系统上的文件和目录。设置它们是为了允许访问计算机系统的普通用户使用临时提升的权限执行二进制可执行文件。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find /&amp;nbsp; \( -perm -2000 -o -perm -4000 \) -ls&lt;br /&gt;167901&amp;nbsp;&amp;nbsp; 12 -rwsr-xr-x&amp;nbsp;&amp;nbsp; 1 root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9340 Jun 16&amp;nbsp; 2006 /usr/bin/rsh&lt;br /&gt;167334&amp;nbsp;&amp;nbsp; 12 -rwxr-sr-x&amp;nbsp;&amp;nbsp; 1 root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tty&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10532 May&amp;nbsp; 4&amp;nbsp; 2007 /usr/bin/wall&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在上述命令中，您可以看到转义括号的使用。您还可以看到权限的不同。第一个文件设置了 SGID 权限，第二个文件设置了 SUID 权限。上述命令中的最后的操作与带 -exec ls -dils 操作的 find 效果类似。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;控制&lt;/b&gt;&lt;b&gt; find&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;与 Linux 中的许多命令不同，find 不需要 -r 或 -R 选项即可下到子目录中。它默认情况下就这样操作。但是，有时您可能希望限制这一行为。因此，选项 -depth、-maxdepth 和 -mindepth 以及操作 -prune 就派上用场了。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;我们已经看到了 -prune 是多么有用，下面让我们来看看 -depth、-maxdepth 和 -mindepth 选项。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;-maxdepth 和 -mindepth 选项允许您指定您希望 find 搜索深入到目录树的哪一级别。如果您希望 find 只在目录的一个级别中查找，您可以使用 maxdepth 选项。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;通过运行以下命令在目录树的前三个级别中查找日志文件，您可以看到 -maxdepth 的效果。使用该选项较之不使用该选项所生成的输出要少得多。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -maxdepth 3&amp;nbsp; -name "*log"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;您还可以让 find 在至少下至目录树三个级别的目录中查找：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find / -mindepth 3&amp;nbsp; -name "*log"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;-depth 选项确保先在一个目录中进行查找，然后才在其子目录中进行查找。以下命令提供了一个示例：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;find -name "*test*" -depth&lt;br /&gt;./test/test&lt;br /&gt;./test&lt;br /&gt;./localbin/test&lt;br /&gt;./localbin/test_shell_var&lt;br /&gt;./localbin/test.txt&lt;br /&gt;./test2/test/test&lt;br /&gt;./test2/test&lt;br /&gt;./test2&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;find &lt;/b&gt;&lt;b&gt;世界&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;我们已经看过了 find 命令的一些更加有用以及有点难懂的功能，但是 find 还可以执行更多的任务。例如，有多个选项可以使 find 与较低的 UNIX 版本和其他操作系统相兼容并允许您执行打印输出到多个文件等操作。阅读本文后，您现在已经有了理解 find 参考指南的背景，我鼓励您深入研究这一强大、有用的工具&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109668.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109668.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109664.html</id><title type="text">VIM命令表(转)</title><summary type="text">进入vi的命令vi filename打开或新建文件，并将光标置于第一行首vi +n filename打开文件，并将光标置于第n行首vi + filename打开文件，并将光标置于最后一行首vi +/pattern filename打开文件，并将光标置于第一个与pattern匹配的串处vi -r filename 在上次正用vi编辑时发生系统崩溃，恢复filenamevi filename....filename打开多个文件，依次进行编辑移动光标命令h光标左移一个字符l光标右移一个字符space光标右移一个字符Backspace光标左移一个字符k或Ctrl+p光标上移一行 j或Ctrl+n光标下</summary><published>2011-07-18T08:11:00Z</published><updated>2011-07-18T08:11:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109664.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109664.html"/><content type="html">&lt;table cellspacing="0" cellpadding="0" border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;进入vi的命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;vi filename&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;打开或新建文件，并将光标置于第一行首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;vi +n filename&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;打开文件，并将光标置于第n行首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;vi + filename&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;打开文件，并将光标置于最后一行首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;vi +/pattern filename&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;打开文件，并将光标置于第一个与pattern匹配的串处&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;vi -r filename&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在上次正用vi编辑时发生系统崩溃，恢复filename&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;vi filename....filename&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;打开多个文件，依次进行编辑&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;移动光标命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标左移一个字符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标右移一个字符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;space&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标右移一个字符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Backspace&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标左移一个字符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;k或Ctrl+p&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标上移一行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;j或Ctrl+n&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标下移一行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Enter&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标下移一行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;w或W&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标右移一个字至字首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;b或B&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标左移一个字至字首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;e或E&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标右移一个字至字尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;)&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至句尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至句首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至段落开头 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;{&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至段落结尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;nG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至第n行首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;n+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标下移n行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;n-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标上移n行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;n$&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至第n行尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;H&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至屏幕顶行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;M&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至屏幕中间行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;L&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至屏幕最后行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;（注意是数字零）光标移至当前行首&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;$&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标移至当前行尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;屏幕翻滚类命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Ctrl+u&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;向文件首翻半屏&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Ctrl+d&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;向文件尾翻半屏&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Ctrl+f&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;向文件尾翻一屏&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Ctrl＋b&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;向文件首翻一屏&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;nz&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;插入文本类命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;i&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在光标前&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;I&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在当前行首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;a&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;光标后&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;A&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在当前行尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;o&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在当前行之下新开一行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;O&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在当前行之上新开一行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;r&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;替换当前字符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;R&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;替换当前字符及其后的字符，直至按&lt;st1:stockticker&gt;ESC&lt;/st1:stockticker&gt;键&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;s&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;从当前光标位置处开始，以输入的文本替代指定数目的字符&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;S&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删除指定数目的行，并以所输入文本代替之&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;ncw或nCW&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;修改指定数目的字&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;nCC&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;修改指定数目的行&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;删除命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;ndw或ndW&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删除光标处开始及其后的n-1个字&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;do&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删至行首&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;d$&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删至行尾&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;ndd&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删除当前行及其后n-1行&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;x或X&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删除一个字符，x删除光标后的，而X删除光标前的&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;Ctrl+u&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;删除输入方式下所输入的文本&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="576" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;搜索及替换命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;/pattern&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;从光标开始处向文件尾搜索pattern&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;?pattern&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;从光标开始处向文件首搜索pattern&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在同一方向重复上一次搜索命令&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在反方向上重复上一次搜索命令&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：s/p1/p2/g&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将当前行中所有p1均用p2替代&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：n1,n2s/p1/p2/g&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将第n1至n2行中所有p1均用p2替代&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：g/p1/s//p2/g&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将文件中所有p1均用p2替换&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;选项设置&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;列出所有选项设置情况&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;term&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;设置终端类型&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;ignorance&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在搜索中忽略大小写&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;list&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;显示制表位(Ctrl+I)和行尾标志（$)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;number&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;显示行号&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;report&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;显示由面向行的命令修改过的数目&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;terse&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;显示简短的警告信息&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;warn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;在转到别的文件时若没保存当前文件则显示NO write信息&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;nomagic&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;允许在搜索模式中，使用前面不带&amp;ldquo;&amp;rdquo;的特殊字符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;nowrapscan&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;禁止vi在搜索到达文件两端时，又从另一端开始&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;mesg&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;允许vi显示其他用户用write写到自己终端上的信息&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;最后行方式命令&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：n1,n2 co n3&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将n1行到n2行之间的内容拷贝到第n3行下&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：n1,n2 m n3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将n1行到n2行之间的内容移至到第n3行下&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：n1,n2 d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将n1行到n2行之间的内容删除&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：w&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;保存当前文件&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：e filename&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;打开文件filename进行编辑&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;保存当前文件并退出&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;退出vi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：q!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;不保存文件并退出vi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：!command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;执行shell命令command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：n1,n2 w!command&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将文件中n1行至n2行的内容作为command的输入并执行之，若不&lt;br /&gt;指定n1，n2，则表示将整个文件内容作为command的输入&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;：r!command&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将命令command的输出结果放到当前行&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="577" colspan="2"&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;寄存器操作&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;?nyy&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，&lt;br /&gt;n为一个数字&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;?nyw&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将当前行及其下n个字保存到寄存器？中，其中?为一个字母，&lt;br /&gt;n为一个数字&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;?nyl&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，&lt;br /&gt;n为一个数字&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;?p&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;取出寄存器？中的内容并将其放到光标位置处。这里？&lt;br /&gt;可以是一个字母，也可以是一个数字&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="174"&gt;&#xD;
&lt;p align="left"&gt;ndd：&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="403"&gt;&#xD;
&lt;p align="left"&gt;将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存&lt;br /&gt;器中。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109664.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109664.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109662.html</id><title type="text">正则表达式30分钟入门教程(转)</title><summary type="text">From the link: http://deerchao.net/tutorials/regex/regex.htm版本：v2.31 (2009-4-11) 作者：deerchao 转载请注明来源常用正则表达式 首页目录跳过目录本文目标如何使用本教程正则表达式到底是什么东西？入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配还有些什么东西没提到联系作者网上的资源及本文参考文献更新纪录本文目标30分钟内让你明白正则表达式是什么，并对它有一些基本的了解，让你可以在自己的程序或网页里使用它。如何使用本教程最重要的是——请给</summary><published>2011-07-18T08:09:00Z</published><updated>2011-07-18T08:09:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109662.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109662.html"/><content type="html">&lt;p style="text-align: left;" align="center"&gt;From the link: &lt;a href="http://deerchao.net/tutorials/regex/regex.htm"&gt;http://deerchao.net/tutorials/regex/regex.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p align="center"&gt;版本：v2.31 (2009-4-11) 作者：&lt;a href="http://deerchao.net/"&gt;deerchao&lt;/a&gt; 转载请注明&lt;a href="http://deerchao.net/tutorials/regex/regex.htm"&gt;来源&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;a href="http://deerchao.net/tutorials/regex/common.htm"&gt;常用正则表达式&lt;/a&gt; &lt;a href="http://deerchao.net/"&gt;首页&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;目录&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;a title="转到正文内容" href="http://deerchao.net/tutorials/regex/regex.htm#mission#mission"&gt;跳过目录&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#mission#mission"&gt;本文目标&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#howtouse#howtouse"&gt;如何使用本教程&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#introduction#introduction"&gt;正则表达式到底是什么东西？&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#getstarted#getstarted"&gt;入门&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#testing#testing"&gt;测试正则表达式&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#metacode#metacode"&gt;元字符&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#escape#escape"&gt;字符转义&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#repeat#repeat"&gt;重复&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#charclass#charclass"&gt;字符类&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#alternative#alternative"&gt;分枝条件&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#negation#negation"&gt;反义&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#grouping#grouping"&gt;分组&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#backreference#backreference"&gt;后向引用&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#lookaround#lookaround"&gt;零宽断言&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#negativelookaround#negativelookaround"&gt;负向零宽断言&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#commenting#commenting"&gt;注释&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#greedyandlazy#greedyandlazy"&gt;贪婪与懒惰&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#regexoptions#regexoptions"&gt;处理选项&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#balancedgroup#balancedgroup"&gt;平衡组/递归匹配&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#more#more"&gt;还有些什么东西没提到&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#contact#contact"&gt;联系作者&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#resources#resources"&gt;网上的资源及本文参考文献&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#updatelog#updatelog"&gt;更新纪录&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;本文目标&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;30分钟内让你明白正则表达式是什么，并对它有一些基本的了解，让你可以在自己的程序或网页里使用它。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;如何使用本教程&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;最重要的是&amp;mdash;&amp;mdash;请给我&lt;b&gt;30&lt;/b&gt;&lt;b&gt;分钟&lt;/b&gt;，如果你没有使用正则表达式的经验，请不要试图在30&lt;b&gt;秒&lt;/b&gt;内入门&amp;mdash;&amp;mdash;除非你是超人 :)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;别被下面那些复杂的表达式吓倒，只要跟着我一步一步来，你会发现正则表达式其实并没有你想像中的那么困难。当然，如果你看完了这篇教程之后，发现自己明白了很多，却又几乎什么都记不得，那也是很正常的&amp;mdash;&amp;mdash;我认为，没接触过正则表达式的人在看完这篇教程后，能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本的原理，以后你还需要多练习，多使用，才能熟练掌握正则表达式。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;除了作为入门教程之外，本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就作者本人的经历来说，这个目标还是完成得不错的&amp;mdash;&amp;mdash;你看，我自己也没能把所有的东西记下来，不是吗？&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm"&gt;清除格式&lt;/a&gt;&amp;nbsp;文本格式约定：&lt;b&gt;专业术语&lt;/b&gt;&amp;nbsp;元字符/语法格式&amp;nbsp;正则表达式&amp;nbsp;正则表达式中的一部分(用于分析)&amp;nbsp;&lt;i&gt;对其进行匹配的源字符串&lt;/i&gt;&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;对正则表达式或其中一部分的说明&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;a href="http://deerchao.net/tutorials/regex/regex.htm"&gt;隐藏边注&lt;/a&gt;&amp;nbsp;本文右边有一些注释，主要是用来提供一些相关信息，或者给没有程序员背景的读者解释一些基本概念，通常可以忽略。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;正则表达式到底是什么东西？&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;字符&lt;/b&gt;是计算机软件处理文字时最基本的单位，可能是字母，数字，标点符号，空格，换行符，汉字等等。&lt;b&gt;字符串&lt;/b&gt;是0个或更多个字符的序列。&lt;b&gt;文本&lt;/b&gt;也就是文字，字符串。说某个字符串&lt;b&gt;匹配&lt;/b&gt;某个正则表达式，通常是指这个字符串里有一部分（或几部分分别）能满足表达式给出的条件。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;在编写处理字符串的程序或网页时，经常会有查找符合某些复杂规则的字符串的需要。&lt;b&gt;正则表达式&lt;/b&gt;就是用于描述这些规则的工具。换句话说，正则表达式就是记录文本规则的代码。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;很可能你使用过Windows/Dos下用于文件查找的&lt;b&gt;通配符&lt;/b&gt;&lt;b&gt;(wildcard)&lt;/b&gt;，也就是*和?。如果你想查找某个目录下的所有的Word文档的话，你会搜索*.doc。在这里，*会被解释成任意的字符串。和通配符类似，正则表达式也是用来进行文本匹配的工具，只不过比起通配符，它能更精确地描述你的需求&amp;mdash;&amp;mdash;当然，代价就是更复杂&amp;mdash;&amp;mdash;比如你可以编写一个正则表达式，用来查找&lt;span style="text-decoration: underline;"&gt;所有以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;0&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开头，后面跟着&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;2-3&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个数字，然后是一个连字号&amp;ldquo;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&amp;rdquo;，最后是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;7&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;或&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;8&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;位数字的字符串&lt;/span&gt;(像&lt;i&gt;010-12345678&lt;/i&gt;或&lt;i&gt;0376-7654321&lt;/i&gt;)。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;入门&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;学习正则表达式的最好方法是从例子开始，理解例子之后再自己对例子进行修改，实验。下面给出了不少简单的例子，并对它们作了详细的说明。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;假设你在一篇英文小说里查找&lt;span style="text-decoration: underline;"&gt;hi&lt;/span&gt;，你可以使用正则表达式hi。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这几乎是最简单的正则表达式了，它可以精确匹配这样的字符串：&lt;span style="text-decoration: underline;"&gt;由两个字符组成，前一个字符是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;h,&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;后一个是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;i&lt;/span&gt;。通常，处理正则表达式的工具会提供一个忽略大小写的选项，如果选中了这个选项，它可以匹配&lt;i&gt;hi&lt;/i&gt;,&lt;i&gt;HI&lt;/i&gt;,&lt;i&gt;Hi&lt;/i&gt;,&lt;i&gt;hI&lt;/i&gt;这四种情况中的任意一种。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;不幸的是，很多单词里包含&lt;i&gt;hi&lt;/i&gt;这两个连续的字符，比如&lt;i&gt;him&lt;/i&gt;,&lt;i&gt;history&lt;/i&gt;,&lt;i&gt;high&lt;/i&gt;等等。用hi来查找的话，这里边的&lt;i&gt;hi&lt;/i&gt;也会被找出来。如果要&lt;span style="text-decoration: underline;"&gt;精确地查找&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;hi&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;这个单词&lt;/span&gt;的话，我们应该使用\bhi\b。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\b是正则表达式规定的一个特殊代码（好吧，某些人叫它&lt;b&gt;元字符，&lt;/b&gt;&lt;b&gt;metacharacter&lt;/b&gt;），代表着&lt;span style="text-decoration: underline;"&gt;单词的开头或结尾，也就是单词的分界处&lt;/span&gt;。虽然通常英文的单词是由空格，标点符号或者换行来分隔的，但是\b并不匹配这些单词分隔字符中的任何一个，它&lt;b&gt;只匹配一个位置&lt;/b&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;如果需要更精确的说法，\b匹配这样的位置：它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;假如你要找的是&lt;span style="text-decoration: underline;"&gt;hi&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;后面不远处跟着一个&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;Lucy&lt;/span&gt;，你应该用\bhi\b.*\bLucy\b。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这里，.是另一个元字符，匹配&lt;span style="text-decoration: underline;"&gt;除了换行符以外的任意字符&lt;/span&gt;。*同样是元字符，不过它代表的不是字符，也不是位置，而是数量&amp;mdash;&amp;mdash;它指定*&lt;span style="text-decoration: underline;"&gt;前边的内容可以连续重复使用任意次以使整个表达式得到匹配&lt;/span&gt;。因此，.*连在一起就意味着&lt;span style="text-decoration: underline;"&gt;任意数量的不包含换行的字符&lt;/span&gt;。现在\bhi\b.*\bLucy\b的意思就很明显了：&lt;span style="text-decoration: underline;"&gt;先是一个单词&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;hi,&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;然后是任意个任意字符&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;但不能是换行&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，最后是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;Lucy&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;这个单词&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;换行符就是'\n',ASCII编码为10(十六进制0x0A)的字符。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;如果同时使用其它元字符，我们就能构造出功能更强大的正则表达式。比如下面这个例子：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;0\d\d-\d\d\d\d\d\d\d\d匹配这样的字符串：&lt;span style="text-decoration: underline;"&gt;以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;0&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开头，然后是两个数字，然后是一个连字号&amp;ldquo;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&amp;rdquo;，最后是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;8&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个数字&lt;/span&gt;(也就是中国的电话号码。当然，这个例子只能匹配区号为3位的情形)。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这里的\d是个新的元字符，匹配&lt;span style="text-decoration: underline;"&gt;一位数字&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(0&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，或&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，或&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;2&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，或&amp;hellip;&amp;hellip;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;。-不是元字符，只匹配它本身&amp;mdash;&amp;mdash;连字符(或者减号，或者中横线，或者随你怎么称呼它)。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;为了避免那么多烦人的重复，我们也可以这样写这个表达式：0\d{2}-\d{8}。 这里\d后面的{2}({8})的意思是前面\d&lt;span style="text-decoration: underline;"&gt;必须连续重复匹配&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;2&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(8&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;测试正则表达式&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;其它可用的测试工具:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;a href="http://www.regexbuddy.com/"&gt;RegexBuddy&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://regexpal.com/"&gt;Javascript正则表达式在线测试工具&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p align="left"&gt;如果你不觉得正则表达式很难读写的话，要么你是一个天才，要么，你不是地球人。正则表达式的语法很令人头疼，即使对经常使用它的人来说也是如此。由于难于读写，容易出错，所以找一种工具对正则表达式进行测试是很有必要的。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;不同的环境下正则表达式的一些细节是不相同的，本教程介绍的是微软 .Net Framework 2.0下正则表达式的行为，所以，我向你介绍一个.Net下的工具&lt;a title="转到RegexTester的官方网站（英文）" href="http://www.dotnet2themax.com/blogs/fbalena/PermaLink,guid,13bce26d-7755-441e-92b3-1eb5f9e859f9.aspx"&gt;Regex Tester&lt;/a&gt;。首先你确保已经安装了&lt;a title="转到下载.Net Framework 2.0的页面" href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;amp;FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5"&gt;.Net Framework 2.0&lt;/a&gt;，然后&lt;a title="从deerchao.net下载Regex Tester, 75KB" href="http://deerchao.net/tutorials/regex/downloads/RegexTester.zip"&gt;下载Regex Tester&lt;/a&gt;。这是个绿色软件，下载完后打开压缩包,直接运行RegexTester.exe就可以了。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面是Regex Tester运行时的截图：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;元字符&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;现在你已经知道几个很有用的元字符了，如\b,.,*，还有\d.正则表达式里还有更多的元字符，比如\s匹配&lt;span style="text-decoration: underline;"&gt;任意的空白符，包括空格，制表符&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(Tab)&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，换行符，中文全角空格等&lt;/span&gt;。\w匹配&lt;span style="text-decoration: underline;"&gt;字母或数字或下划线或汉字等&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;对中文/汉字的特殊处理是由.Net提供的正则表达式引擎支持的，其它环境下的具体情况请查看相关文档。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面来看看更多的例子：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\ba\w*\b匹配&lt;span style="text-decoration: underline;"&gt;以字母&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;a&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开头的单词&amp;mdash;&amp;mdash;先是某个单词开始处&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(\b)&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，然后是字母&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;a&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;,&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;然后是任意数量的字母或数字&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(\w*)&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，最后是单词结束处&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(\b)&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;好吧，现在我们说说正则表达式里的单词是什么意思吧：就是不少于一个的连续的\w。不错，这与学习英文时要背的成千上万个同名的东西的确关系不大 :)&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;\d+匹配&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个或更多连续的数字&lt;/span&gt;。这里的+是和*类似的元字符，不同的是*匹配&lt;span style="text-decoration: underline;"&gt;重复任意次&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;可能是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;0&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;，而+则匹配&lt;span style="text-decoration: underline;"&gt;重复&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次或更多次&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\b\w{6}\b 匹配&lt;span style="text-decoration: underline;"&gt;刚好&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;6&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个字符的单词&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;thead&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表1.常用的元字符&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;代码&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/thead&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;.&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配除换行符以外的任意字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\w&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配字母或数字或下划线或汉字&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\s&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配任意的空白符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\d&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配数字&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\b&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配单词的开始或结束&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;^&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配字符串的开始&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;$&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配字符串的结束&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;正则表达式引擎通常会提供一个&amp;ldquo;测试指定的字符串是否匹配一个正则表达式&amp;rdquo;的方法，如JavaScript里的RegExp.test()方法或.&lt;st1:stockticker&gt;NET&lt;/st1:stockticker&gt;里的Regex.IsMatch()方法。这里的匹配是指是字符串里有没有符合表达式规则的部分。如果不使用^和$的话，对于\d{5,12}而言，使用这样的方法就只能保证字符串里&lt;span style="text-decoration: underline;"&gt;包含&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;5&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;到&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;12&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;连续位数字&lt;/span&gt;，而不是整个字符串就是5到12位数字。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;元字符^（和数字6在同一个键位上的符号）和$都匹配一个位置，这和\b有点类似。^匹配你要用来查找的字符串的开头，$匹配结尾。这两个代码在验证输入的内容时非常有用，比如一个网站如果要求你填写的QQ号必须为5位到12位数字时，可以使用：^\d{5,12}$。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这里的{5,12}和前面介绍过的{2}是类似的，只不过{2}匹配&lt;span style="text-decoration: underline;"&gt;只能不多不少重复&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;2&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次&lt;/span&gt;，{5,12}则是&lt;span style="text-decoration: underline;"&gt;重复的次数不能少于&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;5&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次，不能多于&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;12&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次&lt;/span&gt;，否则都不匹配。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;因为使用了^和$，所以输入的整个字符串都要用来和\d{5,12}来匹配，也就是说整个输入&lt;span style="text-decoration: underline;"&gt;必须是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;5&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;到&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;12&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个数字&lt;/span&gt;，因此如果输入的QQ号能匹配这个正则表达式的话，那就符合要求了。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;和忽略大小写的选项类似，有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项，^和$的意义就变成了&lt;span style="text-decoration: underline;"&gt;匹配行的开始处和结束处&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;字符转义&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;如果你想查找元字符本身的话，比如你查找&lt;span style="text-decoration: underline;"&gt;.&lt;/span&gt;,或者&lt;span style="text-decoration: underline;"&gt;*&lt;/span&gt;,就出现了问题：你没办法指定它们，因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此，你应该使用\.和\*。当然，要查找&lt;span style="text-decoration: underline;"&gt;\&lt;/span&gt;本身，你也得用\\.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;例如：deerchao\.net匹配&lt;span style="text-decoration: underline;"&gt;deerchao.net&lt;/span&gt;，C:\\Windows匹配&lt;span style="text-decoration: underline;"&gt;C:\Windows&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;重复&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了。下面是正则表达式中所有的限定符(指定数量的代码，例如*,{5,12}等)：&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;thead&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表2.常用的限定符&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;代码/语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/thead&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复零次或更多次&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;+&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复一次或更多次&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;?&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复零次或一次&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;{n}&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复n次&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;{n,}&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复n次或更多次&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;{n,m}&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复n到m次&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;下面是一些使用重复的例子：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Windows\d+匹配&lt;span style="text-decoration: underline;"&gt;Windows&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;后面跟&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个或更多数字&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;^\w+匹配&lt;span style="text-decoration: underline;"&gt;一行的第一个单词&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;或整个字符串的第一个单词，具体匹配哪个意思得看选项设置&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;字符类&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;要想查找数字，字母或数字，空白是很简单的，因为已经有了对应这些字符集合的元字符，但是如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办？&lt;/p&gt;&#xD;
&lt;p align="left"&gt;很简单，你只需要在方括号里列出它们就行了，像[aeiou]就匹配&lt;span style="text-decoration: underline;"&gt;任何一个英文元音字母&lt;/span&gt;，[.?!]匹配&lt;span style="text-decoration: underline;"&gt;标点符号&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(.&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;或&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;?&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;或&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;!)&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;我们也可以轻松地指定一个字符&lt;b&gt;范围&lt;/b&gt;，像[0-9]代表的含意与\d就是完全一致的：&lt;span style="text-decoration: underline;"&gt;一位数字&lt;/span&gt;；同理[a-z0-9A-Z_]也完全等同于\w（如果只考虑英文的话）。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面是一个更复杂的表达式：\(?0\d{2}[) -]?\d{8}。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&amp;ldquo;(&amp;rdquo;和&amp;ldquo;)&amp;rdquo;也是元字符，后面的&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#grouping#grouping"&gt;分组节&lt;/a&gt;里会提到，所以在这里需要使用&lt;a href="http://deerchao.net/tutorials/regex/regex.htm#escape#escape"&gt;转义&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;这个表达式可以匹配&lt;span style="text-decoration: underline;"&gt;几种格式的电话号码&lt;/span&gt;，像&lt;i&gt;(010)88886666&lt;/i&gt;，或&lt;i&gt;022-22334455&lt;/i&gt;，或&lt;i&gt;02912345678&lt;/i&gt;等。我们对它进行一些分析吧：首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0，后面跟着2个数字(\d{2})，然后是)或-或空格中的一个，它出现1次或不出现(?)，最后是8个数字(\d{8})。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;分枝条件&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;不幸的是，刚才那个表达式也能匹配&lt;i&gt;010)12345678&lt;/i&gt;或&lt;i&gt;(022-87654321&lt;/i&gt;这样的&amp;ldquo;不正确&amp;rdquo;的格式。要解决这个问题，我们需要用到&lt;b&gt;分枝条件&lt;/b&gt;。正则表达式里的&lt;b&gt;分枝条件&lt;/b&gt;指的是有几种规则，如果满足其中任意一种规则都应该当成匹配，具体方法是用|把不同的规则分隔开。听不明白？没关系，看例子：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能&lt;span style="text-decoration: underline;"&gt;匹配两种以连字号分隔的电话号码：一种是三位区号，&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;8&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;位本地号&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;如&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;010-12345678)&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;，一种是&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;4&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;位区号，&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;7&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;位本地号&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(0376-2233445)&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式&lt;span style="text-decoration: underline;"&gt;匹配&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;3&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;位区号的电话号码，其中区号可以用小括号括起来，也可以不用，区号与本地号间可以用连字号或空格间隔，也可以没有间隔&lt;/span&gt;。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字，或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题：&lt;b&gt;使用分枝条件时，要注意各个条件的顺序&lt;/b&gt;。如果你把它改成\d{5}|\d{5}-\d{4}的话，那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时，将会从左到右地测试每个条件，如果满足了某个分枝的话，就不会去再管其它的条件了。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;分组&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;我们已经提到了怎么重复单个字符（直接在字符后面加上限定符就行了）；但如果想要重复多个字符又该怎么办？你可以用小括号来指定&lt;b&gt;子表达式&lt;/b&gt;(也叫做&lt;b&gt;分组&lt;/b&gt;)，然后你就可以指定这个子表达式的重复次数了，你也可以对子表达式进行其它一些操作(后面会有介绍)。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(\d{1,3}\.){3}\d{1,3}是一个&lt;span style="text-decoration: underline;"&gt;简单的&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;IP&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;地址匹配&lt;/span&gt;表达式。要理解这个表达式，请按下列顺序分析它：\d{1,3}匹配&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;到&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;3&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;位的数字&lt;/span&gt;，(\d{1,3}\.){3}匹配&lt;span style="text-decoration: underline;"&gt;三位数字加上一个英文句号&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;这个整体也就是这个&lt;b&gt;分组&lt;/b&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;重复&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;3&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;次&lt;/span&gt;，最后再加上&lt;span style="text-decoration: underline;"&gt;一个一到三位的数字&lt;/span&gt;(\d{1,3})。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;IP地址中每个数字都不能大于255，大家千万不要被《24》第三季的编剧给忽悠了&amp;hellip;&amp;hellip;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;不幸的是，它也将匹配&lt;i&gt;256.300.888.999&lt;/i&gt;这种不可能存在的IP地址。如果能使用算术比较的话，或许能简单地解决这个问题，但是正则表达式中并不提供关于数学的任何功能，所以只能使用冗长的分组，选择，字符类来描述一个正确的IP地址：((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?，这里我就不细说了，你自己应该能分析得出来它的意义。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;反义&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外，其它任意字符都行的情况，这时需要用到&lt;b&gt;反义&lt;/b&gt;：&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;thead&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表3.常用的反义代码&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;代码/语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/thead&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\W&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配任意不是字母，数字，下划线，汉字的字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\S&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配任意不是空白符的字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\D&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配任意非数字的字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\B&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配不是单词开头或结束的位置&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;[^x]&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配除了x以外的任意字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;[^aeiou]&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配除了aeiou这几个字母以外的任意字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;例子：\S+匹配&lt;span style="text-decoration: underline;"&gt;不包含空白符的字符串&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;a[^&amp;gt;]+&amp;gt;匹配&lt;span style="text-decoration: underline;"&gt;用尖括号括起来的以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;a&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开头的字符串&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;后向引用&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;使用小括号指定一个子表达式后，&lt;b&gt;匹配这个子表达式的文本&lt;/b&gt;(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下，每个分组会自动拥有一个&lt;b&gt;组号&lt;/b&gt;，规则是：从左向右，以分组的左括号为标志，第一个出现的分组的组号为1，第二个为2，以此类推。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;呃&amp;hellip;&amp;hellip;其实,组号分配还不像我刚说得那么简单：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;分组0对应整个正则表达式&lt;/li&gt;&#xD;
&lt;li&gt;实际上组号分配过程是要从左向右扫描两遍的：第一遍只给未命名组分配，第二遍只给命名组分配－－因此所有命名组的组号都大于未命名的组号&lt;/li&gt;&#xD;
&lt;li&gt;你可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权．&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;后向引用&lt;/b&gt;用于重复搜索前面某个分组匹配的文本。例如，\1代表&lt;span style="text-decoration: underline;"&gt;分组&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;匹配的文本&lt;/span&gt;。难以理解？请看示例：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\b(\w+)\b\s+\1\b可以用来匹配&lt;span style="text-decoration: underline;"&gt;重复的单词&lt;/span&gt;，像&lt;i&gt;go go&lt;/i&gt;, 或者&lt;i&gt;kitty kitty&lt;/i&gt;。这个表达式首先是&lt;span style="text-decoration: underline;"&gt;一个单词&lt;/span&gt;，也就是&lt;span style="text-decoration: underline;"&gt;单词开始处和结束处之间的多于一个的字母或数字&lt;/span&gt;(\b(\w+)\b)，这个单词会被捕获到编号为1的分组中，然后是&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;个或几个空白符&lt;/span&gt;(\s+)，最后是&lt;span style="text-decoration: underline;"&gt;分组&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;1&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;中捕获的内容（也就是前面匹配的那个单词）&lt;/span&gt;(\1)。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;你也可以自己指定子表达式的&lt;b&gt;组名&lt;/b&gt;。要指定一个子表达式的组名，请使用这样的语法：(?&amp;lt;Word&amp;gt;\w+)(或者把尖括号换成'也行：(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组&lt;b&gt;捕获&lt;/b&gt;的内容，你可以使用\k&amp;lt;Word&amp;gt;,所以上一个例子也可以写成这样：\b(?&amp;lt;Word&amp;gt;\w+)\b\s+\k&amp;lt;Word&amp;gt;\b。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;使用小括号的时候，还有很多特定用途的语法。下面列出了最常用的一些：&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="3"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表4.常用分组语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;分类&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;代码/语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td rowspan="3"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;捕获&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配exp,并捕获文本到自动命名的组里&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?&amp;lt;name&amp;gt;exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配exp,并捕获文本到名称为name的组里，也可以写成(?'name'exp)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?:exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配exp,不捕获匹配的文本，也不给此分组分配组号&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td rowspan="4"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;零宽断言&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?=exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配exp前面的位置&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?&amp;lt;=exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配exp后面的位置&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?!exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配后面跟的不是exp的位置&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?&amp;lt;!exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;匹配前面不是exp的位置&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;注释&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?#comment)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;这种类型的分组不对正则表达式的处理产生任何影响，用于提供注释让人阅读&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;我们已经讨论了前两种语法。第三个(?:exp)不会改变正则表达式的处理方式，只是这样的组匹配的内容&lt;span style="text-decoration: underline;"&gt;不会像前两种那样被捕获到某个组里面，也不会拥有组号&lt;/span&gt;。&amp;ldquo;我为什么会想要这样做？&amp;rdquo;&amp;mdash;&amp;mdash;好问题，你觉得为什么呢？&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;零宽断言&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;地球人，是不是觉得这些术语名称太复杂，太难记了？我也有同感。知道有这么一种东西就行了，它叫什么，随它去吧！人若无名，便可专心练剑；物若无名，便可随意取舍&amp;hellip;&amp;hellip;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西，也就是说它们像\b,^,$那样用于指定一个位置，这个位置应该满足一定的条件(即断言)，因此它们也被称为&lt;b&gt;零宽断言&lt;/b&gt;。最好还是拿例子来说明吧：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;(?=exp)也叫&lt;b&gt;零宽度正预测先行断言&lt;/b&gt;，它&lt;span style="text-decoration: underline;"&gt;断言自身出现的位置的后面能匹配表达式&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;exp&lt;/span&gt;。比如\b\w+(?=ing\b)，匹配&lt;span style="text-decoration: underline;"&gt;以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;ing&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;结尾的单词的前面部分&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;除了&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;ing&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;以外的部分&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;，如查找&lt;i&gt;I'm singing while you're dancing.&lt;/i&gt;时，它会匹配&lt;span style="text-decoration: underline;"&gt;sing&lt;/span&gt;和&lt;span style="text-decoration: underline;"&gt;danc&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(?&amp;lt;=exp)也叫&lt;b&gt;零宽度正回顾后发断言&lt;/b&gt;，它&lt;span style="text-decoration: underline;"&gt;断言自身出现的位置的前面能匹配表达式&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;exp&lt;/span&gt;。比如(?&amp;lt;=\bre)\w+\b会匹配&lt;span style="text-decoration: underline;"&gt;以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;re&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开头的单词的后半部分&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;除了&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;re&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;以外的部分&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;，例如在查找&lt;i&gt;reading a book&lt;/i&gt;时，它匹配&lt;span style="text-decoration: underline;"&gt;ading&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了)，你可以这样查找需要在前面和里面添加逗号的部分：((?&amp;lt;=\d)\d{3})+\b，用它对&lt;i&gt;1234567890&lt;/i&gt;进行查找时结果是&lt;span style="text-decoration: underline;"&gt;234567890&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;下面这个例子同时使用了这两种断言：(?&amp;lt;=\s)\d+(?=\s)匹配&lt;span style="text-decoration: underline;"&gt;以空白符间隔的数字&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;再次强调，不包括这些空白符&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;负向零宽断言&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;前面我们提到过怎么查找&lt;b&gt;不是某个字符或不在某个字符类里&lt;/b&gt;的字符的方法(反义)。但是如果我们只是想要&lt;b&gt;确保某个字符没有出现，但并不想去匹配它&lt;/b&gt;时怎么办？例如，如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;\b\w*q[^u]\w*\b匹配&lt;span style="text-decoration: underline;"&gt;包含&lt;b&gt;后面不是字母&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;u&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;的字母&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="text-decoration: underline;"&gt;q&lt;/span&gt;&lt;/b&gt;&lt;span style="text-decoration: underline;"&gt;的单词&lt;/span&gt;。但是如果多做测试(或者你思维足够敏锐，直接就观察出来了)，你会发现，如果q出现在单词的结尾的话，像&lt;b&gt;Iraq&lt;/b&gt;,&lt;b&gt;Benq&lt;/b&gt;，这个表达式就会出错。这是因为[^u]总要匹配一个字符，所以如果q是单词的最后一个字符的话，后面的[^u]将会匹配q后面的单词分隔符(可能是空格，或者是句号或其它的什么)，后面的\w*\b将会匹配下一个单词，于是\b\w*q[^u]\w*\b就能匹配整个&lt;i&gt;Iraq fighting&lt;/i&gt;。&lt;b&gt;负向零宽断言&lt;/b&gt;能解决这样的问题，因为它只匹配一个位置，并不&lt;b&gt;消费&lt;/b&gt;任何字符。现在，我们可以这样来解决这个问题：\b\w*q(?!u)\w*\b。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;零宽度负预测先行断言&lt;/b&gt;(?!exp)，&lt;span style="text-decoration: underline;"&gt;断言此位置的后面不能匹配表达式&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;exp&lt;/span&gt;。例如：\d{3}(?!\d)匹配&lt;span style="text-decoration: underline;"&gt;三位数字，而且这三位数字的后面不能是数字&lt;/span&gt;；\b((?!abc)\w)+\b匹配&lt;span style="text-decoration: underline;"&gt;不包含连续字符串&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;abc&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;的单词&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;同理，我们可以用(?&amp;lt;!exp),&lt;b&gt;零宽度负回顾后发断言&lt;/b&gt;来&lt;span style="text-decoration: underline;"&gt;断言此位置的前面不能匹配表达式&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;exp&lt;/span&gt;：(?&amp;lt;![a-z])\d{7}匹配&lt;span style="text-decoration: underline;"&gt;前面不是小写字母的七位数字&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;请详细分析表达式(?&amp;lt;=&amp;lt;(\w+)&amp;gt;).*(?=&amp;lt;\/\1&amp;gt;)，这个表达式最能表现零宽断言的真正用途。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;一个更复杂的例子：(?&amp;lt;=&amp;lt;(\w+)&amp;gt;).*(?=&amp;lt;\/\1&amp;gt;)匹配&lt;span style="text-decoration: underline;"&gt;不包含属性的简单&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;HTML&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;标签内里的内容&lt;/span&gt;。(?&amp;lt;=&amp;lt;(\w+)&amp;gt;)指定了这样的&lt;b&gt;前缀&lt;/b&gt;：&lt;span style="text-decoration: underline;"&gt;被尖括号括起来的单词&lt;/span&gt;(比如可能是&amp;lt;b&amp;gt;)，然后是.*(任意的字符串),最后是一个&lt;b&gt;后缀&lt;/b&gt;(?=&amp;lt;\/\1&amp;gt;)。注意后缀里的\/，它用到了前面提过的字符转义；\1则是一个反向引用，引用的正是&lt;span style="text-decoration: underline;"&gt;捕获的第一组&lt;/span&gt;，前面的(\w+)匹配的内容，这样如果前缀实际上是&amp;lt;b&amp;gt;的话，后缀就是&amp;lt;/b&amp;gt;了。整个表达式匹配的是&amp;lt;b&amp;gt;和&amp;lt;/b&amp;gt;之间的内容(再次提醒，不包括前缀和后缀本身)。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;注释&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;小括号的另一种用途是通过语法(?#comment)来包含注释。例如：2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;要包含注释的话，最好是启用&amp;ldquo;忽略模式里的空白符&amp;rdquo;选项，这样在编写表达式时能任意的添加空格，Tab，换行，而实际使用时这些都将被忽略。启用这个选项后，在#后面到这一行结束的所有文本都将被当成注释忽略掉。例如，我们可以前面的一个表达式写成这样：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(?&amp;lt;=&amp;nbsp;&amp;nbsp;&amp;nbsp; # 断言要匹配的文本的前缀&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;(\w+)&amp;gt; # 查找尖括号括起来的字母或数字(即HTML/XML标签)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 前缀结束&lt;/p&gt;&#xD;
&lt;p align="left"&gt;.*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 匹配任意文本&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(?=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 断言要匹配的文本的后缀&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;\/\1&amp;gt;&amp;nbsp; # 查找尖括号括起来的内容：前面是一个"/"，后面是先前捕获的标签&lt;/p&gt;&#xD;
&lt;p align="left"&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 后缀结束&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;贪婪与懒惰&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;当正则表达式中包含能接受重复的限定符时，通常的行为是（在使整个表达式能得到匹配的前提下）匹配&lt;b&gt;尽可能多&lt;/b&gt;的字符。以这个表达式为例：a.*b，它将会匹配&lt;span style="text-decoration: underline;"&gt;最长的以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;a&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开始，以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;b&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;结束的字符串&lt;/span&gt;。如果用它来搜索&lt;i&gt;aabab&lt;/i&gt;的话，它会匹配整个字符串&lt;span style="text-decoration: underline;"&gt;aabab&lt;/span&gt;。这被称为&lt;b&gt;贪婪&lt;/b&gt;匹配。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;有时，我们更需要&lt;b&gt;懒惰&lt;/b&gt;匹配，也就是匹配&lt;b&gt;尽可能少&lt;/b&gt;的字符。前面给出的限定符都可以被转化为懒惰匹配模式，只要在它后面加上一个问号?。这样.*?就意味着&lt;span style="text-decoration: underline;"&gt;匹配任意数量的重复，但是在能使整个匹配成功的前提下使用最少的重复&lt;/span&gt;。现在看看懒惰版的例子吧：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;a.*?b匹配&lt;span style="text-decoration: underline;"&gt;最短的，以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;a&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;开始，以&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;b&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;结束的字符串&lt;/span&gt;。如果把它应用于&lt;i&gt;aabab&lt;/i&gt;的话，它会匹配&lt;span style="text-decoration: underline;"&gt;aab&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;（第一到第三个字符）&lt;/span&gt;和&lt;span style="text-decoration: underline;"&gt;ab&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;（第四到第五个字符）&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;为什么第一个匹配是aab（第一到第三个字符）而不是ab（第二到第三个字符）？简单地说，因为正则表达式有另一条规则，比懒惰／贪婪规则的优先级更高：最先开始的匹配拥有最高的优先权&amp;mdash;&amp;mdash;The match that begins earliest wins。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;thead&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表5.懒惰限定符&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;代码/语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/thead&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;*?&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复任意次，但尽可能少重复&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;+?&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复1次或更多次，但尽可能少重复&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;??&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复0次或1次，但尽可能少重复&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;{n,m}?&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复n到m次，但尽可能少重复&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;{n,}?&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;重复n次以上，但尽可能少重复&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;处理选项&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;在C#中，你可以使用&lt;a title="MSDN 相关文档" href="http://msdn2.microsoft.com/zh-cn/library/h5845fdz.aspx"&gt;Regex(String, RegexOptions)构造函数&lt;/a&gt;来设置正则表达式的处理选项。如：Regex regex = new Regex(@"\ba\w{6}\b", RegexOptions.IgnoreCase);&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;上面介绍了几个选项如忽略大小写，处理多行等，这些选项能用来改变处理正则表达式的方式。下面是.Net中常用的正则表达式选项：&lt;/p&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;thead&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表6.常用的处理选项&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;名称&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/thead&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;IgnoreCase(忽略大小写)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;匹配时不区分大小写。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;Multiline(多行模式)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;更改^和$的含义，使它们分别在任意一行的行首和行尾匹配，而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;Singleline(单行模式)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;更改.的含义，使它与每一个字符匹配（包括换行符\n）。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;IgnorePatternWhitespace(忽略空白)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;忽略表达式中的非转义空白并启用由#标记的注释。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;ExplicitCapture(显式捕获)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;仅捕获已被显式命名的组。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;一个经常被问到的问题是：是不是只能同时使用多行模式和单行模式中的一种？答案是：不是。这两个选项之间没有任何关系，除了它们的名字比较相似（以至于让人感到疑惑）以外。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;平衡组&lt;/b&gt;&lt;b&gt;/&lt;/b&gt;&lt;b&gt;递归匹配&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;这里介绍的平衡组语法是由.Net Framework支持的；其它语言／库不一定支持这种功能，或者支持此功能但需要使用不同的语法。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;有时我们需要匹配像&lt;span style="text-decoration: underline;"&gt;( 100 * ( 50 + 15 ) )&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;这样的可嵌套的层次性结构&lt;/span&gt;，这时简单地使用\(.+\)则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们讨论的是贪婪模式，懒惰模式也有下面的问题)。假如原来的字符串里的左括号和右括号出现的次数不相等，比如&lt;i&gt;( 5 / ( 3 + 2 ) ) )&lt;/i&gt;，那我们的匹配结果里两者的个数也不会相等。有没有办法在这样的字符串里匹配到最长的，配对的括号之间的内容呢？&lt;/p&gt;&#xD;
&lt;p align="left"&gt;为了避免(和\(把你的大脑彻底搞糊涂，我们还是用尖括号代替圆括号吧。现在我们的问题变成了如何把&lt;i&gt;xx &amp;lt;aa &amp;lt;bbb&amp;gt; &amp;lt;bbb&amp;gt; aa&amp;gt; yy&lt;/i&gt;这样的字符串里，最长的配对的尖括号内的内容捕获出来？&lt;/p&gt;&#xD;
&lt;p align="left"&gt;这里需要用到以下的语法构造：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;(?'group') 把捕获的内容命名为group,并压入&lt;b&gt;堆栈&lt;/b&gt;&lt;b&gt;(Stack)&lt;/b&gt;&lt;/li&gt;&#xD;
&lt;li&gt;(?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容，如果堆栈本来为空，则本分组的匹配失败&lt;/li&gt;&#xD;
&lt;li&gt;(?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话，继续匹配yes部分的表达式，否则继续匹配no部分&lt;/li&gt;&#xD;
&lt;li&gt;(?!) 零宽负向先行断言，由于没有后缀表达式，试图匹配总是失败&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;如果你不是一个程序员（或者你自称程序员但是不知道堆栈是什么东西），你就这样理解上面的三种语法吧：第一个就是在黑板上写一个"group"，第二个就是从黑板上擦掉一个"group"，第三个就是看黑板上写的还有没有"group"，如果有就继续匹配yes部分，否则就匹配no部分。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;我们需要做的是每碰到了左括号，就在压入一个"Open",每碰到一个右括号，就弹出一个，到了最后就看看堆栈是否为空－－如果不为空那就证明左括号比右括号多，那匹配就应该失败。正则表达式引擎会进行回溯(放弃最前面或最后面的一些字符)，尽量使整个表达式得到匹配。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #最外层的左括号&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[^&amp;lt;&amp;gt;]*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #最外层的左括号后面的不是括号的内容&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(?'Open'&amp;lt;)&amp;nbsp;&amp;nbsp;&amp;nbsp; #碰到了左括号，在黑板上写一个"Open"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[^&amp;lt;&amp;gt;]*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #匹配左括号后面的不是括号的内容&lt;/p&gt;&#xD;
&lt;p align="left"&gt;)+&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(?'-Open'&amp;gt;)&amp;nbsp;&amp;nbsp; #碰到了右括号，擦掉一个"Open"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;[^&amp;lt;&amp;gt;]*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #匹配右括号后面不是括号的内容&lt;/p&gt;&#xD;
&lt;p align="left"&gt;)+&lt;/p&gt;&#xD;
&lt;p align="left"&gt;)*&lt;/p&gt;&#xD;
&lt;p align="left"&gt;(?(Open)(?!))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #在遇到最外层的右括号前面，判断黑板上还有没有没擦掉的"Open"；如果还有，则匹配失败&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #最外层的右括号&lt;/p&gt;&#xD;
&lt;p align="left"&gt;平衡组的一个最常见的应用就是匹配HTML,下面这个例子可以匹配&lt;span style="text-decoration: underline;"&gt;嵌套的&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;标签&lt;/span&gt;：&amp;lt;div[^&amp;gt;]*&amp;gt;[^&amp;lt;&amp;gt;]*(((?'Open'&amp;lt;div[^&amp;gt;]*&amp;gt;)[^&amp;lt;&amp;gt;]*)+((?'-Open'&amp;lt;/div&amp;gt;)[^&amp;lt;&amp;gt;]*)+)*(?(Open)(?!))&amp;lt;/div&amp;gt;.&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;还有些什么东西没提到&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;上边已经描述了构造正则表达式的大量元素，但是还有很多没有提到的东西。下面是一些未提到的元素的列表，包含语法和简单的说明。你可以在网上找到更详细的参考资料来学习它们--当你需要用到它们的时候。如果你安装了MSDN Library,你也可以在里面找到.net下正则表达式详细的文档。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;这里的介绍很简略，如果你需要更详细的信息，而又没有在电脑上安装MSDN Library,可以查看&lt;a href="http://msdn.microsoft.com/zh-cn/library/az24scfc.aspx"&gt;关于正则表达式语言元素的MSDN在线文档&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;&#xD;
&lt;thead&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;表7.尚未详细讨论的语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;代码/语法&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/thead&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\a&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;报警字符(打印它的效果是电脑嘀一声)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\b&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;通常是单词分界位置，但如果在字符类里使用代表退格&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\t&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;制表符，Tab&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\r&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;回车&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\v&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;竖向制表符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\f&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;换页符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\n&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;换行符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\e&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;Escape&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\0nn&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;ASCII代码中八进制代码为nn的字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\xnn&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;ASCII代码中十六进制代码为nn的字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\unnnn&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;Unicode代码中十六进制代码为nnnn的字符&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\cN&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;ASCII控制字符。比如\cC代表Ctrl+C&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\A&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;字符串开头(类似^，但不受处理多行选项的影响)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\Z&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;字符串结尾或行尾(不受处理多行选项的影响)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\z&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;字符串结尾(类似$，但不受处理多行选项的影响)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\G&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;当前搜索的开头&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;\p{name}&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;Unicode中命名为name的字符类，例如\p{IsGreek}&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?&amp;gt;exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;贪婪子表达式&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?&amp;lt;x&amp;gt;-&amp;lt;y&amp;gt;exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;平衡组&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?im-nsx:exp)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;在子表达式exp中改变处理选项&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?im-nsx)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;为表达式后面的部分改变处理选项&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?(exp)yes|no)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;把exp当作零宽正向先行断言，如果在这个位置能匹配，使用yes作为此组的表达式；否则使用no&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?(exp)yes)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;同上，只是使用空表达式作为no&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?(name)yes|no)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;如果命名为name的组捕获到了内容，使用yes作为表达式；否则使用no&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;(?(name)yes)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="text-decoration: underline;"&gt;同上，只是使用空表达式作为no&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;联系作者&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p align="left"&gt;好吧,我承认,我骗了你,读到这里你肯定花了不止30分钟.相信我,这是我的错,而不是因为你太笨.我之所以说"30分钟",是为了让你有信心,有耐心继续下去.既然你看到了这里,那证明我的阴谋成功了.被忽悠的感觉很爽吧？&lt;/p&gt;&#xD;
&lt;p align="left"&gt;要投诉我,或者觉得我其实可以忽悠得更高明,或者有任何其它问题,欢迎来&lt;a href="http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html"&gt;我的博客&lt;/a&gt;让我知道.&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;&#xD;
&#xD;
&lt;/b&gt;&lt;b&gt;网上的资源及本文参考文献&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/jscript7/html/jsreconintroductiontoregularexpressions.asp"&gt;微软的正则表达式教程&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/zh-cn/library/system.text.regularexpressions.regex.aspx"&gt;System.Text.RegularExpressions.Regex类(MSDN)&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://www.regular-expressions.info/"&gt;专业的正则表达式教学网站(英文)&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/whaggard/archive/2005/02/20/377025.aspx"&gt;关于.Net下的平衡组的详细讨论（英文）&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://www.oreilly.com/catalog/regex2/"&gt;Mastering Regular Expressions (Second Edition)&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p align="left"&gt;&lt;b&gt;更新纪录&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;2006-3-27 第一版&lt;/li&gt;&#xD;
&lt;li&gt;2006-10-12 第二版&lt;/li&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;修正了几个细节上的错误和不准确的地方&lt;/li&gt;&#xD;
&lt;li&gt;增加了对处理中文时的一些说明&lt;/li&gt;&#xD;
&lt;li&gt;更改了几个术语的翻译（采用了MSDN的翻译方式）&lt;/li&gt;&#xD;
&lt;li&gt;增加了平衡组的介绍&lt;/li&gt;&#xD;
&lt;li&gt;放弃了对The Regulator的介绍，改用Regex Tester&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;li&gt;2007-3-12 V2.1&lt;/li&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;修正了几个小的错误&lt;/li&gt;&#xD;
&lt;li&gt;增加了对处理选项(RegexOptions)的介绍&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;li&gt;2007-5-28 V2.2&lt;/li&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;重新组织了对零宽断言的介绍&lt;/li&gt;&#xD;
&lt;li&gt;删除了几个不太合适的示例，添加了几个实用的示例&lt;/li&gt;&#xD;
&lt;li&gt;其它一些微小的更改&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;li&gt;2007-8-3 V2.21&lt;/li&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;修改了几处文字错误&lt;/li&gt;&#xD;
&lt;li&gt;修改/添加了对$,\b的精确说明&lt;/li&gt;&#xD;
&lt;li&gt;承认了作者是个骗子&lt;/li&gt;&#xD;
&lt;li&gt;给RegexTester添加了Singleline选项的相关功能&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;li&gt;2008-4-13 v2.3&lt;/li&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;调整了部分章节的次序&lt;/li&gt;&#xD;
&lt;li&gt;修改了页面布局，删除了专门的参考节&lt;/li&gt;&#xD;
&lt;li&gt;针对读者的反馈，调整了部分内容&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;li&gt;2009-4-11 v2.31&lt;/li&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;修改了几处文字错误&lt;/li&gt;&#xD;
&lt;li&gt;添加了一些注释说明&lt;/li&gt;&#xD;
&lt;li&gt;调整了一些措词&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p align="right"&gt;&lt;/p&gt;&#xD;
&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109662.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109662.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2109194.html</id><title type="text">PowerPC 交叉编译工具链 创建脚本</title><summary type="text">#!/bin/bash# (C) Copyright 2011 DENX Software Engineering GmbH## Licensed under the GPLv2 or later.##1 Locate the operation directory to the home directory of the current userecho &amp;quot;=====================================================================&amp;quot;echo &amp;quot;Install step 1 : Set work di</summary><published>2011-07-18T02:20:00Z</published><updated>2011-07-18T02:20:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2109194.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2109194.html"/><content type="html">&lt;p&gt;#!/bin/bash&lt;/p&gt;&#xD;
&lt;p&gt;# (C) Copyright 2011&amp;nbsp; DENX Software Engineering GmbH&lt;/p&gt;&#xD;
&lt;p&gt;#&lt;/p&gt;&#xD;
&lt;p&gt;# Licensed under the GPLv2 or later.&lt;/p&gt;&#xD;
&lt;p&gt;##1 Locate the operation directory to the home directory of the current user&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 1 : Set work directory to ~"&lt;br /&gt;echo "====================================================================="&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp;&amp;nbsp;&amp;nbsp; ~&lt;/p&gt;&#xD;
&lt;p&gt;##2 Create the used directory&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 2 : Create necessary directorys"&lt;br /&gt;echo "====================================================================="&lt;/p&gt;&#xD;
&lt;p&gt;mkdir crosstool-ppc&lt;br /&gt;cd&amp;nbsp;&amp;nbsp;&amp;nbsp; crosstool-ppc&lt;br /&gt;mkdir build-tools kernel tools&lt;/p&gt;&#xD;
&lt;p&gt;##3 Setup the directory parameter&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 3 :Set the system parameters"&lt;br /&gt;echo "====================================================================="&lt;/p&gt;&#xD;
&lt;p&gt;export PRJROOT=/home/wenlonli/crosstool-ppc&lt;br /&gt;export TARGET=powerpc-8xx-linux&lt;br /&gt;export PREFIX=$PRJROOT/tools&lt;br /&gt;export TARGET_PREFIX=$PREFIX/$TARGET&lt;br /&gt;export PATH=$PREFIX/bin:$PATH&lt;br /&gt;export CURRENT_PASSWD=wuliao&lt;/p&gt;&#xD;
&lt;p&gt;##4 Copy the related packages&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 4 :Copy and prepare the packages"&lt;br /&gt;echo "====================================================================="&lt;/p&gt;&#xD;
&lt;p&gt;cp ~/src/gmp-4.2.2.tar.bz2&amp;nbsp;&amp;nbsp;&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;cp ~/src/mpfr-3.0.0.tar.gz&amp;nbsp;&amp;nbsp;&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;cp ~/src/mpc-0[1].8.1.tar.gz&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;cp ~/src/binutils-2.21.tar.gz $PRJROOT/build-tools/&lt;br /&gt;cp ~/src/gcc-4.5.3.tar.bz2&amp;nbsp;&amp;nbsp;&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;cp ~/src/gcc-4.3.2.tar.bz2&amp;nbsp;&amp;nbsp;&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;cp ~/src/glibc-2.14.tar.bz2&amp;nbsp;&amp;nbsp; $PRJROOT/build-tools/&lt;/p&gt;&#xD;
&lt;p&gt;cp ~/src/linux-2.6.30.tar.gz&amp;nbsp; $PRJROOT/kernel/&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;##5 Extract gmp&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 5 : Extract GMP"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;tar -jxvf gmp-4.2.2.tar.bz2&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp; $PRJROOT/build-tools/gmp-4.2.2&lt;/p&gt;&#xD;
&lt;p&gt;##6 Configure gmp&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 6 : Configure GMP"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;./configure --prefix=/usr/local/gcc&lt;/p&gt;&#xD;
&lt;p&gt;##7 Compile gmp&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 7 : Compile GMP"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make&lt;br /&gt;make check&lt;/p&gt;&#xD;
&lt;p&gt;##8 Install gmp&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 8 : Install GMP"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;sudo make install&lt;br /&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf gmp-4.2.2&lt;/p&gt;&#xD;
&lt;p&gt;###########################################################################&lt;br /&gt;##9 Extract MPFR&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 9 : Extract MPFR"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;tar -xvf mpfr-3.0.0.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp; $PRJROOT/build-tools/mpfr-3.0.0&lt;/p&gt;&#xD;
&lt;p&gt;##A Configure MPFR&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step A : Configure MPFR"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;./configure --prefix=/usr/local/gcc --with-gmp=/usr/local/gcc&lt;/p&gt;&#xD;
&lt;p&gt;##B Compile MPFR&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step B : Compile MPFR"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make&lt;br /&gt;make check&lt;/p&gt;&#xD;
&lt;p&gt;##C Install MPFR&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step C : Install MPFR"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;sudo make install&lt;br /&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf mpfr-3.0.0&lt;/p&gt;&#xD;
&lt;p&gt;###########################################################################&lt;br /&gt;##D Extract MPC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step D : Extract MPC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;tar -xvf mpc-0[1].8.1.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp; $PRJROOT/build-tools/mpc-0.8.1&lt;/p&gt;&#xD;
&lt;p&gt;##E Configure MPC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step E : Configure MPC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;./configure --prefix=/usr/local/gcc --with-gmp=/usr/local/gcc --with-mpfr=/usr/local/gcc&lt;/p&gt;&#xD;
&lt;p&gt;#before compile&lt;br /&gt;# we must update the file acos, line 192&lt;br /&gt;# from &lt;br /&gt;# #if MPFR_VERSION_MAJOR &amp;gt; 3&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : rnd_im == GMP_RNDA ? GMP_RNDZ&lt;br /&gt;# #endif&lt;br /&gt;# to &lt;br /&gt;# #if MPFR_VERSION_MAJOR &amp;gt; 3&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : rnd_im == GMP_RNDA ? GMP_RNDZ&lt;br /&gt;# #endif&lt;/p&gt;&#xD;
&lt;p&gt;cp ~/src/patch/acos.c $PRJROOT/build-tools/mpc-0.8.1/src/&lt;/p&gt;&#xD;
&lt;p&gt;##F Compile MPC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step F: Compile MPC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;##10 Install MPC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 10 : Install MPC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;sudo make install&lt;br /&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf mpc-0.8.1&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;###########################################################################&lt;br /&gt;##11 Extract binutils&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 11 : Extract binutils"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;tar -xvf binutils-2.21.tar.gz&lt;br /&gt;mkdir binbud&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp; $PRJROOT/build-tools/binbud&lt;/p&gt;&#xD;
&lt;p&gt;##12 Configure binutils&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 12 : Configure binutils"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;../binutils-2.21/configure --target=$TARGET --prefix=$PREFIX --disable-werror&lt;/p&gt;&#xD;
&lt;p&gt;##13 Compile binutils&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step F: Compile binutils"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;##14 Install binutils&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 10 : Install binutils"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make install&lt;br /&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf binbud&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf binutils-2.21&lt;/p&gt;&#xD;
&lt;p&gt;###########################################################################&lt;br /&gt;##31 Extract GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 31 : Extract GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;tar -jxvf gcc-4.3.2.tar.bz2&lt;br /&gt;mkdir gcc-boot-bud&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp; $PRJROOT/build-tools/gcc-boot-bud&lt;/p&gt;&#xD;
&lt;p&gt;##32 Configure GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 32 : Configure gcc"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;../gcc-4.3.2/configure --target=$TARGET --prefix=$PREFIX --without-headers --enable-language=c --disable-threads --with-newlib --disable-shared --disable-libmudflap --disable-libssp --with-gmp=/usr/local/gcc --disable-decimal-float --disable-libgomp --disable-multilib&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;##33 Compile GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step F: Compile GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make all-gcc&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;##34 Install GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 34 : Install GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make install-gcc&lt;/p&gt;&#xD;
&lt;p&gt;##41 Compile LIBGCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 41: Compile LIBGCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;LD_LIBRARY_PATH=/usr/local/gcc/lib&lt;br /&gt;export LD_LIBRARY_PATH&lt;/p&gt;&#xD;
&lt;p&gt;make all-target-libgcc&lt;/p&gt;&#xD;
&lt;p&gt;##42 Install binutils&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 42 : Install LIBGCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make install-target-libgcc&lt;br /&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf gcc-boot-bud&lt;/p&gt;&#xD;
&lt;p&gt;##51 Extract&amp;nbsp; Kernel&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 51 : Extract Kernel Header"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/kernel/&lt;br /&gt;tar -xvf linux-2.6.30.tar.gz&lt;br /&gt;cd linux-2.6.30&lt;br /&gt;make ARCH=powerpc INSTALL_HDR_PATH=$TARGET_PREFIX/usr headers_install&lt;br /&gt;#ls -p $TARGET_PREFIX/usr/include asm/ asm-generic/ drm/ linux/ mtd/ rdma/ sound/ video/&lt;/p&gt;&#xD;
&lt;p&gt;###########################################################################&lt;br /&gt;##61 Extract Glibc&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 61 : Extract Glibc"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/&lt;br /&gt;tar -jxvf glibc-2.14.tar.bz2&lt;br /&gt;mkdir glib-bud&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/glib-bud&lt;/p&gt;&#xD;
&lt;p&gt;##62 Configure Glibc&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 62 : Configure Glibc"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;LD_LIBRARY_PATH=/usr/local/gcc/lib&lt;br /&gt;export LD_LIBRARY_PATH&lt;/p&gt;&#xD;
&lt;p&gt;CC=powerpc-8xx-linux-gcc /home/wenlonli/crosstool-ppc/build-tools/glibc-2.14/configure --host=$TARGET --prefix="/usr" --enable-add-ons --with-headers=$TARGET_PREFIX/usr/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;##63 Compile Glibc&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 63: Compile Glibc"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;cp ~/src/patch/Makeconfig $PRJROOT/build-tools/glibc-2.14&lt;br /&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;##64 Install Glibc&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 64: Install Glibc"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make install_root=$TARGET_PREFIX prefix="" install&lt;/p&gt;&#xD;
&lt;p&gt;cp ~/src/patch/libc.so $TARGET_PREFIX/lib/libc.so&lt;br /&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf glib-bud&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf glibc-2.14&lt;/p&gt;&#xD;
&lt;p&gt;###########################################################################&lt;br /&gt;##71 Extract GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 71 : Prepare for Full GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;#tar -jxvf gcc-4.3.2.tar.bz2&lt;br /&gt;mkdir full-gcc-bud&lt;br /&gt;cd&amp;nbsp; $PRJROOT/build-tools/full-gcc-bud&lt;/p&gt;&#xD;
&lt;p&gt;##72 Configure GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 62 : Configure Full GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;../gcc-4.3.2/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ --with-headers=$TARGET_PREFIX/usr/include --disable-libgomp --with-gmp=/usr/local/gcc&lt;/p&gt;&#xD;
&lt;p&gt;##73 Compile&amp;nbsp; Full GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 63: Compile&amp;nbsp; Full GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make all&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;##74 Install Full GCC&lt;br /&gt;echo "====================================================================="&lt;br /&gt;echo "Install step 74: Install Full GCC"&lt;br /&gt;echo "====================================================================="&lt;br /&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;cd&amp;nbsp;&amp;nbsp; ..&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf full-gcc-bud&lt;br /&gt;rm&amp;nbsp;&amp;nbsp; -rf gcc-4.3.2&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2109194.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2109194.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hpunix/articles/2006782.html</id><title type="text">读核笔记－内核初始化－从start_kernel到init</title><summary type="text">如图所示，内核的初始化过程由start_kernel函数开始，至第一个用户进程init结束，调用了一系列的初始化函数对所有的内核组件进行初始化。其中，start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。图 内核初始化本节接下来的内容会结合内核代码，对内核初始化过程主线上的几个函数进行分析，使读者对该过程有个整体上的认识，以此为基础，读者可以根据自己的兴趣或需要，选择与某些组件相关的初始化函数，进行更进一步的研究分析。u start_kernel函数从start_kernel函数开始，内核即进入了C语言部分，它完成了内核.</summary><published>2011-04-06T06:22:00Z</published><updated>2011-04-06T06:22:00Z</updated><author><name>嵌入专栏</name><uri>http://www.cnblogs.com/hpunix/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hpunix/articles/2006782.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hpunix/articles/2006782.html"/><content type="html">&amp;nbsp; &#xD;
&lt;p  style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如图所示，内核的初始化过程由&lt;/span&gt;&lt;span lang="EN-US"&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数开始，至第一个用户进程&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;结束，调用了一系列的初始化函数对所有的内核组件进行初始化。其中，&lt;/span&gt;&lt;span lang="EN-US"&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;rest_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;kernel_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;init_post&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等&lt;/span&gt;&lt;span lang="EN-US"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个函数构成了整个初始化过程的主线。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div align="center"&gt;&#xD;
&lt;table  style="border-right: #b7b7b7 1pt solid; border-top: #b7b7b7 1pt solid;background: #f8f8f8; border-left: #b7b7b7 1pt solid; width: 446.25pt; border-bottom: #b7b7b7 1pt solid; mso-border-alt: solid #B7B7B7 .5pt; mso-cellspacing: 0cm; mso-padding-alt: 3.2pt 0cm 3.2pt 0cm" cellspacing="0" cellpadding="0" width="595" border="1"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"&gt;&#xD;
&lt;td style="padding-right: 0cm; padding-left: 0cm;background: white; padding-bottom: 3.2pt; padding-top: 3.2pt"&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20100723/1025230.jpg" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20100723/103833643.jpg" target="_blank"&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" style="width: 444.75pt; height: 167.25pt" alt="" o:button="t" type="#_x0000_t75"&gt;&lt;v:imagedata src="file:///C:\DOCUME~1\wenlonli\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg" o:href="http://images.51cto.com/files/uploadimg/20100723/103833643.jpg"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/a&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank"&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;p  style="text-align: center" align="center"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;图&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;内核初始化&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;本节接下来的内容会结合内核代码，对内核初始化过程主线上的几个函数进行分析，使读者对该过程有个整体上的认识，以此为基础，读者可以根据自己的兴趣或需要，选择与某些组件相关的初始化函数，进行更进一步的研究分析。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 18pt; text-indent: -18pt; mso-list: l3 level3 lfo6; tab-stops: list 18.0pt"&gt;&lt;span lang="EN-US" style="font-family: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"&gt;&lt;span style="mso-list: Ignore"&gt;u&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;从&lt;/span&gt;&lt;span lang="EN-US"&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数开始，内核即进入了&lt;/span&gt;&lt;span lang="EN-US"&gt;C&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;语言部分，它完成了内核的大部分初始化工作。实际上，可以将&lt;/span&gt;&lt;span lang="EN-US"&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数看做内核的&lt;/span&gt;&lt;span lang="EN-US"&gt;main&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码清单&lt;/span&gt;&lt;span lang="EN-US"&gt;1&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;513 asmlinkage void __init start_kernel(void)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;514 {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;515&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;char * command_line;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;516&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;extern struct kernel_param __start___param[], __stop___param[];&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;517&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;当只有一个&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的时候这个函数就什么都不做，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;但是如果有多个&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的时候那么它就&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;返回在启动的时候的那个&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的号&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;518&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;smp_setup_processor_id();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;519&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;520&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;521&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* Need to run as early as possible, to initialize the&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;522&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* lockdep hash:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;523&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;524&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;unwind_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;525&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;lockdep_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;526&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;关闭当前&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的中断&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;527&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;local_irq_disable();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;528&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;early_boot_irqs_off();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;每一个中断都有一个中断描述符（&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;struct irq_desc&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）来进行描述，这个函数的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;作用就是设置所有中断描述符的锁&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;529&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;early_init_irq_lock_class();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;530&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;531 /*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;532&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;* Interrupts are still disabled. Do necessary setups, then&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;533&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;* enable them&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;534&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;获取大内核锁，锁定整个内核。&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;535&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;lock_kernel();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果定义了&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CONFIG_GENERIC_CLOCKEVENTS&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，则注册&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;clockevents&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;框架&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;536&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tick_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;537&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;boot_cpu_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化页地址，使用链表将其链接起来&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;538&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;page_address_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;539&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(KERN_NOTICE);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;显示内核的版本信息&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;540&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(linux_banner);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;每种体系结构都有自己的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;setup_arch()&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数，是体系结构相关的，具体编译哪个&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;体系结构的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;setup_arch()&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;,&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;由源码树顶层目录下的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;Makefile&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;ARCH&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;变量&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;决定&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;541&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setup_arch(&amp;amp;command_line);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;542&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setup_command_line(command_line);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;543&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;unwind_setup();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;每个&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;分配&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;pre-cpu&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;结构内存，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;并复制&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;.data.percpu&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;段的数据&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;544&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setup_per_cpu_areas();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;545&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;546&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;547&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;548&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* Set up the scheduler prior starting any interrupts (such as the&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;549&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* timer interrupt). Full topology setup happens at smp_init()&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;550&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* time - but meanwhile we still have a &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;functioning scheduler.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;551&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程调度器初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;552&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sched_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;553&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;554&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* Disable preemption - early bootup scheduling is extremely&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;555&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* fragile until we cpu_idle() for the first time.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;556&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;禁止内核抢占&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;557&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;preempt_disable();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;558&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;build_all_zonelists();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;559&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;page_alloc_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;打印&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;Linux&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;启动命令行参数&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;560&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(KERN_NOTICE "Kernel command line: %s\n", boot_command_line);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对内核选项的两次解析&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;561&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;parse_early_param();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;562&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;parse_args("Booting kernel", static_command_line, __start___param,&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;563&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;__stop___param - __start___param,&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;564&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;amp;unknown_bootoption);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;检查中断是否已经打开，如果已经打开，则关闭中断&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;565&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (!irqs_disabled()) {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;566&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(KERN_WARNING "start_kernel(): bug: interrupts were "&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;567&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;"enabled *very* early, fixing it\n");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;568&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;local_irq_disable();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;569&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;570&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sort_main_extable();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* trap_init&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数完成对系统保留中断向量（异常、非屏蔽中断以及系统调用）&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的初始化，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;init_IRQ&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数则完成其余中断向量的初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;571&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;trap_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;RCU(Read-Copy Update)&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;机制&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;572&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rcu_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;573&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;init_IRQ();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;hash&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;表，便于从进程的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;PID&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;获得对应的进程描述符指针&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;574&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pidhash_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化定时器相关的数据结构&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;575&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;init_timers();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对高精度时钟进行初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;576&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hrtimers_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;tasklet_softirq&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;hi_softirq */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;577&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;softirq_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;578&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;timekeeping_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化系统时钟源&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;579&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;time_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对内核的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;profile&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（一个内核性能调式工具）功能进行初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;580&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;profile_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;581&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (!irqs_disabled())&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;582&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk("start_kernel(): bug: interrupts were enabled early\n");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;583&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;early_boot_irqs_on();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;584&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;local_irq_enable();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;585&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;586&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;587&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* HACK ALERT! This is early. We're enabling the console before&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;588&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* we've done PCI setups etc, and console_init() must be aware of&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;589&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* this. But we do want output early, in case something goes wrong.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;590&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化控制台以显示&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;printk&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的内容，在此之前调用的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;printk&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;只是把数据存到缓冲区里&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;591&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;console_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;592&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (panic_later)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;593&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;panic(panic_later, panic_param);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;594&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;如果定义了&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CONFIG_LOCKDEP&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;宏，则打印锁依赖信息，否则什么也不做&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;595&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;lockdep_info();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;596&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;597&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;598&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* Need to run this when irqs are enabled, because it wants&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;599&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* to self-test [hard/soft]-irqs on/off lock inversion bugs&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;600&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* too:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;601&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;602&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;locking_selftest();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;603&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;604 #ifdef CONFIG_&lt;/span&gt;&lt;/em&gt;&lt;st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;BLK&lt;/span&gt;&lt;/em&gt;&lt;/st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;_DEV_INITRD&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;605&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (initrd_start &amp;amp;&amp;amp; !initrd_below_start_ok &amp;amp;&amp;amp;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;606&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;initrd_start &amp;lt; min_low_pfn &amp;lt;&amp;lt; PAGE_SHIFT) {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;607&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(KERN_CRIT "initrd overwritten &lt;br /&gt;(0x%08lx &amp;lt; 0x%08lx) - "&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;608&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;"disabling it.\n",initrd_start,&lt;br /&gt;min_low_pfn &amp;lt;&amp;lt; PAGE_SHIFT);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;609&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;initrd_start = 0;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;610&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;611 #endif&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;虚拟文件系统的初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;612&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vfs_caches_init_early();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;613&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cpuset_init_early();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;614&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mem_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* slab&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;615&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kmem_cache_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;616&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setup_per_cpu_pageset();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;617&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;numa_policy_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;618&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (late_time_init)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;619&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;late_time_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;一个非常有趣的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;性能测试函数，可以计算出&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;1s&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;内执行了多少次一个&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;极短的循环，计算出来的值经过处理后得到&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;BogoMIPS&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;值（&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;Bogo&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;Bogus&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的意思），&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;620&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;calibrate_delay();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;621&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pidmap_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;接下来的函数中，大多数都是为有关的管理机制建立专用的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;slab&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;缓存&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;622&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pgtable_cache_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化优先级树&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;index_bits_to_maxindex&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;数组&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;623&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prio_tree_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;624&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;anon_vma_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;625 #ifdef CONFIG_X86&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;626&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (efi_enabled)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;627&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;efi_enter_virtual_mode();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;628 #endif&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;根据物理内存大小计算允许创建进程的数量&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;629&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fork_init(num_physpages);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* proc_caches_init()&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;buffer_init()&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;br /&gt;unnamed_dev_init()&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;key_init()&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;630&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;proc_caches_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;631&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;buffer_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;632&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;unnamed_dev_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;633&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;key_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;634&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;security_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;635&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vfs_caches_init(num_physpages);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;636&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;radix_tree_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;637&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;signals_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;638&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* rootfs populating might need page-writeback */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;639&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;page_writeback_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;640 #ifdef CONFIG_PROC_FS&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;641&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;proc_root_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;642 #endif&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;643&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cpuset_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;644&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;taskstats_init_early();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;645&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;delayacct_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;646&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;测试该&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的各种缺陷，记录检测到的缺陷，以便于内核的其他部分以后可以&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;使用它们的工作。&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;647&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;check_bugs();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;648&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;649&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;acpi_early_init(); /* before LAPIC and &lt;/span&gt;&lt;/em&gt;&lt;st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;SMP&lt;/span&gt;&lt;/em&gt;&lt;/st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt; init */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;650&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;651&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* Do the rest non-__init'ed, we're now alive */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;创建&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;init&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;652&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rest_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;653 }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;2 reset_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;start_kernel&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数的最后调用了&lt;/span&gt;&lt;span lang="EN-US"&gt;reset_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数进行后续的初始化。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码清单&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;reset_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;438 static void noinline __init_refok rest_init(void)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;439&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;__releases(kernel_lock)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;440 {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;441&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;int pid;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;442&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* reset_init()&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数最主要的历史使命就是启动内核线程&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;kernel_init */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;443&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;444&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;numa_default_policy();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;启动内核线程&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;kthreadd&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，运行&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;kthread_create_list&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;全局链表中的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;kthread */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;445&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;446&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kthreadd_task = find_task_by_pid(pid);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;447&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;unlock_kernel();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;448&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;449&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;450&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* The boot idle thread must execute schedule()&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;451&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* at least once to get things moving:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;452&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;增加&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;idle&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;need_resched&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标志，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;并且调用&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;schedule&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;释放&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU,&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将其赋给更应该获取&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的进程。&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;453&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;init_idle_bootup_task(current);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;454&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;preempt_enable_no_resched();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;455&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;schedule();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;456&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;preempt_disable();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;457&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;458&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* Call into cpu_idle with preempt disabled */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进入&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;idle&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;循环以消耗空闲的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;时间片，&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;该函数从不返回。然而，当有实际工作&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;要处理时，该函数就会被抢占。&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;459&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cpu_idle();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;460 } &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;3 kernel_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;kernel_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数将完成设备驱动程序的初始化，并调用&lt;/span&gt;&lt;span lang="EN-US"&gt;init_post&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数启动用户空间的&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码清单&lt;/span&gt;&lt;span lang="EN-US"&gt;3&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;kernel_init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;813 static int __init kernel_init(void * unused)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;814 {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;815&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;lock_kernel();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;816&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;817&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* init can run on any cpu.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;818&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;修改进程的&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;亲和力&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;819&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;set_cpus_allowed(current, CPU_MASK_&lt;/span&gt;&lt;/em&gt;&lt;st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;ALL&lt;/span&gt;&lt;/em&gt;&lt;/st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;820&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;821&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* Tell the world that we're going to be the grim&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;822&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* reaper of innocent orphaned children.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;823&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;824&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* We don't want people to have to make incorrect&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;825&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* assumptions about where in the task array this&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;826&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;* can be found.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;827&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;把当前进程设为接受其他孤儿进程的进程&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff"&gt; &lt;span lang="EN-US"&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;828&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;init_pid_ns.child_reaper = current;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;829&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;830&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;__set_special_pids(1, 1);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;831&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cad_pid = task_pid(current);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;832&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;833&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;smp_prepare_cpus(max_cpus);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;834&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;835&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;do_pre_smp_initcalls();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;836&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;激活&lt;/span&gt;&lt;/em&gt;&lt;st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;SMP&lt;/span&gt;&lt;/em&gt;&lt;/st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;系统中其他&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;CPU */&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;837&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;smp_init();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;838&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sched_init_smp();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;839&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;840&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cpuset_init_smp();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;841&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;此时与体系结构相关的部分已经初始化完成，现在开始调用&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;do_basic_setup&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* &lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; color: #3366ff; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化设备，完成外设及其驱动程序（直接编译进内核的模块）的加载和初始化&lt;/span&gt;&lt;/em&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;842&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;do_basic_setup();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;843&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;844&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;845&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* check if there is an early userspace init.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If yes, let it do all&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;846&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* the work&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;847&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;848&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;849&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (!ramdisk_execute_command)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;850&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ramdisk_execute_command = "/init";&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;851&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;852&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (sys_access((const char __user *)ramdisk_execute_command, 0) != 0) {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;853&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ramdisk_execute_command = NULL;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;854&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prepare_namespace();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;855&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;856&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;857&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;858&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* Ok, we have completed the initial bootup, and&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;859&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* we're essentially up and running. Get rid of the&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;860&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* initmem segments and start the user-mode stuff.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;861&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;862&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;init_post();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;863&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return 0;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;864 } &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;4 init_post&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;到&lt;/span&gt;&lt;span lang="EN-US"&gt;init_post&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数为止，内核的初始化已经进入尾声，第一个用户空间进程&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;将姗姗来迟。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码清单&lt;/span&gt;&lt;span lang="EN-US"&gt;4&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;init_post&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;774 static int noinline init_post(void)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;775 {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;776&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;free_initmem();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;777&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;unlock_kernel();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;778&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mark_rodata_ro();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;779&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;system_state = SYSTEM_RUNNING;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;780&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;numa_default_policy();&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;781&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;782&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (sys_open((const char __user *) "/dev/console", O_&lt;/span&gt;&lt;/em&gt;&lt;st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;RDWR&lt;/span&gt;&lt;/em&gt;&lt;/st1:stockticker&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;, 0) &amp;lt; 0)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;783&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(KERN_WARNING "Warning: unable to open an initial console.\n");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;784&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;785&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(void) sys_dup(0);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;786&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(void) sys_dup(0);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;787&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;788&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (ramdisk_execute_command) {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;789&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;run_init_process(ramdisk_execute_command);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;790&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printk(KERN_WARNING "Failed to execute %s\n",&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;791&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ramdisk_execute_command);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;792&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;793&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;794&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;795&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* We try each of these until one succeeds.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;796&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;797&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* The Bourne shell can be used instead of init if we are&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;798&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;* trying to recover a really broken machine.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;799&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;*/&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;800&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (execute_command) {&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;801&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;run_init_process(execute_command);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;802&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;printk(KERN_WARNING "Failed to execute %s.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Attempting "&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;803&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;"defaults...\n", execute_command);&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;804&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;805&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;run_init_process("/sbin/init");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;806&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;run_init_process("/etc/init");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;807&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;run_init_process("/bin/init");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;808&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;run_init_process("/bin/sh");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;809&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;810&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;panic("No init found.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Try passing init= option to kernel.");&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p  style="margin-left: 27pt; mso-para-margin-left: 2.57gd"&gt;&lt;em style="mso-bidi-font-style: normal"&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #3366ff"&gt;811 } &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第&lt;/span&gt;&lt;span lang="EN-US"&gt;776&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行，到此，内核初始化已经接近尾声了，所有的初始化函数都已经被调用，因此&lt;/span&gt;&lt;span lang="EN-US"&gt;free_initmem&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数可以舍弃内存的&lt;/span&gt;&lt;span lang="EN-US"&gt;__init_begin&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;至&lt;/span&gt;&lt;span lang="EN-US"&gt;__init_end&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（包括&lt;/span&gt;&lt;span lang="EN-US"&gt;.init.setup&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;.initcall.init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;等节）之间的数据。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;所有使用&lt;/span&gt;&lt;span lang="EN-US"&gt;__init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记过的函数和使用&lt;/span&gt;&lt;span lang="EN-US"&gt;__initdata&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标记过的数据，在&lt;/span&gt;&lt;span lang="EN-US"&gt;free_initmem&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数执行后，都不能使用，它们曾经获得的内存现在可以重新用于其他目的。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第&lt;/span&gt;&lt;span lang="EN-US"&gt;782&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行，如果可能，打开控制台设备，这样&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程就拥有一个控制台，并可以从中读取输入信息，也可以向其中写入信息。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;实际上&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程除了打印错误信息以外，并不使用控制台，但是如果调用的是&lt;/span&gt;&lt;span lang="EN-US"&gt;shell&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;或者其他需要交互的进程，而不是&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，那么就需要一个可以交互的输入源。如果成功执行&lt;/span&gt;&lt;span lang="EN-US"&gt;open&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，&lt;/span&gt;&lt;span lang="EN-US"&gt;/dev/console&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;即成为&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的标准输入源（文件描述符&lt;/span&gt;&lt;span lang="EN-US"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第&lt;/span&gt;&lt;span lang="EN-US"&gt;785&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;～&lt;/span&gt;&lt;span lang="EN-US"&gt;786&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行，调用&lt;/span&gt;&lt;span lang="EN-US"&gt;dup&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;打开&lt;/span&gt;&lt;span lang="EN-US"&gt;/dev/console&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件描述符两次。这样，该控制台设备就也可以供标准输出和标准错误使用（文件描述符&lt;/span&gt;&lt;span lang="EN-US"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）。假设第&lt;/span&gt;&lt;span lang="EN-US"&gt;782&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行的&lt;/span&gt;&lt;span lang="EN-US"&gt;open&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;成功执行（正常情况），&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程现在就拥有&lt;/span&gt;&lt;span lang="EN-US"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个文件描述符&lt;/span&gt;&lt;span lang="EN-US"&gt;--&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标准输入、标准输出以及标准错误。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第&lt;/span&gt;&lt;span lang="EN-US"&gt;788&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;～&lt;/span&gt;&lt;span lang="EN-US"&gt;804&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行，如果内核命令行中给出了到&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;进程的直接路径（或者别的可替代的程序），这里就试图执行&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;因为当&lt;/span&gt;&lt;span lang="EN-US"&gt;kernel_execve&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数成功执行目标程序时并不返回，只有失败时，才能执行相关的表达式。接下来的几行会在几个地方查找&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，按照可能性由高到低的顺序依次是：&lt;/span&gt; &lt;span lang="EN-US"&gt;/sbin/init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，这是&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;标准的位置；&lt;/span&gt;&lt;span lang="EN-US"&gt;/etc/init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/span&gt;&lt;span lang="EN-US"&gt;/bin/init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，两个可能的位置。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第&lt;/span&gt;&lt;span lang="EN-US"&gt;805&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;～&lt;/span&gt;&lt;span lang="EN-US"&gt;807&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行，这些是&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可能出现的所有地方。如果在这&lt;/span&gt;&lt;span lang="EN-US"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个地方都没有发现&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，也就无法找到它的同名者了，系统可能就此崩溃。因此，第&lt;/span&gt;&lt;span lang="EN-US"&gt;808&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行会试图建立一个交互的&lt;/span&gt;&lt;span lang="EN-US"&gt;shell&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（&lt;/span&gt;&lt;span lang="EN-US"&gt;/bin/sh&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）来代替，希望&lt;/span&gt;&lt;span lang="EN-US"&gt;root&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;用户可以修复这种错误并重新启动机器。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;第&lt;/span&gt;&lt;span lang="EN-US"&gt;810&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;行，由于某些原因，&lt;/span&gt;&lt;span lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;甚至不能创建&lt;/span&gt;&lt;span lang="EN-US"&gt;shell&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。当前面的所有情况都失败时，调用&lt;/span&gt;&lt;span lang="EN-US"&gt;panic&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。这样内核就会试图同步磁盘，确保其状态一致。如果超过了内核选项中定义的时间，它也可能会重新启动机器。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hpunix/aggbug/2006782.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hpunix/articles/2006782.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
