<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>膘叔</title>
		<link>http://www.neatstudio.com/</link>
		<description>只关心我所关心的，不在意我所不在意的</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Tue, 07 Sep 2010 22:22:34 +0000</lastBuildDate>
		<ttl>10</ttl>
		<item>
			<guid>http://www.neatstudio.com/show-1447-1.shtml</guid>
			<title>笔记：svn之目标机器积极拒绝</title>
			<author>gouki</author>
			<description><![CDATA[<p>在以前的博客文章里也介绍了怎么安装svn的，昨天我又重装了一下，不过是按照网上的教程来装的。所以遇到了点问题，那就是：目标机器积极拒绝。<br />
安装过程如下：<br />
$apt-get update<br />
$apt-get install subversion<br />
$mkdir /var/svn/<br />
$useradd svn<br />
$passwd svn<br />
$chown -R svn:svn /var/svn<br />
$svnadmin create /var/svn/test<br />
$vim /var/svn/test/conf/svnserve.conf<br />
把几个注释去掉。。。。<br />
$vim /var/svn/test/conf/passwd<br />
添加用户<br />
$vim /var/svn/test/conf/authz <br />
增加权限<br />
$svnserve -d -listen-port 9999 -r /var/svn <br />
表面上看来没什么问题。但事实上连接的时候就是目标机器积极拒绝。。<br />
仔细想了想，应该没什么问题。看了一下进程，也确实存在 svnserve：ps -ef|grep svnserve<br />
那问题出来哪里呢？突然想到-listen-port ，会不会端口的问题？于是杀掉进程后<br />
$svnserve -d -r /var/svn<br />
然后就可以连上了。。<br />
做个记录</p>]]></description>
			<link>http://www.neatstudio.com/show-1447-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-09-01 11:12</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1432-1.shtml</guid>
			<title>资料：rsync</title>
			<author>gouki</author>
			<description><![CDATA[<p>服务器同步，最简单的恐怕就是rsync了。如果是同一机房，如果是ubuntu，那就真的是灰常灰常简单啊。apt-get install rsync就over了。当然配置还是需要自己来的。<br />
找的资料居然是百度百科的。好郁闷啊。不过。。。还是COPY一份了（话又说回来，现在百度百科在人肉整理+金钱攻势下，资料也真的是越来越完善了。只是不知道啥时候会把RFC也帮忙全部汉化一下吧。比如大家关心的tcp/ip,http协 议等，是不是也该整个汉化的版本之类的？【或许已经有了只是没有注意过罢了】）<br />
原文：http://baike.baidu.com/view/1183189.htm<br />
rsync是类unix系统下的数据镜像备份工具，从软件的命名上就可以看出来了&mdash;&mdash;remote sync。它的特性如下：</p>
<ol>
    <li>可以镜像保存整个目录树和文件系统。</li>
    <li>可以很容易做到保持原来文件的权限、时间、软硬链接等等。</li>
    <li>无须特殊权限即可安装。</li>
    <li>优化的流程，文件传输效率高。</li>
    <li>可以使用rcp、ssh等方式来传输文件，当然也可以通过直接的socket连接。</li>
    <li>支持匿名传输，以方便进行网站镜象。</li>
</ol>
<p><strong>软件下载<br />
</strong>rysnc的主页地址为：http://rsync.samba.org/ ，目前最新版本为3.0.7。可以选择从原始网站下载：http://rsync.samba.org/ftp/rsync/。<br />
<strong>安装</strong><br />
Ubuntu安装: sudo apt-get install rsync<br />
RedHat: yum install rsync<br />
编译安装<br />
rsync的编译安装非常简单，只需要以下简单的几步：<br />
[root@www rsync-2.4.6]# ./configure<br />
[root@www rsync-2.4.6]# make<br />
[root@www rsync-2.4.6]# make install<br />
但是需要注意的是必须在服务器A和B上都安装rsync，其中A服务器上是以服务器模式运行rsync，而B上则以客户端方式运行rsync。这样在web服务器A上运行rsync守护进程，在B上定时运行客户程序来备份web服务器A上需要备份的内容。<br />
<strong>rsyncd.conf</strong><br />
rsync服务器的配置文件是rsyncd.conf.<br />
以下是一个rsyncd.conf的样本:<br />
# Distributed under the terms ofthe GNU General Public License v2<br />
# Minimal configuration file for rsyncdaemon<br />
# See rsync(1) and rsyncd.conf(5) man pagesfor help<br />
# This line is required by the/etc/init.d/rsyncd script<br />
pid file = /var/run/rsyncd.pid<br />
port = 873<br />
uid = root<br />
gid = root<br />
use chroot = yes<br />
read only = yes<br />
max connections = 5<br />
#This will give you a separate log file<br />
#log file = /var/log/rsync.log<br />
log format = %t %a %m %f %b<br />
syslog facility = local3<br />
timeout = 300<br />
[test]<br />
path = /home/nemo<br />
list=yes<br />
ignore errors<br />
auth users = root, nemo<br />
secrets file = /etc/rsyncd/rsyncd.secrets<br />
comment = linuxsir home<br />
exclude = tmp/<br />
各个参数具体含义参见man rsyncd.conf<br />
<strong>服务器端启动:</strong><br />
usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf<br />
可能需要root权限运行.<br />
/etc/rsyncd/rsyncd.conf 是你刚才编辑的rsyncd.conf的位置.<br />
也可以在/etc/rc.d/rc.local里加入让系统自动启动等.<br />
<strong>客户端同步:</strong><br />
rsync -参数 用户名@同步服务器的IP::rsyncd.conf中那个方括号里的内容 本地存放路径 如:<br />
rsync -avzP nemo@192.168.10.1::nemo /backup<br />
说明：<br />
-a 参数，相当于-rlptgoD，-r 是递归 -l 是链接文件，意思是拷贝链接文件；-p 表示保持文件原有权限；-t 保持文件原有时间；-g 保持文件原有用户组；-o 保持文件原有属主；-D 相当于块设备文件；<br />
-z 传输时压缩；<br />
-P 传输进度；<br />
-v 传输时的进度等信息，和-P有点关系，自己试试。可以看文档；</p>
<dl id="viewExtRead"><dt>扩展阅读：&nbsp;</dt></dl>
<ol>
    <li><a target="_blank" href="http://chenzhuo.blog.51cto.com/150592/269530">http://chenzhuo.blog.51cto.com/150592/269530</a> rsync配置实例</li>
</ol>
<p>现在，windows下面也有rsync客户端了。。。</p>]]></description>
			<link>http://www.neatstudio.com/show-1432-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-08-17 20:40</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1376-1.shtml</guid>
			<title>Linux短信平台的搭建</title>
			<author>gouki</author>
			<description><![CDATA[<p>关于linux下发短信，我是找到这篇 文章，但是我想要的只是一点点啦。因为我是用SP接口。</p>
<p>先上他的内容，然后我把我当初做的列出来，原文是在：http://www.cnblogs.com/pipc/archive/2010/07/11/1775007.html：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 前段时间为用户提供VPN 和SSH 服务，消息的都是通过电子邮件发送的。没有短信的快捷和实时性，决定搭建自己的短信平台。</p>
<p>在此之前我也用过其他服务商提供的短信平台，都有各种各样的问题。</p>
<p>其中短信平台存在的问题：</p>
<p>1、发送短信有时段限制，有些短信通道只能在 上午8点 到晚上8点发送，如果遇到夜间的紧急时间需要发送短信就无能为力了，比如服务器当机、MSSQL数据库日志满了、系统盘空间不足。 在Linux 下磁盘空间不足会照成MySQL启动失败。</p>
<p>2、通过通道发送短信限制十分严格，相对于个人手机，进行关键词屏蔽非常厉害，&nbsp; 比如 &ldquo;发票&rdquo;、&ldquo;还钱&rdquo;、&ldquo;你妈&rdquo;有些常用词都不能发。&nbsp;句子里包含关键词都发送失败， &ldquo;我中午去打印手机话费发票&rdquo;、&ldquo;听说你妈住院了，现在身体好吗？&rdquo;， 通过个人手机限制的就不严格。</p>
<p>3、通道拥挤的情况，因为这些通道一般都是提供批量发送广告的， 一次发送1万条，10万条都很正常。 如果这个时候你发送短信，只能排在消息队列的最后。 通常延时20分钟到4小时。</p>
<p>4、通道设备故障，因为各种情况照成的消息队列内的短信丢失。 你调用API接口发送短信，短信状态时成功的，由于平台的故障照成短信没有发送成功，而且你得不到错误的状态，费用照扣。</p>
<p>5、扣量，各个短信平台情况不一样， 价格比较低的扣量比较严重， 比如你群发 10万条，&nbsp; 前 5000条100%发送，&nbsp; 5000 -1万条&nbsp; 发送 95%， 1万-2万条 发送 90%， 到10万条的时候55% 甚至更低。</p>
<p>发送短信一般有2种方法， 一种是通过短信通道发送， 还有就是自己购买设备发送短信。</p>
<p>&nbsp;申请单独的短信通道要求比较高，一般在10-30万费用，比较大型的公司才会申请，比如银行、证劵等， 发送的号码都是95555 ，96000等， 还有就是106557**** 这样的通道。&nbsp;申请的费用较少，一般几千元就可以申请到。 通道提供商业一般提供2种接口， 一种是API接口,通过API发送短信，比如http://www.pipc.net/sms/send.aspx?id=130130****&amp; amp;msg=测试短信 ,还有一种数据库接口，你可以连接到数据库直接把消息插入相关的表中。</p>
<p>--EOF--</p>
<p>因为我是采用的购买的SP的服务。因此，发送短信就相当于类似上面的方法了。不过我也想过接收短信，是采用原文中下面的方式（http://www.cnblogs.com/pipc/archive/2010/07/11/1775007.html）【我这里不一一介绍】</p>
<p>我具体是在linux下面跑一个cron任务，这样可以一直从队列里进行发送短信。大多数情况下我们是即时发送的，只是有时候会有堵塞，这时候我们就扔到队列里（当然，是需要返回结果不是手机号码不正确的原因才会扔到队列里，如果手机号码都不对了，扔到队列里也发送不了。）</p>
<p>接收短信，只要在任何一台机器上搞一个移动猫，用任何程序都可以定时读取信息。如果是接收到相应的代码就触发一些操作。有这种功能就免得你买一些需要接收固定号码的SP了，那样的价格高很多呢。</p>]]></description>
			<link>http://www.neatstudio.com/show-1376-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-07-11 09:01</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1355-1.shtml</guid>
			<title>Google爬虫：不仅索引链接，还可以运行js代码</title>
			<author>gouki</author>
			<description><![CDATA[<p>让人意外的是这个标题：【Google爬虫：不仅索引链接，还可以运行js代码】,真的没想过，看看cnbeta怎么说的？</p>
<p>一直以来Google的搜索爬虫就具有阅读JavaScript代码的功能，但是多年以来我们一直都不清楚Google的爬虫是否真正理解了其正在抓取的 东西或者说它仅仅只是在易于理解的数据结构中对各种链接进行呆板的检索。本周五，一位Google的发言人向《福布斯》确认Google所作的远远超过对 js代码的简单分析。这位发言人表示：&ldquo;<strong>Google能够分析并理解某些JavaScript&rdquo;</strong>。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Google的表述让我们意识到其爬虫所作的工作也许不仅仅只是获得对页面的相关链接，还能够像人一样与各类程序发生互动&mdash;&mdash;发现Bing这类搜索引擎所 不能发现的网络世界。而这意味着，Google重新定义了搜索引擎。在Google的搜索结果里面只有很少的js代码，而且Google也将这种js代码 的解释功能做了很多保留。比如在Google站点搜索（Google's Site Search）的文档显示其不能够索引带有js代码的内容。一本关于索引的入门教材这样写道：它（Google爬虫）&ldquo;不能够处理带有富媒体的内容或者是 动态网页&rdquo;。仔细检查服务器日志中的记录我们便可以发现Google现在索引那些并不是直接包含在js代码里面的链接，<strong>Google的爬虫只有确定自己能够运行部分代码的时候才能明白整段代码到底是什么意思。</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mark Drummond，一家独立搜索引擎公司Wowd的首席执行官（我们在今年之前的杂志中采访过他）在一封邮件中告诉我们理解js代码&ldquo;是一个非常深刻、难度极大和一场经典的计算科学难题。&rdquo;<strong>他解释道Google的努力在于它能够发现js代码在网页中是否存在停止运行的情况</strong>。 他表示&ldquo;停止运行的问题是无法判定的&rdquo;，他说迄今为止还没有已知的算法能够在任何程序的任何时间点告诉我们该程序是否陷入了死循环，而且数学上已经证明了 这一点。Drummond自己的公司通过人工的方式检索其索引并标明是否有可能简化这个复杂的问题，同时判断一个网络程序是否向另外的程序发起了数据请 求。也许，这正是Google现在在做的事情。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另一位同Google接近的搜索引擎人士也认同Drummond关于理解js代码复杂性的看法。他认为用一个程序去分析另一个程序是很困难的事情，执行js代码几乎是现阶段能够做到的极限了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而Google在六月发布的改进版搜索算法（即Caffeine）似乎开始能够理解部分js代码了。如果这是真的，那么Google的工程师已经教会了其爬虫如何执行部分js代码。这真是一大突破！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnBeta.com编译自<a href="http://blogs.forbes.com/velocity/2010/06/25/google-isnt-just-reading-your-links-its-now-running-your-code/">Forbes</a></p>
<p>--EOF--</p>
<p>额。这样就比较有意思了。。JS也能够被解析？确实有点恐怖，未来会怎么样？真的是象浏览器一样的访问吗？他们也会兼容所有的浏览器吗？会。。。模拟登录吗？这才是我关心的，会识别验证码吗？</p>]]></description>
			<link>http://www.neatstudio.com/show-1355-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-06-27 08:30</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1354-1.shtml</guid>
			<title>Nginx针对IP和目录限速</title>
			<author>gouki</author>
			<description><![CDATA[<p>一般来说，限速这东西仅限于FTP，可以给FTP用户进行限速，但，如果你没有FTP，仅有HTTP的情况下如何呢？上次vampire演示过一段，同时还根据URL来读取文件的区块。事实上我们的需要没有那么复杂，向tom zheng博客上的这段就够我们用了。不是吗？再者，现在用nginx的机器应该很多了吧（我没有用，因为，我不可能为线上每个用户都去设置一遍他们的rewrite规则。只能将就一下了。）</p>
<p>原文来自：http://zys.8800.org/index.php/archives/322</p>
<p>nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个目录来限速。</p>
<p>示例:</p>
<p><strong>limit_zone&nbsp;one&nbsp;$binary_remote_addr&nbsp;10m;</strong></p>
<p><strong>location&nbsp;/&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit_conn&nbsp;one&nbsp;1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit_rate&nbsp;100k; <br />
}</strong></p>
<p>说明:</p>
<p>limit_zone，是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器，按照32bytes/session，可以处理320000个session。</p>
<p>然后针对 /目录进行设定。</p>
<p>limit_conn one 1;&nbsp; 是限制每个IP只能发起一个连接。</p>
<p>limit_rate 100k;&nbsp;&nbsp;&nbsp; 是对每个连接限速100k. 注意，这里是对连接限速，而不是对IP限速。如果一个IP允许两个并发连接，那么这个IP就是限速limit_rate x 2。</p>
<p>关于limit_zone的原始文档，请见 <a href="http://wiki.nginx.org/NginxHttpLimitZoneModule">http://wiki.nginx.org/NginxHttpLimitZoneModule</a></p>
<p>关于limit_rate和limit_conn的原始文档，请见 <a href="http://wiki.nginx.org/NginxHttpCoreModule">http://wiki.nginx.org/NginxHttpCoreModule</a></p>]]></description>
			<link>http://www.neatstudio.com/show-1354-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-06-27 07:37</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1353-1.shtml</guid>
			<title>Facebook图片管理架构(转帖学习一下)</title>
			<author>gouki</author>
			<description><![CDATA[<p>Facebook 的照片分享很受欢迎，迄今，Facebook 用户已经上传了150亿张照片，加上缩略图，总容量超过1.5PB，而每周新增的照片为2亿2000万张，约25TB，高峰期，Facebook 每秒处理55万张照片，这些数字让如何管理这些数据成为一个巨大的挑战。本文由 Facebook 工程师撰写，讲述了他们是如何管理这些照片的。</p>
<p><strong>旧的 NFS 照片架构</strong><br />
老的照片系统架构分以下几个层：<br />
# 上传层接收用户上传的照片并保存在 NFS 存储层。<br />
# 照片服务层接收 HTTP 请求并从 NFS 存储层输出照片。<br />
# NFS存储层建立在商业存储系统之上。</p>
<p>因为每张照片都以文件形式单独存储，这样庞大的照片量导致非常庞大的元数据规模，超过了 NFS 存储层的缓存上限，导致每次招聘请求会上传都包含多次I/O操作。庞大的元数据成为整个照片架构的瓶颈。这就是为什么 Facebook 主要依赖 CDN 的原因。为了解决这些问题，他们做了两项优化：<br />
# Cachr: 一个缓存服务器，缓存 Facebook 的小尺寸用户资料照片。<br />
# NFS文件句柄缓存：部署在照片输出层，以降低 NFS 存储层的元数据开销。</p>
<p><strong>新的 Haystack 照片架构</strong><br />
新的照片架构将输出层和存储层合并为一个物理层，建立在一个基于 HTTP 的照片服务器上，照片存储在一个叫做 haystack 的对象库，以消除照片读取操作中不必要的元数据开销。新架构中，I/O 操作只针对真正的照片数据（而不是文件系统元数据）。haystack 可以细分为以下几个功能层：<br />
# HTTP 服务器<br />
# 照片存储<br />
# Haystack 对象存储<br />
# 文件系统<br />
# 存储空间</p>
<p>存储<br />
Haystack 部署在商业存储刀片服务器上，典型配置为一个2U的服务器，包含：<br />
# 两个4核CPU<br />
# 16GB &ndash; 32GB 内存<br />
# 硬件 RAID，含256-512M NVRAM 高速缓存<br />
# 超过12个1TB SATA 硬盘</p>
<p>每个刀片服务器提供大约10TB的存储能力，使用了硬件 RAID-6, RAID 6在保持低成本的基础上实现了很好的性能和冗余。不佳的写性能可以通过高速缓存解决，硬盘缓存被禁用以防止断电损失。<br />
文件系统<br />
Haystack 对象库是建立在10TB容量的单一文件系统之上。文件系统中的每个文件都在一张区块表中对应具体的物理位置，目前使用的文件系统为 XFS。<br />
Haystack 对象库<br />
Haystack 是一个简单的日志结构，存储着其内部数据对象的指针。一个 Haystack 包括两个文件，包括指针和索引文件：</p>
<p><a href="http://www.fovweb.com/tag/facebook" target="_blank"><a href="http://www.neatstudio.com/attachment.php?id=657" target="_blank"><img src="http://www.neatstudio.com/attachments/date_201006/thumb_0ac636c896311b73ab9d186416cc8178.jpg" border="0" alt="大小: 17.5 K&#13;尺寸: 500 x 231&#13;浏览: 114 次&#13;点击打开新窗口浏览全图" width="500" height="231" /></a><br />
</a></p>
<p>Haystack 对象存储结构</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=658" target="_blank"><img src="http://www.neatstudio.com/attachments/date_201006/thumb_81114cff256ffc77892a326ecf322610.jpg" border="0" alt="大小: 36.73 K&#13;尺寸: 500 x 232&#13;浏览: 115 次&#13;点击打开新窗口浏览全图" width="500" height="232" /></a></p>
<p><a href="http://www.neatstudio.com/attachment.php?id=659" target="_blank"><img src="http://www.neatstudio.com/attachments//date_201006/6ec15d756324bf23421a8959e8fc208b.jpg" border="0" alt="大小: 11.91 K&#13;尺寸: 432 x 154&#13;浏览: 103 次&#13;点击打开新窗口浏览全图" width="432" height="154" /></a></p>
<p>指针和索引文件结构</p>
<p>Haystack 写操作<br />
Haystack 写操作同步将指针追加到 haystack 存储文件，当指针积累到一定程度，就会生成索引写到索引文件。为了降低硬件故障带来的损失，索引文件还会定期写道存储空间中。</p>
<p>Haystack 读操作<br />
传到 haystack 读操作的参数包括指针的偏移量，key，代用Key,Cookie 以及数据尺寸。Haystack 于是根据数据尺寸从文件中读取整个指针。</p>
<p>Haystack 删除操作<br />
删除比较简单，只是在 Haystack 存储的指针上设置一个已删除标志。已经删除的指针和索引的空间并不回收。</p>
<p>照片存储服务器<br />
照片存储服务器负责接受 HTTP 请求，并转换成相应的 Haystack 操作。为了降低I/O操作，该服务器维护着全部 Haystack 中文件索引的缓存。服务器启动时，系统就会将这些索引读到缓存中。由于每个节点都有数百万张照片，必须保证索引的容量不会超过服务器的物理内存。</p>
<p>对于用户上传的图片，系统分配一个64位的独立ID，照片接着被缩放成4种不同尺寸，每种尺寸的图拥有相同的随机 Cookie 和 ID，图片尺寸描述（大，中，小，缩略图）被存在代用key 中。接着上传服务器通知照片存储服务器将这些资料联通图片存储到 haystack 中。</p>
<p>每张图片的索引缓存包含以下数据</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=660" target="_blank"><img src="http://www.neatstudio.com/attachments/date_201006/thumb_c52350bd75ea0ccba6611320823925b2.jpg" border="0" alt="大小: 15.81 K&#13;尺寸: 500 x 178&#13;浏览: 104 次&#13;点击打开新窗口浏览全图" width="500" height="178" /></a></p>
<p>Haystack 使用 Google 的开源 sparse hash data 结构以保证内存中的索引缓存尽可能小。<br />
照片存储的写/修改操作<br />
写操作将照片数据写到 Haystack 存储并更新内存中的索引。如果索引中已经包含相同的 Key，说明是修改操作。</p>
<p>照片存储的读操作<br />
传递到 Haystack 的参数包括 Haystack ID，照片的 Key, 尺寸以及 Cookie，服务器从缓存中查找并到 Haystack 中读取真正的数据。</p>
<p>照片存储的删除操作<br />
通知 Haystack 执行删除操作之后，内存中的索引缓存会被更新，将便宜量设置为0，表示照片已被删除。</p>
<p>重新捆扎<br />
重新捆扎会复制并建立新的 Haystack，期间，略过那些已经删除的照片的数据，并重新建立内存中的索引缓存。</p>
<p>HTTP 服务器<br />
Http 框架使用的是简单的 evhttp 服务器。使用多线程，每个线程都可以单独处理一个 HTTP 请求。</p>
<p>结束语<br />
Haystack 是一个基于 HTTP 的对象存储，包含指向实体数据的指针，该架构消除了文件系统元数据的开销，并实现将全部索引直接存储到缓存，以最小的 I/O 操作实现对照片的存储和读取。</p>
<p>本文国际来源：http://www.facebook.com/FacebookEngineering#/note.php?note_id=76191543919&amp;ref=mf</p>
<p>中文翻译来源：COMSHARP CMS 官方网站</p>
<p>我的来源：http://zys.8800.org/index.php/archives/334</p>]]></description>
			<link>http://www.neatstudio.com/show-1353-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-06-27 07:30</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1335-1.shtml</guid>
			<title>利用.htaccess绑定域名到子目录</title>
			<author>gouki</author>
			<description><![CDATA[<p>rewrite规则说白了，其实并不难，只要你了解了正则规范后，你就会发现，其实，写这东西，比写PHP的正则要容易的多。毕竟PHP的正则你要考虑很多东西。而用在URL上的，不可能太多。<br />
下面的这篇文章是08年的，不过仍然可以作为参考。以前的uchome下面，好象也是支持三级域名的。也可以参考一下官方的配置，但。。。好象是找不到官方的rewrite规则？<br />
二级域名。如果你真的不会设置，手头又没有啥资料，你可以安装一下wordpress多用户版，安装完毕后生成的.htaccess文件，你就可以拿来作为参考了。</p>
<p><strong>前提</strong><br />
首先得把域名绑定绑定了，比如把dev.ccvita.com解析到211.136.108.190这个IP<br />
其次是在网站管理面板里，为网站绑定dev.ccvita.com<br />
最后编辑配置.htaccess文件，就可以了。如果没有开启.htaccess请访问下面的内容，《<a href="http://www.ccvita.com/281.html">Apache之AllowOverride参数详解</a>》：<a href="http://www.ccvita.com/281.html">http://www.ccvita.com/281.html</a></p>
<p><strong>.htaccess文件内容</strong><br />
RewriteEngine on<br />
# 把 ccvita.com 改为你要绑定的域名.<br />
RewriteCond %{HTTP_HOST} ^(www.)?ccvita.com$</p>
<p># 把 subfolder 改为要绑定的目录.<br />
RewriteCond %{REQUEST_URI} !^/subfolder/</p>
<p># 不要改以下两行.<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d</p>
<p># 把 dev 改为要绑定的目录.<br />
RewriteRule ^(.*)$ /dev/$1</p>
<p># 把 ccvita.com 改为你要绑定的域名<br />
# 把 dev 改为要绑定的目录.<br />
# dev/ 后面是首页文件index.php, index.html<br />
RewriteCond %{HTTP_HOST} ^(www.)?ccvita.com$<br />
RewriteRule ^(/)?$ dev/index.php [L]</p>
<p>文中所涉及的域名，我没有更改过哦。原文来自：http://www.ccvita.com/362.html。<br />
同样，如果你是typecho，如果你在后台打开rewrite规则后，你也可以参考一下（不过，这个只适合单用户，哪天要是typecho开发多用户版，估计现在这个.htaccess也是可以被拿来使用的，谁知道呢？）</p>]]></description>
			<link>http://www.neatstudio.com/show-1335-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-06-14 20:06</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1286-1.shtml</guid>
			<title>最精确硬盘分区的算法</title>
			<author>gouki</author>
			<description><![CDATA[<p>想知道磁盘空间有多大，其实还是有算法的，下面的就是从网络搜索而来，当然我是从http://xinsync.xju.edu.cn/index.php/archives/5137COPY过来的。仅仅作为一个资料查看一下</p>
<p>硬盘一般有255磁头，63扇区，故每柱面大小为：512byte x 255 x 63＝8225280bytes ＝7.84423828125 MB</p>
<p>如果要分40GB,那么要40&times;1024MB=40960MB<br />
需要柱面数为40960&divide;7.84423828125=5221.66<br />
取整数既为5222个柱面，应分M数为5222&times;7.84423828125=40962.6123046875MB</p>
<p>不管小数点后面几位都进1，也就是40963MB，windows就认为是40GB了。<br />
这个方法NTFS和FAT32通用。</p>
<p>下面附10GB到200GB整10GB递增的精确计算结果：<br />
10GB ＝ 10245MB<br />
20GB ＝ 20482MB<br />
30GB ＝ 30726MB<br />
40GB ＝ 40963MB<br />
50GB ＝ 51208MB<br />
60GB ＝ 61444MB<br />
70GB ＝ 71681MB<br />
80GB ＝ 81926MB<br />
90GB ＝ 92162MB<br />
100GB ＝ 102407MB<br />
110GB ＝ 112644MB<br />
120GB ＝ 122888MB<br />
130GB ＝ 133125MB<br />
140GB ＝ 143362MB<br />
150GB ＝ 153606MB<br />
160GB ＝ 163843MB<br />
170GB ＝ 174088MB<br />
180GB ＝ 184324MB<br />
190GB ＝ 194561MB</p>
<p>此精确分区结果，在管理工具-磁盘管理界面，和Windows资源管理器里面显示的是整数，10G就是10.00GB，20G就是 20.00GB，40G就是40.00GB。</p>]]></description>
			<link>http://www.neatstudio.com/show-1286-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-05-18 10:01</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1275-1.shtml</guid>
			<title>福珑2E电脑硬盘重装系统、系统Ghost以及简单配置</title>
			<author>gouki</author>
			<description><![CDATA[<p>前两天，突然接到一个电话，看来源是江苏的，接起来后感觉到意外，原来是龙芯那边打来的，问我福珑2E用的怎么样。这才让我想起，原来我的福珑2E已经扔在抽屉里2年多了。买福珑本身是一个小意外，当初的想法是利用这样的小盒子连软件一起打包卖的，但最后，接单的项目结束了，被人忽悠了一下，但是电脑也买了回来，于是就自己折腾了一段时间。但后来还是没有正式使用。</p>
<p>如今我又想使用了，想用它来代替电视的机顶盒，看电影啥的。可是却发现原来我的机器不能启动了，而且，还不会安装。这不，网上找了点资料，先备份一下，然后过两天慢慢折腾（主要是没有显示器了。。。）</p>
<p>原文很长。。。不过也得转呀。来源是：http://hi.baidu.com/busybox/blog/item/19aa3f8b69ccadd5fc1f104d.html</p>
<p>--START--</p>
<div class="cnt" id="blog_text">
<p>我的条件是有了台能上网的X86电脑，装有XP，软硬齐全。<br />
<strong>一、硬盘重装系统</strong></p>
<p>1．把随机附送的光盘在XP下做成debian.iso镜像文件，也可以重网上直接下载<a href="http://www.lemote.com/debian/iso/">http://www.lemote.com/debian/iso/</a>里 面直接下载，重命名为debian.iso，重命名的好处是以后输入命令后方便。</p>
<p>2．先介绍下我的盒子的分区：<br />
/根分区挂载的是/dev/hda1<br />
/home分区挂载的是/dev/hda2<br />
/swap分区挂载的是/dev/hda3<br />
/opt分区挂载的是/dev/hda4<br />
把debian.iso文件拷到盒子里的/home分区，在终端输入如下命令：<br />
su<br />
mount -o loop /home/debian /cdrom<br />
cd /cdrom/boot<br />
cp setup /</p>
<p>3．重启电脑按DEL键进入BIOS，进入BIOS后在PMON下输入如下命令：<br />
PMON&gt;load <a>/dev/fs/ext2@wd0a/setup</a><br />
PMON&gt;g console=tty<br />
开始硬盘重装系统。</p>
<p>4．根据提示依次选择&quot;语言&quot;-&gt;&quot;简体中文&quot;，&quot;国家&quot;-&gt;&quot;中国&quot;，&quot;键盘&quot;-&gt;&quot;美式英语&quot;。</p>
<p>5．在Debian安装程序主菜单出现后，按&quot;Alt+F2&quot;，然后再按&quot;Enter&quot;。出现命令提示符，输入如下命令：<br />
cd /mnt<br />
mkdir home iso<br />
mount /dev/hda2 /home<br />
mount home/debian.iso iso<br />
输入完成后，按&quot;Alt+F1&quot;返回Debian安装程序主菜单。</p>
<p>6．选择&ldquo;探测并挂载CD-ROM&rdquo;，根据提示依次选择：<br />
&quot;从驱动软盘中加载光盘驱动器的驱动吗？&quot;-&gt;&quot;否&quot;<br />
&quot;手动选择光盘驱动器设备及其模式吗？&quot;-&gt;&quot;是&quot;<br />
&quot;使用此光盘驱动器所需要加载的模块&quot;-&gt;&quot;none&quot;<br />
&quot;光盘驱动器所对应的设备文件&quot;-&gt;&quot;键入/dev/loop0&quot;<br />
最后选择&quot;继续&quot;。</p>
<p>7．然后依次选择&quot;配置网络&quot;、&quot;探测网络设备&quot;<br />
&quot;使用DHCP进行网络自动配置&quot;-&gt;&quot;是&quot;<br />
&quot;网络自动设置失效&quot;(因为我的盒子没有联网)-&gt;&quot;继续&quot;<br />
&quot;网络配置方式&quot;-&gt;&quot;现在不进行网络配置&quot;<br />
&quot;主机名&quot;-&gt;&quot;debian&quot;<br />
&quot;Debian归档镜像&quot;-&gt;&quot;www.lemote.com&quot;<br />
&quot;HTTP代理信息&quot;(留空)-&gt;&quot;继续&quot;<br />
&quot;无效的归档镜像&quot;(因为没联网)-&gt;&quot;继续&quot;<br />
又返回到&quot;选择归档镜像&quot;-&gt;&quot;返回&quot;。</p>
<p>8．选择&quot;探测磁盘&quot;-&gt;&quot;继续进行分区吗？&quot;-&gt;&quot;是&quot;-&gt;&quot;手动&quot;分区。我的分区如下：<br />
/根目录挂载/dev/hda1-----格式化成ext3<br />
/home挂载/dev/hda2------不格式化，保持现有数据<br />
/swap挂载/dev/hda3-------格式化成swap格式<br />
/opt挂载/dev/hda4---------不格式化，保持现有数据<br />
最后，选择&quot;分区设定结束并将修改写入磁盘&quot;-&gt;&quot;将改动写入磁盘吗？&quot;-&gt;&quot;是&quot;。</p>
<p>9．系统时间设置。提示&quot;您的系统时间设置为UTC？&quot;-&gt;&quot;是&quot;。</p>
<p>10．用户设置：<br />
&quot;Root用户密码&quot;-&gt;&quot;输入密码&quot;<br />
&quot;请再次输入以验证其正确性&quot;-&gt;&quot;重复输入&quot;<br />
&quot;请输入用户名&quot;-&gt;&quot;loongson&quot;<br />
&quot;您的帐号用户名&quot;-&gt;&quot;loongson&quot;<br />
&quot;请为新用户选择一个密码&quot;-&gt;&quot;输入密码&quot;<br />
&quot;请再次输入以验证其正确性&quot;-&gt;&quot;重复输入&quot;。</p>
<p>11．开始安装......</p>
<p>12．出现提示：<br />
&quot;要安装的内核&quot;-&gt;&quot;linux-image-2.6.18-godson2e&quot;<br />
&quot;使用网络镜像吗？&quot;-&gt;&quot;否&quot;<br />
&quot;被释放掉的有关security.debian.org的条目已被加到/etc/opt/soures.list文件中&quot;-&gt;&quot;继续&quot;<br />
&quot;您要参加软件包流行度调查吗？&quot;-&gt;&quot;否&quot;<br />
&quot;选择要安装的软件&ldquo;-&rdquo;桌面环境+标准系统&quot;(按空格键选择)-&gt;&quot;继续&quot;。</p>
<p>13．等待......出现提示：<br />
&quot;X服务器所使用的视频模式&quot;-&quot;1024*768+800*600+640*480&quot;(按空格选择)-&gt;&quot;继续&quot;。</p>
<p>14．一段时间后，出现提示：<br />
&quot;您将需要手动启动/dev/hda1分区上的内核并添加内核参数root=/dev/hda1&quot;-&gt;&quot;继续&quot;。</p>
<p>15．&quot;安装完成&quot;-&quot;继续&quot;，重启系统，按DEL键进入BIOS，在PMON下输入如下命令(设置系统启动内核)：<br />
PMON&gt;load <a>/dev/fs/ext2@wd0a/boot/vmlinux-2.6.18-godson2e</a><br />
PMON&gt;g console=tty root=/dev/hda1</p>
<p><br />
<strong>二、系统Ghost(官方版本)</strong></p>
<p>1．在<a href="http://www.lemote.com/debian-testing/for-2e/">www.lemote.com/debian-testing/for-2e/</a>目 录下载hda1.tar.gz和hda2.tar.gz。</p>
<p>2．福珑的预装系统打了有两个包：hda1.tar.gz，hda2.tar.gz。只要把这两个包分别解压到hda1和hda2上就可以了。如果 你安装了两个系统，可以在第二个系统中挂载和解压操作就可以了，如果你只有一个系统，那就可以启动一个rescue内核来操作，不过这都是在字符界面下完 成。</p>
<p>3．下面介绍一下具体做法：<br />
假设我把这两个包拷贝在系统的第四个分区(hda4)根目录(/)，在第一个分区(hda1)的boot目录下有rescue内核(预装的系统中都带了这 个内核，如果你的系统中没有，可以到<a href="http://www.lemote.com/debian/boot/">http://www.lemote.com/debian/boot/</a>) 下载。开机按住空格键(或者其他键，只要不是enter就行)进入PMON界面，输入如下命令：<br />
PMON&gt;load <a>/dev/fs/ext2@wd0/boot/rescue</a><br />
PMON&gt;g console=tty video=radeonfb:800x600@60<br />
然后rescue内核就开始启动，内核启动完成后会提示:<br />
Please press Enter to activate this console<br />
按回车就可以激活这个控制台，这时可以用mkfs.ext3 /dev/hda1和mkfs.ext3  /dev/hda2命令将hda1和hda2格式化。<br />
然后cd /mnt进入mnt目录下创建三个子目录hda1,hda2和hda4(创建目录用mkdir  目录名称，例如创建hda1目录可以用命令mkdir hda1)。<br />
然后将三个分区(hda1,hda2,hda3)分别挂载到/mnt/hda1，/mnt/hda2，/mnt/hda4(挂载可以用mount命令，例 如挂载hda1到/mnt/hda1，可以用命令mount /dev/hda1 /mnt/hda1)。<br />
挂载好以后用cd /mnt/hda4进入hda4目录，然后开始将两个包分别解压到两个分区中，解压命令是：<br />
tar xvzf hda1.tar.gz -C /mnt/hda1/(注意这个C是大写的)。<br />
这是将第一个分区的内容解压到hda1中，这个过程时间可能比较长，等这个过程结束后就可以解压第二个分区的内容了，命令是：<br />
tar xvzf hda2.tar.gz -C /mnt/hda2/<br />
这个过程是比较快的。<br />
解压完成后系统就安装好了。<br />
系统中有2.6.21和2.6.18两个内核，你可以在PMON中设置你想启动的内核。</p>
<p><br />
三、简单配置</p>
<p>1．内核更新。<br />
刚装的系统内核vmlinux-2.6.18-godson2e没有ppp模块所以不能上网。在<a href="http://www.lemote.com/download/downloads_27.html">http://www.lemote.com/download/downloads_27.html</a>下 载福珑迷你电脑64位内核2.6.22.9(kernel_2.6.22_9_lm64.tar.gz)64位的到U盘。U盘插入盒子，自动识别出来后， 输入如下命令：<br />
cd /media/usbdisk<br />
cp kernel_2.6.22.9_lm64.tar.gz /home<br />
cd /home<br />
tar xvfz kernel_2.6.22.9_lm64.tar.gz<br />
cd boot<br />
mv vmlinux vmlinux-2.6.22.9-64 <br />
cp vmlinux-2.6.22.9-64 /boot<br />
cd ..<br />
cd lib/modules<br />
cp -r 2.6.22.9lm64 /lib/modules<br />
重启机器，按DEL键进入BIOS，在PMON下输入如下命令：<br />
PMON&gt;set al <a>/dev/fs/ext2@wd0a/boot/vmlinux-2.6.22.9-64</a> <br />
PMON&gt;set karg &quot;console=tty root=/dev/hda1&quot;<br />
PMON&gt;reboot<br />
这样以后进入系统使用的就是64位的2.6.22.9内核了。</p>
<p>2．字体设置。<br />
在<a href="http://wqy.sourceforge.net/">http://wqy.sourceforge.net</a>或<a href="http://wenq.org/">http://wenq.org</a>可下载最新的文泉驿字体。不过这两个网站我上不去，于是在<a href="http://www.codeput.com/soft/view-software-12667.html">http://www.codeput.com/soft/view-software-12667.html</a>下 载了最新的文泉驿字体-文泉驿字体之&ldquo;祈祷&rdquo;的压缩包zenhei.rar。把zenhei.rar中的wqy-zenhei-0.6.26-0.deb 解压到U盘中。U盘插入盒子，执行如下命令：<br />
cd /media/usbdisk<br />
dpkg -i wqy-zenhei-0.6.26-0.deb<br />
字体安装成功后，下面就可以直接在子弟设置里设置使用文泉驿字体了。</p>
<p>3．输入法安装<br />
因为debian的镜像文件在/dev/hda2也就是/home分区，故可以直接用它安装。<br />
打开终端输入如下命令：<br />
mount -o loop /home/debian.iso /cdrom<br />
apt-get install scim<br />
SCIM随系统启动：<br />
在/etc/X11/Xsession.d目录下新建一个名叫95xinput的文件，内容如下：<br />
/usr/bin/scim -d<br />
XMODIFIERS=&quot;@im=SCIM&quot;<br />
export XMODIFIERS<br />
可以通过输入如下命令完成：<br />
cd /etc/X11/Xsession.d<br />
vim 95xinput<br />
然后按键&ldquo;A&rdquo;开始输入：<br />
/usr/bin/scim -d<br />
XMODIFIERS=&quot;@im=SCIM&quot;<br />
export XMODIFIERS<br />
输入完成后，按Esc键，再按:wq后，按&quot;Enter&quot;键后保存退出。<br />
这样，输入法安装完成，并随系统开机启动。</p>
<p>4．宽带上网设置<br />
首先从<a href="http://www.roaringpengwin.com/products/pppoe">http://www.roaringpengwin.com/products/pppoe</a>下 载rp-pppoe-3.10.tar.gz并拷入U盘。<br />
不过我在安装rp-pppoe之前还安装了pppoeconf，因为使用pppoeconf会经常掉线，经过设置后仍然如此，故事用rp-pppoe。<br />
先介绍pppoeconf的安装，因为debian的镜像文件在/dev/hda2也就是/home分区，故可以直接用它安装，打开终端输入如下命令：<br />
mount -o loop /home/debian.iso /cdrom<br />
apt-get install pppoeconf<br />
如果用apt-get install不能安装成功，可以用以下方法：<br />
cd /cdrom/pool/p/pppoeconf<br />
ls<br />
然后用dpkg  -i命令安装其文件夹下的文件，一般会提示缺少的依赖，可以在/cdrom/pool目录下依次寻找并安装，然后返回安装pppoeconf就可以了。<br />
下面介绍rp-pppoe的安装，把已经拷有rp-pppoe-3.10.tar.gz的U盘插入盒子，在终端输入如下命令：<br />
cd /media/usbdisk<br />
cp rp-pppoe-3.10.tar.gz /opt<br />
cd /opt<br />
tar xvfz rp-pppoe-3.10.tar.gz <br />
cd rp-pppoe-3.10<br />
./go<br />
知道安装完成，安装完成后可以直接进行配置，也可以以后用pppoe-stup来进行配置。如果之前没安装pppoeconf，此处安装时会提示安装 ppp，所以，最好先安装pppoeconf再安装rp-pppoe。<br />
以下是rp-pppoe的配置过程：<br />
//以下是屏幕显示：<br />
Welcome to the Roaring Penguin ADSL client setup. First, I will run some  checks on your system to make sure the PPPoE client is installed  properly...<br />
Looks good! Now, please enter some information:<br />
USER NAME<br />
&gt;&gt;&gt; Enter your PPPoE user name :<br />
输入连入宽带网的账号，值得注意的是，如果接入ADSL，使用中国电信的服务可直接输入账号，而如果是接入中国网通的以太网，要紧跟着账号后面输入!  Internet(I要大写)。<br />
INTERFACE<br />
&gt;&gt;&gt; Enter the Ethernet interface connected to the ADSL modem<br />
For Solaris, this is likely to be something like /dev/hme0.<br />
For Linux, it will be ethn, where 'n' is a number.<br />
(default eth0):<br />
输入准备接入互联网的网卡名，如果是缺省的就直接敲回车键。<br />
&gt;&gt;&gt; Enter the demand value (default no):<br />
直接回车。<br />
DNS<br />
&gt;&gt;&gt; Enter the DNS information here:<br />
输入有服务商提供的域名服务器地址，或输入server，由服务商自动提供(我家是自动分配IP的，所以输入的是server)。<br />
PASSWORD<br />
&gt;&gt;&gt; Please enter your PPPoE password:<br />
&gt;&gt;&gt; Please re-enter your PPPoE password:<br />
输入上网密码。<br />
FIREWALLING<br />
The firewall choices are:<br />
0 - NONE: This script will not set any firewall rules. You are  responsible for ensuring the security of your machine. You are STRONGLY  recommended to use some kind of firewall rules.<br />
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing  workstation<br />
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway  for a LAN<br />
&gt;&gt;&gt; Choose a type of firewall (0-2):<br />
选择防火墙，选0。<br />
** Summary of what you entered **<br />
Ethernet Interface: eth0<br />
User name: ddtthz! Internet<br />
Activate-on-demand: No<br />
DNS: server<br />
Firewalling: NONE<br />
&gt;&gt;&gt; Accept these settings and adjust configuration files (y/n)?<br />
选y。<br />
最后，对上述配置进行确认。确认后的配置系统会写入/etc/ppp/pppoe.conf文件，熟练的用户可直接对其进行修改。<br />
配置完成后，就可以进行拨号了。<br />
输入以下命令进行拨号：<br />
#pppoe-start<br />
如果屏幕上出现：&ldquo;...  Connected!&rdquo;就说明拨号成功了。一般而言做到这一步是没什么问题的。这时可以用ifconfig命令查看你的信息(可以使用命 令#ifconfig -a来查看)。<br />
最后可以Ping一下互联网中的某个主机名看下是否能上网，命令如下：<br />
#ping www.sina.com<br />
如果出现以下信息：<br />
PING jupiter.sina.com.cn (218.30.66.101) 56(84) bytes of data.<br />
64 bytes from 218.30.66.101: icnp_seq=1 ttI=128 time=91.6 ms<br />
64 bytes from 218.30.66.101: icnp_seq=2 ttI=128 time=163 ms<br />
64 bytes from 218.30.66.101: icnp_seq=3 ttI=128 time=178 ms<br />
......<br />
则表明已经连上Ineternet了。<br />
如果想开机自动连上宽带，可以按如下操作：<br />
首先，用pppoeconf配置在/etc/ppp/peers/生成一个dsl-provider用户文件。<br />
配置过程只要大家输入正确宽带上网的帐号密码就可以了，在最后有个提示问你是否在系统启动的时候启动pppoeconf，选择&quot;否&quot;，因为我们配置它的目 的只是生成一个用户配置文件。<br />
然后在终端输入如下命令：<br />
cd /etc/network<br />
vim interfaces<br />
按A键开始输入，输入以下字符：<br />
iface eth0 inet ppp<br />
provider dsl-provider<br />
按Esc键后，再按:wq，按Enter键后保存退出。<br />
cd /etc<br />
vim rc.local<br />
按A键开始输入，输入以下字符：<br />
/usr/sbin/pppoe-start<br />
按Esc键后，再按:wq，按Enter键后保存退出。<br />
这样，以后在系统启动后就能自动连上宽带了。</p>
</div>]]></description>
			<link>http://www.neatstudio.com/show-1275-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-05-12 15:36</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1248-1.shtml</guid>
			<title>linux命令行抓取网页快照 -（xvfb+CutyCapt）</title>
			<author>gouki</author>
			<description><![CDATA[<p>一直以来对于网页缩图，我都是想着用网上现成的工具来解决，网上也有很多网站提供类似服务，其实我也想做这样的功能，但PHP默认的功能只在windows下面才有，系统有一个默认的函数支持网页缩图的。<br />
网上找了找资料，发现linux server下也可以达到这个效果。嗯，是利用xvfb模拟x server，然后利用cutycapt(一款利用qt框架开发的截屏程序)截图，可以存成PNG和JPG等多种格式的图片。<br />
<br />
方法有点简单，我是说在ubuntu下面。直接：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>apt-get&nbsp;update&nbsp;&nbsp;</span></span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;xvfb&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;subversion&nbsp;libqt4-webkit&nbsp;libqt4-dev&nbsp;g++&nbsp;&nbsp;</span></li>
    <li class=""><span>svn&nbsp;co&nbsp;https://cutycapt.svn.sourceforge.net/svnroot/cutycapt&nbsp;&nbsp;</span></li>
    <li class="alt"><span>cd&nbsp;cutycapt/CutyCapt&nbsp;&nbsp;</span></li>
    <li class=""><span>qmake&nbsp;&nbsp;</span></li>
    <li class="alt"><span>make&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>操作完后就可以调用命令行截图了。</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>xvfb-run&nbsp;</span><span class="attribute">--server-args</span><span>=</span><span class="attribute-value">&quot;-screen&nbsp;0,&nbsp;1024x768x24&quot;</span><span>&nbsp;./CutyCapt&nbsp;</span><span class="attribute">--url</span><span>=</span><span class="attribute-value">http</span><span>://www.zol.com.cn&nbsp;</span><span class="attribute">--out</span><span>=test</span><span>.png&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>截下来你会发现，图片中的中文是乱码，就象<a href="http://neatstudio.com/test.png">这张</a>&lt;&lt;-点击看大图<br />
然后安装中文字体，最简单的办法就是从windows拷一些ttf的文字到/usr/share/fonts/truetype/目录下。<br />
然后再截图就是现在<a href="http://neatstudio.com/test2.jpg">这样</a>了<br />
<br />
参考：http://blog.saymoon.com/2009/11/take-snapshot-in-linux-command-line/</p>
<p>PS：过段时间可以尝试考虑用接口+队列，生成相应的命令，然后用shell调用命令行。逐步运行，生成缩图，只是生成的缩图都较大，不敢自己做这样服务，硬盘估计很容易就会满了。</p>
<p>我在VPS上面无法运行xvfb，可能是虚拟机不支持x-server模拟？妖了。。。</p>]]></description>
			<link>http://www.neatstudio.com/show-1248-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-04-28 11:23</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1224-1.shtml</guid>
			<title>为什么Linux现在无法吸引年轻开发者</title>
			<author>gouki</author>
			<description><![CDATA[<p>发这个新闻，主要不在新闻的内容，而是在回复。仿佛当年的项庄舞剑，意在沛公差不多。<br />
<br />
新闻原文是这样的：</p>
<p>Linux基金会执行董事Jim Zemlin声称Linux的市场地位十分稳固，尽管几位Linux内核的关键维护者已经头发花白。Linux   Weekly News的主编Jonathan Corbet在上周举行的Linux基金会协作峰会上<a href="http://www.informationweek.com/news/software/open_source/showArticle.jhtml?articleID=224400309">挑  明了这一问题</a>，他指出Linux内核团队的年龄一年比一年长，而年轻一代的开发者没有参与进来。<a href="http://linux.slashdot.org/story/10/04/18/1557220/Why-Linux-Is-Not-Attracting-Young-Developers">为  什么Linux现在无法吸引年轻开发者</a>？</p>
<p>著名的内核开发者Andrew   Morton也承认，他们越来越老，越来越累，而且没有看到其他人像他们过去那样充满激情的投入到一件事上。他同时指出，这个问题比较复  杂，因为随着内核代码越来越复杂，进入这个领域的门槛也越来越高，参与内核开发的开发者需要有丰富的经验和知识。他表示Linux内核  团队鼓励年轻一代的热心参与。</p>
<p>也有人评论认为，这种状况和学校的计算机教育也有关系，现在的计算机科学教育不再和1980年代和90年代那样关注底层开发和硬件交互，而  是主要学习高级语言如python、.Net、java等等。<br />
<br />
编译/solidot</p>
<p>回复是这一条：</p>
<p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>匿名人士&nbsp;发表于&nbsp;2010-04-19&nbsp;13:33:05&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;因为年轻人要买车买房娶老婆&hellip;&hellip;&nbsp;&nbsp;</span></li>
</ol>
</div>
极有同感，大家可以去<a href="http://www.cnbeta.com/articles/108968.htm" target="_blank" class="entry-title-link">为什么Linux现在无法吸引年轻开发者</a>围观</p>]]></description>
			<link>http://www.neatstudio.com/show-1224-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-04-19 13:46</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1200-1.shtml</guid>
			<title>a2enmod简介</title>
			<author>gouki</author>
			<description><![CDATA[<p>在ubuntu下面，在偷懒的时候大家都会用apt-get install apache来搞。但搞完之后如何配置却是头疼的问题。<br />
<br />
当然如果纯粹是用apt的话，是很方便。比如apt-get&nbsp; install php5 php5-mysql php5-sqlite一下子就可以解决很多问题。<br />
<br />
所以a2enmod的话，可以解决apache中的一些配置问题。比如a2enmod rewrite就可以打开rewrite。当然在配置文件里加loadmodule rewrite.so的话也是可以的，只是a2enmod 会更方便一点。<br />
<br />
参考那么多资料，但如果不知道a2enmod怎么用，还可以运行一下。会了解很多可以提供的资料。之所以用a2enmod，是因为他这样可以解决很多关联。不用担心那些文件关联。<br />
<br />
运行a2enmod，就可以看到。<br />
<br />
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation php5 proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias<br />
<br />
有的时候看名字还是可以看出一些问题的。比如你需要缓存图片，就需要headerset，这时候就需要a2enmod headers，就OK了。。<br />
<br />
看看：<a href="../../../show-1191-1.shtml">用.htaccess缓存图片 提高博客运行效率</a><br />
<br />
这时候就需要enmod headers了</p>]]></description>
			<link>http://www.neatstudio.com/show-1200-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-04-11 20:47</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1196-1.shtml</guid>
			<title>Linux操作系统有效防止ARP攻击的设置</title>
			<author>gouki</author>
			<description><![CDATA[<p>一直怀疑服务器被ARP攻击，所以为服务器做了防止ARP的处理。这点linux就不如windows，windows上一装360就可以防范攻击了，但linux就没有类似的功能。找了一些资料，并且问了朋友才了解了一点。<br />
linux上只有做mac地址绑定才可以，但也要交换机上也要做类似的绑定。<br />
但是我没有办法让服务商来帮我做绑定，只能自己做一个简单的绑定了。<br />
最后找了这个简单的资料，随便看看喽。。。。<br />
----start ----<br />
管理员用户登录,打开终端输入<br />
<strong>1、#arp -a &gt; /etc/ethers</strong><br />
将ip和mac地址导入ethers<br />
<strong>2、#vi /etc/ethers</strong><br />
编辑文件格式，ethers文件内容必须格式如下多余的全部删除，改成形式ip mac<br />
192.168.1.X XX:XX:XX:XX:XX<br />
192.168.1.X XX:XX:XX:XX:XX<br />
...<br />
//注意mac大写，而且没有O只有零，ip和mac空格<br />
<strong>3、#vi /etc/rc.d/rc.local </strong>//打开并显示 /etc/rc.d/rc.local文件，启动项文件<br />
#i //编辑<br />
//启动的时候执行arp -f按照/etc/ethers 中的内容绑定<br />
在 /etc/rc.d/rc/local 文件中最后加一行<br />
arp -f<br />
ESC退出编辑<br />
:wq //保存编辑<br />
<strong>4、#arp -f //执行保存的绑定</strong><br />
(ethers 里不包括网关mac否则会报错)<br />
<br />
<br />
这只能防住一些arp攻击，如果将网内所有ip mac导入ethers文件，能有效的防止arp攻击<br />
1、nmap -sP 192.168.11.0/24<br />
扫描，结果我的arp表里就有那个网段所有机器的mac，将所有信息复制至/etc/ethers文件<br />
2、3、4同上<br />
--EOF--<br />
OK,我就是这么做的但效果真的一般，将就点喽。想办法在什么时候重装一下系统喽，也只能这样了，现在alexa和PR都降低了。不能再被这种事情折腾了。</p>]]></description>
			<link>http://www.neatstudio.com/show-1196-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-04-08 22:43</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1191-1.shtml</guid>
			<title>用.htaccess缓存图片 提高博客运行效率</title>
			<author>gouki</author>
			<description><![CDATA[<p>这是一篇来自chinaz.com的文章，因为我有几个博客都采用了wordpress，而且我的<font><a href="http://g.52cd.net/"><font style="color: red;">手机博客</font></a></font>上面有大量的图片，因此，Cache图片就成了重中之重的事情。看到这篇文章我就很开心了。很方便的使缓存过期时间设在了一个月后。很方便，用的也很爽。</p>
<p>原文如下：</p>
<p>WordPress博客里大量的图片会使页面加载速度变得缓慢。 此时访问者需要用更多时间才能打开一个页面。  不过我们可以通过缓存图片来解决这个问题。 当页面第一次被加载时，将所有图片存放在浏览器的缓存池里。  之后访问者再加载该页面时，浏览器就可以从浏览器缓存中获取图片，从而减少页面加载时间。</p>
<p>对Apache服务器上的WordPress博客/网站，可以通过编辑根目录下的.htaccess文件来激活图片缓存功能。  浏览器能够简单读取.htaccess文件的缓存控制头，而缓存头会要求浏览器将图片或其它任何媒体保留2周时间（或者更久），这样浏览器就能够随时调用 图片，直到图片过期。 两周后浏览器重新将过期的图片存入缓存。 万一浏览器缓存被清空，浏览器会从缓存中重新加载图片或其它媒体。</p>
<p>下面就是对如何在WordPress博客/网站上激活图片缓存的过程详解。</p>
<p>如果你希望提高网站的运行效率，就应该启用网络服务器上的图片缓存功能。 详细步骤如下：</p>
<p>注意：做任何改动前请先备份网站数据域.htaccess文件。</p>
<p>1. （在FTP中）打开根目录下的.htaccess文件</p>
<p>2. 在.htaccess文件中加入如下代码：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>#&nbsp;Image&nbsp;and&nbsp;Flash&nbsp;content&nbsp;Caching&nbsp;for&nbsp;One&nbsp;Month&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">FilesMatch</span><span>&nbsp;&quot;.(flv|gif|jpg|jpeg|png|ico|swf)$&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>Header&nbsp;set&nbsp;Cache-Control&nbsp;&quot;<span class="attribute">max-age</span><span>=</span><span class="attribute-value">2592000</span><span>&quot;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">FilesMatch</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>3. 编辑完毕后保存文件。 代码中&ldquo;max-age&rdquo;参数的值为2592000（秒），因此图片缓存和Flash内容缓存在浏览器中保留一个月。</p>
<p>如果这个方法能够奏效，你的网站访问速度将会有很大改善。</p>
<p>原文：<a href="http://www.themepremium.com/improve-performance-by-image-caching-of-wordpress-blog-using-htaccess-trick/">Improve  Performance by Image Caching of Wordpress Blog using htaccess trick</a>（<a target="_blank" href="http://www.wordpress.la/improve-performance-by-image-caching.html">译 文</a>）</p>
<p>我的文章来自于：http://www.chinaz.com/Webbiz/Exp/0406110L02010.html</p>
<p>很明显的可以看出是针对哪一类的文件进行了header缓存。如果不经常更改，相信这样是足够了。</p>]]></description>
			<link>http://www.neatstudio.com/show-1191-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-04-06 17:27</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1190-1.shtml</guid>
			<title>Nginx下zend framework的设置</title>
			<author>gouki</author>
			<description><![CDATA[<p>由于zf自带的工具，生成的项目都是基于apache的，而nginx和apache的htaccess（即Rewriter规则）又不一样，而我自己又不会配置nginx，因此看到这个文章就复制以下，以备以后采用。</p>
<p>在Linux环境下增加一段虚拟服务器的设置，设置nginx.conf如下<br />
<code><br />
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>server&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;80;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;audit.local;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;/app/audit/public;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;/app/audit/logs/audit.access.log&nbsp;main;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_log&nbsp;&nbsp;&nbsp;/app/audit/logs/audit.error.log;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/&nbsp;{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;index.php;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;If&nbsp;file&nbsp;not&nbsp;found,&nbsp;redirect&nbsp;to&nbsp;Zend&nbsp;handling,&nbsp;we&nbsp;can&nbsp;remove&nbsp;the&nbsp;(if)&nbsp;here&nbsp;and&nbsp;go&nbsp;directly&nbsp;rewrite&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!-f&nbsp;$request_filename){&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rewrite&nbsp;^/(.+)$&nbsp;/index.php?$1&amp;&nbsp;last;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;~*&nbsp;^.+\.(js|ico|gif|jpg|jpeg|pdf|png|css)$&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;&nbsp;off;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7d;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;~&nbsp;.*\.php?$&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass&nbsp;&nbsp;&nbsp;127.0.0.1:36;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_index&nbsp;&nbsp;index.php;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp;SCRIPT_FILENAME&nbsp;&nbsp;$document_root$fastcgi_script_name;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_params;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp;404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://audit.local/error;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
原文网址：http://www.jefflei.com/post/34.html<br />
</code></p>]]></description>
			<link>http://www.neatstudio.com/show-1190-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-04-06 08:59</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1135-1.shtml</guid>
			<title>在 Ubuntu 9.10 Server 上安装 Nginx 0.8.34</title>
			<author>gouki</author>
			<description><![CDATA[<p>本文的内容对我来说或许可以有用，因为我的VPS用的就是9.10，用默认的apache好象效率并不高，所以。。。真的可以参考一下。</p>
<div class="entry-body">
<div>
<div class="item-body">
<div>
<p>Nginx 在 3 月 3 日放出了 0.8.34 这个开发版。张宴也随即更新了《<a href="http://blog.s135.com/nginx_php_v6/" target="_blank">Nginx 0.8.x + PHP 5.2.13（FastCGI）搭建胜过Apache十倍的Web服务器</a>》 到第六版。不过，他写的记录是针对 CentOS、Redhat 等 rpm 包管理的服务器。由于习惯了 debian 系列的服务器，特别是用惯了 ubuntu 服务器，在这里特别做一下 Ubuntu 9.10 下的安装笔记。其他基于 deb 包管理的发行版也类似。</p>
<p>首先，为了编译 Nginx，应在新装好的 Ubuntu server 环境下安装如下软件包：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">sudo</span> <span style="color: rgb(194, 12, 185); font-weight: bold;">apt-get</span> <span style="color: rgb(194, 12, 185); font-weight: bold;">install</span> build-essential libpcre3-dev libssl-dev libxslt-dev libgd2-xpm-dev libgeoip-dev</pre>
</div>
</div>
<p>然后下载 0.8.34 版本的 Nginx：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">wget</span> http:<span style="color: rgb(0, 0, 0); font-weight: bold;">//</span>www.nginx.org<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>download<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>nginx-0.8.34.tar.gz</pre>
</div>
</div>
<p>解压：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">tar</span> xvzf nginx-0.8.34.tar.gz</pre>
</div>
</div>
<p>下载 upstream fair 模块。upstream fair 是比内建的负载均衡更加智能的负载均衡模块。它采用的不是内建负载均衡使用的轮换的均衡算法，而是可以根据页面大小、加载时间长短智能的进行负载均衡。</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">wget</span> http:<span style="color: rgb(0, 0, 0); font-weight: bold;">//</span>github.com<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>gnosek<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>nginx-upstream-fair<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>tarball<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>master</pre>
</div>
</div>
<p>解压：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">tar</span> xvzf gnosek-nginx-upstream-fair-2131c73.tar.gz</pre>
</div>
</div>
<p>然后进入 nginx 源码目录执行 configure 配置编译选项。下面是我所使用的配置：</p>
<div><br />
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>./configure&nbsp;</span><span class="attribute">--conf-path</span><span>=/etc/nginx/nginx.conf&nbsp;\</span><span class="attribute">--error-log-path</span><span>=/var/log/nginx/error.log&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">--pid-path</span><span>=/var/run/nginx.pid&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">--lock-path</span><span>=/var/lock/nginx.lock&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">--http-log-path</span><span>=/var/log/nginx/access.log&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">--http-client-body-temp-path</span><span>=/var/lib/nginx/body&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">--http-proxy-temp-path</span><span>=/var/lib/nginx/proxy&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">--http-fastcgi-temp-path</span><span>=/var/lib/nginx/fastcgi&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class=""><span>--with-debug&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>--with-http_stub_status_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>--with-http_flv_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>--with-http_ssl_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>--with-http_dav_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>--with-http_gzip_static_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>--with-mail&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>--with-mail_ssl_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>--with-ipv6&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>--with-http_realip_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>--with-http_geoip_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>--with-http_xslt_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>--with-http_image_filter_module&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="attribute">--with-sha1</span><span>=/usr/include/openssl&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">--with-md5</span><span>=/usr/include/openssl&nbsp;\&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">--add-module</span><span>=/home/mikespook/gnosek-nginx-upstream-fair-2131c73&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</div>
<p>这个配置来自于 Jeff Waugh 的 PPA 中的 nginx 0.8.34 编译选项。配置、lock、pid 等文件的位置都是按照 ubuntu 系统惯例设置的。需要注意的是 &ndash;add-module 指向的是 upstream fair 的解压缩目录的绝对路径。这样就可以将 upstream fair 编译进 nginx。</p>
<p>然后编译并安装：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">make</span> <span style="color: rgb(0, 0, 0); font-weight: bold;">&amp;&amp;</span> <span style="color: rgb(194, 12, 185); font-weight: bold;">make</span> <span style="color: rgb(194, 12, 185); font-weight: bold;">install</span></pre>
</div>
</div>
<p>nginx 就安装成功了。目录 /var/lib/nginx 需要手工建立，否则启动 nginx 会报错：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(122, 8, 116); font-weight: bold;">[</span>emerg<span style="color: rgb(122, 8, 116); font-weight: bold;">]</span>: <span style="color: rgb(194, 12, 185); font-weight: bold;">mkdir</span><span style="color: rgb(122, 8, 116); font-weight: bold;">(</span><span style="color: rgb(122, 8, 116); font-weight: bold;">)</span> <span style="color: rgb(255, 0, 0);">&quot;/var/lib/nginx/body&quot;</span> failed <span style="color: rgb(122, 8, 116); font-weight: bold;">(</span><span style="color: rgb(0, 0, 0);">2</span>: No such <span style="color: rgb(194, 12, 185); font-weight: bold;">file</span> or directory<span style="color: rgb(122, 8, 116); font-weight: bold;">)</span></pre>
</div>
</div>
<p>建立shell 脚本 /etc/init.d/nginx：</p>
<div>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>#!&nbsp;/bin/sh&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>###&nbsp;BEGIN&nbsp;INIT&nbsp;INFO&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;Provides:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;Required-Start:&nbsp;&nbsp;&nbsp;&nbsp;$all&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;Required-Stop:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$all&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;Default-Start:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;Default-Stop:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;1&nbsp;6&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;Short-Description:&nbsp;starts&nbsp;the&nbsp;nginx&nbsp;web&nbsp;server&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;starts&nbsp;nginx&nbsp;using&nbsp;start-stop-daemon&nbsp;&nbsp;</span></li>
    <li class="alt"><span>###&nbsp;END&nbsp;INIT&nbsp;INFO&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="attribute">PATH</span><span>=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">DAEMON</span><span>=/usr/local/nginx/sbin/nginx&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">NAME</span><span>=</span><span class="attribute-value">nginx</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">DESC</span><span>=</span><span class="attribute-value">nginx</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>test&nbsp;-x&nbsp;$DAEMON&nbsp;||&nbsp;exit&nbsp;0&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;Include&nbsp;nginx&nbsp;defaults&nbsp;if&nbsp;available&nbsp;&nbsp;</span></li>
    <li class="alt"><span>if&nbsp;[&nbsp;-f&nbsp;/etc/default/nginx&nbsp;]&nbsp;;&nbsp;then&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;/etc/default/nginx&nbsp;&nbsp;</span></li>
    <li class="alt"><span>fi&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>set&nbsp;-e&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>case&nbsp;&quot;$1&quot;&nbsp;in&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;start)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;-n&nbsp;&quot;Starting&nbsp;$DESC:&nbsp;&quot;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start-stop-daemon&nbsp;--start&nbsp;--quiet&nbsp;--pidfile&nbsp;/var/run/$NAME.pid&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--exec&nbsp;$DAEMON&nbsp;--&nbsp;$DAEMON_OPTS&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;$NAME.&quot;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;stop)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;-n&nbsp;&quot;Stopping&nbsp;$DESC:&nbsp;&quot;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start-stop-daemon&nbsp;--stop&nbsp;--quiet&nbsp;--pidfile&nbsp;/var/run/$NAME.pid&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--exec&nbsp;$DAEMON&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;$NAME.&quot;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;restart|force-reload)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;-n&nbsp;&quot;Restarting&nbsp;$DESC:&nbsp;&quot;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start-stop-daemon&nbsp;--stop&nbsp;--quiet&nbsp;--pidfile&nbsp;\&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/run/$NAME.pid&nbsp;--exec&nbsp;$DAEMON&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;1&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start-stop-daemon&nbsp;--start&nbsp;--quiet&nbsp;--pidfile&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/run/$NAME.pid&nbsp;--exec&nbsp;$DAEMON&nbsp;--&nbsp;$DAEMON_OPTS&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;$NAME.&quot;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;reload)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;-n&nbsp;&quot;Reloading&nbsp;$DESC&nbsp;configuration:&nbsp;&quot;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start-stop-daemon&nbsp;--stop&nbsp;--signal&nbsp;HUP&nbsp;--quiet&nbsp;--pidfile&nbsp;/var/run/$NAME.pid&nbsp;\&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--exec&nbsp;$DAEMON&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;$NAME.&quot;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;*)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">N</span><span>=/etc/init.d/$NAME&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;Usage:&nbsp;$N&nbsp;{start|stop|restart|force-reload}&quot;&nbsp;<span class="tag">&gt;</span><span>&amp;2&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;</span></li>
    <li class=""><span>esac&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>exit&nbsp;0&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p>并执行命令：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">sudo</span> update-rc.d <span style="color: rgb(102, 0, 51);">-f</span> nginx defaults</pre>
</div>
</div>
<p>更新 rc 后，即可使用：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(194, 12, 185); font-weight: bold;">sudo</span> <span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>etc<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>init.d<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>nginx start<br /><span style="color: rgb(194, 12, 185); font-weight: bold;">sudo</span> <span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>etc<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>init.d<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>nginx stop<br /><span style="color: rgb(194, 12, 185); font-weight: bold;">sudo</span> <span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>etc<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>init.d<span style="color: rgb(0, 0, 0); font-weight: bold;">/</span>nginx restart</pre>
</div>
</div>
<p>控制 nginx 启动。<br />
其他配置不再累述，张宴的 blog 里写得非常清晰。只补充一下 upstream fair 的使用，只要在 nginx 配置文件的 upstream 段加入 fair 开关即可：</p>
<div>
<div>
<pre style="font-family: monospace;">upstream backend <span style="color: rgb(122, 8, 116); font-weight: bold;">{</span><br />    server server1;<br />    server server2;<br />    fair;<br /><span style="color: rgb(122, 8, 116); font-weight: bold;">}</span></pre>
</div>
</div>
<p>当然，ubuntu 还可以用上面提到的 Jeff 的 ppa 源进行安装：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: rgb(122, 8, 116); font-weight: bold;"><div class="codeText"><div class="codeHead">XML/HTML代码</div><ol start="1" class="dp-xml"><li class="alt"><span><span>echo&nbsp;&quot;deb&nbsp;http://ppa.launchpad.net/jdub/devel/ubuntu&nbsp;hardy&nbsp;main&quot;&nbsp;</span><span class="tag">&gt;</span><span class="tag">&gt;</span><span>&nbsp;/etc/apt/sources.list&nbsp;&nbsp;</span></span></li><li class=""><span>apt-key&nbsp;adv&nbsp;--keyserver&nbsp;keyserver.ubuntu.com&nbsp;--recv-keys&nbsp;E9EEF4A1&nbsp;&nbsp;</span></li><li class="alt"><span>apt-get&nbsp;update&nbsp;&nbsp;</span></li><li class=""><span>apt-get&nbsp;install&nbsp;nginx&nbsp;&nbsp;</span></li></ol></div></span></pre>
</div>
</div>
<p>简单快捷。</p>
<p>原文来自：http://www.mikespook.com/index.php/archives/483，做个参考 。。。。</p>
</div>
</div>
</div>
</div>]]></description>
			<link>http://www.neatstudio.com/show-1135-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-03-07 20:45</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1109-1.shtml</guid>
			<title>Linux 上的free命令详解</title>
			<author>gouki</author>
			<description><![CDATA[<p>看到有介绍，当然要了解一下详细情况了。毕竟，我的htc g2当初就是靠这个玩意简单的来判断是沃达丰版还是HTC版的【即32A还是32B】。</p>
<p>解释一下Linux上free命令的输出。</p>
<p>　　下面是free的运行结果，一共有4行。为了方便说明，我们加上了列号。这样可以把free的输出看成一个二维数组FO(Free  Output)。例如：</p>
<ul>
    <li>FO[2][1] = 999212</li>
    <li>FO[3][2] = 305404</li>
</ul>
<div class="cnblogs_code">
<pre><div><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: rgb(0, 128, 128);">                          1          2          3         4         5           6<br />1</span> <span style="color: rgb(0, 0, 0);">                      total       used       free     shared    buffers     cached<br /></span><span style="color: rgb(0, 128, 128);">2</span> <span style="color: rgb(0, 0, 0);">Mem</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">                  </span><span style="color: rgb(128, 0, 0);">999212</span><span style="color: rgb(0, 0, 0);">     </span><span style="color: rgb(128, 0, 0);">967476</span><span style="color: rgb(0, 0, 0);">     </span><span style="color: rgb(128, 0, 0);">31736</span><span style="color: rgb(0, 0, 0);">          </span><span style="color: rgb(128, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(128, 0, 0);">50668</span><span style="color: rgb(0, 0, 0);">     </span><span style="color: rgb(128, 0, 0);">223000</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">3</span> <span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">-/+</span><span style="color: rgb(0, 0, 0);"> buffers</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">cache</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">               </span><span style="color: rgb(128, 0, 0);">693808</span><span style="color: rgb(0, 0, 0);">     </span><span style="color: rgb(128, 0, 0);">305404</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">4</span> <span style="color: rgb(0, 0, 0);">Swap</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(128, 0, 0);">           2048276</span><span style="color: rgb(0, 0, 0);">   </span><span style="color: rgb(128, 0, 0);"> 154524</span><span style="color: rgb(0, 0, 0);">     </span><span style="color: rgb(128, 0, 0);">1893752</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 128, 128);">&nbsp;</span> <span style="color: rgb(0, 0, 0);">&nbsp;</span></div></pre>
</div>
<p>　　free的输出一共有四行，第四行为交换区的信息，分别是交换的总量（total），使用量（used）和有多少空闲的交换区（free），这 个比较清楚，不说太多。</p>
<p>　　free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量（free），第二列是使用量（free），第三 列是可用量（free）。第一行的输出时从操作系统（OS）来看的。也就是说，从OS的角度来看，计算机上一共有:</p>
<ul>
    <li>999212KB（缺省时free的单位为KB）物理内存，即FO[2][1]；</li>
    <li>在这些物理内存中有967476KB（即FO[2][2]）被使用了；</li>
    <li>还用31736KB（即FO[2][3]）是可用的；</li>
</ul>
<p>这里得到第一个等式：</p>
<ul>
    <li>FO[2][1] = FO[2][2] + FO[2][3]</li>
</ul>
<p>FO[2][4]表示被几个进程共享的内存的，现在已经deprecated，其值总是0（当然在一些系统上也可能不是0，主要取决于free命令 是怎么实现的）。</p>
<p>FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS  cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的，看老外的洋文:</p>
<ul>
    <li><em><span style="font-size: x-small;">A buffer is something that has  yet to be &quot;written&quot; to disk. <br />
    </span></em></li>
    <li><em><span style="font-size: x-small;">A cache is something that has  been &quot;read&quot; from the disk and stored for later use.</span></em></li>
</ul>
<p>也就是说buffer是用于存放要输出到disk（块设备）的数据的，而cache是存放从disk上读出的数据。这二者是为了提高IO性能的，并 由OS管理。</p>
<p>Linux和其他成熟的操作系统（例如windows），为了提高IO  read的性能，总是要多cache一些数据，这也就是为什么FO[2][6]（cached  memory）比较大，而FO[2][3]比较小的原因。我们可以做一个简单的测试:</p>
<ol>
    <li>释放掉被系统cache占用的数据；
    <div class="cnblogs_code">
    <pre><div><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: rgb(0, 0, 0);">echo </span><span style="color: rgb(128, 0, 0);">3</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">&gt;/</span><span style="color: rgb(0, 0, 0);">proc</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">sys</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">vm</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">drop_caches</span></div></pre>
    </div>
    <p>&nbsp;</p>
    </li>
    <li>读一个大文件，并记录时间；</li>
    <li>关闭该文件；</li>
    <li>重读这个大文件，并记录时间；</li>
</ol>
<p>第二次读应该比第一次快很多。原来我做过一个BerkeleyDB的读操作，大概要读5G的文件，几千万条记录。在我的环境上，第二次读比第一次大 概可以快9倍左右。</p>
<p>&nbsp;</p>
<p>　　free输出的第二行是从一个应用程序的角度看系统内存的使用情况。</p>
<ul>
    <li>对于FO[3][2]，即-<span style="color: rgb(0, 0, 0);">buffers</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">cache， 表示一个应用程序认为系统被用掉多少内存；</span></li>
    <li>对于FO[3][3]，即+<span style="color: rgb(0, 0, 0);">buffers</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">cache， 表示一个应用程序认为系统还有多少内存；</span></li>
</ul>
<p>&nbsp;</p>
<p>因为被系统cache和buffer占用的内存可以被快速回收，所以通常FO[3][3]比FO[2][3]会大很多。</p>
<p>这里还用两个等式：</p>
<ul>
    <li>FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]</li>
    <li>FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]</li>
</ul>
<p>这二者都不难理解。</p>
<p>　　free命令由procps.*.rpm提供（在Redhat系列的OS上）。free命令的所有输出值都是从/proc/meminfo中读 出的。</p>
<p>在系统上可能有meminfo(2)这个函数，它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个 函数。可以下载一个procps的tar包看看具体实现，现在最新版式3.2.8。</p>
<p>--EOF--</p>
<p>原文来自：http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html，作者就是coldplayerest</p>]]></description>
			<link>http://www.neatstudio.com/show-1109-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-02-21 13:24</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1108-1.shtml</guid>
			<title>Ubuntu 游戏安装设置总篇</title>
			<author>gouki</author>
			<description><![CDATA[<p>如今，游戏这玩意离我有点远了。当然并不是说我不玩，而是说，现在凡是要钱的游戏我几乎都不玩了。或许少了很多乐趣，但相对的，我并不算是沉迷于其中了。</p>
<p>初中，中专那些年，我是算深深的迷在其中，浪费了不少钱，现在不花钱也算是一种补偿吧？初中时代羡慕别人有MD，SFC，中专时代羡慕的就是PS，SS和当时昙花一现的3dO了。直到后面我自己买了台DC后，对PS2，PS3之类的兴趣反而小了。</p>
<p>00年开始有电脑后，就对一些模拟器发生了兴趣，比如那个bleem!，就挺不错，而且还有FOR DC版的。那段时间也算对PS时代回忆了一下。但回忆不深。再后来。bleem!好象被SONY打压过一次之后就不行了，后来还出了一个v什么的，（忘 了）这个epsxe在最后就是剩蛋老人了，想不到到现在还活着。。玩PS时，仅对两个游戏有点兴趣，主要是因为没有玩完他们，即使用了模拟器也没有玩全。 他们就是：前线任务III和寄生前夜I，没有玩全有很多原因，前线任务是后面买不到CD了。也下载不到。寄生前夜，我在PSP上也玩了一下，但居然CD2 那段读不出。郁闷。。。后面我也就放弃了。</p>
<p>看到介绍在UBUNTU下安装这些模拟器的教程，当然是忍不住要复制过来，为以后使用ubuntu的时候做好准备。OK，看全文吧。有点长，懒得编排了。</p><br /><br /><a href="http://www.neatstudio.com/show-1108-1.shtml" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.neatstudio.com/show-1108-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-02-20 11:42</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1071-1.shtml</guid>
			<title>单网卡 Ubuntu 服务器打造 PPTP Server</title>
			<author>gouki</author>
			<description><![CDATA[<p>虽然转载，但并未成功，只是为了防止以后再也找不到类似资料做个备份。<br />
<br />
其实作者写的挺详细了，只是我明明设置了RemoteIP，但却无法正确的获取。不知道是否因为是VPS的关系。当然也或许我太笨吧。先转了再说<br />
<br />
原文如下，<a href="http://blog.istef.info/2008/10/17/ubuntu-pptp-server/trackback/">如看原文点击这里</a>：</p>
<p>自从实验室放了台 Linux 服务器后，可玩的东西就越来越多了。虽然这台服务器主要的工作是 Web Server，但鉴于我们那小站压力非常之小，服务器资源绝大多数还是浪费着，所以让它多干些活是个不错的选择。实验室的内部网络中有不少非常有用的资 源，例如科研用的文献资料，个人的实验数据等等，这些内容一旦离开实验室就不那么容易访问到了。解决这个问题最好的办法就是 VPN。在 Ubuntu 上搭建 VPN 服务器的方法非常多，比较著名的有 PPTP, L2TP/IPSec 和 OpenVPN。这三种方式中后两者的安全性比较好，但配置较麻烦。其中 OpenVPN 在 Windows/Mac 平台上还需要额外的客户端。而 L2TP/IPSec 方式虽然比较好，但我配置后，虽然 Windows 和 Linux 用户没有问题，但 Mac/iPhone 却始终无法连上，所以暂时删掉了，日后搞清楚是什么问题再换到这种方式。</p>
<p>只剩下 PPTP 了。事实上 PPTP 是这三者中配置最容易的方式，而且由于 Windows/Mac 系统中都内建相应的客户端，使用起来非常方便。下面我就简单写写我的安装过程，希望对需要的朋友有用。当然如果您有什么高见，也欢迎您提出。</p>
<p>首先，我所有的操作都是在<a href="http://blog.istef.info/2008/10/02/build-a-linux-light-server/">之前文章中介绍的 Ubuntu 8.04 Server 系统</a>中操作的，如果您的系统和我的不一样，请参考之前的<a href="http://blog.istef.info/2008/10/02/setup-ssh-server-on-ubuntu-server/">两篇文章</a>。我的服务器环境是单网卡 eth0。</p>
<p>在 Ubuntu 中建立 pptp server 需要的软件包为 pptpd，用 apt-get 即可安装：</p>
<blockquote>
<pre>sudo apt-get <abbr title="Thanks zz!">install</abbr> pptpd</pre>
</blockquote>
<p>系统会自动解决依赖关系，安装好后，需要进行一番设置。首先编辑 /etc/pptpd.conf</p>
<blockquote>
<pre>sudo nano /etc/pptpd.conf</pre>
</blockquote>
<p>去掉文件最末端的 localip 和 remoteip 两个参数的注释，并进行相应修改。这里，localip 是 VPN 连通后服务器的 ip 地址，而 remoteip 则是客户端的可分配 ip 地址。下面是我的配置：</p>
<blockquote>
<pre>localip 10.100.0.1<br />remoteip 10.100.0.2-10</pre>
</blockquote>
<p>编辑好这个文件后，我们需要编辑 /etc/ppp/pptpd-options 文件，还是用 nano 编辑，命令这里就不写了。这里绝大多数参数只需维持原来的默认值即可，我们只需要改变其中的 ms-dns 选项，为 VPN 客户端指派 DNS 服务器地址：</p>
<blockquote>
<pre>ms-dns 202.113.16.10<br />ms-dns 208.67.222.222</pre>
</blockquote>
<p>修改 /etc/ppp/chap-secrets 文件，这里面存放着 VPN 的用户名和密码，根据你的实际情况填写即可。如文件中注释所示，第一列是用户名，第二列是服务器名（默认写 pptpd 即可，如果在 pptpd-options 文件中更改过的话，注意这里保持一致），第三列是密码，第四列是 IP 限制（不做限制写 * 即可）。这里<a href="http://blog.istef.info/">我</a>就不贴我的配置了 <img src="http://blog.istef.info/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>全部搞定后，我们需要重启 pptpd 服务使新配置生效：</p>
<blockquote>
<pre>sudo /etc/init.d/pptpd restart</pre>
</blockquote>
<p>找一台 Windows 电脑，新建个 VPN 链接，地址填服务器的 IP（或域名），用户名密码填刚才设置好的，域那项空着（如果你在 pptpd-options 中设置了，这里就保持一致），点连接就可以了。正常情况下您应该能够建立与服务器的 VPN 链接了。</p>
<p>建立连接之后，您会发现除了可以访问服务器的资源，其余内外和互联网的内容均无法访问。如果需要访问这些内容的话，我们还需要进一步设置：</p>
<p>首先，开启 ipv4 forward。方法是，修改 /etc/sysctl.conf，找到类似下面的行并取消它们的注释：</p>
<blockquote>
<pre>net.ipv4.ip_forward=1</pre>
</blockquote>
<p>然后使新配置生效：</p>
<blockquote>
<pre>sudo sysctl -p</pre>
</blockquote>
<p>有些时候，经过这样设置，客户端机器就可以上网了（我在虚拟机上这样操作后就可以了）。但我在实验室的服务器上这样操作后仍然无法访问网络，这样我们就需要建立一个 NAT。这里我们使用强大的 iptables 来建立 NAT。首先，先安装 iptables：</p>
<blockquote>
<pre>sudo apt-get intall iptables</pre>
</blockquote>
<p>装好后，我们向 nat 表中加入一条规则：</p>
<blockquote>
<pre>sudo iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE</pre>
</blockquote>
<p>这样操作后，客户端机器应该就可以上网了。</p>
<p>但是，只是这样，iptables 的规则会在下次重启时被清除，所以<a href="http://yangliu.name/">我们</a>还需要把它保存下来，方法是使用 iptables-save 命令：</p>
<blockquote>
<pre>sudo iptables-save &gt; /etc/iptables-rules</pre>
</blockquote>
<p>然后修改 /etc/network/interfaces 文件，找到 eth0 那一节，在对 eth0 的设置最末尾加上下面这句：</p>
<blockquote>
<pre>pre-up iptables-restore &lt; /etc/iptables-rules</pre>
</blockquote>
<p>这样当网卡 eth0 被加载的时候就会自动载入我们预先用 iptables-save 保存下的配置。</p>
<p>到此，一个 VPN Server/Gateway 基本就算架设完毕。当然，也许你按照我的方法做了，还是无法成功，那么下面总结一些我碰到的问题和解决方案：</p>
<h3 style="padding-left: 30px;">无法建立 VPN 连接</h3>
<p style="padding-left: 30px;">安装好 pptpd 并设置后，客户端还是无法建立到服务器的连接。造成的原因可能有以下几种：</p>
<blockquote>
<ol>
    <li>服务器端的防火墙设置：PPTP 服务需要使用 1723(tcp) 端口和 gre 协议，因此请确保您的防火墙设置允许这两者通行。</li>
    <li>如果服务器在路由器后面，请确保路由器上做好相应的设置和端口转发。</li>
    <li>如果服务器在路由器后面，那么请确保你的服务器支持 VPN Passthrough。</li>
    <li>如果客户端在路由器后面，那么客户端所使用的路由器也必须支持 VPN Passthrough。其实市面上稍微好点的路由器都是支持 VPN Passthrough 的，当然也不排除那些最最最便宜的便宜货确实不支持。当然，如果你的路由器可以刷 DD-Wrt 的话就刷上吧，DD-Wrt 是支持的。</li>
</ol>
</blockquote> <blockquote>
<h3>能建立链接，但&ldquo;几乎&rdquo;无法访问互联网</h3>
</blockquote> <blockquote>
<p>这里我使用&ldquo;<a href="http://hi2.me/">几乎</a>&rdquo;这个词，是因为并不是完全不能访问互联网。 症状为，打开 Google 搜索没问题，但其它网站均无法打开；SSH 可用，但 scp 不行；ftp 能握手，但传不了文件。我就遇到了这种情况，仔细 Google 后发现原来是 MTU 的问题，用 ping 探测了一下果然是包过大了。知道问题就好办了，我们可以通过 iptables 来修正这一问题。具体原理就不讲了，需要的自己 Google。这里只说解决方案，在 filter 表中添加下面的规则：</p>
</blockquote> <blockquote style="padding-left: 30px;">
<pre>sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN<br />-j TCPMSS --set-mss 1200</pre>
</blockquote> <blockquote>
<p>上面规则中的 1200 可以根据你的实际情况修改，为了保证最好的网络性能，这个值应该不断修改，直至能保证网络正常使用情况下的最大值。</p>
</blockquote>
<p>好了，至此，一台单网卡 pptp-server 就算完成了。</p>
<p>----EOF---</p>
<p>后记：好象有很多类似的文章，前面几段都差不多的。</p>
<p>比如这里：</p>
<p>1、http://blog.sina.com.cn/s/blog_49cd61e70100cbph.html</p>
<p>2、http://hi.baidu.com/wangshuxun25/blog/item/b37779f04deae4a7a50f5231.html ，这个是用的shorewall防火墙，上面两篇都是用iptables的</p>
<p><strong>继续后记：</strong></p>
<p>已经可以了。哈哈。还是我没有配置好的原因。oh yeah ...</p>]]></description>
			<link>http://www.neatstudio.com/show-1071-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2010-01-18 11:36</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1038-1.shtml</guid>
			<title>【笔记】UBUNTU下安装zendoptimizer</title>
			<author>gouki</author>
			<description><![CDATA[<p>我用的vps是<a href="https://rashost.com/client/aff.php?aff=269">rashost</a>的，装的是64位的ubuntu，9.10哦，最新版的。朋友在上面装个程序，结果发现无法运行。才想起来还没有安装ZendOptimizer。<br />
<br />
找了一下ubuntu下如何安装的，却又搜索到Rashost的官方介绍。。。打开看了一下，没排过版。汗死。<br />
原文内容如下：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>Zend&nbsp;Optimizer是由PHP核心引擎&ldquo;Zend&rdquo;创建者Zend技术公司所开的免费PHP优化软件。据Zend公司透露使用这个软件某些情况下至少可以提高性能30%以上。今天我在安装了Ubuntu&nbsp;Hardy的VPS上配置了最新的ZendOp。过程记录如下：按照正常流程，在官方网站下载Zend&nbsp;Optimizer是需要注册用户登录之后才能下载的。下载一次后发现其实匿名用户也能下载，用下面这个URL即可：&nbsp;<a href="http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz">http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glib...</a>&nbsp;在安装Zend&nbsp;Optimizer之前需要先把apache,php安装好：&nbsp;apt-get&nbsp;install&nbsp;libapache2-mod-php&nbsp;然后在/var/www/下创建index.php：&nbsp;echo&nbsp;&quot;&quot;&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;/var/www/index.php&nbsp;然后用浏览器访问VPS，在首页里面搜索不到Zend&nbsp;Optimizer的字样.安装完成后应该能够搜索到Zend&nbsp;Optimizer才对。&nbsp;tar&nbsp;zxf&nbsp;ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz&nbsp;cd&nbsp;ZendOptimizer-3.3.3-linux-glibc23-i386&nbsp;./install.sh&nbsp;然后安装程序会询问几个路径,一个个回答即可完成安装。&nbsp;安装完成，重启apache，然后再访问首页，应该能搜索到Zend&nbsp;Optimizer的字样，说明安装成功了，接下来就可以开始测试性能了。&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>不过，由于我装的是64位的，就没有办法这样安装了。所以我去官方下载了64位的ZendOptimizer。并解压到服务器上。却发现，根本没有上文说的install.sh<br />
打开readme看了一下，才发现，原来在linux下面，居然只需要加一行代码就行了</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>[Zend]&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">zend_extension</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">&quot;/xxx/xxx/ZendOptimizer.so&quot;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>当然，这或许是3.3.9独有的安装方式，反正而不需象windows那样先设置 zend_extenstion_ts，再设置zend_extension_manager.optimizer_ts了<br />
<br />
添加了这一行后，运行/etc/init.d/apache2 restart ,再新建一个phpinfo的文件，发现里面已经有了zend optimizer的信息了。<br />
<br />
最后提供一下64位的zendoptimizer的下载地址：<a href="http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz">http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz</a></p>]]></description>
			<link>http://www.neatstudio.com/show-1038-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-12-24 14:10</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1037-1.shtml</guid>
			<title>【笔记】ubuntu安装AMP后的小问题等</title>
			<author>gouki</author>
			<description><![CDATA[<p>我曾经写过一篇很简单的笔记，是讲如何安装AMP的，当然很方便。。。，那篇文章在：http://www.neatstudio.com/show-522-1.shtml<br />
<br />
今天我在使用了VPS后，也装了这些配置。但最后却仍然报错：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>Could&nbsp;not&nbsp;reliably&nbsp;determine&nbsp;the&nbsp;server's&nbsp;fully&nbsp;qualified&nbsp;domain&nbsp;name,&nbsp;using&nbsp;127.0.0.1&nbsp;for&nbsp;ServerName&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>现在我把我的步骤列出来。并列出解决方法<br />
<br />
1、到/var/www/下新建一个目录，例如我的 sbphp.com，新目录的路径则为 /var/www/sbphp.com/<br />
2、到/etc/apache2/sites-available/目录下，新建一个文件，名为sbphp.com,内容如下：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">VirtualHost</span><span>&nbsp;*:80</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>ServerAdmin&nbsp;xxx@xxx.com&nbsp;&nbsp;</span></li>
    <li class="alt"><span>ServerName&nbsp;sbphp.com&nbsp;&nbsp;</span></li>
    <li class=""><span>ServerAlias&nbsp;www.sbphp.com&nbsp;&nbsp;</span></li>
    <li class="alt"><span>DocumentRoot&nbsp;/var/www/sbphp.com/&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">Directory</span><span>&nbsp;/var/www/sbphp.com/&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>#这行是不显示列表&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>Options&nbsp;-Indexes&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Order&nbsp;Deny,Allow&nbsp;&nbsp;</span></li>
    <li class=""><span>Allow&nbsp;from&nbsp;all&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">Directory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">VirtualHost</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>3、运行：a2ensite sbphp.com<br />
4、然后系统会提示你重载一下apache，命令为 /etc/init.d/apache2 reload<br />
<br />
于是乎就报上面的错了。这个问题的主要原因是没有定义ServerName，也就是没有定义默认的ServerName<br />
5、到etc目录下建立一个hosts文件，内容为：127.0.0.1 localhost<br />
6、回到apache2的目录，/etc/apache2/ ，打开httpd.conf,加上一行 ServerName 127.0.0.1 或者是你的服务器对应的IP地址<br />
<br />
OK，再运行 /etc/init.d/apache2 reload ，不报错了吧。。</p>
<p>【备注】手工安装lamp的朋友可以看这里：http://hi.baidu.com/javatown/blog/item/c870547e956eb63d0dd7da3c.html</p>]]></description>
			<link>http://www.neatstudio.com/show-1037-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-12-24 12:30</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1033-1.shtml</guid>
			<title>Tiny Core Linux 2.7 发布</title>
			<author>gouki</author>
			<description><![CDATA[<p>看这个名字就知道这个linux很小。事实上，也只有10M左右。不过我看中的是他的小，如果做分发软件那就爽了。。。给别人一虚拟机，然后啥也不提供。。。。就让他们自己使用我的软件。随便想想而己。。。</p>
<p>主要是yii的框架用的就是这种技巧，所以我也想学学。。</p>
<p>新闻来源:开源中国社区<br />
Tiny Core Linux是一份很小（10 MB）的最低限度Linux桌面。它基于Linux 2.6内核、Busybox、Tiny X、FLTK图形用户界面、JWM窗口管理器，全部运行在内存中。它并非一份完整的桌面，也不完整支持所有的硬件；它只代表能引导进入一份最小X窗口桌面 所需的核心内容，典型情况下可包含对有线网络的访问。这份最小桌面可以通过从在线软件仓库安装额外应用软件来进行扩展。</p>
<p>Tiny Core Linux是一份很小（10 MB）的最低限度Linux桌面。它基于Linux 2.6内核、Busybox、Tiny X、FLTK图形用户界面、JWM窗口管理器，全部运行在内存中。它并非一份完整的桌面，也不完整支持所有的硬件；它只代表能引导进入一份最小X窗口桌面 所需的核心内容，典型情况下可包含对有线网络的访问。这份最小桌面可以通过从在线软件仓库安装额外应用软件来进行扩展。</p>
<p>Change log for v2.7:<br />
<br />
* Updated appbrowser - single 'Install' button and renamed 'Download Only' to 'OnDemand'<br />
* Updated appsaudit - new menu option 'Install Options' to maintain copy2fs.flg and copy2fs.lst<br />
* New ondemand - create flwm right click menu shortcuts to load and start applications from /tce/optional - tune your system for much faster boot times.<br />
* Updated tce-load - dropped l,m,lm,ml testing, ldconfig always called, depmod based on /usr/local/lib/modules, dropped -r option<br />
* Renamed tcz2ram.flg, tcz2ram.lst to copy2fs.flg and copy2fs.lst, use flag for all, or list to specify extensions to be copied into filesystem.<br />
* New 'ab' a tiny appbrowser in shell<br />
* New cache-clear script.<br />
* New boot code xvesa=WxHxD, e.g. xvesa=800x600x32 to set default Xvesa resolution bypassing xsetup<br />
* Updated tce-update and tce-setup to implement an 'easy mode' to update extensions in your tce folder<br />
* Updated tce-update feature enhancement for nfs support (Thanks to Gerald Clark)<br />
* Updated rebuildfstab for block major 11 devices<br />
* Updated udev/rules.d/75-cd-dvd.rules for sr[0-9] devices.<br />
* Updated exitcheck.sh to call /opt/shutdown.sh for user shutdown commands.<br />
* Removed mbchk and libpopt* as unneeded in base.<br />
* Stripped more libs for smaller size, now at 10.1MB<br />
<br />
下载地址：<a href="ftp://ftp.nluug.nl/pub/os/Linux/distr/tinycorelinux/2.x/release/tinycore_2.7.iso">tinycore_2.7.iso</a> (10.1MB, <a href="http://distro.ibiblio.org/pub/linux/distributions/tinycorelinux/2.x/release/tinycore_2.7.iso.md5.txt">MD5</a>).</p>
<p>目前正在准备vmware安装中，新闻来源：http://www.cnbeta.com/articles/100458.htm</p>
<p>------</p>
<p>安装完了，感觉还是和那种 floopy linux差不多的感觉 。简单的用用还行，不能做什么大的应用。哎。。。</p>]]></description>
			<link>http://www.neatstudio.com/show-1033-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-12-21 17:11</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-992-1.shtml</guid>
			<title>chromeOS随想</title>
			<author>gouki</author>
			<description><![CDATA[<p>虽然我不管是果粉，也不能算是强烈的G粉吧。chromeOS来势汹汹的。叫了大约一年，也就这么上市了。<br />
<br />
上市那天，所有的网站会议视频、文字、评测文章、心得等乱七八槽的文件铺天盖地。<br />
CB上特别明显，几乎平均每5篇新闻中就有一篇在讲chromeOS，这只是显示出来的，如果算上那些被CB编辑枪毙的文章，估计要每三篇就有一篇了吧？<br />
<br />
云概念，从ChromeOS中又见云概念。存储都在服务端。方便了，也让人感到恐怖了。毕竟东西都存在云端，谁来保证数据的安全？会不会有第二个艳照门？（或许这不会发生了，毕竟修电脑的时候，再也不用担心硬盘数据被别人看了）<br />
<br />
纯WEB浏览器的操作不是每个人都能习惯的吧？或许又会是一些极端主义者的爱好的理由 。。。<br />
<br />
至少，在国内，网络还不是特别健全的情况下，恐怕不能被推行了吧？<br />
而且根据那天的会议中也可以略微看出，google对这个操作系统是软件不要钱，但硬件要钱。所以我估计他以后最大的应用应该是SAAS吧？<br />
<br />
一个小型机上也可以装上这个系统，比如收银机？仓储管理员的机器等。低配置就可以跑起来了。也不用担心他们安装其他程序。。。。以前的那种所谓的终端机也可以不用了。。。<br />
<br />
乱想想而己</p>]]></description>
			<link>http://www.neatstudio.com/show-992-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-11-21 20:45</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-985-1.shtml</guid>
			<title>修改Linux操作系统下22端口两种方法</title>
			<author>gouki</author>
			<description><![CDATA[<p>公司内部禁用了一堆端口...唉...SSH连不上去<br />
不得不换端口...</p>
<p><strong>第一种：</strong></p>
<p>01假如要改SSH的默认端口（22），那么你只要修改：/etc/ssh/sshd_config中Port 22，这里把22改成自己要设的端口就行了，不过千万别设和现已有的端口相同哦，以防造成未知后果。</p>
<p>02假如要限制SSH登陆的IP，那么可以如下做：</p>
<p>先：修改/etc/hosts.deny，在其中加入sshd:ALL</p>
<p>然后：修改：/etc/hosts.allow，在其中进行如下设置：sshd:192.168.0.241</p>
<p>这样就可以限制只有192.168.0.241的IP通过SSH登陆上LINUX机器了。</p>
<p><strong>第二种：</strong></p>
<p>首先修改配置文件</p>
<p>vi /etc/ssh/sshd_config</p>
<p>找到#Port 22一段，这里是标识默认使用22端口，修改为如下：</p>
<p>Port 22</p>
<p>Port 50000</p>
<p>然后保存退出</p>
<p>执行/etc/init.d/sshd restart</p>
<p>这样SSH端口将同时工作与22和50000上。</p>
<p>现在编辑防火墙配置：vi /etc/sysconfig/iptables</p>
<p>启用50000端口。</p>
<p>执行/etc/init.d/iptables restart</p>
<p>现在请使用ssh工具连接50000端口，来测试是否成功。如果连接成功了，则再次编辑sshd_config的设置，将里边的Port22删除，即可。</p>
<p>之所以先设置成两个端口，测试成功后再关闭一个端口，是为了方式在修改conf的过程中，万一出现掉线、断网、误操作等未知情况时候，还能通过另外一个端口连接上去调试以免发生连接不上必须派人去机房，导致问题更加复杂麻烦。</p>
<p>来源：http://if.vc/</p>]]></description>
			<link>http://www.neatstudio.com/show-985-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-11-16 21:35</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-893-1.shtml</guid>
			<title>网站性能、安全监控</title>
			<author>gouki</author>
			<description><![CDATA[<p>前两天有人就告诉我，<a href="http://jiankongbao.com">监控宝</a>不错，于是，我就申请了一个帐号，然而不知道是出于岐视还是啥，反正我的YAHOO邮箱并没有收到激活邮件。今天一大早，朋友就发来了使用图片，看上去不出，只是需要打开snmp服务，并添加一个只读帐号。（搞半天，原来是通过这个帐号来对信息进行处理并发送到该网站啊？）</p>
<p>老王说，<a href="http://hi.baidu.com/thinkinginlamp/blog/item/b4af992584e5446a35a80f4b.html">360还有一个挂马监视中心</a>，欣欣然转贴一下下</p>
<p>网站监控对任何一个严肃的网站而言，都是必不可少的。有实力的网站往往会由专门的运维人员来负责这部分工作，不过对于多数中小网站而言，这部分开支往往是拿不出来了，为了满足这些网站的需求，就有了很多第三方网站提供在线网站监控功能，比如说：<a href="http://jc.360.cn/" target="_blank">360挂马检测中心</a>，<a href="http://www.jiankongbao.com/" target="_blank">监控宝</a>等等，你只要注册了，就能用非常Easy的方法打造非常Cool的网站监控。<br />
<br />
<strong><a target="_blank" href="http://jc.360.cn/">360挂马监控中心</a>：</strong><br />
<br />
<a href="http://www.neatstudio.com/attachment.php?id=439" target="_blank"><img src="http://www.neatstudio.com/attachments/date_200909/thumb_09ab6f2850ebfd853cd17d10d30b3792.jpg" border="0" alt="大小: 39.63 K&#13;尺寸: 500 x 375&#13;浏览: 238 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a><br />
<br />
<br />
<strong><a target="_blank" href="http://www.jiankongbao.com/">监控宝</a>：</strong><br />
<br />
<a href="http://www.neatstudio.com/attachment.php?id=440" target="_blank"><img src="http://www.neatstudio.com/attachments/date_200909/thumb_fb85e46e0fb6090139b5f63cc2ec2727.jpg" border="0" alt="大小: 46.21 K&#13;尺寸: 500 x 375&#13;浏览: 229 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a><br />
<br />
<br />
这两个网站提供的网站监控选项非常丰富，从木马到CPU，内存，磁盘占用率等等，应有尽有，只要注册了，这一切都能免费使用，并且在网站出现异常的时候会 自动发送电子邮件通知你。看到仅仅是电子邮件通知，很多读者肯定要失望了，毕竟这不能保证我们立刻知道网站发生故障，最好还是通过短信通知，懂技术的站长 们或许已经通过飞信之类的软件实现了这个功能，但至少对我来说，这太复杂了，如果你也是这么想的，接着看下面：<br />
<br />
如果你是移动的手机用户，那么就注册一个<a href="http://mail.139.com/" target="_blank">139.com</a>的邮箱，当有新邮件到达时，会自动给你的手机免费发送一条短信；如果你是联通的手机用户，那么就注册一个<a href="http://www.m165.com/" target="_blank">m165.com</a>的邮箱，有同样的功能，不过和移动邮箱相比，联通邮箱每个月有几块钱的使用费，虽然不多，但还是感觉有点不爽。手机邮箱的名字缺省是你的手机号，不过为了防止你的手机号被泄露，移动和联通都提供了别名的功能，建议使用。<br />
<br />
有了可以免费发短信的手机邮箱后，剩下的就简单了，修改注册360木马监控中心和监控宝时的账号信息，把电子邮件换成你的手机邮箱即可。<br />
<br />
当然，你也可以自己写一些监控脚本，一旦发现问题，就往手机邮箱里发邮件，同样也可以得到短信通知。至于如何发邮件，可以自己安装sendmail之类的东西，如果你和我一样讨厌sendmail，可以使用Gmail之类的邮箱通过SMTP发信，恕不详述。</p>
<p>---EOF--</p>
<p>老王说的发邮件、发短信的事情，这个我在之前也有提过。139固然可以提醒，但现在也还有飞信可以使用。网上也有一些飞信的PHP接口。当然还可以购买SP的短信服务，自己通过SP的接口来给自己发短信【如果您能够为我提供一个好的思路，如果被采用了，我将免费赠送1000条短信给您使用（如何利用更大限度的利用短信服务而不会使人反感）】</p>
<p>本人已经有一些思路，为避免冲突，我可以列出一小部分：</p>
<p>1、短信提醒（139邮箱好象已经有类似功能）<br />
2、对于网站主来说，对于安全字或者有人在尝试注入的时候，通过程序发短信<br />
3、如果是论坛用户，在用户量并不特别大的时候，可以考虑短信祝福生日，以加强互动<br />
4、短信订阅站内通知。（这个就需要有限度了。。。）</p>
<p>其实还有一些想法，只是意义不大就不列出来了</p>]]></description>
			<link>http://www.neatstudio.com/show-893-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-09-21 11:38</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-852-1.shtml</guid>
			<title>VIM 乱弹</title>
			<author>gouki</author>
			<description><![CDATA[<p>cnbeta上面关于vim今天吵开了。接二连三的稿件投上来被采用，评论也是几百字几百字的上，果然有吸引力啊。。<br />
<br />
来吧。看他们是怎么说的<br />
第一篇：</p>
<div class="codeText">
<div class="codeHead">别碰我，VIM ：http://www.cnbeta.com/articles/92216.htm</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>大家都说用VIM的是高手，我说不对，随便看一下程序图片，简直就是绝世高手用的编辑器。我折腾了半夜，反而被它给折腾了，因此为了朋友们的幸福着想，我不再一一列举它的用法。其实最大的原因是：不好意思，我也没能学会传说中的绝世武功。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>据说，VIM（编辑器）+GCC（编译器）+GDB（调试器）是Linux下最常用的开发工具链。自小被VS2005浸染的我，不习惯VIM，不习惯GCC，不习惯GDB，叫我怎么敢跑到Linux下写程序。高手们似乎很喜欢用VIM加上一大堆插件来写程序，根据我看到的做法，要想有VS那样的智能补全功能，VIM首先要Ctags（这是要输入一长串命令的），接着输入几个字母再按一下Tab键（需要SuperTab插件），才能出现智能提示。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>这还不是最紧要的，在VIM里面，删除一行字，请按d两下，删除一个字，请按一下x。以及一长串的需要记忆的命令列表，例如gg是跑到文章的最前面，shift+4是跑到行首，等等。我不自觉地想起了小学五年级那个暑假学的WPS，要输入一大堆的指令才能输出一篇格式整齐的文档，在别人眼里看起来绝对是很牛的事情。现在会用Office2007的，也不止你我他吧?至于那个时候所学的一大堆WPS控制指令，还有五笔字型，到现在全忘了。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>我肯定不是个记忆强的人才。帅哥拿起个Ubuntu，手中熟练地敲打着一堆我看不懂的指令，看得我眼花缭乱。用Linux，我最头疼的事情是干什么事情我都要先敲入一个命令，然后&ndash;help找帮助来看，否则绝不会记得那个命令是怎样用的。一开始还说这是学习阶段要好好熬，尝试多了以后就会觉得这事真的很折腾。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>你说，好好一个软件为何就不写个gui界面，非得让我敲命令去记忆每个参数什么意思，好好一个配置为何就不写个gui界面，非得让我把整个配置文件研究完才知道我该去哪里修改配置参数。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>他们说：Unix哲学是：一个程序只做一件事，并做好。但是不知道为什么，Linux下的软件作者似乎就是懒得写个gui，或者他们认为他们只需把软件的逻辑做好就可以了，至于gui方面，根据简单原则，应该由其他有兴趣的人去做。其实我觉得原因有二，一则是没有强大的开发工具（要像C#那样拖个控件就可以写gui），二则程序员也懒。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>为什么没有强大的开发工具呢，为什么Linux下没有VS这样的重磅武器?我再从VIM+GCC+GDB说起吧。VIM的难刚才说过了，GCC的话，要是有几个文件你非得自己手动写一个makefile不可，GDB我基本没试过，据说也有些图形界面的调试工具，可以像VS那样按一下快捷键就能调试（这个肯定也是要配置N久的），我看过一份GDB的使用手册，又要记忆很多调试指令，我觉得我快要崩溃了。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>上面所说的&ldquo;一个程序只做一件事，并做好&rdquo;现在已经造成了许多弊端，最可见的是依赖性。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>相信在Linux下稍微深入过进行开发的知道，GCC的版本号是件很痛苦的事情，有些程序要A版本的GCC编译，有些程序要B版本的GCC编译，高点低点版本号都不行。再加上相应的头文件库文件版本号，你是不是有种抓狂的感觉。悄悄地，我再告诉你，Linux现在发展很快，版本号一直在不停地变，你可以去发疯了。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>譬如，A作者维护一份A程序，B作者维护一份B程序，两个程序之间是有依赖的（可能的情况是B程序是A程序的gui），突然B作者想去周游世界不继续开发B程序了，A作者继续开发下去，接口变了，那B程序基本就没用了。作为使用者的你，要么只能怨天尤人，要么改行帮B继续开发。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>开源模式无疑是有很多长处的，但是其短处一直没有被正视。开源意味着源代码开放，人人都可以修改提交，可是就实际情况而言，更多的是做横向的，而不是做纵向的。我所说的横向是指开发配套软件，纵向是指对软件进行更深入的开发。因为横向的容易，只需要知道要配套的接口就可以了，而做纵向则需要将源码读懂。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>继续说为什么Linux下不可能出现VS这样的重量级应用。VIM+GCC+GDB一样可以实现VS的功能，可以进行编码，编译以及调试，但为什么它们合起来就不是VS?因为没有架构。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>现在开源的开发模式说到底还是陈旧的开发模式。软件工程的概念已经提出来好几十年了，可是当你想深入了解某个开源软件，接着去下载其源代码的时候，会很悲哀地发现：你找不到任何对应的开发文档。所有能帮助你理解源代码的只是程序源代码中的注释。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>假如你很牛，想要做一个Linux下比VS还强的IDE，要用到VIM、GCC和GDB，你要做哪方面的工作呢?以进行一次小小的开发为例吧。先不管VIM中代码智能提示是怎么来的（至今我还不知道如何写好函数名后提示我参数列表），辛辛苦苦写好代码后，要编译是吧?假设编译出错了，GCC会提示你哪里错了，还显示出一个行号提示是哪里的错误，错误是什么。想快速定位到错误的地方吗?不好意思，GCC说我是编译器这事不归我管，VIM是个编辑器，这事归它管。可我总得知道是哪里错吧?谁给我这个定位的参数?GCC只能输出信息，它意识不到VIM的存在。这时候你得写个适配接口，将GCC的输出信息转换一下，然后提交给VIM，VIM再跳转到出错的地方。当然这个VIM插件是有的，叫做quickfix。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>诸如此类的问题很多，VIM、GCC和GDB是基本没什么关系的软件，要想使它们可以通信，你必须写一大堆的适配程序，写适配程序还得考虑VIM的接口是怎样的，GCC的接口是怎样的，GDB的接口又是怎样的，这些你又得去学习。而在VS中，这是一个设计好了的架构，不同模块之间的接口是已经定义好了的，它们之间传输的数据也是定义好了的，想要通信是吧?简简单单在内存传送一个变量过来就可以了。而在VIM+GCC+GDB的通信中，数据的传送是很麻烦的事情，有时候还要通过写入读出硬盘，很神奇吧?&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>由于没有架构，所以要写一大堆的适配器才能将它们集成起来，还有些是适配器做不了或者做得不够好的功能，譬如刚才所说的代码智能提示，的确是有&nbsp;VIM插件可以做，但是如果你看过写C#时候VS的行云流水，就知道那些插件做得远远不够。这不是插件的问题，而是VIM+GCC+GDB们在该内聚的时候没有内聚。当然这也不是它们的分内事，它们本来就不是打算做IDE的。这时候你还会觉得&ldquo;一个程序只做一件事，并做好&rdquo;是绝对好事吗?&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>知道了没有架构之后，你可能会想，要是有了架构，是不是就可以做出VS那样的IDE了?这还得考虑开源开发者的软件工程水平。就我看来，还是有许许多多的开源开发者基本是没有软件工程概念的。在现实中，你可以要求一个开发者按照你的思路你的文档去开发，因为你掌握着他的薪酬。而在网络中，一则没有软件工程开发观念，二则他们也不会去学习新的一门学科，各种各样的软件工程开发模式，咱做开源只是兴趣而已，此处不留爷，自有留爷处。你拿什么来管理这些不想被束缚的开发者们呢?&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>除非，有架构，而且VIM和GCC和GDB按照架构去做，否则绝不会做出VS那样的IDE。可是几乎在一盘散沙各自为政的开源界，有可能吗?所以我断言，开源界不可能出现VS那样的重量级应用。&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>第二篇：</p>
<div class="codeText">
<div class="codeHead">《别碰我，VIM》续：http://www.cnbeta.com/articles/92237.htm</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>十年前，会打字就叫做计算机高手了。今天，会写程序也叫做计算机高手了。我相信过了十年后，写程序会是件相当普遍的事情。打字是表达思想，写程序也是表达&nbsp;思想，我个人觉得，无谓为了这些艰难的入门而浪费用户有限的精力，同时可以将用户的精力用于更关键的地方，这才是开源界所要做的工作。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>粗粗看过文后的评论，不出所料地引来骂声一片。再不出所料的是，反驳我的评论无一例外地对作者本身先做一番评论再对文章说事，甚至再加上对作者身份的断定（肯定是在线大学生写的云云），好比骂人前先扣一尿盆子到头上再开骂不迟。这些尿盆子是：自我感觉太好、无知、自己水平差（所以就别乱说）、白痴等等。其实我想说，心态很重要，您如若抱着这样的心态我们继续讨论下去，大家都不愉快，我不如打白旗率先退出为好。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>至于质疑我用的是不是正版VS的问题，以至于质疑我不尊重软件价值的问题，这也是个扯开话题攻击人身的问题，尽管回答这个问题很没有必要，我还是做出回答，我所用的VS和OFFICE都有授权的。希望我们不要扯到正版盗版的问题方面去，继续问我电脑里面所有的软件是不是都是正版的，就算是正版的又怎样，你还会进一步质疑我肯定听过MP3，看过RMVB吧，这些作者都付费了吗?&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>何况质疑我的大多热门评论里面提到的都是VIM。我无意加入Emacs和VIM和各种编辑器之间的骂战，更无意想强加我对萝卜青菜的喜欢于各位。我只是通过VIM来引出我对开源项目管理模式的不满而已，何故各位对我的萝卜青菜之爱严加指责呢?另我感到惊愕的是，大家都在对我不爱VIM表示了很大的不满，而对我说的项目管理模式丝毫不提及。须知道，编码只是最底层的一个工作，而我说的是上层建筑的架构有问题。至于怎么编码，这是个人喜好的问题。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>而我说的那些依赖性的问题，各个软件之间配合工作的问题，等等，有人肯质疑吗?&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>有网友提出我文中工具链的说法是错误的，我查了一下，的确我的提法是错误的，感谢指正。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>先说效率问题。有人评论说VIM高效，这点毋庸置疑，我同意。有人评论说VIM使用面广，我也同意。可问题是我质疑的不是这个呀，我只是说VIM命令繁多，记忆困难而已。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&ldquo;如果你还在编码，这文章等你10年后来看看，不知道你会不会觉得当年很无知&rdquo;。请容许我举个例子，现在的十年前，打五笔的笑打拼音的，五笔打字的确是快，比拼音快多了。到现在，五笔还是比打拼音的要快，可是现在打五笔的还有几何?一个Coder好比一个打字员希望看稿打字一样，当然希望拿起详细设计直接就来编码。这时候，编辑器的效率是很重要的。但是做上层设计工作的知道，脑子其实比手动得慢，一个程序编码的时间比思考的时间少多了，整个项目中，编码时间只占10%左右的工作时间。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>好比写文章和看稿打字的区别。写文章用五笔，思路好不容易整理好，打字的时候发现有个字五笔不记得怎么打，是件很恼火的事情。用VIM写程序，逻辑设计好以后，编码又不记得某个函数的参数列表的先后次序，也是件很恼火的事情，再加上繁文缛节一般的操作命令，我不知道我是专注于程序多一些还是专注于VIM多一些了。当然看稿打字那就容易多了，所全神贯注的地方是如何把每个字打好了，而不用考虑整篇稿子的起承转合问题。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>GUI和文本模式各有优缺点，只是在未来的潮流发展中，哪个利多弊少的问题。当年DOS下的WPS是很牛，可是也被现在的WPS取代了，当年DOS的《仙剑奇侠传》是赚取了大量热泪，但是现在再出一个同样品质的《XX传》，会有人买账吗?VIM若是现在冒出来的，会有那么多人捧场称颂吗?无非是习惯作用罢了。我还记得VIM有个列块操作，DOS版的WPS也有，在教程中还专门写上了，可是真正用得上列块操作的人又有多少呢?&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>我还想起了Linux下compiz桌面特效可以画一团火，初看是很帅，实际上后来根本就没人会无聊到在自己桌面上花一团火出来玩。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>试问，十年后，一定就会知道鹿死谁手吗?我说的是我是那样的一种懒惰的人，而且深信正是懒惰使世界进步，而且我相信这种人不在少数，如果觉得VIM更适合自己的，无妨忽视我。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>再说Eclipse和NetBeans。相信同时深入用过VS和Eclipse的人都知道就开发（不分语言）而言，孰优孰劣。Code::Blocks我也用过，就C++开发而言，跟VS就不是一个重量级的。（我说的不是VC6，是VS2005，不要拿98年的VC6来和现在的比）&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>我文中提到开源模式的问题，似乎没有人做出反驳，只是针对我的个人喜好做出来驳斥，倒是赞同的有一些，其实我拿VIM说事的重点是开源模式有问题，希望大家可以在这方面对我进行批评。这里我再提一句，Eclipse和NetBeans一开始都不是开源的，它们之所以成为重量级IDE，它们的架构是一早就规划好的了，我没发现开源之后它们的架构有哪方面重大的变化（以至于我阴谋地怀疑它们开源的原因只是想利用开源界的编码力量而已）。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>再说LaTeX。用过LaTeX的相信都是被其强大的数学公式编辑功能所吸引过去的。OFFICE2007里面也有，LaTeX的文法，可视化的数学公式，不用再编译生成就可以知道自己输入的是什么东西，这不更好吗。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>批评我浅尝辄止的话，有一个评论说得很对，我们应该把精力放在关键的地方（只是可惜不知道为什么，没人支持也没人反对）。世界上好玩的东西很多，不是什么东西都可以弄精通的。假设我才智中等，把VIM弄精通了，把GCC弄精通了，把GDB弄精通了。这就意味我要放弃另外一些也很好玩的东西。我的意见是对每样东西都浅尝辄止，只对自己很有兴趣的进行深度挖掘。至于VIM对我而言，它只是个工具，还没有上升到设计甚至思想方面的高度，不是说它不好，而是就算精通了我又能怎样，打字快点而已吗?计算机永远只是一个辅助工具，对人的辅助作用始终是有限的。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>再到gui的问题。有人说不需要gui，因为不需要gui也工作得很好，因为服务器要gui是要耗费资源的。先弄明白gui是干什么用的，不是机器要看到&nbsp;gui，而是人要看到gui。gui只有在需要的时候才需要被启动。好的gui可以使人工作效率提高，如apache为例吧，我是赞成apache用文本配置的，尽管我第一次配apache，sendmail这些花了老半天时间，因为一般用户用不上，这些事情应该由专业的网络管理员去做。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>十年前，会打字就叫做计算机高手了。今天，会写程序也叫做计算机高手了。我相信过了十年后，写程序会是件相当普遍的事情。打字是表达思想，写程序也是表达思想，我个人觉得，无谓为了这些艰难的入门而浪费用户有限的精力，同时可以将用户的精力用于更关键的地方，这才是开源界所要做的工作。&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>终于有人忍不住了：</p>
<div class="codeText">
<div class="codeHead">VIM vs VS：关公战秦琼 ：http://www.cnbeta.com/articles/92240.htm</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>作为程序员，我们应该对开发环境和工具软件有着严肃的态度，真正弄明白各类工具的用法和用途，好歹这些是我们吃饭的家伙，是不是？不会使用各种开发工具的程序员，不是个好程序员：你拖了团队的后腿，减少了大家的工具选项，降低了团队的开发水准。另一方面，不知道该在什么项目中采用什么开发工具的，也不是好&nbsp;的team&nbsp;leader，眼界太窄，更可能影响开发的成败。强大的开发工具并不是在各方面都强大，尺有所短，寸有所长。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>不想当将军的士兵不是好士兵，在我眼你，不愿意研究开发工具的人也不是个好程序员，这样的人很多很多，浮躁而不自知，自大而不自信，不尊重自己的工作，也不知道尊重前辈的知识。就这么浑浑噩噩在开发圈子里混着，一年两年，逐渐对自身的待遇不满，也逐渐不能胜任工作的要求。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>10年前，正是互联网泡沫第一次开始破灭的开端，一家家公司接连倒闭，很多刚入职几个月的计算机专业的学生很快又得再次求职&hellip;&hellip;程序员的贬值，程序员队伍整体水平的滑坡，正是从那时开始的。回忆当时，一般的程序员还真不敢自称高手。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>作为一个断续做了6年windows开发，断续做了11年Linux开发（中间有重合的交集）的老程序员，我换过若干家公司，经历过一些不同性质的项目，windows下mfc的，纯sdk的，数据库的，c/s、b/s的，ddk的（有早期的vxd，也有后来的wdm）经历过，linux下的小驱动，通讯设备研发，媒体设备研发也做过不少，还有业余做的php、ror项目，现在更是专职在做大流量高并发的&hellip;&hellip;在线游戏后台，为玩家们提供坚固的精神鸦片支撑。用过的语言和工具比较多了，从在校学习的tc2、bc++3开始，到自学的vc、delphi、bcb，还有些忘了名，但第一份工作用的工具vc。从vc4开始的，后来一直升级，到最近的vs2008，我甚至业余做过VS和BCB的插件。另一方面，自己笔记本上始终安装的是linux，最初是&nbsp;redhat后来是slackware，debian，ubuntu，arch。也尝鲜过一些别的发行版，其他os这里就不提了。长期做嵌入，自然长期用&nbsp;GNU/Linux&nbsp;（这是正式的名称）。我想不管是对于windows还是对于linux下的各种工具，我自认了解程度和使用经验，应该为比《别碰我，VIM》的作者要更多。我就倚老卖老吧，希望作者能听几句老家伙的废话。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>作为程序员，我们应该对开发环境和工具软件有着严肃的态度，真正弄明白各类工具的用法和用途，好歹这些是我们吃饭的家伙，是不是？不会使用各种开发工具的程序员，不是个好程序员：你拖了团队的后腿，减少了大家的工具选项，降低了团队的开发水准。另一方面，不知道该在什么项目中采用什么开发工具的，也不是好的team&nbsp;leader，眼界太窄，更可能影响开发的成败。强大的开发工具并不是在各方面都强大，尺有所短，寸有所长。说到这里，相信你也明白钻研的重要性了吧，更不要轻视业界都依赖的重要软件。你是非常聪明的，大家的智商也不会有多低下。一个如此差劲的软件偏偏那么多人喜欢去用，事出反常必有妖，这里的怪异之处，难道不值得去仔细思考吗？&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>接下来我说说《别碰我，VIM》里的一些小问题，希望作者，也希望有兴趣的围观者能有点小收获。都是些常识话，主要是说给有志于软件开发事业的人，可能比较无聊，而且刺耳。无兴趣就不要看了。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>软件间依赖性问题称为耦合，这是包管理器自动完成的事情，对用户而言是自动的，透明的，使用者没有必要去关心这些，而开发者自然应该知道这些。这实在不该是指责某个软件的理由。linux的工具是相当精干的，工具间相互配合，胜任各种复杂任务，我看不出这是什么缺点。如果有一个开发软件，很庞大，不依赖别的什么软件，自身就可以完成全部开发所需的功能，这样的软件就是好的吗？记住一句常识吧：不要重复发明轮子。当然这在windows下是不可能的，因为&nbsp;windows系统根本就没有开发用的任何轮子，所以，各个开发商，必须自备轮子。以至于很多人已经习惯了自备车轮，该换个角度思考问题了。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>接下来说说效率问题，编程不等于打字，程序员总会有更多独特的要求。写过很多程序，维护过很多程序之后，你就会明白为什么vim比vs更好用了，这是用了才能体验的事情。我感觉在和你讨论&ldquo;子非鱼，安知鱼之乐&rdquo;了。哎，vim对coder们的体贴之处，怎么是几句话能说清的呢？总而言之：快捷键，正则式、以及!执行等等功能，对程序员而言，都是相当重要的，这些vim有而vs没有的功能，让我极大的感觉到vim的爽，以及vs的不便之处，只写hello&nbsp;world是无法了解这一点的。程序员们热爱vim到什么程度了呢？firefox都有vim插件，让我们能够以vim的操作方式看网页。用久了vim，你会上瘾。一个能让人上瘾的软件，绝不是会是你眼中的废品。当然另外一面，如果你不是长期写程序，没有那些特殊的需求，你就不会觉得vim有任何的好处。如果只准我用vs会有什么感觉呢？就像一个专业的车手，不让开赛车，让我用强大而舒适的自动波，那是很郁闷的。作为程序员，本着对工作负责的态度，不管开发工具有多糟糕多难用，你也应该掌握，这是本职所在。况且效率上vim其实更高，而现在不专业的你，还没学会，完全对vim没有应具备的认知。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>懒惰使世界进步，所以我们我们用使工作效率更高的软件，而不是相反。公司对效率的追求是没有止境的，程序员绝对不是个舒适的职业，你可以想办法更省事的完成任务，但绝不要笨鸟还不飞。懒惰到一定程度，连什么工具干活更快更省都不清楚，那就有生存危机了。你也许觉得写程序，大部分时间都在思考，打字速度无所谓。但很多公司的程序员试用期都会考核英文打字速度，这就是对效率的追求，绝不是无聊。在校学生，职场新人，都要有这个心理准备，不要以为编程的工作多轻松。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>至于compiz什么的我不多说，这与程序员无关。我是用compiz&nbsp;+&nbsp;cairo-dock的，只是为了养眼，没有提高或者降低工作效率。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>再说Eclipse，这是很多公司的标准开发环境，不管你是不是喜欢，不管你的VS用得多好，都要面对这个现实。说些废话：我接触的用Eclipse的薪资水平比用VS的基本上要高，用VIM的又更高一点。国人浮躁，用金钱衡量价值显得权威一些，如果我说技术水平&hellip;&hellip;大家不服气，呵呵。就冲着RMB，大家还是多掌握些手艺吧。二者的优劣，我不想多说，这是见仁见智的问题。VS就像IE，Eclipse就像Firefox，跨平台，功能要靠扩展的，当然我个人是更喜欢Eclipse。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>至于开源模式。这个话题相当有分量，我不认为这是现在的你能谈论的。什么是开源什么是自由软件？什么叫分布式协同开发，什么叫持续集成滚动更新什么叫永远的beta版？Agile是什么Scrum是什么？呵呵，相信我，这只能是做过很多个不同模式的项目管理的人，才能有体验的。软件架构和开发模式，目前离你都比较远，没有实践而探讨，就成了空话。你真的应该相信长者，去看前人的经验和教训的总结，《大教堂与集市》这样的文章，真不是垃圾。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>就我所知道的，业余参与GNU项目的，大部分都是公司的牛人，而专职的自由软件开发者，基本上都是业界的顶尖人物。如果连你都轻易的发现他们的开发模式错了，那全球软件行业还真是脑残集中营了。否决这么一大票牛人还真是需要勇气的。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>LaTeX可以直接用，也可以用来实现可见即所得的编辑器，攻击排版软件的基石也需要极大的勇气啊。Openoffice.org很好用，甚至国产的&nbsp;WPS&nbsp;Office也都很好，为什么要花那么多钱买Office呢。我的windows里安装的还是Openoffice.org，公司采购的是WPS。在&nbsp;Linux里，大部分时间我是用简单的abi的，对我够用了，用不着那么多复杂功能。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>世界上好玩的东西很多，不是什么东西都可以弄精通的，但吃饭的家伙还真得精通。厨师不能靠意念炒菜、司机不能靠意念开车，你也不能靠意念写程序，人不能活在想象之中，电脑帮我们写程序的科幻时代还没到来。学不好，是你没刻苦努力，与你的才智无关。我从小就很普通，父母说我呆，同学说我笨，从小学到大学习成绩都不太好，大学挂掉n门课，但这并没妨碍我把VIM弄精通了，把GCC弄精通了，把GDB弄精通了，把几个专用的嵌入式操作系统弄精通了。只要功夫深，铁杵磨成针，大道理不多说，你别总给自己找借口，这些软件都是你应该精通的。这些其实也都是很无聊的，并不是什么有趣的东西。学习它掌握它，精通它，是你的责任，不管是不是有兴趣都要去做到。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>最后说场合问题：无GUI的环境永远会存在，不是所有的设备都必须连接键盘鼠标。服务器永远都不需要GUI，这与时代进步无关。做windows开发用&nbsp;VS是天经地义，做服务器、嵌入式、Linux或者跨平台开发，用VIM也是很适合的选择。我不明白为什么作者要把两个在工作中很难有交集的东西做对比，这就是本文标题的由来了。如果硬要做对比的话，我要说，windows&nbsp;开发真tmd不爽（个人喜好，请勿模仿），我就是不喜欢不对我公开的东西，就是不喜欢难调试的东西，就是不喜欢开发速度慢的东西，就是不喜欢负载能力低下的东西&hellip;&hellip;个人情绪宣泄而已，就是这样。不要上纲上线的谈tmd什么模式、技术水平，这是我个人的情绪和喜好，没有理由。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>不想当将军的士兵不是好士兵，在我眼你，不愿意研究开发工具的人也不是个好程序员，这样的人很多很多，浮躁而不自知，自大而不自信，不尊重自己的工作，也不知道尊重前辈的知识。就这么浑浑噩噩在开发圈子里混着，一年两年，逐渐对自身的待遇不满，也逐渐不能胜任工作的要求，逐渐一个个消失在开发界。而我这样的老家伙们，渐渐的成了你所不能理解的人。&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>第三篇相对比较客观。我不用VIM，因为我不会用，但insert和保存退出还是需要的，毕竟我在ssh的时候，总不能使用gui界面的程序吧？</p>]]></description>
			<link>http://www.neatstudio.com/show-852-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-08-30 22:32</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-843-1.shtml</guid>
			<title>Unix 40周岁生日快乐！</title>
			<author>gouki</author>
			<description><![CDATA[<p><strong>今年8月份，Unix操作系统迎来了自己的40周岁生日</strong>，在这过去的40年中，Unix操作系统取得了不少令世 人瞩目的成就。Unix操作系统的孕育地是 贝尔实验室，当时AT&amp;T,麻省理工学院，通用电器以及贝尔实验室三家机构正在设计一款名为Multis的操作系统，不过由于进展缓慢这个项目最 后中止了，不过正是这个计划催生了Unix，Unix的设计目标是要充分发挥当时大型计算机的性能，并能控制多部电脑运行。</p>
<div style="text-align: center;"><a href="http://www.neatstudio.com/attachment.php?id=425" target="_blank"><img src="http://www.neatstudio.com/attachments//date_200908/01add96af4c6b82cf486b456f6c6d34a.jpg" border="0" alt="大小: 48.58 K&#13;尺寸: 442 x 224&#13;浏览: 316 次&#13;点击打开新窗口浏览全图" width="442" height="224" /></a><br />
&nbsp;</div>
<p>Ken Thompson是Unix计划背后的主要研究人员之一，他每个月都花一周的时间（这段时间他的妻子正好会带女儿一起回外地的娘家一次）来编写Unix， 系统共分为四个部分，分别是操作系统，外壳，编辑器以及汇编器。后来AT&amp;T公司将这套操作系统对外免费供应，因此Unix很快就风靡全球。<br />
<br />
1975年，Unix操作系统成为互联网的标准操作系统，这在Unix的历史上同样也是一个重要的事件，从设计之初开始，这款操作系统就对网络应用的需求考虑得十分充分。<br />
<br />
后来，Unix操作系统终于逐步进入服务器，台式机以及笔记本领域，也出现了许多不同的各种版本。<br />
<br />
今天，以各种形式存在的Unix仍然在扮演着十分重要的角色，我们的互联网仍然采用基于Unix的服务器系统，而且Unix操作系统的一套哲学观点也对开源软件，Linux甚至Windows都起到了重大的影响作用<br />
<br />
祝Unix40周岁生日快乐！<br />
<br />
<strong>CNBeta编译<br />
原文：</strong><a href="http://www.neowin.net/news/main/09/08/25/happy-40th-birthday-unix"><strong>neowin</strong></a></p>]]></description>
			<link>http://www.neatstudio.com/show-843-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-08-25 15:23</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-837-1.shtml</guid>
			<title>来自SA Notes 关于linux性能提升的文章</title>
			<author>gouki</author>
			<description><![CDATA[<p>文章比较多，所以，我又学习上次，采用ScrapBook进行了简单的打包。ScrapBook打包后，原有的样式都保留。而且也不是特别大。还能够直接导入ScrapBook，所以我觉得不错的说。<br />
<br />
文章都是来自于SaNotes，那么，什么是SA呢？<br />
SANotes网上有定义：</p>
<p>sa 的职位定义包括但不限于:</p>
<p>Making the system available to others<br />
Monitoring the usage of the system<br />
Maintaining a certain level of performance<br />
Planning for future processing needs</p>
<p>呵呵，还是直接下载文章看吧。当然，如果你认为下载起来很繁，也可以看以下链接：</p>
<p>图片：</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=418" target="_blank"><img src="http://www.neatstudio.com/attachments//date_200908/412ac3d31f4cf048ee2751d1b7316147.jpg" border="0" alt="大小: 35.16 K&#13;尺寸: 360 x 214&#13;浏览: 281 次&#13;点击打开新窗口浏览全图" width="360" height="214" /></a></p>
<ul class="related_post">
    <li>2009-08-14 --<a href="http://www.sanotes.net/html/y2009/393.html" rel="bookmark" title="Permanent Link: Linux System and Performance Monitoring(总结篇)"> Linux System and Performance Monitoring(总结篇)</a></li>
    <li>2009-08-13 -- <a href="http://www.sanotes.net/html/y2009/390.html" title="Linux System and Performance Monitoring(Network篇)">Linux System and Performance Monitoring(Network篇)</a></li>
    <li>2009-08-12 -- <a href="http://www.sanotes.net/html/y2009/381.html" title="Linux System and Performance Monitoring(I/O篇)">Linux System and Performance Monitoring(I/O篇)</a></li>
    <li>2009-08-11 -- <a href="http://www.sanotes.net/html/y2009/376.html" title="Linux System and Performance Monitoring(Memory篇)">Linux System and Performance Monitoring(Memory篇)</a></li>
    <li>2009-08-10 -- <a href="http://www.sanotes.net/html/y2009/370.html" title="Linux System and Performance Monitoring(CPU篇)">Linux System and Performance Monitoring(CPU篇)</a></li>
</ul>
<p>或者下载附件：<br />
<a href="http://www.neatstudio.com/attachment.php?id=417" title="193.38 K, 下载次数:330" target="_blank">scrapbook.rar</a></p>]]></description>
			<link>http://www.neatstudio.com/show-837-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-08-21 11:22</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-791-1.shtml</guid>
			<title>Linux下安装TM2008</title>
			<author>gouki</author>
			<description><![CDATA[<p>正是因为看了这篇文章，我才能在linux下面使用TM进行聊天，以前都是使用虚拟机的。如今。我也可以直接在ubuntu下面聊天了。</p>
<p>内容如下［说明一下，本篇内容为精简版，如需查看完整版，请到<a href="http://rainux.org/running-tm2008-beta-with-wine">http://rainux.org/running-tm2008-beta-with-wine</a>］：</p>
<p>腾讯已经发布了官方的 QQ for Linux，虽然有很多问题，例如没有 amd64 版本，功能太弱，聊天记录格式与 Windows 下的 QQ/TM 格式不一致等等，但无疑是 Linux 里使用 QQ/TM 最简单的方案。如果它已经能满足你的需求了，那么不必浪费时间看本文。</p>
<h2>精简版本</h2>
<p>如果你没时间看我唠叨，精简的版本是：TM2008 Beta 运行需要 Unicode 版本的 IE6、rpcrt4.dll、Visual C++ 2005 SP1 运行库，安装程序需要 GDI+。不可以使用 <a href="http://www.tatanka.com.br/ies4linux/page/Main_Page">IEs4Linux</a>，因为它安装的 IE6 及相关运行库是 Win9x 的 ANSI 版本。必须使用 CrossOver Games 里的 <a href="http://rainux.org/stuff/rpcrt4.dll.gz">rpcrt4.dll</a>，然后用 <a href="http://www.kegel.com/wine/winetricks">winetricks</a> 安装 msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1 即可安装运行 TM2008 Beta。</p>
<h2>详细版本</h2>
<p>只看精简版没搞定？请看详细的（唠叨的）版本：</p>
<p>安装 Wine，运行一下 winecfg，让它生成一个干净的 ~/.wine 目录。如果要使用已有的 ~/.wine，请先将其备份。同时确保 winecfg 里设置的 Windows 版本至少是 Windows 2000（我用的是 Wine 1.x 默认的 Windows XP）。</p>
<p>获取一份 CrossOver Games 里的 <a href="http://rainux.org/stuff/rpcrt4.dll.gz">rpcrt4.dll</a>， 将其复制为 ~/.wine/drive_c/windows/system32/rpcrt4.dll（覆盖已有的文件），运行 winecfg，在 Libraries -&gt; DLL Overrides 里将 rpcrt4 设置为 Native (Windows)。</p>
<p>下载 <a href="http://www.kegel.com/wine/winetricks">winetricks</a>，使用它安装 IE6 和一些重要的运行库。如果这个过程失败，删除 ~/.wine（或者恢复备份的 ~/.wine）并从头再来。</p>
<div class="dp-highlighter">
<ol start="1" class="dp-bash">
    <li class="alt"><span><span>sh&nbsp;winetricks&nbsp;msxml3&nbsp;gdiplus&nbsp;riched20&nbsp;riched30&nbsp;ie6&nbsp;vcrun6&nbsp;vcrun2005sp1&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="bash" name="code" style="display: none;">sh winetricks msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1</pre>
<p>此时如果你有 Windows 上安装好的 TM2008，它已经可以运行了，但是无法登录，会提示&ldquo;网络连接失败，请检查网络。&rdquo;。所以还是老老实实用安装程序装一次吧。这里有个很莫名的问题，如 果直接使用 Wine 运行 TM2008 安装程序，它很可能会直接崩溃，看不到任何图形界面的提示。而使用 Wine 运行一个其它的程序，例如 cmd.exe 或者 Total Commander，再用这个程序去启动 TM2008 安装程序则不会有任何问题。</p>
<h2>查看聊天记录时的性能问题</h2>
<p>好了，现在不会有什么问题阻挡你了，TM2008 Beta 安装和启动都非常顺利，使用也很稳定。甚至 QQ2009 Preview4 都可以安装并启动，不过使用时很容易崩溃。但是如果你像我这样疯狂地保存了七八年的聊天记录，你会发现：</p>
<ul>
    <li>每次启动 TM2008 后第一次给任何人发消息都会导致 TM2008 失去响应将近 20 秒钟，之后继续发消息则不会有问题。第一次接收到某人的消息也会同样如此。</li>
    <li>任何试图查看聊天记录的操作都会导致 TM2008 消耗 100% CPU 并且很长时间没有反应，等待足够长的时间后才可以看到聊天记录。</li>
</ul>
<p>这是由于 TM2008 的聊天记录数据库使用了 Windows 的 Structured Storage 技术，而其 API 库 ole32.dll 的 Wine 实现还不完善或者可能性能太低。虽然可以用 winetricks 安装 dcom98 来获取一个 Win9x 的 ANSI 版本的 ole32.dll，但它没法让 Unicode 版本的 TM2008 运行起来。搜遍了网络也找不到在 Wine 里使用 Win2k 以上系统的 ole32.dll 的方法。没办法，为了保持聊天记录的一致性，只有两个选择。要么不在 Linux 里看聊天记录；要么把聊天记录数据库 Msg2.0.db 备份并从 QQ Profile 目录（我的文档\QQ Files\QQ 号码）里删除，让 TM2008 自己生成一个空白的 Msg2.0.db，暂时抛弃历史包袱，以后再到 Windows 下把新的记录导出为备份文件后合并到老的数据库里。</p>
<h2>&nbsp;</h2>]]></description>
			<link>http://www.neatstudio.com/show-791-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-07-27 17:19</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-789-1.shtml</guid>
			<title>Linux下清除.svn目录</title>
			<author>gouki</author>
			<description><![CDATA[<p>SVN给开发带来了方便，但在导出的时候，如果选择了checkout，那么目录里是带有.svn目录的，除非是export。<br />
<br />
如果您的项目中是checkout的，如果还要export，那就烦了一点。因为export是从服务器上导回来的。如果服务器速度慢（网上的免费SVN服务器），那就更痛苦了。因此直接删除.svn目录是最快的解决方法。<br />
<br />
windows下面可以直接搜索.svn，然后delete就行了<br />
linux下面怎么办？<br />
<br />
其实更方便，只要一句话<br />
进入项目目录后，运行 find . -name &quot;.svn&quot; | xargs rm -rf <br />
然后你就会发现。.svn目录全没有了。HOHO</p>
<p>&nbsp;</p>
<p>查了一下google，发现还有另外一个方法：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>find&nbsp;-name&nbsp;&quot;CVS&quot;&nbsp;-exec&nbsp;rm&nbsp;-f&nbsp;{}&nbsp;\;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>利用-name和-exec两个参数组合，可以实现批量查找删除指定文件的目的。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>要活用find，它是很强大的。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>find&nbsp;[path...]&nbsp;[expression]&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>-name&nbsp;pattern&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Base&nbsp;of&nbsp;file&nbsp;name&nbsp;(the&nbsp;path&nbsp;with&nbsp;the&nbsp;leading&nbsp;directories&nbsp;removed)&nbsp;matches&nbsp;shell&nbsp;pattern&nbsp;pattern.&nbsp;The&nbsp;metacharacters&nbsp;(`*',&nbsp;`?',&nbsp;and&nbsp;`[]')&nbsp;do&nbsp;not&nbsp;match&nbsp;a&nbsp;`.'&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;the&nbsp;base&nbsp;name.&nbsp;To&nbsp;ignore&nbsp;a&nbsp;directory&nbsp;and&nbsp;the&nbsp;files&nbsp;under&nbsp;it,&nbsp;use&nbsp;-prune;&nbsp;see&nbsp;an&nbsp;example&nbsp;in&nbsp;the&nbsp;description&nbsp;of&nbsp;-path.&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>-exec&nbsp;command&nbsp;;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Execute&nbsp;command;&nbsp;true&nbsp;if&nbsp;0&nbsp;status&nbsp;is&nbsp;returned.&nbsp;All&nbsp;following&nbsp;arguments&nbsp;to&nbsp;find&nbsp;are&nbsp;taken&nbsp;to&nbsp;be&nbsp;arguments&nbsp;to&nbsp;the&nbsp;command&nbsp;until&nbsp;an&nbsp;argument&nbsp;consisting&nbsp;of&nbsp;`;'&nbsp;is&nbsp;encountered.&nbsp;The&nbsp;string&nbsp;`{}'&nbsp;is&nbsp;replaced&nbsp;by&nbsp;the&nbsp;current&nbsp;file&nbsp;name&nbsp;being&nbsp;processed&nbsp;everywhere&nbsp;it&nbsp;occurs&nbsp;in&nbsp;the&nbsp;arguments&nbsp;to&nbsp;the&nbsp;command,&nbsp;not&nbsp;just&nbsp;in&nbsp;arguments&nbsp;where&nbsp;it&nbsp;is&nbsp;alone,&nbsp;as&nbsp;in&nbsp;some&nbsp;versions&nbsp;of&nbsp;find.&nbsp;Both&nbsp;of&nbsp;these&nbsp;constructions&nbsp;might&nbsp;need&nbsp;to&nbsp;be&nbsp;escaped&nbsp;(with&nbsp;a&nbsp;`\')&nbsp;or&nbsp;quoted&nbsp;to&nbsp;protect&nbsp;them&nbsp;from&nbsp;expansion&nbsp;by&nbsp;the&nbsp;shell.&nbsp;The&nbsp;command&nbsp;is&nbsp;executed&nbsp;in&nbsp;the&nbsp;starting&nbsp;directory.&nbsp;&nbsp;</span></li>
</ol>
</div>]]></description>
			<link>http://www.neatstudio.com/show-789-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-13-1.shtml">Linux</category>
			<pubDate>2009-07-25 09:19</pubDate>
		</item>
	</channel>
</rss>
