﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-Programming Life</title><link>http://www.phpweblog.net/killjin/</link><description>相信不能相信的，完成不能完成的。矛盾，就象征进步。</description><language>zh-cn</language><lastBuildDate>Mon, 15 Mar 2010 15:09:54 GMT</lastBuildDate><pubDate>Mon, 15 Mar 2010 15:09:54 GMT</pubDate><ttl>60</ttl><item><title>Apache mod_expires 模块DSO动态安装</title><link>http://www.phpweblog.net/killjin/archive/2009/09/09/6875.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 09 Sep 2009 05:27:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/09/09/6875.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6875.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/09/09/6875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6875.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6875.html</trackback:ping><description><![CDATA[<p>linux下安装<br>要支持DSO动态模块加载<br>安装mod_expires<br>cd httpd-2.2.6/modules/metadata/<br>/usr/local/apache/bin/apxs -c -i -a mod_expires.c<br><span id=more-4365></span><br>在httpd.conf中添加<br><ifmodule mod_expires.c><br>ExpiresActive on<br>ExpiresDefault &#8220;access plus 12 month&#8221;<br>ExpiresByType text/html &#8220;access plus 12 months&#8221;<br>ExpiresByType text/css &#8220;access plus 12 months&#8221;<br>ExpiresByType image/gif &#8220;access plus 12 months&#8221;<br>ExpiresByType image/jpeg &#8220;access plus 12 months&#8221;<br>ExpiresByType image/jpg &#8220;access plus 12 months&#8221;<br>ExpiresByType image/png &#8220;access plus 12 months&#8221;<br>EXpiresByType application/x-shockwave-flash &#8220;access plus 12 months&#8221;<br>EXpiresByType application/x-javascript &#8220;access plus 12 months&#8221;<br>ExpiresByType video/x-flv &#8220;access plus 12 months&#8221;<br></ifmodule></p>
<p>windows 打开httpd.ini 找到<br>#LoadModule expires_module modules/mod_expires.so<br>取掉#号<br>再加上面那一段代码</p>
<p>重起apache，效果很明显示,apache 内存占用量下去了很多，带宽用量也少了很多~</p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-09-09 13:27 <a href="http://www.phpweblog.net/killjin/archive/2009/09/09/6875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>官方QQ状态查询接口</title><link>http://www.phpweblog.net/killjin/archive/2009/08/30/6866.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sun, 30 Aug 2009 14:04:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/08/30/6866.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6866.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/08/30/6866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6866.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6866.html</trackback:ping><description><![CDATA[<a href="http://webpresence.qq.com/getonline?Type=1&amp;139292774:564082061:496626914">http://webpresence.qq.com/getonline?Type=1&amp;139292774:564082061:496626914</a>:<br><br>官方的,试了下速度不错.
<img src ="http://www.phpweblog.net/killjin/aggbug/6866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-08-30 22:04 <a href="http://www.phpweblog.net/killjin/archive/2009/08/30/6866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>记录些字体</title><link>http://www.phpweblog.net/killjin/archive/2009/08/19/6854.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Tue, 18 Aug 2009 19:12:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/08/19/6854.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6854.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/08/19/6854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6854.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6854.html</trackback:ping><description><![CDATA[Georgia,<br>'Trebuchet MS' =&gt; 英文XP系统标题默认字体<br>'Lucida Sans','Lucida Grande','Bitstream Sans Vera',Verdana,Arial,Tahoma,Helvetica,Sans-Serif
<img src ="http://www.phpweblog.net/killjin/aggbug/6854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-08-19 03:12 <a href="http://www.phpweblog.net/killjin/archive/2009/08/19/6854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下监控cpu 硬盘温度</title><link>http://www.phpweblog.net/killjin/archive/2009/08/06/6821.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 05 Aug 2009 16:05:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/08/06/6821.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6821.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/08/06/6821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6821.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6821.html</trackback:ping><description><![CDATA[<div class=postBody>
<p><font size=2>pacman -S lm_sensors<br><br>在终端中运行 </font><font color=#ff9900 size=2>sensors-detect</font><font size=2><br>会自动侦测所需模块。<br>都选yes （最后一个默认是no的，也要选择yes ）<br><br>这时打开 </font><font color=#ff9900 size=2>/etc/rc.d/sensors start</font><font size=2><br><br>在终端中使用 </font><font color=#ff9900 size=2>sensors</font><font size=2> 命令就可随时监控cpu温度。</font></p>
<p><font size=2>pacman -S hddtemp</font></p>
<p><font color=#ff9900 size=2>hddtemp /dev/sda </font></p>
<p><font size=2>就可以查看 硬盘的温度了 <br><br><a href="http://lnote.blogbus.com/logs/10089251.html"><font color=#ca6888>http://lnote.blogbus.com/logs/10089251.html</font></a></font></p>
</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/6821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-08-06 00:05 <a href="http://www.phpweblog.net/killjin/archive/2009/08/06/6821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[iptables][SYN attack] – 遭遇SYN攻擊</title><link>http://www.phpweblog.net/killjin/archive/2009/08/04/6818.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Tue, 04 Aug 2009 13:33:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/08/04/6818.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6818.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/08/04/6818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6818.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6818.html</trackback:ping><description><![CDATA[<p style="COLOR: #000000">1)SYN cookie<br>在linux下以root權限執行：</p>
<pre>echo 1 &gt; /proc/sys/net/ipv4/tcp_syncookies</pre>
<p style="COLOR: #000000">這個方法打開了syncookie功能，但實際效果幾乎感覺不到。</p>
<p style="COLOR: #000000">2)增大backlog<br>通過增加backlog的數值，可以一定程度減緩大量SYN請求導致TCP連接阻塞的狀況，一般這個數值系統默認是1024，實驗增加到1280~2048：</p>
<pre>echo "2048" &gt; /proc/sys/net/ipv4/tcp_max_syn_backlog</pre>
<p style="COLOR: #000000">這樣在強度不是很高的攻擊下，系統響應能力提高了一點。</p>
<p style="COLOR: #000000">3)縮短retries次數<br>Linux系統默認的tcp_synack_retries是5次，將這個數值減少可以提高系統響應能力，實驗改為2次：</p>
<pre>echo "2" &gt; /proc/sys/net/ipv4/tcp_synack_retries</pre>
<p style="COLOR: #000000">修改後，SYN_RECV的數量有了少量減少，系統響應也快了一些。</p>
<p style="COLOR: #000000">4)限制SYN頻率<br>上述的幾個方法實際效果並不理想，尤其是DDOS攻擊基本無效，目前比較有效的是對SYN的頻率和次數進行限制，這樣最大限度的控制了單個IP地址發動攻擊的能力。</p>
<p style="COLOR: #000000">例如將SYN請求的次數限制在30次每分鐘，系統默認是5次/秒，顯然太高，同時將burst從默認的5個降低到2個。</p>
<pre>/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m \
limit --limit 30/m --limit-burst 2 -j ACCEPT</pre>
<p style="COLOR: #000000">注意： 該命令在shell下輸入，&#8217;\'符號表示續行。</p>
<p style="COLOR: #000000">進行此操作後，對正常的用戶而言無任何感覺上的差異，而並發的SYN請求量下降了不少，服務響應基本正常了。</p>
<p style="COLOR: #000000">5)封鎖IP/IP段<br>對於某些單獨IP的DOS攻擊，封ip簡單有效，方法也非常容易：</p>
<pre>/sbin/iptables -A INPUT -s a.b.c.d -j REJECT</pre>
<p style="COLOR: #000000">為了大規模快速的封IP地址/段，以下提供小腳本：</p>
<pre>#!/bin/sh
IPSRC=`cat ip.txt`
for i in $IPSRC;do
/sbin/iptables -A INPUT -s $i -j REJECT
done</pre>
<p style="COLOR: #000000">在ip.txt裡保存如下格式的ip地址段：</p>
<pre>211.95.208.0/24
219.78.190.0/24
4.7.220.0/24
68.163.195.0/24
211.162.165.0/24
......</pre>
<h4>結束語</h4>
<p style="COLOR: #000000">雖然採取了種種手段，但是攻擊依然沒停止過，上述的方法只是減弱了攻擊的影響，但卻不能徹底解決問題。除了利用IPTables外，還可在應用軟件層做一定的連接頻率，連接數等限制，例如Apache有一個<a href="http://tecblog.no-ip.org/?p=453" target=_blank>mod_limitipconn</a>模塊就可以實現類似功能。</p>
<p style="COLOR: #000000"><a href="http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz">Module Limit connection</a></p>
<p style="COLOR: #000000"><a href="http://blog.xuite.net/huenlil/note/9584716" target=_blank>文章出處</a><br><a href="http://tecblog.no-ip.org/?p=350">http://tecblog.no-ip.org/?p=350</a></p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-08-04 21:33 <a href="http://www.phpweblog.net/killjin/archive/2009/08/04/6818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>人生短暂，自由可贵，单身倍好，光棍万岁！</title><link>http://www.phpweblog.net/killjin/archive/2009/02/11/6323.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 11 Feb 2009 14:43:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/02/11/6323.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6323.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/02/11/6323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6323.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6323.html</trackback:ping><description><![CDATA[一人消费，没有拖累，独立自主，拍板干脆 <br>不扫房屋，不叠床被，不听罗嗦，不会下跪， <br>不看脸色，不用惧内，没有吵闹，没有眼泪， <br>所有收入，自己支配，花钱潇洒，当家绝对， <br>朋友相聚，乱侃胡吹，参加饭局，满足肠胃， <br>能吃能饿，能喝能醉，能爱能恨，能熬能睡， <br>昼夜上网，聊天泡妹，打情骂俏，胆大妄为， <br>连连出招，频频约会，搂抱亲吻，无所忌讳， <br>奔波劳累，身心疲惫，我行我素，无怨无悔， <br>人生短暂，自由可贵，单身倍好，光棍万岁！
<img src ="http://www.phpweblog.net/killjin/aggbug/6323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-02-11 22:43 <a href="http://www.phpweblog.net/killjin/archive/2009/02/11/6323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YUM更新出错后的处理 AttributeError: CHECKSUM_VALUE</title><link>http://www.phpweblog.net/killjin/archive/2009/02/10/6320.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Mon, 09 Feb 2009 16:20:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/02/10/6320.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6320.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/02/10/6320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6320.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6320.html</trackback:ping><description><![CDATA[<div>今日使用 yum -y update 更新 剛安裝好的 Linux CentOS 5.1 系統時，但更新到一半忽然停電..</div>
<div>等來電時，再度使用 yum -y update 進行更新時，卻無法更新了，一直出現以下的錯誤：</div>
<div><br></div>
<div>#yum -y update</div>
<div>Loading "installonlyn" plugin</div>
<div>Setting up Update Process</div>
<div>Setting up repositories</div>
<div>Reading repository metadata in from local files</div>
<div>Traceback (most recent call last):</div>
<div>&nbsp;File "/usr/bin/yum", line 29, in ?</div>
<div>&nbsp;&nbsp; yummain.main(sys.argv[1:])</div>
<div>&nbsp;File "/usr/share/yum-cli/yummain.py", line 94, in main</div>
<div>&nbsp;&nbsp; result, resultmsgs = base.doCommands()</div>
<div>&nbsp;File "/usr/share/yum-cli/cli.py", line 381, in doCommands</div>
<div>&nbsp;&nbsp; return self.yum_cli_commands[self.basecmd].doCommand(self, self.basecmd, self.extcmds)</div>
<div>&nbsp;File "/usr/share/yum-cli/yumcommands.py", line 150, in doCommand</div>
<div>&nbsp;&nbsp; return base.updatePkgs(extcmds)</div>
<div>&nbsp;File "/usr/share/yum-cli/cli.py", line 673, in updatePkgs</div>
<div>&nbsp;&nbsp; self.doRepoSetup()</div>
<div>&nbsp;File "/usr/share/yum-cli/cli.py", line 109, in doRepoSetup</div>
<div>&nbsp;&nbsp; self.doSackSetup(thisrepo=thisrepo)</div>
<div>&nbsp;File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 341, in doSackSetup</div>
<div>&nbsp;&nbsp; self.pkgSack.excludeArchs(archlist)</div>
<div>&nbsp;File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 331, in excludeArchs</div>
<div>&nbsp;&nbsp; sack.excludeArchs(archlist)</div>
<div>&nbsp;File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 589, in excludeArchs</div>
<div>&nbsp;&nbsp; obj = self.pc(rep,self.db2class(x))</div>
<div>&nbsp;File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 431, in db2class</div>
<div>&nbsp;&nbsp; y.checksum = {'pkgid': 'YES','type': db.checksum_type,&nbsp;</div>
<div>&nbsp;File "/usr/lib/python2.4/site-packages/sqlite/main.py", line 97, in __getattr__</div>
<div>&nbsp;&nbsp; raise AttributeError, key</div>
<div>AttributeError: CHECKSUM_VALUE</div>
<div><br></div>
<div>心想，真是糟糕了，這一下該如何是好...使用 yum clean all 也無法解決，經過百般的抽絲剝繭後終於搞定了</div>
<div>以下為解決的方式：</div>
<div>#rpm -qa | grep yum-metadata-parser</div>
<div><br></div>
<div>得到以下結果</div>
<div>yum-metadata-parser-1.1.2-2.el5</div>
<div>yum-metadata-parser-1.0-8.fc6</div>
<div><br></div>
<div>怪了怎麼會有兩個，肯定是斷電後所造成的安裝不完整，而該套件是造成上訴的問題，所以將這兩個套件給先移除</div>
<div>#rpm -ev --nodeps yum-metadata-parser-1.1.2-2.el5</div>
<div>#rpm -ev --nodeps yum-metadata-parser-1.0-8.fc6</div>
<div><br></div>
<div>移除後再將 yum-metadata-parser-1.1.2-2.el5 安裝回去 方法有二：</div>
<div>方法一:</div>
<div>#yum insatll yum-metadata-parser</div>
<div>(此時已經正常可以透過 yum 去安裝了，如果不行，請用方法二)</div>
<div><br></div>
<div>方法二:</div>
<div>#wget http://ftp.cse.yzu.edu.tw/pub/CentOS/5.2/os/i386/CentOS/yum-metadata-parser-1.1.2-2.el5.i386.rpm</div>
<div>#rpm -iv yum-metadata-parser-1.1.2-2.el5.i386.rpm</div>
<div><br></div>
<div>安裝好 yum-metadata-parser 後，再使用 yum -y update 去更新，已經可以正常了，不會再出現上述的問題了..<br><br><a href="http://www.cnblogs.com/pipelone/archive/2008/12/01/1344678.html">http://www.cnblogs.com/pipelone/archive/2008/12/01/1344678.html</a></div>
<img src ="http://www.phpweblog.net/killjin/aggbug/6320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-02-10 00:20 <a href="http://www.phpweblog.net/killjin/archive/2009/02/10/6320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux磁盘读写故障的通常处理流程</title><link>http://www.phpweblog.net/killjin/archive/2009/01/21/6296.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 21 Jan 2009 03:21:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2009/01/21/6296.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6296.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2009/01/21/6296.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6296.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6296.html</trackback:ping><description><![CDATA[<strong>问题</strong>
<p taggedby="hylanda">　　使用Linux作为服务器操作系统的时候</p>
<p taggedby="hylanda">　　维护少不需要重新启动的优势非常明显</p>
<p taggedby="hylanda">　　但有时候会遇到莫明其妙的故障</p>
<p taggedby="hylanda">　　例如数据无法写入，执行某程序报错</p>
<p taggedby="hylanda">　　这个时候建议检查一下，是否是磁盘子系统的故障</p>
<p taggedby="hylanda">　　例如SCSI/IDE/SATA硬盘出现了坏扇区，例如SCSI卡热插拔插座接触不良等。</p>
<p taggedby="hylanda">　　<strong taggedby="hylanda">解决方案</strong></p>
<p taggedby="hylanda">　　1) 首先定位故障所在。</p>
<p taggedby="hylanda">　　查看/var/log/message查看里边是否有磁盘的报错</p>
<p taggedby="hylanda">　　例如如下的信息，就是磁盘错误：</p>
<p taggedby="hylanda">　　Oct 23 10:22:58 vm3 kernel: EXT3-fs error (device ide0(3,5)): ext3_readdir: directory #719520 contains a hole at offset 898727936</p>
<p taggedby="hylanda">　　Oct 23 10:22:58 vm3 kernel: attempt to access beyond end of device</p>
<p taggedby="hylanda">　　Oct 23 10:22:58 vm3 kernel: 03:05: rw=0, want=969723216, limit=6144831</p>
<p taggedby="hylanda">　　还可以执行dmesg，查看物理设备是否有报告SCSI IO error等错误信息</p>
<p taggedby="hylanda">　　如果发现类似信息，则可以确定为磁盘子系统的故障。</p>
<p taggedby="hylanda">　　还有时候也会遇到磁盘某些分区成为了只读分区，任何数据都无法写入</p>
<p taggedby="hylanda">　　这是linux系统在挂载磁盘分区时候发生了错误，随即启动了&#8220;安全模式&#8221;</p>
<p taggedby="hylanda">　　将分区挂载为readonly，即只读状态，以免更严重的损坏发生。</p>
<p taggedby="hylanda">　　2) 确认为磁盘故障后，千万不要重新启动服务器。</p>
<p taggedby="hylanda">　　这种情况下重新启动服务器是比较危险的，可能重启时候读取数据错误造成引导失败</p>
<p taggedby="hylanda">　　系统就在也启动不了了。</p>
<p taggedby="hylanda">　　首先通过mount命令和df命令，查看当前的分区情况。</p>
<p taggedby="hylanda">　　确认有用的数据都放在哪些分区上，这些分区是否独立，是在第几块硬盘等，</p>
<p taggedby="hylanda">　　为一会的具体修复甚至更换硬件做准备。</p>
<p taggedby="hylanda">　　此时应尽快对关键数据做备份，如果挂载有两块磁盘，则可以直接向无故障的磁盘备份。</p>
<p taggedby="hylanda">　　如果只有一块磁盘，可以向其他正常的分区备份（但是也有风险）</p>
<p taggedby="hylanda">　　在只有一块磁盘的情况下，比较可靠的方式是通过scp直接复制远程的文件</p>
<p taggedby="hylanda">　　这样不会在本地写入大量的备份数据，避免加速硬盘的崩溃。</p>
<p taggedby="hylanda">　　但缺点是速度较慢。</p>
<p taggedby="hylanda">　　还有开设共享通过samba映射等各种方式都可以备份数据</p>
<p taggedby="hylanda">　　3) 备份数据完成后，重新启动系统。使用安装光盘进行引导</p>
<p taggedby="hylanda">　　并在启动的时候输入rescue，进入单用户救援模式</p>
<p taggedby="hylanda">　　使用fsck命令，加上-y参数，修复故障的分区。</p>
<p taggedby="hylanda">　　如果故障无法修复，则只能更换硬盘，重新装系统，再导回数据了。</p>
<p taggedby="hylanda">　　以上为linux服务器遇到一般的数据错误的通常解决方法</p>
<p taggedby="hylanda">　　建议具体情况具体分析，查看完全后，在进行操作</p>
<p taggedby="hylanda">　　以免造成数据丢失等严重损失。</p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2009-01-21 11:21 <a href="http://www.phpweblog.net/killjin/archive/2009/01/21/6296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Webserver 维护常用命令</title><link>http://www.phpweblog.net/killjin/archive/2008/12/19/6192.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 19 Dec 2008 01:47:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/12/19/6192.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6192.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/12/19/6192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6192.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6192.html</trackback:ping><description><![CDATA[<p><strong>实时查看正在执行的sql语句</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #000000">/</span>usr<span style="FONT-WEIGHT: bold; COLOR: #000000">/</span>sbin<span style="FONT-WEIGHT: bold; COLOR: #000000">/</span>tcpdump <span style="COLOR: #660033">-i</span> eth0 <span style="COLOR: #660033">-s</span> 0 <span style="COLOR: #660033">-l</span> <span style="COLOR: #660033">-w</span> - dst port <span style="COLOR: #000000">3306</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">strings</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">egrep</span> <span style="COLOR: #660033">-i</span> <span style="COLOR: #ff0000">'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>查看http连接</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-n</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> <span style="COLOR: #ff0000">'/^tcp/ {++state[$NF]} END {for(key in state) print key,"<span style="FONT-WEIGHT: bold; COLOR: #000099">\t</span>",state[key]}'</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>查看SYN状态的http连接</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-an</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> SYN | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> <span style="COLOR: #ff0000">'{print $5}'</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> -F: <span style="COLOR: #ff0000">'{print $1}'</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">uniq</span> <span style="COLOR: #660033">-c</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> <span style="COLOR: #660033">-nr</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">more</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>查看TIME_WAIT状态的http连接</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1<br>2
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-tna</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">cut</span> <span style="COLOR: #660033">-b</span> <span style="COLOR: #000000">49</span>- |<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> TIME_WAIT | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> |<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">more</span>
            <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-an</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> TIME_WAIT | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> <span style="COLOR: #ff0000">'{print $5}'</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> -F: <span style="COLOR: #ff0000">'{print $1}'</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">uniq</span> <span style="COLOR: #660033">-c</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> <span style="COLOR: #660033">-nr</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">more</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>查看ESTABLISHED状态的http连接</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1<br>2
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-an</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> ESTABLISHED | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> <span style="COLOR: #ff0000">'{print $5}'</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> -F: <span style="COLOR: #ff0000">'{print $1}'</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">uniq</span> <span style="COLOR: #660033">-c</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> <span style="COLOR: #660033">-nr</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">more<br></span><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-an</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> <span style="COLOR: #ff0000">":80"</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> ESTABLISHED | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">more</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>批量kill进程</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">ps</span> -efww|<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> sqlr-listener|<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> <span style="COLOR: #660033">-v</span> <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span>|<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">cut</span> <span style="COLOR: #660033">-c</span> <span style="COLOR: #000000">9</span>-<span style="COLOR: #000000">15</span>|<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">xargs</span> <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">kill</span> <span style="COLOR: #660033">-9</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>查看活动的php-cgi连接数</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> -anpo|<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> php-cgi|<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">wc</span> <span style="COLOR: #660033">-l</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>按ip查看httpd连接数</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">netstat</span> <span style="COLOR: #660033">-anlp</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> <span style="COLOR: #000000">80</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">grep</span> tcp | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> <span style="FONT-WEIGHT: bold; COLOR: #7a0874">{</span><span style="COLOR: #ff0000">'print $5'</span><span style="FONT-WEIGHT: bold; COLOR: #7a0874">}</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">awk</span> -F: <span style="FONT-WEIGHT: bold; COLOR: #7a0874">{</span><span style="COLOR: #ff0000">'print $1'</span><span style="FONT-WEIGHT: bold; COLOR: #7a0874">}</span>| <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> |<span style="FONT-WEIGHT: bold; COLOR: #c20cb9">uniq</span> <span style="COLOR: #660033">-c</span> | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sort</span> <span style="COLOR: #660033">-nr</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>禁IP</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            2
            3
            4
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace">iptables <span style="COLOR: #660033">-A</span> INPUT <span style="COLOR: #660033">-s</span> IP地址 <span style="COLOR: #660033">-j</span> REJECT<br>iptables <span style="COLOR: #660033">-A</span> INPUT <span style="COLOR: #660033">-s</span> IP地址<span style="FONT-WEIGHT: bold; COLOR: #000000">/</span><span style="COLOR: #000000">24</span> <span style="COLOR: #660033">-j</span> REJECT</pre>
            <p>route add <span style="COLOR: #660033">-net</span> IP地址 netmask 255.255.255.0 reject</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>调试命令</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">strace</span> <span style="COLOR: #660033">-p</span> pid</pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>跟踪指定的进程pid.</p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">gdb</span> <span style="COLOR: #660033">-p</span> pid</pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>跟踪指定的进程pid. </p>
<p><strong>批量查找文件并删除</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1<br>2
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">find</span> . <span style="COLOR: #660033">-name</span> test.php <span style="COLOR: #660033">-exec</span> <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">rm</span> <span style="FONT-WEIGHT: bold; COLOR: #7a0874">{</span><span style="FONT-WEIGHT: bold; COLOR: #7a0874">}</span> \;<br><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">find</span> . <span style="COLOR: #660033">-name</span> test.php | <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">xargs</span> <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">rm</span> <span style="COLOR: #660033">-rf</span></pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>更改某一目录下所有目录的权限, 不包括文件, aaa 是目录名</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">find</span> aaa <span style="COLOR: #660033">-type</span> d <span style="COLOR: #660033">-exec</span> <span style="FONT-WEIGHT: bold; COLOR: #c20cb9">chmod</span> <span style="COLOR: #000000">755</span> <span style="FONT-WEIGHT: bold; COLOR: #7a0874">{</span><span style="FONT-WEIGHT: bold; COLOR: #7a0874">}</span> \;</pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>替换文件内容</strong></p>
<div class=wp_syntax>
<table>
    <tbody>
        <tr>
            <td class=line_numbers>
            <pre>1
            </pre>
            </td>
            <td class=code>
            <pre class="bash bash" style="FONT-FAMILY: monospace"><span style="FONT-WEIGHT: bold; COLOR: #c20cb9">sed</span> <span style="COLOR: #660033">-i</span> <span style="COLOR: #ff0000">'s/b/strong/g'</span> index.html</pre>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>此命令搜索 index.html 文件中的 b 并将其替换为 strong。<br><br><a href="http://www.lostk.com/blog/linux_webserver_cmd/">http://www.lostk.com/blog/linux_webserver_cmd/</a></p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-12-19 09:47 <a href="http://www.phpweblog.net/killjin/archive/2008/12/19/6192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更改MySQL数据库目录位置</title><link>http://www.phpweblog.net/killjin/archive/2008/11/16/6085.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sun, 16 Nov 2008 14:00:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/16/6085.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6085.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/16/6085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6085.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6085.html</trackback:ping><description><![CDATA[<p>MySQL默认的数据文档存储目录为/var/lib/mysql。prog.Phontol.com假如要把MySQL目录移到/home/data下需要进行下面几步：</p>
<p>1、home目录下建立data目录</p>
<p>cd /home</p>
<p>mkdir data</p>
<p>2、把MySQL服务进程停掉：</p>
<p>mysqladmin -u root -p shutdown</p>
<p>3、把/var/lib/mysql整个目录移到/home/data</p>
<p>mv /var/lib/mysql　/home/data/</p>
<p>这样就把MySQL的数据文档移动到了/home/data/mysql下</p>
<p>4、找到my.cnf配置文档</p>
<p>假如/etc/目录下没有my.cnf配置文档，请到/usr/share/mysql/下找到*.cnf文档，拷贝其中一个到/etc/并改名为my.cnf)中。prog.Phontol.com命令如下：</p>
<p>[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf　/etc/my.cnf</p>
<p>5、编辑MySQL的配置文档/etc/my.cnf</p>
<p>为确保MySQL能够正常工作，需要指明mysql.sock文档的产生位置。prog.Phontol.com修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为：/home/mysql/mysql.sock 。prog.Phontol.com操作如下：</p>
<p>vi　 my.cnf　　　 (用vi工具编辑my.cnf文档，找到下列数据修改之)</p>
<p># The MySQL server</p>
<p>[mysqld]</p>
<p>port　　　= 3306</p>
<p>#socket　 = /var/lib/mysql/mysql.sock(原内容，为了更稳妥用&#8220;#&#8221;注释此行)</p>
<p>socket　 = /home/data/mysql/mysql.sock　　　(加上此行)</p>
<p>6、修改MySQL启动脚本/etc/init.d/mysql</p>
<p>最后，需要修改MySQL启动脚本/etc/init.d/mysql，把其中datadir=/var/lib/mysql一行中，等号右边的路径改成您现在的实际存放路径：home/data/mysql。prog.Phontol.com</p>
<p>[root@test1 etc]# vi　/etc/init.d/mysql</p>
<p>#datadir=/var/lib/mysql　　　　(注释此行)</p>
<p>datadir=/home/data/mysql　　 (加上此行)</p>
<p>7、重新启动MySQL服务</p>
<p>/etc/init.d/mysql　start</p>
<p>或用reboot命令重启Linux</p>
<p>假如工作正常移动就成功了，否则对照前面的7步再检查一下。prog.Phontol.com</p>
<p>还要注意目录的属主和权限。<br></p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-16 22:00 <a href="http://www.phpweblog.net/killjin/archive/2008/11/16/6085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复被破坏了的linux文件系统分区表</title><link>http://www.phpweblog.net/killjin/archive/2008/11/13/6068.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 13 Nov 2008 08:14:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/13/6068.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6068.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/13/6068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6068.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6068.html</trackback:ping><description><![CDATA[<div _element_extended_="true">昨天晚上在信息港的机房里鼓捣到凌晨4点多，帮助朋友修复损坏的硬盘数据。由于当时没有详细的记录，凭回忆先记录下整个过程，也许有错误的地方，请不吝指正！<br><br>现象和环境：REDHAT FC4，一块36G的SCSI硬盘（/dev/sdc）无法mount，fdisk也看不到分区信息。另外一块该盘重要数据的备份盘（9G SCSI硬盘，/dev/sdb）也是同样的现象。均为独立磁盘，没有RAID设置。（怎么这么巧？数据盘和备份盘同时坏掉了）<br><br>整个尝试修复的过程大致如下：<br><br></div>
<h2 _element_extended_="true">尝试查看分区信息</h2>
<div _element_extended_="true">尽管事先被告知fdisk看不到分区信息，还是固执的尝试了一下:-)<br></div>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">fdiks&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">l&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true">果然什么样都看不到。但是，系统启动的时候正确的列出了磁盘的相关信息（大小等），而且fdisk也能够列出磁盘大小等相关物理信息，只是没有分区信息。因此初步判断，是磁盘的分区表丢失，不一定是磁盘物理损坏。<br></div>
<h2 _element_extended_="true">尝试使用parted查看和恢复分区信息</h2>
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">parted&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc</span></div>
</div>
<div _element_extended_="true"><br>print自然也列不出分区信息，好在管理员还有一块分区完全一致的硬盘（是早先通过dd完全复制的），于是挂上这块clone盘，获得了sdc的分区信息，记录下来（注：这里可以有更好的处理方法，见下面的gpart部分），尝试使用parted恢复分区信息：<br><br></div>
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">rescue<br>start</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">end</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;4G</span></div>
</div>
<div _element_extended_="true"><br>上面是parted尝试根据给出起始尺寸和结束尺寸，在这个范围内寻找分区标志符，以决定是否重新写入分区表。可是奇怪的是，总共6个分区，parted只能按照这个办法找回一个分区，其他的都宣告一个提示，大致的意思是&#8220;分区结束符位于开始符之前&#8221;。<br><br>也尝试使用parted的mkpart重新创建分区表，但是失败，提示不能创建更多的主分区（难道分区信息没有丢失吗？为什么不允许创建分区信息呢？）<br><br></div>
<h2 _element_extended_="true">使用gpart尝试找回分区信息</h2>
<div _element_extended_="true">parted没有成功的找回分区信息，于是转而尝试gpart：<br><br></div>
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">gpart&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc</span></div>
</div>
<div _element_extended_="true"><br>可喜的是，gpart经过一段时间的搜寻，列出了看起来有道理的分区信息！但是，按照管理员提供的clone盘，应该是找到6个分区（包括swap）才对，但是gpart只找到了4个。经过分析发现， gpart原来只是找到了主分区分析，扩展分区和逻辑分区没有找到。<br><br>尝试通过<br></div>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">gpart&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">W&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true">将分区信息重新写入到损坏盘中。虽然fdisk, parted可以列出分区信息，但是还是无法mount。于是怀疑文件系统也遭到了损坏。<br><br></div>
<h2 _element_extended_="true">使用reiserfsck/e2fsck修复文件系统</h2>
<div _element_extended_="true">管理员告知，/dev/sdc的文件系统应该是reiserfs，于是尝试使用reiserfsck检查和修复文件系统（事后证明，这是一个严重的错误！）<br></div>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">reiserfsck&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">check&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1<br>reiserfsck&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">fix</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">fixable&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1<br>reiserfsck&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">rebuild</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">sb&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1<br>reiserfsck&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">rebuild</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">tree&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true"><br>但是，一番修复之后，发现仍然无法mount！对比clone盘（早就应该比对了，失策！），才发现原来文件系统是ext3！这一番使用reiserfsck的折腾，估计/dev/sdc1是彻底完蛋了。好在知道/dev/sdc1是一个没有重要数据的分区，可以把用来试验。<br><br>于是，又使用e2fsck（fsck.ext3）尝试修复数据：<br></div>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">fsck</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">ext3&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true">告知找不到superblock，于是：<br></div>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">fsck</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">ext3&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b&nbsp;</span><span style="COLOR: #000000">8193</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true">尝试找回superblock，但是失败！于是在另外几个保存superblock的地方继续尝试：<br></div>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">fsck</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">ext3&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b&nbsp;</span><span style="COLOR: #000000">24577</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1&nbsp;<br>fsck</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">ext3&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b&nbsp;</span><span style="COLOR: #000000">40961</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1&nbsp;<br>fsck</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">ext3&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b&nbsp;</span><span style="COLOR: #000000">57345</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1&nbsp;<br>fsck</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">ext3&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b&nbsp;</span><span style="COLOR: #000000">73729</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sdc1</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true"><br>但是，均告失败！没有找回superblock，极度失望！<br><br></div>
<h3 _element_extended_="true">小技巧：如何知道superblock存储的位置？</h3>
<p _element_extended_="true">
<div _element_extended_="true">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">dd&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">=/</span><span style="COLOR: #000000">dev</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">zero&nbsp;of</span><span style="COLOR: #000000">=/</span><span style="COLOR: #000000">tmp</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">test&nbsp;bs</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008080">count</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">160000</span><span style="COLOR: #000000"><br></span><span style="COLOR: #000000">160000</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;records&nbsp;in<br></span><span style="COLOR: #000000">160000</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;records&nbsp;out<br></span><span style="COLOR: #000000">163840000</span><span style="COLOR: #000000">&nbsp;bytes&nbsp;(</span><span style="COLOR: #000000">164</span><span style="COLOR: #000000">&nbsp;MB)&nbsp;copied</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4.35857</span><span style="COLOR: #000000">&nbsp;seconds</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">37.6</span><span style="COLOR: #000000">&nbsp;MB</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">s<br><br>mke2fs&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">tmp</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">test<br>&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">tmp</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">test&nbsp;is&nbsp;not&nbsp;a&nbsp;block&nbsp;special&nbsp;device</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000"><br>Proceed&nbsp;anyway</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;(y</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">n)&nbsp;y<br>Filesystem&nbsp;label</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br>OS&nbsp;type</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;Linux<br>Block&nbsp;size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #008080">log</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>Fragment&nbsp;size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #008080">log</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #000000">40000</span><span style="COLOR: #000000">&nbsp;inodes</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">160000</span><span style="COLOR: #000000">&nbsp;blocks<br></span><span style="COLOR: #000000">8000</span><span style="COLOR: #000000">&nbsp;blocks&nbsp;(</span><span style="COLOR: #000000">5.00</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">)&nbsp;reserved&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;the&nbsp;super&nbsp;user<br>First&nbsp;data&nbsp;block</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br>Maximum&nbsp;filesystem&nbsp;blocks</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">67371008</span><span style="COLOR: #000000"><br></span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">&nbsp;block&nbsp;groups<br></span><span style="COLOR: #000000">8192</span><span style="COLOR: #000000">&nbsp;blocks&nbsp;per&nbsp;group</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8192</span><span style="COLOR: #000000">&nbsp;fragments&nbsp;per&nbsp;group<br></span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">&nbsp;inodes&nbsp;per&nbsp;group<br>Superblock&nbsp;backups&nbsp;stored&nbsp;on&nbsp;blocks</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">8193</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">24577</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">40961</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">57345</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">73729</span><span style="COLOR: #000000"><br><br>Writing&nbsp;inode&nbsp;tables</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">done</span><span style="COLOR: #000000"><br>Writing&nbsp;superblocks&nbsp;and&nbsp;filesystem&nbsp;accounting&nbsp;information</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">done</span><span style="COLOR: #000000"><br><br>This&nbsp;filesystem&nbsp;will&nbsp;be&nbsp;automatically&nbsp;checked&nbsp;every&nbsp;</span><span style="COLOR: #000000">35</span><span style="COLOR: #000000">&nbsp;mounts&nbsp;or<br></span><span style="COLOR: #000000">180</span><span style="COLOR: #000000">&nbsp;days</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;whichever&nbsp;comes&nbsp;first</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">Use</span><span style="COLOR: #000000">&nbsp;tune2fs&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">c&nbsp;or&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i&nbsp;to&nbsp;override</span><span style="COLOR: #000000">.</span></div>
</div>
<p _element_extended_="true">&nbsp;</p>
<div _element_extended_="true"><br></div>
<h2 _element_extended_="true">尝试live cd</h2>
<div _element_extended_="true">万般无奈，下载knoppix live cd，启动起来，居然认出并成功加载了/dev/sdb (备份盘)！于是把备份数据先弄下来再说。<br><br>但是，knoppix没有认出/dev/sdc，时间已经临近凌晨4点，这个盘暂时被宣布死缓。<br><br><br></div>
<h2 _element_extended_="true">经验教训</h2>
<div _element_extended_="true">
<ul>
    <li>系统安装时，一定要记录磁盘分区的相关信息，包括分区情况，所使用的参数（比如块大小）
    <li>常规备份是万万不能缺少的。对于系统管理员而言，系统崩溃是迟早要面临的事情，没有侥幸可言。 </li>
</ul>
</div>
<p><a href="http://blog.guoshuang.com/showlog.asp?log_id=4213">http://blog.guoshuang.com/showlog.asp?log_id=4213</a><br><a href="http://www.yeeyan.com/articles/view/888888/4137">http://www.yeeyan.com/articles/view/888888/4137</a><br><br></p>
<p>1. ext2ifs</p>
<p>这个工具与explore2fs都是John Newbigin使用Delphi写的，explore2fs Copyright (C) 2000，Ext2IFS v0.3 Copyright (C) 2004，由此也可以推测下哪个程序更完善，ext2ifs默认支持ext分区的写操作。</p>
<p>下载地址：http://uranus.it.swin.edu.au/~jn/li&#8230;ext2ifs-0.3.zip</p>
<p>http://uranus.it.swin.edu.au/~jn/linux/ext2ifs.htm</p>
<p>2.Paragon Ext2FS Anywhere</p>
<p>帮助你在 Windows 下访问 Linux 分区，把其作为正常逻辑器使用。提供对隐藏或者刚刚被创建的和格式化的 FAT/NTFS 分区。将创建，删除，格式，隐藏，在 Windows 下面取消隐藏初选，逻辑值或者扩展逻辑分区。你能够也马上改变的驱动器盘符。支持ext2／3读写，但是对超过4G的文件写入存在不可预知的问题。</p>
<p>3.explore2fs</p>
<p>使用相当简单，下载后解压缩，执行explore2fs.exe，程序会自动搜索ext2、ext3分区。</p>
<p>4.Total Commander加Ext2+Reiser 插件</p>
<p>Total Commander 网上很多，自行搜索一下吧。</p>
<p>Ext2+Reiser 插件下载</p>
<p>下载地址：http://ghisler.fileburst.com/fsplugins/ex2fs.zip</p>
<p>http://www.ghisler.com/plugins.htm 有许多插件可下载使用。</p>
<p>下载并安装Total Commander，下载并解压缩Ext2+Reiser插件中的output目录到Total Commander的安装目录内（或硬盘的其他固定位置，想使用就不能删除），运行Total Commander，选择配置－－插件－－文件系统插件－－配置－－添加－－找到ex2fs.wfx并添加，最后&#8220;确定&#8221;插件添加成功。</p>
<p>5.Ext2 Installable File System(另一个ext2ifs)</p>
<p>两个软件不是一个作者，不过实现的原理应该相似，驱动通用。这个软件安装后就能使用ext分区，可读写，但更改分区盘符很不方便，需要先到控制面板卸载，重启后重新安装程序重设盘符。</p>
<p>http://www.fs-driver.org/download.html</p>
<p>6.Paragon Mount Everything</p>
<p>和Paragon Ext2FS Anywhere这个软件是同一个公司出品，功能极其相似，Paragon Mount Everything Professional里已经包含了Paragon Ext2FS Anywhere，当然卖的价格也高了10美元。支持ext2／3读写，但是对超过4G的文件写入存在不可预知的问题。</p>
<p>引用:</p>
<p>Paragon Mount Everything Professional 是一款功能强劲的磁盘管理工具,程序</p>
<p>可以让你挂载各种系统格式下文件的软件，让不同系统下的文件可以互相访问。</p>
<p>Mount Everything 用于解除各个操作系统（DOS，Windows，Linux）访问彼此文件</p>
<p>系统的分区，使得访问计算机上别的操作系统的文件系统如同访问自己本来的文件系</p>
<p>统一样方便，可以自如的浏览、读写、创建甚至运行在各个分区的文件。</p>
<p>－支持NTFS1.2 - 3.1（Windows NT/2000/XP）；</p>
<p>－支持可压缩的NTFS；</p>
<p>－支持Ex2和Ext3文件系统；</p>
<p>－在各中环境－Windows、DOS、Linux－下都支持大于4GB的分区；</p>
<p>－Windows平台支持：Windows 95/98/ME, Windows NT/2000 Workstation/Pro,</p>
<p>Windows XP；</p>
<p>－任何Windows版本都可以无限制的访问Ext2/3FS和NTFS；</p>
<p>－DOS下对NTFS只读；</p>
<p>－Linux下对NTFS只读；</p>
<p>－在任何环境都支持基于脚本的批处理；</p>
<p>－Windows下提供了各种基本的分区功能；</p>
<p>－WIndows和DOS下随意改变启动器号；</p>
<p>－可建立能够访问NTFS以及其他各种移动存贮设备的DOS启动盘；</p>
<p>－提供了一个启动光盘，可直接进入DOS或Linux，并且访问NTFS（只读）；</p>
<p>7.Ext2Fsd</p>
<p>安装后使用mount命令对ext分区挂载卸载，可读写。</p>
<p>下载地址： http://switch.dl.sourceforge.net/so&#8230;xt2Fsd-0.25.exe</p>
<p>8、rfstool</p>
<p>命令行工具</p>
<p>http://p-nand-q.com/download/rfstool.html</p>
<p>下载地址：http://freshmeat.net/redir/rfstool/&#8230;fstool-0.14.zip</p>
<p>9、rfsgui-2.2</p>
<p>使用rfstool功能，gui界面。</p>
<p>下载地址：http://www.wolfsheep.com/map/rfsgui/rfsgui-2.2.zip</p>
<p>10、YAReG</p>
<p>也是使用rfstool功能，gui界面，需.net framework的支持</p>
<p>http://yareg.akucom.de/</p>
<p>11.ReiserDriver Pre-release Version 2</p>
<p>下载地址：http://switch.dl.sourceforge.net/so&#8230;-release.v2.zip</p>
<p>12.R-studio</p>
<p>功能超强的数据恢复、反删除工具，采用全新恢复技术，为使用 FAT12/16/32、NTFS、NTFS5（Windows 2000系统）和Ext2FS（Linux系统）分区的磁盘提供完整数据维护解决方案！同时提供对本地和网络磁盘的支持，此外大量参数设置让高级用户获得最佳恢复效果。具体功能有：采用Windows资源管理器操作界面；通过网络恢复远程数据（远程计算机可运行 Win95/98/ME/NT/2000/XP、Linux、UNIX系统）；支持FAT12/16/32、NTFS、NTFS5和Ext2FS文件系统；能够重建损毁的RAID阵列；为磁盘、分区、目录生成镜像文件；恢复删除分区上的文件、加密文件（NTFS 5）、数据流（NTFS、NTFS 5）；恢复FDISK或其它磁盘工具删除过得数据、病毒破坏的数据、MBR破坏后的数据；识别特定文件名；把数据保存到任何磁盘；浏览、编辑文件或磁盘内容等等。</p>
<p>上面列出的工具只是比较常见的，还有不少WINDOWS下可访问LINUX分区的工具，这得益于微软的IFS Kit（The primary goal of the Microsoft Windows Installable File System (IFS) Kit is to provide all of the materials necessary to design, build, and debug file systems and file system filter drivers for Windows 2000 and later operating systems.）想看了解更多不妨到这里去看看：</p>
<p>http://www.microsoft.com/taiwan/whdc/devtools/ifskit/default.mspx </p>
<p>WinAllFS<br><br>EXT2FSD</p>
<!-- google_ad_section_end -->
<img src ="http://www.phpweblog.net/killjin/aggbug/6068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-13 16:14 <a href="http://www.phpweblog.net/killjin/archive/2008/11/13/6068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复Linux内核错误</title><link>http://www.phpweblog.net/killjin/archive/2008/11/13/6067.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 12 Nov 2008 19:20:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/13/6067.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6067.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/13/6067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6067.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6067.html</trackback:ping><description><![CDATA[环境介绍：Centos5.2+2.6.18-8.el5内核，编译器是GCC4.1.2。<br>要编译的内核2.6.18-8.el3<br>仅仅修改了部分内核的配置信息，没有大的变化。<br>然后：make ;make modules;make modules_install;<br>编译没有出问题，生成了内核，mkinitrd生成了initrd，加到lilo.conf中，重启选择新内核，出现一下问题：<br><br>hub 3-0:1.0: USB hub found<br>hub 3-0:1.0: 2 ports detected<br>Scanning and configuring dmraid supported devices<br>Trying to resume from LABEL=SWAP-hdc4<br>No suspend signature on swap, not resuming.<br>Creating root device.<br>Mounting root filesystem.<br>mount: could notKernel panic - not syncing: Attempted to kill init!<br>find filesystem&nbsp;&nbsp;'/dev/root'<br>Setting up other filesystems.<br>Setting up new root fs<br>setuproot: moving /dev failed: No such file or directory<br>no fstab.sys, mounting internal defaults<br>setuproot: error mounting /proc: No such file or directory<br>setuproot: error mounting /sys: No such file or directory<br>Switching to new root and running init.<br>unmounting old /dev<br>unmounting old /proc<br>unmounting old /sys<br>switchroot: mount failed: No such file or directory<br>两者区别就是编译器版本一个是gcc3.4，一个是gcc4.1，后者编译通过，但是不能引导系统。<br><br>解决方法：<br>Here's the fix<br>After almost giving up on Fedora 5, I finally got the fix to this problem.<br><br>The suspend signature on swap error, "Trying to resume from LABEL=SWAP-hdd3. No suspend signature on swap, not resuming", can be ignored. It gives this error because when the volumes are activated (look at the output previous to this error), it resumes the swap partition in that step. Therefore, it's trying to resume something that isn't suspended.<br><br>The error that causes all the trouble is "mount: could not find filesystem '/dev/root'". Appartently, in the init script within initrd-2.6.15-1.2054_FC5.img, the command 'mount /sysroot' is trying to mount /dev/root to /sysroot. Fedora 5 does not use /dev/root like in the previous versions of Fedora. Instead, it uses '/dev/VolGroup00/LogVol00' or '/dev/hda1' (or whereever '/' is located) to mount to /sysroot. For some reason, when init calls 'mount /sysroot', it's trying to mount /dev/root to /sysroot, instead of /dev/VolGroup00/LogVol00 to /sysroot. This messes up everything after this step in the init process. When it does a switchroot at the end, it fails. After killing init, it causes the kernel panic.<br><br>Here's the fix:<br><br>1) Boot with the rescue CD<br>2) Type 'chroot /mnt/sysimage' (wherever it mounts the Fedora 5 partition)<br>3) 'cd /boot'<br>4) 'mkdir newinit'<br>5) 'cd newinit'<br>6) 'gunzip -c ../initrd-2.6.15-1.2054_FC5.img | cpio -idmv'<br>7) 'vi init'<br>8) Find 'mount /sysroot' (near the end of the file)<br>9) Delete or comment this out<br>10) Replace with 'mount -o defaults --ro -t ext3 /dev/VolGroup00/LogVol00 /sysroot' where /dev/VolGroup00/LogVol00 is the mount point for /<br>11) ':wq' out of vi<br>12) 'find . | cpio --quiet -c -o &gt;../newinitrd'<br>13) 'cd ..' - you are now in /boot<br>14) 'mv initrd-2.6.15-1.2054_FC5.img initrd-2.6.15-1.2054_FC5.bak' - backup current initrd img file (just in case)<br>15) 'gzip -9 &lt; newinitrd &gt; initrd-2.6.15-1.2054_FC5.img'<br>16) Reboot the computer without the CD<br><br>* Steps 4-6,12,13,15 were taken from another site, but I couldn't post the URL. I'll try in my next post.<br><br>This should fix it. I'm glad I can finally run Fedora 5 on my box.<br><br>MarkCole, I'm not sure if you were experiencing the exact same problems I was with mounting root. However, I hope this helps anyone else experiencing the same problems I had.<br><br>Andy 
<img src ="http://www.phpweblog.net/killjin/aggbug/6067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-13 03:20 <a href="http://www.phpweblog.net/killjin/archive/2008/11/13/6067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zend 框架摘要</title><link>http://www.phpweblog.net/killjin/archive/2008/11/12/6063.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 12 Nov 2008 12:36:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/12/6063.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6063.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/12/6063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6063.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6063.html</trackback:ping><description><![CDATA[<p>From: <a href="http://www.ibm.com/developerworks/cn/opensource/top-projects/php-resources.html#zend">http://www.ibm.com/developerworks/cn/opensource/top-projects/php-resources.html#zend</a></p>
<p>Zend 框架组件包括：</p>
<p>Zend_Controller<br>此模块为应用程序提供全面的控制。它将请求转化为特定的行为并确保其执行。</p>
<p>Zend_Db<br>此模块基于 PHP 数据对象 (PDO) 并提供一种通用方式来访问数据库。</p>
<p>Zend_Feed<br>此模块使使用 RSS 和 Atom 提要变得简单。</p>
<p>Zend_Filter<br>此模块提供字符串过滤函数，如 isEmail() 和 getAlpha()。</p>
<p>Zend_InputFilter<br>对于 Zend_Filter，此模块是用来操作数组的，如表单输入。</p>
<p>Zend_HttpClient<br>此模块使您能轻易地执行 HTTP 请求。</p>
<p>Zend_Json<br>此模块使您能够轻易地将 PHP 对象转换成 JavaScript 对象符号，反之亦然。</p>
<p>Zend_Log<br>此模块提供通用日志功能。</p>
<p>Zend_Mail<br>此模块使您能够发送文本文件和多部分 MIME 电子邮件。</p>
<p>Zend_Mime<br>此模块被 Zend_Mail 用来解码 MIME 消息。</p>
<p>Zend_Pdf<br>此模块用来创建新的 PDF 文档，及加载和编辑现有文档。</p>
<p>Zend_Search<br>此模块使您能在现有文本上执行复杂搜索。例如，您可以建立一个搜索引擎，该引擎可以基于相关性或其他因素返回结果。</p>
<p>Zend_Service_Amazon、Zend_Service_Flickr 以及 Zend_Service_Yahoo<br>这些模块提供对这些 Web 服务 API 的简单访问。</p>
<p>Zend_View<br>此模块处理 MVC 模式的 &#8220;视图&#8221; 部分。</p>
<p>Zend_XmlRpc<br>此模块使您能够轻易地创建 XML-RPC 客户机。（已为将来计划好服务器功能。）</p>
<p>编码准则</p>
<p>当您为 Zend 框架编码，或使用其编码时，您应该遵循特定的准则。这些准则是为了使团队项目变得更加简单而设计的。换句话说，通过定义编码规范，您不仅能避免接下来的问题，而且能够使其他人更容易阅读您的代码。Zend 框架文档中包含几页指导准则，比如：</p>
<p>* 确保文件整洁。换句话说，在文件头、标准的四格缩进等前面不能有任何前导或者后置的空格，这些空格会调用 Web 服务器导致意外地发送内容。<br>* 有且只有当类作为 Zend 框架的一部分时，而不仅仅是使用 Zend 框架时，类名才以 Zend_ 开头。<br>* 在函数名中下划线是禁止的。而是使用小写开头大小写间隔的方式（如 getTodaysDate()）。<br>* 只有当变量是 private 或 protected 类型时，才以下划线开头。<br>* 将所有的变量声明为 private、protected 或者 public，而不要使用 var。<br>* 使用标准的 PHP 标记（如 ），而不是简写方式 ()。<br>* 确保您的代码易于阅读。换句话说，当使用一个句号 (.) 连接文本时，确保在句号前后加上空格以便于阅读。同理，当声明一个数组时，要在逗号后面加上空格。<br>* 如果您必须通过引用传值，那只能在函数声明中这样做。调用时通过引用传值是不允许的。<br>* 任何 PHP 文件都必须包括能被 PhpDocumentor 阅读的文档，并且编码准则指定了特定的最少标记。<br><br>From: <a href="http://www.lostk.com/blog/zend_framework_summary/">http://www.lostk.com/blog/zend_framework_summary/</a> </p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-12 20:36 <a href="http://www.phpweblog.net/killjin/archive/2008/11/12/6063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYSQL不能启动解决办法</title><link>http://www.phpweblog.net/killjin/archive/2008/11/12/6062.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 12 Nov 2008 10:47:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/12/6062.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6062.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/12/6062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6062.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6062.html</trackback:ping><description><![CDATA[<p>启动mysql 报错：</p>
<p>ERROR 2002 (HY000): Can&#8217;t connect to local MySQL server through socket &#8216;/var/lib/mysql/mysql.sock&#8217; (2)</p>
<p>1、先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.<br>另外看看是不是权限问题.</p>
<p>2、确定你的mysql.sock是不是在那个位置，<br>mysql -u 你的mysql用户名 -p -S /var/lib/mysql/mysql.sock</p>
<p>3、试试：service mysqld start</p>
<p>4、如果是权限问题，则先改变权限 #chown -R mysql:mysql /var/lib/mysql</p>
<p>[root@localhost ~]# /etc/init.d/mysqld start<br>启动 MySQL： [ 确定 ]<br>[root@localhost ~]# mysql -uroot -p</p>
<p>&nbsp;</p>
<p>ERROR 2002 (HY000): Can't connect to local <a onclick="javascript:tagshow(event, 'MySQL');" href="javascript:;" target=_self><u><strong><font color=#70314e>MySQL</font></strong></u></a> server through socket '/var/lib/mysql/mysql.sock' (2)<br>&nbsp;&nbsp; <span id=ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry>原因是，/var/lib/mysql 的访问权限问题。<br><br>shell&gt; chown -R mysql:mysql /var/lib/mysql<br><br>接着启动服务器<br><br>shell&gt; /etc/init.d/mysql start<br><br>服务器正常启动后察看 /var/lib/mysql 自动生成mysql.sock文件。<br><br>但是我的问题仍然没有得到解决。<br><br>问题终于解决：<br>方法：&nbsp;&nbsp;&nbsp; 修改/etc/my.conf:<br></span>[mysqld] <br>datadir=/usr/local/mysql/data <br>socket=/var/lib/mysql/mysql.sock <br><br>[mysql.server] <br>user=mysql <br>basedir=/usr/local/mysql <br></p>
<p>If there is not currently a section called [client], add one at the bottom of the file and copy the socket= line under the [mysqld] section such as: <br><br></p>
<div class=code>[client] <br>socket=/var/lib/mysql/mysql.sock </div>
<p><br>发现依旧如此，运行<span id=ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry>/etc/init.d/mysql start报错：&nbsp;&nbsp;&nbsp; Starting MySQLCouldn't find MySQL manager or server <br>是mysqld服务没启，运行/usr/local/mysql/bin/mysqld_safe &amp;<br><br>问题解决。<br><br><br><br><span style="COLOR: #ff0000"><strong>mysql Couldn't find the mysql server or manager<br></strong></span></p>
<p oN30g="0" yj_6T="19">Solution <br>Step 1.)<br><br>Rem out the line in /etc/my.conf that was setting basedir to /var/lib. As seen below:<br><strong><font color=red oN30g="0" yj_6T="3"><br>user=mysql<br>#basedir=/var/lib<br></font></strong><br>Step 2.)<br><br>Create the directory "/var/run/mysqld" if it does not exist. Then chown that directory to mysql.mysql as below...<br><strong><font color=red oN30g="0" yj_6T="3"><br>mkdir /var/run/mysqld<br>chown mysql.mysql /var/run/mysqld<br></font></strong><br>Step 3.)<br><br>Start the service..<br><strong><font color=red oN30g="0" yj_6T="1"><br>service mysql start<br></font></strong></p>
<p><br></span></p>
<img src ="http://www.phpweblog.net/killjin/aggbug/6062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-12 18:47 <a href="http://www.phpweblog.net/killjin/archive/2008/11/12/6062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复MYSQL数据库</title><link>http://www.phpweblog.net/killjin/archive/2008/11/12/6061.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 12 Nov 2008 09:44:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/12/6061.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6061.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/12/6061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6061.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6061.html</trackback:ping><description><![CDATA[全部:<br>mysqlcheck -A -o -r -p -uroot<br><br>指定数据库:<br>mysqlcheck -A -o -r 数据库名 -p <br><br><br>-r 恢复模式 -q 快速恢复<br>myisamchk -r tbl_name/*.MYI<br>myisamchk -r -q tbl_name/*.MYI<br><br>安全恢复<br>myisamchk --safe-recover tbl_name/*.MYI <br><br>quick参数做修补的工作： <br>linux# myisamchk --recover --quick tbl_name <br>linux# isamchk --recover --quick tbl_name <br>如果上面的方法不能解决问题，可以将--quick参数去掉： <br>linux# myisamchk --recover tbl_name <br>linux# isamchk --recover tbl_name <br>如果还是不能解决问题，可以再试着改用--safe_recover参数: <br>linux# myisamchk --safe_recover --quick tbl_name <br>linux# isamchk --safe_recover --quick tbl_name <br><br>附加MYSQL可怕的错误：<br>mysqld got signal 11;<br>The manual section 'Debugging a MySQL server' tells you how to<br>use a stack trace and/or the core file to produce a readable <br>backtrace that may help in finding out why mysqld died<br>Attempting backtrace. You can use the following information <br>to find out where mysqld died.&nbsp; If you see no messages after <br>this, something went terribly wrong...<br>stack range sanity check, ok, backtrace follows<br>0x40077552<br>0x81281a0<br>0x8128f47<br>0x8127be0<br>0x8127995<br>0x8104947<br>0x80ff28f<br>0x810131b<br>0x80ee4bc<br>0x80c3c91<br>0x80c6b43<br>0x80c1fd9<br>0x80c1686<br><br><a href="http://dev.mysql.com/doc/refman/5.0/en/using-stack-trace.html">http://dev.mysql.com/doc/refman/5.0/en/using-stack-trace.html</a>
<img src ="http://www.phpweblog.net/killjin/aggbug/6061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-12 17:44 <a href="http://www.phpweblog.net/killjin/archive/2008/11/12/6061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序端口命令</title><link>http://www.phpweblog.net/killjin/archive/2008/11/12/6058.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 12 Nov 2008 09:01:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/12/6058.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6058.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/12/6058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6058.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6058.html</trackback:ping><description><![CDATA[lsof lsof -i@127.0.0.1:80<br>fuser<br>netstat -p&nbsp; netstat -lnp<br>
<img src ="http://www.phpweblog.net/killjin/aggbug/6058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-12 17:01 <a href="http://www.phpweblog.net/killjin/archive/2008/11/12/6058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>俞敏洪的那段激动人心的励志话语 </title><link>http://www.phpweblog.net/killjin/archive/2008/11/10/6045.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Mon, 10 Nov 2008 15:16:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/10/6045.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6045.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/10/6045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6045.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6045.html</trackback:ping><description><![CDATA[人的生活方式有两种，<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>&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; ——俞敏洪在《赢在中国》36进12第3场中的现场演讲<br><br><embed src=http://www.tudou.com/v/e6ywqPOX3Ms width=400 height=342 type=application/x-shockwave-flash allowScriptAccess="always" wmode="transparent" allowFullScreen="true">&nbsp;<br><br>
<object width="400" height="340"><param name="movie" value="http://www.tudou.com/v/TZYMmaXLIms"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://www.tudou.com/v/TZYMmaXLIms" type="application/x-shockwave-flash" width="400" height="340" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object><img src ="http://www.phpweblog.net/killjin/aggbug/6045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-10 23:16 <a href="http://www.phpweblog.net/killjin/archive/2008/11/10/6045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache出现大量的CLOSE_WAIT状态连接</title><link>http://www.phpweblog.net/killjin/archive/2008/11/07/6029.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 07 Nov 2008 15:27:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/07/6029.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6029.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/07/6029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6029.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6029.html</trackback:ping><description><![CDATA[一台运行Apache的Web服务器，前面有Squid，出现大量的CLOSE_WAIT连接，直接占满TCP队列，导致Apache失去响应。<br><br>一般来说，在一次正常的HTTP连接结束时，按正常的次序应该是服务器先发出FIN信号，客户端确认，然后客户端再发出FIN信号，服务端确认。如果客户端因为某种原因先于服务端发出了FIN信号，就会导致服务端被动关闭。<br><br>-------------------------------------<br><br><code>通过下列</code><code>Linux</code><code>内核参数来解决问题：<br><br></code><code>sysctl -w </code><code>net.ipv4.tcp_keepalive_time=30<br></code><code>sysctl -w </code><code>net.ipv4.tcp_keepalive_probes=2<br></code><code>sysctl -w </code><code>net.ipv4.tcp_keepalive_intvl=2<br><br>注意：Linux的内核参数我调整的可能有些猛，到底合不合适要注意观察。<br></code><code><br>参考链接：<br>http://ipsysctl-tutorial.frozentux.net/<br>http://haka.sharera.com/blog/BlogTopic/32309.htm<br></code>
<img src ="http://www.phpweblog.net/killjin/aggbug/6029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-07 23:27 <a href="http://www.phpweblog.net/killjin/archive/2008/11/07/6029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL优化经验</title><link>http://www.phpweblog.net/killjin/archive/2008/11/07/6028.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 07 Nov 2008 09:00:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/07/6028.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6028.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/07/6028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6028.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6028.html</trackback:ping><description><![CDATA[<a href="http://kb.discuz.net/index.php?title=MySQL%E4%BC%98%E5%8C%96%E7%BB%8F%E9%AA%8C">http://kb.discuz.net/index.php?title=MySQL%E4%BC%98%E5%8C%96%E7%BB%8F%E9%AA%8C</a>
<img src ="http://www.phpweblog.net/killjin/aggbug/6028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-07 17:00 <a href="http://www.phpweblog.net/killjin/archive/2008/11/07/6028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不再为Apache进程淤积、耗尽内存而困扰</title><link>http://www.phpweblog.net/killjin/archive/2008/11/07/6027.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 07 Nov 2008 08:29:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/07/6027.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6027.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/07/6027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6027.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6027.html</trackback:ping><description><![CDATA[<div class=tpc_content id=read_tpc>
<div>本篇文章是为使用Apache+MySQL，并为Apache耗尽内存而困扰的系统管理员而写。如果您没有耐心读完本文，请参考以下步骤：</div>
<ol>
    <li>修改/etc/my.cnf,加上这样一行：<br>log-slow-queries=queries-slow.log
    <li>重启MySQL
    <li>酌情过上一段时间，执行mysqldumpslow命令，或直接查看datadir/queries-slow.log,从中找出执行超时的SQL语句。其中datadir是MySQL所有数据库的存放路径。
    <li>根据上一步找出的SQL语句的内容，找到相应的数据表和脚本文件，查看超时原因所在。可能的原因有：数据量确实太大，未使用索引加快查询速度，等等。但程序没写好肯定是原因之一。
    <li>根据查出的原因酌情解决。 </li>
</ol>
<div>可能有很多系统管理员都为这样的情形而困扰过：Apache进程动辄占用内存几百兆，而且剧烈浮动，变化无常，有时甚至耗掉上G内存。在访问者那里的表现就是网站速度极不稳定，间歇性抽风，有时甚至会有5-30分钟无法打开网页。这时候，你的上司或同事可能会急切地打来电话问：我们的网站怎么上不去了？我们今天还要xxxx呢！但这时你的SSH也无法像往常一样忠实地给你一个&#8220;login:&#8221;，因为它也连不上服务器了。这个时候你的服务器在做什么呢？你找出各种理由向他们解释之后，过上一段时间，网站能够正常访问了，你也终于SSH上了服务器（听起来系统管理员真没用），然后你会用dmesg或者在/var/log/messages里面发现一堆有关内存的信息，什么DMA了，HighMem了，其中会包含类似这样一行：</div>
<div>Out of Memory: Killed process 6760 (httpd).</div>
<div>它告诉你的信息是，你的服务器物理内存耗尽，也没什么好向交换区淘汰的了，只好杀掉了你的Apache的一个进程。之所以选择这个进程，基本上就是因为它占用的物理内存最多。</div>
<div>&nbsp;</div>
<div>很没面子的说，我被这样的问题困扰了大半年。我曾在网上疯狂地搜索解决的办法，那些文章一般都会告诉你修改httpd.conf,把MinSpareThreads或是MaxSpareThreads或是MaxRequestsPerChild设小一点，我尝试过各种设定，都没有明显的效果。我甚至曾极端地经把MaxRequestsPerChild设为1，但是Apache的进程还是会淤积，超过ServerLimit设定值，直到耗尽内存。</div>
<div>&nbsp;</div>
<div>我曾经怀疑过是PHP内存泄漏，因为PHP官方不保证PHP的各种扩展是线程安全的，推荐使用prefork MPM而不是worker MPM.于是我也曾经把ThreadsPerChild设为1，因为这样每个进程也就只有一个线程，在一定意义上相当于prefork MPM，但是这种做法还是没有效果，问题依旧。</div>
<div>&nbsp;</div>
<div>大约一周以前，我在检查MySQL的运行状态的时候，发现有一项Slow_queries数值很高，我敏感地认识到可能是某个程序的SQL语句没有写好，而且很可能就是这样的程序导致Apache进程淤积。然后我翻阅了MySQL手册中有关<a href="http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html" target=_blank><font color=#2b76b0>Slow query log</font></a>的部分，按照那里的指示，修改/etc/my.cnf,在mysqld那一段加上如下一行：</div>
<div>&nbsp;</div>
<div>log-slow-queries=queries-slow.log</div>
<div>&nbsp;</div>
<div>重启MySQL。过上一段时间以后，用mysqldumpslow命令找出了执行超时的那条语句，根据那条查询的内容，我找出相应的脚本。那是一个留言本页面，程序确实没有写好，成了垃圾广告的乐园。有人通过这个页面向数据库里面写入了超过10万条的流言，而正常的留言还不到300条。而且这个程序里面分页的做法，居然是查询数据表里面所有10万条数据并排序，而用到的只有区区10条。竟然不使用LIMIT语句，我<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#126;&#64;&#35;&#36;&#37;"><font color=#2b76b0>~@#$%</font></a>^&amp;*!后来证实这个留言本已经是废弃的了（我想也不可能是正在使用的，因为每次都执行超时，已经无法使用了），就删掉了。之后，就再也没有出现过进程淤积、内存耗尽的问题。在ThreadsPerChild=64的情况下，每个Apache进程的内存一般就几十兆，最多的时候也就只有200M,进程数量也很少超过六七个。</div>
<div>&nbsp;</div>
<div>历经千辛万苦，终于搞定了这个问题。在此加以总结，希望本文能够给跟我一样被程序员害惨的系统管理员们一点点帮助。</div>
</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/6027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-07 16:29 <a href="http://www.phpweblog.net/killjin/archive/2008/11/07/6027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SYN_RECV SYN Flood 攻击处理</title><link>http://www.phpweblog.net/killjin/archive/2008/11/07/6026.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 07 Nov 2008 05:30:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/07/6026.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6026.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/07/6026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6026.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6026.html</trackback:ping><description><![CDATA[<p>网页在翻页到一个特定的页面的时候，和服务器80端口的连接被中止。<br>查看了netstat -anlp 发现有类似以下的记录，而IP就是我的。<br>
<blockquote>tcp 0 2560 61.152.251.68:80 60.26.156.241:1523 SYN_RECV -</blockquote>由于可能是程序的问题，因为仅仅在浏览这张网页的时候会出现这个问题，但是还是在netstat里面偶尔会看到几个 SYN_RECV ,所以就google了一下，在此总结一下。
<p>&#160;</p>
<p><strong>1.对于大量的 SYN_RECV</strong><br>若怀疑是SYN Flood攻击，有<a href="http://www.linuxforum.net/forum/showflat.php?Cat=&amp;Board=security&amp;Number=416586&amp;page=0&amp;view=collapsed&amp;sb=5&amp;o=31&amp;fpart=">以下建议</a>:<br>
<blockquote>这个攻击的解决方法如下： <br>1，增加未完成连接队列（q0)的最大长度。 <br>echo 1280&gt;/proc/sys/net/ipv4/tcp_max_syn_backlog <br>2, 启动SYN_cookie。 <br>echo 1&gt;/proc/sys/net/ipv4/tcp_syncookies <br>这些是被动的方法，治标不治本。而且加大了服务器的负担，但是可以避免被拒绝攻击（只是减缓） <br>治本的方法是在防火墙上做手脚。但是现在能在一定程度上防住syn flood攻击的防火墙都不便宜。并且把这个命令加入"/etc/rc.d/rc.local"文件中</blockquote><br>如果对 /proc/sys/net/ipv4 下的配置文件进行解释，可以参阅 <a href="http://oldsite.linuxaid.com.cn/training/showtri.jsp?i=371">LinuxAid技术站的文章</a>。查看本文全文也可以参阅。<br>关于 syn cookies， 请参阅 <a href="http://cr.yp.to/syncookies.html">&lt;<syn cookies>&gt; http://cr.yp.to/syncookies.html</a><br>也许 <a href="http://www.chinaunix.net/jh/13/3129.html">使用mod_limitipconn.c来限制apache的并发数</a> 也会有一定的帮助。
<p>&#160;</p>
<p><font color=red>最终，仅仅修改了这个参数，但是也加上了iptables的防火墙规则，问题解决。</font></p>
<p><strong>2.什麼是 TCP SYN Flood 攻擊?</strong> <br>發表日期： 星期二, 15 六月 2004 @ 01:36:47 台北標準時間 <br><br>TCP SYN Flood是一種常見，而且有效的遠端(遠程)拒絕服務(Denial of Service)攻擊方式，它透過一定的操作破壞TCP三次握手建立正常連接，佔用並耗費系統資源，使得提供TCP服務的主機系統無法正常工作。 由於TCP SYN Flood是透過網路底層對服務器Server進行攻擊的，它可以在任意改變自己的網路IP地址的同時，不被網路上的其他設備所識別，這樣就給防範網路犯罪部門追查犯罪來源造成很大的困難。 在國內內外的網站中，這種攻擊屢見不鮮。在一個拍賣網站上，曾經有犯罪分子利用這種手段，在低價位時阻止其他用戶繼續對商品拍賣，干擾拍賣過程的正常運作。</p>
<p>系統檢查 <br>一般情況下，可以一些簡單步驟進行檢查，來判斷系統是否正在遭受TCP SYN Flood攻擊。 </p>
<p>1、 服務端無法提供正常的TCP服務。連接請求被拒絕或超時。 <br>2、透過 netstat -an 命令檢查系統，發現有大量的SYN_RECV連接狀態。</p>
<p><strong>3. iptables的设置，引用自<a href="http://www.chinaunix.net/forum/viewtopic.php?t=118676">CU</a></strong><br>
<blockquote>防止同步包洪水（Sync Flood） <br># iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT <br>也有人写作 <br>#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT <br>--limit 1/s 限制syn并发数每秒1次，可以根据自己的需要修改<br>防止各种端口扫描 <br># iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT <br>Ping洪水攻击（Ping of Death） <br># iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT </blockquote><br>附： <br><a href="http://iptables-tutorial.frozentux.net/cn/iptables-tutorial-cn-1.1.19.html">Iptables 指南 1.1.19</a><br>防火墙例子：<br><a href="http://www.chinaunix.net/forum/viewtopic.php?t=118676">在Linux上使用iptables命令，建立一个个人防火墙</a>
<p>&#160;</p>
<a name=a000144more></a><a id=more></a>
<p>参阅：</p>
<p>proc文件系统面面谈</p>
<p><a href="http://www.linuxaid.com.cn/">http://www.linuxaid.com.cn</a> 02-01-16 21:34 5467p ideal<br>----------------------------------------------------------------------<br></p>
<p>什么是proc文件系统</p>
<p>proc文件系统是一个伪文件系统，它只存在内存当中，而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息，并可以改变内核的某些参数。由于系统的信息，如进程，是动态改变的，所以用户或应用程序读取proc文件时，proc文件系统是动态从系统内核读出所需信息并提交的。它的目录结构如下：</p>
<p>目录名称 目录内容 <br>apm 高级电源管理信息 <br>cmdline 内核命令行 <br>Cpuinfo 关于Cpu信息 <br>Devices 可以用到的设备（块设备/字符设备） <br>Dma 使用的DMA通道<br>Filesystems 支持的文件系统 <br>Interrupts 中断的使用 <br>Ioports I/O端口的使用 <br>Kcore 内核核心印象 <br>Kmsg 内核消息 <br>Ksyms 内核符号表 <br>Loadavg 负载均衡 <br>Locks 内核锁 <br>Meminfo 内存信息 <br>Misc 杂项<br>Modules 加载模块列表 <br>Mounts 加载的文件系统 <br>Partitions 系统识别的分区表 <br>Rtc 实时时钟<br>Slabinfo Slab池信息<br>Stat 全面统计状态表<br>Swaps 对换空间的利用情况 <br>Version 内核版本 <br>Uptime 系统正常运行时间 </p>
<p>并不是所有这些目录在你的系统中都有，这取决于你的内核配置和装载的模块。另外，在/proc下还有三个很重要的目录：net，scsi和sys。Sys目录是可写的，可以通过它来访问或修改内核的参数（见下一部分），而net和scsi则依赖于内核配置。例如，如果系统不支持scsi，则scsi目录不存在。 </p>
<p>除了以上介绍的这些，还有的是一些以数字命名的目录，它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下，以进程的PID号为目录名，它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口，是一个link。Proc文件系统的名字就是由之而起。进程目录的结构如下： </p>
<p>目录名称 目录内容 <br>Cmdline 命令行参数 <br>Environ 环境变量值 <br>Fd 一个包含所有文件描述符的目录 <br>Mem 进程的内存被利用情况 <br>Stat 进程状态 <br>Status 进程当前状态，以可读的方式显示出来 <br>Cwd 当前工作目录的链接 <br>Exe 指向该进程的执行命令文件<br>Maps 内存映象<br>Statm 进程内存状态信息 <br>Root 链接此进程的root目录</p>
<p>用户如果要查看系统信息，可以用cat命令。例如：</p>
<p># cat /proc/interrupts <br>CPU0 <br>0: 8728810 XT-PIC timer <br>1: 895 XT-PIC keyboard <br>2: 0 XT-PIC cascade <br>3: 531695 XT-PIC aha152x <br>4: 2014133 XT-PIC serial <br>5: 44401 XT-PIC pcnet_cs <br>8: 2 XT-PIC rtc <br>11: 8 XT-PIC i82365 <br>12: 182918 XT-PIC Mouse <br>13: 1 XT-PIC fpu PS/2 <br>14: 1232265 XT-PIC ide0 <br>15: 7 XT-PIC ide1 <br>NMI: 0 </p>
<p>用户还可以实现修改内核参数。在/proc文件系统中有一个有趣的目录：/proc/sys。它不仅提供了内核信息，而且可以通过它修改内核参数，来优化你的系统。但是你必须很小心，因为可能会造成系统崩溃。最好是先找一台无关紧要的机子，调试成功后再应用到你的系统上。</p>
<p>要改变内核的参数，只要用vi编辑或echo参数重定向到文件中即可。下面有一个例子： </p>
<p># cat /proc/sys/fs/file-max <br>4096 <br># echo 8192 &gt; /proc/sys/fs/file-max <br># cat /proc/sys/fs/file-max <br>8192 </p>
<p>如果你优化了参数，则可以把它们写成添加到文件rc.local中，使它在系统启动时自动完成修改。</p>
<p>/proc文件系统中网络参数</p>
<p>在/proc/sys/net/ipv4/目录下，包含的是和tcp/ip协议相关的各种参数，下面我们就对这些网络参数加以详细的说明。</p>
<p>ip_forward 参数类型：BOOLEAN<br>0 - 关闭(默认值)<br>not 0 - 打开ip转发</p>
<p>在网络本地接口之间转发数据报。该参数非常特殊，对该参数的修改将导致其它所有相关配置参数恢复其默认值(对于主机参阅RFC1122，对于路由器参见RFC1812)</p>
<p>ip_default_ttl 参数类型：INTEGER<br>默认值为 64 。表示IP数据报的Time To Live值。</p>
<p>ip_no_pmtu_disc 参数类型：BOOLEAN<br>关闭路径MTU探测，默认值为FALSE</p>
<p>ipfrag_high_thresh 参数类型：整型<br>用来组装分段的IP包的最大内存量。当ipfrag_high_thresh数量的内存被分配来用来组装IP包，则IP分片处理器将丢弃数据报直到ipfrag_low_thresh数量的内存被用来组装IP包。</p>
<p>ipfrag_low_thresh 参数类型：整型<br>参见ipfrag_high_thresh。</p>
<p>ipfrag_time 参数类型：整型<br>保存一个IP分片在内存中的时间。</p>
<p>inet_peer_threshold 参数类型：整型<br>INET对端存储器某个合适值，当超过该阀值条目将被丢弃。该阀值同样决定生存时间以及废物收集通过的时间间隔。条目越多﹐存活期越低﹐GC 间隔越短</p>
<p>inet_peer_minttl 参数类型：整型<br>条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies为单位测量。</p>
<p>inet_peer_maxttl 参数类型：整型<br>条目的最大存活期。在此期限到达之后﹐如果缓冲池没有耗尽压力的话(例如﹐缓冲池中的条目数目非常少)﹐不使用的条目将会超时。该值以 jiffies为单位测量。</p>
<p>inet_peer_gc_mintime 参数类型：整型<br>废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。 该值以 jiffies为单位测量。</p>
<p>inet_peer_gc_maxtime 参数类型：整型<br>废物收集(GC)通过的最大间隔，这个间隔会影响到缓冲池中内存的低压力。 该值以 jiffies为单位测量。</p>
<p>tcp_syn_retries 参数类型：整型<br>对于一个新建连接，内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255，默认值是5，对应于180秒左右。</p>
<p>tcp_synack_retries 参数类型：整型<br>对于远端的连接请求SYN，内核会发送SYN ＋ ACK数据报，以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。 </p>
<p>tcp_keepalive_time 参数类型：整型<br>当keepalive打开的情况下，TCP发送keepalive消息的频率，默认值是2个小时。</p>
<p>tcp_keepalive_probes 参数类型：整型<br>TCP发送keepalive探测以确定该连接已经断开的次数，默认值是9。</p>
<p>tcp_keepalive_interval 参数类型：整型<br>探测消息发送的频率，乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒，也就是没有活动的连接将在大约11分钟以后将被丢弃。</p>
<p>tcp_retries1 参数类型：整型<br>当出现可疑情况而必须向网络层报告这个可疑状况之前﹐需要进行多少次重试。最低的 RFC 数值是 3 ﹐这也是默认值﹐根据RTO的值大约在3秒 - 8分钟之间。</p>
<p>tcp_retries2 参数类型：整型<br>在丢弃激活的TCP连接之前﹐需要进行多少次重试。RFC1122规定，该值必须大于100秒。默认值为15，根据RTO的值来决定，相当于13-30分钟，</p>
<p>tcp_orphan_retries 参数类型：整型<br>在近端丢弃TCP连接之前﹐要进行多少次重试。默认值是 7 个﹐相当于 50秒 - 16分钟﹐视 RTO 而定。如果您的系统是负载很大的web服务器﹐那么也许需要降低该值﹐这类 sockets 可能会耗费大量的资源。另外参的考 tcp_max_orphans 。</p>
<p>tcp_fin_timeout 参数类型：整型<br>对于本端断开的socket连接，TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在2.2版本的内核中是 180 秒。您可以设置该值﹐但需要注意﹐如果您的机器为负载很重的web服务器﹐您可能要冒内存被大量无效数据报填满的风险﹐FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1 ﹐因为它们最多只吃 1.5K 的内存﹐但是它们存在时间更长。另外参考 tcp_max_orphans。 </p>
<p>tcp_max_tw_buckets 参数类型：整型<br>系统在同时所处理的最大timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要人为的降低这个限制﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。 </p>
<p>tcp_tw_recycle 参数类型：布尔<br>打开快速 TIME-WAIT sockets 回收。默认值是1。除非得到技术专家的建议或要求﹐请不要随意修改这个值。 </p>
<p>tcp_max_orphans 参数类型：整型<br>系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset，并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制</p>
<p>tcp_abort_on_overflow 参数类型：布尔<br>当守护进程太忙而不能接受新的连接，就象对方发送reset消息，默认值是false。这意味着当溢出的原因是因为一个偶然的猝发，那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项，该选项会影响客户的使用。</p>
<p>tcp_syncookies 参数类型：整型<br>只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。默认值是false。</p>
<p>注意：该选项千万不能用于那些没有收到攻击的高负载服务器，如果在日志中出现synflood消息，但是调查发现没有收到synflood攻击，而是合法用户的连接负载过高的原因，你应该调整其它参数来提高服务器性能。参考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.</p>
<p>syncookie严重的违背TCP协议，不允许使用TCP扩展，可能对某些服务导致严重的性能影响(如SMTP转发)。</p>
<p>tcp_stdurg 参数类型：整型<br>使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的 BSD解释，因此如果您在 Linux 打开它﹐或会导致不能和它们正确沟通。默认值为为﹕FALSE </p>
<p>tcp_max_syn_backlog 参数类型：整型<br>对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。如果服务器经常出现过载﹐可以尝试增加这个数字。警告﹗假如您将此值设为大于 1024﹐最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE ﹐以保持 TCP_SYNQ_HSIZE*16&lt;=tcp_max_syn_backlog ﹐并且编进核心之内。 </p>
<p>tcp_window_scaling 参数类型：布尔<br>正常来说，TCP/IP 可以接受最大到65535字节的 windows。对于宽带网络，该值可能是不够的，通过调整该参数有助于提高宽带服务器性能。</p>
<p>tcp_timestamps 参数类型：布尔<br>Timestamps 用在其它一些东西中﹐可以防范那些伪造的 sequence 号码。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的)。Timestamp 会让它知道这是个 '旧封包'。 </p>
<p>tcp_sack 参数类型：布尔<br>使用 Selective ACK﹐它可以用来查找特定的遗失的数据报--- 因此有助于快速恢复状态。</p>
<p>tcp_fack 参数类型：布尔<br>打开FACK拥塞避免和快速重传功能。</p>
<p>tcp_dsack 参数类型：布尔<br>允许TCP发送"两个完全相同"的SACK。</p>
<p>tcp_ecn 参数类型：布尔<br>打开TCP的直接拥塞通告功能。</p>
<p>tcp_reordering 参数类型：整型<br>TCP流中重排序的数据报最大数量默认值是 3 。</p>
<p>tcp_retrans_collapse 参数类型：布尔<br>对于某些有bug的打印机提供针对其bug的兼容性。</p>
<p>tcp_wmem - 三个整数的向量： min, default, max<br>min：为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4K。</p>
<p>default：为TCP socket预留用于发送缓冲的内存数量，默认情况下该值会影响其它协议使用的net.core.wmem_default 值，一般要低于net.core.wmem_default的值。默认值为16K。</p>
<p>max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max，今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。</p>
<p>tcp_rmem - 三个整数的向量： min, default, max<br>min：为TCP socket预留用于接收缓冲的内存数量，即使在内存出现紧张情况下tcp socket都至少会有这么多数量的内存用于接收缓冲，默认值为8K。</p>
<p>default：为TCP socket预留用于接收缓冲的内存数量，默认情况下该值影响其它协议使用的 net.core.wmem_default 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win:0是默认值情况下，tcp 窗口大小为65535。</p>
<p>max：用于TCP socket接收缓冲的内存最大值。该值不会影响 net.core.wmem_max，今天选择参数 SO_SNDBUF则不受该值影响。默认值为 128K。默认值为87380*2 bytes。</p>
<p>tcp_mem - 三个整数的向量： low, pressure, high<br>low：当TCP使用了低于该值的内存页面数时，TCP不会考虑释放内存。</p>
<p>pressure：当TCP使用了超过该值的内存页面数量时，TCP试图稳定其内存使用，进入pressure模式，当内存消耗低于low值时则退出pressure状态。</p>
<p>high：允许所有tcp sockets用于排队缓冲数据报的页面量。</p>
<p>一般情况下这些值是在系统启动时根据系统内存数量计算得到的。</p>
<p>tcp_app_win - 整数</p>
<p>保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。默认值是31。</p>
<p>tcp_adv_win_scale - 整数<br>计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale &gt; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale &lt;= 0），默认值为2。</p>
<p>ip_local_port_range - 两个整数<br>定于TCP和UDP使用的本地端口范围，第一个数是开始，第二个数是最后端口号，默认值依赖于系统中可用的内存数：<br>&gt; 128Mb 32768-61000<br>&lt; 128Mb 1024-4999 or even less.<br>该值决定了活动连接的数量，也就是系统可以并发的连接数</p>
<p>icmp_echo_ignore_all - 布尔类型<br>icmp_echo_ignore_broadcasts - 布尔类型<br>如果任何一个设置为true(&gt;0)则系统将忽略所有发送给自己的ICMP ECHO请求或那些广播地址的请求。</p>
<p>icmp_destunreach_rate - 整数<br>icmp_paramprob_rate - 整数<br>icmp_timeexceed_rate - 整数<br>icmp_echoreply_rate - 整数(not enabled per default)<br>限制发向特定目标的ICMP数据报的最大速率。0表示没有任何限制，否则表示jiffies数据单位中允许发送的个数。</p>
<p>icmp_ignore_bogus_error_responses - 布尔类型<br>某些路由器违背RFC1122标准，其对广播帧发送伪造的响应来应答。这种违背行为通常会被以告警的方式记录在系统日志中。如果该选项设置为True，内核不会记录这种警告信息。默认值为False。</p>
<p>(1) Jiffie: 内核使用的内部时间单位，在i386系统上大小为1/100s，在Alpha中为1/1024S。在/usr/include/asm/param.h中的HZ定义有特定系统的值。</p>
<p>conf/interface/*: <br>conf/all/*是特定的，用来修改所有接口的设置，is special and changes the settings for all interfaces.<br>Change special settings per interface.</p>
<p>log_martians - 布尔类型<br>记录带有不允许的地址的数据报到内核日志中。</p>
<p>accept_redirects - 布尔类型<br>收发接收ICMP重定向消息。对于主机来说默认为True，对于用作路由器时默认值为False。</p>
<p>forwarding - 布尔类型<br>在该接口打开转发功能</p>
<p>mc_forwarding - 布尔类型<br>是否进行多播路由。只有内核编译有CONFIG_MROUTE并且有路由服务程序在运行该参数才有效。</p>
<p>proxy_arp - 布尔类型<br>打开proxy arp功能。</p>
<p>shared_media - 布尔类型<br>发送(路由器)或接收(主机) RFC1620 共享媒体重定向。覆盖ip_secure_redirects的值。默认为True。</p>
<p>secure_redirects - 布尔类型<br>仅仅接收发给默认网关列表中网关的ICMP重定向消息，默认值是TRUE。</p>
<p>send_redirects - 布尔类型<br>如果是router，发送重定向消息，默认值是TRUE</p>
<p>bootp_relay - 布尔类型<br>接收源地址为0.b.c.d，目的地址不是本机的数据报。用来支持BOOTP转发服务进程，该进程将捕获并转发该包。默认为False，目前还没有实现。</p>
<p>accept_source_route - 布尔类型<br>接收带有SRR选项的数据报。对于主机来说默认为False，对于用作路由器时默认值为True。</p>
<p>rp_filter 参数类型<br>1 - 通过反向路径回溯进行源地址验证(在RFC1812中定义)。对于单穴主机和stub网络路由器推荐使用该选项。<br>0 - 不通过反向路径回溯进行源地址验证。<br>默认值为0。某些发布在启动时自动将其打开。<br><br></p>
<div align=right>(END)</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/6026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-07 13:30 <a href="http://www.phpweblog.net/killjin/archive/2008/11/07/6026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于linux封IP说明</title><link>http://www.phpweblog.net/killjin/archive/2008/11/07/6023.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 07 Nov 2008 01:32:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/07/6023.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6023.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/07/6023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6023.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6023.html</trackback:ping><description><![CDATA[单个IP的命令是 <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;211.1.0.0&nbsp;-j&nbsp;DROP <br><br>封IP段的命令是 <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;211.1.0.0/16&nbsp;-j&nbsp;DROP <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;211.2.0.0/16&nbsp;-j&nbsp;DROP <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;211.3.0.0/16&nbsp;-j&nbsp;DROP <br><br>封整个段的命令是 <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;211.0.0.0/8&nbsp;-j&nbsp;DROP <br><br>封几个段的命令是 <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;61.37.80.0/24&nbsp;-j&nbsp;DROP <br>iptables&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;61.37.81.0/24&nbsp;-j&nbsp;DROP <br><br>服务器启动自运行 <br>有三个方法： <br>1、把它加到/etc/rc.local中 <br>2、iptables-save&nbsp;&gt;;/etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中，系统启动iptables时自动执行。 <br>3、service&nbsp;&nbsp;iptables&nbsp;&nbsp;save&nbsp;也可以把你当前的iptables规则放/etc/sysconfig/iptables中，系统启动iptables时自动执行。 <br>后两种更好此，一般iptables服务会在network服务之前启来，更安全。 
<img src ="http://www.phpweblog.net/killjin/aggbug/6023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-07 09:32 <a href="http://www.phpweblog.net/killjin/archive/2008/11/07/6023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mozilla建议的CSS书写顺序</title><link>http://www.phpweblog.net/killjin/archive/2008/11/05/6014.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 05 Nov 2008 01:41:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/11/05/6014.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/6014.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/11/05/6014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/6014.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/6014.html</trackback:ping><description><![CDATA[<strong>//显示属性<br></strong>display<br>list-style<br>position<br>float<br>clear<br><br><strong>//自身属性</strong><br>width<br>height<br>margin<br>padding<br>border<br>background<br><br><strong>//文本属性</strong><br>color<br>font<br>text-decoration<br>text-align<br>vertical-align<br>white-space<br>other text<br>content 
<img src ="http://www.phpweblog.net/killjin/aggbug/6014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-11-05 09:41 <a href="http://www.phpweblog.net/killjin/archive/2008/11/05/6014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>矜持的感动</title><link>http://www.phpweblog.net/killjin/archive/2008/10/27/5993.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Mon, 27 Oct 2008 15:21:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/10/27/5993.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/5993.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/10/27/5993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/5993.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/5993.html</trackback:ping><description><![CDATA[<p>丁铃！门上的铃当响了起来，一个三十多岁，穿著笔挺西服的男人，走进了这家飘散着浓浓咖啡香的小小咖啡厅。&nbsp; </p>
<p>&#8220;午安！欢迎光临！&#8221;年轻的老板娘亲切地招呼着。&nbsp; <br>男人一面客气地微微点了点头，一面走到吧台前的位子坐了下来，开口对老板娘说：&nbsp; </p>
<p>&#8220;麻烦给我一杯摩卡，谢谢。&#8221;&nbsp; </p>
<p>&#8220;好的，请稍候。&#8221;老板娘微笑着说。&nbsp; </p>
<p>接着她便开始熟练地磨碎咖啡豆，煮起咖啡来。男人一直带着笑容看着老板娘煮咖啡的动作，一副很享受的样子。&nbsp; </p>
<p>过了没多久，老板娘便将一杯香醇的咖啡端到男人的面前。&#8220;请慢用！&#8221;&nbsp; </p>
<p>&#8220;谢谢。&#8221;男人将杯子拿到嘴边，浅浅地尝了一口。&nbsp; </p>
<p>&#8220;第一次来吗？？&#8221;老板娘问。&nbsp; </p>
<p>&#8220;是啊！！&#8221;男人答。&nbsp; </p>
<p>&#8220;觉得我们这家店怎么样？&#8221;&nbsp; </p>
<p>&#8220;很不错！气氛很好！&#8221;&nbsp; </p>
<p>&#8220;我自己也是很喜欢，所以虽然生意不好，我和我先生却还是舍不得把它关掉。&#8221;&nbsp; </p>
<p>&#8220;嗯&#8230;&#8230;&#8221;男人好像有所同感地点了点头，又喝了一口咖啡。&nbsp; </p>
<p>两人沉默了一会，一时间空荡的店里只余悠扬爵士音乐。男人忽然开口，打破了这短暂的宁静。&nbsp; </p>
<p>&#8220;呃&#8230;&#8230;不好意思，可以请教你一个问题吗？？&#8221;&nbsp; </p>
<p>&#8220;什么问题呢？&#8221;老板娘好奇地问。&nbsp; </p>
<p>&#8220;嗯&#8230;这&#8230;这该怎么说好呢？&#8221;男人抓着头，一副不知所措的样子。&#8220;或者你可以先听我说个故事吗？&#8221;&nbsp; </p>
<p>老板娘点了点头，示意男人继续说下去。</p>
<p>&#8220;我以前有个很要好的女朋友，已经到了要论及婚嫁的地步。我和她之间的感情发展得相当平凡，并不是什么经过大风大浪、轰轰烈烈般的爱情。但我想从我第一眼看到她的时候，就彷佛有一股魔力，有一个声音，在推动着我，告诉着我，就是她了！她就是我一直期待着的女孩。更令我高兴的是她也响应了我的示爱，接受了我。这一切的顺让 我整个人陶醉于幸褔的喜悦之中，只不过&#8230;&#8230;&#8221; </p>
<p>&#8220;只不过！！发生了什么事了吗？？&#8221;&nbsp; </p>
<p>老板娘显然给故事吸引住了，她打断了男人的话。&nbsp; </p>
<p>&#8220;嗯&#8230;&#8230;&#8221;男人脸色沉了下来，略微停顿了一下，继续说下去。&nbsp; </p>
<p>&#8220;只不过我忘了幸褔的背后，往往藏匿着最可怕的恶魔。就在我们订婚前一个月的一个晚上，她&#8230;&#8230;她遭到了歹徒的强暴&#8220;啊！&#8221;老板娘惊讶地啊的一声叫了出来&#8220;都怪我！要是我那天坚持送她回去就好了！&#8221;男人用力地捶打着桌面，杯子中的咖啡因剧烈震动的关系洒了出来。&nbsp; </p>
<p>&#8220;你要问我的该不会就是这个吧！&#8221;老板娘一面擦拭着洒出来的咖啡一面说。&nbsp; </p>
<p>&#8220;不！不是的！我对她的感情不会因为这样而有所动摇，我决定仍旧如期订婚，可惜就在我们订婚的那一天，她&#8230;&#8230;上吊自杀了！&#8221;&nbsp; </p>
<p>男人的语调异常平缓，从他的表情上看得出，当时的他是多么的难过与震惊。&nbsp; </p>
<p>&#8220;自杀！那她有没有怎么样？&#8221;老板娘为突转而下的剧情睁大了眼睛，紧张地看着男人。 &#8220;幸运的是我们发现得早，送到医院时还有气，只是脑部因为长时间缺氧，呈现昏迷状态，当时医生说她一度有成为植物人的危险。&#8221;&nbsp; </p>
<p>老板娘松下一口气，&#8220;那她后来有醒过来吗？&#8221;&nbsp; </p>
<p>&#8220;有的，她醒了！&#8221;&nbsp; </p>
<p>&#8220;但&#8230;&#8230;但当我得知她醒了的消息，高兴地要去看她时，却被她父母给拦在门外。&#8221;&nbsp; </p>
<p>&#8220;为什么？她父母为什么不让你去看她？&#8221;&nbsp; </p>
<p>&#8220;她父母跪在地上求我，原来她失去了记忆，失去了认识我以后的记忆，医生说这是选择性失忆症，当人在遭遇极大的打击时，会逃避性地藏起一些记忆。她父母 求我暂时不要再出现在她面前，他们认为让她就这样忘了之前的一切对她比较好，怕我要是去见她或许会让她回想起来，到时她可能又会陷入昏迷，甚至又跑去自 杀。&#8221;&nbsp; </p>
<p>&#8220;她父母这么说也是有道理，反正只是暂时嘛！等她情绪和身体都稳定了，你就又可以见她啦！&#8221;老板娘听了男人的话后这样说着。&nbsp; </p>
<p>男人勉力挤出一丝笑意，样子无限苍凉，&#8220;你知道他们的暂时指的是多久吗？是十年啊！也就是这十年里我得要忍受这样没有她的日子，就算偶尔在路上碰面，也得要装作陌生人一般地和她擦肩而过。&#8221;男人快要咆哮起来似的，&#8220;你知道这样的日子有多难熬，这样想爱却又不能爱的心情有多痛苦！&#8221;&nbsp; </p>
<p><br>&#8220;虽然会很痛苦，但你还是选择了这条路吧！&#8221;老板娘看着男人的眼神变得非常温柔。&nbsp; </p>
<p>老板娘的眼神让男人冷静了下来，点头说：&#8220;嗯！到今天就满十年了！&#8221;&nbsp; </p>
<p>&#8220;哦！真的吗！？那真是恭喜了，你努力撑了十年，到今天终于可以去见她了！&#8221;老板娘开心地说。&nbsp; </p>
<p>&#8220;是这样没错！但是愈到这一天，我反倒愈害怕。十年了，我的心意是没有改变，但是她呢？如果我跟 她说了以前的事，她还是想不起我那怎样办？，或者是她已经有男朋友，甚至于结婚了呢？&#8221;&nbsp; </p>
<p>&#8220;这才是我想请教你的问题！&#8221;男人似乎略带紧张的看着眼前年轻的女店主，静静地等待着她的答复。&nbsp; </p>
<p>&#8220;嗯&#8230;&#8230;&#8221;老板娘用手托着头，脸色凝重地想着男人所提的问题。&nbsp; </p>
<p>&#8220;我想既然你这么爱那个女孩，她记不记得你其实并不重要，最多是重新开始而已，再重新追求她一次，再重新谈一次恋爱，其实也很不错吧！！而且就算有男朋友了也没关系啊！把她从他手中抢过来不就行了！&#8221;老板娘笑着说。&nbsp; </p>
<p>&#8220;但是！&#8221;她忽然将表情严肃了起来，&#8220;但是如果她已经结婚了的话，那你就放弃吧！我们结了婚的人啊！是最痛恨有人破坏人家家庭的了！&#8221;&nbsp; </p>
<p><br>&#8220;是吗？&#8221;男人低着头冷寞地说。&nbsp; </p>
<p>&#8220;没错！！所以你可千万别做个破坏别人家庭的人哦！&#8221;&nbsp; </p>
<p>丁铃！挂在门上铃铛又响了起来，走进来几个刚下课的大学生，老板娘走出吧台，忙着招呼这几位新来的客人。&nbsp; </p>
<p>&#8220;对了！&#8221;老板娘好象忽然想到了什么，转过头来看着男人。&nbsp; </p>
<p>&#8220;你为什么会想问我这些啊！我和你不过是第一次见面而已啊！&#8221;她好奇地问。&nbsp; </p>
<p>&#8220;嗯&#8230;&#8230;为什么呢&#8230;&#8230;大概是因为那个女孩曾说过，结婚以后要和我一起开一家像这样的咖啡厅吧！&#8221;&nbsp; </p>
<p><br>&#8220;哦！！原来是这样子啊！&#8221;老板娘说。&nbsp; </p>
<p>&#8220;嗯！只是这样而已！只 是这样而已！只是这样而已！只是&#8230;&#8230;&#8221;男人不停地重复着同样一句话，好像藉此告诉自己什么似的。爵士乐停了下来，整个屋子里只听得大学生清脆的谈笑声。男 人低着头偷偷地瞄着老板娘手上的结婚戒指，一滴温暖的眼泪，悄悄地滑进了那杯早已冷却的咖啡里&#8230;&#8230;<br></p>
<img src ="http://www.phpweblog.net/killjin/aggbug/5993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-10-27 23:21 <a href="http://www.phpweblog.net/killjin/archive/2008/10/27/5993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成为PHP高手的五个必由之路</title><link>http://www.phpweblog.net/killjin/archive/2008/10/17/5904.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Thu, 16 Oct 2008 16:53:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/10/17/5904.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/5904.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/10/17/5904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/5904.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/5904.html</trackback:ping><description><![CDATA[<p>原文名称：5 ways to be a better php developer<br>原文链接：http://www.developertutorials.com/blog/web/5-ways-to-be-a-better-php-developer-36/<br>中文翻译：Altair<br>首　　发：<a href="http://www.phpinternals.com/">http://www.phpinternals.com/</a></p>
<p><span>[转载必须注明出处、作者以及上面信息的完整]</span></p>
<p>Often, an inexperienced PHP developer will hop onto IRC and ask a question in ##php on Freenode. And if the question is trivial, the answer seems obvious or they simply seem like a newbie, they may soon find themselves bombarded with such comments as &#8220;RTFM&#8221;, &#8220;Go learn PHP&#8221;, &#8220;We are not your personal tutors&#8221; or simply &#8220;You need to become a better PHP developer&#8221;. So, how is it that one becomes a better PHP developer? In this post, I&#8217;ll outline five ways to be a better developer, improve your productivity, write less code and achieve more with your web applications.There&#8217;s always more to learn when it comes to PHP development. New core functions, new frameworks, new design patterns, new code documentation styles. Here are some of the best ways you can become a better PHP developer.</p>
<p>经常有一些经验不足的PHP开发人员在Freenode的##php IRC频道上问问题。如果问题很琐碎，或者答案显而易见，或表现得象一个菜鸟，很快他们就会发现会受到如下一些回复的炮轰：&#8220;去读该死的手册去吧&#8221;，&#8220;好好去学一学PHP吧&#8221;，&#8220;我们不是你个人的导师&#8221;或更直接的&#8220;你需要成为一个更好的PHP开发者&#8221;。但是，怎样才能成为一个更优秀的PHP开发者呢？在这篇文章中，我列出了五种成为更优秀的PHP开发者的方法，让你在PHP开发过程中提高效率，用更少的代码来完成更多的事情。在PHP的开发过程中永远会有更多的内容需要去学习,如新的核心函数，新的框架，新的设计模式，新的编码或文档规范等等。下面就是一些成为更优秀的PHP开发者的最佳途径。</p>
<p><strong>1. Read the manual<br>1. 阅读手册</strong><br>I really can&#8217;t emphasize this enough - there&#8217;s a lot to be learned just reading the PHP manual. Especially check out the string and array functions. There&#8217;s a lot of functionality available right there, and often by reading through the manual you&#8217;ll find you&#8217;ve been reinventing the wheel in past projects when you could have just used a core function. The manual is your friend.<br>没什么比阅读手册更值得强调的事了&#8211;仅仅通过阅读手册你就可以学习到很多东西。特别是有关字符串和数组有关的函数。就在这些函数里面包括许多有用的功能，如果你仔细阅读手册，你会经常发现在以往的项目开发过程中，很多时候你在&#8220;重复发明轮子&#8221;，而实际上你只需要一个核心函数就可以完成相应的功能。手册是你的朋友。</p>
<p><strong>2. Browse through some code<br>2.浏览源代码</strong><br>PHP has a lot of open source code out there. So why not learn from it? Download an open source PHP application and have a read through the code. The bigger projects are probably better, as they&#8217;ll have more complex structures and systems in place but also more thorough documentation explaining it all. Check out SourceForge.net if you can&#8217;t find a good place to start.<br>有很多使用PHP开发的开源程序。为什么不去学习它们呢？下载一份开源的PHP应用程序的源代码，仔细阅读它吧。也许越大的项目越值得去阅读，虽然它们也许有更复杂的结构和系统，但也有更详细的解释文档。如果你不知道从哪里开始，可以试试SourceForge.net。</p>
<p><strong>3. Learn a new framework<br>3. 学习新的框架</strong><br>There are more PHP frameworks out there than you&#8217;ve had hot dinners; a lot of them are open source and available online if you know where to look. Try the major ones first - phpframeworks.com has a good list. Your framework can never be entirely complete, your next job may require a different framework and you might just find the functionality of another comes in handy in one of your projects.<br>也许在一顿饭的功夫就有不少新的框架问世了;它们中的大部分都是开源的，可以直接从网上下载，前提是你知道从哪里去找。先选择一些主流的框架— phpframeworks.com里面有一个很好的框架的列表。你所选的框架永远不会十全十美，你的下一个项目也许需要一个不同的框架，它的功能正好是你的项目所需要的。</p>
<p><strong>4. Research<br>4. 研究</strong><br>You&#8217;ve probably heard a lot of terminology and discussed in the context of PHP web development. From OOP to MVC, KISS to DRY, YAML to INI, even REST to XML-RPC, there are hundreds of technical concepts out there that could directly relate to your work. You may have formed a basic understanding of them, but do you really know what they are or what they mean for you? Spend some time doing real research; Wikipedia is a good place to start. You&#8217;re bound to learn something new.<br>在PHP网站开发过程和讨论中你可能听说过很多术语。从OOP到MVC,KISS到DRY,YAML到INI,甚至REST到XML-RPC，也许有数百个与你的工作直接相关的技术概念。你也许对它们有了一个基本的了解，但你真的了解它们到底是什么，对你有什么意义吗？花一点时间去做些实实在在的研究吧。Wikipedia是从事这些研究的很好的起点。你一定会从中学到一些新知识的。<br><span><strong><br>5. Learn OOP<br>5. 学习面向对象程序设计(OOP)</strong></span><br>Maybe this follows on a little from the previous point, but OOP is more important than you think. Do you really know about PHP5&#8217;s implementation OOP? For example, are you familiar with abstract classes, interfaces, the implements keyword, static methods and properties, the &#8216;protected&#8217; access modifier? Even many experienced PHP developers fall down in this area. If you make use of the features of OOP, you could save yourself a lot of development time.<br>这也许是上一个方法的继续，但是OOP比你想象的更重要。你真的了解PHP5中OOP的实现吗？例如，你真的了解抽象类，接口，&#8220;implements&#8221;关键字，静态方法和静态属性，访问修饰符&#8220;protected&#8221;吗？甚至许多有经验的开发人员都倒在这些问题的面前。如果你能充分利用OOP的特征，你就可以节省很多的开发时间。</p>
<p>So there you have it. Five, straightforward yet significant ways to be a better PHP developer.<br>就是这些了。五个成为更优秀的PHP开发者直接而又重要的的方法。<br><br><a href="http://www.phpinternals.com/">http://www.phpinternals.com/</a></p>
<img src ="http://www.phpweblog.net/killjin/aggbug/5904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-10-17 00:53 <a href="http://www.phpweblog.net/killjin/archive/2008/10/17/5904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是框架</title><link>http://www.phpweblog.net/killjin/archive/2008/10/14/5882.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Tue, 14 Oct 2008 15:39:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/10/14/5882.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/5882.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/10/14/5882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/5882.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/5882.html</trackback:ping><description><![CDATA[<div class=t_msgfont id=postmessage_70146>广义的讲，框架是用既定的基本结构去解决一个复杂的问题。<br>(A framework is a basic conceptual structure used to solve a complex issue.<a href="http://en.wikipedia.org/wiki/Framework" target=_blank>http://en.wikipedia.org/wiki/Framework</a>)<br><br>狭义的讲，软件框架就是一个软件系统再用性设计的开发模式。它是有一组抽象类及其贯彻实例整合成的一种特殊软件类型。一个软件框架通常包括支持程序和代码库，然后用脚本语言或其他软件将不同的组件结合起来去开发一个项目。框架内有各种接口(API)与外部组件连接。软件框架使用OO设计方法，但也可用非OO语言来实现。<br><br>(A software framework is a reusable design for a software system (or subsystem). This is expressed as a set of <br><a href="http://en.wikipedia.org/wiki/Abstract_class" target=_blank>abstract classes</a><br>and the way their instances collaborate for a specific type of software. Software frameworks can be <a href="http://en.wikipedia.org/wiki/Object-oriented_programming" target=_blank>object-oriented designs</a>. Although designs don't have to be implemented in an <a href="http://en.wikipedia.org/wiki/Object-oriented_programming_language" target=_blank>object-oriented language</a>, they usually are. A software framework may include support programs, code <a href="http://en.wikipedia.org/wiki/Library_%28computer_science%29" target=_blank>libraries</a>, a <a href="http://en.wikipedia.org/wiki/Scripting_language" target=_blank>scripting language</a>, or other <a href="http://en.wikipedia.org/wiki/Software" target=_blank>software</a> to help develop and glue togetherthedifferent components of a software project. Various parts oftheframework may be exposed through an application programminginterface (<a href="http://en.wikipedia.org/wiki/Application_programming_interface" target=_blank>API</a>). <a href="http://en.wikipedia.org/wiki/Software_framework" target=_blank>http://en.wikipedia.org/wiki/Software_framework</a>)<br><br>从广义的角度来理解，其实很多人，只要开发了两个以上系统，都用了框架，包括那些反对用框架的人。简单来讲，你做新网站时，通常都是在复制老系统，然后修改代码，必要时加一些新功能。这时，你就用了框架，框架就是前一个系统!!!<br><br>从狭义的角度来理解，框架也有系统框架和模块框架之分。系统框架是整个系统采用框架结构，比如Zend Framework；具体的业务开发就在这框架下进行。模块框架是某个模块采用框架结构，公司里更多采用这种模式，比如数据库操作，分页操作，业务框架。框架可以自己开发也可以用现成的。<br><br>系统框架的开发也可用不同的模式，MVC是目前比较流行的模式。<br><br>有些人认为用框架就只是在选ZF，ThinkPHP 或者FleaPHP，有些人认为用框架就是用别人的东西，。。。。。。于是有人说好，有人说不好，。。。。。。<br><br>其实只要每人按照自己(或公司)的需要去选用或创建自己的框架，用框架的好处还是比较多的。<br><br>但对新手而言，不提倡用框架。</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/5882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-10-14 23:39 <a href="http://www.phpweblog.net/killjin/archive/2008/10/14/5882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是MVC</title><link>http://www.phpweblog.net/killjin/archive/2008/10/14/5881.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Tue, 14 Oct 2008 15:38:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/10/14/5881.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/5881.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/10/14/5881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/5881.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/5881.html</trackback:ping><description><![CDATA[<span id=ArticleContent1_ArticleContent1_lblContent>&nbsp;
<div class=title>模型－视图－控制器（MVC）是Xerox　PARC在八十年代为编程语言Smalltalk－80发明的一种软件设计模式，至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式，并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。模型－视图－控制器模式是一个有用的工具箱，它有很多好处，但也有一些缺点。</div>
<div class=content>
<p>MVC如何工作</p>
<p>MVC是一个设计模式，它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件：模型、视图、控制器。它们各自处理自己的任务。</p>
<p>视图<br>视图是用户看到并与之交互的界面。对老式的Web应用程序来说，视图就是由HTML元素组成的界面，在新式的Web应用程序中，HTML依旧在视图中扮演着重要的角色，但一些新的技术已层出不穷，它们包括Macromedia　Flash和象XHTML，XML/XSL，WML等一些标识语言和Web　services.</p>
<p>如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生，不管这些数据是联机存储的还是一个雇员列表，作为视图来讲，它只是作为一种输出数据并允许用户操纵的方式。</p>
<p>模型<br>模型表示企业数据和业务规则。在MVC的三个部件中，模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion　Components这样的构件对象来处理数据库。被模型返回的数据是中立的，就是说模型与数据格式无关，这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用，所以减少了代码的重复性。</p>
<p>控制器<br>控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时，控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求，然后用确定用哪个视图来显示模型处理返回的数据。</p>
<p>现在我们总结ＭVC的处理过程，首先控制器接收用户的请求，并决定应该调用哪个模型来进行处理，然后模型用业务逻辑来处理用户的请求并返回数据，最后控制器用相应的视图格式化模型返回的数据，并通过表示层呈现给用户。</p>
<p>为什么要使用 MVC</p>
<p>大部分Web应用程序都是用像ASP，PHP，或者CFML这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来，但这通常不是很容易做到的，它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作，但是它给我们带来的好处是无庸质疑的。</p>
<p>首先，最重要的一点是多个视图能共享一个模型，正如我所提及的，现在需要用越来越多的方式来访问你的应用程序。对此，其中一个解决之道是使用MVC，无论你的用户想要Flash界面或是 WAP 界面；用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开，所以你可以最大化的重用你的代码了。</p>
<p>由于模型返回的数据没有进行格式化，所以同样的构件能被不同界面使用。例如，很多数据可能用HTML来表示，但是它们也有可能要用Macromedia Flash和WAP来表示。模型也有状态管理和数据持久性处理的功能，例如，基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。</p>
<p>因为模型是自包含的，并且与控制器和视图相分离，所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到Oracle，或者改变你的基于RDBMS数据源到LDAP，只需改变你的模型即可。一旦你正确的实现了模型，不管你的数据来自数据库或是LDAP服务器，视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互对立，改变其中一个不会影响其它两个，所以依据这种设计思想你能构造良好的松偶合的构件。</p>
<p>对我来说，控制器的也提供了一个好处，就是可以使用控制器来联接不同的模型和视图去完成用户的需求，这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图，控制器可以根据用户的需求选择模型进行处理，然后选择视图将处理结果显示给用户。</p>
<p>MVC的缺点<br>MVC的缺点是由于它没有明确的定义，所以完全理解MVC并不是很容易。使用MVC需要精心的计划，由于它的内部原理比较复杂，所以需要花费一些时间去思考。</p>
<p>你将不得不花费相当可观的时间去考虑如何将MVC运用到你的应用程序，同时由于模型和视图要严格的分离，这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试，你就可以毫无顾忌的重用它们了。</p>
<p>根据我个人经验，由于我们将一个应用程序分成了三个部件，所以使用MVC同时也意味着你将要管理比以前更多的文件，这一点是显而易见的。这样好像我们的工作量增加了，但是请记住这比起它所能带给我们的好处是不值一提。</p>
<p>MVC并不适合小型甚至中等规模的应用程序，花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。</p>
<p>MVC是一条创建软件的好途径<br>MVC设计模式是一个很好创建软件的途径，它所提倡的一些原则，像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件，你可能需要重新思考你的应用程序，尤其是应用程序的构架方面。如果你肯接受MVC，并且有能力应付它所带来的额外的工作和复杂性，MVC将会使你的软件在健壮性，代码重用和结构方面上一个新的台阶</p>
</div>
</span>
<img src ="http://www.phpweblog.net/killjin/aggbug/5881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-10-14 23:38 <a href="http://www.phpweblog.net/killjin/archive/2008/10/14/5881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除完全重复和部分关键字段重复的记录</title><link>http://www.phpweblog.net/killjin/archive/2008/08/09/5552.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Fri, 08 Aug 2008 19:33:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/08/09/5552.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/5552.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/08/09/5552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/5552.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/5552.html</trackback:ping><description><![CDATA[<p>重复记录分为两种，第一种是完全重复的记录，也就是所有字段均重复的记录，第二种是部分关键字段重复的记录，例如Name字段重复，而其它字段不一定重复或都重复。 </p>
<p>1、第一种重复很容易解决，不同数据库环境下方法相似： </p>
<p>Mysql </p>
<p>create table tmp select distinct * from tableName; </p>
<p>drop table tableName; </p>
<p>create table tableName select * from tmp; </p>
<p>drop table tmp; </p>
<p><br>SQL Server </p>
<p>select distinct * into #Tmp from tableName; </p>
<p>drop table tableName; </p>
<p>select * into tableName from #Tmp; </p>
<p>drop table #Tmp; </p>
<p><br>Oracle </p>
<p>create table tmp as select distinct * from tableName; </p>
<p>drop table tableName; </p>
<p>create table tableName as select * from tmp; </p>
<p>drop table tmp; </p>
<p><br>发生这种重复的原因是由于表设计不周而产生的，增加唯一索引列就可以解决此问题。 </p>
<p>&nbsp;</p>
<p>2、此类重复问题通常要求保留重复记录中的第一条记录，操作方法如下。 假设有重复的字段为Name,Address，要求得到这两个字段唯一的结果集 </p>
<p>Mysql </p>
<p>alter table tableName add autoID int auto_increment not null; </p>
<p>create table tmp select min(autoID) as autoID from tableName group by Name,Address; </p>
<p>create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; </p>
<p>drop table tableName; </p>
<p>rename table tmp2 to tableName; </p>
<p><br>SQL Server </p>
<p>select identity(int,1,1) as autoID, * into #Tmp from tableName; </p>
<p>select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,Address; </p>
<p>drop table tableName; </p>
<p>select * into tableName from #Tmp where autoID in(select autoID from #Tmp2); </p>
<p>drop table #Tmp; </p>
<p>drop table #Tmp2; </p>
<p>Oracle </p>
<p>DELETE FROM tableName t1 WHERE t1.ROWID &gt; (SELECT MIN(t2.ROWID) FROM tableName t2 WHERE t2.Name = t1.Name and t2.Address = t1.Address); </p>
<p>说明： </p>
<p>1. MySQL和SQL Server中最后一个select得到了Name，Address不重复的结果集（多了一个autoID字段，在大家实际写时可以写在select子句中省去此列） </p>
<p>2. 因为MySQL和SQL Server没有提供rowid机制，所以需要通过一个autoID列来实现行的唯一性，而利用Oracle的rowid处理就方便多了。而且使用ROWID是最高效的删除重复记录方法。 <br><br>DISCUZ Username 重复：<br></p>
<div><span class=syntax><span class="syntax_alpha syntax_alpha_reservedWord">SELECT</span> max(<span class="syntax_alpha syntax_alpha_identifier">uid)</span><span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_alpha syntax_alpha_identifier">username</span><span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_alpha syntax_alpha_functionName">count</span><span class="syntax_punct syntax_punct_bracket_open_round">(</span> <span class=syntax_punct>*</span> <span class="syntax_punct syntax_punct_bracket_close_round">)</span> <span class="syntax_alpha syntax_alpha_reservedWord">AS</span> <span class="syntax_alpha syntax_alpha_identifier">gg</span><br><span class="syntax_alpha syntax_alpha_reservedWord">FROM</span> <span class="syntax_quote syntax_quote_backtick">`cdb_members`</span> <br><span class="syntax_alpha syntax_alpha_reservedWord">GROUP</span> <span class="syntax_alpha syntax_alpha_reservedWord">BY</span> <span class="syntax_alpha syntax_alpha_identifier">username</span><br><span class="syntax_alpha syntax_alpha_reservedWord">ORDER</span> <span class="syntax_alpha syntax_alpha_reservedWord">BY</span> <span class="syntax_alpha syntax_alpha_identifier">gg</span> <span class="syntax_alpha syntax_alpha_reservedWord">DESC</span> <span class="syntax_white syntax_white_newline"></span><br><span class="syntax_alpha syntax_alpha_reservedWord">LIMIT</span> <span class="syntax_digit syntax_digit_integer">0</span> <span class="syntax_punct syntax_punct_listsep">,</span> <span class="syntax_digit syntax_digit_integer">30</span></span> </div>
<img src ="http://www.phpweblog.net/killjin/aggbug/5552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-08-09 03:33 <a href="http://www.phpweblog.net/killjin/archive/2008/08/09/5552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 提示 Ctrl+D,修复文件系统!</title><link>http://www.phpweblog.net/killjin/archive/2008/06/29/5248.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Sun, 29 Jun 2008 07:25:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/06/29/5248.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/5248.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/06/29/5248.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/5248.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/5248.html</trackback:ping><description><![CDATA[fsck-y -F ufs<br>实际用 fsck-y -F 修复好了！<br>文件系统不一致导致启动不了，fsck -y /&nbsp;&nbsp; 单独修复某分区，也可以。
<img src ="http://www.phpweblog.net/killjin/aggbug/5248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-06-29 15:25 <a href="http://www.phpweblog.net/killjin/archive/2008/06/29/5248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux系统locale的设定</title><link>http://www.phpweblog.net/killjin/archive/2008/03/27/3058.html</link><dc:creator>Prog</dc:creator><author>Prog</author><pubDate>Wed, 26 Mar 2008 19:40:00 GMT</pubDate><guid>http://www.phpweblog.net/killjin/archive/2008/03/27/3058.html</guid><wfw:comment>http://www.phpweblog.net/killjin/comments/3058.html</wfw:comment><comments>http://www.phpweblog.net/killjin/archive/2008/03/27/3058.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.phpweblog.net/killjin/comments/commentRss/3058.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/killjin/services/trackbacks/3058.html</trackback:ping><description><![CDATA[<p>locale 是国际化与本土化过程中的一个非常重要的概念，个人认为，对于中文用户来说，通常会涉及到的国际化或者本土化，大致包含三个方面：看中文，写中文，与 window中文系统的兼容和通信。从实际经验上看来，locale的设定与看中文关系不大，但是与写中文，及window分区的挂载方式有很密切的关系。本人认为就像一个纯英文的Windows能够浏览中文，日文或者意大利文网页一样，你不需要设定locale就可以看中文。那么，为什么要设定 locale呢？什么时候会用到locale呢？</p>
<p><br>一、为什么要设定locale<br>正如前面我所讲的，设定locale与你能否浏览中文的网页没有直接的关系，即便你把locale设置成 en_US.ISO-8859-1这样一个标准的英文locale你照样可以浏览中文的网页，只要你的系统里面有相应的字符集（这个都不一定需要）和合适的字体（如simsun），浏览器就可以把网页翻译成中文给你看。具体的过程是网络把网页传送到你的机器上之后，浏览器会判断相应的编码的字符集，根据网页采用的字符集，去字体库里面找合适的字体，然后由文字渲染工具把相应的文字在屏幕上显示出来。</p>
<p>在下文本人会偶尔把字符集比喻成密码本，个人觉得对于一些东西比较容易理解，假如你不习惯的话，把全文copy到任何文本编辑器，用字符集替换密码本即可。</p>
<p>那有时候网页显示乱码或者都是方框是怎么回事呢？个人认为，显示乱码是因为设定的字符集不对(或者没有相应的字符集)，例如网页是用UTF-8 编码的，你非要用GB2312去看，而系统根据GB2312去找字体，然后在屏幕上显示，当然是一堆的乱码，也就是说你用一个错误的密码本去翻译发给你的电报，当然内容那叫一个乱；至于有些时候浏览的网页能显示一部分汉字，但有很多的地方是方框，能够显示汉字说明浏览器已经正确的判断出了网页的编码，并在字体库里面找到了相应的文字，但是并不是每个字体库都包含某个字符集全部的字体的缘故，有些时候会显示不完全，找一个比较全的支持较多字符集的字体就可以了。</p>
<p><br>既然我能够浏览中文网页，那为什么我还要设定locale呢？</p>
<p>其实你有没有想过这么一个问题，为什么gentoo官方论坛上中文论坛的网页是用UTF-8编码的（虽然大家一直强烈建议用GB2312编码），但是新浪网就是用GB2312编码的呢？而Xorg的官方网页竟然是ISO-8859-15编码的，我没有设定这个locale怎么一样的能浏览呢？这个问题就像是你有所有的密码本，不论某个网站是用什么字符集编码的，你都可以用你手里的密码本把他们翻译过来，但问题是虽然你能浏览中文网页，但是在整个操作系统里面流动的还是英文字符。所以，就像你能听懂英语，也能听懂中文。<br>最根本的问题是：你不可以写中文。</p>
<p>当你决定要写什么东西的时候，首先要决定的一件事情是用那种语言，对于计算机来说就是你要是用哪一种字符集，你就必须告诉你的linux系统，你想用那一本密码本去写你想要写的东西。知道为什么需要用GB2312字符集去浏览新浪了吧，因为新浪的网页是用GB2312写的。</p>
<p>为了让你的Linux能够输入中文，就需要把系统的locale设定成中文的(严格说来是locale中的语言类别LC_CTYPE )，例如zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢？这个问题稍后详述，现在只需要知道，这是locale的表达方式就可以了。</p>
<p>二、到底什么是locale？<br>locale这个单词中文翻译成地区或者地域，其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言，所在国家或者地区，以及当地的文化传统所定义的一个软件运行时的语言环境。</p>
<p>这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类，通常包括用户所使用的语言符号及其分类(LC_CTYPE)，数字 (LC_NUMERIC)，比较和排序习惯(LC_COLLATE)，时间显示格式(LC_TIME)，货币单位(LC_MONETARY)，信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)，姓名书写方式(LC_NAME)，地址书写方式(LC_ADDRESS)，电话号码书写方式 (LC_TELEPHONE)，度量衡表达方式(LC_MEASUREMENT)，默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。</p>
<p>所以说，locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的，这些locale定义文件放在/usr/share/i18n/locales目录下面，例如en_US, zh_CN and <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#101;&#95;&#68;&#69;&#64;&#101;&#117;&#114;&#111;">de_DE@euro</a>都是locale的定义文件，这些文件都是用文本格式书写的，你可以用写字板打开，看看里边的内容，当然出了有限的注释以外，大部分东西可能你都看不懂，因为是用的Unicode的字符索引方式。</p>
<p>对于<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#101;&#95;&#68;&#69;&#64;&#101;&#117;&#114;&#111;">de_DE@euro</a>的一点说明，@后边是修正项，也就是说你可以看到两个德国的locale：<br><a>/usr/share/i18n/locales/de_DE@euro</a><br>/usr/share/i18n/locales/de_DE<br>打开这两个locale定义，你就会知道它们的差别在于<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#101;&#95;&#68;&#69;&#64;&#101;&#117;&#114;&#111;">de_DE@euro</a>使用的是欧洲的排序、比较和缩进习惯，而de_DE用的是德国的标准习惯。</p>
<p>上面我们说到了zh_CN.GB18030的前半部分，后半部分是什么呢？大部分Linux用户都知道是系统采用的字符集。</p>
<p>三、什么是字符集？<br>字符集就是字符，尤其是非英语字符在系统内的编码方式，也就是通常所说的内码，所有的字符集都放在 /usr/share/i18n/charmaps，所有的字符集也都是用Unicode编号索引的。Unicode用统一的编号来索引目前已知的全部的符号。而字符集则是这些符号的编码方式，或者说是在网络传输，计算机内部通信的时候，对于不同字符的表达方式，Unicode是一个静态的概念，字符集是一个动态的概念，是每一个字符传递或传输的具体形式。就像Unicode编号U59D0是代表姐姐的&#8220;姐&#8221;字，但是具体的这个字是用两个字节表示，三个字节，还是四个字节表示，是字符集的问题。例如：UTF-8字符集就是目前流行的对字符的编码方式，UTF-8用一个字节表示常用的拉丁字母，用两个字节表示常用的符号，包括常用的中文字符，用三个表示不常用的字符，用四个字节表示其他的古灵精怪的字符。而GB2312字符集就是用两个字节表示所有的字符。需要提到一点的是Unicode除了用编号索引全部字符以外，本身是用四个字节存储全部字符，这一点在谈到挂载windows分区的时候是非常重要的一个概念。所以说你也可以把Unicode看作是一种字符集（我不知道它和UTF-32的关系，反正UTF-32就是用四个字节表示所有的字符的），但是这样表述符号是非常浪费资源的，因为在计算机世界绝大部分时候用到的是一个字节就可以搞定的26个字母而已。所以才会有UTF-8，UTF-16等等，要不然大同世界多好，省了这许多麻烦。</p>
<p><br>四、zh_CN.GB2312到底是在说什么？<br>Locale 是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]. 所以说呢，locale总是和一定的字符集相联系的。下面举几个例子：</p>
<p>1、我说中文，身处中华人民共和国，使用国标2312字符集来表达字符。<br>zh_CN.GB2312＝中文_中华人民共和国＋国标2312字符集。</p>
<p>2、我说中文，身处中华人民共和国，使用国标18030字符集来表达字符。<br>zh_CN.GB18030＝中文_中华人民共和国＋国标18030字符集。</p>
<p>3、我说中文，身处中华人民共和国台湾省，使用国标Big5字符集来表达字符。<br>zh_TW.BIG5=中文_台湾.大五码字符集</p>
<p>4、我说英文，身处大不列颠，使用ISO-8859-1字符集来表达字符。<br>en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集</p>
<p>5、我说德语，身处德国，使用UTF-8字符集，习惯了欧洲风格。<br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#101;&#95;&#68;&#69;&#46;&#85;&#84;&#70;&#45;&#56;&#64;&#101;&#117;&#114;&#111;">de_DE.UTF-8@euro</a>＝德语_德国.UTF-8字符集@按照欧洲习惯加以修正</p>
<p>注意不是<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#101;&#95;&#68;&#69;&#64;&#101;&#117;&#114;&#111;&#46;&#85;&#84;&#70;&#45;&#56;">de_DE@euro.UTF-8</a>，所以完全的locale表达方式是<br>[语言[_地域][.字符集] [@修正值]</p>
<p>生成的locale放在/usr/lib/locale/目录中，并且每个locale都对应一个文件夹，也就是说创建了<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#101;&#95;&#68;&#69;&#64;&#101;&#117;&#114;&#111;&#46;&#85;&#84;&#70;&#45;&#56;">de_DE@euro.UTF-8</a> locale之后，就生成<a>/usr/lib/locale/de_DE@euro.UTF-8/</a>目录，里面是具体的每个locale的内容。</p>
<p>五、怎样去自定义locale<br>在gentoo生成locale还是很容易的，首先要在USE里面加入userlocales支持，然后编辑locales.build文件，这个文件用来指示glibc生成locale文件。<br>很多人不明白每一个条目是什么意思。 其实根据上面的说明现在应该很明确了。</p>
<p>File: /etc/locales.build<br>en_US/ISO-8859-1<br>en_US.UTF-8/UTF-8</p>
<p>zh_CN/GB18030<br>zh_CN.GBK/GBK<br>zh_CN.GB2312/GB2312<br>zh_CN.UTF-8/UTF-8</p>
<p>上面是我的locales.build文件，依次的说明是这样的：</p>
<p>en_US/ISO-8859-1：生成名为en_US的locale，采用ISO-8859-1字符集，并且把这个locale作为英文_美国locale类的默认值，其实它和en_US.ISO-8859-1/ISO-8859-1没有任何区别。</p>
<p>en_US.UTF-8/UTF-8：生成名为en_US.UTF-8的locale，采用UTF-8字符集。</p>
<p>zh_CN/GB18030：生成名为zh_CN的locale，采用GB18030字符集，并且把这个locale作为中文_中国locale类的默认值，其实它和zh_CN.GB18030/GB18030没有任何区别。</p>
<p>zh_CN.GBK/GBK：生成名为zh_CN.GBK的locale，采用GBK字符集。<br>zh_CN.GB2312/GB2312：生成名为zh_CN.GB2312的locale，采用GB2312字符集。<br>zh_CN.UTF-8/UTF-8：生成名为zh_CN.UTF-8的locale，采用UTF-8字符集。</p>
<p>关于默认locale，默认locale可以简写成en_US或者zh_CN的形式，只是为了表达简单而已没有特别的意义。</p>
<p>Gentoo在locale定义的时候掩盖了一些东西，也就是locale的生成工具：localedef。<br>在编译完glibc之后你可以用这个localedef 再补充一些locale，就会更加理解locale了。具体的可以看 localedef 的manpage。</p>
<p>$localedef -f 字符集 -i locale定义文件 生成的locale的名称<br>例如<br>$localedef -f UTF-8 -i zh_CN zh_CN.UTF-8</p>
<p>上面的定义方法和在locales.build中设定zh_CN.UTF-8/UTF-8的结果是一样一样的。</p>
<p><br>六、locale的五脏六腑</p>
<p>刚刚生成了几个locale，但是为了让它们生效，必须告诉Linux系统使用那(几)个locale。这就需要对locale的内部机制有一点点的了解。在前面我已经提到过，locale把按照所涉及到的文化传统的各个方面分成12个大类，这12个大类分别是：<br>1、语言符号及其分类(LC_CTYPE)<br>2、数字(LC_NUMERIC)<br>3、比较和排序习惯(LC_COLLATE)<br>4、时间显示格式(LC_TIME)<br>5、货币单位(LC_MONETARY)<br>6、信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)<br>7、姓名书写方式(LC_NAME)<br>8、地址书写方式(LC_ADDRESS)<br>9、电话号码书写方式(LC_TELEPHONE)<br>10、度量衡表达方式(LC_MEASUREMENT)<br>11、默认纸张尺寸大小(LC_PAPER)<br>12、对locale自身包含信息的概述(LC_IDENTIFICATION)。</p>
<p>其中，与中文输入关系最密切的就是 LC_CTYPE， LC_CTYPE 规定了系统内有效的字符以及这些字符的分类，诸如什么是大写字母，小写字母，大小写转换，标点符号、可打印字符和其他的字符属性等方面。而locale定义zh_CN中最最重要的一项就是定义了汉字(Class &#8220;hanzi&#8221;)这一个大类，当然也是用Unicode描述的，这就让中文字符在Linux系统中成为合法的有效字符，而且不论它们是用什么字符集编码的。</p>
<p>LC_CTYPE<br>% This is a copy of the "i18n" LC_CTYPE with the following modifications: - Additional classes: hanzi</p>
<p>copy "i18n"</p>
<p>class "hanzi"; /<br>% &lt;U3400&gt;..&lt;U4DBF&gt;;/<br>&lt;U4E00&gt;..&lt;U9FA5&gt;;/<br>&lt;UF92C&gt;;&lt;UF979&gt;;&lt;UF995&gt;;&lt;UF9E7&gt;;&lt;UF9F1&gt;;&lt;UFA0C&gt;;&lt;UFA0D&gt;;&lt;UFA0E&gt;;/<br>&lt;UFA0F&gt;;&lt;UFA11&gt;;&lt;UFA13&gt;;&lt;UFA14&gt;;&lt;UFA18&gt;;&lt;UFA1F&gt;;&lt;UFA20&gt;;&lt;UFA21&gt;;/<br>&lt;UFA23&gt;;&lt;UFA24&gt;;&lt;UFA27&gt;;&lt;UFA28&gt;;&lt;UFA29&gt;<br>END LC_CTYPE</p>
<p>在en_US的locale定义中，并没有定义汉字，所以汉字不是有效字符。所以如果要输入中文必须使用支持中文的locale，也就是zh_XX，如zh_CN，zh_TW，zh_HK等等。</p>
<p>另外非常重要的一点就是这些分类是彼此独立的，也就是说LC_CTYPE，LC_COLLATE和 LC_MESSAGES等等分类彼此之间是独立的，可以根据用户的需要设定成不同的值。这一点对很多用户是有利的，甚至是必须的。例如，我就需要一个能够输入中文的英文环境，所以我可以把LC_CTYPE设定成zh_CN.GB18030，而其他所有的项都是en_US.UTF-8。</p>
<p><br>七、怎样设定locale呢？</p>
<p>设定locale就是设定12大类的locale分类属性，即 12个LC_*。除了这12个变量可以设定以外，为了简便起见，还有两个变量：LC_ALL和LANG。它们之间有一个优先级的关系：<br>LC_ALL&gt;LC_*&gt;LANG<br>可以这么说，LC_ALL是最上级设定或者强制设定，而LANG是默认设定值。<br>1、如果你设定了LC_ALL＝zh_CN.UTF-8，那么不管LC_*和LANG设定成什么值，它们都会被强制服从LC_ALL的设定，成为 zh_CN.UTF-8。<br>2、假如你设定了LANG＝zh_CN.UTF-8，而其他的LC_*=en_US.UTF-8，并且没有设定LC_ALL的话，那么系统的locale设定以LC_*=en_US.UTF-8。<br>3、假如你设定了LANG＝zh_CN.UTF-8，而其他的LC_*，和LC_ALL均未设定的话，系统会将LC_*设定成默认值，也就是LANG的值 zh_CN.UTF-8 。<br>4、假如你设定了LANG＝zh_CN.UTF-8，而其他的LC_CTYPE=en_US.UTF-8，其他的LC_*，和LC_ALL均未设定的话，那么系统的locale设定将是：LC_CTYPE=en_US.UTF-8，其余的 LC_COLLATE，LC_MESSAGES等等均会采用默认值，也就是LANG的值，也就是LC_COLLATE＝LC_MESSAGES＝&#8230;&#8230;＝ LC_PAPER＝LANG＝zh_CN.UTF-8。</p>
<p>所以，locale是这样设定的：<br>1、如果你需要一个纯中文的系统的话，设定LC_ALL= zh_CN.XXXX，或者LANG= zh_CN.XXXX都可以，当然你可以两个都设定，但正如上面所讲，LC_ALL的值将覆盖所有其他的locale设定，不要作无用功。<br>2、如果你只想要一个可以输入中文的环境，而保持菜单、标题，系统信息等等为英文界面，那么只需要设定LC_CTYPE＝zh_CN.XXXX，LANG= en_US.XXXX就可以了。这样LC_CTYPE＝zh_CN.XXXX，而LC_COLLATE＝LC_MESSAGES＝&#8230;&#8230;＝ LC_PAPER＝LANG＝en_US.XXXX。<br>3、假如你高兴的话，可以把12个LC_*一一设定成你需要的值，打造一个古灵精怪的系统：<br>LC_CTYPE＝zh_CN.GBK/GBK(使用中文编码内码GBK字符集)；<br>LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统)<br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#76;&#67;&#95;&#77;&#69;&#65;&#83;&#85;&#82;&#69;&#77;&#69;&#78;&#61;&#100;&#101;&#95;&#68;&#69;&#64;&#101;&#117;&#114;&#111;&#46;&#73;&#83;&#79;&#45;&#56;&#56;&#53;&#57;&#45;&#49;&#53;">LC_MEASUREMEN=de_DE@euro.ISO-8859-15</a>(德国的度量衡使用ISO-8859-15字符集)<br>罗马的地址书写方式，美国的纸张设定&#8230;&#8230;。估计没人这么干吧。<br>4、假如你什么也不做的话，也就是LC_ALL，LANG和LC_*均不指定特定值的话，系统将采用POSIX作为lcoale，也就是C locale.</p>
<img src ="http://www.phpweblog.net/killjin/aggbug/3058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/killjin/" target="_blank">Prog</a> 2008-03-27 03:40 <a href="http://www.phpweblog.net/killjin/archive/2008/03/27/3058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>