<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东的个人博客]]></title> 
<link>http://www.xiangdong.org/blog/index.php</link> 
<description><![CDATA[---About My Learn or Study etc~]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东的个人博客]]></copyright>
<item>
<link>http://www.xiangdong.org/blog/post/1405/</link>
<title><![CDATA[多列索引与多个索引的对比]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Wed, 19 Nov 2008 10:53:32 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1405/</guid> 
<description>
<![CDATA[ 
	原文是Multiple column index vs multiple indexes<br/><br/>对于要经常查询的含量大量数据的数据库，建立索引是非常重要的，建立索引一般都是在where语句用得较多的列上。现在有个问题，如果一个表有多个列需要建立索引，是把所有列建成一个索引，还是对每一个列建一个索引，上篇文章做了一个介绍，这是作者得出的结论，Conclusion: For benchmarked queries we can see Multiple Column index beats Index Merge in all cases when such index can be used. It is also worth to watchout a MySQL may decide not to do Index merge (either intersection or union) but instead do full table scan or access table picking only one index on the pair.意思应该是说对多个列建索引比对每个列分别建索引更有优势，而且要知道索引建立得越多就越占磁盘空间，在更新数据的时候速度会更慢。<br/><br/>这是一个多列索引的问题，这个问题是如何安排列的顺序是至关重要的，比如需要对一个表里面的两个字段uid, rstatus建一个索引，那么索引的顺序是（uid, rstatus)还是(rstatus, uid)呢。在搞清楚如何安排顺序之前先了解一个概念，cardinality:金山的翻译是"集的势"，比如，Mytest表有1700条记录，rstatus字段有750个不同的记录，那么就可以说We have a cardinality of 750 for rstatus。总的规则可以说是cardinality越大的字段应该排在索引的第一位就是说索引的位置是(rstatus, uid)，因为cardinality越大那么第一次取出来的记录集就越小，再进行第二次查询的次数就越少了。不过这只是对于建两个索引的规则，如果是三个以上就没有那么简单了，具体地看原文，有比较详细的例子。还需要提出的是即使我们建了一个很有效的索引，但是查询优化器也许会选择不用它，如果它会考虑更多因素以决定这个索引是否有足够的效率。<br/><br/>It was also pointed out to me, that even if an efficient multi-column index is created, the query optimizer may choose to never use it. This is <br/>because the optimizer looks at further statistics to determine if the index would be efficient enough or not.<br/><br/> <br/><br/>官方文档：<a href="http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html" target="_blank">http://dev.mysql.com/doc/r...</a><br/><br/>老外的博客：<br/><br/><a href="http://blog.decaresystems.ie/index.php/2007/05/21/how-to-create-a-successful-multi-column-index-from-first-principals/" target="_blank">http://blog.decaresystems....</a> 也有比较详细的介绍mysql如何使用联合索引的！<br/><br/>我试了一下将建立联合索引的顺序变化为KEY `u_r` (rstatus,`uid`) 出现：ref&nbsp;&nbsp;key_len 都有变化，如下：<br/><br/>mysql> explain select * from mytest where uid in (1,2) and rstatus = 1;<br/>+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+<br/>&#124; id &#124; select_type &#124; table&nbsp;&nbsp;&#124; type&nbsp;&nbsp;&#124; possible_keys &#124; key&nbsp;&nbsp;&#124; key_len &#124; ref&nbsp;&nbsp;&#124; rows &#124; Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+<br/>&#124;&nbsp;&nbsp;1 &#124; SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; mytest &#124; range &#124; u_r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; u_r&nbsp;&nbsp;&#124; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; NULL &#124;&nbsp;&nbsp;&nbsp;&nbsp;2 &#124; Using where &#124; <br/>+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+<br/>1 row in set (0.03 sec)<br/><br/>mysql> INSERT INTO `mytest` (`id`, `uid`, `rstatus`) VALUES(null, 3, 1);<br/>Query OK, 1 row affected (0.00 sec)<br/><br/>mysql> INSERT INTO `mytest` (`id`, `uid`, `rstatus`) VALUES(null, 4, 1);<br/>Query OK, 1 row affected (0.00 sec)<br/><br/>mysql> explain select * from mytest where uid in (1,2) and rstatus = 1;<br/>+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+<br/>&#124; id &#124; select_type &#124; table&nbsp;&nbsp;&#124; type&nbsp;&nbsp;&#124; possible_keys &#124; key&nbsp;&nbsp;&#124; key_len &#124; ref&nbsp;&nbsp;&#124; rows &#124; Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+<br/>&#124;&nbsp;&nbsp;1 &#124; SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; mytest &#124; range &#124; u_r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; u_r&nbsp;&nbsp;&#124; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; NULL &#124;&nbsp;&nbsp;&nbsp;&nbsp;2 &#124; Using where &#124; <br/>+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+<br/>1 row in set (0.00 sec)<br/><br/>mysql> explain select * from mytest where uid in (3,4) and rstatus = 1;<br/>+----+-------------+--------+------+---------------+------+---------+-------+------+-------------+<br/>&#124; id &#124; select_type &#124; table&nbsp;&nbsp;&#124; type &#124; possible_keys &#124; key&nbsp;&nbsp;&#124; key_len &#124; ref&nbsp;&nbsp; &#124; rows &#124; Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+----+-------------+--------+------+---------------+------+---------+-------+------+-------------+<br/>&#124;&nbsp;&nbsp;1 &#124; SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; mytest &#124; ref&nbsp;&nbsp;&#124; u_r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; u_r&nbsp;&nbsp;&#124; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; const &#124;&nbsp;&nbsp;&nbsp;&nbsp;1 &#124; Using where &#124; <br/>+----+-------------+--------+------+---------------+------+---------+-------+------+-------------+<br/>1 row in set (0.00 sec)<br/><br/>老外原文：<br/><br/>Conclusion: For benchmarked queries we can see Multiple Column index beats Index Merge in all cases when such index can be used. It is also worth to watchout a MySQL may decide not to do Index merge (either intersection or union) but instead do full table scan or access table picking only one index on the pair.<br/><br/><br/><br/>&nbsp;&nbsp; 我估计是对多个列建索引比对每个列分别建索引更有优势，mysql会根据最好的平均效率选取需不需要索引，如Mysql分析发现不用索引更快那就不必用到索引了！<br/><br/>in适用于外表大内表小的情况！与数据的多少也很有关系的！<br/><br/>
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1403/</link>
<title><![CDATA[FreeBSD与Linux再比较]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Wed, 19 Nov 2008 07:12:28 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1403/</guid> 
<description>
<![CDATA[ 
	传说中FreeBSD比linux稳定，大型网站几乎都建立在FreeBSD系统上，我一直疑惑难道linux是否真的不能做大型网站。于是用netcraft网站做了个测试：<br/><br/><div class="code">http://toolbar.netcraft.com/site_report?url=www.phpchina.com</div>按照上面的链接你就可以查询任何一个网站的服务器架构，当然，可信度和准确度我不能保证。下面是我测试的案例：<br/><br/><div class="code">www.phpchina.com清一色linux;<br/><a href="http://www.tencent.com" target="_blank">www.tencent.com</a>清一色linux;<br/><a href="http://www.qq.com" target="_blank">www.qq.com</a>清一色linux;<br/><a href="http://www.taobao.com" target="_blank">www.taobao.com</a> linux;<br/><a href="http://www.ebay.com.cn" target="_blank">www.ebay.com.cn</a> 查询显示OS清一色linux，WebServer清一色IIS，令人费解；<br/><a href="http://www.alibaba.com" target="_blank">www.alibaba.com</a> 清一色linux;<br/><a href="http://www.bokee.com" target="_blank">www.bokee.com</a>清一色的linux；<br/><a href="http://www.google.com" target="_blank">www.google.com</a>清一色linux;<br/><a href="http://www.pconline.com.cn" target="_blank">www.pconline.com.cn</a> linux;<br/><a href="http://www.yninfo.com" target="_blank">www.yninfo.com</a>清一色的linux;<br/><a href="http://www.tom.com" target="_blank">www.tom.com</a> 清一色Debian;<br/><a href="http://www.cctv.com" target="_blank">www.cctv.com</a> linux+sun的服务器；<br/><a href="http://www.126.com" target="_blank">www.126.com</a> 清一色linux<br/><a href="http://www.163.com" target="_blank">www.163.com</a>清一色linux，大家或许都认为网易是使用FreeBSD的，</div><br/>但163/126就全部用上了linux，令人费解。<br/><br/>&nbsp;&nbsp; 看来用linux做大站的也不少啊！！！谁说linux不能做大站呢？<br/><br/>&nbsp;&nbsp;另外又发现两个奇怪的东东：<br/><a href="http://www.ebay.com" target="_blank">www.ebay.com</a> 居然清一色的win2000!!!<br/><a href="http://www.myspace.com" target="_blank">http://www.myspace.com</a> 全美访问量第一，居然也清一色的win2003;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;在我印象中，大型网站是压根不能用windos系统的。但这两个案例给我的理论一个有力的回击：系统稳定与否，关键还是在人！<br/>&nbsp;&nbsp;&nbsp;&nbsp;无论是Windows还是FreeBSD还是Linux都可以做大型网站，只要人足够牛X就行。这里不谈windows了，还是从大家口水仗打得最厉害的linux和freebsd分析分析吧。<br/>&nbsp;&nbsp;&nbsp;&nbsp;首先说明一点：为什么不拿linux和windows比较，而只是和freebsd比较呢？答案在于linux或是freebsd都感觉到了对方带来的压力，都认定对方是自己的竞争对手。既然称得上是对手，自然是各有所长，难分轩轾，谁也不能把谁压倒罢了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;论坛里争论FreeBSD和linux谁谁更好，其实是从一个静态的角度来看的，在某个特定时间里，FreeBSD或许比linux更稳定，linux或许比FreeBSD更快捷，但两家都在动态发展，没有谁永远领先，没有谁永远落后，FreeBSD稳定的特性，Linux2.6可以超越它;而linux 快捷的优势，FreeBSD也会迅速居上。我就不信,linus和他的黑客团队在技术上会输给学院派的FreeBSD团队？或者FreeBSD的高手们比不上一群黑客，？他们谁都可以暂时领先，谁都可以暂时落后，但谁都不是吃干饭的！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;目前流行这么一种传说：linux和freebsd内核性能上相比：linux2.2比freebsd要差，linux2.4和freebsd难分伯仲，而linux2.6比freebsd好得多。这里freebsd被静态化了，以一个动态发展的linux去比较某个固定版本的freebsd，显然是有失公平的。有道是：士别三日，即更刮目相看，更何况是技术日新月异的IT行业！ <br/>&nbsp;&nbsp;&nbsp;&nbsp;又有这么一种说法：LINUX被黑的多而FreeBSD被黑的少，盖出于安全性较逊？这也是无稽之谈，用liunx的人基数比freebsd大，菜鸟自然也就更多了。系统安不安全关键在人，如果你不信，可以尝试去黑一下<a href="http://www.ebay.com" target="_blank">www.ebay.com</a>或<a href="http://www.myspace.com" target="_blank">www.myspace.com</a>，他们的服务器可都是windows哟。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;其实两家最根本的差别不在技术，而在于设计理念：linux不求最稳，但求最新；FreeBSD不求最新，只求最稳——这样说也许不对，但也能反映一些问题。<br/>&nbsp;&nbsp;&nbsp;&nbsp;我对FreeBSD与Linux比较的最终结论是：谁好谁稳定都只是暂时的，两家的存在状态，是一个“既生瑜何生亮”的问题，在长久的发展过程中，技术上的常胜将军并不存在，双方只有此消彼长，各领风骚。至于大家为什么非要证明FreeBSD比Linux好或Linux比FreeBSD好，我想程序员普遍都喜欢追求完美，非要用最好最完美的系统才甘心吧！<br/>&nbsp;&nbsp; FreeBSD和Linux我都用过，不在超大型应用中，很难感受两者的差别。个人选择的linux，考虑到使用linux的人比较多，商机自然也就更多吧，钱在哪眼光就看哪，至少linux的就业机会比FreeBSD多。当然，这是非技术因素的考虑了。<br/><br/>------------------------------------------------------------------------------------------------------<br/>
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1401/</link>
<title><![CDATA[freebsd下安装gonme]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Wed, 19 Nov 2008 03:37:36 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1401/</guid> 
<description>
<![CDATA[ 
	GNOME 是一个用户界面友好的桌面环境，能够使用户很容易地使用和配置他们的计算机。 GNOME 包括一个面板(用来启动应用程序和显示状态)，一个桌面(存放数据和应用程序的地方)，一套标准的桌面工具和应用程序， 和一套与其他人相互协同工作的协议集。其他操作系统的用户在使用 GNOME提供的强大的图形驱动环境时会觉得很好。<br/>安装 GNOME的最简单的方法是在FreeBSD安装过程中通过 “Desktop Configuration”菜单来进行。它们也可以很容易地从一个package或Ports Collection安装：要从网络安装GNOME，只要键入： # pkg_add -r gnome2 从源代码编译GNOME，可以使用 ports树： # cd /usr/ports/x11/gnome2 # make install clean 一旦GNOME被安装好， X Server必须被告知启动 GNOME以代替默认的窗口管理器。 如果在适当的位置已经定制好了文件.xinitrc， 简单地将启动当前窗口管理器的那行替换为 /usr/X11R6/bin/gnome-session。如果没有对配置文件做过什么特殊的改动， 只需简单地键入： % echo &quot;/usr/X11R6/bin/gnome-session&quot; &gt; ~/.xinitrc 接着，键入startx， GNOME桌面环境就启动了。<br/>Note: 如果已经使用了一个像 XDM这样的显示管理器，就不能这样做。而是，用同样的命令创建一个可执行文件.xsession。要这样做，需要先编辑文件，然后用 /usr/X11R6/bin/gnome-session替换已存在的窗口管理命令： % echo &quot;#!/bin/sh&quot; &gt; ~/.xsession % echo &quot;/usr/X11R6/bin/gnome-session&quot; &gt;&gt; ~/.xsession % chmod +x ~/.xsession 另一个选项是在登陆时配置显示管理器允许您选择窗口管理器；有关 KDE 细节会解释如何使用kdm， KDE显示管理器来做。<br/>X11 通过“RENDER”扩展来支持 anti-aliasing。 GTK+ 2.0 以及更高的版本(被 GNOME使用的工具包)可以使用这个功能。 所以，使用最近的软件， anti-aliasing 可以应用在 GNOME桌面环境中。只需要依次选择 应用程序-&gt;桌面首选项-&gt;字体，然后选上 最佳形状， 最佳对比度，或者像素圆滑(LCD)。对于 GTK+ 应用程序，它们不是 GNOME 桌面的一部分，在启动程序前需要设置 环境变量GDK_USE_XFT的值为1。
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1400/</link>
<title><![CDATA[FreeBSD升级版本]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Wed, 19 Nov 2008 03:35:31 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1400/</guid> 
<description>
<![CDATA[ 
	1.安装CVSUP:<br/>最好在安装时装好cvsup;<br/><br/><div class="code">freebsd# cd /usr/ports/net/cvsup-without-gui/<br/>freebsd# make install clean</div><br/>2.升组源码:<br/>freebsd# ee /usr/share/examples/cvsup/stable-supfile<br/>把:<br/>default host=CHANGE_THIS.FreeBSD.org<br/>改为:<br/>default host=cvsup.FreeBSDchina.org<br/><br/><div class="code">freebsd# cvsup -g -L 2 /usr/share/examples/cvsup/stable-supfile<br/>freebsd# cd /usr/obj<br/>freebsd# chflags -R noschg *<br/>freebsd# rm -rf *</div><br/>3.重新编译源码和内核<br/><br/><div class="code">freebsd# cd /usr/src<br/>freebsd# make buildworld<br/>freebsd# make buildkernel KERNCONF=freebsd<br/>freebsd# make installkernel KERNCONF=freebsd<br/>reboot</div><br/>4.重新登陆系统进入单用户模式<br/>启动时boot -s<br/><br/><div class="code"># adjkerntz -i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调整内核时区<br/># fsck -p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//整理文件系统，自动修正所有可以安全地更正且不会导致数据丢失的问题<br/># mount -u /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //装载根分区<br/># mount -a -t ufs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//装载所有的ufs分区<br/># swapon -a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动虚拟内存，打开交换空间<br/># mergemaster -p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //选择YES<br/># cd /usr/src<br/># make installworld<br/># mergemaster&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//要安装的全选&quot;i&quot;<br/># reboot</div><br/>源码和内核升级完毕
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1399/</link>
<title><![CDATA[用curl实现自动上传下载 ]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Wed, 19 Nov 2008 02:57:58 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1399/</guid> 
<description>
<![CDATA[ 
	写了一个批量自动上传下载文件的小工具。 特点：<br/><br/>&nbsp;&nbsp; 1. 文件名中可包含日期如TEST20070212.txt<br/>&nbsp;&nbsp; 2. 可多次运行，不会重复处理已成功的条目<br/>&nbsp;&nbsp; 3. 配置方便，异常处理完善<br/><br/>想来今后或许还用得上，所以放在这里晒一下。好不好用各位试下就知道了。 myftp.sh内容如下：<br/><br/><br/><div class="code">#!/bin/bash<br/>#Author: Robin Guo<br/><br/>DATE_YYYYMMDD=`date +%Y%m%d`<br/>DATE_YYMMDD=`date +%y%m%d`<br/>DATE_YYYY_MM_DD=`date +%Y-%m-%d`<br/><br/>#日志文件~/log/YYYYMMDD.LOG<br/>FTP_LOG=~/log/$&#123;DATE_YYYYMMDD&#125;.LOG<br/><br/>#Function ftp_download<br/>#Example:<br/>#ftp_download <a href="ftp://interfs:qwerasdf@10.245.10.245:21/home/interfs/etc/config.test" target="_blank">ftp://interfs:qwerasdf@10....</a> config.test<br/>ftp_download()<br/>&#123;<br/>if &#91; &quot;$#&quot; = &quot;2&quot; &#93;<br/>then<br/>if &#91; -f $2 &#93;<br/>then<br/>#文件已存在，说明上次下载已成功，可跳过<br/>echo &quot;INFO : $2 exists&quot; &#124; tee -a $FTP_LOG<br/>else<br/>echo &quot;FROM : $1&quot; &#124; tee -a $FTP_LOG<br/>echo &quot;TO&nbsp;&nbsp; : $2&quot; &#124; tee -a $FTP_LOG<br/>curl -s -P 21000 --connect-timeout 8 --max-time 60 $1 -o $2 &gt; /dev/null&nbsp;&nbsp;2&gt;&amp;1<br/>CURL_RETCODE=$?<br/>if &#91; &quot;$CURL_RETCODE&quot; = &quot;0&quot; &#93;<br/>then<br/>echo &quot;INFO : downlaod $1 is ok&quot; &#124; tee -a $FTP_LOG<br/>touch $2 &gt; /dev/null 2&gt;&amp;1<br/>else<br/>echo &quot;ERROR: download $1 is failed. curl return ($CURL_RETCODE)&quot; &#124; tee -a $FTP_LOG<br/>rm -f $2 &gt; /dev/null 2&gt;&amp;1<br/>fi<br/>fi<br/>echo &quot;&quot; &#124; tee -a $FTP_LOG<br/>fi<br/>&#125;<br/><br/>#Function ftp_upload<br/>#Example:<br/>#ftp_upload uploadfile.txt <a href="ftp://interfs:qwerasdf@10.245.10.245:21/home/interfs/etc/upload.txt" target="_blank">ftp://interfs:qwerasdf@10....</a><br/><br/>ftp_upload()<br/>&#123;<br/>if &#91; &quot;$#&quot; = &quot;2&quot; &#93;<br/>then<br/>if &#91; -f $1 &#93;<br/>then<br/>if &#91; -f $1.ok &#93;<br/>then<br/>#“文件.ok”存在，说明上次已成功上传，可跳过<br/>echo &quot;INFO : already upload $1&quot; &#124; tee -a $FTP_LOG<br/>else<br/>echo &quot;FROM : $1&quot; &#124; tee -a $FTP_LOG<br/>echo &quot;TO&nbsp;&nbsp; : $2&quot; &#124; tee -a $FTP_LOG<br/>curl -s -P 21000 --connect-timeout 8 --max-time 60 -T $1 $2 &gt; /dev/null&nbsp;&nbsp;2&gt;&amp;1<br/>CURL_RETCODE=$?<br/>if &#91; &quot;$CURL_RETCODE&quot; = &quot;0&quot; &#93;<br/>then<br/>#上传成功，做标记<br/>touch&nbsp;&nbsp;$&#123;1&#125;.ok &gt; /dev/null 2&gt;&amp;1<br/>echo &quot;INFO : upload $1 is ok&quot; &#124; tee -a $FTP_LOG<br/>else<br/>echo &quot;ERROR: upload $1 is failed. curl return ($CURL_RETCODE)&quot; &#124; tee -a $FTP_LOG<br/>fi<br/>fi<br/>else<br/>echo &quot;ERROR: upload failed. $1 not exists.&quot; &#124; tee -a $FTP_LOG<br/>fi<br/>echo &quot;&quot; &#124; tee -a $FTP_LOG<br/>fi<br/>&#125;<br/><br/>date &quot;+%y-%m-%d %H:%M&quot; &#124; tee -a $FTP_LOG<br/><br/>if &#91; &quot;$#&quot; != &quot;1&quot; &#93;<br/>then<br/>echo &quot;Usage: ftp.sh ftp.cfg&quot;<br/>exit 1<br/>fi<br/><br/>FTP_CONFIG=$1<br/>if &#91; -f $FTP_CONFIG &#93;<br/>then<br/>echo &quot;INFO : Config File: $FTP_CONFIG&quot; &#124; tee -a $FTP_LOG<br/>echo &quot;&quot; &#124; tee -a $FTP_LOG<br/>else<br/>echo &quot;ERROR: Config File $FTP_CONFIG not exist&quot; &#124; tee -a $FTP_LOG<br/>exit 1<br/>fi<br/><br/>killall curl &gt; /dev/null 2&gt;&amp;1<br/><br/>#从配置中读取条目<br/>while read V_SYSID V_FILE_NAME V_DIRE V_REMOTE_PATH V_LOCAL_PATH<br/>do<br/>FIRST_CHAR=$&#123;V_SYSID:0:1&#125;<br/>if &#91; &quot;$FIRST_CHAR&quot; != &quot;#&quot; &#93;<br/>then<br/>#展开文件名中的日期段<br/>FILE_NAME=$&#123;V_FILE_NAME&#125;<br/>FILE_NAME=$&#123;FILE_NAME/&#92;$YYYYMMDD&#92;$/$DATE_YYYYMMDD&#125;&nbsp;&nbsp;&nbsp;&nbsp; # $YYYYMMDD$ to 20070120<br/>FILE_NAME=$&#123;FILE_NAME/&#92;$YYMMD&#92;$/$DATEYYMMDD&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # $YYMMDD$ to 070120<br/>FILE_NAME=$&#123;FILE_NAME/&#92;$YYYY-MM-DD&#92;$/$DATE_YYYY_MM_DD&#125; # $YYYY-MM-DD$ to 2007-01-20<br/>if &#91; &quot;$V_DIRE&quot; = &quot;DNLD&quot; &#93;<br/>then<br/>echo &quot;INFO : Download $&#123;FILE_NAME&#125; ... &quot; &#124; tee -a $FTP_LOG<br/>ftp_download $&#123;V_REMOTE_PATH&#125;$&#123;FILE_NAME&#125; $&#123;V_LOCAL_PATH&#125;$&#123;FILE_NAME&#125;<br/>fi<br/>if &#91; &quot;$V_DIRE&quot; = &quot;UPLD&quot; &#93;<br/>then<br/>echo &quot;INFO : Upload $&#123;FILE_NAME&#125;... &quot; &#124; tee -a $FTP_LOG<br/>ftp_upload $&#123;V_LOCAL_PATH&#125;$&#123;FILE_NAME&#125; $&#123;V_REMOTE_PATH&#125;$&#123;FILE_NAME&#125;<br/>fi<br/><br/>fi<br/>done &lt; $FTP_CONFIG</div><br/>典型的配置范例myftp.cfg如下：<br/><br/>#SYSID FILE_NAME DIRECTION(DNLD/UPLD) REMOTE_PATH/ LOCAL_PATH/<br/>0001 010YCDZ$YYYYMMDD$.txt&nbsp;&nbsp; UPLD <a href="ftp://user:passwd@10.245.62.226:21/dz/" target="_blank">ftp://user:passwd@10.245.6...</a> /home/myftp/whdl/<br/>0002 010YCJZ$YYYYMMDD$.TXT&nbsp;&nbsp; UPLD <a href="ftp://user:passwd@10.245.62.226:21/jz/" target="_blank">ftp://user:passwd@10.245.6...</a> /home/myftp/whdl/<br/>0003 010YJJS$YYYY-MM-DD$.TXT DNLD <a href="ftp://user:passwd@10.245.62.226:21/pk/js/" target="_blank">ftp://user:passwd@10.245.6...</a> /home/myftp/whdl/<br/>
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1398/</link>
<title><![CDATA[What is dbcached?和如何去安装dbcached和使用]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Tue, 18 Nov 2008 10:28:47 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1398/</guid> 
<description>
<![CDATA[ 
	<br/><img src="http://www.xiangdong.org/blog/template/boolo/images/viewimage.gif" alt=""/><a href="http://blog.s135.com/attachment/200802/dbcached.gif" target="_blank">点击在新窗口中浏览此图片</a><br/><a href="http://blog.s135.com/attachment/200802/dbcached.gif" target="_blank">http://blog.s135.com/attac...</a><br/><br/><br/>Installation (安装)<br/><div class="code"><br/>wget <a href="http://www.monkey.org/~provos/libevent-1.3e.tar.gz" target="_blank">http://www.monkey.org/~pro...</a><br/>tar zxvf libevent-1.3e.tar.gz<br/>cd libevent-1.3e/<br/>./configure --prefix=/usr<br/>make &amp;&amp; make install<br/>cd ../<br/><br/>wget <a href="http://dbcached.googlecode.com/files/dbcached-1.0.beta2.tar.gz" target="_blank">http://dbcached.googlecode...</a><br/>tar zxvf dbcached-1.0.beta2.tar.gz<br/>cd dbcached-1.0.beta2/<br/>./configure --prefix=/usr/local/dbcached --with-libevent=/usr<br/>make &amp;&amp; make install<br/>cd ../<br/></div><br/>Run as a daemon (作为守护进程运行)<br/><br/>/usr/local/dbcached/bin/memcached -d -m 256 -p 11211 -c 51200 -u nobody -x 192.168.0.2 -y 26010 -z 26010<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● -x &#123;ip_addr&#125; hostname or IP address of nmdb server <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● -y &#123;num&#125; TCP port number of nmdb server (default: 26010) for set &amp; get command <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● -z &#123;num&#125; UDP port number of nmdb server (default: 26010) only for set command, UDP will be used to replace TCP for set command when using parameter -z <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● -x &#123;IP地址&#125; nmdb 服务器的域名或者IP地址，推荐使用IP地址 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● -y &#123;端口号&#125; nmdb 服务器的TCP端口号 (默认: 26010) 支持 set/delete/... 等写命令 和 get 等读命令 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● -z &#123;端口号&#125; nmdb 服务器的UDP端口号 (默认: 26010) 只支持 get 等都命令, 当使用 -z 参数时，将使用 UDP 协议代替 TCP 协议执行 set 操作，执行 get 操作时仍然使用 TCP 协议。强烈推荐加上 -z 参数。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● 其他参数跟 memcached 1.2.4 完全一样，就不再详细说明。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● 如果想让 dbcached 通过 NMDB 保存数据时采用 TCP 协议，去掉 -z 参数即可，例如：(除非因防火墙、NAT穿透等问题导致 UDP 协议不可用，否则不建议使用 TCP 协议) <br/><br/>/usr/local/dbcached/bin/memcached -d -m 256 -p 11211 -c 51200 -u nobody -x 192.168.0.2 -y 26010<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;● 如果想让 dbcached 作为普通的 Memcached 运行，去掉 -x、-y、-z 参数即可，例如： <br/><br/>/usr/local/dbcached/bin/memcached -d -m 256 -p 11211 -c 51200 -u nobody<br/>载录来源：<a href="http://code.google.com/p/dbcached/" target="_blank">http://code.google.com/p/d...</a><br/>张也转载了：<a href="http://blog.s135.com/read.php?329&amp;guid=17" target="_blank">http://blog.s135.com/read....</a>
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1397/</link>
<title><![CDATA[周立功 我的25年嵌入式生涯（转 可以得到某些启发）]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Tue, 18 Nov 2008 10:17:32 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1397/</guid> 
<description>
<![CDATA[ 
	http://blog.sina.com.cn/s/blog_4d52f5a701000bav.html
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1395/</link>
<title><![CDATA[老大的lighttpd配置文章]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Tue, 18 Nov 2008 03:42:01 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1395/</guid> 
<description>
<![CDATA[ 
	http://blog.sina.com.cn/s/articlelist_1340168604_2_1.html
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1394/</link>
<title><![CDATA[软件的安装笔记]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Tue, 18 Nov 2008 02:36:19 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1394/</guid> 
<description>
<![CDATA[ 
	ubuntu下配置nginx+php+mysql+zend<br/>http://www.zhanghaifeng.com/archives/33<br/><br/>CentOS 5.1下 postfix + extmail + dovecot + maildrop 最新版安装笔记：<br/>http://hi.baidu.com/delphiss/blog/item/38571c94f7a7d50e7af48052.html<br/>
]]>
</description>
</item><item>
<link>http://www.xiangdong.org/blog/post/1393/</link>
<title><![CDATA[htaccess文件里设置二级域名的目录指向]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[WEB相关]]></category>
<pubDate>Mon, 17 Nov 2008 07:52:07 +0000</pubDate> 
<guid>http://www.xiangdong.org/blog/post/1393/</guid> 
<description>
<![CDATA[ 
	使用共享主机，控制面版是CPANEL的朋友都知道，他默认绑定主域名的目录为public_html<br/><br/>所以如果想要放域名yourdomain.com能直接访问，势必需要把所有文件全直接放进public_html下。这时候如果你想再建个子站，bbs.yourdomain.com，这时BBS目录就和其他php文件或主站的文件夹混在一起，很不利于管理<br/><br/>可以通过.htaccess文件来实现转向<br/><br/>以下以cms目录和www域名为例：<br/><br/>/————————————-以下为.htaccess文件内容————————————————-<br/># 开启功能<br/>RewriteEngine on<br/><br/># 你的主域名<br/><br/>RewriteCond %&#123;HTTP_HOST&#125; ^(<a href="http://www.)?yourmaindomain.com$" target="_blank">www.)?yourmaindomain.com$</a><br/><br/># 把哪个子目录你想指向主域名<br/># 这里以CMS为例<br/><br/>RewriteCond %&#123;REQUEST_URI&#125; !^/cms/<br/><br/>RewriteCond %&#123;REQUEST_FILENAME&#125; !-f<br/>RewriteCond %&#123;REQUEST_FILENAME&#125; !-d<br/><br/># 你想在哪个子目录上绑定主域名，把subfolder改成子目录<br/><br/>RewriteRule ^(.*)$ /cms/$1<br/><br/>#这里改成你的主域名和子目录<br/>RewriteCond %&#123;HTTP_HOST&#125; ^(<a href="http://www.)?yourmaindomain.com$" target="_blank">www.)?yourmaindomain.com$</a><br/>RewriteRule ^(/)?$ cms/index.php [L]<br/><br/>//———————-OVER——————————————<br/><br/>以上内容就是把目录cms指向主域名<br/>比如<a href="http://www.yourmaindomain.com" target="_blank">www.yourmaindomain.com</a>，访问时就直接转到了cms目录<br/><br/><br/>我的配置：<br/><br/><br/><div class="code"><br/># 开启功能<br/>RewriteEngine on<br/><br/># 你的主域名<br/><br/>RewriteCond %&#123;HTTP_HOST&#125; ^(<a href="http://www.)?xiangdong.org$" target="_blank">www.)?xiangdong.org$</a><br/><br/># 把哪个子目录你想指向主域名<br/># 这里以CMS为例<br/><br/>RewriteCond %&#123;REQUEST_URI&#125; !^/mycom/<br/><br/>RewriteCond %&#123;REQUEST_FILENAME&#125; !-f<br/>RewriteCond %&#123;REQUEST_FILENAME&#125; !-d<br/><br/># 你想在哪个子目录上绑定主域名，把subfolder改成子目录<br/><br/>RewriteRule ^(.*)$ /mycom/$1<br/><br/>#这里改成你的主域名和子目录<br/>RewriteCond %&#123;HTTP_HOST&#125; ^(<a href="http://www.)?xiangdong.org$" target="_blank">www.)?xiangdong.org$</a><br/>RewriteRule ^(/)?$ mycom/index.php<br/><br/></div>
]]>
</description>
</item>
</channel>
</rss>