<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>阿菜ing</title>
	
	<link>http://www.ganshane.com</link>
	<description>阿菜的技术博客</description>
	<pubDate>Wed, 23 Dec 2009 14:29:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ganshane/kWsz" /><feedburner:info uri="ganshane/kwsz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Web中通用列表缓存的策略和实现。</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/CiGN8WAlwPI/common-list-cache.html</link>
		<comments>http://www.ganshane.com/common-list-cache.html#comments</comments>
		<pubDate>Wed, 23 Dec 2009 13:56:24 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[cache]]></category>

		<category><![CDATA[软件架构]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=299</guid>
		<description><![CDATA[在当前的web网站中，缓存扮演越来越重要的角色，是应付网站高并发的重要技术手段，在缓存中，对于单一记录的缓存是最简单的，只要卡住所有的保存、删除、更新操作，然后向缓存控制中心提交对应的事件即可,而对于list的缓存通常是很难解决的，这里说说最近在弄的缓存，自我感觉良好。
第零种：系统中最新博客文章，策略是采用ttl，每隔5‘过期一次。
第一种：最简单的list缓存，策略是只要有数据更新要删除此类的所有list缓存。（目前hibernate的二级缓存的实现策略）
第二种： 条件缓存，譬如：某人的博客；博客系统中的用户和文章的关系，当某一用户更新了自己的文章，不应该删除其他人的博客缓存，策略用用户的id参入到缓存的key中
第N种： 非固定值多条件缓存，譬如：某人9：00~10:00 的博客文章列表；策略自定义缓存策略
谈谈我的思路，一样卡住所有的增、删、改操作，当发生增删该的时候，向缓存服务器发送事件。
public class CacheEvent&#60;T&#62; {
private Class&#60;T&#62; targetClass;
private T targetObject;
private Operation operation;
public CacheEvent(Class&#60;T&#62; targetClass, T targetObject, Operation operation) {
this.targetClass = targetClass;
this.targetObject = targetObject;
this.operation = operation;
}
对于第一种：那么我的缓存定义：
@Cacheable(clazz=TestMember.class)
public List&#60;TestMember&#62; getList();
通过方法和实体类产生一个缓存key, 只要发现此这样的实体发生增、删操作，即刻删除此缓存(关于如何删除，见下文)
对于第二种：我的缓存定义为：


@Cacheable(clazz=TestArticle.class,
namespaces={@CacheNsParameter(name=&#8221;member&#8221;,keyIndex=1)})
public List&#60;TestArticle&#62; getList(@CacheKeyParameter TestMember member,
@CacheKeParameter start,@CacheKeyParameter offset);


通过方法和namespace的定义产生一个缓存key，接受事件，当发生实体的增、删操作，并且TestArticle的member属性和@CacheKeyparameter 标记的属性相等时候，即刻删除此缓存。
如果缓存的key中参数为固定对象主键（譬如：ns中用户id，且文章表中的member_id 不会被update，要么insert ,要么delete，一旦设置就不会更改）或者参数和实体本身无关(譬如：分页参数start、offset)的时候，那么上述两种方法，基本上能满足所有缓存的需求。
对于第三种缓存用的相对少点，需要自定义，我的定义为：

@Cacheable(clazz=TestArticle.class,strategy=&#8221;XX&#8221;)
public List&#60;TestArticle&#62; getList(@CacheKeyParameter TestMember member,@CacheKeyParameter int month);

由自定义的xx服务类(我使用的是Tapestry5-IOC)来进行处理。
上面说到中很关键的一个东西就是怎么批量的高效删除缓存,譬如：在第二种中多次运行产生的cacheKey为

TestArticle_member_1_0_10   (后三位分别为member_id,start,offset)
TestArticle_member_1_1_30
TestArticle_member_1_40_30
TestArticle_member_2_0_10
TestArticle_member_2_1_10
 TestArticle_member_2_30_10
。。。。。。。。。。

很多这样的key，如果要是每次把key记录一下，那这个代价也是挺高的，也要弄一个缓存的东西给记录下来，现在大家注意一下这个缓存的key，用户1增加文章的时候，实际就是删除所有key以TestArticle_member_1 开头的缓存即可,这样就省事多了，问题转换为怎么批量删除，在缓存中没有批量删除这个概念:( ,因为要遍历所有的key进行操作，效率自然高不了，挠头ing,我搜呀搜，无意中发现了官方的FAQ：http://code.google.com/p/memcached/wiki/FAQ#Namespaces 如果我们把TestArticle_member_1 加个版本号的话，不久好了吗，那么第一次时候产生的key为：

TestArticle_member_1_v0_0_10   (后四位分别为member_id,version,start,offset)
TestArticle_member_1_v0_1_30
TestArticle_member_1_v0_40_30
TestArticle_member_2_v0_0_10
TestArticle_member_2_v0_1_10
TestArticle_member_2_v0_30_10


当memeber 1增加文章的时候，我版本号加一,那么下次请求缓存时候key就变成了:


TestArticle_member_1_v1_0_10   [...]]]></description>
			<content:encoded><![CDATA[<p>在当前的web网站中，缓存扮演越来越重要的角色，是应付网站高并发的重要技术手段，在缓存中，对于单一记录的缓存是最简单的，只要卡住所有的保存、删除、更新操作，然后向缓存控制中心提交对应的事件即可,而对于list的缓存通常是很难解决的，这里说说最近在弄的缓存，自我感觉良好。</p>
<p style="padding-left: 30px; ">第零种：系统中最新博客文章，策略是采用ttl，每隔5‘过期一次。</p>
<p style="padding-left: 30px; ">第一种：最简单的list缓存，策略是只要有数据更新要删除此类的所有list缓存。（目前hibernate的二级缓存的实现策略）</p>
<p style="padding-left: 30px; ">第二种： 条件缓存，譬如：某人的博客；博客系统中的用户和文章的关系，当某一用户更新了自己的文章，不应该删除其他人的博客缓存，策略用用户的id参入到缓存的key中</p>
<p style="padding-left: 30px; ">第N种： 非固定值多条件缓存，譬如：某人9：00~10:00 的博客文章列表；策略自定义缓存策略</p>
<p>谈谈我的思路，一样卡住所有的增、删、改操作，当发生增删该的时候，向缓存服务器发送事件。</p>
<blockquote><p>public class CacheEvent&lt;T&gt; {</p>
<p>private Class&lt;T&gt; targetClass;</p>
<p>private T targetObject;</p>
<p>private Operation operation;</p>
<p>public CacheEvent(Class&lt;T&gt; targetClass, T targetObject, Operation operation) {</p>
<p style="padding-left: 30px;">this.targetClass = targetClass;</p>
<p style="padding-left: 30px;">this.targetObject = targetObject;</p>
<p style="padding-left: 30px;">this.operation = operation;</p>
<p>}</p></blockquote>
<p>对于第一种：那么我的缓存定义：</p>
<blockquote><p>@Cacheable(clazz=TestMember.class)<br />
public List&lt;TestMember&gt; getList();</p></blockquote>
<p>通过方法和实体类产生一个缓存key, 只要发现此这样的实体发生增、删操作，即刻删除此缓存(关于如何删除，见下文)</p>
<div>对于第二种：我的缓存定义为：</div>
<div>
<blockquote>
<div>@Cacheable(clazz=TestArticle.class,</div>
<div style="padding-left: 30px;">namespaces={@CacheNsParameter(name=&#8221;member&#8221;,keyIndex=1)})</div>
<div>public List&lt;TestArticle&gt; getList(@CacheKeyParameter TestMember member,</div>
<div style="padding-left: 30px;">@CacheKeParameter start,@CacheKeyParameter offset);</div>
</blockquote>
</div>
<div>通过方法和namespace的定义产生一个缓存key，接受事件，当发生实体的增、删操作，并且TestArticle的member属性和@CacheKeyparameter 标记的属性相等时候，即刻删除此缓存。</div>
<div>如果缓存的key中参数为固定对象主键（譬如：ns中用户id，且文章表中的member_id 不会被update，要么insert ,要么delete，一旦设置就不会更改）或者参数和实体本身无关(譬如：分页参数start、offset)的时候，那么上述两种方法，基本上能满足所有缓存的需求。</div>
<div>对于第三种缓存用的相对少点，需要自定义，我的定义为：</div>
<blockquote>
<div>@Cacheable(clazz=TestArticle.class,strategy=&#8221;XX&#8221;)</div>
<div>public List&lt;TestArticle&gt; getList(@CacheKeyParameter TestMember member,@CacheKeyParameter int month);</div>
</blockquote>
<div>由自定义的xx服务类(我使用的是Tapestry5-IOC)来进行处理。</div>
<div>上面说到中很关键的一个东西就是怎么批量的高效删除缓存,譬如：在第二种中多次运行产生的cacheKey为</div>
<blockquote>
<div><span style="font-family: mceinline;">TestArticle_member_1</span>_0_10   (后三位分别为member_id,start,offset)</div>
<div><span style="font-family: mceinline;">TestArticle_member_1</span>_1_30</div>
<div><span style="font-family: mceinline;">TestArticle_member_1</span>_40_30</div>
<div><span style="font-family: mceinline;">TestArticle_member_2</span>_0_10</div>
<div><span style="font-family: mceinline;">TestArticle_member_2</span>_1_10<br />
<span style="font-family: mceinline;"> TestArticle_member_2</span>_30_10</div>
<div>。。。。。。。。。。</div>
</blockquote>
<div>很多这样的key，如果要是每次把key记录一下，那这个代价也是挺高的，也要弄一个缓存的东西给记录下来，现在大家注意一下这个缓存的key，用户1增加文章的时候，实际就是删除所有key以TestArticle_member_1 开头的缓存即可,这样就省事多了，问题转换为怎么批量删除，在缓存中没有批量删除这个概念:( ,因为要遍历所有的key进行操作，效率自然高不了，挠头ing,我搜呀搜，无意中发现了官方的FAQ：<a href="http://code.google.com/p/memcached/wiki/FAQ#Namespaces">http://code.google.com/p/memcached/wiki/FAQ#Namespaces</a> 如果我们把TestArticle_member_1 加个版本号的话，不久好了吗，那么第一次时候产生的key为：</p>
<blockquote>
<div>TestArticle_member_1_v0_0_10   (后四位分别为member_id,version,start,offset)</div>
<div>TestArticle_member_1_v0_1_30</div>
<div>TestArticle_member_1_v0_40_30</div>
<div>TestArticle_member_2_v0_0_10</div>
<div>TestArticle_member_2_v0_1_10<br />
TestArticle_member_2_v0_30_10</div>
</blockquote>
</div>
<div>当memeber 1增加文章的时候，我版本号加一,那么下次请求缓存时候key就变成了:</p>
<div>
<blockquote>
<div>TestArticle_member_1_v1_0_10   (后四位分别为member_id,version,start,offset)</div>
<div>TestArticle_member_1_v1_1_30</div>
<div>TestArticle_member_1_v1_40_30</div>
<div>TestArticle_member_2_v0_0_10</div>
<div>TestArticle_member_2_v0_1_10<br />
TestArticle_member_2_v0_30_10</div>
</blockquote>
</div>
</div>
<div>cache没找到对应的缓存记录，那么执行方法，然后缓存起来，这样就变相实现了缓存的批量删除，有人会说，那岂不参生垃圾数据了，不用担心缓存系统一般都有LRU算法自动删除没用的数据。 <img src='http://www.ganshane.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<div>问题就豁然开朗了。其他情况也就迎刃而解了。</div>
<div>可以看看偶的测试用例：</div>
<div><a href="http://code.google.com/p/corner/source/browse/corner3/trunk/src/test/java/corner/cache/services/impl/">http://code.google.com/p/corner/source/browse/corner3/trunk/src/test/java/corner/cache/services/impl/</a></div>
<div>约束、限制、建议：</div>
<div>1） 所有实体的缓存都是以实体本身向下延展。</div>
<div>2） 放入到缓存中的列表都是ID集合</div>
<div>3） 尽量以外建、主键、索引作为缓存的key</div>
<div>4） 使用hibernate的时候，不使用ManyToMany关系，用 one-to-many 和中间实体替代，譬如用户的角色列表。</div>
<div>有待完善：</div>
<div>1） 没次读取缓存的时候，需要分析方法中的Annotation，需要使用LocalCache的方式进行缓存起来。</div>
<div>2） 在更高量的访问时候，应该从memcache中读取的数据一部分放入本地缓存中。</div>
<div>3） 加入压力测试。</div>
<div>不过总算一个还算通用的列表缓存实现，通过前三种方式，系统的list缓存自定义方便了许多。借此拍砖，欢迎抛玉。</div>
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/linux%e7%a7%98%e7%ac%8811-%e6%98%be%e7%a4%ba%e6%9c%aa%e6%9d%a5%e7%9a%84%e6%97%a5%e6%9c%9f%e5%92%8c%e6%97%b6%e9%97%b4.html" title="Linux秘笈11. 显示未来的日期和时间">Linux秘笈11. 显示未来的日期和时间</a></li>
<li><a href="http://www.ganshane.com/%e5%91%bd%e4%bb%a4%e9%9b%86%e6%9f%a5%e7%9c%8b%e7%a1%ac%e4%bb%b6%e4%bf%a1%e6%81%af.html" title="[命令集]查看硬件信息">[命令集]查看硬件信息</a></li>
<li><a href="http://www.ganshane.com/linux-change-text-case.html" title="Linux秘笈21. 改变文件内容的大小写">Linux秘笈21. 改变文件内容的大小写</a></li>
<li><a href="http://www.ganshane.com/linux-display-total-connect-time-of-users.html" title="[Linux秘笈28].显示用户连接时间">[Linux秘笈28].显示用户连接时间</a></li>
<li><a href="http://www.ganshane.com/suppress-standard-output-and-error-message.html" title="Linux秘笈19. 禁止标准的输出以及错误的消息">Linux秘笈19. 禁止标准的输出以及错误的消息</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/6rLDmn8UWYDj9evDshdKdrNcz5M/0/da"><img src="http://feedads.g.doubleclick.net/~a/6rLDmn8UWYDj9evDshdKdrNcz5M/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6rLDmn8UWYDj9evDshdKdrNcz5M/1/da"><img src="http://feedads.g.doubleclick.net/~a/6rLDmn8UWYDj9evDshdKdrNcz5M/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/CiGN8WAlwPI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/common-list-cache.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/common-list-cache.html</feedburner:origLink></item>
		<item>
		<title>初步解决了Eclipse在Ubuntu上崩溃的问题</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/F7VGuKBLslY/solved-eclipse-crash-on-ubuntu.html</link>
		<comments>http://www.ganshane.com/solved-eclipse-crash-on-ubuntu.html#comments</comments>
		<pubDate>Thu, 30 Apr 2009 10:14:53 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=295</guid>
		<description><![CDATA[Eclipse在64bit的Linux机器上很不稳定，据说是Sun jdk的问题，不过今天采用了另外一种方法，用了一个下午的Eclipse没有死。
一句话就是用32bit的eclipse和32bit的jdk
下载eclipse的linux32bit版本，
运行： sudo apt-get install ia32-sun-java6-bin
偶的Eclipse启动参数（eclipse.ini）为：
-showsplash
org.eclipse.platform
-framework
plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar
-vm
/usr/lib/jvm/ia32-java-6-sun/bin/java
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:MaxPermSize=256m
-Xms128m
-Xmx1024m
-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith
目前为止，使用良好了，据说使用ibm的64bit 的jdk跑64bit的eclipse没问题，但是今天一直没有下载下来ibm的jdk，改天试试。
相关文章

晒晒自己的svn备份做法
围绕在SVN(subversion)周围的GIT运用
ubuntu 上安装atheros无线驱动
[命令集3.8]通过Samba和Windows进行数据共享
[命令集3.7] 立刻创建swap分区

]]></description>
			<content:encoded><![CDATA[<p>Eclipse在64bit的Linux机器上很不稳定，据说是Sun jdk的问题，不过今天采用了另外一种方法，用了一个下午的Eclipse没有死。</p>
<p>一句话就是用32bit的eclipse和32bit的jdk</p>
<p>下载eclipse的linux32bit版本，</p>
<p>运行： sudo apt-get install ia32-sun-java6-bin</p>
<p>偶的Eclipse启动参数（eclipse.ini）为：</p>
<p>-showsplash<br />
org.eclipse.platform<br />
-framework<br />
plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar<br />
-vm<br />
/usr/lib/jvm/ia32-java-6-sun/bin/java<br />
-vmargs<br />
-Dosgi.requiredJavaVersion=1.5<br />
-XX:MaxPermSize=256m<br />
-Xms128m<br />
-Xmx1024m<br />
-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith</p>
<p>目前为止，使用良好了，据说使用ibm的64bit 的jdk跑64bit的eclipse没问题，但是今天一直没有下载下来ibm的jdk，改天试试。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/my-svn-backup-method.html" title="晒晒自己的svn备份做法">晒晒自己的svn备份做法</a></li>
<li><a href="http://www.ganshane.com/git-on-svn.html" title="围绕在SVN(subversion)周围的GIT运用">围绕在SVN(subversion)周围的GIT运用</a></li>
<li><a href="http://www.ganshane.com/install-atheros-driver-on-ubuntu.html" title="ubuntu 上安装atheros无线驱动">ubuntu 上安装atheros无线驱动</a></li>
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/linux-add-swap-on-the-fly.html" title="[命令集3.7] 立刻创建swap分区">[命令集3.7] 立刻创建swap分区</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/c9jKXGWjyXXzDe_FvsToPdMP8rY/0/da"><img src="http://feedads.g.doubleclick.net/~a/c9jKXGWjyXXzDe_FvsToPdMP8rY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/c9jKXGWjyXXzDe_FvsToPdMP8rY/1/da"><img src="http://feedads.g.doubleclick.net/~a/c9jKXGWjyXXzDe_FvsToPdMP8rY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/F7VGuKBLslY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/solved-eclipse-crash-on-ubuntu.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/solved-eclipse-crash-on-ubuntu.html</feedburner:origLink></item>
		<item>
		<title>晒晒自己的svn备份做法</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/x_tQWocjunQ/my-svn-backup-method.html</link>
		<comments>http://www.ganshane.com/my-svn-backup-method.html#comments</comments>
		<pubDate>Sat, 04 Apr 2009 09:08:47 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[svn]]></category>

		<category><![CDATA[增量备份]]></category>

		<category><![CDATA[备份]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=290</guid>
		<description><![CDATA[今天在google reader的分享中，看到东东分享的备份脚本，发现那个备份脚本最大不好的地方就是每次是一个全库备份，这要是上万次的提交，那个速度相当的受不了,现在把我一直使用的svn备份拿出来分享一下。


首先从subversion的官方网站下载 svnmirror.sh 脚本
新建一个backup.sh脚本，内容如下：
jcai@Svgn001:~/svn-backup$ cat backup.sh
#!/bin/bash

allRepos=("REPO1" "REPO2" "REPO3")
export MODE="pull"
export RHOST="dev.XXX.com"
export RUSER="username"
export LANG="zh_CN.UTF-8"

for r in ${allRepos[*]}
do
# 本地svn备份保存路径
export LREPOS="/home/xxx/svn-backup/data/${r}"
# 远程SVN资源库存放路径
export RREPOS="/opt/xxx/${r}"
/home/xxx/svn-backup/svnmirror.sh
done
一次备份多个库，主要要做的是需要机器之间使用ssh的key登录，不用输入密码。
再来一个定时：

?View Code BASHjcai@Svgn001:~/svn-backup$ crontab -l
0 5 * * * /home/jcai/svn-backup/backup.sh &#38;gt; /home/jcai/svn-backup/log.txt &#38;amp;



这就是偶的subversion备份方法，目前使用已经有2～3年了，感觉每次备份的时候，速度还挺快，主要这个是增量备份。
相关文章

围绕在SVN(subversion)周围的GIT运用
初步解决了Eclipse在Ubuntu上崩溃的问题
ubuntu 上安装atheros无线驱动
[命令集3.8]通过Samba和Windows进行数据共享
[命令集3.7] 立刻创建swap分区

]]></description>
			<content:encoded><![CDATA[<p>今天在google reader的分享中，看到<a href="http://agilejava.blogbus.com">东东</a>分享的<a href="http://blog.markwshead.com/101/backing-up-subversion-automatically/">备份脚本</a>，发现那个备份脚本最大不好的地方就是每次是一个全库备份，这要是上万次的提交，那个速度相当的受不了,现在把我一直使用的svn备份拿出来分享一下。</p>
<p><span id="more-290"></span></p>
<ul>
<li>首先从subversion的官方网站下载 <a href="http://svn.collab.net/repos/svn/trunk/contrib/server-side/svnmirror.sh">svnmirror.sh</a> 脚本</li>
<li>新建一个backup.sh脚本，内容如下：
<pre>jcai@Svgn001:~/svn-backup$ cat backup.sh
#!/bin/bash

allRepos=("REPO1" "REPO2" "REPO3")
export MODE="pull"
export RHOST="dev.XXX.com"
export RUSER="username"
export LANG="zh_CN.UTF-8"

for r in ${allRepos[*]}
do
# 本地svn备份保存路径
export LREPOS="/home/xxx/svn-backup/data/${r}"
# 远程SVN资源库存放路径
export RREPOS="/opt/xxx/${r}"
/home/xxx/svn-backup/svnmirror.sh
done</pre>
<p>一次备份多个库，主要要做的是需要机器之间使用ssh的key登录，不用输入密码。</li>
<li>再来一个定时：

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p290code2'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2902"><td class="code" id="p290code2"><pre class="bash" style="font-family:monospace;">jcai<span style="color: #000000; font-weight: bold;">@</span>Svgn001:~<span style="color: #000000; font-weight: bold;">/</span>svn-backup$ crontab <span style="color: #660033;">-l</span>
<span style="color: #000000;">0</span> <span style="color: #000000;">5</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>jcai<span style="color: #000000; font-weight: bold;">/</span>svn-backup<span style="color: #000000; font-weight: bold;">/</span>backup.sh <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>jcai<span style="color: #000000; font-weight: bold;">/</span>svn-backup<span style="color: #000000; font-weight: bold;">/</span>log.txt <span style="color: #000000; font-weight: bold;">&amp;</span>amp;</pre></td></tr></table></div>

</li>
</ul>
<p>这就是偶的subversion备份方法，目前使用已经有2～3年了，感觉每次备份的时候，速度还挺快，主要这个是增量备份。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/git-on-svn.html" title="围绕在SVN(subversion)周围的GIT运用">围绕在SVN(subversion)周围的GIT运用</a></li>
<li><a href="http://www.ganshane.com/solved-eclipse-crash-on-ubuntu.html" title="初步解决了Eclipse在Ubuntu上崩溃的问题">初步解决了Eclipse在Ubuntu上崩溃的问题</a></li>
<li><a href="http://www.ganshane.com/install-atheros-driver-on-ubuntu.html" title="ubuntu 上安装atheros无线驱动">ubuntu 上安装atheros无线驱动</a></li>
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/linux-add-swap-on-the-fly.html" title="[命令集3.7] 立刻创建swap分区">[命令集3.7] 立刻创建swap分区</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/uo3Zof0LU8GSSMZ334rIhKZum9c/0/da"><img src="http://feedads.g.doubleclick.net/~a/uo3Zof0LU8GSSMZ334rIhKZum9c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/uo3Zof0LU8GSSMZ334rIhKZum9c/1/da"><img src="http://feedads.g.doubleclick.net/~a/uo3Zof0LU8GSSMZ334rIhKZum9c/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/x_tQWocjunQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/my-svn-backup-method.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/my-svn-backup-method.html</feedburner:origLink></item>
		<item>
		<title>围绕在SVN(subversion)周围的GIT运用</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/1POLJkGmH9M/git-on-svn.html</link>
		<comments>http://www.ganshane.com/git-on-svn.html#comments</comments>
		<pubDate>Fri, 03 Apr 2009 09:08:01 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[开发环境]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[svn]]></category>

		<category><![CDATA[命令]]></category>

		<category><![CDATA[版本控制]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=286</guid>
		<description><![CDATA[前一段因为家里面的宽带不是包月的，按照时间收费的，在开发的时候，老要提交东西，不提交的放在本地总感觉要和别人冲突了（谁都怕冲突呀，：）),然后就想到了git,现在还是挺火的,然后就试试，没想到等我尝试完毕之后再也放不下了，真是爱不释手，谈谈我的使用感受吧，git看起来很复杂，使用起来的确很方便。

我们目前很多团队使用的版本控制工具应该都是subversion,cvs之类的，我觉得用subversion作为中央版本控制服务器是非常好的东西，支持的客户端也很多，会的人也很多，那么为什么还要gitu呢？不知道大家有没有这样的感受，就是开发的时候，想提交点东西，但是这东西不是很稳定，要等后续工作完成，提交之后又怕影响大家，这个时候会svn的朋友肯定会说，使用branche呀，branch的确可以解决，但是branch的使用和合并那简直是地狱(需要睁大双眼看)，再加上如果网络不通怎么办？说了这么多，那么下面我们就说说怎么使用svn作为中央版本控制服务器，git作为本地操作工具.

安装git-svn，
apt-get install git-svn
checkout一个svn项目
git-svn clone http://dev.xxxx.com/svn/xx/trunk
如果你的svn服务器是标准布局(含有 trunk branches tags)可以加上 -s 参数,有的客户端不支持这么操作，你可以这么操作：
git svn init http://dev.xxx.com/svn/xx/trunk
git svn fetch
这样就能把项目文件检出到本地.
修改了文件需要提交：
git commit -a -m &#8216;注释信息&#8217;
此时只是向本地的git库提交，没有提交到svn中央服务器
提交到svn服务器
git svn dcommit
svn 服务器有新东西，需要下载
git svn rebase

一些常用命令和svn差不多了，而他的revert和reset真的很强大，使用这个不怕很大的冲突了，他的每次合并就是打patch的过程。
参考资料
http://git.or.cz/course/svn.html 
http://utsl.gen.nz/talks/git-svn/intro.html
http://vm-kernel.org/blog/2008/10/24/%E6%B7%B7%E5%90%88%E4%BD%BF%E7%94%A8git-svn%E5%92%8Cgit/
相关文章

晒晒自己的svn备份做法
[命令集3.8]通过Samba和Windows进行数据共享
[命令集3.7] 立刻创建swap分区
[linux秘笈30]. PS2 - 持续交互的提示符
[命令集3.4]系统挂载点/磁盘使用情况

]]></description>
			<content:encoded><![CDATA[<p>前一段因为家里面的宽带不是包月的，按照时间收费的，在开发的时候，老要提交东西，不提交的放在本地总感觉要和别人冲突了（谁都怕冲突呀，：）),然后就想到了git,现在还是挺火的,然后就试试，没想到等我尝试完毕之后再也放不下了，真是爱不释手，谈谈我的使用感受吧，git看起来很复杂，使用起来的确很方便。</p>
<p><span id="more-286"></span></p>
<p>我们目前很多团队使用的版本控制工具应该都是subversion,cvs之类的，我觉得用subversion作为中央版本控制服务器是非常好的东西，支持的客户端也很多，会的人也很多，那么为什么还要gitu呢？不知道大家有没有这样的感受，就是开发的时候，想提交点东西，但是这东西不是很稳定，要等后续工作完成，提交之后又怕影响大家，这个时候会svn的朋友肯定会说，使用branche呀，branch的确可以解决，但是branch的使用和合并那简直是地狱(需要睁大双眼看)，再加上如果网络不通怎么办？说了这么多，那么下面我们就说说怎么使用svn作为中央版本控制服务器，git作为本地操作工具.</p>
<ul>
<li>安装git-svn，<br />
apt-get install git-svn</li>
<li>checkout一个svn项目<br />
git-svn clone http://dev.xxxx.com/svn/xx/trunk<br />
如果你的svn服务器是标准布局(含有 trunk branches tags)可以加上 -s 参数,有的客户端不支持这么操作，你可以这么操作：<br />
git svn init http://dev.xxx.com/svn/xx/trunk<br />
git svn fetch<br />
这样就能把项目文件检出到本地.</li>
<li>修改了文件需要提交：<br />
git commit -a -m &#8216;注释信息&#8217;<br />
此时只是向本地的git库提交，没有提交到svn中央服务器</li>
<li>提交到svn服务器<br />
git svn dcommit</li>
<li>svn 服务器有新东西，需要下载<br />
git svn rebase</li>
</ul>
<p>一些常用命令和svn差不多了，而他的revert和reset真的很强大，使用这个不怕很大的冲突了，他的每次合并就是打patch的过程。</p>
<p>参考资料</p>
<p><a href="http://git.or.cz/course/svn.html">http://git.or.cz/course/svn.html </a></p>
<p><a href="http://utsl.gen.nz/talks/git-svn/intro.html">http://utsl.gen.nz/talks/git-svn/intro.html</a></p>
<p><a href="http://vm-kernel.org/blog/2008/10/24/%E6%B7%B7%E5%90%88%E4%BD%BF%E7%94%A8git-svn%E5%92%8Cgit/">http://vm-kernel.org/blog/2008/10/24/%E6%B7%B7%E5%90%88%E4%BD%BF%E7%94%A8git-svn%E5%92%8Cgit/</a><br />
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/my-svn-backup-method.html" title="晒晒自己的svn备份做法">晒晒自己的svn备份做法</a></li>
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/linux-add-swap-on-the-fly.html" title="[命令集3.7] 立刻创建swap分区">[命令集3.7] 立刻创建swap分区</a></li>
<li><a href="http://www.ganshane.com/linux-ps2-continuation-interactive-prompt.html" title="[linux秘笈30]. PS2 - 持续交互的提示符">[linux秘笈30]. PS2 - 持续交互的提示符</a></li>
<li><a href="http://www.ganshane.com/linux-system-mount-and-disk-stat.html" title="[命令集3.4]系统挂载点/磁盘使用情况">[命令集3.4]系统挂载点/磁盘使用情况</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/BLJTNtZXdO0GFtmRV5ZZsSiQCPI/0/da"><img src="http://feedads.g.doubleclick.net/~a/BLJTNtZXdO0GFtmRV5ZZsSiQCPI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/BLJTNtZXdO0GFtmRV5ZZsSiQCPI/1/da"><img src="http://feedads.g.doubleclick.net/~a/BLJTNtZXdO0GFtmRV5ZZsSiQCPI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/1POLJkGmH9M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/git-on-svn.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/git-on-svn.html</feedburner:origLink></item>
		<item>
		<title>ubuntu 上安装atheros无线驱动</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/NyNLiSSEYa8/install-atheros-driver-on-ubuntu.html</link>
		<comments>http://www.ganshane.com/install-atheros-driver-on-ubuntu.html#comments</comments>
		<pubDate>Fri, 03 Apr 2009 08:46:51 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[安装]]></category>

		<category><![CDATA[技巧]]></category>

		<category><![CDATA[驱动]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=282</guid>
		<description><![CDATA[现在使用的是Thinkpad的T400，里面内置的无线网卡是Atheros的（win下面显示好像是：thinkpad a/b），但是默认安装ubuntu 8.04并不支持这个程序，具体安装如下：


在madwifi（这个网站有好几个域名，我找了老半天）下载最新的athros驱动，下载地址为：
http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/
make &#38;&#38; make install
modprobe ath_pci
让启动的时候加载此模块，在/etc/modules加上ath_pci
echo &#8216;ath_pci&#8217; &#62;&#62; /etc/modules
因为ubuntu本身也提供这个网卡的驱动，需要禁用它，可以通过system-&#62;hardware drivers禁用，同时在
/etc/default/linux-restricted-modules-common 这个文件中加上：
echo &#8216;DISABLED_MODULES=&#8221;ath_hal&#8221;&#8216; &#62;&#62;/etc/default/linux-restricted-modules-common
reboot 即可

这个时候也能使用network-manager进行无线管理了。
图片如下：

相关文章

[命令集3.8]通过Samba和Windows进行数据共享
[命令集3.7] 立刻创建swap分区
[命令集3.2]Linux下和磁盘相关的命令
Linux秘笈23.Sort命令
初步解决了Eclipse在Ubuntu上崩溃的问题

]]></description>
			<content:encoded><![CDATA[<p>现在使用的是Thinkpad的T400，里面内置的无线网卡是Atheros的（win下面显示好像是：thinkpad a/b），但是默认安装ubuntu 8.04并不支持这个程序，具体安装如下：</p>
<p><span id="more-282"></span></p>
<ol>
<li>在<a href="http://madwifi-project.org/">madwifi</a>（这个网站有好几个域名，我找了老半天）下载最新的athros驱动，下载地址为：<br />
<a href="http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/">http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/</a></li>
<li>make &amp;&amp; make install</li>
<li>modprobe ath_pci</li>
<li>让启动的时候加载此模块，在/etc/modules加上ath_pci<br />
echo &#8216;ath_pci&#8217; &gt;&gt; /etc/modules</li>
<li>因为ubuntu本身也提供这个网卡的驱动，需要禁用它，可以通过system-&gt;hardware drivers禁用，同时在<br />
/etc/default/linux-restricted-modules-common 这个文件中加上：<br />
echo &#8216;DISABLED_MODULES=&#8221;ath_hal&#8221;&#8216; &gt;&gt;/etc/default/linux-restricted-modules-common</li>
<li>reboot 即可</li>
</ol>
<p>这个时候也能使用network-manager进行无线管理了。<br />
图片如下：<br />
<img class="alignnone size-full wp-image-283" title="atheros" src="http://www.ganshane.com/uploads/2009/04/atheros.jpg" alt="atheros" width="323" height="270" /><br />
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/linux-add-swap-on-the-fly.html" title="[命令集3.7] 立刻创建swap分区">[命令集3.7] 立刻创建swap分区</a></li>
<li><a href="http://www.ganshane.com/linux-command-disk.html" title="[命令集3.2]Linux下和磁盘相关的命令">[命令集3.2]Linux下和磁盘相关的命令</a></li>
<li><a href="http://www.ganshane.com/linux-sort-command.html" title="Linux秘笈23.Sort命令">Linux秘笈23.Sort命令</a></li>
<li><a href="http://www.ganshane.com/solved-eclipse-crash-on-ubuntu.html" title="初步解决了Eclipse在Ubuntu上崩溃的问题">初步解决了Eclipse在Ubuntu上崩溃的问题</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/jMlQUMmk8zy2pEmPOR_JWZ6XnLo/0/da"><img src="http://feedads.g.doubleclick.net/~a/jMlQUMmk8zy2pEmPOR_JWZ6XnLo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jMlQUMmk8zy2pEmPOR_JWZ6XnLo/1/da"><img src="http://feedads.g.doubleclick.net/~a/jMlQUMmk8zy2pEmPOR_JWZ6XnLo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/NyNLiSSEYa8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/install-atheros-driver-on-ubuntu.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/install-atheros-driver-on-ubuntu.html</feedburner:origLink></item>
		<item>
		<title>在Windows上搭建基于VIM 的Rails开发环境</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/PdQ1fsDYBTI/setup-rails-dev-on-windows.html</link>
		<comments>http://www.ganshane.com/setup-rails-dev-on-windows.html#comments</comments>
		<pubDate>Thu, 02 Apr 2009 16:37:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[开发环境]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=267</guid>
		<description><![CDATA[最近要修改OA系统的Rails网站的程序，要修改的美观，我日一直在linux下，好久没用windows了，得建立个开发环境，随记录下来，供以后使用：

安装ruby
从ruby的官方网站下载1.8.6 One-Click Installer 下载地址为：http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
运行安装向导，安装过程中需要注意的是，要选中enable-rubygems,如下图：

下一步之后，选择安装目录，然后就开始了安装，如图：

紧接着就是安装完毕，安装完之后，启动一个dos命令行，查看是否安装成功.

至此ruby安装成功。
更新gem
打开命令行，如下运行：
gem -v
gem update &#8211;system
gem -v
运行的结果如下：

更新之后gem的版本是 1.3.1
安装Rails
我们这里采用rails的2.2.2版本，您可以选择最新版本安装，
gem install rails -v 2.2.2
安装最新的版本可以通过：
gem install rails
这个过程依赖你的网络，ADSL的话，大概一两分钟的样子，中间有可能感觉有点死的感觉，没关系，稍安勿躁，一会就好，安装的截图如下：

运行rails -v 查看版本信息为 2.2.2
安装sqlite3
平时很少使用windows，弄个sqlite3当做数据库吧，去sqlite3的老巢(http://www.sqlite.org)去下载最新版本的sqlite3数据库.需要下载两个文件，一个是command-line命令行工具，一个是dll文件，我这里选择的是3.6.12版本，下载地址分别是：
http://www.sqlite.org/sqlite-3_6_12.zip
http://www.sqlite.org/sqlitedll-3_6_12.zip
下载完之后，把exe和dll解压缩放到ruby的bin目录下
然后在命令行运行:
sqlite3 -version
可以查看sqlite的版本，至此sqlite3安装成功，还需要安装ruby连接sqlite的库，运行：
gem install sqlite3-ruby -v 1.2.3
目前sqlite3-ruby接口的1.2.4接口还不能在windows上使用，只好使用1.2.3了。
安装开发工具 gvim
去vim的官方网站下载gvim，当前版本为7.2，下载地址为：
ftp://ftp.vim.org/pub/vim/pc/gvim72.exe
双击直接安装即可
下载支持Rails的插件
http://www.vim.org/scripts/script.php?script_id=1567
当前下载了3.4版本，下载后解压缩到vim安装目录下的vimfiles下，此时在运行gvim，你会发现在plugin菜单下多了一个rails的菜单.
开发过程肯定少不了和版本控制打交道，可以安装一个版本控制的插件VCSCommand,支持好多种版本控制，下载地址：
http://www.vim.org/scripts/script.php?script_id=90
我们在来安装超号称史上最牛的vim的配置文件：
http://amix.dk/blog/viewEntry/51
配好了之后vim的效果如下：


Random Posts

[架构师]04.沟通是金;伴随透明度和领导能力
Linux秘笈5. 用dirs, pushd和popd保存一些目录
[Linux秘笈28].显示用户连接时间
[命令集]查看硬件信息
[命令集3.2]Linux下和磁盘相关的命令

]]></description>
			<content:encoded><![CDATA[<p>最近要修改<a title="OA系统" href="http://www.fepss.com">OA系统</a>的Rails网站的程序，要修改的美观，我日一直在linux下，好久没用windows了，得建立个开发环境，随记录下来，供以后使用：</p>
<ol>
<li>安装ruby<br />
从ruby的官方网站下载1.8.6 One-Click Installer 下载地址为：http://rubyforge.org/frs/download.php/29263/ruby186-26.exe<br />
运行安装向导，安装过程中需要注意的是，要选中enable-rubygems,如下图：</li>
<li><span id="more-267"></span>
<div id="attachment_270" class="wp-caption alignnone" style="width: 160px"><a href="http://www.ganshane.com/uploads/2009/04/ruby_install.jpg"><img class="size-thumbnail wp-image-270" title="ruby_install" src="http://www.ganshane.com/uploads/2009/04/ruby_install-150x150.jpg" alt="ruby" width="150" height="150" /></a><p class="wp-caption-text">ruby</p></div>
<p>下一步之后，选择安装目录，然后就开始了安装，如图：<br />
<a href="http://www.ganshane.com/uploads/2009/04/ruby_install2.jpg"><img class="alignnone size-medium wp-image-271" title="ruby_install2" src="http://www.ganshane.com/uploads/2009/04/ruby_install2-300x234.jpg" alt="ruby_install2" width="300" height="234" /></a><br />
紧接着就是安装完毕，安装完之后，启动一个dos命令行，查看是否安装成功.<br />
<a href="http://www.ganshane.com/uploads/2009/04/dos1.jpg"><img class="alignnone size-medium wp-image-272" title="dos1" src="http://www.ganshane.com/uploads/2009/04/dos1-300x196.jpg" alt="dos1" width="300" height="196" /></a><br />
至此ruby安装成功。</li>
<li>更新gem<br />
打开命令行，如下运行：<br />
gem -v<br />
gem update &#8211;system<br />
gem -v<br />
运行的结果如下：<br />
<a href="http://www.ganshane.com/uploads/2009/04/dos2.jpg"><img class="alignnone size-medium wp-image-273" title="dos2" src="http://www.ganshane.com/uploads/2009/04/dos2-300x196.jpg" alt="dos2" width="300" height="196" /></a><br />
更新之后gem的版本是 1.3.1</li>
<li>安装Rails<br />
我们这里采用rails的2.2.2版本，您可以选择最新版本安装，<br />
gem install rails -v 2.2.2<br />
安装最新的版本可以通过：<br />
gem install rails<br />
这个过程依赖你的网络，ADSL的话，大概一两分钟的样子，中间有可能感觉有点死的感觉，没关系，稍安勿躁，一会就好，安装的截图如下：<br />
<a href="http://www.ganshane.com/uploads/2009/04/dos3.jpg"><img class="alignnone size-medium wp-image-274" title="dos3" src="http://www.ganshane.com/uploads/2009/04/dos3-300x196.jpg" alt="dos3" width="300" height="196" /></a></p>
<p>运行rails -v 查看版本信息为 2.2.2</li>
<li>安装sqlite3<br />
平时很少使用windows，弄个sqlite3当做数据库吧，去sqlite3的老巢(http://www.sqlite.org)去下载最新版本的sqlite3数据库.需要下载两个文件，一个是command-line命令行工具，一个是dll文件，我这里选择的是3.6.12版本，下载地址分别是：<br />
http://www.sqlite.org/sqlite-3_6_12.zip<br />
http://www.sqlite.org/sqlitedll-3_6_12.zip</p>
<p>下载完之后，把exe和dll解压缩放到ruby的bin目录下<br />
然后在命令行运行:<br />
sqlite3 -version<br />
可以查看sqlite的版本，至此sqlite3安装成功，还需要安装ruby连接sqlite的库，运行：<br />
gem install sqlite3-ruby -v 1.2.3<br />
目前sqlite3-ruby接口的1.2.4接口还不能在windows上使用，只好使用1.2.3了。</li>
<li>安装开发工具 gvim<br />
去vim的官方网站下载gvim，当前版本为7.2，下载地址为：<br />
ftp://ftp.vim.org/pub/vim/pc/gvim72.exe<br />
双击直接安装即可<br />
下载支持Rails的插件<br />
http://www.vim.org/scripts/script.php?script_id=1567<br />
当前下载了3.4版本，下载后解压缩到vim安装目录下的vimfiles下，此时在运行gvim，你会发现在plugin菜单下多了一个rails的菜单.<br />
开发过程肯定少不了和版本控制打交道，可以安装一个版本控制的插件VCSCommand,支持好多种版本控制，下载地址：<br />
http://www.vim.org/scripts/script.php?script_id=90<br />
我们在来安装超号称史上最牛的vim的配置文件：<br />
http://amix.dk/blog/viewEntry/51</p>
<p>配好了之后vim的效果如下：<br />
<a href="http://www.ganshane.com/uploads/2009/04/gvim.jpg"><img class="alignnone size-medium wp-image-275" title="gvim" src="http://www.ganshane.com/uploads/2009/04/gvim-300x225.jpg" alt="gvim" width="300" height="225" /></a></li>
</ol>
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/git-on-svn.html" title="围绕在SVN(subversion)周围的GIT运用">围绕在SVN(subversion)周围的GIT运用</a></li>
<li><a href="http://www.ganshane.com/linux-ps3-shell-variable.html" title="[Linux秘籍31] PS3 - 在shell脚本中的提示符">[Linux秘籍31] PS3 - 在shell脚本中的提示符</a></li>
<li><a href="http://www.ganshane.com/%e8%b4%a2%e5%8a%a1%e8%bd%af%e4%bb%b6accounting-software%e7%9a%84%e7%8e%b0%e7%8a%b6%e5%92%8c%e5%8f%91%e5%b1%95%e6%96%b9%e5%90%91.html" title=" 财务软件(accounting software)的现状和发展方向"> 财务软件(accounting software)的现状和发展方向</a></li>
<li><a href="http://www.ganshane.com/linux%e7%a7%98%e7%ac%8811-%e6%98%be%e7%a4%ba%e6%9c%aa%e6%9d%a5%e7%9a%84%e6%97%a5%e6%9c%9f%e5%92%8c%e6%97%b6%e9%97%b4.html" title="Linux秘笈11. 显示未来的日期和时间">Linux秘笈11. 显示未来的日期和时间</a></li>
<li><a href="http://www.ganshane.com/linux-command-xargs.html" title="Linux秘笈22. Xargs命令">Linux秘笈22. Xargs命令</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/kH3mZzYLQebMEYtyqEnQsxQkmhs/0/da"><img src="http://feedads.g.doubleclick.net/~a/kH3mZzYLQebMEYtyqEnQsxQkmhs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kH3mZzYLQebMEYtyqEnQsxQkmhs/1/da"><img src="http://feedads.g.doubleclick.net/~a/kH3mZzYLQebMEYtyqEnQsxQkmhs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/PdQ1fsDYBTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/setup-rails-dev-on-windows.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/setup-rails-dev-on-windows.html</feedburner:origLink></item>
		<item>
		<title>[命令集3.8]通过Samba和Windows进行数据共享</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/gCpi5DoC9Bk/linux-through-samba-share-windows.html</link>
		<comments>http://www.ganshane.com/linux-through-samba-share-windows.html#comments</comments>
		<pubDate>Thu, 02 Apr 2009 06:46:51 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[command]]></category>

		<category><![CDATA[Hack]]></category>

		<category><![CDATA[命令]]></category>

		<category><![CDATA[技巧]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=262</guid>
		<description><![CDATA[现在windows大行天下，难免要和windows的机器进行共享数据，通过linux中的samba协议能够获得windows的共享数据。
假设我们要访问计算机 smbserver 上的名叫 myshare 的 SMB 共享,在 window PC 上键入的地址是
\\smbserver\myshare\。我挂载到 /mnt/smbshare 上。注意 cifs 必须是 IP 或 DNS 名,不是 Windows 名
字。

Linux
# smbclient -U user -I 192.168.16.229 -L //smbshare/    # 列出共享
# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare
# mount -t cifs -o username=winuser,password=winpwd //192.168.16.229/myshare /mnt/share
此外,mount.cifs 软件包可以存储认证到一个文件中。例如,/home/user/.smb:
username=winuser
password=winpwd
现在可以像下面那样挂载:
# mount -t cifs -o credentials=/home/user/.smb //192.168.16.229/myshare /mnt/smbshare
FreeBSD
使用 -I [...]]]></description>
			<content:encoded><![CDATA[<p>现在windows大行天下，难免要和windows的机器进行共享数据，通过linux中的samba协议能够获得windows的共享数据。<br />
假设我们要访问计算机 smbserver 上的名叫 myshare 的 SMB 共享,在 window PC 上键入的地址是<br />
\\smbserver\myshare\。我挂载到 /mnt/smbshare 上。注意 cifs 必须是 IP 或 DNS 名,不是 Windows 名<br />
字。</p>
<p><span id="more-262"></span><br />
Linux<br />
# smbclient -U user -I 192.168.16.229 -L //smbshare/    # 列出共享<br />
# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare<br />
# mount -t cifs -o username=winuser,password=winpwd //192.168.16.229/myshare /mnt/share<br />
此外,mount.cifs 软件包可以存储认证到一个文件中。例如,/home/user/.smb:<br />
username=winuser<br />
password=winpwd<br />
现在可以像下面那样挂载:<br />
# mount -t cifs -o credentials=/home/user/.smb //192.168.16.229/myshare /mnt/smbshare<br />
FreeBSD<br />
使用 -I 来获取 IP (或 DNS 名);smbserver 是 Windows 名。<br />
# smbutil view -I 192.168.16.229 //winuser@smbserver    # 列出共享<br />
# mount_smbfs -I 192.168.16.229 //winuser@smbserver/myshare /mnt/smbshare<br />
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/linux-ps2-continuation-interactive-prompt.html" title="[linux秘笈30]. PS2 - 持续交互的提示符">[linux秘笈30]. PS2 - 持续交互的提示符</a></li>
<li><a href="http://www.ganshane.com/freebsd-boot-command.html" title="[命令集3.3]FreeBSD下的启动引导">[命令集3.3]FreeBSD下的启动引导</a></li>
<li><a href="http://www.ganshane.com/linux-diff-comman.html" title="[linux秘笈27]Diff命令">[linux秘笈27]Diff命令</a></li>
<li><a href="http://www.ganshane.com/linux-command-stat.html" title="[linux秘笈26]Stat命令">[linux秘笈26]Stat命令</a></li>
<li><a href="http://www.ganshane.com/linux-command-file-purview.html" title="[命令集3.1]linux文件的权限">[命令集3.1]linux文件的权限</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/vywpLF0ibz5_TsH3H3J2zVH9kU8/0/da"><img src="http://feedads.g.doubleclick.net/~a/vywpLF0ibz5_TsH3H3J2zVH9kU8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vywpLF0ibz5_TsH3H3J2zVH9kU8/1/da"><img src="http://feedads.g.doubleclick.net/~a/vywpLF0ibz5_TsH3H3J2zVH9kU8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/gCpi5DoC9Bk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/linux-through-samba-share-windows.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/linux-through-samba-share-windows.html</feedburner:origLink></item>
		<item>
		<title>[命令集3.7] 立刻创建swap分区</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/lDarlYmQv_A/linux-add-swap-on-the-fly.html</link>
		<comments>http://www.ganshane.com/linux-add-swap-on-the-fly.html#comments</comments>
		<pubDate>Tue, 24 Mar 2009 02:28:21 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[命令]]></category>

		<category><![CDATA[技巧]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=255</guid>
		<description><![CDATA[假设你需要很多的 swap 空间 (即刻),如一个 2GB 文件 /swap2gb (只限 Linux)。

?View Code BASH# dd if=/dev/zero of=/swap2gb bs=1024k count=2000
# mkswap /swap2gb                    # 创建交换区
# swapon /swap2gb               [...]]]></description>
			<content:encoded><![CDATA[<p>假设你需要很多的 swap 空间 (即刻),如一个 2GB 文件 /swap2gb (只限 Linux)。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p255code4'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2554"><td class="code" id="p255code4"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># dd if=/dev/zero of=/swap2gb bs=1024k count=2000</span>
<span style="color: #666666; font-style: italic;"># mkswap /swap2gb                    # 创建交换区</span>
<span style="color: #666666; font-style: italic;"># swapon /swap2gb                    # 激活这个 swap。现在可以使用了</span>
<span style="color: #666666; font-style: italic;"># swapoff /swap2gb                   # 当使用完毕,释放这个 swap</span>
<span style="color: #666666; font-style: italic;"># rm /swap2gb</span></pre></td></tr></table></div>

<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/linux-command-disk.html" title="[命令集3.2]Linux下和磁盘相关的命令">[命令集3.2]Linux下和磁盘相关的命令</a></li>
<li><a href="http://www.ganshane.com/linux-sort-command.html" title="Linux秘笈23.Sort命令">Linux秘笈23.Sort命令</a></li>
<li><a href="http://www.ganshane.com/git-on-svn.html" title="围绕在SVN(subversion)周围的GIT运用">围绕在SVN(subversion)周围的GIT运用</a></li>
<li><a href="http://www.ganshane.com/install-atheros-driver-on-ubuntu.html" title="ubuntu 上安装atheros无线驱动">ubuntu 上安装atheros无线驱动</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/DOWjcc3WlGEYbSA_yV_2gdzU9zE/0/da"><img src="http://feedads.g.doubleclick.net/~a/DOWjcc3WlGEYbSA_yV_2gdzU9zE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DOWjcc3WlGEYbSA_yV_2gdzU9zE/1/da"><img src="http://feedads.g.doubleclick.net/~a/DOWjcc3WlGEYbSA_yV_2gdzU9zE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/lDarlYmQv_A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/linux-add-swap-on-the-fly.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/linux-add-swap-on-the-fly.html</feedburner:origLink></item>
		<item>
		<title>[Linux秘籍31] PS3 - 在shell脚本中的提示符</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/IJ-Kak4Xkc8/linux-ps3-shell-variable.html</link>
		<comments>http://www.ganshane.com/linux-ps3-shell-variable.html#comments</comments>
		<pubDate>Tue, 24 Mar 2009 02:22:50 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=252</guid>
		<description><![CDATA[在shell脚本中，你能够定义一个自定义的提示符,举个例子如下：
当没有定义PS3的时候

?View Code BASHjcai@jcai-notebook:~/tmp$ cat ps3.sh 
  select i in mon tue wed exit
  do
     case $i in
        mon&#41; echo &#34;Monday&#34;;;
        tue&#41; echo &#34;Tuesday&#34;;;
        wed&#41; echo &#34;Wednesday&#34;;;
   [...]]]></description>
			<content:encoded><![CDATA[<p>在shell脚本中，你能够定义一个自定义的提示符,举个例子如下：<br />
当没有定义PS3的时候</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p252code7'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2527"><td class="code" id="p252code7"><pre class="bash" style="font-family:monospace;">jcai<span style="color: #000000; font-weight: bold;">@</span>jcai-notebook:~<span style="color: #000000; font-weight: bold;">/</span>tmp$ <span style="color: #c20cb9; font-weight: bold;">cat</span> ps3.sh 
  <span style="color: #000000; font-weight: bold;">select</span> i <span style="color: #000000; font-weight: bold;">in</span> mon tue wed <span style="color: #7a0874; font-weight: bold;">exit</span>
  <span style="color: #000000; font-weight: bold;">do</span>
     <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">in</span>
        mon<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Monday&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        tue<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tuesday&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        wed<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Wednesday&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        <span style="color: #7a0874; font-weight: bold;">exit</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">exit</span><span style="color: #000000; font-weight: bold;">;;</span>
     <span style="color: #000000; font-weight: bold;">esac</span>
  <span style="color: #000000; font-weight: bold;">done</span>
jcai<span style="color: #000000; font-weight: bold;">@</span>jcai-notebook:~<span style="color: #000000; font-weight: bold;">/</span>tmp$ .<span style="color: #000000; font-weight: bold;">/</span>ps3.sh 
<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> mon
<span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> tue
<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> wed
<span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">exit</span>
<span style="color: #666666; font-style: italic;">#? 1</span>
Monday
<span style="color: #666666; font-style: italic;">#? 2</span>
Tuesday
<span style="color: #666666; font-style: italic;">#? 4</span></pre></td></tr></table></div>

<p>当定义了PS3的时候如下：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p252code8'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2528"><td class="code" id="p252code8"><pre class="bash" style="font-family:monospace;">jcai<span style="color: #000000; font-weight: bold;">@</span>jcai-notebook:~<span style="color: #000000; font-weight: bold;">/</span>tmp$ <span style="color: #c20cb9; font-weight: bold;">cat</span> ps3.sh
  <span style="color: #007800;">PS3</span>=<span style="color: #ff0000;">&quot;请选择 1-4：&quot;</span>
  <span style="color: #000000; font-weight: bold;">select</span> i <span style="color: #000000; font-weight: bold;">in</span> mon tue wed <span style="color: #7a0874; font-weight: bold;">exit</span>
  <span style="color: #000000; font-weight: bold;">do</span>
     <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">in</span>
        mon<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Monday&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        tue<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tuesday&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        wed<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Wednesday&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        <span style="color: #7a0874; font-weight: bold;">exit</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">exit</span><span style="color: #000000; font-weight: bold;">;;</span>
     <span style="color: #000000; font-weight: bold;">esac</span>
  <span style="color: #000000; font-weight: bold;">done</span>
jcai<span style="color: #000000; font-weight: bold;">@</span>jcai-notebook:~<span style="color: #000000; font-weight: bold;">/</span>tmp$ .<span style="color: #000000; font-weight: bold;">/</span>ps3.sh 
<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> mon
<span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> tue
<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> wed
<span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">exit</span>
请选择 <span style="color: #000000;">1</span>-<span style="color: #000000;">4</span>：<span style="color: #000000;">2</span>
Tuesday
请选择 <span style="color: #000000;">1</span>-<span style="color: #000000;">4</span>：<span style="color: #000000;">4</span></pre></td></tr></table></div>

<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/mount-remount-a-file-system.html" title="[命令集3.6]挂载/重挂载一个文件系统">[命令集3.6]挂载/重挂载一个文件系统</a></li>
<li><a href="http://www.ganshane.com/linux-ps2-continuation-interactive-prompt.html" title="[linux秘笈30]. PS2 - 持续交互的提示符">[linux秘笈30]. PS2 - 持续交互的提示符</a></li>
<li><a href="http://www.ganshane.com/linux-system-mount-and-disk-stat.html" title="[命令集3.4]系统挂载点/磁盘使用情况">[命令集3.4]系统挂载点/磁盘使用情况</a></li>
<li><a href="http://www.ganshane.com/freebsd-boot-command.html" title="[命令集3.3]FreeBSD下的启动引导">[命令集3.3]FreeBSD下的启动引导</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/oZ81narCi_D0lIL4iqg2KX_Kr2E/0/da"><img src="http://feedads.g.doubleclick.net/~a/oZ81narCi_D0lIL4iqg2KX_Kr2E/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/oZ81narCi_D0lIL4iqg2KX_Kr2E/1/da"><img src="http://feedads.g.doubleclick.net/~a/oZ81narCi_D0lIL4iqg2KX_Kr2E/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/IJ-Kak4Xkc8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/linux-ps3-shell-variable.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/linux-ps3-shell-variable.html</feedburner:origLink></item>
		<item>
		<title>[命令集3.6]挂载/重挂载一个文件系统</title>
		<link>http://feedproxy.google.com/~r/ganshane/kWsz/~3/TzSQc8zFdVc/mount-remount-a-file-system.html</link>
		<comments>http://www.ganshane.com/mount-remount-a-file-system.html#comments</comments>
		<pubDate>Mon, 23 Mar 2009 02:11:26 +0000</pubDate>
		<dc:creator>jcai</dc:creator>
		
		<category><![CDATA[Hacks]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[command]]></category>

		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://www.ganshane.com/?p=249</guid>
		<description><![CDATA[举个 cdrom 的例子。如果已经列于 /etc/fstab 中:

 # mount /cdrom

或在 /dev/ 中查找设备,亦或使用 dmesg 命令
FreeBSD

 # mount -v -t cd9660 /dev/cd0c /mnt # cdrom
 # mount_cd9660 /dev/wcd0c /cdrom      # 另外一个方法
 # mount -v -t msdos /dev/fd0c /mnt # 软驱

/etc/fstab 中的一条:

 # Device            [...]]]></description>
			<content:encoded><![CDATA[<p>举个 cdrom 的例子。如果已经列于 /etc/fstab 中:</p>
<pre>
 # mount /cdrom
</pre>
<p>或在 /dev/ 中查找设备,亦或使用 dmesg 命令<br />
FreeBSD</p>
<pre>
 # mount -v -t cd9660 /dev/cd0c /mnt # cdrom
 # mount_cd9660 /dev/wcd0c /cdrom      # 另外一个方法
 # mount -v -t msdos /dev/fd0c /mnt # 软驱
</pre>
<p>/etc/fstab 中的一条:</p>
<pre>
 # Device                 Mountpoint      FStype  Options         Dump    Pass#
 /dev/acd0                /cdrom          cd9660  ro,noauto       0       0
</pre>
<p>要允许用户做这些,可以这么做:</p>
<pre>
 # sysctl vfs.usermount=1   # 或者在 /etc/sysctl.conf 中插入一条 "vfs.usermount=1"
</pre>
<p>Linux</p>
<pre>
 # mount -t auto /dev/cdrom /mnt/cdrom # 典型的 cdrom 挂载命令
 # mount /dev/hdc -t iso9660 -r /cdrom # IDE
 # mount /dev/sdc0 -t iso9660 -r /cdrom # SCSI
</pre>
<p>/etc/fstab 中的条目:<br />
 /dev/cdrom   /media/cdrom   subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0<br />
用 Linux 挂载一个 FreeBSD 分区<br />
用 fdisk 查找分区号,这通常是 root 分区,但也可能是其他 BSD slice。如果 FreeBSD 有许多 slice,他们<br />
不列于同一个 fdisk 分区表中,但可见于 /dev/sda* 或 /dev/hda* 中。</p>
<pre>
 # fdisk /dev/sda                      # 查找 FreeBSD 分区
 /dev/sda3 *          5357         7905    20474842+ a5 FreeBSD
 # mount -t ufs -o ufstype=ufs2,ro /dev/sda3 /mnt
 /dev/sda10 = /tmp; /dev/sda11 /usr # 其他 slice
</pre>
<p>重挂载<br />
不用卸载一个设备来重挂载。 对 fsck 来说是必须的。举个例子:</p>
<pre>
 # mount -o remount,ro /               # Linux
 # mount -o ro /                       # FreeBSD
</pre>
<p>从 cdrom 拷贝原始数据进一个 iso 映像文件:</p>
<pre>
# dd if=/dev/cd0c of=file.iso
</pre>
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.ganshane.com/linux-through-samba-share-windows.html" title="[命令集3.8]通过Samba和Windows进行数据共享">[命令集3.8]通过Samba和Windows进行数据共享</a></li>
<li><a href="http://www.ganshane.com/linux-ps2-continuation-interactive-prompt.html" title="[linux秘笈30]. PS2 - 持续交互的提示符">[linux秘笈30]. PS2 - 持续交互的提示符</a></li>
<li><a href="http://www.ganshane.com/freebsd-boot-command.html" title="[命令集3.3]FreeBSD下的启动引导">[命令集3.3]FreeBSD下的启动引导</a></li>
<li><a href="http://www.ganshane.com/linux-diff-comman.html" title="[linux秘笈27]Diff命令">[linux秘笈27]Diff命令</a></li>
<li><a href="http://www.ganshane.com/linux-command-stat.html" title="[linux秘笈26]Stat命令">[linux秘笈26]Stat命令</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/DX-W6gRZLunywrPDZNJ7WFC5glo/0/da"><img src="http://feedads.g.doubleclick.net/~a/DX-W6gRZLunywrPDZNJ7WFC5glo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DX-W6gRZLunywrPDZNJ7WFC5glo/1/da"><img src="http://feedads.g.doubleclick.net/~a/DX-W6gRZLunywrPDZNJ7WFC5glo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ganshane/kWsz/~4/TzSQc8zFdVc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ganshane.com/mount-remount-a-file-system.html/feed</wfw:commentRss>
		<feedburner:origLink>http://www.ganshane.com/mount-remount-a-file-system.html</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.752 seconds --><!-- Cached page generated by WP-Super-Cache on 2010-03-01 19:50:37 -->
