<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[SelBoo's Blog 色萝卜]]></title> 
<link>http://selboo.com.cn/index.php</link> 
<description><![CDATA[简单记录,方便自己,服务大众...]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[SelBoo's Blog 色萝卜]]></copyright>
<item>
<link>http://selboo.com.cn/read.php?702</link>
<title><![CDATA[mysql找回忘记的root密码]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Fri, 05 Mar 2010 09:24:04 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?702</guid> 
<description>
<![CDATA[ 
	<strong>Windows</strong><br/>1、停止mysql服务：打开命令行窗口CMD，net stop mysql<br/><br/>2、用另外一种方式启动Mysql：在命令行进入到mysql的安装路径下的bin目录下使用mysqld-nt.exe启动：mysqld-nt --skip-grant-tables 注意：此时CMD窗口不能关闭。<br/><br/>3、进入Mysql：另外打开一个命入令行窗口，在bin目录下执行mysql，此时无需输入密码即可进入。<br/>>use mysql<br/>>update user set password=password("new_pass") where user="root";<br/>>flush privileges;<br/>>exit<br/><br/>4、使用任务管理器，找到mysqld-nt的进程，结束进程！5、重新启动mysql服务，net start mysql 就可以用新密码登录了。<br/>　　<br/><strong>Linux</strong><br/><br/>1、关闭Mysql： 如果 MySQL 正在运行，首先杀之 killall -TERM mysqld <br/><br/>2、另外的方法启动 MySQL ：bin/safe_mysqld --skip-grant-tables & <br/><br/>3、可以不需要密码就进入 MySQL 了。 <br/><br/>>use mysql<br/>>update user set password=password("new_pass") where user="root";<br/>>flush privileges; 注意点同上<br/><br/>4、重新杀 MySQL ，用正常方法启动 MySQL 。 <br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=mysql" rel="tag">mysql</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E5%25AF%2586%25E7%25A0%2581" rel="tag">密码</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?701</link>
<title><![CDATA[rsync在Windows和linux之间传输文件名乱码问题]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 05 Mar 2010 07:30:04 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?701</guid> 
<description>
<![CDATA[ 
	Rsync 介绍 <a href="http://selboo.com.cn/read.php?498" target="_blank">http://selboo.com.cn/read.php?498</a><br/><br/><strong>环境</strong><br/>Windows<br/>cwRsyncServer_4.0.3<br/><a href="http://sourceforge.net/projects/sereds/files/cwRsync/4.0.3/cwRsyncServer_4.0.3_Installer.zip" target="_blank">http://sourceforge.net/projects/sereds/files/cwRsync/4.0.3/cwRsyncServer_4.0.3_Installer.zip</a><br/><br/>Linux<br/>Rsync 3.0.7<br/><a href="http://www.samba.org/ftp/rsync/rsync-3.0.7.tar.gz" target="_blank">http://www.samba.org/ftp/rsync/rsync-3.0.7.tar.gz</a> <br/><br/><strong>Windows 配置</strong><br/><br/>在 rsyncd.conf 中添加 charset=UTF-8<br/><br/><strong>Linux 配置</strong><br/><br/>修改 /etc/sysconfig/i18n 文件为如下<br/>LANG="zh_CN"<br/>SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"<br/>SYSFONT="latarcyrheb-sun16"<br/>使配置生效：<br/>source /etc/sysconfig/i18n<br/><br/><strong>同步参数</strong><br/>rsync <span style="color: #FF0000;">--iconv=GBK,UTF-8 --protect-args</span> -vlzrpuDP --progress --delete --password-file=/rsync/rsync.passwd rsync@192.168.100.1::dome /dome/<br/>主要就是添加红色字段<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=rsync" rel="tag">rsync</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?700</link>
<title><![CDATA[十五款主流浏览器]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[资源共享]]></category>
<pubDate>Wed, 03 Mar 2010 16:02:06 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?700</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器大战硝烟四起，IE、Safari、Opera、GreenBrowser、Flock、世界之窗浏览器、搜狗浏览器、傲游Mathon、360浏览器、火狐中国版、谷歌Chrome、Avant Browser、Sleipnir、FlashPeak SlimBrowser、TT浏览器。<br/><br/><br/><br/><br/><br/><a href="http://www.morequick.com/DownloadGB.htm" target="_blank"><img src="http://selboo.com.cn/book/img/a/GreenBrowser.GIF" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GreenBrowser 是你最容易使用、灵活、高效、贴心的绿色浏览器！GreenBrowser 的下载和使用是完全免费的. 如果你认为 GreenBrowser 很不错, 欢迎你向更多的朋友和网友推荐 GreenBrowser！<br/><br/>　　广告过滤, 鼠标手势, 鼠标拖拽, 鼠标拖拽菜单, 自动填表, 自动滚屏, 自动刷新, 自动隐藏, 自动保存, 分类保存, 身份信息, 模拟按键, 网速监测, 搜索栏, 扩展工具栏, 收集器, 页面管理器, 下载管理器, 群组, 插件, 皮肤, 代理, 启动模式, 网址缩写, 一键通, 链接分析, 状态栏显示设置, 清除历史信息, 页面下载控制, 页面缩放, 页面背景色设置, 输入法控制, 快捷菜单, 快速拨号, 老板键, 自定义快捷键, 视频独立播放器...<br/><br/><a href="http://www.ioage.com/cn/download.htm" target="_blank"><img src="http://selboo.com.cn/book/img/a/TheWorld.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;世界之窗浏览器是一款小巧、快速、安全、功能强大的多窗口浏览器，它是完全免费，没有任何功能限制的绿色软件。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;世界之窗浏览器兼容微软IE浏览器，可运行于微软windows98/ME/2000/XP/Vista系列操作系统上，它使用IE浏览器相同的内核，因此网页显示效果可以与IE浏览器完全相同，推荐您同时安装IE6.0版或者更高的版本。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;世界之窗浏览器由凤凰工作室出品，它完全免费，没有任何功能限制，不捆绑任何第三方软件，可以干净卸载，请您放心使用。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不同于常见的其它IE内核浏览器，世界之窗浏览器使用C++和Win32 SDK开发，自行针对浏览器开发进行了代码库的封装，具有更扁平更透明的封装特性，功能实现的方法更加灵活快速；世界之窗2.0版本在积累了1.x系列版本的长期开发经验基础上，所有程序架构代码全部重写、所有浏览增强功能代码全部重写以追求更完美更优秀的软件品质。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;世界之窗是一款安全的绿色软件，可以完全卸载，绿色版只需删除软件目录即可。安装版需要进入：开始菜单→ 控制面板→ 添加删除程序→选择“世界之窗浏览器”然后卸载。<br/><br/><a href="http://www.avantbrowser.cn/download.html" target="_blank"><img src="http://selboo.com.cn/book/img/a/avant.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Avant 浏览器友好的用户界面为你的网络冲浪带来全新的效率和透明性。软件版本的不断升级使产品的可靠性稳步提高。Avant 浏览器是免费的吗? 对了! 100%免费! 不收取任何费用。 没有任何限制。 没有Adware广告病毒。 没有间谍软件。<br/><br/><a href="http://www.google.com/chrome/?hl=zh-CN" target="_blank"><img src="http://selboo.com.cn/book/img/a/chrome.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谷歌浏览器能以超快的速度运行网页和应用程序。 <br/><br/><a href="http://www.mozillaonline.com/products/firefox/" target="_blank"><img src="http://selboo.com.cn/book/img/a/firefox.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;屡获大奖的Firefox火狐浏览器拥有在安全、速度、用户交互等方面大量的软件特性，会改变您使用互联网的体验。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><a href="http://flock.com/" target="_blank"><img src="http://selboo.com.cn/book/img/a/flock.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.microsoft.com/china/windows/internet-explorer/" target="_blank"><img src="http://selboo.com.cn/book/img/a/ie.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.maxthon.cn/download.htm" target="_blank"><img src="http://selboo.com.cn/book/img/a/mathon.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.operachina.com/browser/" target="_blank"><img src="http://selboo.com.cn/book/img/a/opera.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.apple.com.cn/safari/" target="_blank"><img src="http://selboo.com.cn/book/img/a/safari.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://selboo.com.cn/book/img/a/sleipnir.gif" target="_blank"><img src="http://selboo.com.cn/book/img/a/sleipnir.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://selboo.com.cn/book/img/a/slimbrowser.png" target="_blank"><img src="http://selboo.com.cn/book/img/a/slimbrowser.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://ie.sogou.com/" target="_blank"><img src="http://selboo.com.cn/book/img/a/sogou_browser.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://tt.qq.com/" target="_blank"><img src="http://selboo.com.cn/book/img/a/tt.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%25B5%258F%25E8%25A7%2588%25E5%2599%25A8" rel="tag">浏览器</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?699</link>
<title><![CDATA[Xen 下安装 Linux]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 01 Mar 2010 10:29:19 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?699</guid> 
<description>
<![CDATA[ 
	用户手册 Xen v3.0 <a href="http://selboo.com.cn/book/Xen3man/" target="_blank">http://selboo.com.cn/book/Xen3man/</a><br/><br/>重建一个10G 硬盘<br/>[root@localhost ~]# dd if=/dev/zero of=/home/xenlinux/centos-xen bs=1M count=10240<br/><br/>开始安装<br/>[root@localhost boot]# virt-install <br/>What is the name of your virtual machine? centos&nbsp;&nbsp;&nbsp;&nbsp;// 名称<br/> How much RAM should be allocated (in megabytes)? 512&nbsp;&nbsp;// 内存<br/> What would you like to use as the disk (file path)? /home/xenlinux/centos-xen&nbsp;&nbsp;// 使用上面建立的文件<br/> Would you like to enable graphics support? (yes or no) no&nbsp;&nbsp;&nbsp;&nbsp;// 是否启动图形<br/> What is the install location? /iso/CentOS-5.3-x86_64-bin-DVD.iso&nbsp;&nbsp;// 安装镜像<br/><br/>在下一步就像平常安装linux 一样...<br/>安装完成之后会生成一个配置文件 /etc/xen/centos<br/><br/>[root@localhost ~]# xm list<br/>Name&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID Mem(MiB) VCPUs State&nbsp;&nbsp; Time(s)<br/>Domain-0&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;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 1228&nbsp;&nbsp;&nbsp;&nbsp; 8 r-----&nbsp;&nbsp;&nbsp;&nbsp; 47.2<br/>centos&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;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;511&nbsp;&nbsp;&nbsp;&nbsp; 1 -b----&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.5<br/><br/>简单一些调整<br/><br/>增加内存<br/>[root@localhost ~]# xm mem-set centos 512<br/><br/>重启 关机 开机<br/>[root@localhost ~]# xm reboot centos<br/>[root@localhost ~]# xm shutdown centos<br/>[root@localhost ~]# xm create centos<br/><br/>或着修改配置文件<br/>[root@localhost ~]# cat /etc/xen/centos<br/>name = "centos"<br/>uuid = "eba2a894-1c3f-e5f8-7da5-67148135076f"<br/># 设置内存<br/>maxmem = 512<br/>memory = 512<br/># 设置CPU<br/>vcpus = 2<br/>bootloader = "/usr/bin/pygrub"<br/>on_poweroff = "destroy"<br/>on_reboot = "restart"<br/>on_crash = "restart"<br/>vfb = [&nbsp;&nbsp;]<br/>disk = [ "tap:aio:/home/xenlinux/centos.img,xvda,w" ]<br/>vif = [ "mac=00:16:3e:30:5c:f8,bridge=xenbr0" ]<br/><br/>更多命令请查看帮助<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=xen" rel="tag">xen</a> , <a href="http://selboo.com.cn/tag.php?tag=centos" rel="tag">centos</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?698</link>
<title><![CDATA[Centos Xen 安装]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 01 Mar 2010 10:15:53 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?698</guid> 
<description>
<![CDATA[ 
	配置 yum <br/>[root@localhost kernels]# vi /etc/yum.repos.d/1.repo<br/>[centos]<br/>baseurl=file:///mnt<br/>enabled=1<br/><br/>修改 /etc/yum.conf 下的 gpgcheck=1&nbsp;&nbsp;为 gpgcheck=0<br/><br/>挂在镜像<br/>mount -o loop /iso/CentOS-5.3-x86_64-bin-DVD.iso /mnt/<br/><br/>安装 xen<br/>[root@localhost kernels]# yum install *xen*<br/><br/>修改 xen 内核为第一启动项<br/><br/>[root@localhost boot]# vi /boot/grub/grub.conf<br/><br/># grub.conf generated by anaconda<br/>#<br/># Note that you do not have to rerun grub after making changes to this file<br/># NOTICE:&nbsp;&nbsp;You have a /boot partition.&nbsp;&nbsp;This means that<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all kernel and initrd paths are relative to /boot/, eg.<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root (hd0,0)<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kernel /vmlinuz-version ro root=/dev/sda5<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initrd /initrd-version.img<br/>#boot=/dev/sda<br/>default=0<br/>timeout=5<br/>splashimage=(hd0,0)/grub/splash.xpm.gz<br/>hiddenmenu<br/>title CentOS (2.6.18-128.el5xen)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root (hd0,0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kernel /xen.gz-2.6.18-128.el5<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;module /vmlinuz-2.6.18-128.el5xen ro root=LABEL=/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;module /initrd-2.6.18-128.el5xen.img<br/>title CentOS (2.6.28)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root (hd0,0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kernel /vmlinuz-2.6.28 ro root=LABEL=/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initrd /initrd-2.6.28.img<br/>title CentOS (2.6.18-8.el5)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root (hd0,0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initrd /initrd-2.6.18-8.el5.img<br/><br/>重启系统<br/><br/>[root@localhost boot]# uname -a<br/>Linux localhost.localdomain 2.6.18-128.el5xen #1 SMP Wed Jan 21 11:12:42 EST 2009 x86_64 x86_64 x86_64 GNU/Linux<br/>[root@localhost boot]# xm list <br/>Name&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID Mem(MiB) VCPUs State&nbsp;&nbsp; Time(s)<br/>Domain-0&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;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 1484&nbsp;&nbsp;&nbsp;&nbsp; 8 r-----&nbsp;&nbsp;&nbsp;&nbsp; 15.0<br/><br/>安装成功<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=xen" rel="tag">xen</a> , <a href="http://selboo.com.cn/tag.php?tag=centos" rel="tag">centos</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?697</link>
<title><![CDATA[迷失 第六季]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[资源共享]]></category>
<pubDate>Thu, 25 Feb 2010 05:56:32 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?697</guid> 
<description>
<![CDATA[ 
	<a href="http://selboo.com.cn/book/img/a/201002251.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/a/201002251.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" align="left"/></a><br/><br/><br/><br/><strong>【简 介】</strong> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOST在本人眼里一直是现在GEEK一族的最爱，前一阵的10年最佳评选中，这部JJ创作的 “神秘科幻剧”被多个知名电影电视网站及博客评选为10年最佳剧情类电视剧，榜单里还有像“黑道家族”和“火线”这样的剧集，本剧主要围绕一架发生空难而坠毁于一座神秘岛的几个幸存者身上发生的事，自2004年开播，至本季大结局。起始为一部融合神秘，伦理的剧集，运用闪回的剧情来讲述各个角色在岛外的生活以及他们在岛上的改变，期间穿插岛上发生的各种奇怪迷离事件，包括北极熊以及“黑烟”的出没，以及首季结尾的人工舱门。后几季里迷失可以说正式成为了一部科幻剧，从达摩组织到岛上超自然的物理现象，第四季更是出现时空穿越以及对物理的扭曲。。。在结束的第五季里我们了解到这座岛其实和古埃及神话有很大的联系。迷失对于其庞大的角色阵容的描写绝对是超越一切电视剧的，加之对角色之间互动的描写，其深度和细节是无可比拟的。就与剧中这个与世隔绝的神秘岛一样，迷失这部剧可谓是与其他主流电视剧无论在叙事形式上还是人物描写上截然不同的，在这种“跟随者”多于”独立思考者“的社会里，迷失的存在价值就更为重要了，此季为本系列剧的终结季，本人在此希望迷失能有个合理且出人意料的结尾，也祝我们组能站好这最后一班岗。。。 <br/><br/><strong>【下载】</strong><br/>中英双字幕 <a href="http://yyets.net/showresource-juji-461.html" target="_blank">http://yyets.net/showresource-juji-461.html</a><br/><br/><strong>【播出表】</strong><br/>01.31 S06E00 Lost: Final Chapter【All-New Recap】<br/>02.02 S06E01-02 LA X 02.09 S06E03 What Kate Does【Kate】<br/>02.16 S06E04 The Substitute【Locke】<br/>02.23 S06E05 Lighthouse【Jack】<br/>03.02 S06E06 Sundown【Sayid】<br/>03.09 S06E07 Dr. Linus【Ben】<br/>03.16 S06E08 Recon【Sawyer?】<br/>03.23 S06E09 Ab Aeterno【Richard】<br/>03.30 S06E10 The Package【Jin/Sun】<br/>04.06 S06E11 Happily Ever After【Desmond】<br/>04.13 S06E12 Everybody Loves Hugo【Hurley】<br/>04.20 S06E13 TBA 04.27 S06E14 TBA 05.04 S06E15 TBA 05.11 S06E16 TBA【Series Finale Part. 1】<br/>05.18 S06E17-18 TBA【Series Finale Part. 2-3】<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E8%25BF%25B7%25E5%25A4%25B1" rel="tag">迷失</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E7%25BE%258E%25E5%2589%25A7" rel="tag">美剧</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?696</link>
<title><![CDATA[linux下用chkrootkit和rkhunter检查rootkit]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 25 Feb 2010 02:55:09 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?696</guid> 
<description>
<![CDATA[ 
	<strong>一 什么是rootkit</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个可以从名字上面看出来，就是得到root权限的工具，你可以把它理解成一组木马工具，它用自身替换掉我们在linux系统中原有的工具命令。比如:它替换掉ps这个命令后，当我们再执行ps时，它会把相应的偷偷运行的进程隐藏掉，让我们看不到木马的运行<br/><br/><strong>二 chkrootkit</strong><br/><br/>介绍 http://www.chkrootkit.org/<br/>下载 ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz<br/>解压后可直接运行<br/><br/>[root@done opt]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz<br/>[root@done opt]# cd chkrootkit-0.49/<br/>[root@done chkrootkit-0.49]# ./chkrootkit -h<br/>Usage: ./chkrootkit [options] [test ...]<br/>Options:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show this help and exit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show version information and exit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show available tests and exit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quiet mode<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expert mode<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-r dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use dir as the root directory<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-p dir1:dir2:dirN path for the external commands used by chkrootkit<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skip NFS mounted dirs<br/>[root@done chkrootkit-0.49]# ./chkrootkit <br/><br/><strong>三 rkhunter</strong><br/><br/>介绍 http://www.rootkit.nl/projects/rootkit_hunter.html<br/>下载 http://sourceforge.net/projects/rkhunter/<br/><br/>解压安装<br/>[root@done opt]# tar -zxvf rkhunter-1.3.6.tar.gz<br/>[root@done rkhunter-1.3.6]# ./installer.sh --install<br/>[root@done rkhunter-1.3.6]# ./installer.sh --show<br/>Install into:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local<br/>Application:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/bin<br/>Configuration file: /etc<br/>Documents:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/share/doc/rkhunter-1.3.6<br/>Man page:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/share/man/man8<br/>Scripts:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/lib/rkhunter/scripts<br/>Databases:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/lib/rkhunter/db<br/>Temporary files:&nbsp;&nbsp;&nbsp;&nbsp;/var/lib/rkhunter/tmp<br/><br/>[root@done rkhunter-1.3.6]# /usr/local/bin/rkhunter -c 
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?695</link>
<title><![CDATA[全球短信免费发V1.0]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[资源共享]]></category>
<pubDate>Mon, 22 Feb 2010 01:59:15 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?695</guid> 
<description>
<![CDATA[ 
	<a href="http://selboo.com.cn/book/img/a/201002221.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/a/201002221.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" align="left"/></a><br/><br/>　　此程序利用国外免费短信网站的接口制作。优点是无需注册，无需通过对方手机验证即可给全球任意一部手机发送短信。缺点就是不支持中文。E文好的可以发E文，E文不好的可以发拼音。没有什么太大的实用价值，大家闲来无事的时候发着玩吧，全当娱乐了。<br/><br/>Send Free SMS Worldwide<br/>Based on cloud computing technology, DegreeSMS is US's largest free sms service, which allows sms to be sent to any cell phone carrier via the web at no cost.<br/><br/>全球发送免费短信<br/>基于云计算技术，DegreeSMS是美国最大的免费短信服务，允许短信发送通过免费网站上的任何手机运营商。<br/>（以上为词霸自动翻译结果）<br/><br/>免责：由于程序是利用其他网站的接口制作，故随时有可能因为该网站变动而失效，因此而造成的后果作者概不负责。<br/><br/>下载：<a href="http://selboo.com.cn/book/soft/a/全球短信免费发1.0.rar" target="_blank">http://selboo.com.cn/book/soft/a/全球短信免费发1.0.rar</a><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E7%259F%25AD%25E4%25BF%25A1" rel="tag">短信</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?694</link>
<title><![CDATA[mysql 5.0存储过程学习]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Thu, 11 Feb 2010 07:45:55 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?694</guid> 
<description>
<![CDATA[ 
	<div class="entry"><br/>&nbsp;&nbsp;<div class="con_all"><br/><div style="text-align: center;"><br/><h1>mysql 5.0存储过程学习总结</h1><br/></div><br/><p><span style="font-weight: bold;">一.创建存储过程</span></p><br/><div style="margin-left: 40px;">1.基本语法：</p><br/><div style="margin-left: 40px;">create procedure sp_name()<br />begin<br />&#8230;&#8230;&#8230;<br />end</div><br/><p>2.参数传递</div><br/><p><span style="font-weight: bold;">二.调用存储过程</span></p><br/><div style="margin-left: 40px;">1.基本语法：call sp_name()<br />注意：存储过程名称后面必须加括号，哪怕该存储过程没有参数传递</div><br/><p><span style="font-weight: bold;">三.删除存储过程</span></p><br/><div style="margin-left: 40px;">1.基本语法：<br />drop procedure sp_name//<br />2.注意事项<br />(1)不能在一个存储过程中删除另一个存储过程，只能调用另一个存储过程</div><br/><p><span style="font-weight: bold;">四.区块，条件，循环<br /></span></p><br/><div style="margin-left: 40px;">1.区块定义，常用<br />begin<br />&#8230;&#8230;<br />end;<br />也可以给区块起别名，如：<br />lable:begin<br />&#8230;&#8230;&#8230;..<br />end lable;<br />可以用leave lable;跳出区块，执行区块以后的代码<br />2.条件语句</p><br/><div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;"><br/><div><img align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;条件&nbsp;</span><span style="color: rgb(0, 0, 255);">then</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />statement<br /><img align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br /><img align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />statement<br /><img align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" /></span><span style="color: rgb(0, 0, 255);">end</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">;</span></div><br/></div><br/><p>3.循环语句<br />(1).while循环</p><br/><div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;"><br/><div><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">label:</span><span style="color: rgb(255, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">WHILE</span><span style="color: rgb(0, 0, 0);">&nbsp;expression&nbsp;DO<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" />statements<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /></span><span style="color: rgb(0, 0, 255);">END</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">WHILE</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">label</span><span style="color: rgb(255, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /></span></div><br/></div><br/><p></div><br/><div style="margin-left: 40px;">(2).loop循环</p><br/><div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;"><br/><div><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">label:</span><span style="color: rgb(255, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">&nbsp;LOOP<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" />statements<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /></span><span style="color: rgb(0, 0, 255);">END</span><span style="color: rgb(0, 0, 0);">&nbsp;LOOP&nbsp;</span><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">label</span><span style="color: rgb(255, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">;</span></div><br/></div><br/><p></div><br/><div style="margin-left: 40px;">(3).repeat until循环</p><br/><div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;"><br/><div><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">label:</span><span style="color: rgb(255, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">&nbsp;REPEAT<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" />statements<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" />UNTIL&nbsp;expression<br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" /></span><span style="color: rgb(0, 0, 255);">END</span><span style="color: rgb(0, 0, 0);">&nbsp;REPEAT&nbsp;</span><span style="color: rgb(255, 0, 0);">[</span><span style="color: rgb(255, 0, 0);">label</span><span style="color: rgb(255, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">&nbsp;;</span></div><br/></div><br/><p></div><br/><p><span style="font-weight: bold;">五.其他常用命令</span></p><br/><div style="margin-left: 40px;">1.show procedure status<br />显示数据库中所有存储的存储过程基本信息，包括所属数据库，存储过程名称，创建时间等<br />2.show create procedure sp_name<br />显示某一个存储过程的详细信息</div><br/></p><br/></div><br/><p><span id="more-100"></span></p><br/><div class="con_sample"><br/><p>mysql存储过程中要用到的运算符</p><br/></div><br/><div class="con_all"><br/><div style="text-align: center;"><br/><h2>mysql存储过程学习总结－操作符</h2><br/></div><br/><p><strong>算术运算符</strong></p><br/><p style="margin-left: 40px;">+&nbsp;&nbsp;&nbsp;&nbsp; 加&nbsp;&nbsp; SET var1=2+2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br />-&nbsp;&nbsp;&nbsp;&nbsp; 减&nbsp;&nbsp; SET var2=3-2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;乘&nbsp;&nbsp; SET var3=3*2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6<br />/&nbsp;&nbsp;&nbsp;&nbsp; 除&nbsp;&nbsp; SET var4=10/3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.3333<br />DIV&nbsp;&nbsp; 整除&nbsp;SET var5=10 DIV 3;&nbsp; 3<br />%&nbsp;&nbsp;&nbsp;&nbsp; 取模&nbsp;SET var6=10%3 ;&nbsp;&nbsp;&nbsp;&nbsp; 1</p><br/><p><strong>比较运算符</strong></p><br/><div style="margin-left: 40px;">&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大于&nbsp;1&gt;2&nbsp;False<br />&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小于&nbsp;2&lt;1&nbsp;False<br />&lt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小于等于&nbsp;2&lt;=2&nbsp;True<br />&gt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大于等于&nbsp;3&gt;=2&nbsp;True<br />BETWEEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在两值之间&nbsp;5 BETWEEN 1 AND 10&nbsp;True<br />NOT BETWEEN&nbsp; 不在两值之间&nbsp;5 NOT BETWEEN 1 AND 10&nbsp;False<br />IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在集合中&nbsp;5 IN (1,2,3,4)&nbsp;False<br />NOT IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不在集合中&nbsp;5 NOT IN (1,2,3,4)&nbsp;True<br />=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等于&nbsp;2=3&nbsp;False<br />&lt;&gt;, !=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不等于&nbsp;2&lt;&gt;3&nbsp;False<br />&lt;=&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 严格比较两个NULL值是否相等&nbsp;NULL&lt;=&gt;NULL&nbsp;True<br />LIKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单模式匹配&nbsp;&quot;Guy Harrison&quot; LIKE &quot;Guy%&quot;&nbsp;True<br />REGEXP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正则式匹配&nbsp;&quot;Guy Harrison&quot; REGEXP &quot;[Gg]reg&quot;&nbsp;False<br />IS NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为空&nbsp;0 IS NULL&nbsp;False<br />IS NOT NULL&nbsp; 不为空&nbsp;0 IS NOT NULL&nbsp;True</div><br/><p><strong>逻辑运算符</strong></p><br/><p><strong>与</strong>(AND)</p><br/><table width="464" cellspacing="0" cellpadding="4" bordercolor="#000000" border="1"><br/>&nbsp;&nbsp;<col width="107"><br/>&nbsp;&nbsp;<col width="108"><br/>&nbsp;&nbsp;<col width="108"><br/>&nbsp;&nbsp;<col width="107"><br/>&nbsp;&nbsp;<thead><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">AND</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">TRUE</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">FALSE</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">NULL</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;</thead><br/>&nbsp;&nbsp;<tbody><br/>&nbsp;&nbsp;</tbody><br/></table><br/><p><strong>或(OR)</strong></p><br/><table width="464" cellspacing="0" cellpadding="4" bordercolor="#000000" border="1"><br/>&nbsp;&nbsp;<col width="107"><br/>&nbsp;&nbsp;<col width="108"><br/>&nbsp;&nbsp;<col width="108"><br/>&nbsp;&nbsp;<col width="107"><br/>&nbsp;&nbsp;<thead><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th width="107"> <p><font size="1">OR</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th width="108"> <p><font size="1">TRUE</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th width="108"> <p><font size="1">FALSE</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th width="107"> <p><font size="1">NULL</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;</thead><br/>&nbsp;&nbsp;<tbody><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="107"><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="108"><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="108"><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="107"><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="107"><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="108"><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="108"><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="107"><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="107"><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="108"><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="108"><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td width="107"><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;</tbody><br/></table><br/><p><strong>异或(XOR)</strong></p><br/><table width="464" cellspacing="0" cellpadding="4" bordercolor="#000000" border="1"><br/>&nbsp;&nbsp;<col width="107"><br/>&nbsp;&nbsp;<col width="108"><br/>&nbsp;&nbsp;<col width="108"><br/>&nbsp;&nbsp;<col width="107"><br/>&nbsp;&nbsp;<thead><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">XOR</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">TRUE</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">FALSE</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<th> <p><font size="1">NULL</font></p></th><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">TRUE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">FALSE</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;&nbsp;&nbsp;<tr valign="top"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><p align="left"><font size="1">NULL</font></p></td><br/>&nbsp;&nbsp;&nbsp;&nbsp;</tr><br/>&nbsp;&nbsp;</thead><br/>&nbsp;&nbsp;<tbody><br/>&nbsp;&nbsp;</tbody><br/></table><br/><p><strong>位运算符</strong></p><br/><p style="margin-left: 40px;">&#124;&nbsp;&nbsp; 位或<br />&amp;&nbsp;&nbsp; 位与<br />&lt;&lt;&nbsp; 左移位<br />&gt;&gt;&nbsp; 右移位<br />~&nbsp;&nbsp; 位非(单目运算，按位取反)</p><br/><p>&nbsp;</p></div><br/><div class="con_sample"><br/><p>mysq存储过程中常用的函数，字符串类型操作，数学类，日期时间类。</p><br/></div><br/><div class="con_all"><br/><div style="text-align: center;"><br/><h1>mysql存储过程基本函数</h1><br/></div><br/><p><span style="font-weight: bold;">一.字符串类</span>&nbsp;</p><br/><div style="margin-left: 40px;">CHARSET(str) //返回字串字符集<br />CONCAT (string2&nbsp; [,... ]) //连接字串<br />INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0<br />LCASE (string2 ) //转换成小写<br />LEFT (string2 ,length ) //从string2中的左边起取length个字符<br />LENGTH (string ) //string长度<br />LOAD_FILE (file_name ) //从文件读取内容<br />LOCATE (substring , string&nbsp; [,start_position ] ) 同INSTR,但可指定开始位置<br />LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length<br />LTRIM (string2 ) //去除前端空格<br />REPEAT (string2 ,count ) //重复count次<br />REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str<br />RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length<br />RTRIM (string2 ) //去除后端空格<br />STRCMP (string1 ,string2 ) //逐字符比较两字串大小,<br />SUBSTRING (str , position&nbsp; [,length ]) //从str的position开始,取length个字符,<br /><span style="color: rgb(255, 0, 0);">注：mysql中处理字符串时，默认第一个字符下标为1</span>，即参数position必须大于等于1</p><br/><div style="margin-left: 40px;">mysql&gt; select substring(&#8217;abcd&#8217;,0,2);<br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />&#124; substring(&#8217;abcd&#8217;,0,2) &#124;<br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />1 row in set (0.00 sec)</p><br/></div><br/><div style="margin-left: 40px;">mysql&gt; select substring(&#8217;abcd&#8217;,1,2);<br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />&#124; substring(&#8217;abcd&#8217;,1,2) &#124;<br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />&#124; ab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />1 row in set (0.02 sec)</div><br/><p>TRIM([[BOTH&#124;LEADING&#124;TRAILING] [padding] FROM]string2) //去除指定位置的指定字符<br />UCASE (string2 ) //转换成大写<br />RIGHT(string2,length) //取string2最后length个字符<br />SPACE(count) //生成count个空格&nbsp;</div><br/><p><span style="font-weight: bold;">二.数学类</span></p><br/><div style="margin-left: 40px;">ABS (number2 ) //绝对值<br />BIN (decimal_number ) //十进制转二进制<br />CEILING (number2 ) //向上取整<br />CONV(number2,from_base,to_base) //进制转换<br />FLOOR (number2 ) //向下取整<br />FORMAT (number,decimal_places ) //保留小数位数<br />HEX (DecimalNumber ) //转十六进制<br />注：HEX()中可传入字符串，则返回其ASC-11码，如HEX(&#8217;DEF&#8217;)返回4142143<br />也可以传入十进制整数，返回其十六进制编码，如HEX(25)返回19<br />LEAST (number , number2&nbsp; [,..]) //求最小值<br />MOD (numerator ,denominator ) //求余<br />POWER (number ,power ) //求指数<br />RAND([seed]) //随机数<br />ROUND (number&nbsp; [,decimals ]) //四舍五入,decimals为小数位数]</p><br/><div style="margin-left: 40px;">注：返回类型并非均为整数，如：<br />(1)默认变为整形值<br />mysql&gt; select round(1.23);<br />+&#8212;&#8212;&#8212;&#8212;-+<br />&#124; round(1.23) &#124;<br />+&#8212;&#8212;&#8212;&#8212;-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124;<br />+&#8212;&#8212;&#8212;&#8212;-+<br />1 row in set (0.00 sec)</p><br/><p>mysql&gt; select round(1.56);<br />+&#8212;&#8212;&#8212;&#8212;-+<br />&#124; round(1.56) &#124;<br />+&#8212;&#8212;&#8212;&#8212;-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 &#124;<br />+&#8212;&#8212;&#8212;&#8212;-+<br />1 row in set (0.00 sec)</p><br/><p><span style="color: rgb(255, 0, 0);">(2)可以设定小数位数，返回浮点型数据</span><br />mysql&gt; select round(1.567,2);<br />+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />&#124; round(1.567,2) &#124;<br />+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.57 &#124;<br />+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />1 row in set (0.00 sec)</div><br/><p>SIGN (number2 ) //返回符号,正负或0<br />SQRT(number2) //开平方</div><br/><p>&nbsp;<br /><span style="font-weight: bold;">三.日期时间类</span><br />&nbsp;</p><br/><div style="margin-left: 40px;">ADDTIME (date2 ,time_interval ) //将time_interval加到date2<br />CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区<br />CURRENT_DATE (&nbsp; ) //当前日期<br />CURRENT_TIME (&nbsp; ) //当前时间<br />CURRENT_TIMESTAMP (&nbsp; ) //当前时间戳<br />DATE (datetime ) //返回datetime的日期部分<br />DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间<br />DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime<br />DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间<br />DATEDIFF (date1 ,date2 ) //两个日期差<br />DAY (date ) //返回日期的天<br />DAYNAME (date ) //英文星期<br />DAYOFWEEK (date ) //星期(1-7) ,1为星期天<br />DAYOFYEAR (date ) //一年中的第几天<br />EXTRACT (interval_name&nbsp; FROM date ) //从date中提取日期的指定部分<br />MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串<br />MAKETIME (hour ,minute ,second ) //生成时间串<br />MONTHNAME (date ) //英文月份名<br />NOW (&nbsp; ) //当前时间<br />SEC_TO_TIME (seconds ) //秒数转成时间<br />STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示<br />TIMEDIFF (datetime1 ,datetime2 ) //两个时间差<br />TIME_TO_SEC (time ) //时间转秒数]<br />WEEK (date_time [,start_of_week ]) //第几周<br />YEAR (datetime ) //年份<br />DAYOFMONTH(datetime) //月的第几天<br />HOUR(datetime) //小时<br />LAST_DAY(date) //date的月的最后日期<br />MICROSECOND(datetime) //微秒<br />MONTH(datetime) //月<br />MINUTE(datetime) //分</div><br/><p>附:可用在INTERVAL中的类型<br /><br/>&nbsp;&nbsp;DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR&nbsp;</p><br/></div><br/><br/></div>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?693</link>
<title><![CDATA[MySQL Show命令]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Wed, 10 Feb 2010 02:27:37 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?693</guid> 
<description>
<![CDATA[ 
	查看mysql 存储过程<br/>show procedure status; <br/><br/>show tables或show tables from database_name;<br/>解释：显示当前数据库中所有表的名称<br/><br/>show databases;<br/>解释：显示mysql中所有数据库的名称<br/><br/>show processlist;<br/>解释：显示系统中正在运行的所有进程，也就是当前正在执行的查询。大多数用户可以查看<br/>他们自己的进程，但是如果他们拥有process权限，就可以查看所有人的进程，包括密码。<br/><br/>show table status;<br/>解释：显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间<br/><br/><br/>show columns from table_name from database_name; 或show columns from database_name.table_name;<br/>解释：显示表中列名称<br/><br/>show grants for user_name@localhost;<br/>解释：显示一个用户的权限，显示结果类似于grant 命令<br/><br/>show index from table_name;<br/>解释：显示表的索引<br/><br/>show status;<br/>解释：显示一些系统特定资源的信息，例如，正在运行的线程数量<br/><br/>show variables;<br/>解释：显示系统变量的名称和值<br/><br/>show privileges;<br/>解释：显示服务器所支持的不同权限<br/><br/>show create database database_name;<br/>解释：显示create database 语句是否能够创建指定的数据库<br/><br/>show create table table_name;<br/>解释：显示create database 语句是否能够创建指定的数据库<br/><br/>show engies;<br/>解释：显示安装以后可用的存储引擎和默认引擎。<br/><br/>show innodb status;<br/>解释：显示innoDB存储引擎的状态<br/><br/>show logs;<br/>解释：显示BDB存储引擎的日志<br/><br/>show warnings;<br/>解释：显示最后一个执行的语句所产生的错误、警告和通知<br/><br/>show errors;<br/>解释：只显示最后一个执行语句所产生的错误<br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=mysql" rel="tag">mysql</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E5%2591%25BD%25E4%25BB%25A4" rel="tag">命令</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?692</link>
<title><![CDATA[优化ext2/ext3文件系统]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sun, 07 Feb 2010 10:10:42 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?692</guid> 
<description>
<![CDATA[ 
	一、块大小的优化 <br/><br/>块意为最小的存储单位<br/>假设：Block size 1K<br/>每个分区被格式化后，都会创建很多块<br/>如果一个文件有4K，要使用4个块<br/>即使一个块不到1K，但也会使用1个块<br/>假设：Block size 4K<br/>如果一个文件有4K，只使用1个块<br/>即使一个块不到4K，也会使用1个块，直到填满才使用下一个块<br/><br/>这样我们就可以看到一个现象，如果你的文件很大，而数据块很小，这个文件就会被分割成很小的很多块，这样分割的时间和寻址的时间都会花费比较多的时间，相反如果数据块大点就会减少相应的时间！但并非块越大越好！如果你的块大小4K，而你的文件只有1K，这样就会浪费3/4的空间，这样就要根据时间情况来判断。<br/><br/>Mkfs.ext3 –b 1024 /dev/sdb2<br/>每个数据块大小为1024个字节<br/>如果要增加数据块的大小<br/><br/>Mkfs.ext3 –b 4096 /dev/sdb2<br/><br/>（-b 后面的大小默认只有1024，2048，4096）<br/><br/>二、节点块的优化<br/><br/>在我们读写数据的时候，所有的数据都要写进数据块里面，在数据块寻址的时候都是根据数据块的编号来找的，假设有4个数据块分别为1，2，3，4，如果一个文件file1占用了1，2两个数据块，那么会在索引区里分配2个节点，当读取file1的时候就会读取2个节点，如果我们把2个数据块合并一起，就可以提高读取速度，file1只需要寻一次址就可以了。<br/><br/>- i 表示节点使用多大的数据块<br/><br/>Mkfs.ext3 –b 4096 - i 8192 /dev/sdb2<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每一个数据块代表4096，每2个数据块编一个号，4096*2=8192这样可以对大文件寻址的速度加快或者<br/>Mkfs.ext3 –b 4096 - i 4096 /dev/sdb2<br/><br/>一个数据块编一个号<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 实例对比可以使用tune2fs –l /dev/sdb2 &#124;more 查看Inode count节点的编号，Block count块的编号，看看2种命令的区别。<br/><br/>三、保留块的优化<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保留块-为管理员保留的磁盘管理空间，默认为总数据块的5%，而且这部分空间只能管理员占有。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用：Mkfs.ext3 –b 4096 - i 8192 –m 2 /dev/sdb2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置保留块的数量占总数的百分比为2<br/><br/>举例比较：<br/><br/>Mkfs.ext3 –b 4096 - i 8192 –m 5 /dev/sdb2<br/>Mkfs.ext3 –b 4096 - i 8192 –m 2 /dev/sdb2<br/><br/>使用tune2fs –l /dev/sdb2<br/><br/>查看 reserved block count:数量的不同<br/><br/>这样对于大硬盘空间的使用会节约很大一部分空间（3%）<br/><br/><br/>四、tune2fs 调整ext2/ext3文件系统特性的工具<br/><br/>-l 〈device> 查看文件系统信息<br/><br/>-c <count>设置强制自检的挂载次数<br/><br/>使用tune2fs –l /dev/sdb2查看maximum mount count 默认是27次，每挂载一次mount conut就会加1，超过次数就会强制自检<br/><br/>使用tune2fs –c -1 /dev/sdb2<br/><br/>设置负1就可以避免<br/><br/>当然也可以手动自检，使用fsck -I <n day>设置强制自检的间隔时间<br/>使用tune2fs –l /dev/sdb2查看check interval 默认是6months<br/><br/>使用tune2fs –c -1 -i 0 /dev/sdb2<br/><br/>设置为0<br/><br/>-m <percentage>保留块的百分比<br/><br/>-j 将ext2 文件转换为ext3格式<br/><br/>不会破坏文件数据的格式转换命令参数。<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%2596%2587%25E4%25BB%25B6%25E7%25B3%25BB%25E7%25BB%259F" rel="tag">文件系统</a> , <a href="http://selboo.com.cn/tag.php?tag=ext2" rel="tag">ext2</a> , <a href="http://selboo.com.cn/tag.php?tag=ext3" rel="tag">ext3</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E4%25BC%2598%25E5%258C%2596" rel="tag">优化</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?691</link>
<title><![CDATA[Linux下PHP支持MSSQL]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sun, 07 Feb 2010 09:21:21 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?691</guid> 
<description>
<![CDATA[ 
	Linux下使PHP支持MSSQL(SQL Server)，需要先安装FreeTDS。<br/>PHP官方网站：http://www.php.net 当前版本5.26<br/>FreeTDS官方网站：http://www.freetds.org 当前版本0.82<br/><br/>1. 编译FreeTDS<br/><br/>下载FreeTDS并解压，进入该目录。<br/>./configure --prefix=/usr/local/freetds --with-tdsver=8.0 <br/>make<br/>make install<br/><br/>2. 编译PHP<br/><br/>使PHP支持MSSQL，可以使用两种方式，一种是直接编译进PHP，一种是编译成PHP可载入的模块。如果还没有编译安装PHP，建议使用前一种方式，因为这样PHP的执行速度快。如果已经安装了PHP，又嫌重新编译PHP麻烦，用后一种方式吧。<br/><br/>(1) 编译进PHP<br/><br/>要增加对MSSQL的支持，只要在编译参数上加上--with-mssql=/usr/local/freetds即可。<br/><br/>(2) 编译成模块<br/><br/>cd /path/to/php/source 进入PHP源码目录<br/>cd ext/mssql 进入MSSQL模块源码目录<br/>/usr/local/php/bin/phpize 生成编译配置文件<br/>./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds<br/>make<br/>make install<br/>编译完成生成mssql.so，修改php.ini，将该模块载入：<br/>extension="/path/to/extension/mssql.so"<br/><br/>测试<br/><br/><div class="code">&lt;?php<br/>phpinfo();<br/>?&gt;</div><br/>搜索 mssql<br/><br/><div class="code">&lt;?php<br/>mssql_connect(&quot;192.168.2.234&quot;,&quot;satest&quot;,&quot;123321&quot;) or die(&quot;no&quot;);<br/>echo &quot;ok&quot;;<br/>?&gt;</div><br/>显示 ok 证明连接完成<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=php" rel="tag">php</a> , <a href="http://selboo.com.cn/tag.php?tag=mssql" rel="tag">mssql</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?690</link>
<title><![CDATA[PHP脚本/页面执行时间类]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[程序开发]]></category>
<pubDate>Fri, 05 Feb 2010 17:28:11 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?690</guid> 
<description>
<![CDATA[ 
	计算脚本/页面执行时间的类，贴出来希望对有些朋友有用。<br/><br/><div class="code">class processtime &#123;<br/>&nbsp;&nbsp;var $starttime, $endtime;<br/>&nbsp;&nbsp;function start() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;starttime = $this-&gt;nowtime();<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;function end() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;endtime = $this-&gt;nowtime();<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;function elapsed() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$processtime = $this-&gt;endtime - $this-&gt;starttime;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return number_format($processtime, 7);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;function nowtime() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$now = explode(&quot; &quot;, microtime());<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $now&#91;1&#93; + $now&#91;0&#93;;<br/>&nbsp;&nbsp;&#125;<br/>&#125;</div><br/>==== 使用方法 ====<br/>在脚本/页面开始处创建一个实例:<br/><br/><div class="code">$itime = new processtime;</div><br/>在脚本/页面开始和结束处分别调用start()和end()方法:<br/><br/><div class="code">$itime-&gt;start();<br/>/*<br/>SOME CODE HERE<br/>*/<br/>$itime-&gt;end();</div><br/>在需要显示的位置调用elapsed()方法:<br/><br/><div class="code">echo &#039;Processed in &#039;.$itime-&gt;elapsed().&#039; second(s).&#039;;</div><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=php" rel="tag">php</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E7%25B1%25BB" rel="tag">类</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?689</link>
<title><![CDATA[PHP文件上传大文件错误的解决办法]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[程序开发]]></category>
<pubDate>Fri, 05 Feb 2010 17:25:11 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?689</guid> 
<description>
<![CDATA[ 
	默认的PHP配置文件对文件上传大小限制值较小，第一个设置的值便是upload_max_filesize，默认为2M，将其设置大一点。<br/><br/>允许上传的文件大了，对于大文件上传时间相应也就大了，默认的30秒脚本超时时间也显得小了，这就需要设置max_execution_time，将其默认值30（秒）改大点。<br/><br/>设置了这两项后有时候还会发现对于没有超过upload_max_filesize的大文件也上传不了，PHP也没有给出错误提示[1]。这是由于POST数据超过了最大POST数据值post_max_size，默认为8M，也设置大一点。<br/><br/>综上，修改php.ini文件的三个值：<br/>max_execution_time = 30<br/>post_max_size = 8M<br/>upload_max_filesize = 2M<br/><br/>重启Web Server，OK！<br/><br/>[1]有些时候出现错误但是没有给出提示怎么办呢？可以吧PHP的日志文件打开，查看日志就可以了。<br/>将日志写入指定文件：<br/>error_log = "/path/to/error.log"<br/>如果是Windows系统，还可以将日志写入系统日志：<br/>error_log = syslog<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=php" rel="tag">php</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E9%2594%2599%25E8%25AF%25AF" rel="tag">错误</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?688</link>
<title><![CDATA[Route-Views看看全球路由表]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Tue, 02 Feb 2010 03:38:55 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?688</guid> 
<description>
<![CDATA[ 
	IPv4的地址数目高达40亿个，去除了部分私有的和保留的IP地址后，互联网上可能出现的公有地址数量依然相当可观（虽然这些地址仍然不够用），在经过汇总和合理的分配之后，互联网上的路由条目仍然有接近30万条！运行在互联网上的路由器为了可以选择最佳的路径达到全球目的地，有必要接收大部分甚至所有的路由条目，想必很多人会对这个包含全球路由的BGP路由表深感兴趣吧？Let‘s check it out！ <br/>1.打开SecureCRT或者Putty甚至系统自带的telnet程序（不建议用系统自带的）<br/><br/>2.telnet 这个地址：route-server.ip.att.net<br/><br/>3.接着就会收到一些欢迎信息，和提示要求输入用户名，输入rviews<br/><br/>4.这里已经进入了路由器的用户模式，我们可以执行一些很基础的产看命令，如：show ip route&nbsp;&nbsp;show version 等。要查看路由表，只需输入show ip route，密密麻麻的路由前缀就会出现，用空格键翻页，回车键逐行显示，或者任意字符中断显示。命令我不多写，大家打“？”号查一下吧。<br/><br/>上面的这个路由器是属于美国AT&T的，是一个cisco的7206VXR路由器，配备NPE-G1引擎，有3个千兆口，它与AT&T的IP服务骨干网里的路由器建立了eBGP关系。它的BGP路由表上面有超过30万条前缀！550多万条路径！单单存储这些前缀和路径就用去了300多兆内存，这还不包括前缀中的一些路径属性！整个BGP占用了差不多400M的内存。<br/><br/>这里还有一个可供查看的：route-views3.routeviews.org/ 也是Cisco 7200 不过引擎更强，是NPE-G2的！<br/><br/><a href="http://www.routeviews.org/" target="_blank">Route-views</a>是一个计划，它的目的是方便网络工程师查看和获得实时的全球路由系统信息，你所访问的可能并不是真正的路由器，可能是透过route-views来间接取得的。<br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E8%25B7%25AF%25E7%2594%25B1" rel="tag">路由</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?687</link>
<title><![CDATA[NTFS 下的硬链接(hard link)与软链接(symbolic link)]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Tue, 02 Feb 2010 03:18:43 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?687</guid> 
<description>
<![CDATA[ 
	在 Linux 使用的 ext2 等文件系统里,都有 hard link 与 symbolic link 的功能,这个功能简单的说就是让我们可以用多个路径去访问同一个文件或者目录.比如说让 /vmlinuz 和 /boot/vmlinuz-2.6.7-1-38 表示的是同一个文件.但 hard link 和 symbolic link 还是有区别的(废话).<br/><br/>Hard link 表示,它和原文件名指向的是存储设备上同一个文件内容.就好像这个文件内容有多个文件名一样,每个文件名有相等地位.删除其中任何一个之后,事实上文件内容并不会被删除掉,仍然可以用其他的名称来访问这个文件.只有当最后一个指向这个文件内容的文件名被删除掉之后,文件内容才被删除.也就是说,一个文件的 hard link 跟此文件本来的名称并没有任何本质上的区别.需要注意的是,因为每个分区(partition)上都可能有相同的存储位置地址,所以 hard link 必须跟被 link 的文件在同一个分区上.另外,目录不支持 hard link. Symbolic link 也称 soft link,它类似于 Windows 里的快捷方式 .lnk 文件.它本身是一个单独的文件,而这个文件的内容是它所指向的文件的路径.一般的程序存取 symbolic link 时存取的并不是它本身的内容,而是它所指向的文件的内容.当某个文件被删除掉后,它的 symbolic link 就无法存取到这个文件了,因为文件本身已经被删除了.也就是说,一个文件的 symbolic link 跟此文件的文件名或者内容都是完全不同的两个东西.Symbolic link 可以链接任何本地可以访问到的文件或者目录路径.<br/><br/>以上这些是我对 hard link 和 symbolic link 的理解,我试图用跟文件系统无关和尽量通俗易懂的语言来解释这两个概念.但如果你是一个软件开发者或者系统管理员或者仅仅是想知道更详细的东西,强烈建议你去看看这个帖子.<br/><br/>OK,概念解释清楚了.那么,NTFS 3.0 (Windows 2000 使用的 NTFS 的版本)事实上是支持 hard link 和 symbolic link 的,虽然 Windows 里没有比较容易使用的相关工具,而且 Explorer 对待 symbolic link 也有很奇怪的行为.<br/><br/>在 Windows 2000 及以上版本里可以使用 fsutil hardlink create 这个复杂的命令来创建一个 hard link,用法倒是很简单:<br/><br/>fsutil hardlink create <新文件名> <现有文件名><br/>也可以使用 GNU utilities for Win32 中的 ln 来创建 hard link.这是一些 GNU 工具的 Win32 移植版本,非常好用.另外 Cygwin 里的 ln 不但可以创建 hard link 也可以创建 symbolic link (在 Windows 里就是快捷方式 .lnk 文件).<br/><br/>当然,如果你想在自己的程序里创建 hard link,那也是很容易的,只需要一个很简单的 API 函数:<br/><br/>BOOL CreateHardLink(<br/>&nbsp;&nbsp;LPCTSTR lpFileName,<br/>&nbsp;&nbsp;LPCTSTR lpExistingFileName,<br/>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES lpSecurityAttributes<br/>);<br/><br/>前两个参数的意思就不用解释了,最后一个参数的用途暂时保留,必须为 NULL.<br/><br/>对于 symbolic link,NTFS 只支持对目录的 symbolic link,微软把它称作 junction.但是对于文件的 symbolic link,微软也有提供解决方案,那就是快捷方式(Shortcut,.lnk 文件).不过 symbolic link 和快捷方式不是一个层次上的东西,前者是底层文件系统的功能,后者是应用层的功能.<br/><br/>在“管理工具”中的“计算机管理”里的“磁盘管理”里我们可以将一个卷装载到一个 NTFS 卷上的某个空目录里,这实际上就是为被装载卷的根目录建立一个以该空目录名为名的 symbolic link.也可以用命令行工具 MOUNTVOL 来完成这项工作.<br/><br/>遗憾的是 Windows 并没有提供对 NTFS 的 symbolic link 完整支持的工具.“计算机管理”或者 MOUNTVOL 只能对某个卷的根目录创建 symbolic link,而不是对任意目录.幸运的是我们可以使用 Sysinternals 提供的带有源代码的免费命令行工具 junction.exe 来全功能的完成对 NTFS symbolic link 的管理.当然,微软也还不至于太莫名其妙,它在 Windwos 2000 Resource Kit 里提供了一个命令行工具 linkd.exe 来完成这件事.不过它的查看 symbolic link 信息的功能不如 junction,因为不支持通配符和子目录扫描.<br/><br/>需要注意的是,Explorer 对待 symbolic link 有一个很奇怪的行为.那就是,在 Explorer 里一个 symbolic link 跟被它 link 的目录没有区别,删除这个 symbolic link 将会删除被 link 的目录下的所有文件！而著名的强大的方便的扩展性强的(原谅我在这里用了这么多修饰词,我确实太喜欢 TC 了.)文件管理工具 Total Commander 则没有这个问题.<br/><br/>文中的某些基本概念和知识来源于以下两个页面:<br/>http://answers.google.com/answers/threadview?id=341355<br/>http://phorum.study-area.org/viewtopic.php?t=12235<br/><br/>感谢提供这两个页面内容的各位.<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=ntfs" rel="tag">ntfs</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E9%2593%25BE%25E6%258E%25A5" rel="tag">链接</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?686</link>
<title><![CDATA[两个傻子的爱情故事]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[想说就说]]></category>
<pubDate>Sat, 30 Jan 2010 14:12:18 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?686</guid> 
<description>
<![CDATA[ 
	<embed src="http://player.youku.com/player.php/sid/375378/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed><br/> <br/>　　有这样的一个爱情故事，故事的主角是两个傻瓜。<br/><br/>　　两个人本来不认识，他们一个天南，一个地北。家里人嫌他们傻，都抛弃了她们，任他们四处流浪。男的从南往北走，女的从北往南走，流浪，流浪……。男的以前并不傻，而是因为在工地上干建筑的时候被砖砸中了头，从那以后就傻了。女的以前也不傻，考大学的时候她考了全市第一名，然而她的名字却被一个有钱人给顶替了，从那以后女的就不再说话，不再理自己的父母，后来也傻了。<br/><br/>　　不知道走了多长的时间，男的身上的那身衣服变的肮脏不堪，鞋子也露出了那漆黑的脚指头。女的身上那身红衣服已经变成了灰色，散乱的头发上还有几根枯黄的杂草，但是脸还是白的，出奇的白，手里拿着一个矿泉水瓶，冲着路人们傻笑。两个人是在一个黄昏相遇的，他们共同发现了垃圾桶里的那块发了霉的面包，一同身手去抓那个面包，两个人的头碰到了一起，男的冲女的狠狠地瞪了一眼，女的冲男的傻笑。男的还是胜利了，他抢到了面包，张开那黑紫色的嘴狠狠的咬了一口，女的没有动，只是傻傻地看着男的，傻傻地。男的看了一眼女的，眼神中没有一点光，女的只是看他，喉咙里不停的咽着唾沫，男的停止了啃面包，开始看着女的，傻傻地盯着，两个傻子就这样看着，男的没有表情，女的傻笑。男的把面包给了女的，男的竟然把面包给了女的，女的也抱着那剩下的半块干面包啃了起来。男的转身走了，没有回头，当他回到自己睡觉的那个废厂房的时候，转身看到了女的，女的一直跟着他，一直跟到了这里，女的还是冲男的傻笑，她们不说一句话，女的便跟傻子住在一起了，晚上睡觉的时候，男的感觉身上很温暖，从来没有过的，女的一直搂着男的，女的睡觉时候很死，睡觉的样子真的不像个傻子。<br/><br/>　　两个傻子就这样住到了一起，白天两个人一起去大街上拣东西填饱肚子，晚上就一起回来睡觉，日子就这样一天天过去了。那天晚上男的不知道是在哪拣了一个戒指，生了绿锈的戒指，男的给女的带上了，女的一直冲男的傻笑，那晚笑的更是厉害，女的的笑声撕裂了整个安静的夜。后来笑出了泪，女的哭了，第一次哭了，搂着男的哭了，不明不白的哭了。男的好像无动于衷，脸上依然是没有表情。<br/><br/>　　后来女的病了，从来没生过病的女的病了，而且很严重，早晨她没有起来陪男的一起去拣吃的，没有冲男的笑，男的自己出去了，中午男的竟然例外的回来了，手里拿着一瓶新的矿泉水和一个新的面包，他是回来看女的的，男的脸上挂了伤，手指头也青了，鼻子下面还有两道血痕。男的是在抢面包和矿泉水的时候被小摊的老板打的。女的闭着眼睛，还是没有像往常一样冲男的傻笑。男的把面包送到女的嘴边，女的没有吃。女的快不行了，身上发着高烧，已经昏迷了，男的脸上头一次有了表情，慌乱的表情，男的跑了出去，看见一身穿绿警服的人就哭了起来，男的哭了，也是第一次哭了，嘴里喊着：救救我的女人，救救她。绿军装一脚踹开了男的，骂道：滚一边去，疯子，我他妈真倒霉，出门这么不顺呢！男的仰面倒在了地上，绿警服狠狠地朝男的小肚子踹了几脚，男的撒了手，绿警服朝男的吐了口吐沫，走了！男的好久才从地上爬起来，脸上的泪已经干了。<br/><br/>　　男的把女的背到了街上，街上人很多，但没人注意他们，注意的也只是冷冷地瞅几眼，然后继续赶自己的路。傻子把女的放在路边上，无助的看着行人。女的呼吸已经很微弱了，傻子从路边拣了一个破玻璃片，破玻璃片有着锋利的尖，露着寒光，男的抬起女的那瘦弱脏兮兮的手臂，朝她的手腕狠狠地割了下去，血喷了傻子一脸，傻子大笑，狂喊：“哈哈，我杀人了，你们看我杀人了……”救护车终于来了，女的被抬走了，围观的人们唾弃着男的，骂着男的，然后都散去了。女的最终还是死了，失血过多，女的在医院还没呆上一个小时就被抬进了停尸间，女人走的时候脸上的表情是笑着的，手指上还戴着那长满铜锈的戒指。男的等了好长好长时间，女的再也没有回来，没有回来冲他傻笑，男的哭了，哭的那样痛快，整个夜晚都被男的的哭声掩盖了，然而谁也没有注意到这哭声。<br/><br/>　　还是在那个他们相遇的那个垃圾桶旁边，人们发现了男的的尸体，男的脸上的笑容已经僵住了，怀里抱着一个发了霉的面包和一个没有开瓶的矿泉水......<br/> <br/>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?685</link>
<title><![CDATA[HTTP请求模型和头信息]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Tue, 26 Jan 2010 16:12:36 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?685</guid> 
<description>
<![CDATA[ 
	参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx<br/>模型: http://blog.csdn.net/baggio785/archive/2006/04/13/661412.aspx<br/><br/><br/>HTTP请求模型<br/><br/>一、连接至Web服务器<br/>一个客户端应用（如Web浏览器）打开到Web服务器的HTTP端口的一个套接字（缺省为80）。<br/><br/>例如：http://www.myweb.com:8080/index.html<br/>在Java中，这将等同于代码：<br/>Soceet socket=new Socket(“www.myweb.com”,8080);<br/>InputStream in=socket.getInputStream();<br/>OutputStream out=socket.getOutputStream();<br/><br/>二、发送HTTP请求<br/>通过连接，客户端写一个ASCII文本请求行，后跟0或多个HTTP头标，一个空行和实现请求的任意数据。<br/>一个请求由四个部分组成：请求行、请求头标、空行和请求数据<br/>1.请求行：请求行由三个标记组成：请求方法、请求URI和HTTP版本，它们用空格分隔。<br/>例如：GET /index.html HTTP/1.1<br/>HTTP规范定义了8种可能的请求方法：<br/>GET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;检索URI中标识资源的一个简单请求<br/>HEAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与GET方法相同，服务器只返回状态行和头标，并不返回请求文档<br/>POST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器接受被写入客户端输出流中的数据的请求<br/>PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器保存请求数据作为指定URI新内容的请求<br/>DELETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器删除URI中命名的资源的请求<br/>OPTIONS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于服务器支持的请求方法信息的请求<br/>TRACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Web服务器反馈Http请求和其头标的请求<br/>CONNECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已文档化但当前未实现的一个方法，预留做隧道处理<br/>2.请求头标：由关键字/值对组成，每行一对，关键字和值用冒号（:）分隔。<br/>请求头标通知服务器有关于客户端的功能和标识，典型的请求头标有：<br/>User-Agent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户端厂家和版本<br/>Accept&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户端可识别的内容类型列表<br/>Content-Length&nbsp;&nbsp;&nbsp;&nbsp;附加到请求的数据字节数<br/>3.空行：最后一个请求头标之后是一个空行，发送回车符和退行，通知服务器以下不再有头标。<br/>4.请求数据：使用POST传送数据，最常使用的是Content-Type和Content-Length头标。<br/><br/>三、服务端接受请求并返回HTTP响应<br/>Web服务器解析请求，定位指定资源。服务器将资源副本写至套接字，在此处由客户端读取。<br/>一个响应由四个部分组成；状态行、响应头标、空行、响应数据<br/>1.状态行：状态行由三个标记组成：HTTP版本、响应代码和响应描述。<br/>HTTP版本：向客户端指明其可理解的最高版本。<br/>响应代码：3位的数字代码，指出请求的成功或失败，如果失败则指出原因。<br/>响应描述：为响应代码的可读性解释。<br/>例如：HTTP/1.1 200 OK<br/>HTTP响应码：<br/>1xx：信息，请求收到，继续处理<br/>2xx：成功，行为被成功地接受、理解和采纳<br/>3xx：重定向，为了完成请求，必须进一步执行的动作<br/>4xx：客户端错误：<br/>2.响应头标：像请求头标一样，它们指出服务器的功能，标识出响应数据的细节。<br/>3.空行：最后一个响应头标之后是一个空行，发送回车符和退行，表明服务器以下不再有头标。<br/>4.响应数据：HTML文档和图像等，也就是HTML本身。<br/><br/>四、服务器关闭连接，浏览器解析响应<br/>1.浏览器首先解析状态行，查看表明请求是否成功的状态代码。<br/>2.然后解析每一个响应头标，头标告知以下为若干字节的HTML。<br/>3.读取响应数据HTML，根据HTML的语法和语义对其进行格式化，并在浏览器窗口中显示它。<br/>4.一个HTML文档可能包含其它需要被载入的资源引用，浏览器识别这些引用，对其它的资源再进行额外的请求，此过程循环多次。<br/><br/>五、无状态连接<br/>HTTP模型是无状态的，表明在处理一个请求时，Web服务器并不记住来自同一客户端的请求。<br/><br/>六、实例<br/>1.浏览器发出请求<br/>GET /index.html HTTP/1.1<br/>服务器返回响应<br/>HTTP /1.1 200 OK<br/>Date: Apr 11 2006 15:32:08 GMT<br/>Server: Apache/2.0.46(win32)<br/>Content-Length: 119<br/>Content-Type: text/html<br/><br/><HTML><br/><HEAD><br/><LINK REL=”stylesheet” HREF=”index.css”><br/></HEAD><br/><BODY><br/><IMG SRC=”image/logo.png”><br/></BODY><br/></HTML><br/><br/>2.浏览器发出请求<br/>GET /index.css HTTP/1.1<br/>服务器返回响应<br/>HTTP /1.1 200 OK<br/>Date: Apr 11 2006 15:32:08 GMT<br/>Server: Apache/2.0.46(win32)<br/>Connection: Keep-alive, close<br/>Content-Length: 70<br/>Content-Type: text/plane<br/><br/>h3&#123;<br/>font-size:20px;<br/>font-weight:bold;<br/>color:#005A9C;<br/>&#125;<br/><br/>3.浏览器发出请求<br/>GET image/logo.png HTTP/1.1<br/>服务器返回响应<br/>HTTP /1.1 200 OK<br/>Date: Apr 11 2006 15:32:08 GMT<br/>Server: Apache/2.0.46(win32)<br/>Connection: Keep-alive, close<br/>Content-Length: 1280<br/>Content-Type: text/plane<br/><br/>&#123;Binary image data follows&#125;<br/><br/>（附录）<br/>1.HTTP规范：Internet工程制定组织（IETF）发布的RFC指定Internet标准，这些RFC被Internet研究发展机构广泛接受。因为它们是标准文档，故一般用正规语言编写，如立法文标一样。<br/>2.RFC：RFC一旦被提出，就被编号且不会再改变，当一个标准被修改时，则给出一个新的RFC。作为标准，RFC在Internet上被广泛采用。<br/>3.HTTP的几个重要RFC：<br/>RFC1945&nbsp;&nbsp;&nbsp;&nbsp;HTTP 1.0 描述<br/>RFC2068&nbsp;&nbsp;&nbsp;&nbsp;HTTP 1.1 初步描述<br/>RFC2616&nbsp;&nbsp;&nbsp;&nbsp;HTTP 1.1 标准<br/>4.资源标识符URI（Uniform Resource Identifter，URI） <br/><br/><br/>HTTP参考<br/><br/>一、HTTP码应码<br/>响应码由三位十进制数字组成，它们出现在由HTTP服务器发送的响应的第一行。<br/><br/>响应码分五种类型，由它们的第一位数字表示：<br/>1.1xx：信息，请求收到，继续处理<br/>2.2xx：成功，行为被成功地接受、理解和采纳<br/>3.3xx：重定向，为了完成请求，必须进一步执行的动作<br/>4.4xx：客户端错误，请求包含语法错误或者请求无法实现<br/>5.5xx：服务器错误，服务器不能实现一种明显无效的请求<br/><br/>下表显示每个响应码及其含义：<br/>100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;继续<br/>101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分组交换协<br/>200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK<br/>201&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;被创建<br/>202&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;被采纳<br/>203&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;非授权信息<br/>204&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无内容<br/>205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重置内容<br/>206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部分内容<br/>300&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;多选项<br/>301&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;永久地传送<br/>302&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;找到<br/>303&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参见其他<br/>304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;未改动<br/>305&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用代理<br/>307&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;暂时重定向<br/>400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误请求<br/>401&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;未授权<br/>402&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要求付费<br/>403&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;禁止<br/>404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;未找到<br/>405&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不允许的方法<br/>406&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不被采纳<br/>407&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要求代理授权<br/>408&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求超时<br/>409&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;冲突<br/>410&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;过期的<br/>411&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要求的长度<br/>412&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前提不成立<br/>413&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求实例太大<br/>414&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求URI太大<br/>415&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不支持的媒体类型<br/>416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无法满足的请求范围<br/>417&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;失败的预期<br/>500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内部服务器错误<br/>501&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;未被使用<br/>502&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网关错误<br/>503&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不可用的服务<br/>504&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网关超时<br/>505&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP版本未被支持<br/><br/>二、HTTP头标<br/>头标由主键/值对组成。它们描述客户端或者服务器的属性、被传输的资源以及应该实现连接。<br/><br/>四种不同类型的头标：<br/>1.通用头标：即可用于请求，也可用于响应，是作为一个整体而不是特定资源与事务相关联。<br/>2.请求头标：允许客户端传递关于自身的信息和希望的响应形式。<br/>3.响应头标：服务器和于传递自身信息的响应。<br/>4.实体头标：定义被传送资源的信息。即可用于请求，也可用于响应。<br/><br/>头标格式：<name>:<value><CRLF><br/><br/>下表描述在HTTP/1.1中用到的头标<br/>Accept 定义客户端可以处理的媒体类型，按优先级排序；<br/>在一个以逗号为分隔的列表中，可以定义多种类型和使用通配符。例如：Accept: image/jpeg,image/png,*/*<br/>Accept-Charset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义客户端可以处理的字符集，按优先级排序；<br/>在一个以逗号为分隔的列表中，可以定义多种类型和使用通配符。例如：Accept-Charset: iso-8859-1,*,utf-8<br/>Accept-Encoding&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义客户端可以理解的编码机制。例如：Accept-Encoding:gzip,compress<br/>Accept-Language&nbsp;&nbsp;&nbsp;&nbsp;定义客户端乐于接受的自然语言列表。例如：Accept-Language: en,de<br/>Accept-Ranges&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个响应头标，它允许服务器指明：将在给定的偏移和长度处，为资源组成部分的接受请求。<br/>该头标的值被理解为请求范围的度量单位。例如Accept-Ranges: bytes或Accept-Ranges: none<br/>Age 允许服务器规定自服务器生成该响应以来所经过的时间长度，以秒为单位。<br/>该头标主要用于缓存响应。例如：Age: 30<br/>Allow 一个响应头标，它定义一个由位于请求URI中的次源所支持的HTTP方法列表。例如：Allow: GET,PUT<br/>aUTHORIZATION 一个响应头标，用于定义访问一种资源所必需的授权（域和被编码的用户ID与口令）。<br/>例如：Authorization: Basic YXV0aG9yOnBoaWw=<br/>Cache-Control 一个用于定义缓存指令的通用头标。例如：Cache-Control: max-age=30<br/>Connection 一个用于表明是否保存socket连接为开放的通用头标。例如：Connection: close或Connection: keep-alive<br/>Content-Base 一种定义基本URI的实体头标，为了在实体范围内解析相对URLs。<br/>如果没有定义Content-Base头标解析相对URLs，使用Content-Location URI（存在且绝对）或使用URI请求。<br/>例如：Content-Base: Http://www.myweb.com<br/>Content-Encoding 一种介质类型修饰符，标明一个实体是如何编码的。例如：Content-Encoding: zip<br/>Content-Language 用于指定在输入流中数据的自然语言类型。例如：Content-Language: en<br/>Content-Length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定包含于请求或响应中数据的字节长度。例如：Content-Length:382<br/>Content-Location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定包含于请求或响应中的资源定位（URI）。<br/>如果是一绝。对URL它也作为被解析实体的相对URL的出发点。<br/>例如：Content-Location: http://www.myweb.com/news<br/>Content-MD5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实体的一种MD5摘要，用作校验和。<br/>发送方和接受方都计算MD5摘要，接受方将其计算的值与此头标中传递的值进行比较。<br/>例如：Content-MD5: <base64 of 128 MD5 digest><br/>Content-Range&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;随部分实体一同发送；标明被插入字节的低位与高位字节偏移，也标明此实体的总长度。<br/>例如：Content-Range: 1001-2000/5000<br/>Contern-Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标明发送或者接收的实体的MIME类型。例如：Content-Type: text/html<br/>Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;发送HTTP消息的日期。例如：Date: Mon,10PR 18:42:51 GMT<br/>ETag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种实体头标，它向被发送的资源分派一个唯一的标识符。<br/>对于可以使用多种URL请求的资源，ETag可以用于确定实际被发送的资源是否为同一资源。<br/>例如：ETag: ”208f-419e-30f8dc99″<br/>Expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定实体的有效期。例如：Expires: Mon,05 Dec 2008 12:00:00 GMT<br/>Form&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种请求头标，给定控制用户代理的人工用户的电子邮件地址。例如：From: webmaster@myweb.com<br/>Host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;被请求资源的主机名。对于使用HTTP/1.1的请求而言，此域是强制性的。例如：Host: www.myweb.com<br/>If-Modified-Since&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果包含了GET请求，导致该请求条件性地依赖于资源上次修改日期。<br/>如果出现了此头标，并且自指定日期以来，此资源已被修改，应该反回一个304响应代码。<br/>例如：If-Modified-Since: Mon,10PR 18:42:51 GMT<br/>If-Match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果包含于一个请求，指定一个或者多个实体标记。只发送其ETag与列表中标记区配的资源。<br/>例如：If-Match: ”208f-419e-308dc99″<br/>If-None-Match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果包含一个请求，指定一个或者多个实体标记。资源的ETag不与列表中的任何一个条件匹配，操作才执行。<br/>例如：If-None-Match: ”208f-419e-308dc99″<br/>If-Range&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定资源的一个实体标记，客户端已经拥有此资源的一个拷贝。必须与Range头标一同使用。<br/>如果此实体自上次被客户端检索以来，还不曾修改过，那么服务器只发送指定的范围，否则它将发送整个资源。<br/>例如：Range: byte=0-499<CRLF>If-Range:”208f-419e-30f8dc99″<br/>If-Unmodified-Since&nbsp;&nbsp;&nbsp;&nbsp;只有自指定的日期以来，被请求的实体还不曾被修改过，才会返回此实体。<br/>例如：If-Unmodified-Since:Mon,10PR 18:42:51 GMT<br/>Last-Modified&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定被请求资源上次被修改的日期和时间。例如：Last-Modified: Mon,10PR 18:42:51 GMT<br/>Location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于一个已经移动的资源，用于重定向请求者至另一个位置。<br/>与状态编码302（暂时移动）或者301（永久性移动）配合使用。<br/>例如：Location: http://www2.myweb.com/index.jsp<br/>Max-Forwards&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个用于TRACE方法的请求头标，以指定代理或网关的最大数目，该请求通过网关才得以路由。<br/>在通过请求传递之前，代理或网关应该减少此数目。例如：Max-Forwards: 3<br/>Pragma&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个通用头标，它发送实现相关的信息。例如：Pragma: no-cache<br/>Proxy-Authenticate&nbsp;&nbsp;&nbsp;&nbsp;类似于WWW-Authenticate，便是有意请求只来自请求链（代理）的下一个服务器的认证。<br/>例如：Proxy-Authenticate: Basic realm-admin<br/>Proxy-Proxy-Authorization&nbsp;&nbsp;&nbsp;&nbsp;类似于授权，但并非有意传递任何比在即时服务器链中更进一步的内容。<br/>例如：Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=<br/>Public&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;列表显示服务器所支持的方法集。例如：Public: OPTIONS,MGET,MHEAD,GET,HEAD<br/>Range&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定一种度量单位和一个部分被请求资源的偏移范围。例如：Range: bytes=206-5513<br/>Refener&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种请求头标域，标明产生请求的初始资源。对于HTML表单，它包含此表单的Web页面的地址。<br/>例如：Refener: http://www.myweb.com/news/search.html<br/>Retry-After&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种响应头标域，由服务器与状态编码503（无法提供服务）配合发送，以标明再次请求之前应该等待多长时间。<br/>此时间即可以是一种日期，也可以是一种秒单位。例如：Retry-After: 18<br/>Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种标明Web服务器软件及其版本号的头标。例如：Server: Apache/2.0.46(Win32)<br/>Transfer-Encoding&nbsp;&nbsp;&nbsp;&nbsp;一种通用头标，标明对应被接受方反向的消息体实施变换的类型。例如：Transfer-Encoding: chunked<br/>Upgrade&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;允许服务器指定一种新的协议或者新的协议版本，与响应编码101（切换协议）配合使用。<br/>例如：Upgrade: HTTP/2.0<br/>User-Agent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义用于产生请求的软件类型（典型的如Web浏览器）。<br/>例如：User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)<br/>Vary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个响应头标，用于表示使用服务器驱动的协商从可用的响应表示中选择响应实体。例如：Vary: *<br/>Via&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个包含所有中间主机和协议的通用头标，用于满足请求。例如：Via: 1.0 fred.com, 1.1 wilma.com<br/>Warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用于提供关于响应状态补充信息的响应头标。例如：Warning: 99 www.myweb.com Piano needs tuning<br/>www-Authenticate&nbsp;&nbsp;&nbsp;&nbsp;一个提示用户代理提供用户名和口令的响应头标，与状态编码401（未授权）配合使用。响应一个授权头标。<br/>例如：www-Authenticate: Basic realm=zxm.mgmt<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E5%258D%258F%25E8%25AE%25AE" rel="tag">协议</a> , <a href="http://selboo.com.cn/tag.php?tag=http" rel="tag">http</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?684</link>
<title><![CDATA[PHP 大文件上传进度条实现]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[程序开发]]></category>
<pubDate>Tue, 26 Jan 2010 15:00:35 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?684</guid> 
<description>
<![CDATA[ 
	目前我知道的方法有两种，一种是使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现（http://pecl.php.net/package/apc），另外一种方法是使用PECL扩展模块uploadprogress实现（http://pecl.php.net/package/uploadprogress） 我这里举两个分别实现的例子供参考，更灵活的应用根据自己需要来修改。<br/><br/>　　APC实现方法：<br/><br/>安装APC，参照官方文档安装，可以使用PECL模块安装方法快速简捷，这里不说明 <br/>配置php.ini，设置参数 apc.rfc1867=1 ，使APC支持上传进度条功能，在APC源码说明文档里面有说明 <br/>代码范例： <br/><br/><div class="code">if ($_SERVER&#91;&#039;REQUEST_METHOD&#039;&#93; == ‘POST‘) &#123;&nbsp;&nbsp;//上传请求<br/>&nbsp;&nbsp;&nbsp;&nbsp;$status = apc_fetch(‘upload_‘ . $_POST&#91;&#039;APC_UPLOAD_PROGRESS&#039;&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$status&#91;&#039;done&#039;&#93; = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo json_encode($status);&nbsp;&nbsp;//输出给用户端页面里的ajax调用，相关文档请自己寻找<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit;<br/>&#125; elseif (isset($_GET&#91;&#039;progress_key&#039;&#93;)) &#123;&nbsp;&nbsp; //读取上传进度<br/>&nbsp;&nbsp;&nbsp;&nbsp;$status = apc_fetch(‘upload_‘.$_GET&#91;&#039;progress_key&#039;&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo json_encode($status);<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit;<br/>&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//其他代码，比如上传表单等<br/>&#125;</div>　　uploadprogress 模块实现方法：<br/><br/>使用PECL模块安装方法安装该模块 <br/><br/>php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt” <br/><br/>代码范例： <br/><div class="code">if($_SERVER&#91;&#039;REQUEST_METHOD&#039;&#93;==‘POST‘) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (is_uploaded_file($_FILES&#91;&#039;upfile&#039;&#93;&#91;&#039;tmp_name&#039;&#93;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$upload_dir = ‘your_path/‘;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= strrchr($_FILES&#91;&#039;video&#039;&#93;&#91;&#039;name&#039;&#93;, ‘.‘);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sessid&nbsp;&nbsp;&nbsp;&nbsp; = $_POST&#91;&#039;UPLOAD_IDENTIFIER&#039;&#93; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmpfile&nbsp;&nbsp;&nbsp;&nbsp;= $upload_dir . $sessid; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sessfile&nbsp;&nbsp; = $upload_dir . $sessid .$ext;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (move_uploaded_file($_FILES&#91;&#039;upfile&#039;&#93;&#91;&#039;tmp_name&#039;&#93;,$tmpfile)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上传成功<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上传失败<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上传错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125; elseif (!empty($_GET&#91;&#039;sessid&#039;&#93;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT“);<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(“Last-Modified: “ . gmdate(“D, d M Y H:i:s“) . “ GMT“);<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(“Cache-Control: no-store, no-cache, must-revalidate“);<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(“Cache-Control: post-check=0, pre-check=0“, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(“Pragma: no-cache“);<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(“Content-Type:text/html;charset=UTF-8“);<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;$unique_id = $_GET&#91;&#039;sessid&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$uploadvalues = uploadprogress_get_info($unique_id);<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;if (is_array($uploadvalues)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo json_encode($uploadvalues);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取进度失败，另外处理逻辑<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//显示上传表单<br/>&#125;</div><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=php" rel="tag">php</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?683</link>
<title><![CDATA[在linux系统中I/O 调度的选择]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 26 Jan 2010 14:47:59 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?683</guid> 
<description>
<![CDATA[ 
	转载本站文章请注明，转载自：扶凯[http://www.php-oa.com] <br/>本文链接: http://www.php-oa.com/2010/01/03/linux-io-elevator.html <br/><br/>I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理，以求得尽可能最好的整体I/O性能。<br/><br/><strong>linux下面列出4种调度算法</strong><br/><br/>CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq)：<br/>这是默认算法，对于通用服务器来说通常是最好的选择。它试图均匀地分布对I/O带宽的访问。在多媒体应用, 总能保证audio、video及时从磁盘读取数据。但对于其他各类应用表现也很好。每个进程一个queue，每个queue按照上述规则进行merge和sort。进程之间round robin调度，每次执行一个进程的4个请求。<br/><br/>Deadline (elevator=deadline)：<br/>这个算法试图把每次请求的延迟降至最低。该算法重排了请求的顺序来提高性能。<br/><br/>NOOP (elevator=noop):<br/>这个算法实现了一个简单FIFO队列。他假定I/O请求由驱动程序或者设备做了优化或者重排了顺序(就像一个智能控制器完成的工作那样)。在有些SAN环境下，这个选择可能是最好选择。适用于随机存取设备, no seek cost，非机械可随机寻址的磁盘。<br/><br/>Anticipatory (elevator=as):<br/>这个算法推迟I/O请求，希望能对它们进行排序，获得最高的效率。同deadline不同之处在于每次处理完读请求之后, 不是立即返回, 而是等待几个微妙在这段时间内, 任何来自临近区域的请求都被立即执行. 超时以后, 继续原来的处理.基于下面的假设: 几个微妙内, 程序有很大机会提交另一次请求.调度器跟踪每个进程的io读写统计信息, 以获得最佳预期.<br/><br/><strong>linux中IO调度方法的查看和设置的方法</strong><br/><br/>查看当前IO<br/><br/># cat /sys/block/sd*/queue/scheduler<br/># noop anticipatory deadline [cfq]<br/><br/>设置当前IO<br/># echo noop > /sys/block/hda/queue/scheduler<br/><br/>对IO调度使用的建议<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deadline I/O scheduler 使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库,Oracle 10G 之类).Anticipatory I/O scheduler 假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)Web,App等应用我们可以采纳as调度.CFQ I/O scheduler使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统我在生产环境中测试过一台机器本来流量只有350M的样子,有时压力就不行了,流量也上不去了,因为读比较多,所以使用deadline后,流量上升了50M,从流量之类的图上也见到稳定很多.<br/><br/>linux启动时设置默认IO调度<br/>让系统启动时就使用默认的IO方法,只需在grub.conf文件中加入类似如下行<br/>kernel /vmlinuz-2.6.24 ro root=/dev/sda1 elevator=deadline<br/><br/><strong>有关IO的几个内核参数</strong><br/><br/>echo '40'> /proc/sys/vm/dirty_ratio<br/>这个参数控制文件系统的文件系统写缓冲区的大小，单位是百分比，表示系统内存的百分比，表示当写缓冲使用到系统内存多少的时候，开始向磁盘写出数 据。增大之会使用更多系统内存用于磁盘写缓冲，也可以极大提高系统的写性能。但是，当你需要持续、恒定的写入场合时，应该降低其数值，一般启动上缺省是 10。下面是增大的方法：<br/><br/>echo '20' > /proc/sys/vm/dirty_background_ratio<br/>这个参数控制文件系统的pdflush进程，在何时刷新磁盘。单位是百分比，表示系统内存的百分比，意思是当写缓冲使用到系统内存多少的时候， pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲，也可以极大提高系统的写性能。但是，当你需要持续、恒定的写入场合时，应该 降低其数值，一般启动上缺省是 5。下面是增大的方法：<br/><br/>echo '200' > /proc/sys/vm/dirty_writeback_centisecs<br/>这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500，也就是 5 秒。如果你的系统是持续地写入动作，那么实际上还是降低这个数值比较好，这样可以把尖峰的写操作削平成多次写操作。设置方法如下：<br/><br/>echo '1000' > /proc/sys/vm/dirty_writeback_centisecs<br/>如果你的系统是短期地尖峰式的写操作，并且写入数据不大（几十M/次）且内存有比较多富裕，那么应该增大此数值：<br/><br/>echo '1500' > /proc/sys/vm/dirty_expire_centisecs<br/>这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后，pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000，也就是 30 秒的数据就算旧了，将会刷新磁盘。对于特别重载的写操作来说，这个值适当缩小也是好的，但也不能缩小太多，因为缩小太多也会导致IO提高太快。建议设置为 1500，也就是15秒算旧。当然，如果你的系统内存比较大，并且写入模式是间歇式的，并且每次写入的数据不大（比如几十M），那么这个值还是大些的好。<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=io" rel="tag">io</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E4%25BC%2598%25E5%258C%2596" rel="tag">优化</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?682</link>
<title><![CDATA[PHP性能分析工具XHProf]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 26 Jan 2010 08:49:29 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?682</guid> 
<description>
<![CDATA[ 
	XHProf是facebook开源出来的一个php轻量级的性能分析工具，跟Xdebug类似，但性能开销更低，还可以用在生产环境中，也可以由程序开 关来控制是否进行profile。基于浏览器的性能分析用户界面能更容易查看，或是与同行们分享成果。也能绘制调用关系图。在数据收集阶段，它记录调用次 数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时，XHProfd通过检测循环来处理递 归的函数调用，并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。<br/>XHProf的轻量级性质和汇聚功能，使得它非常适合用于收集“生产环境”的性能统计数据的统计。<br/><br/><strong>一、编译安装XHProf</strong><br/>[root@localhost src]# wget http://pecl.php.net/get/xhprof-0.9.2.tgz<br/>[root@localhost src]# tar zxf xhprof-0.9.2.tgz<br/>[root@localhost src]# cd xhprof-0.9.2<br/>[root@localhost xhprof-0.9.2]# cp -r xhprof_html xhprof_lib /var/www/html/<br/>[root@localhost xhprof-0.9.2]# cd extension/<br/>[root@localhost extension]# /usr/local/webserver/php/bin/phpize<br/>[root@localhost extension]# ./configure&nbsp;&nbsp;–with-php-config=/usr/local/webserver/php/bin/php-config<br/><br/><strong>二、配置 php.ini 文件</strong><br/>vi vi /usr/local/webserver/php/etc/php.ini&nbsp;&nbsp;修改php.ini<br/><div class="code">&#91;xhprof&#93;<br/>extension=xhprof.so<br/>;<br/>; directory used by default implementation of the iXHProfRuns<br/>; interface (namely, the XHProfRuns_Default class) for storing<br/>; XHProf runs.<br/>;<br/>xhprof.output_dir=&lt;directory_for_storing_xhprof_runs&gt;</div><br/><br/>OK 重启WEB服务器。为了更加清晰显示程序执行、调用结构，安装Graphviz。<br/><br/><strong>三、安装Graphviz：</strong><br/>[root@localhost src]# wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz<br/>[root@localhost src]# tar zxf graphviz-2.24.0.tar.gz<br/>[root@localhost graphviz-2.24.0]# cd graphviz-2.24.0<br/>[root@localhost graphviz-2.24.0]# ./configure<br/>[root@localhost graphviz-2.24.0]# make<br/>[root@localhost graphviz-2.24.0# make install<br/><br/><strong>四、应用XHProf</strong><br/>客户端能很灵活地保存他们从XHProf运行中得到的XHProf原始数据。用户界面层的XHProf提供了一个 iXHProfRuns接口（见xhprof_lib/utils/xhprof_runs.php ），客户端可以利用。这使得客户端能够告诉用户界面层，如何获取XHProf运行后产生的对应数据。<br/>XHProf的UI 库自带的有一个基于文件的iXHProfRUns接口实现，即“ XHProfRuns_Default”（见xhprof_lib/utils/xhprof_runs.php）。这个自带的实现将XHProf运行结 果存在ini配置的xhprof.output_dir参数指定的某个目录下。<br/>一次XHProf运行，必须用一个命名空间和运行编号来唯一确定。<br/>假设使用iXHProfRuns接口的XHProfRuns_Default这个默认实现方式，如：<br/><br/>//xhprofStart.php 文件<br/><div class="code">&lt;?php<br/>$XHPROF_DEBUG&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; FALSE;<br/>$debugUserIDArray =&nbsp;&nbsp; array(<br/>123456&nbsp;&nbsp;&nbsp;&nbsp; =&gt;&nbsp;&nbsp;&nbsp;&nbsp; 1,<br/>456152&nbsp;&nbsp;=&gt;&nbsp;&nbsp;1,<br/>);<br/>if (function_exists(&#039;xhprof_enable&#039;) &amp;&amp; !empty($debugUserIDArray&#91;$winduid&#93;))<br/>&#123;<br/>$XHPROF_DEBUG&nbsp;&nbsp; =&nbsp;&nbsp; TRUE;<br/>&#125;<br/><br/>if ($XHPROF_DEBUG)<br/>&#123;<br/>include_once “/var/www/html/xhprof_lib/utils/xhprof_lib.php”;<br/>include_once “/var/www/html/xhprof_lib/utils/xhprof_runs.php”;<br/>xhprof_enable(); //start profiling <br/>&#125;<br/><br/>?&gt;</div><br/><br/>//xhprofEnd.php 文件<br/><div class="code">&lt;?php<br/>if (TRUE&nbsp;&nbsp;&nbsp;&nbsp;==&nbsp;&nbsp;$XHPROF_DEBUG)<br/>&#123;<br/>//stop profiler<br/>$xhprof_data&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp; xhprof_disable();<br/>$xhprof_runs&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp; new XHProfRuns_Default();<br/>$run_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; $xhprof_runs-&gt;save_run($xhprof_data, “xhprof_foo”);<br/>echo “—————&#92;n”.<br/>“&lt;a href=’/xhprof_html/index.php?run=$run_id&amp;source=xhprof_foo’&gt;xhprof&lt;/a&gt;&#92;n”.<br/>“—————&#92;n”;<br/>&#125;<br/>echo ‘&lt;!– xhprof –&gt;’;<br/>?&gt;</div><br/><br/>程序中应用：<br/><div class="code">include /var/www/html/xhprofStart.php<br/>// run program<br/>….<br/>include /var/www/html/xhprofEnd.php</div><br/><br/>将profile开关程序放在你所要进行分析的程序部分，就会将运行结果保存在xhprof.output_dir ini参数指定的特定目录下。文件的名称可能会是23dffaa3a3f66.xhprof_foo类似的文件; 两部分分别是运行编号（23dffaa3a3f6）和命名空间（xhprof_foo）。<br/><br/><br/>最后，一些术语解释:<br/>1. Inclusive Time (或子树时间)：包括子函数所有执行时间。<br/>2. Exclusive Time/Self Time：函数执行本身花费的时间，不包括子树执行时间。<br/>3. Wall时间：花去了的时间或挂钟时间。<br/>4. CPU时间：用户耗的时间+内核耗的时间<br/>更多：http://mirror.facebook.net/facebook/xhprof/doc.html<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=php" rel="tag">php</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E6%2580%25A7%25E8%2583%25BD" rel="tag">性能</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E5%25B7%25A5%25E5%2585%25B7" rel="tag">工具</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E5%25BC%2580%25E6%25BA%2590" rel="tag">开源</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?681</link>
<title><![CDATA[开源分布式文件系统文件系统]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 26 Jan 2010 07:11:20 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?681</guid> 
<description>
<![CDATA[ 
	GFS(Google File System): <br/>http://www.codechina.org/doc/google/gfs-paper/<br/><br/>MogileFS: <br/>http://www.danga.com/mogilefs<br/><br/>Hadoop/HDFS: <br/>http://hadoop.apache.org/core<br/><br/>KFS(Kosmos Distributed File System): <br/>http://kosmosfs.sourceforge.net<br/><br/>NDFS(Nutch Distributed File System): <br/>http://lucene.apache.org/nutch/<br/>http://wiki.apache.org/nutch/NutchDistributedFileSystem<br/><br/>Gluster(Gluster File System): <br/>http://www.gluster.org<br/><br/>Coda(Coda File System): <br/>http://www.coda.cs.cmu.edu/<br/><br/>Global(Red Hat Global File System Redhat并购): <br/>http://www.redhat.com/gfs<br/><br/>Lustre(Lustre File System Sun并购): <br/>http://www.lustre.org<br/><br/>PVFS(Parallel Virtual File System，非开源): <br/>http://www.parl.clemson.edu/pvfs<br/><br/>GPFS(IBM General Parallel File System, 非开源): <br/>http://www-03.ibm.com/systems/clusters/software/gpfs<br/><br/>OpenAFS(Open Andrew File System IBM): <br/>http://www.openafs.org<br/><br/>XFS(SGI, 不算分布式文件系统): <br/>http://oss.sgi.com/projects/xfs<br/><br/>MOSIX: <br/>http://www.mosix.org<br/><br/>还有一个国内牛人写的FastDFS一个高效的分布式文件系统 <br/>http://code.google.com/p/fastdfs/<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%2596%2587%25E4%25BB%25B6%25E7%25B3%25BB%25E7%25BB%259F" rel="tag">文件系统</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E5%25BC%2580%25E6%25BA%2590" rel="tag">开源</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E5%2588%2586%25E5%25B8%2583%25E5%25BC%258F" rel="tag">分布式</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?680</link>
<title><![CDATA[看一看, 你就知道你是什么血型了]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[想说就说]]></category>
<pubDate>Mon, 25 Jan 2010 08:47:47 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?680</guid> 
<description>
<![CDATA[ 
	从以下几组图中，你找到自己的影子了么？哈哈~ <br/><br/>A血型：认真、冷静、好分析、很敏感、很本分、容易看不惯别人…<br/><br/>B血型：直率、自由散漫、做事情完全不在状态、精神不集中，容易分心…<br/><br/>O血型：很容易受到周遭影响、喜欢偷机、老师在与不在不一样、有贼心没贼胆…<br/><br/>AB血型：好奇心重、无理头，不按牌理出牌、自己只顾自己（自私）、懒散、没有时间概念…<br/><br/><a href="http://selboo.com.cn/book/img/abcd/1.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/1.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/2.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/2.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/3.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/3.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/4.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/4.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://selboo.com.cn/book/img/abcd/5.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/5.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/6.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/6.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/7.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/7.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/8.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/8.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/9.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/9.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/10.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/10.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://selboo.com.cn/book/img/abcd/11.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/abcd/11.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?679</link>
<title><![CDATA[/proc/cpuinfo]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 25 Jan 2010 03:46:44 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?679</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些操作系统的最新版本已经更新了 /proc/cpuinfo 文件,以支持多路平台.如果您的系统中的 /proc/cpuinfo 文件能够正确地反映出处理器信息,那么就不需要执行上述步骤.反之,可采用本文中的信息进行解释.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/proc/cpuinfo 文件包含系统上每个处理器的数据段落./proc/cpuinfo 描述中有 6 个条目适用于多内核和超线程(HT)技术检查：processor, vendor id, physical id, siblings, core id 和 cpu cores.<br/><br/>processor 条目包括这一逻辑处理器的唯一标识符. <br/>physical id 条目包括每个物理封装的唯一标识符. <br/>core id 条目保存每个内核的唯一标识符. <br/>siblings 条目列出了位于相同物理封装中的逻辑处理器的数量. <br/>cpu cores 条目包含位于相同物理封装中的内核数量. <br/>如果处理器为英特尔处理器,则 vendor id 条目中的字符串是 GenuineIntel. <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拥有相同 physical id 的所有逻辑处理器共享同一个物理插座.每个 physical id 代表一个唯一的物理封装.Siblings 表示位于这一物理封装上的逻辑处理器的数量.它们可能支持也可能不支持超线程(HT)技术.每个 core id 均代表一个唯一的处理器内核.所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上.如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术.如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id 不同,则说明这是一个多内核处理器.cpu cores 条目也可以表示是否支持多内核.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如,如果系统包含两个物理封装,每个封装中又包含两个支持超线程(HT)技术的处理器内核,则 /proc/cpuinfo 文件将包含此数据.(注：数据并不在表格中.)<br/><br/><br/>processor&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;2&nbsp;&nbsp;3&nbsp;&nbsp;4&nbsp;&nbsp;5&nbsp;&nbsp;6&nbsp;&nbsp;7 <br/>physical id&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;&nbsp;1 <br/>core id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;&nbsp;1&nbsp;&nbsp;3&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;&nbsp;1&nbsp;&nbsp;3 <br/>siblings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;4&nbsp;&nbsp;4&nbsp;&nbsp;4&nbsp;&nbsp;4&nbsp;&nbsp;4&nbsp;&nbsp;4&nbsp;&nbsp;4 <br/>cpu cores&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;2&nbsp;&nbsp;2&nbsp;&nbsp;2&nbsp;&nbsp;2&nbsp;&nbsp;2&nbsp;&nbsp;2&nbsp;&nbsp;2 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此例说明逻辑处理器 0 和 4 驻留在物理封装 0 的内核 0 上.这就表示逻辑处理器 0 和 4 支持超线程(HT)技术.相同的工作可用于封装 0 内核 1 上的逻辑处理器 2 和 6,封装 1 内核 2 上的逻辑处理器 1 和 5,以及封装 1 内核 3 上的逻辑处理器 3 和 7.此系统支持超线程(HT)技术,因为两个逻辑处理器共享同一个内核.有两种方式可以确定是否支持多内核.由于内核 0 和 1 存在于封装 0 上,而内核 2 和 3 存在于封装 1 上,所以这是一个多内核系统.此外,cpu cores 条目为 2,也说明有两个内核驻留在物理封装中.这是一个多路系统,因为有两个封装.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;值得注意的是 physical id 和 core id 的编号可能是也可能不是连续的.系统上有两个物理封装并不罕见,而且 physical id 等于 0 和 3<br/><br/>通过physical id来判断，硬件的CPU Socket到底有几个，即按照插槽来计算的CPU<br/>个数，如果你的是两个四核CPU，那么physical id应该是0和1;<br/>通过sibling来判断，一个socket上的CPU是否是双核或者超线程：<br/><br/>如果sibling是2，而后面的cpu cores也是2，那么这个CPU则是双核；<br/>如果sibling是1，而后面的cpu cores若是1，那么这个CPU是单核但支持超线程；<br/>如果sibling是4，而后面的cpu cores也是2，那么这个CPU则是双核且每个核都支<br/>持超线程；<br/>如果sibling是4，而后面的cpu cores若是4，那么这个CPU是4核但不支持超线程<br/><br/>core id通常表示在一个CPU Socket上物理核心的id编号。<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E5%2586%2585%25E5%25AD%2598" rel="tag">内存</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?678</link>
<title><![CDATA[Mysql对large page的支持]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Mon, 25 Jan 2010 03:16:48 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?678</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;在 Linux 操作系统上运行内存需求量较大的应用程序时，由于其采用的默认页面大小为 4KB，因而将会产生较多 TLB Miss 和缺页中断，从而大大影响应用程序的性能。当操作系统以 2MB 甚至更大作为分页的单位时，将会大大减少 TLB Miss 和缺页中断的数量，显著提高应用程序的性能。这也正是 Linux 内核引入大页面支持的直接原因。好处是很明显的，假设应用程序需要 2MB 的内存，如果操作系统以 4KB 作为分页的单位，则需要 512 个页面，进而在 TLB 中需要 512 个表项，同时也需要 512 个页表项，操作系统需要经历至少 512 次 TLB Miss 和 512 次缺页中断才能将 2MB 应用程序空间全部映射到物理内存；然而，当操作系统采用 2MB 作为分页的基本单位时，只需要一次 TLB Miss 和一次缺页中断，就可以为 2MB 的应用程序空间建立虚实映射，并在运行过程中无需再经历 TLB Miss 和缺页中断（假设未发生 TLB 项替换和 Swap）。<br/>为了能以最小的代价实现大页面支持，Linux 操作系统采用了基于 hugetlbfs 特殊文件系统 2M 字节大页面支持。这种采用特殊文件系统形式支持大页面的方式，使得应用程序可以根据需要灵活地选择虚存页面大小，而不会被强制使用 2MB 大页面。<br/><br/>在mysql中，innodb可以使用large pages来分配buffer pool跟additional memory pool.<br/>下面来看下mysql使用large pages具体的实现方法<br/><br/>1：查看系统是否支持huge-pages<br/>cat /proc/meminfo &#124; grep -i huge<br/>HugePages_Total:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br/>HugePages_Free:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br/>HugePages_Rsvd:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br/>HugePages_Surp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br/>Hugepagesize:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048 kB<br/>Hugepagesize有值，说明系统支持large pages（如不支持，系统需要重新编译来支持）<br/><br/>2：配置<br/>把配置写入到/etc/sysctl.conf 然后sysctl -p使其生效<br/>vm.nr_hugepages=200 (大页面的页数)<br/>vm.hugetlb_shm_group=1001（需要使用大页面的用户id 可用id mysql 来查看mysql的ID）<br/>kernel.shmmax=536887296<br/>#kernel.shmall=524288<br/><br/>3：如需使mysql使用large pages，还需设置max locked-in-memory的大小<br/>用ulimit -a（或者ulimit -l）来查看 max locked memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -l) 32<br/>vim /etc/security/limits.conf<br/>mysql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft&nbsp;&nbsp;&nbsp;&nbsp;memlock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3145728<br/>mysql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard&nbsp;&nbsp;&nbsp;&nbsp;memlock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3145728<br/>或者用ulimit -l 3145728来设置，<br/><br/>4：vim /etc/mysql/my.cnf<br/>添加large-pages,使得mysql 支持large-pages<br/><br/>5：启动mysql。<br/>在启动mysql的时候，最容易报的错误是：<br/>InnoDB: HugeTLB: Warning: Failed to allocate 138412032 bytes. errno 12<br/>InnoDB HugeTLB: Warning: Using conventional memory pool<br/>这是由于上面配置的两点所致。<br/>1）nr_hugepages 的值*2M应大于（innodb_buffer_pool_size+innodb_additional_mem_pool_size）因为以上谈到innodb可以使用large pages来分配buffer pool跟additional memory pool.<br/>2）memlock 的设置，在启动mysql时，一定要先查看用ulimit -a 来查看max locked memory 设置是否合理，可以尝试用以上两种方法来设置该值。还有一点，/etc/security/limits.conf配置文件的修改，可能无法通过ssh来查看，故也不能用ssh来启动mysql。<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=mysql" rel="tag">mysql</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?677</link>
<title><![CDATA[qq远程协助屏幕是斜的的解决方法]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[基础知识]]></category>
<pubDate>Fri, 22 Jan 2010 10:39:04 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?677</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qq远程协助时发现屏幕倾斜。<br/><br/><a href="http://selboo.com.cn/attachment.php?fid=215" target="_blank"><img src="http://selboo.com.cn/attachment.php?fid=215" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>原因是因为双方的分辨率不同造成的。修改相同的分辨率就可以了。<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=qq" rel="tag">qq</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?676</link>
<title><![CDATA[nginx静态压缩]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 18 Jan 2010 18:35:26 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?676</guid> 
<description>
<![CDATA[ 
	在搭建squid网页加速的时候，对于大的css 或者js要进行压缩,然后再进行缓存,这样能够提高减小下载量提高页面响应速度。如果你用的是squid 3.0以前的版本并且用的是 ngnix server的话可能会碰到如下问题： 不用squid直接打开页面则客户端返回的是压缩的状态，如果启用squid加速会发现下载下来的页面不是压缩状态。这里面主要是没有启动ngnix 的静态缓存模块(ngx_http_gzip_static_module)导致。打开静态缓存问题就解决了<br/>1.nginx编译选项<br/>./configure --with-http_gzip_static_module<br/>2.修改nginx.conf<br/><br/>gzip_static on;<br/><br/>gzip_http_version 1.1;<br/>gzip_proxied expired no-cache no-store private auth;<br/>gzip_disable "MSIE [1-6] &#92;.";<br/>gzip_vary on;<br/><br/><br/>参考：<br/>1.http://wiki.nginx.org/NginxHttpGzipStaticModule<br/>2.http://bbs.chinaunix.net/viewthread.php?tid=1329820<br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://selboo.com.cn/tag.php?tag=web" rel="tag">web</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?675</link>
<title><![CDATA[nginx启动关闭重启脚本]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 18 Jan 2010 08:01:48 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?675</guid> 
<description>
<![CDATA[ 
	注意修改安装路径了<br/><br/><div class="code">#!/bin/bash<br/>#<br/># Init file for nginx server daemon<br/>#<br/># chkconfig: 234 99 99<br/># description: nginx server daemon<br/>#<br/><br/># source function library<br/>. /etc/rc.d/init.d/functions<br/><br/># pull in sysconfig settings<br/>&#91; -f /etc/sysconfig/nginx &#93; &amp;&amp; . /etc/sysconfig/nginx<br/><br/>RETVAL=0<br/>prog=&quot;nginx&quot;<br/><br/>PAT=/usr/local/nginx<br/>NGINXD=/usr/local/nginx/sbin/nginx<br/>PID_FILE=/usr/local/nginx/nginx.pid<br/><br/>start()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo -n $&quot;Starting $prog: &quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$NGINXD 2&gt;/dev/null $OPTIONS &amp;&amp; success &#124;&#124; failure<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; &quot;$RETVAL&quot; = 0 &#93; &amp;&amp; touch /var/lock/subsys/nginx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo<br/>&#125;<br/><br/>stop()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo -n $&quot;Shutting down $prog: &quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;killproc nginx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; $RETVAL -eq 0 &#93; &amp;&amp; rm -f /var/lock/subsys/nginx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $RETVAL<br/>&#125;<br/><br/>reload()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo -n $&quot;Reloading nginx: &quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;killproc nginx -HUP<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $RETVAL<br/>&#125;<br/><br/>case &quot;$1&quot; 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;start<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;stop)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<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;restart)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reload)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reload<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;status)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status -p $PID_FILE nginx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $&quot;Usage: $0 &#123;start&#124;stop&#124;restart&#124;reload&#124;status&#125;&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=1<br/>esac<br/>exit $RETVAL</div><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://selboo.com.cn/tag.php?tag=web" rel="tag">web</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?674</link>
<title><![CDATA[从实际应用的角度看Rsync是如何工作的]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[系统架构]]></category>
<pubDate>Sat, 16 Jan 2010 07:29:51 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?674</guid> 
<description>
<![CDATA[ 
	正在研究Rsync, 在Rsync的主页上看到了这篇对Rsync解释的不那么枯燥的文章. 尝试着翻译了一下. 原文虽然在大方向上清晰的解释了Rsync的工作方式, 但在具体的细节的时候还是觉的很晦涩. 在有些地方, 完全去我自己理解后的"意译"了. 对于这篇文章, 也许重写是个更好的选择.<br/><br/>这是我第一次翻译技术文档, 疏漏难免, 欢迎斧正.<br/><br/>原文URL,&nbsp;&nbsp;http://samba.anu.edu.au/rsync/how-rsync-works.html , 不知作者是谁.<br/><br/>How Rsync Works<br/>A Practical Overview<br/>从实际应用的角度看Rsync是如何工作的<br/>前言&nbsp;&nbsp;&nbsp;&nbsp; 对于理解Rsync的算法理论和机制, 最初的RsyncTechnicalReport和AndrewTridgell的博士论文都是非常优秀的文档. 不幸的是, 他们都太过于理论, 而缺乏Rsync实践应用.<br/>在这份文档中我希望能够描述<br/><br/>-一份非数学的Rsync算法综述<br/>-这个算法在Rsync程序中是如何实现的<br/>-Rsync使用的协议<br/>-Rsync各个进程的一个可定义的角色<br/><br/><br/>这份文档对于需要更多信息的编程者可以作为一份指导手册, 但是最主要的作用是从读者能够理解的角度给他们一个以下几方面的基础知识,<br/><br/>-为什么Rsync是这样表现的<br/>-Rsync的限制<br/>-为什么有些功能请求对于目前的程序是不合适的.<br/><br/><br/>这篇文档泛泛的描述了Rsync的构成和行为. 在有些情况下, 为了满足一个更广泛的目标, 有些可以使文档更准确的细节和特例被牺牲掉了.<br/>进程和他们所扮演的角色&nbsp;&nbsp;&nbsp;&nbsp;当我们谈论Rsync的时候, 我们使用了特定的名词来代表Rsync执行过程中不同的进程和他们所扮演的角色. 为了更好的沟通, 我们使用相同的语言是很重要的. 我们在使用某一特定的名词的时候指的是同一件事情. 在Rsync邮件列表上, 总有关于进程和角色的疑惑. 出于这个原因我将定义几个名词, 接下来我会用他们描述进程和相应的角色.<br/><br/>客户机　　　　　角色　　　　　　　初始化同步任务的一方.<br/>服务器　　　　　角色　　　　　　　指客户机通过本地传输, 或者远端SHELL, 或者网络插口<br/>　　　　　　　　　　　　　　　　　, 连接到远端的Rsync进程或者系统. 这是一个通用的名<br/>　　　　　　　　　　　　　　　　　词, 不应该和守护程序混淆. 一旦客户机和服务器的连<br/>　　　　　　　　　　　　　　　　　接建立, 这两个名词会被发送端和接收端替代.<br/>守护程序　　　　角色和进程　　　　守护程序指等待客户机连接的一个Rsync进程. 在某些平<br/>　　　　　　　　　　　　　　　　　台上, 它被称为一项服务.<br/>远端SHELL　　　角色和一组进程　　一个或者多个进程, 能够提供客户机和远端的服务器的<br/>　　　　　　　　　　　　　　　　　连接.<br/>发送端　　　　　角色和进程　　　　能够访问需要同步的源文件的Rsync进程.<br/>接收端　　　　　角色和进程　　　　作为一种功用, 接收端是一个目标系统. 作为一个进程<br/>　　　　　　　　　　　　　　　　　, 接收端接受需要更新的数据并把它们写到磁盘上.<br/>生成器　　　　　进程　　　　　　　生成器进程确认改变了的文件, 并管理文件等级逻辑.<br/><br/>进程的启动&nbsp;&nbsp;&nbsp;&nbsp;客户机启动后的第一件事是和服务器建立连接. 这个连接可以通过管道或者通过网络插口. <br/><br/>当Rsync 通过一个远端SHELL和一个没有启动守护程序的服务器通讯的时候, Rsync所使用的启动方法是在远端系统上派生一个远端SHELL,然后使用这个远端SHELL启动一个Rsync进程. Rsync的客户机和服务器通过远端SHELL的管道进行通讯. (As far as the rsync&nbsp;&nbsp;processes concerned there is no network. --不知道怎么翻译)&nbsp;&nbsp;在这种模式下, Rsync服务器选项被传送给命令行, 用于启动远端SHELL.&nbsp;&nbsp;<br/>当Rsync和一个守护程序通讯的时候, 它直接和网络插口通讯. 这是唯一一种可以被称为涉及网络的的Rsync通讯. 在这种模式下, Rsync的选项必须发送到网络插口上. 下面是具体的描述.<br/>客户机和服务器最开始通讯的时候, 他们各自发送自己所支持的最高的协议版本号给对方. 两边会使用其中的小的版本作为用来传输的协议版本. 如果是一个守护模式连接, Rsync的参数会被从客户机发送给服务器. 然后, 排出列表会被传送. 然后, 客户机服务器的关系就只和错误和日志发送有关了.<br/><br/>本地的Rsync任务(原地址和目标地址都是本地挂载的文件系统)就像一个推送. 客户机, 作为发送端, 派生一个服务器进程去行使服务器的功能. 客户机/发送端和服务器/接收端通过管道相互通讯.<br/><br/><br/>文件列表&nbsp;&nbsp;&nbsp;&nbsp;文件列表不仅包括路径名,也包括所有者,模式, 读写权限, 大小和修改时间. 如果设置了--checksum选项, 文件列表还要包括文件的校验值.<br/><br/>Rsync启动完成后的第一件事, 发送端会建立文件列表. 在建立过程中, 每个条目都会通过一种优化的网络传送方式发送给接收方.<br/><br/>传输结束后, 两侧会以目录对基础目录的相关性来编排顺序. (具体的算法会和每次传输实用的协议版本有关). 一旦排序开始, 所以关于文件的指向都是使用他们在文件列表中的目录顺序.<br/>如果必要, 发送者遵从文件列表中用户和组的id->name对应表 接收者会使用它来为文件列表中的每个文件作id->name->id翻译.<br/><br/>接收端收到完全的文件列表, 会派生出一个生成器, 和接收端一起建立一个完整的管道.<br/><br/>管道&nbsp;&nbsp;&nbsp;&nbsp;Rsync严重依赖於管道. 这意味着一组进程间的的单向通讯. 一旦文件列表被共享, 管道就表现为如下的形式,&nbsp;&nbsp;生成器->发送端->接收端<br/>生成器的输出是发送端的输入, 发送端的输出是接收端的输入. 每个进程独立的运行, 只有在管道延迟,或者等待硬盘读写或CPU资源的时候才会有延迟.<br/><br/>生成器&nbsp;&nbsp;&nbsp;&nbsp;生成器比较文件列表和本地目录树. 如果设置了--delete参数, 在开始它的主要工作前, 它首先会甄别在本地存在而在发送端上不存在的文件, 然后在接收端删除它们.<br/><br/>接下来生成器会开始遍历文件列表. 每个文件都被检查, 以确定是否需要同步. 大多数情况下如果修改时间和大小不同, 文件需要同步.&nbsp;&nbsp;如果设置了--checksum, 文件校验会被计算并比较. 目录, 设备文件和链结不会被跳过. 缺失的目录会被创建.<br/><br/>如果一个文件需要同步, 在接收端的任何版本的该文件都会被作为一个传输的"基础文件". "基础文件"作为一个数据源, 两侧比较下来一致的数据就不需要被传输了. 为了更有效的在远端匹配数据, 基础文件的块校验被计算, 并和文件的目录号一起送给发送端. 如果设置了--whole-file, 空的块校验值用于新文件.<br/>块大小, 以及在后期的版本中块校验的大小, 是基于每个文件的大小计算的.<br/><br/>发送端&nbsp;&nbsp; 发送端进程一次从生成器读一组文件号和相关联的块校验.<br/><br/>对每一个生成器发送的文件号, 发送端会存储块校验, 并建立一个哈希索引以快速检索.接着本地文件会被读取, 生成一个从文件的第一个字节开始的块作的校验. 这个校验会和生成器发过来的校验比较, 如果不相符, "不匹配"的字节会被加入到不匹配的数据中, 接着比较下一个字节的块. 这被称为"循环校验"<br/><br/>如果一个块的校验匹配就会被认为是一个匹配的块, 已经积累的不匹配块会被发送给接收端, 一起发送的还有块的偏移量和在接受端文件中的匹配块的长度. 块校验生成器会提前去检查匹配字节后面的一个字节.<br/>即使块的顺序或者偏移量不同, 以这种方法匹配的块也能够被确认. 这个程序是Rsync最核心的算法.<br/>通过这种方式, 发送者告诉接收端如何重组源文件成为一个目标文件. 这些指令包括所有的可以从基础文件拷贝的数据(如果存在的话), 和任何本地没有的新的数据, 的细节. 在处理末尾, 一个全文件的校验会被发送, 然后发送端去处理下一个文件.<br/><br/>生成循环校验以及在校验中找到匹配的数据, 对CPU的能力有很大的需求. 在所有的Rsync进程中,发送端是最消耗CPU资源的.<br/><br/><br/>接收端&nbsp;&nbsp;&nbsp;&nbsp;接收端会从发送端的数据中读取由文件索引号确认的文件. 然后打开本地文件(被称为基础文件), 建立一个临时文件.<br/><br/>接收端会读取非匹配数据和匹配数据, 并按顺序重组他们成为最终文件. 当非匹配数据被读取, 它会被写入到临时文件. 当收到一个块匹配记录, 接收端会寻找这个块在基础文件中的偏移量, 将这个块拷贝到临时文件. 通过这种方式, 临时文件被从头到尾建立起来.<br/><br/>建立临时文件的时候生成了文件的校验. 重建文件结束后, 这个校验和来自发送端的校验比较. 如果校验不符, 临时文件会被删除. 如果失败一次, 文件会再被处理一次. 如果失败第二次, 一个错误会被报告.<br/>临时文件建立后, 所有者, 权限和修改时间会被设置. 然后它会被重命名已替代基础文件. <br/><br/>从基础文件拷贝数据到临时文件, 使接收端成为所有进程中对硬盘要求最高的一个. 小文件还有可能在缓存中, 可以减轻对硬盘的压力; 但是对于大文件, 在生成器去处理下一个文件的时候,或者还有由发送端造成的时延, 缓存中已经无法容纳更多的数据,只能清除掉旧的. 另外, 数据是随机的从一个文件中读取, 并被写入另外一个, 如果读写的数据超过了硬盘缓存空间, 一个所谓的"寻找风暴"有可能发生, 会进一步的损害性能. <br/><br/>守护程序&nbsp;&nbsp;&nbsp;&nbsp;守护程序, 向所有的其他守护进程一样, 为每一个连接派生子进程. 启动的时候, 它解释rsyncd.conf, 以确认存在的模块, 并设置一些全局变量.<br/><br/>当接收到一个对已经定义的模块的连接时, 守护进程派生一个子进程去处理这个连接. 这个子进程然后去读取rsyncd.conf, 为被请求的模块设置变量, 这个工作有可能改变模块的root路径, 或者抛弃已设定的用户号和组号. 然后, 它就像其他的Rsync服务进程一样, 或者作为发送端, 或者作为接收端.<br/><br/>Rsync协议&nbsp;&nbsp; 一个良好定义的通讯协议有以下几个特性,<br/><br/>-所有的数据都在良好定义的包中发送, 包括包头, 可选的包体, 或者数据净荷.<br/>-每个包头中, 明确的指定数据类型或者命令.<br/>-每个包都有一个确定的长度.<br/><br/><br/>除了这些特性以外, 协议还应支持不同等级的状态, 包与包间的独立性, 人类可读性, 和重建一个断掉连接的能力.<br/><br/>Rsyncs协议不具备任何以上一点优秀特性. 数据作为不间断的字节流被传输. 不匹配的文件数据是一个特例, 没有包长度, 没有计数器. 每个字节的意义都是根据协议等级决定的, 都是独立的.<br/><br/>例如, 发送端要发送一个文件列表, 它就是简单的发送文件列表中的每一条, 发送结束就是一个NULL字节. 在文件列表的每一条中, 有一个比特表示数据的结构, 这些变长的字符串只是被NULL字节简单的终结. 发送端发送文件索引号和块校验对的时候, 工作方式是一样的.<br/><br/>在可靠的连接上, 这种方法工作的很好, 它比正式的协议拥有较少的开销. 但是很不幸, 它造成协议很难被文档化, 调试, 或者扩展. 每个版本的协议在线路上表现的都不同, 除非知道确切的版本号才可以参与.<br/><br/>后记<br/>文档还在继续被整理. 作者知道一定有一些明显的疏忽, 对于有些读者来说, 它更容易造成混乱, 而不是清晰. 希望它可以进化成一个有用的参考.欢迎提意见, 甚至重写的建议.<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=rsync" rel="tag">rsync</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?673</link>
<title><![CDATA[文件存储单位]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[基础知识]]></category>
<pubDate>Sat, 16 Jan 2010 06:37:41 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?673</guid> 
<description>
<![CDATA[ 
	(bit).Byte (B)<br/>KiloByte (KB)<br/>MegaByte (MB)<br/>GigaByte (GB)<br/>TeraByte (TB)<br/>PetaByte (PB)<br/>ExaByte (EB)<br/>ZetaByte (ZB)<br/>YottaByte (YB)<br/>NonaByte (NB)<br/>DoggaByte (DB)<br/><br/>本人最高只知道有 PB .
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?672</link>
<title><![CDATA[ip_conntrack: table full, dropping packet]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 12 Jan 2010 03:38:07 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?672</guid> 
<description>
<![CDATA[ 
	Oct 22 22:11:59 ha2 kernel: printk: 160 messages suppressed.<br/>Oct 22 22:11:59 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:11:59 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:03 ha2 kernel: printk: 514 messages suppressed.<br/>Oct 22 22:12:03 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:08 ha2 kernel: printk: 255 messages suppressed.<br/>Oct 22 22:12:08 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:12 ha2 kernel: printk: 498 messages suppressed.<br/>Oct 22 22:12:12 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:17 ha2 kernel: printk: 876 messages suppressed.<br/>Oct 22 22:12:17 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:22 ha2 kernel: printk: 924 messages suppressed.<br/>Oct 22 22:12:22 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:27 ha2 kernel: printk: 936 messages suppressed.<br/>Oct 22 22:12:27 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:32 ha2 kernel: printk: 959 messages suppressed.<br/>Oct 22 22:12:32 ha2 kernel: ip_conntrack: table full, dropping packet.<br/>Oct 22 22:12:37 ha2 kernel: printk: 898 messages suppressed.<br/>Oct 22 22:12:37 ha2 kernel: ip_conntrack: table full, dropping packet.<br/><br/>查看系统ip_conntrack_max大小<br/>cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max<br/>32768<br/><br/>这个值太小了<br/><br/>增大其值<br/><br/>vi /etc/sysctl.conf<br/> <br/>net.ipv4.ip_conntrack_max=6553600<br/>net.ipv4.netfilter.ip_conntrack_max=6553600<br/>net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120<br/>net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60<br/>net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120<br/> <br/>sysctl -p <br/><br/>让其生效<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=sysctl" rel="tag">sysctl</a> , <a href="http://selboo.com.cn/tag.php?tag=iptables" rel="tag">iptables</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?671</link>
<title><![CDATA[Windwos 下查看端口由那些程序开启]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[网络技术]]></category>
<pubDate>Mon, 04 Jan 2010 04:23:15 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?671</guid> 
<description>
<![CDATA[ 
	我要查看我的 TCP 80 是由那个程序监控<br/><br/>C:&#92;Documents and Settings&#92;Selboo><span style="color: #FF0000;">netstat -aon</span><br/><br/>Active Connections<br/><br/>&nbsp;&nbsp;Proto&nbsp;&nbsp;Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID<br/>&nbsp;&nbsp;TCP&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTENING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2752<br/>&nbsp;&nbsp;TCP&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0:1110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTENING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1056<br/>&nbsp;&nbsp;TCP&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0:19780&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTENING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1056<br/><br/>看到 TCP 80 是由 进程PID “2752” <br/><br/>C:&#92;Documents and Settings&#92;Selboo><span style="color: #FF0000;">tasklist</span><br/><br/>图像名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID 会话名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内存使用<br/>========================= ====== ================ ======== ============<br/>System Idle Process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28 K<br/>System&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;504 K<br/>smss.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;820 K<br/>csrss.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1268&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 15,536 K<br/>winlogon.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1292&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 30,800 K<br/>services.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1336&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4,484 K<br/>ThunderService.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2752&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 30,760 K<br/><br/>可以看到 PID “2752” 是由 进程 "ThunderService.exe" <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>很清楚吧，tor占用了你的端口<br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=tcp" rel="tag">tcp</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?670</link>
<title><![CDATA[rpm: symbol lookup error: rpm: undefined symbol: rpmcliFtsPoptTable]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 31 Dec 2009 09:01:28 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?670</guid> 
<description>
<![CDATA[ 
	[root@mlxy92 src]# rpm -qa<br/>rpm: symbol lookup error: rpm: undefined symbol: rpmcliFtsPoptTable<br/><br/>备份相关文件cp /usr/lib/librpm* /tmp/，从别的服务器上拷贝相应文件<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E9%2594%2599%25E8%25AF%25AF" rel="tag">错误</a> , <a href="http://selboo.com.cn/tag.php?tag=linux%25E5%2591%25BD%25E4%25BB%25A4" rel="tag">linux命令</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?669</link>
<title><![CDATA[rpmdb: Program version 4.3 doesn’t match environment version]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 31 Dec 2009 07:59:45 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?669</guid> 
<description>
<![CDATA[ 
	输入命令<br/>rpm -qa<br/><br/>系统报错：<br/>rpmdb: Program version 4.3 doesn’t match environment version<br/>error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch<br/>error: cannot open Packages index using db3 - (-30974)<br/>error: cannot open Packages database in /var/lib/rpm<br/><br/>解决方法：<br/>cd /var/lib/rpm<br/>rm -rf __*<br/>rpm –rebuilddb<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E9%2594%2599%25E8%25AF%25AF" rel="tag">错误</a> , <a href="http://selboo.com.cn/tag.php?tag=linux%25E5%2591%25BD%25E4%25BB%25A4" rel="tag">linux命令</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?668</link>
<title><![CDATA[Nginx状态监控总结]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[优化监控]]></category>
<pubDate>Mon, 28 Dec 2009 08:51:11 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?668</guid> 
<description>
<![CDATA[ 
	今天在整理编写nginx tips，简单的再次把nginx相关监控资料整理一下供大家参考，希望大家玩的开心，做出更强大的东西！<br/><br/>1、RRDTOOL+Perl脚本画图监控<br/>先安装好rrdtool ，关于rrdtool本文不作介绍，具体安装请参照linuxtone监控版块.<br/>#cd/usr/local/sbnin<br/>#wget http://blog.kovyrin.net/files/mrtg/rrd_nginx.pl.txt<br/>#mv rrd_nginx.pl.txtrrd_nginx.pl<br/>#chmod a+x rrd_nginx.pl<br/><br/><br/>#vi rrd_nginx.pl<br/>//配置脚本文件设置好路径<br/>#!/usr/bin/perl<br/>use RRDs;<br/>useLWP::UserAgent;<br/><br/># definelocation of rrdtool databases<br/>my $rrd ='/data/www/wwwroot/nginx/rrd';<br/># definelocation of images<br/>my $img ='/data/www/wwwroot/nginx/html';<br/># defineyour nginx stats URL<br/>my $URL ="http://219.232.244.13/nginx_status";<br/>…………<br/><br/>【注】根据自己具体的状况修改相应的路径.<br/>#crontab –e //加入如下<br/>* * * * */usr/local/sbin/rrd_nginx.pl<br/><br/>重启crond后，通过配置nginx虚拟主机指到/data/www/wwwroot/nginx/html目录，通过crond自动执行perl脚本会生成很多图片.<br/>http://xxx/connections-day.png即可看到服务器状态图。<br/><br/>2、官方Nginx-rrd 监控服务（多虚拟主机）（推荐）<br/>网址：http://www.nginx.eu/nginx-rrd.html<br/>此解决方案其实是基于上述监控方案的一个改进和增强，同样先安装好rrdtool这个画图工具和相应的perl模块再做如下操作：<br/># yum install perl-HTML*<br/><br/>先建立好生成的库存和图片存放录<br/>#mkdir -p/data/www/wwwroot/nginx/&#123;rrd,html&#125;<br/><br/>#cd/usr/local/sbin<br/>#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz<br/>#tar zxvfnginx-rrd-0.1.4.tgz<br/>#cd nginx-rrd-0.1.4<br/>#cd etc/<br/>#cp nginx-rrd.conf /etc<br/>#cd etc/cron.d<br/>#cp nginx-rrd.cron /etc/cron.d<br/><br/>#cd /usr/local/src/nginx-rrd-0.1.4/html<br/># cp index.php /data/www/wwwroot/nginx/html/<br/><br/>#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin<br/>#cp * /usr/sbin/<br/><br/><br/>#vi /etc/nginx-rrd.conf<br/>#####################################################<br/>#<br/># dirwhere rrd databases are stored<br/>RRD_DIR="/data/www/wwwroot/nginx/rrd";<br/># dirwhere png images are presented<br/>WWW_DIR="/data/www/wwwroot/nginx/html";<br/># processnice level<br/>NICE_LEVEL="-19";<br/># bin dir<br/>BIN_DIR="/usr/sbin";<br/># serversto test<br/>#server_utl;server_name<br/>SERVERS_URL="http://219.32.205.13/nginx_status;219.32.205.13<br/>http://www.linuxtone.org/nginx_status;www.linuxtone.org""<br/>//根据你的具体情况做调整.<br/><br/>SEVERS_URL 格式http://domain1/nginx_status;domain1&nbsp;&nbsp; http://domain2/nginx_status;domain2<br/>这种格式监控多虚拟主机连接状态：<br/>重点启crond服务，仍后通过http://219.32.205.13/nginx/html/<br/>即可访问。配置过程很简单！<br/><br/><br/>配置过程很简单 ，你也可以试试！<br/><br/><br/>3、CACTI模板监控Nginx<br/>利用Nginx_status状态来画图实现CACTI监控<br/>nginx编译时允许http_stub_status_module<br/><br/># vi /usr/local/nginx/conf/nginx.conf<br/>location/nginx_status &#123;<br/>stub_statuson;<br/>access_logoff;<br/>allow192.168.1.37;<br/>deny all;<br/>&#125;<br/><br/><br/># kill-HUP `cat /usr/local/nginx/logs/nginx.pid`<br/><br/># wgethttp://forums.cacti.net/download.php?id=12676<br/># tarxvfz cacti-nginx.tar.gz<br/># cpcacti-nginx/get_nginx_socket_status.pl /data/cacti/scripts/<br/># cpcacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/<br/># chmod755 /data/cacti/scripts/get_nginx*<br/><br/><br/>检测插件<br/>#/data/cacti/scripts/get_nginx_clients_status.plhttp://192.168.1.37/nginx_status<br/><br/><br/>在cacti管理面板导入<br/>cacti_graph_template_nginx_clients_stat.xml<br/>cacti_graph_template_nginx_sockets_stat.xml <br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://selboo.com.cn/tag.php?tag=web" rel="tag">web</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E7%259B%2591%25E6%258E%25A7" rel="tag">监控</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?667</link>
<title><![CDATA[linux的test命令]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 28 Dec 2009 08:49:36 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?667</guid> 
<description>
<![CDATA[ 
	=========================================================== <br/>作者: zhouwf0726(http://zhouwf0726.itpub.net)<br/>发表于:2006.07.27 16:00<br/>分类: unix、linux <br/>出处：http://zhouwf0726.itpub.net/post/9689/161749<br/>--------------------------------------------------------------- <br/><br/>每一种条件语句的基础都是判断什么是真什么是假。是否了解其工作原理将决定您编写的是质量一般的脚本还是您将引以为荣的脚本。<br/><br/>Shell 脚本的能力时常被低估，但实际上其能力的发挥受制于脚本撰写者的能力。您了解得越多，您就越能像变戏法似地撰写一个文件来使任务自动化和简化您的管理工作。<br/><br/>在 shell 脚本中进行的每一种操作（除最简单的命令编组之外）都需要检查条件。所有的 shell 脚本“逻辑” — 广义意义下的“逻辑” — 通常都可以分为以下三大类：<br/><br/>if &#123;condition exists&#125; then ...<br/>while &#123;condition exists&#125; do ...<br/>until &#123;condition exists&#125; do ...<br/><br/>无论随后的操作是什么，这些基于逻辑的命令都依靠判断一种条件是否真实存在来决定后续的操作。test 命令是使得在每一种情况下都能够确定要判断的条件是否存在的实用工具。因此，彻底了解这个命令对于撰写成功的 shell 脚本至关重要。<br/><br/>工作原理<br/><br/>test 命令最短的定义可能是评估一个表达式；如果条件为真，则返回一个 0 值。如果表达式不为真，则返回一个大于 0 的值 — 也可以将其称为假值。检查最后所执行命令的状态的最简便方法是使用 $? 值。出于演示的目的，本文中的例子全部使用了这个参数。<br/><br/>test 命令期望在命令行中找到一个参数，当 shell 没有为变量赋值时，则将该变量视为空。这意味着在处理脚本时，一旦脚本寻找的参数不存在，则 test 将报告该错误。<br/><br/>当试图保护脚本时，您可以通过将所有参数包含在双引号中来解决这个问题。然后 shell 将变量展开，如果变量没有值，那么将传递一个空值给 test。另一种方法是在脚本内增加一个额外检查过程来判断是否设置了命令行参数。如果没有设置命令行参数，那么脚本会告诉用户缺少参数，然后退出。我们会通过一些例子来更具体地说明所有这些内容。<br/><br/>test 和 [ 命令<br/><br/>虽然 Linux 和 UNIX 的每个版本中都包含 test 命令，但该命令有一个更常用的别名 — 左方括号：[。test 及其别名通常都可以在 /usr/bin 或 /bin （取决于操作系统版本和供应商）中找到。<br/><br/>当您使用左方括号而非 test 时，其后必须始终跟着一个空格、要评估的条件、一个空格和右方括号。右方括号不是任何东西的别名，而是表示所需评估参数的结束。条件两边的空格是必需的，这表示要调用 test，以区别于同样经常使用方括号的字符/模式匹配操作。<br/><br/>test 和 [ 的语法如下：<br/><br/>test expression<br/>[ expression ]<br/><br/>在这两种情况下，test 都评估一个表达式，然后返回真或假。如果它和 if、while 或 until 命令结合使用，则您可以对程序流进行广泛的控制。不过，您无需将 test 命令与任何其它结构一起使用；您可以从命令行直接运行它来检查几乎任何东西的状态。<br/><br/>因为它们彼此互为别名，所以使用 test 或 [ 均需要一个表达式。表达式一般是文本、数字或文件和目录属性的比较，并且可以包含变量、常量和运算符。运算符可以是字符串运算符、整数运算符、文件运算符或布尔运算符 — 我们将在以下各部分依次介绍每一种运算符。<br/><br/>test 文件运算符<br/><br/>利用这些运算符，您可以在程序中根据对文件类型的评估结果执行不同的操作：<br/><br/>-b file 如果文件为一个块特殊文件，则为真<br/>-c file 如果文件为一个字符特殊文件，则为真<br/>-d file 如果文件为一个目录，则为真<br/>-e file 如果文件存在，则为真<br/>-f file 如果文件为一个普通文件，则为真<br/>-g file 如果设置了文件的 SGID 位，则为真<br/>-G file 如果文件存在且归该组所有，则为真<br/>-k file 如果设置了文件的粘着位，则为真<br/>-O file 如果文件存在并且归该用户所有，则为真<br/>-p file 如果文件为一个命名管道，则为真<br/>-r file 如果文件可读，则为真<br/>-s file 如果文件的长度不为零，则为真<br/>-S file 如果文件为一个套接字特殊文件，则为真<br/>-t fd 如果 fd 是一个与终端相连的打开的文件描述符（fd 默认为 1），则为真<br/>-u file 如果设置了文件的 SUID 位，则为真<br/>-w file 如果文件可写，则为真<br/>-x file 如果文件可执行，则为真<br/><br/>以下示例显示了此简单操作的运行情况：<br/><br/>$ ls -l<br/>total 33<br/>drwxr-xr-w 2 root root 1024 Dec 5 05:05 LST<br/>-rw-rw-rw- 1 emmett users 27360 Feb 6 07:30 evan<br/>-rwsrwsrwx 1 root root 152 Feb 6 07:32 hannah<br/>drwxr-xr-x 2 emmett users 1024 Feb 6 07:31 karen<br/>-rw------- 1 emmett users 152 Feb 6 07:29 kristin<br/>-rw-r--r-- 1 emmett users 152 Feb 6 07:29 spencer<br/>$<br/><br/>$ test -r evan<br/>$ echo $?<br/>0<br/><br/>$ test -r walter<br/>$ echo $?<br/>1<br/>$<br/><br/>由于第一次评估为真 — 文件存在且可读 — 返回值为真，或 0。由于第二次评估的文件不存在，该值为假，返回值不为零。将值指定为零或非零很重要，因为在失败时不会始终返回 1（虽然这是通常返回的值），可能返回一个非零值。<br/><br/>正如开头所提到的，除了使用 test 外，您还可以用方括号 [ ] 将命令括住来向 shell 发出同样的命令 — 如下所示：<br/><br/>$ [ -w evan ]<br/>$ echo $?<br/>0<br/>$ [ -x evan ]<br/>$ echo $?<br/>1<br/>$<br/><br/>同样，第一个表达式为真，第二个表达式为假 — 正如返回值所指示的那样。您还可以使用以下命令将两个文件彼此进行比较：<br/><br/>file1 -ef file2 测试以判断两个文件是否与同一个设备相连，是否拥有相同的 inode 编号<br/>file1 -nt file2 测试以判断第一个文件是否比第二个文件更新（由修改日期决定）<br/>file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧<br/><br/>以下示例显示了使用这些运算符比较文件的结果：<br/><br/>$ [ evan -nt spencer ]<br/>$ echo $?<br/>0<br/>$ [ karen -ot spencer ]<br/>$ echo $?<br/>1<br/>$<br/><br/>名为 evan 的文件比名为 spencer 的文件更新，因而评估为真。类似地，名为 karen 的文件比名为 spencer 的文件更新，因此该评估为假。<br/><br/>字符串比较运算符<br/><br/>如标题所示，这组函数比较字符串的值。您可以检查它们是否存在、是否相同或者是否不同。<br/><br/>String 测试以判断字符串是否不为空<br/>-n string 测试以判断字符串是否不为空；字符串必须为 test 所识别<br/>-z string 测试以判断字符串是否为空；字符串必须为 test 所识别<br/>string1 = string2 测试以判断 string1 是否与 string2 相同<br/>string1 != string2 测试以判断 string1 是否与 string2 不同<br/><br/>对任何变量进行的最有用的测试之一是判断它的值是否不为空，可以简单地将其放在 test 命令行中执行这种测试，如下例所示：<br/><br/>$ test "$variable"<br/><br/>强烈建议进行此种测试时用双引号将变量括住，以让 shell 识别变量（即使变量为空）。默认情况下执行的基本字符串评估和 -n 测试从功能上讲是相同的，如以下示例所示：<br/><br/>#example1<br/>if test -n "$1" <br/>then<br/>echo "$1" <br/>fi<br/><br/>执行以上例子中的代码将根据 $1 是否存在给出以下结果：<br/><br/>$ example1 friday<br/>friday<br/>$<br/>$ example1<br/>$<br/><br/>如果将代码更改为以下形式，则结果将相同：<br/><br/>#example2<br/>if test "$1" <br/>then<br/>echo "$1" <br/>fi<br/><br/>如下所示：<br/><br/>$ example2 friday<br/>friday<br/>$<br/>$ example2<br/>$<br/><br/>所有这些表明，通常不需要 -n，它代表默认操作。<br/><br/>要从一个不同的角度来查看各种可能性，您可以用另一个选项来替换 -n，并检查该值是否为空（相对于非空）。这可以用 -z 选项来实现，代码为：<br/><br/>#example3<br/>if test -z "$1" <br/>then<br/>echo "no values were specified" <br/>fi<br/><br/>运行如下：<br/><br/>$ example3 <br/>no values were specified <br/>$ example3 friday<br/>$ <br/><br/>如果在没有命令行参数的情况下运行该程序，而表达式评估为真，那么将执行程序块中的文本。如果在命令行中有值，则脚本退出，不执行任何操作。将评估操作放在脚本的开头非常有用，这可以在可能产生错误的进一步处理之前预先检查变量值。<br/><br/>其余的字符串运算符对两个变量/字符串之间的精确匹配或其中的差异（您也可以称之为等价性和“不等价性”)进行评估。第一个例子对匹配进行测试：<br/><br/>$ env<br/>LOGNAME=emmett<br/>PAGER=less<br/>SHELL=/bin/bash<br/>TERM=linux<br/>$<br/>$ [ "$LOGNAME" = "emmett" ]<br/>$ echo $?<br/>0<br/>$<br/>$ [ "$LOGNAME" = "kristin" ]<br/>$ echo $?<br/>1<br/>$<br/><br/>或者，该评估可以以脚本的形式用于决定是否运行脚本：<br/><br/>#example4<br/>if [ "$LOGNAME" = "emmett" ]<br/>then<br/>echo "processing beginning"<br/>else <br/>echo "incorrect user"<br/>fi<br/><br/>这种方法可以用来寻找任意的值（如终端类型或 shell 类型），在允许脚本运行之前这些值必须匹配。请注意，= 或 != 运算符的优先级高于其它大多数可指定选项，且要求必须伴有表达式。因此，除了比较字符串的选项之外，= 或 != 都不能和检查某种东西（如可读文件、可执行文件或目录）的存在性的选项一起使用。<br/><br/>整数比较运算符<br/><br/>正如字符串比较运算符验证字符串相等或不同一样，整数比较运算符对数字执行相同的功能。如果变量的值匹配则表达式测试为真，如果不匹配，则为假。整数比较运算符不处理字符串（正如字符串运算符不处理数字一样）：<br/><br/>int1 -eq int2 如果 int1 等于 int2，则为真<br/>int1 -ge int2 如果 int1 大于或等于 int2，则为真<br/>int1 -gt int2 如果 int1 大于 int2，则为真<br/>int1 -le int2 如果 int1 小于或等于 int2，则为真<br/>int1 -lt int2 如果 int1 小于 int2，则为真<br/>int1 -ne int2 如果 int1 不等于 int2，则为真<br/><br/>以下示例显示了一个代码段，其中在命令行中给出的值必须等于 7:<br/><br/>#example5<br/>if [ $1 -eq 7 ]<br/>then<br/>echo "You've entered the magic number."<br/>else <br/>echo "You've entered the wrong number."<br/>fi<br/><br/>运行中：<br/><br/>$ example5 6<br/>You've entered the wrong number.<br/>$<br/>$ example5 7<br/>You've entered the magic number.<br/>$<br/><br/>和字符串一样，比较的值可以是在脚本外为变量赋的值，而不必总是在命令行中提供。以下示例演示了实现这一点的一种方法：<br/><br/>#example6<br/>if [ $1 -gt $number ]<br/>then<br/>echo "Sorry, but $1 is too high."<br/>else <br/>echo "$1 will work."<br/>fi<br/><br/>$ set number=7<br/>$ export number<br/>$ example6 8<br/>Sorry, but 8 is too high.<br/>$ example6 7<br/>7 will work.<br/>$<br/><br/>整数比较运算符最佳的用途之一是评估指定的命令行变量的数目，并判断它是否符合所要求的标准。例如，如果某个特定的命令只能在有三个或更少变量的情况下运行，<br/><br/>#example7 - display variables, up to three<br/>if [ "$#" -gt 3 ]<br/>then<br/>echo "You have given too many variables."<br/>exit $#<br/>fi<br/><br/>只要指定三个或更少的变量，该示例脚本将正常运行（并返回值 0）。如果指定了三个以上的变量，则将显示错误消息，且例程将退出 — 同时返回与命令行中给定的变量数相等的退出代码。<br/><br/>对这个过程进行修改可以用来在允许运行报表之前判断当天是否是本月的最后几天：<br/><br/>#example8 - to see if it is near the end of the month#<br/>set `date` # use backward quotes<br/>if [ "$3" -ge 21 ]<br/>then<br/>echo "It is close enough to the end of the month to proceed"<br/>else <br/>echo "This report cannot be run until after the 21st of the month" <br/>exit $3<br/>fi<br/><br/>在这个例子中，设置了六个变量（通过空格彼此分开）：<br/><br/>$1 = Fri<br/>$2 = Feb<br/>$3 = 6<br/>$4 = 08:56:30<br/>$5 = EST<br/>$6 = 2004<br/><br/>这些值可以在脚本中使用，就像它们是在命令行中输入的一样。请注意，退出命令再次返回一个值 — 在这种情况下，返回的值是从 $3 的值中得到的日期。这一技巧在故障诊断时会非常有用 — 如果您认为脚本应该运行而没有运行，那么请查看 $? 的值。<br/><br/>一种类似的想法可能是撰写一个只在每个月的第三个星期三运行的脚本。第三个星期三一定在该月的 15 日到 21 日之间。使用 cron，您可以调用脚本在 15 日到 21 日之间每天的一个指定时间运行，然后使用脚本的第一行检查 $1（在设置日期之后）的值是否为 Thu。如果为 Thu，那么执行剩下的脚本，如果不是，则退出。<br/><br/>而另一个想法可能是，只允许脚本在超过 6:00 p.m. (18:00)，所有用户都回家之后运行。只要撰写脚本，使其在值低于 18 时退出，并通过使用以下命令来获取时间（将其设为 $1）<br/><br/>set `date +%H`<br/><br/>布尔运算符<br/><br/>布尔运算符在几乎每种语言中的工作方式都相同 — 包括 shell 脚本。在 nutshell 中，它们检查多个条件为真或为假，或者针对假的条件而不是真的条件采取操作。与 test 搭配使用的运算符有<br/><br/>! expr 如果表达式评估为假，则为真<br/>expr1 -a expr2 如果 expr1 和 expr2 评估为真，则为真<br/>expr1 -o expr2 如果 expr1 或 expr2 评估为真，则为真<br/><br/>可以用 != 运算符代替 = 进行字符串评估。这是最简单的布尔运算符之一，对 test 的正常结果取非。<br/><br/>其余两个运算符中的第一个是 -a（即 AND）运算符。要使测试最终为真，两个表达式都必须评估为真。如果任何一个评估为假，则整个测试将评估为假。例如，<br/><br/>$ env<br/>HOME=/<br/>LOGNAME=emmett<br/>MAIL=/usr/mail/emmett<br/>PATH=:/bin:/usr/bin:/usr/lbin<br/>TERM=linux<br/>TZ=EST5:0EDT<br/>$<br/>$ [ "$LOGNAME" = "emmett" -a "$TERM" = "linux" ]<br/>$ echo $?<br/>0<br/>$<br/><br/>$ [ "LOGNAME" = "karen" -a "$TERM" = "linux" ]<br/>$ echo $?<br/>1<br/>$<br/><br/>在第一个评估中，两个条件都测试为真（在一个 linux 终端上登录的是 emmett），因此整个评估为真。在第二个评估中，终端检查正确但用户不正确，因此整个评估为假。<br/><br/>简而言之，AND 运算符可以确保代码只在两个条件都满足时才执行。相反，只要任何一个表达式测试为真，OR (-o) 运算符即为真。我们来修改先前的例子，并将其放到一个脚本中来说明这一点：<br/><br/>#example9<br/>if [ "$LOGNAME" = "emmett" -o "$TERM" = "linux" ]<br/>then<br/>echo "Ready to begin."<br/>else <br/>echo "Incorrect user and terminal." <br/>fi<br/><br/>$ env<br/>HOME=/<br/>LOGNAME=emmett<br/>MAIL=/usr/mail/emmett<br/>PATH=:/bin:/usr/bin:/usr/lbin<br/>TERM=linux<br/>TZ=EST5:0EDT<br/>$ example9<br/>Ready to begin.<br/>$<br/>$ LOGNAME=karen<br/>$ example9<br/>Ready to begin.<br/>$<br/><br/>在脚本第一次运行时，评估判断用户是否等于 emmett。如果发现用户等于 emmett，则脚本转至 echo 语句，并跳过其余的检查。它从不检查终端是否等于 linux，因为它只需要找到一条为真的语句就可以使整个运算为真。在脚本第二次运行时，它判断用户不是 emmett，因此它将检查并发现终端确实是 linux。由于一个条件为真，脚本现在转至 echo 命令。为了引出第二条消息，两个条件都必须为假。<br/><br/>在先前确定时间是否为月末的例子中，可以执行类似的检查来防止用户试图在周末运行脚本：<br/><br/>#example10 - Do not let the script run over the weekend#<br/>set `date` # use backward quotes<br/>if [ "$1" = "Sat" -o "$1" = "Sun" ]<br/>then<br/>echo "This report cannot be run over the weekend." <br/><br/>fi<br/><br/>一些有用的示例<br/><br/>示例 1：在脚本文件中出现的“逻辑”的最简单的形式（如本文所有示例中所示）是“if ... then”语句。先前的一个代码段检查是否存在一定数量的变量，然后将这些变量回显。假设我们对此稍微做一些修改，比如我们想回显变量，并且每次回显均减去最左边的变量，以显示一个倒的三角形。<br/><br/>虽然这听起来很简单，但实际并非如此；这是您在执行大规模处理时想实现的方式：处理第一个变量、转移、处理下一个变量……<br/><br/>出于演示的目的，可以按以下方式撰写脚本中的重要行：<br/><br/>#example11 - display declining variables, up to three<br/>if [ "$#" -gt 3 ] # see if more than three variables are given<br/>then<br/>echo "You have given more than three variables." <br/><br/>exit<br/>fi<br/>echo $*<br/>if test -n "$2"<br/>then<br/>shift<br/>echo $*<br/>fi<br/>if test -n "$2"<br/>then<br/>shift<br/>echo $*<br/>fi<br/><br/>它将按以下方式执行：<br/><br/>$ example11 one<br/>one<br/>$<br/><br/>$ example11 one two<br/>one two<br/>two<br/>$<br/><br/>$ example11 one two three<br/>one two three<br/>two three<br/>three<br/>$<br/><br/>$ example11 one two three four<br/>You have given more than three variables.<br/>$<br/><br/>出于检查的目的将数量限制为三个变量的原因是减少在例子中要检查的行数。一切都按部就班地进行，虽然它令人难以置信地混乱；用户因使用了超过程序依设计所能处理的变量数而得到警告，且脚本退出。如果变量数为 3 或更少，则运算的核心部分开始执行。<br/><br/>回显变量，执行测试以查看另一个变量是否存在。如果另一个变量存在，则执行一次转移，回显该变量，执行另一测试，等等。总共使用了 16 个有效行，而程序仅能处理不超过三个变量 — 非常混乱。假设消除变量数的限制，程序可以处理任意数量的变量。经过一些修改，脚本被缩短（美化）了，并能处理任意数量的变量：<br/><br/>#example12 - display declining variables, any number<br/>while [ "$#" -gt 0 ]<br/>do<br/>echo $*<br/>shift<br/>done<br/><br/>$ example12 1 2 3 4 5 6 7 8 9 0<br/>1 2 3 4 5 6 7 8 9 0<br/>2 3 4 5 6 7 8 9 0<br/>3 4 5 6 7 8 9 0<br/>4 5 6 7 8 9 0<br/>5 6 7 8 9 0<br/>6 7 8 9 0<br/>7 8 9 0<br/>8 9 0<br/>9 0<br/>0<br/><br/>现在减少到只有 5 个有效行，且消除了第一个脚本三个变量的限制，并在运行时要更高效。<br/><br/>示例 2：无论何时当在脚本内执行与处理相关的操作时，下一个操作将始终检查上一操作的状态，以确认它已成功完成。您可以通过检查 $? 的状态并验证它等于 0 来实现这一目的。例如，如果一个数据目录是否能访问非常重要，<br/><br/>#example13<br/>TEMP=LST<br/>cd $TEMP<br/>if [ $?-ne 0 ]<br/>then<br/>echo "Data directory could not be found." <br/>Exit<br/>fi<br/><br/>处理错误<br/><br/>资源<br/><br/>下载针对 Linux 的 Oracle 数据库 10g<br/>Oracle 数据库 10g 第 1 版 (10.1.0.2) 现在可用于 Linux x86 和 Linux Itanium 平台；请在此从 OTN 上免费下载。<br/><br/>访问 Linux 技术中心<br/>收藏本页，以获取关于 Linux 系统管理员最佳应用的一般技术信息，以及关于 Oracle-on-Linux 产品群的具体技术信息。<br/><br/>相关文章<br/><br/>Linux 相关技术文章的存档<br/><br/>test 命令常常出现的错误事实上只有两种类型。第一种是未使用正确的评估类型，例如将字符串变量与整型变量进行比较或者将带填充的字符串与不带填充的字符串进行比较。仔细评估您使用的变量将使您最终找到错误的根源，并让您能够解决这些问题。<br/><br/>第二种错误类型包括将方括号误认为别名之外的某个东西。方括号与其内容之间必须有一个空格；否则，它们将不能解释其中的对象。例如，<br/><br/>$ [ "$LOGNAME" -gt 9]<br/>test:] missing<br/>$<br/><br/>请注意，错误消息指示 test 存在问题，即使使用了别名 ]。这些问题很容易发现，因为错误消息准确地将这些问题显示出来，然后您可以增加必要的空格。<br/><br/>结论<br/><br/>要在 shell 脚本中构建逻辑，您必须添加条件语句。每一条这种语句的核心都是对条件的评估，以判断它是否存在 — 通过使用 test 命令完成评估。了解它和它的别名（左方括号 ([）的工作原理将使您能够撰写可以完成一些复杂操作的 shell 脚本。<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=linux%25E5%2591%25BD%25E4%25BB%25A4" rel="tag">linux命令</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?666</link>
<title><![CDATA[更改Innodb 数据页大小优化MySQL]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Thu, 24 Dec 2009 03:24:57 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?666</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp; 作者：吴炳锡　来源：http://www.mysqlsupport.cn/ 联系方式： wubingxi#gmail.com <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们知道Innodb的数据页是16K,而且是一个硬性的规定，系统里没更改的办法，希望将来MySQL也能也Oracle一样支持多种数据页的大小。<br/>但实际应用中有时16K显的有点大了，特别是很多业务在Oracle或是SQL SERVER运行的挺好的情况下迁到了MySQL上发现IO增长太明显的情况下，<br/>就会想到更改数据页大小了。<br/>　　实际上innodb的数据页大小也是可以更改的，只是需要在源码层去更改，然后重新rebuild一下MySQL.<br/>&nbsp;&nbsp;&nbsp;&nbsp;更改办法：<br/>&nbsp;&nbsp;&nbsp;&nbsp;(以MySQL-5.1.38源码为例）<br/>&nbsp;&nbsp;&nbsp;&nbsp;位置在storage/innobase/include/univ.i ，在univ.i中查找：UNIV_PAGE_SIZE<br/><br/><div class="code">/*<br/>&nbsp;&nbsp; DATABASE VERSION CONTROL<br/>&nbsp;&nbsp; ========================<br/>*/<br/> <br/>/* The universal page size of the database */<br/>#define UNIV_PAGE_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2 * 8192) /* NOTE! Currently, this has to be a<br/>&nbsp;&nbsp;&nbsp;&nbsp; power of 2 */<br/>/* The 2-logarithm of UNIV_PAGE_SIZE: */<br/>#define UNIV_PAGE_SIZE_SHIFT 14<br/> <br/>/* Maximum number of parallel threads in a parallelized operation */<br/>#define UNIV_MAX_PARALLELISM 32</div><br/><br/>&nbsp;&nbsp; UNIV_PAGE_SIZE就是数据页大小，默认的是16K. 后面的备注里标明，该值是可以设置必须为2的次方。对于该值可以设置成4k,8k,16k,32K,64K，在大也没意义了。<br/>同时更改了UNIV_PAGE_SIZE后需要更改 UNIV_PAGE_SIZE_SHIFT 该值是2的多少次方为UNIV_PAGE_SIZE，所以设置数据页分别情况如下：<br/><br/><div class="code">#define UNIV_PAGE_SIZE_SHIFT 12&nbsp;&nbsp;if UNIV_PAGE_SIZ=4K<br/>#define UNIV_PAGE_SIZE_SHIFT 13&nbsp;&nbsp;if UNIV_PAGE_SIZ=8K<br/>#define UNIV_PAGE_SIZE_SHIFT 15&nbsp;&nbsp;if UNIV_PAGE_SIZ=32K</div><br/><br/>例子：<br/>　更改innodb的数据页为8K,相应修改为：<br/><br/><div class="code">/*<br/>&nbsp;&nbsp; DATABASE VERSION CONTROL<br/>&nbsp;&nbsp; ========================<br/>*/<br/> <br/>/* The universal page size of the database */<br/>#define UNIV_PAGE_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8192&nbsp;&nbsp; /* NOTE! Currently, this has to be a<br/>&nbsp;&nbsp;&nbsp;&nbsp; power of 2 */<br/>/* The 2-logarithm of UNIV_PAGE_SIZE: */<br/>#define UNIV_PAGE_SIZE_SHIFT 13<br/> <br/>/* Maximum number of parallel threads in a parallelized operation */<br/>#define UNIV_MAX_PARALLELISM 32 </div><br/><br/>重新编译，然后测试测试，再测试。Good luck!<br/>=====================================<br/>mysql.5.0.88 在 innobase/include/univ.i<br/><br/>测试插入2000W 条数据的<br/><br/>修改前<br/>&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;&nbsp; Query OK, 1 row affected (23 min 41.56 sec)<br/>&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;&nbsp; Query OK, 1 row affected (23 min 52.65 sec) <br/><br/>修改后<br/>&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;&nbsp; Query OK, 1 row affected (14 min 14.90 sec)<br/>&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;&nbsp; Query OK, 1 row affected (14 min 23.79 sec)<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=mysql" rel="tag">mysql</a> , <a href="http://selboo.com.cn/tag.php?tag=innodb" rel="tag">innodb</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?664</link>
<title><![CDATA[思维导图]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Wed, 23 Dec 2009 08:58:06 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?664</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/iptables.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/iptables.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/PHP5%20OOP.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/PHP5%20OOP.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/SNMP.bmp" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/SNMP.bmp" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/awk.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/awk.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/iptable.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/iptable.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/PHP.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/PHP.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/preg.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/preg.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/python.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/python.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/rrdtool.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/rrdtool.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/sed.png" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/sed.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=2" target="_blank">PHP OOP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=3" target="_blank">SNMP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=4" target="_blank">awk</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=5" target="_blank">iptablp</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=6" target="_blank">PHP</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=7" target="_blank">prel</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=9" target="_blank">rrdtool</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=10" target="_blank">sed</a><br/><a href="http://selboo.com.cn/read.php?entryid=664&page=1&part=11" target="_blank">VI</a></span><br/><br/><a href="http://selboo.com.cn/book/img/swdt/vi.jpg" target="_blank"><img src="http://selboo.com.cn/book/img/swdt/vi.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?663</link>
<title><![CDATA[ 改变linux shell的输出效果]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Shell]]></category>
<pubDate>Tue, 15 Dec 2009 08:14:13 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?663</guid> 
<description>
<![CDATA[ 
	echo -e "&#92;033[32;49;1m [DONE] &#92;033[39;49;0m"<br/>输出结果&nbsp;&nbsp;&nbsp;&nbsp; ：[DONE]<br/>把知识延伸下：（以下转载）<br/>＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃<br/>文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例：<br/><br/>　　echo -e "&#92;033[44;37;5m ME &#92;033[0m COOL"<br/><br/>以上命令设置背景成为蓝色，前景白色，闪烁光标，输出字符“ME”，然后重新设置屏幕到缺省设置，输出字符 “COOL”。“e”是命令 echo 的一个可选项，它用于激活特殊字符的解析器。“&#92;033”引导非常规字符序列。“m”意味着设置属性然后结束非常规字符序列，这个例子里真正有效的字符是 “44;37;5” 和“0”。<br/><br/>修改“44;37;5”可以生成不同颜色的组合，数值和编码的前后顺序没有关系。可以选择的编码如下所示：<br/><br/>编码&nbsp;&nbsp;&nbsp;&nbsp;颜色/动作 <br/>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重新设置属性到缺省设置 <br/>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置粗体 <br/>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置一半亮度（模拟彩色显示器的颜色） <br/>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置下划线（模拟彩色显示器的颜色） <br/>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置闪烁 <br/>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置反向图象 <br/>22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置一般密度 <br/>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关闭下划线 <br/>25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关闭闪烁 <br/>27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关闭反向图象 <br/>30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置黑色前景 <br/>31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置红色前景 <br/>32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置绿色前景 <br/>33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置棕色前景 <br/>34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置蓝色前景 <br/>35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置紫色前景 <br/>36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置青色前景 <br/>37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置白色前景 <br/>38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在缺省的前景颜色上设置下划线 <br/>39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在缺省的前景颜色上关闭下划线 <br/>40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置黑色背景 <br/>41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置红色背景 <br/>42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置绿色背景 <br/>43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置棕色背景 <br/>44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置蓝色背景 <br/>45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置紫色背景 <br/>46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置青色背景 <br/>47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置白色背景 <br/>49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置缺省黑色背景<br/><br/><br/><br/>其他有趣的代码还有：<br/><br/>&#92;033[2J&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　清除屏幕 <br/>&#92;033[0q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　关闭所有的键盘指示灯 <br/>&#92;033[1q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　设置“滚动锁定”指示灯 (Scroll Lock) <br/>&#92;033[2q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　设置“数值锁定”指示灯 (Num Lock) <br/>&#92;033[3q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　设置“大写锁定”指示灯 (Caps Lock) <br/>&#92;033[15:40H&nbsp;&nbsp;&nbsp;&nbsp; 把关闭移动到第15行，40列 <br/>&#92;007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　发蜂鸣生beep<br/><br/>＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃<br/>RedHat的字体和背景颜色的改变方法：<br/>命令：<br/>PS1="[&#92;e[32;1m&#92;u@&#92;h &#92;W]&#92;&#92;$" <br/>或 <br/>export PS1="[&#92;e[32;1m&#92;u@&#92;h &#92;W]&#92;&#92;$" 两者的区别请查看环境变量的相关资料<br/>解释：<br/>&#92;e[32;1m：这就是控制字体和背景颜色的转义字符，30~37是字体颜色、40~47是背景颜色<br/>例子中的32;1m数字的位置是可以对调的如&#92;e[1;32m，如果是在X环境下可以更换一下1的范围0~10，可能有的没用处：0或者不写（&#92;e [0;32m或&#92;e[;32m）显示浅颜色，1：显示高亮 4：加下划线.....如果改后的效果不好，但是又还原不了，那就不写m前面的数字，如&#92;e[32;m，或者直接注销再登陆<br/>&#92;u &#92;h &#92;W：这是一些转义字符，下面详细解释：<br/>&#92;d ：代表日期，格式为weekday month date，例如："Mon Aug 1"<br/>&#92;H ：完整的主机名称。例如：我的机器名称为：fc4.linux，则这个名称就是fc4.linux<br/>&#92;h ：仅取主机的第一个名字，如上例，则为fc4，.linux则被省略<br/>&#92;t ：显示时间为24小时格式，如：HH：MM：SS<br/>&#92;T ：显示时间为12小时格式<br/>&#92;A ：显示时间为24小时格式：HH：MM<br/>&#92;u ：当前用户的账号名称<br/>&#92;v ：BASH的版本信息<br/>&#92;w ：完整的工作目录名称。家目录会以 ~代替<br/>&#92;W ：利用basename取得工作目录名称，所以只会列出最后一个目录<br/>&#92;# ：下达的第几个命令<br/>&#92;$ ：提示字符，如果是root时，提示符为：# ，普通用户则为：$<br/>&#92;n ：新建一行<br/>字体并不局限于一个颜色，可以有多个颜色：<br/>PS1="[&#92;e[32;1m&#92;u@&#92;e[35;1m&#92;h &#92;e[31;1m&#92;W]&#92;&#92;$"<br/>以上两个命令在注销后再登陆就失效了，用下面方法使其永久生效：<br/>vi /etc/profile <br/>在“export PATH .....”下面添加一行：export PS1="[&#92;e[32;1m&#92;u@&#92;h &#92;W]&#92;&#92;$"<br/>注销再登陆，就成功了，如果没生效，使用source /etc/profile 命令试试，或者直接重启机器。<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=shell" rel="tag">shell</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?662</link>
<title><![CDATA[cacti性能优化笔记]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[优化监控]]></category>
<pubDate>Tue, 15 Dec 2009 08:02:41 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?662</guid> 
<description>
<![CDATA[ 
	From：http://zys.8800.org/index.php/archives/391<br/><br/>目标:<br/><br/>单台Cacti服务器，同时监控1000+ Server，50000+ RRD 文件. 保证图表数据的连续和流畅，每一轮数据采集时间控制在3分钟之内。<br/><br/>硬件环境:<br/>Intel(R) Xeon(R) CPU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E5420&nbsp;&nbsp;@ 2.50GHz&nbsp;&nbsp;4 cores<br/>4G memory<br/>normal sata disk<br/><br/><br/>优化步骤:<br/><br/>1，优化数据库schema，建立合理的索引<br/><br/>cacti默认的cacti.sql建立的数据库模型，竟然一个Index都没有建。每次执行poller.php的时候，主要的时间，都花费在数据库查询上。使用下面的sql语句，建立一系列索引，弥补默认的cacti.sql中缺乏index的缺点。可以有效的提高poller.php执行的效率，缩短更新RRD文件所需的时间<br/><br/>CREATE INDEX `data_template_data_id` ON `data_input_data` (`data_template_data_id`);<br/>CREATE INDEX `host_id_snmp_query_id_snmp_index` ON data_local (`host_id`,`snmp_query_id`,`snmp_index`);<br/>CREATE INDEX `local_data_id_data_source_name` ON data_template_rrd (`local_data_id`,`data_source_name`);<br/>CREATE INDEX `graph_template_id_local_graph_id` ON graph_templates_item (`graph_template_id`,`local_graph_id`);<br/>CREATE INDEX `local_graph_template_item_id` ON graph_templates_item (`local_graph_template_item_id`);<br/>CREATE INDEX `host_id_snmp_query_id_snmp_index` ON host_snmp_cache (`host_id`,`snmp_query_id`,`snmp_index`);<br/>CREATE INDEX `local_data_id_rrd_path` ON poller_item (`local_data_id`,`rrd_path`);<br/>CREATE INDEX `host_id_rrd_next_step` ON poller_item (`host_id`,`rrd_next_step`);<br/>CREATE INDEX host_id_snmp_query_id ON host_snmp_cache (host_id,snmp_query_id);<br/>CREATE INDEX host_id_snmp_port ON poller_item (host_id,snmp_port);<br/>CREATE INDEX data_source_path ON data_template_data (data_source_path);<br/><br/>2，使用spine替代默认的cmd.php来采集数据<br/><br/>wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.7e.tar.gz<br/>tar zxvf cacti-spine-0.8.7e.tar.gz<br/>cd cacti-spine-0.8.7e<br/><br/>wget http://www.cacti.net/downloads/spine/patches/snmp_v3_fix.patch<br/>wget http://www.cacti.net/downloads/spine/patches/mysql_client_reconnect.patch<br/>wget http://www.cacti.net/downloads/spine/patches/ping_reliability.patch<br/>patch -p1 -N < snmp_v3_fix.patch<br/>patch -p1 -N < mysql_client_reconnect.patch<br/>patch -p1 -N < ping_reliability.patch<br/><br/>./configure –prefix=cacti_install_dir<br/>make<br/>make install<br/><br/>然后编辑cacti_install_dir/etc/spine.conf<br/>修改DB_HOST DB_DATABASE DB_USER DB_PASSWORD几个参数<br/>最后，在cacti的setting->poller页面里，将poller type设置成spine，同时设置spine的Maximum Threads per Process， Number of PHP Script Servers， Script and Script Server Timeout Value几个参数。<br/>通常会把Maximum Threads per Process设置成cpu * 2。在这里，我们设置成8.<br/><br/><br/>3, 重构rra文件的目录结构，为每个device建立单独的rra目录<br/>首先在crontab里禁用poller.php，然后执行cacti_install_dir/cli目录下的structure_rra_paths.php，它会将所有的RRD文件按照device重新分配目录，并修改数据库中的RRD路径，成功执行后，再恢复poller.php的crontab就可以了。<br/>按照上面3个步骤，710台服务器，24000个RRD文件，完成一次poller.php的时间，缩短到50 seconds。实现了最初的目的。<br/><br/>TODO:<br/><br/>在执行poller.php的时候, 监控服务器的load达到了3，通过vmstat查看，显示负载主要在I/O。在目前的情况，如果再出现瓶颈，可以考虑安装Boost插件来进一步提供性能。<br/>cacti主要通过snmp来采集数据，可以引入collected等客户端，提供数据采集的可靠性。<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=cacti" rel="tag">cacti</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E7%259B%2591%25E6%258E%25A7" rel="tag">监控</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E4%25BC%2598%25E5%258C%2596" rel="tag">优化</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?661</link>
<title><![CDATA[nginx编译优化测试]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[优化监控]]></category>
<pubDate>Mon, 14 Dec 2009 00:51:42 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?661</guid> 
<description>
<![CDATA[ 
	默认nginx使用的GCC编译参数是-O<br/>需要更加优化可以使用以下两个参数<br/>–with-cc-opt=’-O3′ &#92;<br/>–with-cpu-opt=opteron &#92;<br/>使得编译针对特定CPU以及增加GCC的优化<br/>针对优化后的结果.我们进行测试<br/>结果表明使用-O2以及以上的参数,可以微量增加性能1%左右.<br/>而O2和O3基本可以认为是相同的.<br/><br/>./http_load -parallel 100 -seconds 10 urls<br/>10811 fetches, 100 max parallel, 5.23252e+06 bytes, in 10 seconds<br/>1.默认参数 -O<br/>1087.2 fetches/sec, 526204 bytes/sec<br/>msecs/connect: 45.5374 mean, 63.984 max, 1.008 min<br/>msecs/first-response: 45.7679 mean, 64.201 max, 2.216 min<br/><br/>1088.9 fetches/sec, 527027 bytes/sec<br/>msecs/connect: 45.0159 mean, 65.291 max, 0.562 min<br/>msecs/first-response: 46.1236 mean, 67.397 max, 9.169 min<br/><br/>1102.2 fetches/sec, 533465 bytes/sec<br/>msecs/connect: 44.5593 mean, 67.649 max, 0.547 min<br/>msecs/first-response: 45.499 mean, 67.849 max, 2.495 min<br/><br/>2.优化编译后 -O2<br/>1081.1 fetches/sec, 523252 bytes/sec<br/>msecs/connect: 45.7144 mean, 63.324 max, 0.823 min<br/>msecs/first-response: 46.1008 mean, 61.814 max, 4.487 min<br/><br/>1110.2 fetches/sec, 537337 bytes/sec<br/>msecs/connect: 43.4943 mean, 60.066 max, 0.715 min<br/>msecs/first-response: 45.756 mean, 62.076 max, 3.536 min<br/><br/>1107 fetches/sec, 535788 bytes/sec<br/>msecs/connect: 44.872 mean, 3036.51 max, 0.609 min<br/>msecs/first-response: 44.8625 mean, 59.831 max, 3.178 min<br/><br/>3.优化编译后 -O3<br/>1097.5 fetches/sec, 531189 bytes/sec<br/>msecs/connect: 45.1355 mean, 3040.24 max, 0.583 min<br/>msecs/first-response: 45.3036 mean, 68.371 max, 4.416 min<br/><br/>1111.6 fetches/sec, 538014 bytes/sec<br/>msecs/connect: 44.2514 mean, 64.831 max, 0.662 min<br/>msecs/first-response: 44.8366 mean, 69.904 max, 3.928 min<br/><br/>1099.4 fetches/sec, 532109 bytes/sec<br/>msecs/connect: 44.7226 mean, 61.445 max, 0.596 min<br/>msecs/first-response: 45.4883 mean, 287.113 max, 3.336 min<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=nginx" rel="tag">nginx</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?660</link>
<title><![CDATA[Apache 内存暴增解决方法]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[优化监控]]></category>
<pubDate>Mon, 14 Dec 2009 00:37:02 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?660</guid> 
<description>
<![CDATA[ 
	前阵子总是发现 httpd 进程的使用内存总量居然达到了上百Mb，有时甚至上Gb，真是夸张。Apache 是架在 Squid 的后面，照理说不应该出现这种情况。通过排查，发现是 Apache 中开启了持续长连接导致。<br/><br/>Apache 进程的内存使用是 “递增/渐进” 式的，也就是在当前进程的 httpd 过程中，内存使用是持续增加的，也就是说在该进程退出之前，内存是持续增加的。主要是由于下面三个参数来控制。<br/><br/>KeepAlive On 设定是否要开启持续长连接，由于前面有 Squid，因此在这里把它打开<br/><br/>MaxKeepAliveRequests 50 在一次持续长连接中，最多允许接收几次请求，如果设置太大的话，很可能导致 httpd<br/>进程持续消耗很多内存，因此可以选择一个适当的值，因为重新创建一个新的进程也是要有一定开销的<br/><br/>KeepAliveTimeout 5 设定一个长连接在没有活动后等待多久自动关闭，可以设置小一点，不过跟上面的类似，如果太小的话，也会导致频繁创建新的进程<br/><br/>现在，调整完上面的参数后，会发现 httpd 进程不再象以前那样狂吃内存了。<br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=web" rel="tag">web</a> , <a href="http://selboo.com.cn/tag.php?tag=apache" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?659</link>
<title><![CDATA[nginx作为最前端的web cache系统]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[系统架构]]></category>
<pubDate>Mon, 14 Dec 2009 00:25:02 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?659</guid> 
<description>
<![CDATA[ 
	<a href="http://selboo.com.cn/attachment.php?fid=213" target="_blank"><img src="http://selboo.com.cn/attachment.php?fid=213" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>这个结构的优点： <br/>1、可以使用nginx前端进行诸多复杂的配置，这些配置从前在squid是没法做或者做起来比较麻烦的，比如针对目录的防盗链。 <br/>2、nginx前端可以直接转发部分不需要缓存的请求。 <br/>3、因为nginx效率高于squid，所以某些情况下可以利用nginx的缓存来减轻squid压力。 <br/>4、可以实现url hash等分配策略。 <br/>5、可以在最前端开启gzip压缩，这样后面的squid缓存的纯粹是无压缩文档，可以避免很多无谓的穿透。 <br/>6、因为nginx稳定性比较高，所以lvs不需要经常调整，通过nginx调整就可以。 <br/>7、squid的文件打开数按默认的1024就绰绰有余，不过处理的请求可一个都不会少。 <br/>8、可以启用nginx的日志功能取代squid，这样做实时点击量统计时可以精确定位到url，不必要再用低效率的grep来过滤。 <br/>9、因为nginx的负载能力高于squid，所以在用lvs分流时可以不必分得特别均衡，出现单点故障的几率比较低。<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%259E%25B6%25E6%259E%2584" rel="tag">架构</a> , <a href="http://selboo.com.cn/tag.php?tag=web" rel="tag">web</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?658</link>
<title><![CDATA[海量小文件系统架构方案]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[系统架构]]></category>
<pubDate>Mon, 14 Dec 2009 00:24:18 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?658</guid> 
<description>
<![CDATA[ 
	现在的网站越做越大了，存储的东西越来越多，如何解决这些文件存储也成了新的难题。如果把这些文件都完全采用大硬盘存储来解决，并不是一个好主意，因为数据量越大风险就越高，虽然文件能存得下，但是故障率相应会较高，另外重建耗费时间也比较长。所以最好的办法是尽可能考虑分布式存储，把文件想办法利用网络分散到多个机器上。 <br/>从我所了解的存储结构来看，分布式存储大致可以分为几种：<br/><br/>1、类googlefs的分布式文件系统 <br/>因为目前googlefs没有开源，所以网上出现的分布式文件系统都是利用google的方案自行实现的。这个方案的优点是可用性比较高，基本上基于硬盘的应用都可以处理，可用范围就比较广泛。我看了gfs、gfs2、ocfs2、FastDFS、MogileFS的一些相关介绍，大致有一些认识。 <br/>首先是文档比较少而出现的问题倒不少；然后是目前这些还没有一个能称得上是稳定版本，如果有的话，估计也就是其中一些收费的版本。因为磁盘存储乃是致关重要，所以目前建议还是不要轻易把这些东西部署到重要的地方。假如非常想使用的话，最好是做好充分测试，确保它的功能完全能够满足需要；然后还要想办法在传统的文件系统中做好完全的备份，以免造成损失。 <br/>另外可以提的一个东西是memcached，这个东西实现了内存的分布式共享，稳定度貌似比以上这些分布式文件系统要稳定。不过是完全基于内存的，如果数据量不是很大，可以一试。<br/><br/>2、手工使用文件路径分散存储 <br/>这个结构通常使用在web静态文件中，就以这种情形作为例子。 <br/>如果这些文件数量比较大，可以通过分散文件路径，把某个文件的访问指定到特定的一台或几台服务器上。例如： <br/>1)采用域名的分散策略 <br/>例如使用a.xxx.com/b.xxx.com…来区分标记为a或b的一系列文件，这些文件存储的时候，依然按照标记，存到a或b的服务器上。这个策略将区分机器的任务交由dns服务器来执行，扩容时会相应轻松。这需要web项目初期就规划好这些东东，后期才转用域名策略的成本比较高甚至不可以实现。 <br/>2)采用目录的分散策略 <br/>假如域名初期并没有规划使用域名策略，那么可以采用代理服务器来进行目录级的划分。比如一般存储大量文件时，因为文件系统的限制以及效率问题，都会按照一定规则划分了很多级的目录，按这些目录拆分机器也并不是困难的事情。这种架构的问题在于代理服务器的性能和可靠性问题，需要在这点上稍下一点功夫。 <br/>以上这两个方案，都要自行制定策略实现分散同步传输，传输一般可以归纳为推送和抓取两种办法，同步的话可以采用日志同步（把要同步的数据记入日志，通过日志记录来传输相应文件）、比较同步（使用rsync等同步软件）或即时同步（有新的修改就立刻传输）；另外要实现单点故障剔除的话，首先找一个策略把文件存储到多个节点上，例如，a.xxx.com或目录a的文件相应也存到b和c节点；然后在环境中使用故障剔除技术（lvs或nginx等），就可以解决问题，例如：采用域名的话，可以采用lvs，缺点是使用的机器就会成倍增加；亦可再用一级代理服务器，缺点是会牺牲性能。采用目录的话，因为本身就用到了代理服务器，所以只要存储得当，实现比较容易。<br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%259E%25B6%25E6%259E%2584" rel="tag">架构</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?657</link>
<title><![CDATA[nginx图片服务器的架构方案]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[系统架构]]></category>
<pubDate>Mon, 14 Dec 2009 00:23:13 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?657</guid> 
<description>
<![CDATA[ 
	图片服务通常数据容量较大，而且访问也频繁，鉴于此，图片服务就会有两种问题，一是存储问题，二是访问量问题。<br/><br/>存储问题就是硬盘容量问题，花钱买硬盘就可以了，看似简单，但着实也是最苦的问题。按目前探索来看，最好的方式是：在任何时刻遇到硬盘空间不够时，买颗硬盘插上，最多改改配置，就能立刻利用；另外，硬盘要能充分利用，不然图片存储量大再加上备份，很恐怖，最好是每颗硬盘都用上100%的空间。 <br/>访问量也是个大问题，如果服务不允许防盗链，那么访问量会引起带宽、服务器压力等问题，有钱的话直接扔CDN，没钱或者有更多的钱，就自己做吧。根据垣古不变的真理“越老的图，访问量也相对较少”这一点，分成两大部分，一边处理最新的图片，一边处理老旧的图片。最新的图片访问量大，但存储量较少；老图片访问量低，但存储量大。 <br/>大概分析完了，开始制定方案。<br/><br/>一、拟定一个存储目录规则： <br/>在现有的/a/b/abcde.jpg这样的hash方式下多加一个日期的目录变成：/200810/16/a/b/abcde.jpg或者/2008/10/16/a/b/abcde.jpg。按日期制定这个目录规则后，就可以按年月来拆机器了。<br/><br/>二、分机器，分硬盘 <br/>按之前的计划，分成两个组，一组服务器用lvs做负载均衡负责新图片；另一组服务器做旧图片访问和备份。新图机器找几台好点的服务器，SCSI硬盘；旧图机器没太大要求，PC机就行，找够硬盘就可以，现在IDE的1T硬盘也不太贵，最好再搭个raid就省事了，最主要是这些机器要多。 <br/>照这个图，搭一搭 <br/><br/><a href="http://selboo.com.cn/attachment.php?fid=212" target="_blank"><img src="http://selboo.com.cn/attachment.php?fid=212" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>说明一下： <br/>1、图片服务通过lvs作为入口，处理能力上还是有保障的。 <br/>2、利用nginx直接对外服务，不必用squid。 <br/>3、图中的红线是指主nginx会将/2006和/2007年的图片分别代理到两台存档服务器，如果发现主nginx的cpu占用比较大，那么可以考虑使用nginx的proxy_store将图片存到主服务器上，定期清理。 <br/>4、图中有一台存储分配服务器，作为图片服务更新图片的统一入口，有新图片或者修改图片的话，由这台服务器负责将图片放到正确的服务器上去。 <br/>5、旧图片服务器当前用年份来划分，每年增加两台服务器，亦可是加两块硬盘，注意，不要相信raid，一定要有两台机器，地理上分在两个城市则更好。 <br/>6、因为旧数据2006和2007年的数据基本上是没有变化的，所以假如硬盘够大，那么可以把两年的数据合并在一起。 <br/>7、如果细心定制，那么旧图片服务器的硬盘100%塞满是可以的，旧数据的容量基本上不会大幅增长，小小预留1-2G空间就可以了。 <br/>使用这个架构的话，到了2009年，我会把2008年的数据想办法迁到旧图服务器上，硬盘不够的话，加硬盘就可以了。如果图片量实在太大，主服务器连一年的数据都装不下，那可以用启用月份来划分；如果一个月都装不下了，那也太夸张了，那就启用日期吧；如果一天的数据都装不下，那就◎＃￥％……※。<br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%259E%25B6%25E6%259E%2584" rel="tag">架构</a> , <a href="http://selboo.com.cn/tag.php?tag=nginx" rel="tag">nginx</a> , <a href="http://selboo.com.cn/tag.php?tag=web" rel="tag">web</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?656</link>
<title><![CDATA[nginx限制ip并发数]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sun, 13 Dec 2009 05:50:02 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?656</guid> 
<description>
<![CDATA[ 
	nginx限制ip并发数，也是说限制同一个ip同时连接服务器的数量 <br/><br/>1.添加limit_zone <br/>这个变量只能在http使用 <br/>vi /usr/local/nginx/conf/nginx.conf <br/>limit_zone one $remote_addr 10m; <br/><br/>2.添加limit_conn <br/>这个变量可以在http, server, location使用 <br/>我只限制一个站点，所以添加到server里面 <br/>vi /usr/local/nginx/conf/host/gaojinbo.com.conf <br/>limit_conn&nbsp;&nbsp; one&nbsp;&nbsp;10; <br/><br/>3.重启nginx <br/>killall -HUP nginx <br/><br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=nginx" rel="tag">nginx</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?655</link>
<title><![CDATA[Linux 安装配置 PPTP VPN 服务器]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sun, 13 Dec 2009 04:06:50 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?655</guid> 
<description>
<![CDATA[ 
	From ： http://blog.s135.com/pptp_vpn/<br/><br/>　　VPN的英文全称是“Virtual Private Network”，翻译过来就是“虚拟专用网络”。顾名思义，虚拟专用网络我们可以把它理解成是虚拟出来的企业内部专线。它可以通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一条专有的通讯线路，就好比是架设了一条专线一样，但是它并不需要真正的去铺设光缆之类的物理线路。这就好比去电信局申请专线，但是不用给铺设线路的费用，也不用购买路由器等硬件设备。VPN技术原是路由器具有的重要技术之一，目前在交换机，防火墙设备或Windows等软件里也都支持VPN功能，一句话，VPN的核心就是在利用公共网络建立虚拟私有网。<br/><br/>　　虚拟专用网（VPN）被定义为通过一个公用网络（通常是因特网）建立一个临时的、安全的连接，是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接，并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入，以实现安全连接；可用于实现企业网站之间安全通信的虚拟专用线路，用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。<br/><br/>　　PPTP 全称为 Point to Point Tunneling Protocol -- 点到点隧道协议，是VPN协议中的一种。<br/><br/>　　一、CentOS 5.3 下 PPTP VPN 服务器安装<br/><br/>　　1、安装相关软件<br/>　　32位版：<br/><br/>yum install -y ppp iptables<br/>wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-1.rhel5.1.i386.rpm<br/>rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm<br/><br/>　　64位版：<br/><br/>yum install -y ppp iptables<br/>wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-1.rhel5.1.x86_64.rpm<br/>rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm<br/><br/><br/>　　2、配置文件编写<br/>　　①、配置文件/etc/ppp/options.pptpd<br/><br/>mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak<br/>vi /etc/ppp/options.pptpd<br/><br/>　　输入以下内容：<br/><br/>name pptpd<br/>refuse-pap<br/>refuse-chap<br/>refuse-mschap<br/>require-mschap-v2<br/>require-mppe-128<br/>proxyarp<br/>lock<br/>nobsdcomp<br/>novj<br/>novjccomp<br/>nologfd<br/>ms-dns 208.67.222.222<br/>ms-dns 208.67.220.220<br/>=================================<br/>配置说明如下<br/><br/>name pptpd <br/>pptpd server 的名称。 <br/>refuse-pap <br/>拒绝 pap 身份验证模式。 <br/>refuse-chap <br/>拒绝 chap 身份验证模式。 <br/>refuse-mschap <br/>拒绝 mschap 身份验证模式。 <br/>require-mschap-v2 <br/>在端点进行连接握手时需要使用微软的 mschap-v2 进行自身验证。 <br/>require-mppe-128 <br/>MPPE 模块使用 128 位加密。 <br/>proxyarp <br/>建立 ARP 代理键值。 <br/>debug <br/>开启调试模式，相关信息同样记录在 /var/logs/message 中。 <br/>lock <br/>锁定客户端 PTY 设备文件。 <br/>nobsdcomp <br/>禁用 BSD 压缩模式。 <br/>novj <br/>novjccomp <br/>禁用 Van Jacobson 压缩模式。 <br/>nologfd <br/>禁止将错误信息记录到标准错误输出设备(stderr)。 <br/><br/><br/>--------------------------------------------------------------------------------<br/><br/>　　②、配置文件/etc/ppp/chap-secrets<br/><br/>mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak<br/>vi /etc/ppp/chap-secrets<br/><br/>　　输入以下内容<br/><br/># Secrets for authentication using CHAP<br/># client&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;secret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP addresses<br/>myusername pptpd mypassword *<br/><br/>　　注：这里的myusername和mypassword即为PPTP VPN的登录用户名和密码<br/><br/><br/>--------------------------------------------------------------------------------<br/><br/>　　③、配置文件/etc/pptpd.conf<br/><br/>mv /etc/pptpd.conf /etc/pptpd.conf.bak<br/>vi /etc/pptpd.conf<br/><br/>　　输入以下内容：<br/><br/>option /etc/ppp/options.pptpd<br/>logwtmp<br/>localip 192.168.9.1<br/>remoteip 192.168.9.11-30<br/><br/>　　注：为拨入VPN的用户动态分配192.168.9.11～192.168.9.30之间的IP<br/><br/><br/>--------------------------------------------------------------------------------<br/><br/>　　④、配置文件/etc/sysctl.conf<br/><br/>vi /etc/sysctl.conf<br/><br/>　　修改以下内容：<br/><br/>net.ipv4.ip_forward = 1<br/><br/><br/>　　保存、退出后执行：<br/><br/>/sbin/sysctl -p<br/><br/>　　3、启动PPTP VPN 服务器端：<br/><br/>/sbin/service pptpd start<br/><br/>　　4、启动iptables：<br/><br/>/sbin/service iptables start<br/>/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=vpn" rel="tag">vpn</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?654</link>
<title><![CDATA[linux批量修改文件名]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Shell]]></category>
<pubDate>Sun, 13 Dec 2009 03:49:37 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?654</guid> 
<description>
<![CDATA[ 
	使用 rename 命令<br/>========================<br/>NAME<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rename - Rename files<br/><br/>SYNOPSIS<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rename from to file...<br/>========================<br/><div class="code">#! /bin/sh<br/>INIFILE=&quot;./dirlist.ini&quot;<br/><br/>CURPATH=$(pwd)<br/><br/>for SERVERPATH in $(cut -d: -f1 $INIFILE)<br/>do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd $SERVERPATH <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd ani<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .ANI .ani *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .A?? .ani *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .?N? .ani *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .??I .ani *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd ..<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd map<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAPPATH=$(pwd)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for maplist in $(ls -1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd $&#123;MAPPATH&#125;/$&#123;maplist&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .yom .YOM *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .y?? .YOM *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .?o? .YOM *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rename .??m .YOM *<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd $CURPATH<br/>done</div><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=linux%25E5%2591%25BD%25E4%25BB%25A4" rel="tag">linux命令</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?653</link>
<title><![CDATA[网络性能测试工具Iperf详解]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[优化监控]]></category>
<pubDate>Sun, 13 Dec 2009 03:41:08 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?653</guid> 
<description>
<![CDATA[ 
	Iperf是一个网络性能测试工具,也就是LINUX网速测试，主要应用于LINUX服务器下面。可以测试TCP和UDP带宽质量，可以测量最大TCP带宽，具有多种参数和UDP特性，可以报告带宽，延迟抖动和数据包丢失。Iperf在linux和windows平台均有二进制版本供自由使用。 <br/><br/>下载地址: <br/>http://downloads.sourceforge.net/project/iperf/iperf/2.0.4%20source/iperf-2.0.4.tar.gz?use_mirror=nchc<br/><br/>Iperf使用方法与参数说明 <br/><br/>参数说明 <br/>-s 以server模式启动，eg：iperf –s 。Server端为数据的接收端。 <br/>-c host以client模式启动，host是server端地址，eg：iperf -c 222.35.11.23 。Client端为数据的发出端。 <br/><br/>通用参数 <br/>-f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告，默认以Mbits为单位,eg：iperf -c 222.35.11.23 -f K <br/>-i sec 以秒为单位显示报告间隔，eg：iperf -c 222.35.11.23 -i 2 <br/>-l 缓冲区大小，默认是8KB,eg：iperf -c 222.35.11.23 -l 16 <br/>-m 显示tcp最大mtu值 <br/>-o 将报告和错误信息输出到文件eg：iperf -c 222.35.11.23 -o ciperflog.txt <br/>-p 指定服务器端使用的端口或客户端所连接的端口eg：iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999 <br/>-u 使用udp协议 <br/>-w 指定TCP窗口大小，默认是8KB <br/>-B 绑定一个主机地址或接口（当主机有多个地址或接口时使用该参数） <br/>-C 兼容旧版本（当server端和client端版本不一样时使用） <br/>-M 设定TCP数据包的最大mtu值 <br/>-N 设定TCP不延时 <br/>-V 传输ipv6数据包 <br/><br/>server专用参数 <br/>-D 以服务方式运行ipserf，eg：iperf -s -D <br/>-R 停止iperf服务，针对-D，eg：iperf -s -R <br/><br/>client端专用参数 <br/>-d 同时进行双向传输测试 <br/>-n 指定传输的字节数，eg：iperf -c 222.35.11.23 -n 100000 <br/>-r 单独进行双向传输测试 <br/>-t 测试时间，默认10秒,eg：iperf -c 222.35.11.23 -t 5 <br/>-F 指定需要传输的文件 <br/>-T 指定ttl值 <br/><br/>应用实例 <br/>使用 iperf -s 命令将 Iperf 启动为 server 模式，在客户机上使用 iperf -c启动client模式。 <br/>iperf –s <br/>———————————————————— <br/>Server listening on TCP port 5001 <br/>TCP window size: 8.00 KByte (default) <br/>———————————————————— <br/>iperf -c 59.125.103.56 <br/><br/>上面使用服务端和客户端的默认设置进行测试 <br/>iperf -s -w 300K <br/>———————————————————— <br/>Server listening on TCP port 5001 <br/>TCP window size:&nbsp;&nbsp;300 KByte <br/>———————————————————— <br/>iperf -c 59.125.103.56 -f K -i 2 -w 300K <br/><br/>设定报告间隔为2秒，服务器端和客户端的TCP窗口都开到300KB <br/>iperf -c 59.125.103.56 -f K -i 2 -w 300K –n 1000000 <br/><br/>测试传输约1MB数据 <br/>iperf -c 59.125.103.56 -f K -i 2 -w 300K –t 36 <br/><br/>测试持续36秒 <br/>iperf -c 220.112.45.87 -f K -i 2 -w 300k -n 10400000 -d <br/><br/>测试双向的传输 <br/>iperf -c 59.125.103.56 -f K -i 2 -w 300K –u <br/><br/>UDP测试 <br/>其中 -i 参数的含义是周期性报告的时间间隔（interval），单位为秒；在上面的例子中，表示每隔2秒报告一次带宽等信息。<br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E5%25B7%25A5%25E5%2585%25B7" rel="tag">工具</a> , <a href="http://selboo.com.cn/tag.php?tag=%25E6%25B5%258B%25E8%25AF%2595" rel="tag">测试</a>
]]>
</description>
</item><item>
<link>http://selboo.com.cn/read.php?652</link>
<title><![CDATA[/dev/shm tmpfs文件系统]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sun, 13 Dec 2009 03:19:29 +0000</pubDate> 
<guid>http://selboo.com.cn/read.php?652</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认系统就会加载/dev/shm ，它就是所谓的tmpfs，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，tmpfs 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。 <br/><br/>tmpfs有以下优势： <br/>1.动态文件系统的大小。 <br/><br/>2.tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎 <br/><br/>可以是瞬间的。 <br/><br/>3.tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载， <br/><br/>绑定的操作。 <br/><br/>通常使用/dev/shm作共享内存（shm_open，shm_unlink)。 /dev/shm是个临时文档系统（tmpfs），能够 <br/><br/>从/etc/fstab中mount。因此，支持标准的参数例如"size"，能够用来增加或减少在/dev/shm上的tmpfs大小.（默认的，他的大小是系统RAM的一半）<br/><br/>调整/dev/shm的大小 <br/>1)查看大小 <br/>df -h /dev/shm <br/><br/>2)修改大小 <br/>vi /etc/fstab <br/>tmpfs /dev/shm tmpfs defaults,size=4096M 0 0 <br/><br/>3)重新挂载 <br/>umount /dev/shm <br/>mount /dev/shm <br/><br/>4)查看修改后的大小 <br/>df -h /dev/shm <br/><br/>Tags - <a href="http://selboo.com.cn/tag.php?tag=%25E6%2596%2587%25E4%25BB%25B6" rel="tag">文件</a>
]]>
</description>
</item>
</channel>
</rss>