<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[飞鸟的天空]]></title>
  <subtitle type="html"><![CDATA[What you are you do not see,What you see is your shadow.]]></subtitle>
  <id>http://www.cmuch.com/</id>
  <link rel="alternate" type="text/html" href="http://www.cmuch.com/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.cmuch.com/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2008-12-25T23:21:12+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[Perl遍历文件夹]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=10" label="脚本收集" /> 
	  <updated>2008-12-25T23:21:12+08:00</updated>
	  <published>2008-12-25T23:21:12+08:00</published>
		  <summary type="html"><![CDATA[根据自己需要,对路小佳的脚本进行了修改.<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>#!/usr/bin/perl -W<br/>#<br/># File: lsr_s.pl<br/># Author: 路小佳 <br/># Cmuch修改<br/># License: GPL-2<br/><br/>use strict;<br/>use warnings;<br/><br/>sub lsr_s($) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;my $cwd = shift;<br/>&nbsp;&nbsp;&nbsp;&nbsp;my @dirs = ($cwd.&#39;/&#39;);<br/>&#160;&#160;&#160;&#160;my @DirFile;<br/>&nbsp;&nbsp;&nbsp;&nbsp;my ($dir, $file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;while ($dir = pop(@dirs)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local *DH;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!opendir(DH, $dir)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;warn &#34;Cannot opendir $dir: $! $^E&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (readdir(DH)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($_ eq &#39;.&#39; || $_ eq &#39;..&#39;) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file = $dir.$_;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!-l $file &amp;&amp; -d _) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file .= &#39;/&#39;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push(@dirs, $file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;push @DirFile,$file;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closedir(DH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&#160;&#160;&#160;&#160;return @DirFile;<br/>}<br/>#while (1) {<br/>my @DirFile = lsr_s(&#39;.&#39;);<br/>foreach my $fh (@DirFile){<br/>&#160;&#160;&#160;&#160;print &#34;$fh\n&#34;;<br/>}<br/>#undef @DirFile;<br/>#print &#34;#########################\n&#34;;<br/>#@DirFile = lsr_s(&#39;.&#39;);<br/>#print &#34;@DirFile\n&#34;;<br/>#print &#34;=====================\n&#34;;<br/>#sleep(5);<br/>#}<br/></div></div><br/><br/>附件下载后改为.pl即可<img src="http://www.cmuch.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.cmuch.com/attachments/month_0812/a20081225232319.rar" target="_blank">点击下载此文件</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=238" /> 
	  <id>http://www.cmuch.com/default.asp?id=238</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[关于Debian源的一些简单说明]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=5" label="技术文档" /> 
	  <updated>2008-12-24T12:26:58+08:00</updated>
	  <published>2008-12-24T12:26:58+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:10pt"><br/>以下 stable, testing, unstable, experimental 的源算是对 Debian 软件包的一种水平划分。其实也可看成为稳定性不同的发行版本。<br/>通常我们还会以开发代号来称呼它们，目前的 stable 的开发代号是 sagre， testing 的开发代号是 etch，而 unstable 的开发代号一直是 sid。<br/>以前 testing 对应的是 sarge，后来 sarge 发展得差不多了，Debian 社区正式发行了 sarge，于是 sarge 就变成了 stable 版本。现在的 testing 则是 etch，将来发展稳定了etch 将变成新的 stable 版本。<br/><br/>stable源，就如同字面意思一样，是最稳定的源，但相对的各个软件则通常不是最新版， 一般情况下没有出现什么安全问题是不会更新的，所安装软件较少也较为固定。<br/>如果是搭建服务器的话，一般都采用 stable 的源。<br/><br/><br/>deb <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> stable main contrib non-free<br/>deb-src <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> stable main contrib non-free<br/><br/>deb <a href="http://mirror.bitunion.org/debian-non-US" target="_blank" rel="external">http://mirror.bitunion.org/debian-non-US</a> stable/non-US main contrib non-free<br/>deb-src <a href="http://mirror.bitunion.org/debian-non-US" target="_blank" rel="external">http://mirror.bitunion.org/debian-non-US</a> stable/non-US main contrib non-free<br/><br/>testing 源，虽名为测试版，实则已经相当接近于 stable 版本的程度，这个版本的软件多半是在 unstable 中经由维护、开发人员不断的测试之后流入，所以在某种程度来说，其实已经做过初步的检测，这里头的软件大多也是相当稳定的，而且软件也都会比 stable 里头的新，而且软件总量来说则比上 stable 要多很多。<br/>大多数人一般都使用的都是 testing 的源。<br/><br/>deb <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> testing main contrib non-free<br/>deb-src <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> testing main contrib non-free<br/><br/>deb <a href="http://mirror.bitunion.org/debian-non-US" target="_blank" rel="external">http://mirror.bitunion.org/debian-non-US</a> testing/non-US main contrib non-free<br/>deb-src <a href="http://mirror.bitunion.org/debian-non-US" target="_blank" rel="external">http://mirror.bitunion.org/debian-non-US</a> testing/non-US main contrib non-free<br/><br/><br/>unstable 源，个人看法这才算是 测试版 ，这里头最大的特色就是软件更新速度快，几乎都与该软件同步，因为太新相对的使用 unstable 的人也必须承担更高的风险，有时候您可能会遭遇到一早更新完所有软件后，发现有些软件不能正常运作的状况，不过庆幸的是这种情形大概只会持续一两天左右，因为 unstable 的特色就是更新速度快，一旦有人回报问题，维护的人很快就会作修正。<br/>如果喜欢玩软件，也不在乎有时候系统有出现一些小毛病，那就用它吧!<br/><br/>deb <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> unstable main contrib non-free<br/>deb-src <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> unstable main contrib non-free<br/><br/>deb <a href="http://mirror.bitunion.org/debian-non-US" target="_blank" rel="external">http://mirror.bitunion.org/debian-non-US</a> unstable /non-US main contrib non-free<br/>deb-src <a href="http://mirror.bitunion.org/debian-non-US" target="_blank" rel="external">http://mirror.bitunion.org/debian-non-US</a> unstable /non-US main contrib non-free<br/><br/>experimental源，按照官方的说法，里面的软件大多都是很不稳定和充满bug的，并可能导致数据的丢失….<br/>如果想用到最新的软件并充满小白鼠的献身精神或者是立志成为Bug Reporter..那就用它吧…<br/><br/>deb <a href="http://mirror.bitunion.org/debian/" target="_blank" rel="external">http://mirror.bitunion.org/debian/</a> experimental main contrib non-free<br/><br/>backports源，为 Debian 提供不需要非 Stable 链接库就可在 Stable 版运行的新软件包，有效地弥补了Debian Stable版软件较旧的缺点。属于稳定性和功能之间的一个新的平衡点吧。<br/>而且，这是 Lonecat 大大目前使用的源，还想什么，就选它吧。<br/><br/>deb <a href="http://mirror.bitunion.org/mirror/debian-backports" target="_blank" rel="external">http://mirror.bitunion.org/mirror/debian-backports</a> sarge-backports main non-free contrib<br/>deb <a href="http://mirror.bitunion.org/mirror/debian-bit" target="_blank" rel="external">http://mirror.bitunion.org/mirror/debian-bit</a> stable main non-free contrib<br/>deb <a href="http://mirror.bitunion.org/mirror/debian-marillat" target="_blank" rel="external">http://mirror.bitunion.org/mirror/debian-marillat</a> stable main<br/><br/>忘了还有一个 debian-uo，uo 是 Unofficial 的简写，也就是非官方的软件库。<br/><br/>deb <a href="http://mirror.bitunion.org/debian-uo" target="_blank" rel="external">http://mirror.bitunion.org/debian-uo</a> sid marillat rareware misc ustc java firefly jrfonseca xorg<br/>deb-src <a href="http://mirror.bitunion.org/debian-uo" target="_blank" rel="external">http://mirror.bitunion.org/debian-uo</a> sid marillat rareware misc ustc java firefly jrfonseca xorg<br/><br/>而其中出现的 main contrib non-free 之类的，理解为一种垂直的划分吧。<br/>因为 Debian 是非营利组织，但是组织架构严谨，有一套完善的软件管理方式。基于其对软件 free 度的一种坚持，对不同版权软件包的录入有一些限定。<br/>下面是对它们的一些简要介绍：<br/><br/>main Debian 里最基本及主要且符合自由软件规范的软件 ( packages )。<br/>contrib 这里头软件虽然可以在 Debian 里头运作，即使本身属于自由软件但多半却是相依于非自由 ( non-free ) 软件。<br/>non-free 不属于自由软件范畴的软件。<br/>non-us 这个分类里头的软件都来自非美国地区，当中可能有牵扯到专利、加密..等等问题。<br/>marillat 对应 Christian Marillat 的软件仓库，包括mplayer, transcode等。<br/>rareware 对应 rarewares.org 的软件仓库, 包括很多音效程序，如lame, musepack, beep media player等。<br/>ustc 对应 debian@ustc 维护的一些软件包，如 mule-gbk, gaim-openq, scim, stardict dicts, patched xpdf, irssi, xmms。<br/>java 对应 Blackdown java。包括 j2re, j2sdk ,mozilla java plugin。<br/>firefly 对应打过firefly补丁的包，包括 fontconfig mozilla mozilla-firefox pango1.0 qt-x11-free xft<br/>misc 对应其它无分类的包，包括 nvidia-kernel, winex3, rox, chmsee等<br/>debian-bit Lonecat 大大自己编译的一些软件包都在这里。<br/><br/>最后是关于源的混用问题，一般不建议混用 stable, testing 和 unstable 的源。因为很多软件之间都有不同程度的相依性，强行的结果会造成更多软件相依、相斥问题的产生，最终可能影响系统稳定与整个软件升级制度的正常运作。<br/><br/>需要把源从 stable 升到 testing, unstable 或者是从 testing 升到 unstable 源是非常简单的，只要修改 sources.list 里的源就好了。但反过来，降级是一种几乎不可能的任务…<br/><br/>还有就是 deb-src 代表的是源代码的源。<br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=237" /> 
	  <id>http://www.cmuch.com/default.asp?id=237</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Lighttpd应用补充:关于日志]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=5" label="技术文档" /> 
	  <updated>2008-12-24T11:20:54+08:00</updated>
	  <published>2008-12-24T11:20:54+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:10pt"><br/>1，设置日志文件<br/><br/>accesslog.filename=&#34;/SOHU/LOG/apachelogs/c_access_log&#34;<br/><br/>2，使用cronolog<br/><br/>accesslog.filename=&#34;|/usr/local/sbin/cronolog /SOHU/LOG/apachelogs/c_access_log.%w&#34;<br/><br/>3，定义记录格式：<br/><br/>accesslog.format=&#34;%h %l %u %t &#34;%r&#34; 200 %b &#34;%{Referer}i&#34; &#34;%{User-Agent}i&#34;&#34;<br/><br/>4，文件过滤，对部分访问不记录：<br/><br/>$HTTP[&#34;url&#34;] !~ &#34;click.php&#34; {<br/>accesslog.filename = &#34;|/usr/local/sbin/cronolog /SOHU/LOG/apachelogs/c_access_log.%w&#34;<br/>}<br/><br/>5，记录特殊内容。<br/><br/>A－SQUID传来的用户IP<br/><br/>accesslog.format = &#34;%{X-Forwarded-For}i %v %u %t &#34;%r&#34; %s %b &#34;%{User-Agent}i&#34; &#34;%{Referer}i&#34;&#34;<br/><br/>B－自定义的Header段<br/><br/>PHP程序：header(&#34;X-LIGHTTPD-jimmy&#34;,&#34;100&#34;)<br/><br/>accesslog.format=&#34;%h %l %u %t &#34;%r&#34; %b %&gt;s &#34;%{Referer}i&#34; &#34;%{User-Agent}i&#34; &#34;%{X-LIGHTTPD-jimmy}o&#34;&#34;<br/><br/>注意：X-LIGHTTPD-为前缀的Header不会被实际发往用户端。<br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=236" /> 
	  <id>http://www.cmuch.com/default.asp?id=236</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[visudo编辑sudoers配置文件]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=5" label="技术文档" /> 
	  <updated>2008-12-23T22:23:46+08:00</updated>
	  <published>2008-12-23T22:23:46+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:11pt"><br/>visudo编辑sudoers配置文件，不过也可以直接通过修改sudoers文件实现，不过编辑之前最好看一下它的sample.sudoers文件，里面有一个相当详细的例子可以参考。&nbsp;&nbsp;&nbsp;&nbsp;<br/>空格部分用tab键代替<br/>&nbsp;&nbsp;＃第一部分：用户定义，将用户分为FULLTIMERS、PARTTIMERS和WEBMASTERS三类。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;User_Alias&nbsp;&nbsp; FULLTIMERS&nbsp;&nbsp; =&nbsp;&nbsp; millert,&nbsp;&nbsp; mikef,&nbsp;&nbsp; dowdy&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;User_Alias&nbsp;&nbsp; PARTTIMERS&nbsp;&nbsp; =&nbsp;&nbsp; bostley,&nbsp;&nbsp; jwfox,&nbsp;&nbsp; crawl&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;User_Alias&nbsp;&nbsp; WEBMASTERS&nbsp;&nbsp; =&nbsp;&nbsp; will,&nbsp;&nbsp; wendy,&nbsp;&nbsp; wim&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃第二部分，将操作类型分类。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Runas_Alias&nbsp;&nbsp; OP&nbsp;&nbsp; =&nbsp;&nbsp; root,&nbsp;&nbsp; operator&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Runas_Alias&nbsp;&nbsp; DB&nbsp;&nbsp; =&nbsp;&nbsp; o&#114;acle,&nbsp;&nbsp; sybase&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;#第三部分，将主机分类。这些都是随便分得，目的是为了更好地管理。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Host_Alias&nbsp;&nbsp; SPARC&nbsp;&nbsp; =&nbsp;&nbsp; bigtime,&nbsp;&nbsp; eclipse,&nbsp;&nbsp; moet,&nbsp;&nbsp; anchor&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;SGI&nbsp;&nbsp; =&nbsp;&nbsp; grolsch,&nbsp;&nbsp; dandelion,&nbsp;&nbsp; black&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ALPHA&nbsp;&nbsp; =&nbsp;&nbsp; widget,&nbsp;&nbsp; thalamus,&nbsp;&nbsp; foobar&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;HPPA&nbsp;&nbsp; =&nbsp;&nbsp; boa,&nbsp;&nbsp; nag,&nbsp;&nbsp; python&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Host_Alias&nbsp;&nbsp; CUNETS&nbsp;&nbsp; =&nbsp;&nbsp; 128.138.0.0/255.255.0.0&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Host_Alias&nbsp;&nbsp; CSNETS&nbsp;&nbsp; =&nbsp;&nbsp; 128.138.243.0,&nbsp;&nbsp; 128.138.204.0/24,&nbsp;&nbsp; 128.138.242.0&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Host_Alias&nbsp;&nbsp; SERVERS&nbsp;&nbsp; =&nbsp;&nbsp; master,&nbsp;&nbsp; mail,&nbsp;&nbsp; www,&nbsp;&nbsp; ns&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Host_Alias&nbsp;&nbsp; CDROM&nbsp;&nbsp; =&nbsp;&nbsp; o&#114;ion,&nbsp;&nbsp; perseus,&nbsp;&nbsp; hercules&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃第四部分，定义命令和命令地路径。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; DUMPS&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/mt,&nbsp;&nbsp; /usr/sbin/dump,&nbsp;&nbsp; /usr/sbin/rdump,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;/usr/sbin/restore,&nbsp;&nbsp; /usr/sbin/rrestore&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; KILL&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/kill&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; PRINTING&nbsp;&nbsp; =&nbsp;&nbsp; /usr/sbin/lpc,&nbsp;&nbsp; /usr/bin/lprm&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; SHUTDOWN&nbsp;&nbsp; =&nbsp;&nbsp; /usr/sbin/shutdown&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; HALT&nbsp;&nbsp; =&nbsp;&nbsp; /usr/sbin/halt,&nbsp;&nbsp; /usr/sbin/fasthalt&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; REBOOT&nbsp;&nbsp; =&nbsp;&nbsp; /usr/sbin/reboot,&nbsp;&nbsp; /usr/sbin/fastboot&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; SHELLS&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/sh,&nbsp;&nbsp; /usr/bin/csh,&nbsp;&nbsp; /usr/bin/ksh,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;/usr/local/bin/tcsh,&nbsp;&nbsp; /usr/bin/rsh,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;/usr/local/bin/zsh&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; SU&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/su&nbsp;&nbsp;&nbsp;&nbsp;<br/> ＃这里是针对不同的用户采用不同地策略，比如默认所有的syslog直接通过auth&nbsp;&nbsp; 输出。FULLTIMERS组不用看到lecture（第一次运行时产生的消息）；用户millert使用sudo时不用输入密码；以及logfile的路径在/var/log/sudo.log而且每一行日志中必须包括年。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Defaults&nbsp;&nbsp; syslog=auth&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Defaults:FULLTIMERS&nbsp;&nbsp; !lecture&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Defaults:millert&nbsp;&nbsp; !authenticate&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Defaults@SERVERS&nbsp;&nbsp; log_year,&nbsp;&nbsp; logfile=/var/log/sudo.log&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃root和wheel组的成员拥有任何权利。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;root&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; (ALL)&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;%wheel&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; (ALL)&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/> ＃FULLTIMERS可以运行任何命令在任何主机而不用输入自己的密码&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;FULLTIMERS&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; NOPASSWD:&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃PARTTIMERS可以运行任何命令在任何主机，但是必须先验证自己的密码。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;PARTTIMERS&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃jack可以运行任何命令在定义地CSNET（128.138.243.0,&nbsp;&nbsp; 128.138.242.0和128.138.204.0/24的子网）中，不过注意前两个不需要匹配子网掩码，而后一个必须匹配掩码。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;jack&nbsp;&nbsp; CSNETS&nbsp;&nbsp; =&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃lisa可以运行任何命令在定义为CUNETS（128.138.0.0）的子网中主机上。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;lisa&nbsp;&nbsp; CUNETS&nbsp;&nbsp; =&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;#用户operator可以运行DUMPS,KILL,PRINTING,SHUTDOWN,HALT,REBOOT以及在/usr/oper/bin中的所有命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;operator&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; DUMPS,&nbsp;&nbsp; KILL,&nbsp;&nbsp; PRINTING,&nbsp;&nbsp; SHUTDOWN,&nbsp;&nbsp; HALT,&nbsp;&nbsp; REBOOT,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;/usr/oper/bin/&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃joe可以运行su&nbsp;&nbsp; operator命令&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;joe&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/su&nbsp;&nbsp; operator&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃pete可以为除root之外地用户修改密码。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;pete&nbsp;&nbsp; HPPA&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/passwd&nbsp;&nbsp; [A-z]*,&nbsp;&nbsp; !/usr/bin/passwd&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃bob可以在SPARC和SGI机器上和OP用户组中的root和operator一样运行如何命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;bob&nbsp;&nbsp; SPARC&nbsp;&nbsp; =&nbsp;&nbsp; (OP)&nbsp;&nbsp; ALL&nbsp;&nbsp; :&nbsp;&nbsp; SGI&nbsp;&nbsp; =&nbsp;&nbsp; (OP)&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/> ＃jim可以运行任何命令在biglab网络组中。Sudo默认“＋”是一个网络组地前缀。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;jim&nbsp;&nbsp; +biglab&nbsp;&nbsp; =&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃在secretaries中地用户帮助管理打印机，并且可以运行adduser和rmuser命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;+secretaries&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; PRINTING,&nbsp;&nbsp; /usr/bin/adduser,&nbsp;&nbsp; /usr/bin/rmuser&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃fred能够直接运行oracle或者sybase数据库。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;fred&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; (DB)&nbsp;&nbsp; NOPASSWD:&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃john可以在ALPHA机器上，su除了root之外地所有人。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;john&nbsp;&nbsp; ALPHA&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/su&nbsp;&nbsp; [!-]*,&nbsp;&nbsp; !/usr/bin/su&nbsp;&nbsp; *root*&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃jen可以在除了SERVERS主机组的机器上运行任何命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;jen&nbsp;&nbsp; ALL,&nbsp;&nbsp; !SERVERS&nbsp;&nbsp; =&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃jill可以在SERVERS上运行/usr/bin/中的除了su和shell命令之外的所有命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;jill&nbsp;&nbsp; SERVERS&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/,&nbsp;&nbsp; !SU,&nbsp;&nbsp; !SHELLS&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃steve可以作为普通用户运行在CSNETS主机上的/usr/local/op_commands/内的任何命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;steve&nbsp;&nbsp; CSNETS&nbsp;&nbsp; =&nbsp;&nbsp; (operator)&nbsp;&nbsp; /usr/local/op_commands/&nbsp;&nbsp;&nbsp;&nbsp;<br/> ＃matt可以在他的个人工作站上运行kill命令。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;matt&nbsp;&nbsp; valkyrie&nbsp;&nbsp; =&nbsp;&nbsp; KILL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃WEBMASTERS用户组中的用户可以以www的用户名运行任何命令或者可以su&nbsp;&nbsp; www。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;WEBMASTERS&nbsp;&nbsp; www&nbsp;&nbsp; =&nbsp;&nbsp; (www)&nbsp;&nbsp; ALL,&nbsp;&nbsp; (root)&nbsp;&nbsp; /usr/bin/su&nbsp;&nbsp; www&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;＃任何用户可以mount或者umount一个cd-rom在CDROM主机上，而不用输入密码。&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ALL&nbsp;&nbsp; CDROM&nbsp;&nbsp; =&nbsp;&nbsp; NOPASSWD:&nbsp;&nbsp; /sbin/umount&nbsp;&nbsp; /CDROM,&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;/sbin/mount&nbsp;&nbsp; -o&nbsp;&nbsp; nosuid,nodev&nbsp;&nbsp; /dev/cd0a&nbsp;&nbsp; /CDROM&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;10)&nbsp;&nbsp; 我的sudoers&nbsp;&nbsp; 配置文件是这样的&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;User_Alias&nbsp;&nbsp; ADMIN&nbsp;&nbsp; =&nbsp;&nbsp; root,username&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Runas_Alias&nbsp;&nbsp; OP&nbsp;&nbsp; =&nbsp;&nbsp; username&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; IPCHAINS&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/ipchains&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; EDIT&nbsp;&nbsp; =&nbsp;&nbsp; /bin/vi&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; SHUTDOWN&nbsp;&nbsp; =/sbin/shutdown&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; HALT&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/halt&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; DEL&nbsp;&nbsp; =&nbsp;&nbsp; /bin/rm&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; COPY=&nbsp;&nbsp; /bin/cp&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; SU=/bin/su&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; SLEEP=&nbsp;&nbsp; /bin/sleep&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; REBOOT&nbsp;&nbsp; =&nbsp;&nbsp; /usr/bin/reboot&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; CHMOD=/bin/chmod&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; HWCLOCK=/sbin/hwclock&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; TRACET=/usr/sbin/traceroute&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; VIPW&nbsp;&nbsp; =&nbsp;&nbsp; /sbin/route&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; PASSWD=/usr/bin/passwd&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; IPSEC=/usr/local/sbin/ipsec&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; ARP=/sbin/arp&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;Cmnd_Alias&nbsp;&nbsp; HOSTNAME=/bin/hostname&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;root&nbsp;&nbsp; ALL&nbsp;&nbsp; =&nbsp;&nbsp; (ALL)&nbsp;&nbsp; ALL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:HOSTNAME&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:ARP&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:HWCLOCK&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:IPCHAINS&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:HALT&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:SHUTDOWN&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:REBOOT&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:CHMOD&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:IPSEC&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:PASSWD&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:TRACET&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:DEL&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:COPY&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:SU&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:EDIT&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:SLEEP&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;ADMIN&nbsp;&nbsp; SERVERNAME=(ALL)&nbsp;&nbsp; NOPASSWD:ROUTE&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;sudo的使用相对地简单，只要将sudo和sudoers命令拷贝到相应的路径即可。Sudo命令可以rename成你所喜欢的名字，sudoers也一样。<br/><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=235" /> 
	  <id>http://www.cmuch.com/default.asp?id=235</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[bash条件变量替换]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=7" label="shell文档" /> 
	  <updated>2008-12-23T21:34:55+08:00</updated>
	  <published>2008-12-23T21:34:55+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:11pt"><br/>Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换<br/>条件放在{}中.<br/>(1) ${value:-word}<br/>当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.<br/>(2) ${value:=word}<br/>与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将<br/>word赋值给value<br/>(3) ${value:?message}<br/>若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若<br/>此替换出现在Shell程序中,那么该程序将终止运行)<br/>(4) ${value:+word}<br/>若变量以赋值的话,其值才用word替换,否则不进行任何替换<br/>(5) ${value:offset}<br/>${value:offset:length}<br/>从变量中提取子串,这里offset和length可以是算术表达式.<br/>(6) ${#value}<br/>变量的字符个数 (变量的字符个数，并不是变量个数）<br/>(7) ${value#pattern}<br/>${value##pattern}<br/>去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配<br/>#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.<br/>( ${value%pattern}<br/>${value%%pattern}<br/>于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样<br/>(9) ${value/pattern/string}<br/>${value//pattern/string}<br/>进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区<br/>别与上同<br/>注意:上述条件变量替换中,除(2)外,其余均不影响变量本身的值<br/><br/>===========================================================<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>变量赋值(没设定、空值、非空值)<br/>${#myvar}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计算出变量值的长度<br/>${myvar=default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若 $myvar 没设定，则输出并取值 default。(保留空值及非空值)<br/>${myvar:=default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若 $myvar 没设定或为空值，则输出并取值 default。(保留非空值)<br/>${myvar+default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若 $myvar 设定为空值或非空值，输出但不取值 default，否则返回空(null)。<br/>${myvar:+default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若 $myvar 设定为非空值，输出但不取值 default，否则返回空(null)。<br/>${myvar-default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若 $myvar 没设定，输出但不取值 default。(保留空值及非空值)<br/>${myvar:-default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若 $myvar 没设定或为空值，输出但不取值 default。(保留非空值)<br/>${myvar?default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若 $myvar 没设定，将 default 输出至 STDERR。(不取值，保留空值及非空值)<br/>${myvar:?default}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若 $myvar 没设定或为空值，将 default 输出至STDERR。(不取值，保留非空值)<br/></div></div><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>bash 的组数(array)处理<br/>一般而言，A=&#34;a b c def&#34; 这样的变量只是将 $A 替换为一个单一的字符串，但是改为 A=(a b c def) ，则是将 $A 定义为组数。bash 的组数替换方法可参考如下方法：<br/>${A[@]} 或 ${A<br/>} 可得到 a b c def (全部组数)；<br/>${A[0]} 可得到 a (第一个组数)，${A[1]} 则为第二个组数；<br/>${#A[@]} 或 ${#A<br/>} 可得到 4 (全部组数数量)；<br/>${#A[0]} 可得到 1 (即第一个组数(a)的长度)，${A[3]} 可得到 3 (第一个组数(def)的长度)；<br/>A[3]=xyz 则是将第 4 个组数重新定义为 xyz。<br/><br/>清除赋值：unset &lt;变量&gt;<br/>变量一旦经过 unset 取消之后，其结果是将整个变量拿掉，而不仅是取消其变量值。如下两行其实是很不一样的：<br/>$ A=<br/>$ unset A<br/>第一行只是将变量 A 设定为&#34;空值&#34;(null value)，但第二行则让变量 A 不在存在：<br/>$ A=<br/>$ echo $A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打印输出为空<br/>$ unset A<br/>$ echo $A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打印输出为空<br/>请务必能识别 null value 与 unset 的本质区别，这在一些进阶的变量处理上是很严格的。与export一样，unset 命令行也同样会作变量替换(这其实就是 shell 的功能之一)，因此：<br/>A=B<br/>B=C<br/>unset $A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;事实上所取消的变量是 B 而不是 A 。<br/></div></div><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>$( )、` `、$(( ))、(( ))<br/>A、$( )与 ` `(反引号)<br/>都是用来做命令替换用(command substitution)的。所谓的命令替换与前面的变量替换差不多，都是用来重组命令行：完成引号里的命令行，然后将其结果替换出来，再重组命令行。<br/>例如：$ echo last sunday is $(date -d &#34;last sunday&#34; +%Y-%m-%d) ，如此便可得到上一星期天的日期了。<br/>在操作上，用 $( ) 或 ` ` 都无所谓，只是我&#34;个人&#34;比较喜欢用 $( ) ，理由是：<br/>（1） ` ` 很容易与 &#39; &#39; ( 单引号)搞混乱。有时在一些奇怪的字形显示中，两种符号是一模一样的(直竖两点)。<br/>（2） 在多层次的复合替换中，` ` 须要额外的跳脱( \` )处理，而 $( ) 则比较直观。<br/>例如：command1 `command2 `command3` `这是错的。<br/>原本的意图是要在 command2 `command3` 先将 command3 提换出来给command 2 处理，然后再将结果传给 command1 `command2 ...` 来处理。然而，真正的结果在命令行中却是分成了 `command2 ` 与 `` 两段。<br/>正确的输入应该是：command1 `command2 \`command3\` `<br/>要不然，换成 $( ) 就没问题了：command1 $(command2 $(command3))<br/>不过，$( ) 并不是没有弊端的， ` ` 基本上可用在全部的 unix shell 中使用，若写成 shell script ，其移植性比较高。而 $( ) 并不见的每一种 shell 都能使用，只能说，若你用 bash2 的话，肯定没问题！<br/>例：通过$()实现对某目录下文件进行操作的功能：<br/>#!/bin/bash<br/>j=$(ls $1)<br/>for k in $j<br/>do<br/>&nbsp;&nbsp;echo &#34;$k&#34;<br/>&nbsp;&nbsp;if [ $k = text ]<br/>&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;cat $k<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo no text<br/>&nbsp;&nbsp;fi<br/>done<br/><br/>B、$(( ))用来作整数运算<br/>在 bash 中，$(( )) 的整数运算符号大致有这些：<br/>+ - * / ：分别为 &#34;加、减、乘、除&#34;。<br/>% ：余数运算<br/>&amp; | ^ !：分别为 &#34;AND、OR、XOR、NOT&#34; 运算。<br/>例：<br/>$ a=5; b=7; c=2<br/>$ echo $(( a+b*c ))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得19<br/>$ echo $(( (a+b)/c ))&nbsp;&nbsp;&nbsp;&nbsp;#得6<br/>$ echo $(( (a*b)%c))&nbsp;&nbsp;&nbsp;&nbsp; #得1<br/>在 $(( )) 中的变量，可用 $ 符号来替换，也可以不用，如：$(( $a + $b * $c)) 也可得到 19 的结果。此外，$(( )) 还可作不同进位(如二进制、八进位、十六进制)作运算呢，只是，输出结果皆为十进制而已：<br/>echo $((16#2a))&nbsp;&nbsp; 结果为 42 (16进位转十进制)<br/>以一个实用的例子来看看吧：<br/>假如当前的 umask 是 022 ，那么新建文件的权限即为：<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ umask 022<br/>$ echo &#34;obase=8;$(( 8#666 &amp; (8#777 ^ 8#$(umask)) ))&#34; | bc<br/>644<br/><br/>C、用 (( ))重定义变量值或作testing<br/>a=5; ((a++)) 可将 $a 重定义为 6<br/>a=5; ((a--)) 则为 a=4<br/>a=5; b=7; ((a &lt; b)) 会得到 0 (true) 的返回值。<br/>常见的用于 (( )) 的测试符号有如下这些：<br/>&lt;：小于<br/>&gt;：大于<br/>&lt;=：小于或等于<br/>&gt;=：大于或等于<br/>==：等于<br/>!=：不等于<br/>不过，使用 (( )) 作整数测试时，请不要跟 [ ] 的整数测试搞混乱了。<br/></div></div><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=234" /> 
	  <id>http://www.cmuch.com/default.asp?id=234</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[用sysctl进行调整Linux系统性能]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=5" label="技术文档" /> 
	  <updated>2008-12-22T10:40:04+08:00</updated>
	  <published>2008-12-22T10:40:04+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:11pt"><br/>sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项， 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。基于这点，sysctl(8) 提供两个功能：读取和修改系统设置。<br/>查看所有可读变量：<br/>% sysctl -a<br/>读一个指定的变量，例如 kern.maxproc：<br/>% sysctl kern.maxproc kern.maxproc: 1044<br/>要设置一个指定的变量，直接用 variable=value 这样的语法：<br/># sysctl kern.maxfiles=5000<br/>kern.maxfiles: 2088 -&gt; 5000<br/>您可以使用sysctl修改系统变量，也可以通过编辑sysctl.conf文件来修改系统变量。sysctl.conf 看起来很像 rc.conf。它用 variable=value 的形式来设定值。指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。<br/>sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示&#39;yes&#39;，用 0 来表示&#39;no&#39;)。<br/><br/>sysctl -w kernel.sysrq=0<br/>sysctl -w kernel.core_uses_pid=1<br/>sysctl -w net.ipv4.conf.default.accept_redirects=0<br/>sysctl -w net.ipv4.conf.default.accept_source_route=0<br/>sysctl -w net.ipv4.conf.default.rp_filter=1<br/>sysctl -w net.ipv4.tcp_syncookies=1<br/>sysctl -w net.ipv4.tcp_max_syn_backlog=2048<br/>sysctl -w net.ipv4.tcp_fin_timeout=30<br/>sysctl -w net.ipv4.tcp_synack_retries=2<br/>sysctl -w net.ipv4.tcp_keepalive_time=3600<br/>sysctl -w net.ipv4.tcp_window_scaling=1<br/>sysctl -w net.ipv4.tcp_sack=1<br/><br/>配置sysctl<br/><br/>编辑此文件：<br/><br/>vi /etc/sysctl.conf<br/><br/><br/>如果该文件为空，则输入以下内容，否则请根据情况自己做调整：<br/><br/># Controls source route verification<br/># Default should work for all interfaces<br/>net.ipv4.conf.default.rp_filter = 1<br/># net.ipv4.conf.all.rp_filter = 1<br/># net.ipv4.conf.lo.rp_filter = 1<br/># net.ipv4.conf.eth0.rp_filter = 1<br/><br/># Disables IP source routing<br/># Default should work for all interfaces<br/>net.ipv4.conf.default.accept_source_route = 0<br/># net.ipv4.conf.all.accept_source_route = 0<br/># net.ipv4.conf.lo.accept_source_route = 0<br/># net.ipv4.conf.eth0.accept_source_route = 0<br/><br/># Controls the System Request debugging functionality of the kernel<br/>kernel.sysrq = 0<br/><br/># Controls whether core dumps will append the PID to the core filename.<br/># Useful for debugging multi-threaded applications.<br/>kernel.core_uses_pid = 1<br/><br/># Increase maximum amount of memory allocated to shm<br/># Only uncomment if needed!<br/># kernel.shmmax = 67108864<br/><br/># Disable ICMP Redirect Acceptance<br/># Default should work for all interfaces<br/>net.ipv4.conf.default.accept_redirects = 0<br/># net.ipv4.conf.all.accept_redirects = 0<br/># net.ipv4.conf.lo.accept_redirects = 0<br/># net.ipv4.conf.eth0.accept_redirects = 0<br/><br/># Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets<br/># Default should work for all interfaces<br/>net.ipv4.conf.default.log_martians = 1<br/># net.ipv4.conf.all.log_martians = 1<br/># net.ipv4.conf.lo.log_martians = 1<br/># net.ipv4.conf.eth0.log_martians = 1<br/><br/># Decrease the time default value for tcp_fin_timeout connection<br/>net.ipv4.tcp_fin_timeout = 25<br/><br/># Decrease the time default value for tcp_keepalive_time connection<br/>net.ipv4.tcp_keepalive_time = 1200<br/><br/># Turn on the tcp_window_scaling<br/>net.ipv4.tcp_window_scaling = 1<br/><br/># Turn on the tcp_sack<br/>net.ipv4.tcp_sack = 1<br/><br/># tcp_fack should be on because of sack<br/>net.ipv4.tcp_fack = 1<br/><br/># Turn on the tcp_timestamps<br/>net.ipv4.tcp_timestamps = 1<br/><br/># Enable TCP SYN Cookie Protection<br/>net.ipv4.tcp_syncookies = 1<br/><br/># Enable ignoring broadcasts request<br/>net.ipv4.icmp_echo_ignore_broadcasts = 1<br/><br/># Enable bad error message Protection<br/>net.ipv4.icmp_ignore_bogus_error_responses = 1<br/><br/># Make more local ports available<br/># net.ipv4.ip_local_port_range = 1024 65000<br/><br/># Set TCP Re-Ordering value in kernel to ‘5′<br/>net.ipv4.tcp_reordering = 5<br/><br/># Lower syn retry rates<br/>net.ipv4.tcp_synack_retries = 2<br/>net.ipv4.tcp_syn_retries = 3<br/><br/># Set Max SYN Backlog to ‘2048′<br/>net.ipv4.tcp_max_syn_backlog = 2048<br/><br/># Various Settings<br/>net.core.netdev_max_backlog = 1024<br/><br/># Increase the maximum number of skb-heads to be cached<br/>net.core.hot_list_length = 256<br/><br/># Increase the tcp-time-wait buckets pool size<br/>net.ipv4.tcp_max_tw_buckets = 360000<br/><br/># This will increase the amount of memory available for socket input/output queues<br/>net.core.rmem_default = 65535<br/>net.core.rmem_max = 8388608<br/>net.ipv4.tcp_rmem = 4096 87380 8388608<br/>net.core.wmem_default = 65535<br/>net.core.wmem_max = 8388608<br/>net.ipv4.tcp_wmem = 4096 65535 8388608<br/>net.ipv4.tcp_mem = 8388608 8388608 8388608<br/>net.core.optmem_max = 40960<br/><br/>如果希望屏蔽别人 ping 你的主机，则加入以下代码：<br/><br/># Disable ping requests<br/>net.ipv4.icmp_echo_ignore_all = 1<br/><br/>编辑完成后，请执行以下命令使变动立即生效：<br/><br/>/sbin/sysctl -p<br/>/sbin/sysctl -w net.ipv4.route.flush=1<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>net.ipv4.tcp_fin_timeout = 30<br/>net.ipv4.tcp_keepalive_time = 300<br/>net.ipv4.tcp_syncookies = 1<br/>net.ipv4.tcp_tw_reuse = 1<br/>net.ipv4.tcp_tw_recycle = 1<br/>net.ipv4.ip_local_port_range =&nbsp;&nbsp;5000&nbsp;&nbsp;&nbsp;&nbsp;65000<br/></div></div><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=233" /> 
	  <id>http://www.cmuch.com/default.asp?id=233</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[vmstat 命令的用法说明]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=5" label="技术文档" /> 
	  <updated>2008-12-19T10:17:46+08:00</updated>
	  <published>2008-12-19T10:17:46+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:11pt"><br/>用途<br/><br/>报告虚拟内存统计信息。<br/>语法<br/><br/>vmstat [ -f ] [ -i ] [ -s ] [ -I ] [ -t ] [ -v ] [ PhysicalVolume ... ] [ Interval [ Count ] ]<br/>描述<br/><br/>vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息（所有的处理器中）都计算出以百分比表示的平均值，或者计算其总和。<br/><br/>如果调用 vmstat 命令时不带标志，则报告包含系统启动后虚拟内存活动的摘要。如果指定 -f 标志，则 vmstat 命令报告自从系统启动后派生的数量。PhysicalVolume 参数指定物理卷的名称。<br/><br/>Interval 参数指定每个报告之间的时间量（以秒计）。第一个报告包含系统启动后时间的统计信息。后续报告包含自从前一个报告起的时间间隔过程中所收集的统计信息。如果没有指定 Interval 参数，vmstat 命令生成单个报告然后退出。Count 参数只能和 Interval 参数一起指定。如果指定了 Count 参数，其值决定生成的报告数目和相互间隔的秒数。如果 Interval 参数被指定而没有 Count 参数，则连续生成报告。Count 参数不允许为 0。<br/><br/>在 AIX 4.3.3 及更新版本包含有此方法的增强，用于计算 CPU 等待磁盘 I/O 所花时间（wio 时间）的百分比。某些情况下，AIX 4.3.2 以及该操作系统更早的版本中使用的该方法在 SMP 上会给出夸张的 wio 时间报告。<br/><br/>AIX 4.3.2 和更早版本中使用的方法如下：在每个处理器的每一次时钟中断（每个处理器一秒钟 100 次），确定上一个 10 毫秒时间要归入四种类别（usr/sys/wio/idle）中的哪一个。如果在时钟中断的时候，CPU 正忙于 usr 方式，那么 usr 将获取该时钟周期添加到其类别中。如果在时钟中断的时候，CPU 正忙于内核方式，那么 sys 类别获取该时钟周期。如果 CPU 不忙的话，则检测是否有磁盘 I/O 正在进行。如果有任何正在进行的磁盘 I/ O，则累加 wio 类别。如果没有磁盘 I/O 正在进行且 CPU 不忙，则 idle 类别获取该时钟周期。由于所有的空闲 CPU 都被归入 wio 类别，而不管正在等待 I/O 的线程数量，所以会产生夸大的 wio 时间报告。例如，只有一个 I/O 线程的系统可能会报告 90% 以上的 wio 时间，而不管它拥有的 CPU 数量。sar（%wio）、vmstat（wa）和 iostat（% iowait）命令报告 wio 时间。<br/><br/>操作系统 AIX 4.3.3 及其更新版本使用的方法如下：如果一个未完成的 I/O 在空闲的 CPU 上启动，则操作系统 AIX 4.3.3 中的更改将只把该 CPU 标记成 wio。当只有少量线程在进行 I/O 而系统其它部分是空闲的，此方法能报告低得多的 wio 时间。例如，一个有四个 CPU 和一个正在进行 I/O 的线程的系统将报告最多 25% 的 wio 时间。有 12 个 CPU 和一个正在进行 I/O 的线程的系统只报告最大为 8% 的 wio 时间。NFS 客户机通过 VMM 读取／写入，biods 在 VMM 中花费的等待 I/O 完成的时间现在报告为 I/O 等待时间。<br/><br/>内核为内核线程、调页和中断活动维护统计信息，vmstat 命令通过使用perfstat 内核扩展来对其进行访问。磁盘输入／输出统计信息由设备驱动程序维护。对于磁盘，利用活动时间和传送信息数量来确定平均传送速率。活动时间的百分数根据报告期间驱动器忙的时间量来计算。<br/><br/>由 vmstat 命令生成的以下报告示例包含栏标题及其描述：<br/><br/>kthr：内核线程状态在采样间隔期间每秒钟更改一次。<br/>r &#160;&#160;&#160;&#160;置于运行队列中的内核线程数目。<br/>b &#160;&#160;&#160;&#160;置于等待队列（等待资源、等待输入／输出）的内核线程数目。<br/><br/>内存：关于使用虚拟内存和实内存的信息。如果虚拟页已经被访问的话，虚拟页可以被认为是活动的。一页为 4096 个字节。<br/>avm &#160;&#160;&#160;&#160;活动虚拟页。<br/>fre &#160;&#160;&#160;&#160;空闲列表的大小。<br/>注:<br/>大部分实内存都用作文件系统数据的高速缓存。对于保持较小的空闲列表，这是很正常的。<br/><br/>页：关于缺页故障和调页活动的信息。这些是间隔的平均值，以秒为单位给出。<br/>re &#160;&#160;&#160;&#160;页面调度程序输入／输出列表。<br/>pi &#160;&#160;&#160;&#160;从调页空间调度进的页面。<br/>po &#160;&#160;&#160;&#160;调出到调页空间的页面。<br/>fr &#160;&#160;&#160;&#160;释放的页（页面替换）。<br/>sr &#160;&#160;&#160;&#160;通过页替换算法扫描的页面。<br/>cy &#160;&#160;&#160;&#160;按页替换算法的时钟周期。<br/><br/>故障：采样间隔平均每秒的捕获和中断率。<br/>in &#160;&#160;&#160;&#160;设备中断<br/>sy &#160;&#160;&#160;&#160;系统调用。<br/>cs &#160;&#160;&#160;&#160;内核线程上下文切换。<br/><br/>Cpu：CPU 使用时间故障百分比。<br/>us &#160;&#160;&#160;&#160;用户时间。<br/>sy &#160;&#160;&#160;&#160;系统时间。<br/>id &#160;&#160;&#160;&#160;CPU 空闲时间。<br/>wa &#160;&#160;&#160;&#160;CPU 空闲时间，在此期间系统有未完成的磁盘/NFS I/O 请求。请参阅上面的详细描述。<br/><br/>磁盘：每秒向指定物理卷提供的传送数目，该过程在采样间隔中发生。PhysicalVolume 参数可以用于指定一到四个名称。每个指定驱动器的传送统计信息按指定顺序给出。该计数代表向物理设备的请求数。它并不暗示读取或写入的数据量。几个逻辑请求可以组合成为一个物理请求。<br/><br/>如果指定一个 -I 标志，I/O 定向视图将会出现以下栏目变化。<br/>kthr &#160;&#160;&#160;&#160;除了栏 r 和 b之外，栏 p 也将显示。<br/><br/>p<br/>&nbsp;&nbsp;&nbsp;&nbsp;每秒等待实际物理 I/O 的线程数。 <br/><br/>页 &#160;&#160;&#160;&#160;将显示新栏 fi 和 fo，代替 re 和 cy 栏。<br/><br/>fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;每秒调入的文件。 <br/>fo<br/>&nbsp;&nbsp;&nbsp;&nbsp;每秒调出的文件。 <br/><br/>标志<br/>注:<br/>如果在命令行中输入了 -f（或 -s）标志，系统将仅接受 -f（或 -s）标志，将忽略其它标志。如果同时指定了 -f 和 -s 标志，系统将仅接受第一个标志，忽略第二个标志。<br/>-f &#160;&#160;&#160;&#160;报告从系统启动后的派生数目。<br/>-i &#160;&#160;&#160;&#160;显示从系统启动后每个设备造成的中断数目。<br/>-I &#160;&#160;&#160;&#160;用新的输出栏显示 I/O 定向视图，p 在标题 kthr 下；栏 fi 和 fo 在标题页面下，而不是栏下；re 和 cy 在页标题中。<br/>-s &#160;&#160;&#160;&#160;将总数结构中的内容写入到标准输出，该结构包含从系统初始化后调页事件的绝对计数。-s 标志只能与 -v 标志一起使用。如下描述了这些事件：<br/><br/>地址翻译错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;每次发生地址转换页面故障时增加。解决页面故障可能需要 I/O，也可能不需要。存储保护页面故障（失去锁定）不包含在此计数之内。 <br/>入页<br/>&nbsp;&nbsp;&nbsp;&nbsp;随虚拟内存管理器读入的每页增加。计数随调页空间和文件空间的入页增加。它和出页统计信息一起表示实际 I/O（由虚拟内存管理器启动）的总量。 <br/>出页<br/>&nbsp;&nbsp;&nbsp;&nbsp;随虚拟内存管理器写出的每页增加。计数随调页空间和文件空间的出页而增加。它和入页统计信息一起表示实际 I/O（由虚拟内存管理器启动）的总量。 <br/>调页空间入页<br/>&nbsp;&nbsp;&nbsp;&nbsp;只随 VMM 启动的来自调页空间的入页而增加。 <br/>调页空间出页<br/>&nbsp;&nbsp;&nbsp;&nbsp;只随 VMM 启动的来自调页空间的出页而增加。 <br/>总回收<br/>&nbsp;&nbsp;&nbsp;&nbsp;当不启用一个新的 I/O 请求也可以满足地址翻译错误时增加。如果页面以前已经被 VMM 请求过的，但是 I/O 还没有完成；或者页面被预读算法提前提取，但是被故障段隐藏了；或者如果页面已经被放入空闲列表中，但还没有重新使用，则会发生此情况。 <br/>零填充页面故障<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果页面故障针对的是工作存储器，且可以通过指定一个帧并以零填充帧来满足它的话，则该值增加。 <br/>可执行填充页面故障<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着每个指令页面故障而增加。 <br/>用时钟检查页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;VMM 利用时钟算法实施伪最近最少使用（1ru）的页面替换模式。时钟检查过的页面是 aged。为每个时钟检查过的页面增加此计数值。 <br/>时钟指针的转动<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着每次 VMM 时钟旋转而增加（即在每一次完整的内存扫描后）。 <br/>用时钟释放的页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着时钟算法从实内存中选择释放的每一个页面而增加。 <br/><br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;<br/><br/>回溯<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着解决前一个页面故障时出现的每一个页面故障而增加。（必须首先解决新的页面故障，然后可以回溯到最初的页面故障。） <br/>锁定丢失<br/>&nbsp;&nbsp;&nbsp;&nbsp;VMM 通过除去对页面的寻址能力来强制并发性锁定。锁定丢失可能产生一个页面故障，每当此类情况发生时，此计数增加。 <br/>空闲帧等待<br/>&nbsp;&nbsp;&nbsp;&nbsp;在收集可用帧时，每次 VMM 等待一个进程时增加。 <br/>扩展 XPT 等待<br/>&nbsp;&nbsp;&nbsp;&nbsp;每次正在进行提交而使得 VMM 等待一个进程时，随着正在被访问的段而增加。 <br/>暂挂 I/O 等待<br/>&nbsp;&nbsp;&nbsp;&nbsp;每次 VMM 等待一个进程时随着要完成的入页 I/O 而增加。 <br/>启动 I/O<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着每个被 VMM 启动的读取或写入 I/O 请求而增加。此计数应该与入页和出页的总数相等。 <br/>iodones<br/>&nbsp;&nbsp;&nbsp;&nbsp;在每次完成 VMM I/O 请求时增加。 <br/>CPU 上下文交换<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着每次 CPU 上下文交换而增加（新进程的分派）。 <br/>设备中断<br/>&nbsp;&nbsp;&nbsp;&nbsp;每次硬件中断时增加。 <br/>软件中断<br/>&nbsp;&nbsp;&nbsp;&nbsp;每次软件中断时增加。一次软件中断是一个类似于硬件中断（保存一些状态和服务器例程分支）的机器指令。系统调用用软件中断指令来完成，该指令转换控制到系统调用处理程序例程。 <br/>陷阱<br/>&nbsp;&nbsp;&nbsp;&nbsp;不通过操作系统来维护。 <br/>syscalls<br/>&nbsp;&nbsp;&nbsp;&nbsp;随着每次系统调用而增加。 <br/><br/>-t &#160;&#160;&#160;&#160;打印 vmstat 的每一输出行旁边的时间戳记。时间戳记按照 HH：MM：SS 格式显示。<br/>注:<br/>如果指定了 -f、-s 或 -i 标志，将不打印时间戳记。<br/>-v &#160;&#160;&#160;&#160;将虚拟内存管理器维护的不同统计信息写入标准输出。-v 标志只能与 -s 标志一起使用。<br/><br/>内存页<br/>&nbsp;&nbsp;&nbsp;&nbsp;实内存的大小（以 4 KB 的页面数目计）。 <br/>lruable 页<br/>&nbsp;&nbsp;&nbsp;&nbsp;要用于替换的 4 KB 页面的数目。此数目不包含被用于 VMM 内部页和用于内核文本的固定部分的页面。 <br/>空闲页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;空闲 4 KB 页面的数目。 <br/>内存池<br/>&nbsp;&nbsp;&nbsp;&nbsp;指定内存池数目的调整参数（使用 vmo 管理）。 <br/>固定页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;固定的 4 KB 页面的数目。 <br/>maxpin 百分比<br/>&nbsp;&nbsp;&nbsp;&nbsp;指定能被固定的实内存百分数的调整参数（使用 vmo 管理）。 <br/>minperm 百分比<br/>&nbsp;&nbsp;&nbsp;&nbsp;实内存百分比的调整参数（使用 vmo 管理）。它指定一临界点，低于此临界点时阻止页面重新调度算法使用文件页面。 <br/>maxperm 百分比<br/>&nbsp;&nbsp;&nbsp;&nbsp;实内存百分比的调整参数（使用 vmo 管理）。它指定一临界点，高于此临界点时页面取走算法只取走文件页面。 <br/>numperm 百分比<br/>&nbsp;&nbsp;&nbsp;&nbsp;当前由文件高速缓存使用的内存百分数。 <br/>文件页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;当前由文件高速缓存使用的 4 KB 页面的数目。 <br/>压缩百分比<br/>&nbsp;&nbsp;&nbsp;&nbsp;由压缩页面使用的内存百分数。 <br/>压缩页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;压缩内存页面的数目。 <br/>numclient 百分数<br/>&nbsp;&nbsp;&nbsp;&nbsp;被客户机页面占用的内存百分数。 <br/>maxclient 百分数<br/>&nbsp;&nbsp;&nbsp;&nbsp;指定能用于客户机页面的最大内存百分数的调整参数（使用 vmo 管理）。 <br/>客户机页面<br/>&nbsp;&nbsp;&nbsp;&nbsp;客户机页面的数目。 <br/>已调度的远程出页<br/>&nbsp;&nbsp;&nbsp;&nbsp;调度用于客户机文件系统的出页的数目。 <br/>无 pbuf 而阻塞的暂挂磁盘 I/O<br/>&nbsp;&nbsp;&nbsp;&nbsp;没有可用 pbuf 而阻塞的暂挂磁盘 I/O 请求的数目。Pbuf 是用于保存逻辑卷管理器层上的 I/O 请求的固定的内存缓冲区。 <br/>无 psbuf 而阻塞的调页空间 I/O<br/>&nbsp;&nbsp;&nbsp;&nbsp;没有可用 psbuf 而阻塞的调页空间 I/O 请求的数目。Psbuf 是用于保存虚拟内存管理器层上的 I/O 请求的固定内存缓冲区。 <br/><br/>-v &#160;&#160;&#160;&#160;（由 -v显示的统计信息，接上页）：<br/><br/>无 fsbuf 而阻塞的文件系统 I/O<br/>&nbsp;&nbsp;&nbsp;&nbsp;没有可用 fsbuf 而阻塞的文件系统 I/O 请求的数目。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。 <br/>无 fsbuf 而阻塞的客户机文件系统 I/O<br/>&nbsp;&nbsp;&nbsp;&nbsp;没有可用 fsbuf 而阻塞的客户机文件系统 I/O 请求的数目。NFS（网络文件系统）和 VxFS（Veritas）是客户机文件系统。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。 <br/>无 fsbuf 而阻塞的外部页面调度程序文件系统 I/O<br/>&nbsp;&nbsp;&nbsp;&nbsp;没有可用 fsbuf 而被阻塞的外部页面调度程序客户机文件系统 I/O 请求的数目。JFS2 是一个外部页面调度程序客户机文件系统。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。 <br/><br/>示例<br/><br/>&nbsp;&nbsp; 1. 要显示引导后的统计信息摘要，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat<br/><br/>&nbsp;&nbsp; 2. 要显示 2 秒时间间隔的 5 个摘要，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat 2 5<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一次摘要包含引导后的时间统计信息。<br/>&nbsp;&nbsp; 3. 要显示引导后包括逻辑磁盘 scdisk13 和 scdisk14 的统计信息摘要，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat scdisk13 scdisk14<br/><br/>&nbsp;&nbsp; 4. 要显示派生统计信息，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat&nbsp;&nbsp;-f<br/><br/>&nbsp;&nbsp; 5. 要显示各事件的计数，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat -s<br/><br/>&nbsp;&nbsp; 6. 要显示 vmstat的每一输出栏旁边的时间戳记，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat -t<br/><br/>&nbsp;&nbsp; 7. 要以另一套输出栏显示新的 I/O 定向视图，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat -I<br/><br/>&nbsp;&nbsp; 8. 要显示所有可用的 VMM 统计信息，请输入：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vmstat -vs<br/><br/>其中:<br/>如果 r经常大于 4 ，且id经常少于40，表示cpu的负荷很重。<br/>如果pi，po 长期不等于0，表示内存不足。<br/>如果disk 经常不等于0， 且在 b中的队列 大于3， 表示 io性能不好。 <br/>===============================================================<br/>1.) 如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.<br/>2.) 如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.<br/>3.) 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.<br/>解决办法:<br/>当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU.&nbsp;&nbsp;关于CPU的使用情况还可以结合mpstat,&nbsp;&nbsp;ps aux top&nbsp;&nbsp;prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下，应用程序的问题会比较大一些.比如一些 SQL语句不合理等等都会造成这样的现象.<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>内存问题现象:<br/>内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数. 如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.<br/>&nbsp;&nbsp;<br/>解决办法:<br/>1.调节applications &amp; servers使得对内存和cache的使用更加有效.<br/>2.增加系统的内存.<br/>3. Implement priority paging in s in pre solaris 8 versions by adding line &#34;set priority paging=1&#34; in <br/>/etc/system. Remove this line if upgrading from Solaris 7 to 8 &amp; retaining old /etc/system file.<br/>关于内存的使用情况还可以结ps aux top&nbsp;&nbsp;prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下，如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用<br/><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=232" /> 
	  <id>http://www.cmuch.com/default.asp?id=232</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Vitas MTV]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=8" label="生活百科" /> 
	  <updated>2008-12-17T23:53:02+08:00</updated>
	  <published>2008-12-17T23:53:02+08:00</published>
		  <summary type="html"><![CDATA[<div class="UBBPanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp24746_href" href="http://www.cmuch.com/javascript:MediaShow('swf','temp24746','http://player.youku.com/player.php/sid/XMjAxMTA4ODA=/v.swf','400','300')"><img name="temp24746_img" src="http://www.cmuch.com/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp24746_text">在线播放</span></a><div id="temp24746"></div></div></div><br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=231" /> 
	  <id>http://www.cmuch.com/default.asp?id=231</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[MySQL性能优化]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=12" label="Oracle&amp;Mysql" /> 
	  <updated>2008-12-17T17:26:11+08:00</updated>
	  <published>2008-12-17T17:26:11+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:11pt"><br/>在Apache, PHP, MySQL的体系架构中，MySQL对于性能的影响最大，也是关键的核心部分。对于Discuz!论坛程序也是如此，MySQL的设置是否合理优化，直接影响到论坛的速度和承载量！同时，MySQL也是优化难度最大的一个部分，不但需要理解一些MySQL专业知识，同时还需要长时间的观察统计并且根据经验进行判断，然后设置合理的参数。<br/><br/>下面我们了解一下MySQL优化的一些基础，MySQL的优化我分为两个部分，一是服务器物理硬件的优化；二是MySQL自身(my.cnf)的优化。<br/><br/><br/>(1) 服务器硬件对MySQL性能的影响<br/><br/>a) 磁盘寻道能力（磁盘I/O）,以目前高转速SCSI硬盘(7200转/秒)为例，这种硬盘理论上每秒寻道7200次，这是物理特性决定的，没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作，对磁盘的读写量可想而知。所以，通常认为磁盘I/O是制约MySQL性能的最大因素之一，对于日均访问量在100万PV以上的Discuz!论坛，由于磁盘I/O的制约，MySQL的性能会非常低下！解决这一制约因素可以考虑以下几种解决方案：<br/><br/>使用RAID-0+1磁盘阵列，注意不要尝试使用RAID-5，MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快； 抛弃传统的硬盘，使用速度更快的闪存式存储设备。经过Discuz!公司技术工程的测试，使用闪存式存储设备可比传统硬盘速度高出6－10倍左右。<br/><br/>b) CPU 对于MySQL应用，推荐使用S.M.P.架构的多路对称CPU，例如：可以使用两颗Intel Xeon 3.6GHz的CPU。<br/><br/>c) 物理内存对于一台使用MySQL的Database Server来说，服务器内存建议不要小于2GB，推荐使用4GB以上的物理内存。<br/><br/><br/>(2) MySQL自身因素当解决了上述服务器硬件制约因素后，让我们看看MySQL自身的优化是如何操作的。对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。<br/><br/>由于my.cnf文件的优化设置是与服务器硬件配置息息相关的，因而我们指定一个假想的服务器硬件环境：<br/><br/>CPU: 2颗Intel Xeon 2.4GHz<br/><br/>内存: 4GB DDR<br/><br/>硬盘: SCSI 73GB<br/><br/>下面，我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明：<br/><br/># vi /etc/my.cnf<br/><br/>以下只列出my.cnf文件中[mysqld]段落中的内容，其他段落内容对MySQL运行性能影响甚微，因而姑且忽略。<br/><br/>&nbsp;&nbsp;[mysqld]<br/>&nbsp;&nbsp;port = 3306<br/>&nbsp;&nbsp;serverid = 1 <br/>&nbsp;&nbsp;socket = /tmp/mysql.sock<br/>&nbsp;&nbsp;skip-locking<br/>&nbsp;&nbsp;# 避免MySQL的外部锁定，减少出错几率增强稳定性。<br/>&nbsp;&nbsp;skip-name-resolve<br/><br/>禁止MySQL对外部连接进行DNS解析，使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意，如果开启该选项，则所有远程主机连接授权都要使用IP地址方式，否则MySQL将无法正常处理连接请求！<br/><br/>back_log = 384<br/><br/>指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求，该参数生效，主线程花费很短的时间检查连接并且启动一个新线程。<br/><br/>back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接，则需要增大该参数的值，该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。<br/><br/>试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; key_buffer_size = 256M<br/>&nbsp;&nbsp;# key_buffer_size指定用于索引的缓冲区大小，增加它可得到更好的索引处理性能。<br/>&nbsp;&nbsp;&nbsp;&nbsp;对于内存在4GB左右的服务器该参数可设置为256M或384M。<br/>&nbsp;&nbsp;注意：该参数值设置的过大反而会是服务器整体效率降低！ <br/>&nbsp;&nbsp;&nbsp;&nbsp; max_allowed_packet = 4M<br/>&nbsp;&nbsp;&nbsp;&nbsp;thread_stack = 256K<br/>&nbsp;&nbsp;&nbsp;&nbsp;table_cache = 128K<br/>&nbsp;&nbsp;&nbsp;&nbsp;sort_buffer_size = 6M<br/><br/>查询排序时所能使用的缓冲区大小。注意：该参数对应的分配内存是每连接独占！如果有100个连接，那么实际分配的总共排序缓冲区大小为100 × 6 ＝ 600MB。所以，对于内存在4GB左右的服务器推荐设置为6-8M。<br/><br/> read_buffer_size = 4M<br/><br/>读查询操作所能使用的缓冲区大小。和sort_buffer_size一样，该参数对应的分配内存也是每连接独享！<br/><br/>join_buffer_size = 8M<br/><br/>联合查询操作所能使用的缓冲区大小，和sort_buffer_size一样，该参数对应的分配内存也是每连接独享！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; myisam_sort_buffer_size = 64M<br/>&nbsp;&nbsp;&nbsp;&nbsp;table_cache = 512<br/>&nbsp;&nbsp;&nbsp;&nbsp;thread_cache_size = 64<br/>&nbsp;&nbsp;&nbsp;&nbsp;query_cache_size = 64M<br/><br/>指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察：<br/><br/> # &gt; SHOW VARIABLES LIKE &#39;%query_cache%&#39;;<br/> # &gt; SHOW STATUS LIKE &#39;Qcache%&#39;;<br/> # 如果Qcache_lowmem_prunes的值非常大，则表明经常出现缓冲不够的情况；<br/><br/>如果Qcache_hits的值非常大，则表明查询缓冲使用非常频繁，如果该值较小反而会影响效率，那么可以考虑不用查询缓冲；Qcache_free_blocks，如果该值非常大，则表明缓冲区中碎片很多。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; tmp_table_size = 256M<br/>&nbsp;&nbsp;&nbsp;&nbsp;max_connections = 768<br/><br/>指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示，则需要增大该参数值。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; max_connect_errors = 10000000<br/>&nbsp;&nbsp;&nbsp;&nbsp;wait_timeout = 10<br/><br/>指定一个请求的最大连接时间，对于4GB左右内存的服务器可以设置为5-10。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; thread_concurrency = 8<br/><br/>该参数取值为服务器逻辑CPU数量×2，在本例中，服务器有2颗物理CPU，而每颗物理CPU又支持H.T超线程，所以实际取值为4 × 2 ＝ 8<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;skip-networking<br/><br/>开启该选项可以彻底关闭MySQL的TCP/IP连接方式，如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项！否则将无法正常连接！ <br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.cmuch.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>[mysqld]<br/>port = 3306<br/>serverid = 1<br/>socket = /tmp/mysql.sock<br/>skip-locking<br/>skip-name-resolve<br/>back_log = 384<br/>key_buffer_size = 256M<br/>max_allowed_packet = 4M<br/>thread_stack = 256K<br/>table_cache = 128K<br/>sort_buffer_size = 6M<br/>read_buffer_size = 4M<br/>join_buffer_size = 8M<br/>myisam_sort_buffer_size = 64M<br/>table_cache = 512<br/>thread_cache_size = 64<br/>query_cache_size = 64M<br/>tmp_table_size = 256M<br/>max_connections = 768<br/>max_connect_errors = 10000000<br/>wait_timeout = 10<br/>thread_concurrency = 8<br/>skip-networking<br/></div></div><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=230" /> 
	  <id>http://www.cmuch.com/default.asp?id=230</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[系统状态查看工具Sysstat]]></title>
	  <author>
		 <name>cn_vipus</name>
		 <uri>http://www.cmuch.com/</uri>
		 <email>cn_vipus@yahoo.com.cn</email>
	  </author>
	  <category term="" scheme="http://www.cmuch.com/default.asp?cateID=5" label="技术文档" /> 
	  <updated>2008-12-12T17:29:26+08:00</updated>
	  <published>2008-12-12T17:29:26+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:11pt"><br/>+++++++++++++++++++++++++++++++++++++++<br/>正文<br/>+++++++++++++++++++++++++++++++++++++++<br/><br/><br/>1、关于 Sysstat；<br/><br/>Sysstat 是一个软件包，包含监测系统性能及效率的一组工具，这些工具对于我们收集系统性能数据，比如CPU使用率、硬盘和网络吞吐数据，这些数据的收集和分析，有利于我们判断系统是否正常运行，是提高系统运行效率、安全运行服务器的得力助手；<br/><br/><br/>Sysstat 软件包集成如下工具：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* iostat 工具提供CPU使用率及硬盘吞吐效率的数据；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* mpstat 工具提供单个处理器或多个处理器相关数据；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* sar 工具负责收集、报告并存储系统活跃的信息；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行，<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是为sadc所设计的程序前端程序；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ，要通过cron来调用<br/>&nbsp;&nbsp;&nbsp;&nbsp;* sadc 是系统动态数据收集工具，收集的数据被写一个二进制的文件中，它被用作sar工具的后端；<br/>&nbsp;&nbsp;&nbsp;&nbsp;* sadf 显示被sar通过多种格式收集的数据；<br/><br/><br/>2、安装 Sysstat和运行；<br/><br/>对于大多数系统，都有这个软件包，软件名以sysstat开头。我们可以通过网络安装它；<br/><br/><br/>2.1 对于Debian或deb软件包为基础的系统；<br/><br/>[root@localhost ~]# apt-get install sysstat<br/><br/><br/>2.2 Fedora 系统或以RPM包管理的系统；<br/><br/>[root@localhost ~]# yum&nbsp;&nbsp; install sysstat<br/><br/>如果是RPM包，请用下面的命令来安装；<br/><br/>[root@localhost ~]#rpm -ivh sysstat*.rpm&nbsp;&nbsp;<br/><br/>如果您想了解yum 和rpm 软件包管理工具，请参考：《Fedora / Redhat 软件包管理指南》<br/><br/><br/>2.3 Slackware 系统，对于Slackware系统；<br/><br/>[root@localhost ~]# installpkg sysstat*.pkg<br/><br/><br/>2.4 通过源码包编译安装；<br/><br/>如果您是通过源码包安装，请到官方下源源码包 <a href="http://perso.wanadoo.fr/sebastien.godard" target="_blank" rel="external">http://perso.wanadoo.fr/sebastien.godard</a>，目前最新版本是 sysstat-6.1.2；<br/><br/>如果您想了想一下什么是源码包，请参考：《如何编译安装源码包软件》<br/><br/>[root@localhost ~]# tar zxvf sysstat-6.1.2.tar.gz<br/>[beinan@localhost ~]$ cd sysstat-6.1.2<br/>[beinan@localhost sysstat-6.1.2]#<br/>[beinan@localhost sysstat-6.1.2]# make config<br/>[beinan@localhost sysstat-6.1.2]# make<br/>[beinan@localhost sysstat-6.1.2]# make install<br/><br/><br/>2.5 关于 Sysstat 计划任务；<br/><br/>如果您想得到Sysstat工具集所收集的系统信息自动存为某个文件中，你必须通过cron 为 sa1 和sa2 做计划任务。我们可以通过修改用户的crontab。在默认的情况下，Sysstat历史信息将被存放在/var/log/sa文件中。如果想定义自己的计划任务，请参考：《计划任务工具 cron 的配置和说明》<br/><br/>在root用户，通过 crontab -e 来添加下面的一段；<br/><br/># 8am-7pm activity reports every 10 minutes during weekdays<br/>0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &amp;<br/># 7pm-8am activity reports every hour during weekdays<br/>0 19-7 * * 1-5 /usr/lib/sa/sa1 &amp;<br/># Activity reports every hour on Saturday and Sunday<br/>0 * * * 0,6 /usr/lib/sa/sa1 &amp;<br/># Daily summary prepared at 19:05 5 19 * * * /usr/lib/sa/sa2 -A &amp;<br/><br/>创建Sysstat的启动脚本；<br/><br/>[root@localhost ~]# touch&nbsp;&nbsp;/etc/rc.d/init.d/sysstat<br/>[root@localhost ~]# vi /etc/rc.d/init.d/sysstat<br/><br/>#!/bin/sh<br/># Begin $rc_base/init.d/sysstat<br/><br/># Based on sysklogd script from LFS-3.1 and earlier.<br/># Rewritten by Gerard Beekmans&nbsp;&nbsp;- gerard@linuxfromscratch.org<br/><br/>. /etc/sysconfig/rc<br/>. $rc_functions<br/><br/>case &#34;$1&#34; in<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &#34;Calling the system activity data collector (sadc)...&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/lib/sa/sadc -F -L -<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evaluate_retval<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*)<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &#34;Usage: $0 start&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>esac<br/><br/># End $rc_base/init.d/sysstat<br/><br/>[root@localhost ~]# chmod 755 /etc/rc.d/init.d/sysstat<br/>[root@localhost ~]# ln -sf /etc/rc.d/init.d/sysstat /etc/init.d/sysstat<br/><br/>有了Sysstat的守护进程，这样我们开机后，Sysstat的守护进程，就时时刻刻的为我们服务了。sa 、sa1或sa2自动把信息存在 /var/log/sa目录的二进制文件中，我们可以通过sar工具来提取这些系统信息的历史；<br/><br/>当然我们也可以通过手动的方法来打开Sysstat的守护程序，也就是我们前面所制作的sysstat；<br/><br/>[root@localhost ~]# /etc/rc.d/init.d/sysstat start<br/><br/>下面的方法也行；<br/><br/>[root@localhost ~]# /usr/lib/sa/sa1<br/>[root@localhost ~]# /usr/lib/sa/sa2<br/><br/><br/>3.Sysstat 工具集介绍；<br/><br/><br/>3.1 sadc 工具，<br/><br/>sadc 位于 /usr/lib/sa目录中，如果你没有设置可执行路径，要用绝对路径来运行比较方便 ，/usr/lib/sa/sadc；sadc 是把数据写在一个二进制的文件中，如果想查看数据内容，需要用sadf工具来显示；<br/><br/><br/>sadc 的用法；<br/><br/>/usr/lib/sa/sadc [ -d ] [ -F ] [ -I ] [ -L ] [ -V ] [ interval [ count ] ] [ outfile ]<br/><br/>参数说明：<br/><br/>-d&nbsp;&nbsp;报告硬盘设置的相关统计；<br/>-F&nbsp;&nbsp;强制把数据写入文件；<br/>-I&nbsp;&nbsp;报告所有系统中断数据；<br/><br/>interval 表示时间间隔，单位是秒，比如3 ；<br/>count 统计数据的次数，也是一个数字；<br/>outfile 输出统计到outfile文件；<br/><br/>注意：此工具中的参数都是可选的，如果没有指定任何参数，比如 /usr/lib/sa/sadc - ，则会输出数据到 /var/log/sa/ 目录下的一个文件中。我们要通过sadf 或sar工具来查看；<br/><br/>[root@localhost beinan]# /usr/lib/sa/sadc&nbsp;&nbsp;-<br/>[root@localhost beinan]# ls /var/log/sa&nbsp;&nbsp; 注：列出所有sa目录下的文件，根据文件的时间来判断哪个文件是最新的；<br/>[root@localhost beinan]# sar&nbsp;&nbsp;-f&nbsp;&nbsp;/var/log/sa/sa12<br/><br/>或<br/><br/>[root@localhost beinan]# sadf&nbsp;&nbsp;/var/log/sa/sa12<br/><br/>举例：我们想把sadc收集到的数据写到一个指定的文件中；<br/><br/>[root@localhost ~]# /usr/lib/sa/sadc&nbsp;&nbsp;1 10 sa000<br/>[root@localhost ~]# sar -f sa000<br/><br/>Linux 2.6.15-1.2054_FC5 (localhost.localdomain)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2006年05月12日<br/><br/>09时15分30秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU&nbsp;&nbsp;&nbsp;&nbsp; %user&nbsp;&nbsp;&nbsp;&nbsp; %nice&nbsp;&nbsp; %system&nbsp;&nbsp; %iowait&nbsp;&nbsp;&nbsp;&nbsp; %idle<br/>09时15分31秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.00&nbsp;&nbsp;&nbsp;&nbsp; 96.00<br/>09时15分32秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分33秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分34秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分35秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分36秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分37秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分38秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>09时15分39秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;100.00<br/>Average:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.11&nbsp;&nbsp;&nbsp;&nbsp; 99.56<br/><br/><br/>注解：我们用sadc 收集系统动态数据，让它收集1秒之内的10次动态信息； 然后通过sar 工具来查看系统的状态。也可以用 sadf 来查看所收集的数据，但不是太直观。您自己尝试一下看看。查看sa000文件，用 sadf sa000 ;<br/><br/><br/>3.2 sar 工具；<br/><br/>sar 工具比较强大，既能收集系统CPU、硬盘、动态数据，也能显示动态显示，更能查看二进制数据文件；sar 的应用比较多，而且也比较复杂，数据更为精确。我们只了解一下常用的内容就行，大多数内容我们了解就行；<br/><br/>用法：<br/><br/>sar&nbsp;&nbsp;［参数选项]<br/><br/>参数说明：<br/><br/>-A&nbsp;&nbsp;显示所有历史数据，通过读取/var/log/sar 目录下的所有文件，并把它们分门别类的显示出来；<br/>-b&nbsp;&nbsp;通过设备的I/O中断读取设置的吞吐率；<br/>-B 报告内存或虚拟内存交换统计；<br/>-c 报告每秒创建的进程数；<br/>-d 报告物理块设备（存储设备）的写入、读取之类的信息，如果直观一点，可以和p参数共同使用，-dp<br/>-f 从一个二进制的数据文件中读取内容，比如 sar -f filename<br/>-i interval&nbsp;&nbsp;指定数据收集的时间，时间单位是秒；<br/>-n 分析网络设备状态的统计，后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV<br/>-o 把统计信息写入一个文件，比如&nbsp;&nbsp;-o filename ；<br/>-P 报告每个处理器应用统计，用于多处理器机器，并且启用SMP内核才有效；<br/>-p 显示友好设备名字，以方便查看，也可以和-d 和-n 参数结合使用，比如 -dp 或-np<br/>-r 内存和交换区占用统计；<br/>-R<br/>-t 这个选项对从文件读取数据有用，如果没有这个参数，会以本地时间为标准 读出；<br/>-u 报告CPU利用率的参数；<br/>-v 报告inode, 文件或其它内核表的资源占用信息；<br/>-w 报告系统交换活动的信息； 每少交换数据的个数；<br/>-W 报告系统交换活动吞吐信息；<br/>-x 用于监视进程的，在其后要指定进程的PID值；<br/>-X 用于监视进程的，但指定的应该是一个子进程ID；<br/><br/>sar 应用举例；<br/><br/>实例一： 如果只用sar 命令，sar就是读取 /var/log/sa目录下最近系统状态文件。<br/><br/>[root@localhost ~]# sar<br/><br/>[root@localhost ~]# sar -A&nbsp;&nbsp;注：读取/var/log/sa目录下所有文件数据；<br/><br/>如果我们想知道CPU的利用率；动态更新；下面的例子是每秒更新一次数据，总共更新五次；<br/><br/>[root@localhost ~]# sar -u&nbsp;&nbsp;1 5<br/>Linux 2.6.15-1.2054_FC5 (localhost.localdomain)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2006年05月12日<br/><br/>时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPU&nbsp;&nbsp;&nbsp;&nbsp;利用率&nbsp;&nbsp;&nbsp;&nbsp;nice值&nbsp;&nbsp;&nbsp;&nbsp;系统占用&nbsp;&nbsp;&nbsp;&nbsp;IO占用&nbsp;&nbsp;空闲<br/>11时19分34秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU&nbsp;&nbsp;&nbsp;&nbsp; %user&nbsp;&nbsp;&nbsp;&nbsp; %nice&nbsp;&nbsp; %system&nbsp;&nbsp; %iowait&nbsp;&nbsp;&nbsp;&nbsp; %idle<br/>11时19分35秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp; 97.03<br/>11时19分36秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp; 11.11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9.09&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp; 79.80<br/>11时19分37秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp; 21.78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp; 71.29<br/>11时19分38秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp; 15.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp; 85.00<br/>11时19分39秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp; 92.00<br/>Average:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp; 11.78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp; 85.03<br/><br/>注解：<br/><br/>CPU：表示机器内所有的CPU；<br/>%user 表示CPU的利用率；<br/>%nice 表示CPU在用户层优先级的百分比，0表示正常；<br/>%system 表示当系统运行时，在用户应用层上所占用的CPU百分比；<br/>%iowait 表示请求硬盘I/0数据流出时，所占用CPU的百分比；<br/>%idle 表示空闲CPU百分比，值越大系统负载越低；<br/><br/>您可以CPU利用率的动态信息输出到一个文本文件中，然后通过more 来查看。<br/><br/>[root@localhost ~]# sar -u&nbsp;&nbsp;1 5 &gt; sar000.txt<br/>[root@localhost ~]# more sar000.txt<br/><br/>也可以输出到一个二进制的文件中，然后通过sar来查看；<br/><br/>[root@localhost ~]# sar -u&nbsp;&nbsp;1 5 -o sar002<br/>[root@localhost ~]# sar -f sar002<br/><br/>注：如果您把数据通过-o filename 输出到一个二进制的文件中，是不能用文件内容查看工具more 、less或cat来查看的，应该用sar工具来查看，要加-f参数；<br/><br/>实例二：查看网络设备的吞吐情况；<br/><br/>比如我们让数据每秒更新一次，总共更新十次；<br/><br/>[root@localhost ~]# sar -n DEV&nbsp;&nbsp;2 5<br/>时间&nbsp;&nbsp;&nbsp;&nbsp; IFACE&nbsp;&nbsp; rxpck/s&nbsp;&nbsp; txpck/s&nbsp;&nbsp; rxbyt/s&nbsp;&nbsp; txbyt/s&nbsp;&nbsp; rxcmp/s&nbsp;&nbsp; txcmp/s&nbsp;&nbsp;rxmcst/s<br/><br/>第一字段：时间；<br/>IFACE：设备名；<br/>rxpck/s:每秒收到的包；<br/>rxbyt/s：每秒收到的所有包的体积；<br/>txbyt/s：每秒传输的所有包的体积；<br/>rxcmp/s：每秒收到数据切割压缩的包总数；<br/>txcmp/s :每秒传输的数据切割压缩的包的总数；<br/>rxmcst/s: 每秒收到的多点传送的包；<br/><br/>如果我们从事提取eth0设备（也就是网卡eth0)的信息；我们应该用grep 来过滤。然后再显示出来；<br/><br/>[root@localhost ~]# sar -n DEV&nbsp;&nbsp;2&nbsp;&nbsp;5&nbsp;&nbsp;|grep eth0<br/>11时52分37秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth0&nbsp;&nbsp;1.00&nbsp;&nbsp;1.00&nbsp;&nbsp; 97.51&nbsp;&nbsp; 97.51&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00<br/>11时52分39秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth0&nbsp;&nbsp;1.01&nbsp;&nbsp;1.01&nbsp;&nbsp; 98.49&nbsp;&nbsp; 98.49&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00<br/>11时52分41秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth0&nbsp;&nbsp;1.00&nbsp;&nbsp;1.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00<br/>11时52分43秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth0&nbsp;&nbsp;1.00&nbsp;&nbsp;1.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00<br/>11时52分45秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth0&nbsp;&nbsp;1.00&nbsp;&nbsp;1.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00<br/>Average：&nbsp;&nbsp; eth0&nbsp;&nbsp; 1.00&nbsp;&nbsp;1.00&nbsp;&nbsp;98.00&nbsp;&nbsp; 98.00&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.00<br/><br/>如果想知道网络设备错误报告，也就就是用来查看设备故障的。应该用EDEV；比如下面的例子；<br/><br/>[root@localhost ~]# sar -n EDEV&nbsp;&nbsp;2 5<br/><br/><br/>3.3 iostat<br/><br/>iostat 是用来显示 系统即时系统，比如CPU使用率，硬盘设备的吞吐率；<br/><br/>[root@localhost ~]# iostat<br/>Linux 2.6.15-1.2054_FC5 (localhost.localdomain)&nbsp;&nbsp; 2006年05月12日<br/><br/>avg-cpu:&nbsp;&nbsp;%user&nbsp;&nbsp; %nice %system %iowait&nbsp;&nbsp; %idle<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.24&nbsp;&nbsp;&nbsp;&nbsp;0.00&nbsp;&nbsp;&nbsp;&nbsp;0.99&nbsp;&nbsp;&nbsp;&nbsp;0.35&nbsp;&nbsp; 91.43<br/><br/>Device:&nbsp;&nbsp; tps&nbsp;&nbsp; Blk_read/s&nbsp;&nbsp; Blk_wrtn/s&nbsp;&nbsp; Blk_read&nbsp;&nbsp; Blk_wrtn<br/>hda&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28.43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21.43&nbsp;&nbsp;&nbsp;&nbsp; 710589&nbsp;&nbsp;&nbsp;&nbsp; 535680<br/><br/><br/>3.4 mpstat<br/><br/>mpstat 提供多处理器系统中的CPU的利用率的统计；mpstat 也可以加参数，用-P来指定哪个 CPU，处理器的ID是从0开始的。下面的例子是查看两个处理器，每二秒数据更新一次，总共要显示10次数据；<br/><br/>[root@localhost ~]# mpstat -P 0 2 10&nbsp;&nbsp;注：查看第一个CPU<br/>[root@localhost ~]# mpstat -p 1 2 10&nbsp;&nbsp;注：查看第二个CPU<br/>&lt;/code &gt;<br/><br/>&lt;code&gt;<br/>[root@localhost ~]# mpstat 2 10&nbsp;&nbsp;注：查看所有CPU；<br/><br/><br/>3.5 sdaf<br/><br/>sdaf 能从二进制文件中提取sar所收集的数据；这个大家知道就行了。显示的并不是友好的格式；<br/><br/>[root@localhost ~]# sar -u 2 5 -o sar003<br/>[root@localhost ~]# sadf&nbsp;&nbsp;sar003<br/><br/>相对来说，用sar来读取输出文件的内容更好；比如下面的；<br/><br/>[root@localhost ~]# sar -f sar003<br/><br/><br/>4、 与Sysstat相似工具；<br/><br/><br/>4.1 进程管理工具；<br/><br/>进程管理工具，包括ps 、pgrep、top、kill 、killall、pkill 等，请参考 《 Linux 进程管理》<br/><br/><br/>4.2 内存使用率查看工具；<br/><br/>内存使用量 free<br/><br/>free 工具既能查看物理内存，也能查看虚拟内存的用量；<br/><br/>[root@localhost ~]# free<br/><br/>如果显示以单位M，则加-m参数；<br/><br/>[root@localhost ~]# free -m<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; used&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free&nbsp;&nbsp;&nbsp;&nbsp; shared&nbsp;&nbsp;&nbsp;&nbsp;buffers&nbsp;&nbsp;&nbsp;&nbsp; cached<br/>Mem:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 724&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;713&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;290<br/>-/+ buffers/cache:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;398&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;326<br/>Swap:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;800<br/><br/><br/>vmstat 即时显示内存工具；<br/><br/>vmstat 是一个即时显示内存使用情况的工具；<br/><br/>vmstat 使用方法：<br/><br/>vmstat [-V] [-n] [delay [count]]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-V 显示vmstat的版本；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-n causes the headers not to be reprinted regularly.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-a 显示所有激活和未激活内存的状态；print inactive/active page stats.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-d 显示硬盘统计信息；prints disk statistics<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-D 显示硬盘分区表；prints disk table<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-p 显示硬盘分区读写状态等；prints disk partition statistics<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-s 显示内存使用情况；prints vm table<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-m prints slabinfo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-S 定义单位，k K<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay 是两次刷新时间间隔；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单位体积： k:1000 K:1024 m:1000000 M:1048576 (默认是 K)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count 刷新次数；<br/><br/><br/>5、 关于本文；<br/><br/>我在2004年10月30日，写过一篇Sysstat 的文章 ，当时也并没有把Sysstat搞的太清楚，只是会简单的操作，原文可参见《系统维护常用工具sysstat》。<br/><br/>今天重写此文，主要是以前写的比较差，所以对一些参数进行了测试、考证，我想这样应该对新手方便一点。<br/><br/>本文也并不是大而全的man ，有些参数怎么理解，还得依靠我们自己。我认为掌握一些常用的参数就行，没有必要把一个命令研究的多透彻。有些东西，如果我们用不着，学了也没有什么用，这就是学为所用吧。<br/><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cmuch.com/article.asp?id=229" /> 
	  <id>http://www.cmuch.com/default.asp?id=229</id>
  </entry>	
		
</feed>
