<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP外包开发服务网</title>
	<atom:link href="http://www.china-php.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.china-php.com</link>
	<description>连云港古蓝网络科技有限公司旗下服务品牌</description>
	<lastBuildDate>Thu, 27 Jan 2011 07:59:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>东海公安局项目顺利通过验收</title>
		<link>http://www.china-php.com/cases/327.html</link>
		<comments>http://www.china-php.com/cases/327.html#comments</comments>
		<pubDate>Mon, 29 Nov 2010 09:33:10 +0000</pubDate>
		<dc:creator>古蓝科技</dc:creator>
				<category><![CDATA[成功案例]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=327</guid>
		<description><![CDATA[项目虽然难度不大，但是因为是政府网站，所以在安全方面非常重视，我们也做了专门的预案。我们为政府服务已经不是第一次了，每一次合作都有新的体会，政府的网站也在与时俱进，和以前简单的网站已经有了较大区别，领导意识也有很大变化，这对我们行业来说，是非常大的利好。 项目网址http://donghai.lygga.gov.cn/]]></description>
			<content:encoded><![CDATA[<p>项目虽然难度不大，但是因为是政府网站，所以在安全方面非常重视，我们也做了专门的预案。我们为政府服务已经不是第一次了，每一次合作都有新的体会，政府的网站也在与时俱进，和以前简单的网站已经有了较大区别，领导意识也有很大变化，这对我们行业来说，是非常大的利好。</p>
<p>项目网址http://donghai.lygga.gov.cn/</p>
<p><a rel="attachment wp-att-328" href="http://www.china-php.com/cases/327.html/attachment/%e6%8d%95%e8%8e%b7"><img class="aligncenter size-medium wp-image-328" title="抓图" src="http://www.china-php.com/wp-content/uploads/2010/11/捕获-800x516.jpg" alt="" width="800" height="516" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/cases/327.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我市公安网警支队在我公司设立网安警务室</title>
		<link>http://www.china-php.com/news/275.html</link>
		<comments>http://www.china-php.com/news/275.html#comments</comments>
		<pubDate>Sat, 27 Nov 2010 15:24:05 +0000</pubDate>
		<dc:creator>古蓝科技</dc:creator>
				<category><![CDATA[公司动态]]></category>
		<category><![CDATA[公司成绩]]></category>
		<category><![CDATA[揭牌仪式]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=275</guid>
		<description><![CDATA[我市公安局网警支队为了更好提供服务，在我市选择两个网络安全警务室。经过多轮竞争，我公司凭借着较强的影响力顺利争取到这个机会。日前，网警支队吕支队长到我公司揭牌并指导工作。 网安警务室在我公司建立，这充分说明我们在行业里的影响力，也体现了有关部门对我们的关心。从此，网安警务室就和我们在一个办公室上班了，这让我们的安全感提高很大。 准备揭牌 吕支队长与公司代表共同揭牌 给铜牌来个特写 警员现场办公]]></description>
			<content:encoded><![CDATA[<p>我市公安局网警支队为了更好提供服务，在我市选择两个网络安全警务室。经过多轮竞争，我公司凭借着较强的影响力顺利争取到这个机会。日前，网警支队吕支队长到我公司揭牌并指导工作。</p>
<p>网安警务室在我公司建立，这充分说明我们在行业里的影响力，也体现了有关部门对我们的关心。从此，网安警务室就和我们在一个办公室上班了，这让我们的安全感提高很大。</p>
<p style="text-align: center;"><a rel="attachment wp-att-276" href="http://www.china-php.com/news/275.html/attachment/2"><img class="alignnone size-medium wp-image-276" title="铜牌" src="http://www.china-php.com/wp-content/uploads/2010/11/2-450x323.jpg" alt="" width="450" height="323" /></a></p>
<p style="text-align: center;">准备揭牌</p>
<p style="text-align: center;"><a rel="attachment wp-att-277" href="http://www.china-php.com/news/275.html/attachment/3-%e6%8b%b7%e8%b4%9d"><img class="alignnone size-medium wp-image-277" title="揭牌" src="http://www.china-php.com/wp-content/uploads/2010/11/3-拷贝-450x323.jpg" alt="" width="450" height="323" /></a></p>
<p style="text-align: center;">吕支队长与公司代表共同揭牌</p>
<p style="text-align: center;"><a rel="attachment wp-att-278" href="http://www.china-php.com/news/275.html/attachment/4"><img class="alignnone size-medium wp-image-278" title="铜牌特写" src="http://www.china-php.com/wp-content/uploads/2010/11/4-450x323.jpg" alt="" width="450" height="323" /></a></p>
<p style="text-align: center;">给铜牌来个特写</p>
<p style="text-align: center;"><a rel="attachment wp-att-280" href="http://www.china-php.com/news/275.html/attachment/6"><img class="alignnone size-medium wp-image-280" title="办公现场" src="http://www.china-php.com/wp-content/uploads/2010/11/6-450x323.jpg" alt="" width="450" height="323" /></a></p>
<p style="text-align: center;">警员现场办公</p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/news/275.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Video视频技术</title>
		<link>http://www.china-php.com/experience/218.html</link>
		<comments>http://www.china-php.com/experience/218.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 13:11:34 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=218</guid>
		<description><![CDATA[　　HTML5是近十年来Web标准最巨大的飞跃。HTML5并非仅仅用来表示Web 内容，它也将Web带入一个成熟的应用平台，在这个平台上，视频，音频，动画，以及同电脑的交互都被标准化。随着HTML5的发展，各个浏览器都已经或即将支持HTML5。在大潮流的推动下，微软也表示将把HTML5作为IE9的核心，并将全力投入HTML5。 　　很多平时最喜欢上网看视频、玩游戏的朋友经常抱怨不爽，因为网上好多视频和游戏都需要安装Flash插件，并且速度也跟不上！HTML5的出现解决了这一难题。HTML5提供了音频视频的标准接口，实现了无需任何插件支持，只需浏览器支持相应的HTML5标签。怪不得都说HTML5是Flash的终结者！虽然Safari5、Firefox4和Chrome6等浏览器加入了HTML5技术，可以免除Flash插件的安装直接播放视频 ！ 视频格式 　　当前，video 元素支持两种视频格式： 　　 IE 8 Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg √ √ √ MPEG 4 √ √ Ogg = 带有 Thedora 视频编码和 Vorbis 音频编码的 Ogg 文件 　　MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件 实例 　　&#60;video src=&#8221;movie.ogg&#8221; width=&#8221;320&#8243; height=&#8221;240&#8243; controls=&#8221;controls&#8221;&#62;Your browser does not support the video tag.&#60;/video&#62;上面的例子使用一个 Ogg 文件，适用于Firefox、Opera 以及 Chrome 浏览器。 　　要确保适用于 Safari 浏览器，视频文件必须是 MPEG4 类型。 　　video 元素允许多个 source 元素。source 元素可以链接不同的视频文件。 国内浏览器的支持情况 　　 浏览器\Video Video(element) src controls autoplay poster preload loop width height ie6 N - - - &#8230; <span class="read-more"><a href="http://www.china-php.com/experience/218.html">Read More...</a></span>]]></description>
			<content:encoded><![CDATA[<p>　　HTML5是近十年来Web标准最巨大的飞跃。HTML5并非仅仅用来表示Web 内容，它也将Web带入一个成熟的应用平台，在这个平台上，视频，音频，动画，以及同电脑的交互都被标准化。随着HTML5的发展，各个浏览器都已经或即将支持HTML5。在大潮流的推动下，微软也表示将把HTML5作为IE9的核心，并将全力投入HTML5。</p>
<p>　　很多平时最喜欢上网看视频、玩游戏的朋友经常抱怨不爽，因为网上好多视频和游戏都需要安装Flash插件，并且速度也跟不上！HTML5的出现解决了这一难题。HTML5提供了音频视频的标准接口，实现了无需任何插件支持，只需浏览器支持相应的HTML5标签。怪不得都说HTML5是Flash的终结者！虽然Safari5、Firefox4和Chrome6等浏览器加入了HTML5技术，可以免除Flash插件的安装直接播放视频 ！</p>
<h3><a name="1_1"></a>视频格式</h3>
<p>　　当前，video 元素支持两种视频格式：</p>
<p>　　</p>
<table>
<tbody>
<tr>
<td></td>
<td>IE 8</td>
<td>Firefox 3.5</td>
<td>Opera 10.5</td>
<td>Chrome 3.0</td>
<td>Safari 3.0</td>
</tr>
<tr>
<td>Ogg</td>
<td></td>
<td>√</td>
<td>√</td>
<td>√</td>
<td></td>
</tr>
<tr>
<td>MPEG 4</td>
<td></td>
<td></td>
<td></td>
<td>√</td>
<td>√</td>
</tr>
</tbody>
</table>
<p>Ogg = 带有 Thedora 视频编码和 Vorbis 音频编码的 Ogg 文件</p>
<p>　　MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件</p>
<h3><a name="1_2"></a>实例</h3>
<p>　　&lt;video src=&#8221;movie.ogg&#8221; width=&#8221;320&#8243; height=&#8221;240&#8243; controls=&#8221;controls&#8221;&gt;Your browser does not support the video tag.&lt;/video&gt;上面的例子使用一个 Ogg 文件，适用于Firefox、Opera 以及 Chrome 浏览器。</p>
<p>　　要确保适用于 Safari 浏览器，视频文件必须是 MPEG4 类型。</p>
<p>　　video 元素允许多个 source 元素。source 元素可以链接不同的视频文件。</p>
<h3><a name="1_3"></a>国内浏览器的支持情况</h3>
<p>　　</p>
<table>
<tbody>
<tr>
<td>浏览器\Video</td>
<td>Video(element)</td>
<td>src</td>
<td>controls</td>
<td>autoplay</td>
<td>poster</td>
<td>preload</td>
<td>loop</td>
<td>width</td>
<td>height</td>
</tr>
<tr>
<td>ie6</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ie7</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ie8</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>ie9</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>360安全浏览器</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>傲游2.X</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>傲游3</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>腾讯TT</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>世界之窗</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>FireFox</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>搜狗浏览器</td>
<td>N</td>
<td>N</td>
<td>-</td>
<td>-</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Chrome</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Safari</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>oprea</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>　最近有网友使用IE内核浏览器登录优酷等视频网站观看视频时，视频窗口会出现“您的浏览器不支持html5 video ”的字样，视频无法观看，解决办法是下载一个由Christian Adams开发的IE浏览器插件刚刚出现，它可以帮助“老掉牙”的IE支持HTML5的&lt;video&gt;标签，像Google Chrome, Firefox, Safari和Opera一样能够播放HTML5视频</p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/218.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于HTML5前沿技术探讨</title>
		<link>http://www.china-php.com/experience/216.html</link>
		<comments>http://www.china-php.com/experience/216.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 13:10:21 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=216</guid>
		<description><![CDATA[HTML5的革命 HTML即超文本标记语言或超文本链接标示语言，是目前网络上应用最为广泛的语言，也是制作网页的主要语言。诞生于1993年的HTML，其文档制作并不是很复杂，且功能强大，支持不同数据格式的文件嵌入。 然而，HTML的最近一次升级还是1999年12月发布的HTML4。 乔布斯在檄文《关于Flash的思考》一文中说：“Flash是PC时代的产物，它是为个人电脑与鼠标发明的。”──其言外之意就是说已经不适应现在移动终端的需求。的确，诞生于上世纪末的HTML4仅是PC时代的产物（后继的XHTML语言除了语法外与HTML4几乎没有区别），在它诞生至今的10年里面，互联网世界已经发生了天翻地覆的变化：Netscape灰飞烟灭，微软的IE如今已经演化到了IE9；Firefox 从 Netscape 的死灰中诞生，重新占据了第二位；Safari和Chrome组成的Webkit（浏览器架构的一种）阵营为移动互联网世界勾画出了蓝图。 更重要的是，在如今的后Web2.0时代，人机交互、人网交互已经成为常态，对富媒体应用和本地存储的支持乏力成为现有浏览器的心腹之患。而将Web由内容平台改造为标准化的应用平台，并统一各大平台阵营的标准，正是HTML5的终极使命。 HTML5主要有以下几个特色：降低插件的重要性，简化Web开发；大幅提高对动态图像、位置服务、本地存储的支持；提高浏览器安全性。 很多业内人士认为HTML5以上特点是具有革命性的，特别是其丰富的标签体系，类似于内置了很多快捷键，将取代那些完成比较简单任务的插件，可以降低应用开发的技术门槛。 其实，由于鼓励创新，互联网在之前是非常欢迎浏览器插件的。而声音、动画及其他一些非常生动的网页，通过Adobe、 RealAudio、微软以及其他的一些公司开发的插件在网络呈现时也的确让人耳目一新。然而，问题很快就出现了，插件的接口是向所有人开放的，每个人都在尝试用自己定义的技术给网页增加新的功能，混乱不可避免。其中最有名的插件就是Flash，其他类似的插件更是数不胜数。 HTML5有望解决这一问题。举例来说，HTML5中的“video”标签使Web开发人员很容易地把视频内容与网页中的其他内容整合起来，使得Web的多媒体开发不再仅仅是使用Adobe的Flash、 微软的Silverlight和升阳的JavaFX——这些被垄断的富媒体开发工具的人员的专利。显然，这对互联网的富媒体化大有裨益。 总之，从获取到互动，从图片到视频，从云端到终端，当下互联网的复杂性，迫切需要HTML5这样的救世主出现。 其实，HTML5的诞生本身就是创新派“革命”的结果:万维网之父Tim Berners-Lee在创造出HTML的同时，建立了互联网标准化组织W3C（万维网联盟）。然而，在HTML之路上行走数年之后，W3C已经跟不上互联网时代的步伐。W3C当时认为，HTML4已经功德圆满，他们的下一步工作是语法升级的可扩展超文本置标语言XHTML。他们认为其可以将Web带入光明的未来。 然而，作为第三方的W3C组织忽略了一个重要的变量——在互联网时代崛起的科技巨头。实际上，在Netscape消失之后，IE并没有一统江湖。恰恰相反，浏览器进入了战国时代。Firefox、Opera、Safari相继诞生，而它们的背后都有着强大的支持力量。 于是，由于不满“互联网造物主”——W3C的思维僵化行为拖沓，苹果公司等新贵们自发组织成立了新的超文本语言标准工作组，这就是WHATWG（超文本应用科技工作组），其使命便是致力于HTML5的规范和普及。 现在看来，这些充满了野心和动力的科技巨擘，显然比无私的“互联网造物主”有力量的多。]]></description>
			<content:encoded><![CDATA[<p><strong>HTML5的革命</strong></p>
<p>HTML即超文本标记语言或超文本链接标示语言，是目前网络上应用最为广泛的语言，也是制作网页的主要语言。诞生于1993年的HTML，其文档制作并不是很复杂，且功能强大，支持不同数据格式的文件嵌入。</p>
<p>然而，HTML的最近一次升级还是1999年12月发布的HTML4。</p>
<p>乔布斯在檄文《关于Flash的思考》一文中说：“Flash是PC时代的产物，它是为个人电脑与鼠标发明的。”──其言外之意就是说已经不适应现在移动终端的需求。的确，诞生于上世纪末的HTML4仅是PC时代的产物（后继的XHTML语言除了语法外与HTML4几乎没有区别），在它诞生至今的10年里面，互联网世界已经发生了天翻地覆的变化：Netscape灰飞烟灭，微软的IE如今已经演化到了IE9；Firefox 从 Netscape 的死灰中诞生，重新占据了第二位；Safari和Chrome组成的Webkit（浏览器架构的一种）阵营为移动互联网世界勾画出了蓝图。</p>
<p>更重要的是，在如今的后Web2.0时代，人机交互、人网交互已经成为常态，对富媒体应用和本地存储的支持乏力成为现有浏览器的心腹之患。而将Web由内容平台改造为标准化的应用平台，并统一各大平台阵营的标准，正是HTML5的终极使命。</p>
<p>HTML5主要有以下几个特色：降低插件的重要性，简化Web开发；大幅提高对动态图像、位置服务、本地存储的支持；提高浏览器安全性。</p>
<p>很多业内人士认为HTML5以上特点是具有革命性的，特别是其丰富的标签体系，类似于内置了很多快捷键，将取代那些完成比较简单任务的插件，可以降低应用开发的技术门槛。</p>
<p>其实，由于鼓励创新，互联网在之前是非常欢迎浏览器插件的。而声音、动画及其他一些非常生动的网页，通过Adobe、 RealAudio、微软以及其他的一些公司开发的插件在网络呈现时也的确让人耳目一新。然而，问题很快就出现了，插件的接口是向所有人开放的，每个人都在尝试用自己定义的技术给网页增加新的功能，混乱不可避免。其中最有名的插件就是Flash，其他类似的插件更是数不胜数。</p>
<p>HTML5有望解决这一问题。举例来说，HTML5中的“video”标签使Web开发人员很容易地把视频内容与网页中的其他内容整合起来，使得Web的多媒体开发不再仅仅是使用Adobe的Flash、 微软的Silverlight和升阳的JavaFX——这些被垄断的富媒体开发工具的人员的专利。显然，这对互联网的富媒体化大有裨益。</p>
<p>总之，从获取到互动，从图片到视频，从云端到终端，当下互联网的复杂性，迫切需要HTML5这样的救世主出现。</p>
<p>其实，HTML5的诞生本身就是创新派“革命”的结果:万维网之父Tim Berners-Lee在创造出HTML的同时，建立了互联网标准化组织W3C（万维网联盟）。然而，在HTML之路上行走数年之后，W3C已经跟不上互联网时代的步伐。W3C当时认为，HTML4已经功德圆满，他们的下一步工作是语法升级的可扩展超文本置标语言XHTML。他们认为其可以将Web带入光明的未来。</p>
<p>然而，作为第三方的W3C组织忽略了一个重要的变量——在互联网时代崛起的科技巨头。实际上，在Netscape消失之后，IE并没有一统江湖。恰恰相反，浏览器进入了战国时代。Firefox、Opera、Safari相继诞生，而它们的背后都有着强大的支持力量。</p>
<p>于是，由于不满“互联网造物主”——W3C的思维僵化行为拖沓，苹果公司等新贵们自发组织成立了新的超文本语言标准工作组，这就是WHATWG（超文本应用科技工作组），其使命便是致力于HTML5的规范和普及。</p>
<p>现在看来，这些充满了野心和动力的科技巨擘，显然比无私的“互联网造物主”有力量的多。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/216.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell一句话技巧</title>
		<link>http://www.china-php.com/experience/214.html</link>
		<comments>http://www.china-php.com/experience/214.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 13:08:34 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=214</guid>
		<description><![CDATA[、$$变量保存所运行的当前进程的进程号。$0 代表脚本文件名。$# 代表参数的个数、$_变量中存放上一条命令中最后一个参数的值 2、trap 命令可以捕获控制台信号 答：利用trap可以做Ctrl+C结束脚本时需要做的清理操作如:trap &#8220;ClearPID&#8221; 1 2 3 15 3、tee将信息输出到多个文件 答：echo "ok" &#124; tee -a a.txt &#62;&#62;b.txt &#62;&#62;c.txt 4、查看本机tcp连接状态及数目统计 答：netstat -n &#124;awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' &#124; sort -n -k 2 -r 5、IFS变量 答： IFS用作shell指定的缺省域分隔符。原理上讲域分隔符可以是任意字符，但缺省通常为空格、新行或tab键。IFS在分隔文件或变量中各域时很有用。下面的例子将IFS设置为冒号，然后echo $PATH变量，给出一个目录分隔开来的可读性很强的路径列表。 6、while循环中最简单写死循环的方法为 答： while : do do someting done 7、 查出目前 ip_conntrack 记录最多的前五名 IP 答：cat /proc/net/ip_conntrack &#124; cut -d ' ' -f 10 &#124; cut -d '=' -f 2 &#124; sort &#124; uniq -c &#124; sort -nr &#124; head -n 5 8、linux bash中暂时屏蔽 alias 答：\ 对，正是这个斜线可以暂时屏蔽alias的定义，如：cp -r 就不会再有是否覆盖的提示了。 &#8230; <span class="read-more"><a href="http://www.china-php.com/experience/214.html">Read More...</a></span>]]></description>
			<content:encoded><![CDATA[<p>、$$变量保存所运行的当前进程的进程号。<strong>$0 </strong>代表脚本文件名。<strong>$# </strong>代表参数的个数、<strong>$_</strong>变量中存放上一条命令中最后一个参数的值</p>
<hr size="1" noshade="noshade" /><strong>2、</strong>trap <strong>命令可以捕获控制台信号</strong><br />
答：利用trap可以做Ctrl+C结束脚本时需要做的清理操作如:trap &#8220;ClearPID&#8221; 1 2 3 15</p>
<hr size="1" noshade="noshade" /><strong>3、tee将信息输出到多个文件</strong><br />
答：<code>echo "ok" | tee -a a.txt &gt;&gt;b.txt &gt;&gt;c.txt</code></p>
<hr size="1" noshade="noshade" /><strong>4、查看本机tcp连接状态及数目统计</strong><br />
答：<code>netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -n -k 2 -r</code></p>
<hr size="1" noshade="noshade" /><strong>5、IFS变量</strong><br />
答：<br />
IFS用作shell指定的缺省域分隔符。原理上讲域分隔符可以是任意字符，但缺省通常为空格、新行或tab键。IFS在分隔文件或变量中各域时很有用。下面的例子将IFS设置为冒号，然后echo $PATH变量，给出一个目录分隔开来的可读性很强的路径列表。</p>
<hr size="1" noshade="noshade" /><strong>6、while循环中最简单写死循环的方法为</strong><br />
答：</p>
<div>
<div>while :<br />
do<br />
do someting<br />
done</div>
</div>
<hr size="1" noshade="noshade" /><strong>7、 查出目前 ip_conntrack 记录最多的前五名 IP</strong><br />
答：<code>cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5</code></p>
<hr size="1" noshade="noshade" /><strong>8、linux bash中暂时屏蔽 alias</strong><br />
答：\ 对，正是这个斜线可以暂时屏蔽alias的定义，如：cp -r 就不会再有是否覆盖的提示了。</p>
<hr size="1" noshade="noshade" /><strong>9、在文件中查找指定内容并且显示该内容，并不是显示内容所在的行</strong><br />
答：利用sed -o参数就可以解决问题了</p>
<hr size="1" noshade="noshade" /><strong>10、创建/删除多个连续的文件（大括号的应用）</strong><br />
答：利用大括号({})来搞定，如：</p>
<div>
<div>$ touch Front-{A,B,C}-Back<br />
$ ls -1<br />
Front-A-Back<br />
Front-B-Back<br />
Front-C-Back<br />
$ echo Number_{1..5}<br />
Number_1 Number_2 Number_3 Number_4 Number_5<br />
$ echo {Z..A}<br />
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A<br />
$ echo a{A{1,2},B{3,4}}b<br />
aA1b aA2b aB3b aB4b<br />
$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}<br />
$ ls<br />
2007-01  2007-07  2008-01  2008-07  2009-01  2009-07<br />
2007-02  2007-08  2008-02  2008-08  2009-02  2009-08<br />
2007-03  2007-09  2008-03  2008-09  2009-03  2009-09<br />
2007-04  2007-10  2008-04  2008-10  2009-04  2009-10<br />
2007-05  2007-11  2008-05  2008-11  2009-05  2009-11<br />
2007-06  2007-12  2008-06  2008-12  2009-06  2009-12</div>
</div>
<hr size="1" noshade="noshade" /><strong>11、shell中使用(())进行数字运算</strong><br />
如:</p>
<div>
<div>#!/bin/bash<br />
echo -n &#8220;how old are you?&#8221;<br />
read age<br />
echo &#8220;Wow,in $((60-age)) years ,you&#8217;ll be 60!&#8221;</div>
</div>
<hr size="1" noshade="noshade" /><strong>12、shell中读取指定的配置文件并对变量进行赋值</strong><br />
# shell脚本中读取配置文件并做赋值操作</p>
<div>
<div>while read NAME TYPE<br />
do<br />
if [ "$NAME" == "" ] || [ "`echo $NAME$TYPE| grep '#'`" != "" ] ;then<br />
continue<br />
else<br />
eval `echo &#8220;${NAME}=${TYPE}&#8221;`<br />
fi<br />
done</div>
</div>
<p># config.shc 配置文件内容<br />
====== config.shc ========<br />
# 注释内容<br />
变量名 值<br />
===========================<br />
注意：配置文件中的变量名和值之间用Tab分格！</p>
<p><strong>、<span style="color: #993300">$$</span></strong>变量保存所运行的当前进程的进程号。<strong><span style="color: #993300">$0</span> </strong>代表脚本文件名。<span style="color: #993300"><strong>$# </strong></span>代表参数的个数、<strong><span style="color: #993300">$_</span></strong>变量中存放上一条命令中最后一个参数的值</p>
<hr size="1" noshade="noshade" /><strong>2、</strong><span style="color: #993300">trap </span><strong>命令可以捕获控制台信号</strong><br />
答：利用trap可以做Ctrl+C结束脚本时需要做的清理操作如:trap &#8220;ClearPID&#8221; 1 2 3 15</p>
<hr size="1" noshade="noshade" /><strong>3、<span style="color: #993300">tee</span>将信息输出到多个文件</strong><br />
答：<code><span class="bash"><span style="color: #7a0874;font-weight: bold">echo</span> <span style="color: #ff0000">"ok"</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">tee</span> <span style="color: #660033">-a</span> a.txt <span style="color: #000000;font-weight: bold">&gt;&gt;</span>b.txt <span style="color: #000000;font-weight: bold">&gt;&gt;</span>c.txt</span></code></p>
<hr size="1" noshade="noshade" /><strong>4、查看本机tcp连接状态及数目统计</strong><br />
答：<code><span class="bash"><span style="color: #c20cb9;font-weight: bold">netstat</span> <span style="color: #660033">-n</span> <span style="color: #000000;font-weight: bold">|</span><span style="color: #c20cb9;font-weight: bold">awk</span> <span style="color: #ff0000">'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">sort</span> <span style="color: #660033">-n</span> <span style="color: #660033">-k</span> <span style="color: #000000">2</span> <span style="color: #660033">-r</span></span></code></p>
<hr size="1" noshade="noshade" /><strong>5、IFS变量</strong><br />
答：<br />
IFS用作shell指定的缺省域分隔符。原理上讲域分隔符可以是任意字符，但缺省通常为空格、新行或tab键。IFS在分隔文件或变量中各域时很有用。下面的例子将IFS设置为冒号，然后echo $PATH变量，给出一个目录分隔开来的可读性很强的路径列表。</p>
<hr size="1" noshade="noshade" /><strong>6、while循环中最简单写死循环的方法为</strong><br />
答：</p>
<div class="codecolorer-container bash geshi" style="width: 500px;overflow: auto">
<div class="bash codecolorer"><span style="color: #000000;font-weight: bold">while</span> :<br />
<span style="color: #000000;font-weight: bold">do</span><br />
<span style="color: #000000;font-weight: bold">do</span> someting<br />
<span style="color: #000000;font-weight: bold">done</span></div>
</div>
<hr size="1" noshade="noshade" /><strong>7、 查出目前 ip_conntrack 记录最多的前五名 IP</strong><br />
答：<code><span class="bash"><span style="color: #c20cb9;font-weight: bold">cat</span> <span style="color: #000000;font-weight: bold">/</span>proc<span style="color: #000000;font-weight: bold">/</span>net<span style="color: #000000;font-weight: bold">/</span>ip_conntrack <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">cut</span> <span style="color: #660033">-d</span> <span style="color: #ff0000">' '</span> <span style="color: #660033">-f</span> <span style="color: #000000">10</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">cut</span> <span style="color: #660033">-d</span> <span style="color: #ff0000">'='</span> <span style="color: #660033">-f</span> <span style="color: #000000">2</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">sort</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">uniq</span> <span style="color: #660033">-c</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">sort</span> <span style="color: #660033">-nr</span> <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">head</span> <span style="color: #660033">-n</span> <span style="color: #000000">5</span></span></code></p>
<hr size="1" noshade="noshade" /><strong>8、linux bash中暂时屏蔽 alias</strong><br />
答：<span style="color: #ff00ff">\ </span>对，正是这个斜线可以暂时屏蔽alias的定义，如：cp -r 就不会再有是否覆盖的提示了。</p>
<hr size="1" noshade="noshade" /><strong>9、在文件中查找指定内容并且显示该内容，并不是显示内容所在的行</strong><br />
答：利用<span style="color: #ff00ff">sed -o</span>参数就可以解决问题了</p>
<hr size="1" noshade="noshade" /><strong>10、创建/删除多个连续的文件（大括号的应用）</strong><br />
答：利用大括号({})来搞定，如：</p>
<div class="codecolorer-container bash geshi" style="width: 100%;overflow: auto">
<div class="bash codecolorer">$ <span style="color: #c20cb9;font-weight: bold">touch</span> Front-<span style="color: #7a0874;font-weight: bold">{</span>A,B,C<span style="color: #7a0874;font-weight: bold">}</span>-Back<br />
$ <span style="color: #c20cb9;font-weight: bold">ls</span> <span style="color: #660033">-1</span><br />
Front-A-Back<br />
Front-B-Back<br />
Front-C-Back<br />
$ <span style="color: #7a0874;font-weight: bold">echo</span> Number_<span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">1</span>..5<span style="color: #7a0874;font-weight: bold">}</span><br />
Number_1 Number_2 Number_3 Number_4 Number_5<br />
$ <span style="color: #7a0874;font-weight: bold">echo</span> <span style="color: #7a0874;font-weight: bold">{</span>Z..A<span style="color: #7a0874;font-weight: bold">}</span><br />
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A<br />
$ <span style="color: #7a0874;font-weight: bold">echo</span> a<span style="color: #7a0874;font-weight: bold">{</span>A<span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">1</span>,<span style="color: #000000">2</span><span style="color: #7a0874;font-weight: bold">}</span>,B<span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">3</span>,<span style="color: #000000">4</span><span style="color: #7a0874;font-weight: bold">}</span><span style="color: #7a0874;font-weight: bold">}</span>b<br />
aA1b aA2b aB3b aB4b<br />
$ <span style="color: #c20cb9;font-weight: bold">mkdir</span> <span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">2007</span>..2009<span style="color: #7a0874;font-weight: bold">}</span>-<span style="color: #000000">0</span><span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">1</span>..9<span style="color: #7a0874;font-weight: bold">}</span> <span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">2007</span>..2009<span style="color: #7a0874;font-weight: bold">}</span>-<span style="color: #7a0874;font-weight: bold">{</span><span style="color: #000000">10</span>..12<span style="color: #7a0874;font-weight: bold">}</span><br />
$ <span style="color: #c20cb9;font-weight: bold">ls</span><br />
<span style="color: #000000">2007</span>-01  <span style="color: #000000">2007</span>-07  <span style="color: #000000">2008</span>-01  <span style="color: #000000">2008</span>-07  <span style="color: #000000">2009</span>-01  <span style="color: #000000">2009</span>-07<br />
<span style="color: #000000">2007</span>-02  <span style="color: #000000">2007</span>-08  <span style="color: #000000">2008</span>-02  <span style="color: #000000">2008</span>-08  <span style="color: #000000">2009</span>-02  <span style="color: #000000">2009</span>-08<br />
<span style="color: #000000">2007</span>-03  <span style="color: #000000">2007</span>-09  <span style="color: #000000">2008</span>-03  <span style="color: #000000">2008</span>-09  <span style="color: #000000">2009</span>-03  <span style="color: #000000">2009</span>-09<br />
<span style="color: #000000">2007</span>-04  <span style="color: #000000">2007</span>-<span style="color: #000000">10</span>  <span style="color: #000000">2008</span>-04  <span style="color: #000000">2008</span>-<span style="color: #000000">10</span>  <span style="color: #000000">2009</span>-04  <span style="color: #000000">2009</span>-<span style="color: #000000">10</span><br />
<span style="color: #000000">2007</span>-05  <span style="color: #000000">2007</span>-<span style="color: #000000">11</span>  <span style="color: #000000">2008</span>-05  <span style="color: #000000">2008</span>-<span style="color: #000000">11</span>  <span style="color: #000000">2009</span>-05  <span style="color: #000000">2009</span>-<span style="color: #000000">11</span><br />
<span style="color: #000000">2007</span>-06  <span style="color: #000000">2007</span>-<span style="color: #000000">12</span>  <span style="color: #000000">2008</span>-06  <span style="color: #000000">2008</span>-<span style="color: #000000">12</span>  <span style="color: #000000">2009</span>-06  <span style="color: #000000">2009</span>-<span style="color: #000000">12</span></div>
</div>
<hr size="1" noshade="noshade" /><strong>11、shell中使用(())进行数字运算</strong><br />
如:</p>
<div class="codecolorer-container bash geshi" style="width: 100%;overflow: auto">
<div class="bash codecolorer"><span style="font-style: italic;color: #666666">#!/bin/bash</span><br />
<span style="color: #7a0874;font-weight: bold">echo</span> <span style="color: #660033">-n</span> <span style="color: #ff0000">&#8220;how old are you?&#8221;</span><br />
<span style="color: #c20cb9;font-weight: bold">read</span> age<br />
<span style="color: #7a0874;font-weight: bold">echo</span> <span style="color: #ff0000">&#8220;Wow,in <span style="color: #007800">$((60-age)</span>) years ,you&#8217;ll be 60!&#8221;</span></div>
</div>
<hr size="1" noshade="noshade" /><strong>12、shell中读取指定的配置文件并对变量进行赋值</strong><br />
# shell脚本中读取配置文件并做赋值操作</p>
<div class="codecolorer-container bash geshi" style="width: 100%;overflow: auto">
<div class="bash codecolorer"><span style="color: #000000;font-weight: bold">while</span> <span style="color: #c20cb9;font-weight: bold">read</span> NAME TYPE<br />
<span style="color: #000000;font-weight: bold">do</span><br />
<span style="color: #000000;font-weight: bold">if</span> <span style="color: #7a0874;font-weight: bold">[</span> <span style="color: #ff0000">"<span style="color: #007800">$NAME</span>"</span> == <span style="color: #ff0000">""</span> <span style="color: #7a0874;font-weight: bold">]</span> <span style="color: #000000;font-weight: bold">||</span> <span style="color: #7a0874;font-weight: bold">[</span> <span style="color: #ff0000">"<span style="color: #780078">`echo $NAME$TYPE| grep '#'`</span>"</span> <span style="color: #000000;font-weight: bold">!</span>= <span style="color: #ff0000">""</span> <span style="color: #7a0874;font-weight: bold">]</span> ;<span style="color: #000000;font-weight: bold">then</span><br />
<span style="color: #7a0874;font-weight: bold">continue</span><br />
<span style="color: #000000;font-weight: bold">else</span><br />
<span style="color: #7a0874;font-weight: bold">eval</span> <span style="color: #000000;font-weight: bold">`</span><span style="color: #7a0874;font-weight: bold">echo</span> <span style="color: #ff0000">&#8220;<span style="color: #007800">${NAME}</span>=<span style="color: #007800">${TYPE}</span>&#8220;</span><span style="color: #000000;font-weight: bold">`</span><br />
<span style="color: #000000;font-weight: bold">fi</span><br />
<span style="color: #000000;font-weight: bold">done</span></div>
</div>
<p># config.shc 配置文件内容<br />
====== config.shc ========<br />
# 注释内容<br />
变量名 值<br />
===========================<br />
注意：配置文件中的变量名和值之间用Tab分格！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/214.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置yum源并与公网同步更新</title>
		<link>http://www.china-php.com/experience/212.html</link>
		<comments>http://www.china-php.com/experience/212.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 13:07:32 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[同步]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=212</guid>
		<description><![CDATA[尽管sohu和163都推出了mirrors服务，但当要配置多台服务器时仍然需要占用很多公网带宽，因此配置一个本地yum源并时常与公网同步就显得非常有必要了。本文介绍的就是针对CentOS 5.4 配置yum源， 并且每日同步公网数据。每日的同步使用rsync协议，这里要注意并不是所有的mirrors站点都支持rsync协议，不过不用担心，下文有更新脚本，里面有我测试过的几个支持rsync协议的mirros站点。 配置yum源 本文要配置3个yum软件仓库，分别为：CentOS标准软件仓库、epel、以及rpmforge。经过多次尝试，定位了速度和更新频率都比较理想的几个站点。更多的mirrors站点参见以下网址： CentOS：http://www.centos.org/modules/tinycontent/index.php?id=32 epel：https://fedoraproject.org/wiki/EPEL rpmforge：http://apt.sw.be/ 同步yum源脚本 #!/bin/bash #========================================== # Program : update_yum_source.sh # Info : 定期同步官方 yum 源到本机 # Version : 2010.01.28 First Release #========================================== Date=`date +%Y%m%d` LogFile=&#8221;/data/logs/rsync_yum/$Date.log&#8221; CentOSTrunkVer=&#8221;5&#8243; CentOSCurrentVer=&#8221;5.4&#8243; ReceiveMail=&#8221;nathanzhou@mysite.com&#8221; RsyncBin=&#8221;/usr/bin/rsync&#8221; RsyncPerm=&#8221;-avrt &#8211;delete &#8211;exclude=debug/ &#8211;exclude=isos/&#8221; CentOS_Trunk_Ver_Path=&#8221;/data/soft/mirror.mysite.com/centos/$CentOSTrunkVer&#8221; CentOS_Current_Ver_Path=&#8221;/data/soft/mirror.mysite.com/centos/$CentOSCurrentVer&#8221; YumSiteList=&#8221;rsync://mirror.averse.net/centos&#8221; #============ epel ============== epelSite=&#8221;rsync://mirrors.sohu.com/fedora-epel/&#8221; epelLocalPath=&#8221;/data/soft/mirror.mysite.com/epel&#8221; # rpmforge rpmforgeSite=&#8221;rsync://apt.sw.be/freshrpms/pub/dag/redhat/el5/&#8221; rpmforgeLocalPath=&#8221;/data/soft/mirror.mysite.com/rpmforce&#8221; echo &#8220;&#8212;- $Date `date +%T` Begin &#8212;-&#8221; &#62;&#62;$LogFile # centos 5 $RsyncBin $RsyncPerm $YumSiteList/$CentOSTrunkVer/ \ $CentOS_Trunk_Ver_Path &#62;&#62; $LogFile # centos 5.4 $RsyncBin $RsyncPerm $YumSiteList/$CentOSCurrentVer/ \ $CentOS_Current_Ver_Path &#62;&#62; $LogFile # epel $RsyncBin $RsyncPerm &#8211;exclude=4/ &#8211;exclude=4AS/ &#8211;exclude=4AS/ \ &#8211;exclude=4WS/ &#8211;bwlimit=500 &#8230; <span class="read-more"><a href="http://www.china-php.com/experience/212.html">Read More...</a></span>]]></description>
			<content:encoded><![CDATA[<p>尽管sohu和163都推出了mirrors服务，但当要配置多台服务器时仍然需要占用很多公网带宽，因此配置一个本地yum源并时常与公网同步就显得非常有必要了。本文介绍的就是针对CentOS 5.4 配置yum源， 并且每日同步公网数据。每日的同步使用rsync协议，这里要注意并不是所有的mirrors站点都支持rsync协议，不过不用担心，下文有更新脚本，里面有我测试过的几个支持rsync协议的mirros站点。</p>
<p>配置yum源<br />
本文要配置3个yum软件仓库，分别为：CentOS标准软件仓库、epel、以及rpmforge。经过多次尝试，定位了速度和更新频率都比较理想的几个站点。更多的mirrors站点参见以下网址：<br />
CentOS：http://www.centos.org/modules/tinycontent/index.php?id=32<br />
epel：https://fedoraproject.org/wiki/EPEL<br />
rpmforge：http://apt.sw.be/</p>
<p>同步yum源脚本</p>
<p>#!/bin/bash</p>
<p>#==========================================<br />
# Program   : update_yum_source.sh<br />
# Info      : 定期同步官方 yum 源到本机<br />
# Version   : 2010.01.28    First Release<br />
#==========================================</p>
<p>Date=`date +%Y%m%d`<br />
LogFile=&#8221;/data/logs/rsync_yum/$Date.log&#8221;<br />
CentOSTrunkVer=&#8221;5&#8243;<br />
CentOSCurrentVer=&#8221;5.4&#8243;<br />
ReceiveMail=&#8221;nathanzhou@mysite.com&#8221;</p>
<p>RsyncBin=&#8221;/usr/bin/rsync&#8221;<br />
RsyncPerm=&#8221;-avrt &#8211;delete &#8211;exclude=debug/  &#8211;exclude=isos/&#8221;<br />
CentOS_Trunk_Ver_Path=&#8221;/data/soft/mirror.mysite.com/centos/$CentOSTrunkVer&#8221;<br />
CentOS_Current_Ver_Path=&#8221;/data/soft/mirror.mysite.com/centos/$CentOSCurrentVer&#8221;<br />
YumSiteList=&#8221;rsync://mirror.averse.net/centos&#8221;</p>
<p>#============ epel ==============<br />
epelSite=&#8221;rsync://mirrors.sohu.com/fedora-epel/&#8221;<br />
epelLocalPath=&#8221;/data/soft/mirror.mysite.com/epel&#8221;</p>
<p># rpmforge<br />
rpmforgeSite=&#8221;rsync://apt.sw.be/freshrpms/pub/dag/redhat/el5/&#8221;<br />
rpmforgeLocalPath=&#8221;/data/soft/mirror.mysite.com/rpmforce&#8221;</p>
<p>echo &#8220;&#8212;- $Date `date +%T` Begin &#8212;-&#8221; &gt;&gt;$LogFile</p>
<p># centos 5<br />
$RsyncBin $RsyncPerm $YumSiteList/$CentOSTrunkVer/ \<br />
$CentOS_Trunk_Ver_Path &gt;&gt; $LogFile</p>
<p># centos 5.4<br />
$RsyncBin $RsyncPerm $YumSiteList/$CentOSCurrentVer/ \<br />
$CentOS_Current_Ver_Path  &gt;&gt; $LogFile</p>
<p># epel<br />
$RsyncBin $RsyncPerm  &#8211;exclude=4/ &#8211;exclude=4AS/ &#8211;exclude=4AS/ \<br />
&#8211;exclude=4WS/ &#8211;bwlimit=500 $epelSite $epelLocalPath &gt;&gt; $LogFile</p>
<p># rpmforge<br />
$RsyncBin $RsyncPerm $rpmforgeSite $rpmforgeLocalPath &gt;&gt; $LogFile</p>
<p>echo  &#8220;&#8212;- $Date `date +%T` End &#8212;-&#8221; &gt;&gt; $LogFile</p>
<p>/bin/mail -s &#8220;opt001 &#8211; update yum source &#8211; $Date&#8221; $ReceiveMail&lt;$LogFile<br />
该脚本只更新了CentOS 5.4的软件包，其它的版本都略过了。根据不同的情况，脚本中还有很多变量需要做相应的修改，如yum保存路径，更新后发送的邮件地址等等。</p>
<p>首次执行该脚本会下载很多资源，大概60G左右，以后就会差异更新了。同步好软件后，下一步就要配置web服务了，这样client端的yum程序才能下载我配置好的yum源，当然也可以配置ftp服务。我这里利用nginx作为web服务，并且编译时加入了fancyindex第三方插件，这样nginx在输出列表时看着舒服些。nginx配置mirrors.mysite.com站点如下：</p>
<p>server<br />
{<br />
listen          80;<br />
server_name     mirrors.mysite.com;<br />
index           index.html index.htm index.php;<br />
root            /data/soft/mirror.mysite.com;<br />
location  /  {<br />
fancyindex on;<br />
fancyindex_exact_size off;<br />
fancyindex_localtime on;</p>
<p>allow 124.42.53.137;<br />
allow 203.86.81.196;<br />
allow 192.168.99.0/24;<br />
deny all;<br />
}<br />
access_log  /var/log/nginx/access_yum.log  access;<br />
}<br />
<img src="http://salogs.com/wp-content/uploads/2010/04/mirrors_site.png" alt="a" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/212.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>运维-MySQL监控</title>
		<link>http://www.china-php.com/experience/210.html</link>
		<comments>http://www.china-php.com/experience/210.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 13:03:30 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=210</guid>
		<description><![CDATA[Mysql作为广泛应用的数据库系统，平时运维工作中对她的监控必不可少，现在把我对Mysql数据库的监控体会写成下文，欢迎拍砖。 无论是DBA或是SA，监控的目标都很明确，无外乎 1.快速的得到Mysql过去一段时间或者当前运行的状态 2.因硬件升级或者系统配置的改变而诊断对Mysql数据库性能影响 3.在Mysql数据库系统出现故障要能够及时收到告警 4.为日后编写运维报告提供各项数据指标供分析 5.…… 想到了再做补充。而所有以上这些目的，通过各种方法和手段都可以做到。 自从Mysql数据库系统启动并且提供服务，Mysql内部自身的一套“计数器”就开始工作，可以通过 Show Global Status ， Show global variables ，Show full processlist 得到Mysql数据库系统当前各种系统变量和状态 ，并且后文介绍个各种监控工具几乎都是对这三个指令的输出 进行数据的计算和统计分析。 这里要提到的是mysqladmin这个Mysql自带的工具，除了用来做各种管理工作，还可以用来做监控 例如：每个10秒输出一次mysql的状态信息 #./mysqladmin -i 10 extended status 一。GUI 类监控工具 1.MySQL administrator Mysql公司发布管理工具，安装和使用都很方便 可以对Mysql 的状态，变量和进程监控，并且有简单图形绘制输出。 2.Cacti 用它来做系统监控的同仁相信很多，目前各种插件数量也很多，足以满足绝大多数公司监控要求。 这里要说的是Mysql监控插件teMySQL_cacti，能够对mysql做比较全面的监控， 但是我发现这个插件很长时间没有更新了。]]></description>
			<content:encoded><![CDATA[<p>Mysql作为广泛应用的数据库系统，平时运维工作中对她的监控必不可少，现在把我对Mysql数据库的监控体会写成下文，欢迎拍砖。<br />
无论是DBA或是SA，监控的目标都很明确，无外乎<br />
1.快速的得到Mysql过去一段时间或者当前运行的状态<br />
2.因硬件升级或者系统配置的改变而诊断对Mysql数据库性能影响<br />
3.在Mysql数据库系统出现故障要能够及时收到告警<br />
4.为日后编写运维报告提供各项数据指标供分析<br />
5.……<br />
想到了再做补充。而所有以上这些目的，通过各种方法和手段都可以做到。<br />
自从Mysql数据库系统启动并且提供服务，Mysql内部自身的一套“计数器”就开始工作，可以通过<br />
Show Global Status ， Show global variables ，Show full processlist<br />
得到Mysql数据库系统当前各种系统变量和状态 ，并且后文介绍个各种监控工具几乎都是对这三个指令的输出<br />
进行数据的计算和统计分析。<br />
<img src="http://salogs.com/wp-content/uploads/2010/05/show_global_variables.png" alt="a" /><br />
<img src="http://salogs.com/wp-content/uploads/2010/05/show_global_status.png" alt="a" />这里要提到的是mysqladmin这个Mysql自带的工具，除了用来做各种管理工作，还可以用来做监控<br />
例如：每个10秒输出一次mysql的状态信息</p>
<p>#./mysqladmin -i 10 extended status<img src="http://salogs.com/wp-content/uploads/2010/05/mysqladmin_status.png" alt="a" /><br />
一。GUI 类监控工具<br />
1.MySQL administrator<br />
Mysql公司发布管理工具，安装和使用都很方便<br />
可以对Mysql 的状态，变量和进程监控，并且有简单图形绘制输出。<br />
2.Cacti<br />
用它来做系统监控的同仁相信很多，目前各种插件数量也很多，足以满足绝大多数公司监控要求。<br />
这里要说的是Mysql监控插件teMySQL_cacti，能够对mysql做比较全面的监控，<br />
但是我发现这个插件很长时间没有更新了。<br />
<img src="http://salogs.com/wp-content/uploads/2010/05/cactigraphs-oneslave.jpg-300.jpg" alt="a" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/210.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CVS SVN VSS 使用对比</title>
		<link>http://www.china-php.com/experience/208.html</link>
		<comments>http://www.china-php.com/experience/208.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 12:58:46 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=208</guid>
		<description><![CDATA[版本控制系统里团队开发不免要用上CVS SVN VSS ClearCase等工具。至于选择上，则是根据开发团队搭建的平台，使用的编程语言相关联。 如果用.net平台开发，VSS无疑首选，尽管它曾经有不经时事的诟病，现在发展的功能也蛮强的。如果有服务器linux系统，则CVS，SVN都可以选择。现在SVN大有取代CVS之势。然而很多古老的程序员还是对CVS情有独钟。 如下节选一些网上的对比说明，我作以综述。当然，真正要弄懂这些版本控制系统，还是要花费巨大工夫学习研究，不可能在baidu或者google几下就能完成的。 一、Subversion包含绝大部分CVS功能 Subversion 作为CVS 的重写版和改进版，其目标就是作为一个更好的版本控制软件，取代目前流行的CVS。Subversion 的主要开发人员都是业界知名的CVS 专家。Subversion支持绝大部分的CVS 功能/命令；Subversion 的命令风格和界面也与CVS 非常接近。当然，不同的地方正是对CVS 的改进。 二、全局性的版本编号 一个新的版本，并得到一个自增量的版本号N+1，该版本号并不针对某个特定的文件，而是全局性的、针对整个版本库的。因此，我们可以将Subversion 的版本库看作是一个文件系统或文件目录树的数组。 从技术的角度来说，在Subversion 中，&#8221;文件foo.c 的第5 版本&#8221;这个说法是错误的；正确的说法应该是：&#8221;文件foo.c 在版本库被修改了5 次，即执行5 次commit 后是什么样子？&#8221;。显然，在Subversion 中，版本库被修改5 次后foo.c 的内容，和被修改了6 次后foo.c 的内容很可能完全一样，因为版本库的第6 次修改很可能只修改了版本库的其他部分，而并没有对foo.c 的进行修改。相反，在CVS 中，文件foo.c 的第1.1 版本和第1.2 版本总是不同的。 Subversion 的全局性版本编号为Subversion 带来了诸多的优势：如对目录或文件执行拷贝，无论涉及多少文件，Subversion 不需要对单个文件依次执行拷贝命令，仅仅需要建立一个指向相应的全局版本号的一个指针即可。 三、目录的版本控制 CVS 只能对文件进行版本控制，不能对目录进行版本控制，因此CVS 没有任何关于文件&#8221;移动&#8221;（move）操作的概念。当人为进行文件移动操作时，CVS 只能注意到，一个文件在一个位置被删除了，而在一个新位置创建了另外一个文件。由于它不会连接两个操作，因此也很容易使文件历史轨迹丢失。设置 CVS 存储库时，必须非常谨慎地为每个文件选择准确的位置，因为在设置之后，几乎就要一直使用这个位置了。 同样由于CVS 不记录目录的版本历史，CVS 不支持对文件的&#8221;重命名&#8221;（rename），人为的对文件进行重命名会使得命名前后的文件失去历史联系，而记录历史本来是版本管理的主要目的。 还有，CVS 不支持对文件的&#8221;拷贝&#8221;（copy），人为的拷贝对CVS 而言，只能看到新的文件的增加，而不能记录拷贝源文件和目标文件之间的联系。 综上所述，缺乏对文件&#8221;移动&#8221;、&#8221;重命名&#8221;、&#8221;拷贝&#8221;的支持的根源在于CVS 不能记录目录的版本历史，而这些操作在当前的软件开发过程中经常发生，这正是Subversion被开发并取代CVS 的主要原因之一。 Subversion 将目录作为一类特殊的文件来处理（事实上，从文件系统的角度来看，目录确实是一类特殊的文件，当目录中的子目录/文件被删除、重命名、或新的子目录/文件被创建时，目录的内容将发生改变）。因此，Subversion 象记录普通文件的修改历史一样记录对目录的修改历史，当发生文件/目录的移动、重命名或拷贝操作时，Subversion 能够准确记录操作前后的历史联系。同样，象对文件的不同历史版本进行比较一样，Subversion支持对目录的不同历史版本的比较，清晰展现目录的变化历史。 四、原子性提交 从使用者的角度来看，CVS 和Subversion 都支持对多个文件修改的批量提交，但二者在实现方式上存在本质的区别。 CVS 采用线性、串行的批量提交，即依次地，一个接一个地执行提交，每成功提交一个文件，该文件的一个新的版本即被记录到版本库中，提交时用户提供的日志信息被重复地存储到每一个被修改的文件的版本历史中。 CVS 串行批量提交模式的弊端在于 －当任何原因造成批量操作的中断时（典型原因包括：网络中断、客户端死机等），版本库往往处于一个不一致的状态：原本应该全部入库的文件只有一部分入库，很有可能版本库中的最新版本不能顺利编译，更为严重的是，随着其他的用户执行cvs update 操作，该不一致性将迅速在开发团队中扩散，从而严重影响团队的开发效率，并存在质量隐患。另外，假如该批量提交的中断没有被及时发现，开发团队往往要花更多的时间进行软件调试和排错。 CVS 即使在批量提交不发生中断时也会造成不一致：假设用户A 启动一个需要较长时间才能完成的批量提交；与此同时，用户B 执行cvs update 操作。此时，用户B 很有可能得到一个不一致的更新，即用户B 通过&#8221;更新&#8221;操作，得到用户A 的部分修改文件。 Subversion 彻底消除了CVS 的以上弊端。无论批量提交包含多少文件修改，只有当全部文件修改都成功入库，该提交才变得有效，才对其他用户可见；否则，无论任何原因造成中断，Subversion 都会自动执行&#8221;回滚&#8221;（rollback）操作。换一个说法，Subversion 保证所有的修改要么全部入库生效，要么一个也不入库，即对版本库不作任何的修改。这就是Subversion 的原子性提交（atomic commit）。 由于Subversion &#8230; <span class="read-more"><a href="http://www.china-php.com/experience/208.html">Read More...</a></span>]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Arial, sans-serif, Helvetica, Tahoma"><span>版本控制系统里团队开发不免要用上CVS SVN VSS ClearCase等工具。至于选择上，则是根据开发团队搭建的平台，使用的编程语言相关联。</p>
<p>如果用.net平台开发，VSS无疑首选，尽管它曾经有不经时事的诟病，现在发展的功能也蛮强的。如果有服务器linux系统，则CVS，SVN都可以选择。现在SVN大有取代CVS之势。然而很多古老的程序员还是对CVS情有独钟。</p>
<p>如下节选一些网上的对比说明，我作以综述。当然，真正要弄懂这些版本控制系统，还是要花费巨大工夫学习研究，不可能在baidu或者google几下就能完成的。</p>
<p>一、Subversion包含绝大部分CVS功能</p>
<p>Subversion 作为CVS 的重写版和改进版，其目标就是作为一个更好的版本控制软件，取代目前流行的CVS。Subversion 的主要开发人员都是业界知名的CVS 专家。Subversion支持绝大部分的CVS 功能/命令；Subversion 的命令风格和界面也与CVS 非常接近。当然，不同的地方正是对CVS 的改进。</p>
<p>二、全局性的版本编号</p>
<p>一个新的版本，并得到一个自增量的版本号N+1，该版本号并不针对某个特定的文件，而是全局性的、针对整个版本库的。因此，我们可以将Subversion 的版本库看作是一个文件系统或文件目录树的数组。</p>
<p>从技术的角度来说，在Subversion 中，&#8221;文件foo.c 的第5 版本&#8221;这个说法是错误的；正确的说法应该是：&#8221;文件foo.c 在版本库被修改了5 次，即执行5 次commit 后是什么样子？&#8221;。显然，在Subversion 中，版本库被修改5 次后foo.c 的内容，和被修改了6 次后foo.c 的内容很可能完全一样，因为版本库的第6 次修改很可能只修改了版本库的其他部分，而并没有对foo.c 的进行修改。相反，在CVS 中，文件foo.c 的第1.1 版本和第1.2 版本总是不同的。</p>
<p>Subversion 的全局性版本编号为Subversion 带来了诸多的优势：如对目录或文件执行拷贝，无论涉及多少文件，Subversion 不需要对单个文件依次执行拷贝命令，仅仅需要建立一个指向相应的全局版本号的一个指针即可。</p>
<p>三、目录的版本控制</p>
<p>CVS 只能对文件进行版本控制，不能对目录进行版本控制，因此CVS 没有任何关于文件&#8221;移动&#8221;（move）操作的概念。当人为进行文件移动操作时，CVS 只能注意到，一个文件在一个位置被删除了，而在一个新位置创建了另外一个文件。由于它不会连接两个操作，因此也很容易使文件历史轨迹丢失。设置 CVS 存储库时，必须非常谨慎地为每个文件选择准确的位置，因为在设置之后，几乎就要一直使用这个位置了。</p>
<p>同样由于CVS 不记录目录的版本历史，CVS 不支持对文件的&#8221;重命名&#8221;（rename），人为的对文件进行重命名会使得命名前后的文件失去历史联系，而记录历史本来是版本管理的主要目的。</p>
<p>还有，CVS 不支持对文件的&#8221;拷贝&#8221;（copy），人为的拷贝对CVS 而言，只能看到新的文件的增加，而不能记录拷贝源文件和目标文件之间的联系。</p>
<p>综上所述，缺乏对文件&#8221;移动&#8221;、&#8221;重命名&#8221;、&#8221;拷贝&#8221;的支持的根源在于CVS 不能记录目录的版本历史，而这些操作在当前的软件开发过程中经常发生，这正是Subversion被开发并取代CVS 的主要原因之一。</p>
<p>Subversion 将目录作为一类特殊的文件来处理（事实上，从文件系统的角度来看，目录确实是一类特殊的文件，当目录中的子目录/文件被删除、重命名、或新的子目录/文件被创建时，目录的内容将发生改变）。因此，Subversion 象记录普通文件的修改历史一样记录对目录的修改历史，当发生文件/目录的移动、重命名或拷贝操作时，Subversion 能够准确记录操作前后的历史联系。同样，象对文件的不同历史版本进行比较一样，Subversion支持对目录的不同历史版本的比较，清晰展现目录的变化历史。</p>
<p>四、原子性提交</p>
<p>从使用者的角度来看，CVS 和Subversion 都支持对多个文件修改的批量提交，但二者在实现方式上存在本质的区别。</p>
<p>CVS 采用线性、串行的批量提交，即依次地，一个接一个地执行提交，每成功提交一个文件，该文件的一个新的版本即被记录到版本库中，提交时用户提供的日志信息被重复地存储到每一个被修改的文件的版本历史中。</p>
<p>CVS 串行批量提交模式的弊端在于 －当任何原因造成批量操作的中断时（典型原因包括：网络中断、客户端死机等），版本库往往处于一个不一致的状态：原本应该全部入库的文件只有一部分入库，很有可能版本库中的最新版本不能顺利编译，更为严重的是，随着其他的用户执行cvs update 操作，该不一致性将迅速在开发团队中扩散，从而严重影响团队的开发效率，并存在质量隐患。另外，假如该批量提交的中断没有被及时发现，开发团队往往要花更多的时间进行软件调试和排错。</p>
<p>CVS 即使在批量提交不发生中断时也会造成不一致：假设用户A 启动一个需要较长时间才能完成的批量提交；与此同时，用户B 执行cvs update 操作。此时，用户B 很有可能得到一个不一致的更新，即用户B 通过&#8221;更新&#8221;操作，得到用户A 的部分修改文件。</p>
<p>Subversion 彻底消除了CVS 的以上弊端。无论批量提交包含多少文件修改，只有当全部文件修改都成功入库，该提交才变得有效，才对其他用户可见；否则，无论任何原因造成中断，Subversion 都会自动执行&#8221;回滚&#8221;（rollback）操作。换一个说法，Subversion 保证所有的修改要么全部入库生效，要么一个也不入库，即对版本库不作任何的修改。这就是Subversion 的原子性提交（atomic commit）。</p>
<p>由于Subversion 的原子性提交特性和全局版本编号方式，当提交成功完成时，一个唯一的、新的全局版本编号产生，而提交时用户提供的日志信息与该新的版本编号关联，只进行一次存储（区别于CVS 的按文件重复存储）。</p>
<p>五、支持变更集概念</p>
<p>由于Subversion 的所有提交是原子性的，每次成功提交形成的唯一的全局版本号对应此次批量提交的所有文件修改，也就是说，一个Subversion 版本号其实对应了一个逻辑上的变更集（change set），该变更集可能对应于对一个BUG 的修复，或者对应于对一个已有功能的改进，或者对应于一个新功能的实现。可以说，变更集是一个软件开发活动的逻辑结果，该变更集可以通过其对应的版本号在软件开发的其他过程中（如软件合并/集成过程，软件发布管理，变更管理系统，缺陷追踪系统）被引用。因此，Subversion 将版本管理从单纯的、单个的文件修改的层次通过逻辑上的抽象，上升到更便于理解和交流的开发活动的层次。</p>
<p>六、差异化的二进制文件处理</p>
<p>由于历史原因，CVS 主要是为早期的程序员设计的，CVS 能够有效处理文本文件（或ASCII文件，源代码文件），可以对文本文件进行差异化的存储、新旧版本的比较，文件合并等；但对于二进制文件，CVS则明显力不从心。在CVS 的版本库中，对于二进制文件的历史版本，CVS 唯一能做的就是对不同的版本进行独立的、冗余的存储，哪怕版本之间其实只存在微小的差异。举例而言，一个10M 的二进制文件（照片、图形文件、机械设计文件、电子设计文件）假如每周修改一次，无论每次修改的大小，一年下来，仅该文件就要消耗500M 以上的存储空间。而且，客户端每次获取该文件的新版本都要消耗10M 的网络流量。</p>
<p>对于目前的开发团队，无论是软件开发，Web 站点的开发，手机等电子产品的研发，需要进行版本管理的不仅是源代码等文本文件，还需要管理需求文档、设计文档、测试文档、用户手册，图形图像文件，机械/电子设计文件等诸多的二进制文件，CVS 显然不是一个好的选择。</p>
<p>与CVS 不同，Subversion 采用统一的二进制差异算法（binary differencing algorithm），即对文本文件和二进制文件采用相同的差异比较算法，并以相同的方式在版本库中进行存储：每次提交后版本库中只存储相对于先前版本的差异，从而可以节省大量的存储空间。</p>
<p>该二进制差异算法不仅应用在版本的存储上，更为重要的是，Subversion 对二进制文件与文本文件一视同仁，当客户端需要获取新的版本时（如执行svn update），在网络上只有版本的差异被传输，从而大大减少对网络带宽的消耗。更多细节参见&#8221;七、双向的差异化－压缩网络传输&#8221;。</p>
<p>七、 双向的差异化－压缩网络传输</p>
<p>如上所述，CVS 对二进制文件不能进行有效的差异化处理。对于文本文件，CVS 仅仅支持单向的差异化传输：从CVS 到客户端的传输是差异化的，即执行cvs update 时，只有差异的部分从服务器传输到客户端；而当执行cvs commit 时，无论代码变化多少，CVS 都需要从客户端向服务器完整传输被修改文件的全部内容，不能只传输差异。</p>
<p>相反，无论是文本文件还是二进制文件，Subversion 都进行双向的差异化传输，并且差异化内容还要进行压缩/解压缩的过程：在服务器端获取差异显而易见，与CVS 类似；Subversion 在客户端获取差异的秘密在于 — Subversion 在客户端的工作拷贝中隐含了每个文件的一个&#8221;只读的、干净的&#8221;副本（该副本隐藏在隐含目录.svn 里，通常不可见，该副本还有更多的妙用，参见&#8221;十二、更多的本地/离线操作&#8221;），通过比较用户在客户端的修改和该隐含的副本，Subversion 获取需要真正传送到服务器的差异，并对差异进行压缩后才进行网络传输。</p>
<p>对CVS 而言，操作的成本（网络带宽消耗是最大的操作成本）与被修改的文件的大小成比例，而与修改本身的大小无关；对Subversion 而言，操作成本只与修改本身的大小成比例，而与被修改的文件的大小无关。因此，与CVS 相比，Subversion 消耗更少的网络带宽（以客户端的存储空间换取更少的带宽消耗在目前的计算环境下应该是个相当不错的选择！）。Subversion 更加适合基于互联网（或广域网）进行协作开发的地理上分布的团队 — 版本服务器集中、单一；客户端广泛分布。</p>
<p>八、高效、快捷创建分支和基线</p>
<p>CVS 和Subversion 都支持分支（branch）和基线（tag），通过分支与合并，可以有效支持大项目的并行开发模式；通过基线管理，可以准确标识一组文件的版本，有效进行软件发布管理和必要时的历史回溯。</p>
<p>但CVS 和Subversion 在实现分支和基线的方式上存在很大的不同。CVS 在创建分支的时候，需要对所有进行分支的文件进行依次的操作，因此分支的建立成本（主要是建立分支所需的时间，或消耗的计算资源）与参与分支的文件数量成比例，项目越大，版本库越大，文件越多，分支的建立成本越高；基线（tag）的建立与此类似。</p>
<p>Subversion 的分支和基线是通过执行&#8221;拷贝&#8221;来建立的：回想一下在没有引入版本管理工具的时候我们是如何进行所谓的&#8221;分支&#8221;和&#8221;基线&#8221;管理的？答案显然是&#8221;拷贝&#8221; — 我们通过&#8221;拷贝&#8221;或&#8221;备份&#8221;来建立基线；同样，为支持多个开发人员可以同时进行开发，我们为每个开发人员创建一份&#8221;拷贝&#8221;。由此看来，Subversion 通过&#8221;拷贝&#8221;来建立分支和基线显得非常自然，有点&#8221;返朴归真&#8221;的意思。</p>
<p>由于Subversion 的全局版本号特性，Subversion 中分支或基线的创建过程，或Subversion中的&#8221;拷贝&#8221;过程，真正的操作是在版本库中创建一个到某一全局版本号的指针（pointer），不再需要针对众多的单个文件依次执行操作。因此，该操作的成本为一个很小的常数，与项目大小，版本库大小，文件数目的多少无关；并且，分支或基线的建立不需要进行版本的冗余存储，新建立的分支或基线基本不占用版本库空间，分支的后续存储空间的开销也只与修改的大小有关。</p>
<p>九、集成Apache Web Server，提供更多的特性</p>
<p>Subversion 通过与Apache Web Server 的集成，可以提供基于http/https 协议的版本库访问机制，从而支持Subversion 跨越防火墙的安全访问。除此以外，Subversion 还可以利用更多的Apache 特性，包括但不限于：Apache 丰富的用户认证机制（包括通过LDAP服务器如Windows Active Directory 服务器的用户认证），基于目录路径的精细粒度的访问控制，对传输的网络流量进行压缩/解压缩，浏览版本库目录结构等等。</p>
<p>十、支持WebDAV</p>
<p>WebDAV（Web-based Distributed Authoring and Versioning）是一种基于 HTTP 1.1 协议的通信协议.它扩展了HTTP 1.1，在GET、POST、HEAD 等几个HTTP 标准方法以外添加了一些新的方法，使应用程序可直接对Web Server 直接读写，并支持写文件锁定(Locking)及解锁(Unlock)，还可以支持文件的版本控制。</p>
<p>Microsoft windows2000/XP 及IE, Office 还有Adobe/MicroMedia 的DW 等都支持WebDAV，这又大大增强了Web 应用的价值，以及效能。对于需要大量发布内容的用户而言，应用WebDAV 可以降低对CMS 系统的依赖，而且能够更自由的进行创作。上传、下载变得轻松自如。</p>
<p>Subversion 通过与Apache Web Server 的集成，支持WebDAV 协议，使得业务用户（business users）或非技术用户在不安装任何版本管理客户端的情况下轻松访问Subversion 版本库，不改变业务用户已有使用习惯，支持分布的业务用户对文档的评审、修改并实现版本控制，真正将软件开发的生命周期从开发/技术团队扩展到项目的全部干系人（stakeholder），避免通过电子邮件传递文档的混乱与无序、通过Windows 操作系统共享造成的安全漏洞、病毒攻击、历史版本被覆盖或丢失、审计困难等诸多典型问题。</p>
<p>十一、更好的冲突标识与处理</p>
<p>CVS 和Subversion 都支持通过分支与合并进行并行开发，并可以自动检测到合并时的冲突（conflicts），并在合并结果中以&lt;&lt;&lt;&lt;&lt;&lt; … &gt;&gt;&gt;&gt;&gt;&gt;标识合并的冲突部分。</p>
<p>在CVS 中，经常会出现由于用户的疏忽（如，没有注意到冲突，或没有完全处理好冲突）而将仍然带有&lt;&lt;&lt;&lt;&lt;&lt; … &gt;&gt;&gt;&gt;&gt;&gt;冲突标识符号的文件直接进行提交（commit），从而在版本库中产生垃圾版本。</p>
<p>Subversion 有效解决了CVS 的以上问题：Subversion 记录并保持文件的冲突状态，只有当用户明确执行svn resolved 命令后，该冲突状态标识才被复位，该文件才能被提交，从而大大减少了将仍然带有&lt;&lt;&lt;&lt;&lt;&lt; … &gt;&gt;&gt;&gt;&gt;&gt;冲突标识符号的文件直接进行提交的可能性。</p>
<p>十二、 更多的本地/离线操作</p>
<p>众所周知，CVS 客户端的工作拷贝中包含了一个隐含目录CVS，该目录中记录了客户端需要的一些管理信息；与此类似，Subversion 的客户端工作拷贝中也包含了一个隐含目录.svn，该目录中同样记录了客户端需要的一些管理信息，如版本库URL，当前访问版本号等。</p>
<p>与CVS 不同的是，Subversion 的.svn 目录中还包含了工作拷贝中每一个文件的一个&#8221;只读的、干净的&#8221;副本。正是由于该副本的存在，使得Subversion 与CVS 相比，可以执行更多的本地/离线操作，即某些操作不需要访问版本库服务器，因此不需要存在从客户端到服务器的网络链接，当然也不消耗任何网络带宽，这进一步增强了Subversion 对广域网的友好支持。</p>
<p>Subversion 的以下命令可以进行离线操作：</p>
<p>svn status － 显示工作拷贝上的本地修改概况；</p>
<p>svn diff －显示工作拷贝上的本地修改细节，比较修改前后的内容；</p>
<p>svn revert － 撤销工作拷贝上的本地修改；</p>
<p>十三、 对符号链接进行版本管理</p>
<p>在Unix 文件系统中，符号链接（symbolic links，包括硬链接和软链接）是一种重要的文件系统元素。CVS 不能对符号链接进行版本管理；Subversion 则可以对符号链接进行版本管理。</p>
<p>十四、 元数据管理</p>
<p>与CVS 相比，Subversion 增加了元数据（metadata）管理机制。即可以对版本库中的文件或目录附加任意的&#8221;属性&#8221;（property），并记录属性的变化历史，也就是对元数据进行版本管理。一个Subversion 属性是一个&#8221;属性名称/属性值&#8221;的二元组，如&#8221;BugNumber= 100&#8243;就是一个属性，可以将该属性附加到版本N 上，以说明版本N 改正了编号为100的BUG。</p>
<p>Subversion 元数据的目的是提供附件的信息以满足流程或过程自动化的需要，以增强Subversion 的管理能力和自动化程度。Subversion 自身就通过&#8221;属性&#8221;来存储一些特殊的信息。一个使用Subversion 元数据的例子：可以在一些批处理的脚本程序或Subversion的钩子程序（hooks）中创建、访问、修改&#8221;属性&#8221;元数据来满足流程自动化的要求。</p>
<p>十五 VSS CVS 比较</p>
<p>VSS适合小团队使用，基本的配置管理功能都有。VSS最大的特点就是部署比较简单，上手比较快。VSS最大的缺点就是安全性问题，目录共享、文件方式存储等。当然VSS还只能在Windows下使用。</p>
<p>CVS了解过，应该说特点也很鲜明。首先CVS是开源软件，根据长期的流传，已经演变了很多版本，适合于不同的平台。因此，在CVS客户端上是多种多样的。其次，CVS的部署稍微复杂点，现对VSS来说，这是其一缺点。最后，CVS在配置管理的理念上，比VSS有所进步。</p>
<p>十六 Vss与Svn 的对比</p>
<p>1. SVN支持重命名，这对 Java开发来说非常重要。</p>
<p>为了得到更好的代码，开发中需要经常进行重构，重构就经常涉及到文件的重构名，而重命名中 VSS 中是不被支持的。</p>
<p>2. 开发的时候不一定要锁定。</p>
<p>一方面导致重构不方便，另一方面，不能离线开发，使用 SVN 就不同，可以带回家继续开发，回来后，提交就行了。</p>
<p>3. 多平台。<br />
可以支持多个平台下的操作</p>
<p>4. 更好的客户端支持。<br />
Eclipse 中的 VSS Plugin 不如它的 SVN Plugin 好用。一个在 Windows 下用的 SVN 客户端 TortoiseSVN 也比 VSS 的客户端好用（VSS 只有微软提供的一个 GUI 客户端）。</p>
<p>5. 更好地与外围工具集成。</p>
<p>各种各样的外围工具（主要是服务器端），满足多种需要。如果有需要，也可以自己写插件或管理脚本，开放的架构，允许我们这样做。</p>
<p>6. 方便。</p>
<p>一个例子：部署应用的时候，以前的做法是找出一个项目中修改过的文件，更新到服务器上去，现在可以在服务器上执行 svn export 命令，把代码库中的最新版本导出，完成部署（也可以替换回老版本）。</p>
<p>7. 速度与稳定性看起来都不错。<br />
学习它的管理、它的工作方式，是值得的。而 VSS 是一个已经被逐渐抛弃的软件。如果时间不是多得没处用，那么就把时间花在最值得花的东西上面。 </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/208.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于系统运维自身修养</title>
		<link>http://www.china-php.com/experience/204.html</link>
		<comments>http://www.china-php.com/experience/204.html#comments</comments>
		<pubDate>Sat, 09 Oct 2010 12:50:22 +0000</pubDate>
		<dc:creator>彭 弘泰</dc:creator>
				<category><![CDATA[经验分享]]></category>
		<category><![CDATA[工作态度]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=204</guid>
		<description><![CDATA[运维工作师需要什么样的技能及素质 做为一名运维工程师需要什么样的技能及素质呢，首先说说技能吧，运维是一个集多IT工种技能与一身的岗位，对系统-&#62;网络-&#62;存储-&#62;协议-&#62;需求-&#62;开发-&#62;测试-&#62;安全等各环节都需要了解一些，但对于某些环节需熟悉甚至精通，如系统(基本操作系统的熟悉使用,*nix,windows..)、协议、开发(日常很重要的工作是自动运维化相关开发、大规模集群工具开发、管理）、通用应用（如lvs、ha、web server、db、中间件、存储等。。。）、网络（至少要对应用所处网络环境非常了解）； 运维工程师的职责         1、保证服务达到要求的线标准，如99.9%；保证线上稳定，如，网络/系统运维工程师对网络、系统稳定负责，那应用运维就需对线上应用的稳定负责。 　　2、不断的提升应用的可靠性与健壮性、性能优化、安全提升；这方面非常考验主动性、和创新思维 　　3、网站各层面实时状态的监控、统计的覆盖度；软件、硬件、运行状态，能监控的都需要监控统计，避免监控死角、并能实时了解应用的运转情况。 　　4、通过创新思维解决运维效率问题；目前各公司大部份运维主要工作还是依赖人工操作干预，需要尽可能的解放双手 　　5、运维知识的积累与沉淀、文档的完备性，运维是一个经验性非常强的岗位，好的经验与陷阱都需积累下来，避免重复性范错。 　　6、成本控制；通过技术手段提升硬件承载、架构优化，如虚拟化技术，节省硬件开支。 　　7、自动化运维；能对日常机械化工作进行提炼、设计并开发成工具、系统，能让系统自动完成的尽量依靠系统；]]></description>
			<content:encoded><![CDATA[<p>运维工作师需要什么样的技能及素质</p>
<p>做为一名运维工程师需要什么样的技能及素质呢，首先说说技能吧，运维是一个集多IT工种技能与一身的岗位，对系统-&gt;网络-&gt;存储-&gt;协议-&gt;需求-&gt;开发-&gt;测试-&gt;安全等各环节都需要了解一些，但对于某些环节需熟悉甚至精通，如系统(基本操作系统的熟悉使用,*nix,windows..)、协议、开发(日常很重要的工作是自动运维化相关开发、大规模集群工具开发、管理）、通用应用（如lvs、ha、web server、db、中间件、存储等。。。）、网络（至少要对应用所处网络环境非常了解）；</p>
<p>运维工程师的职责</p>
<p>        1、保证服务达到要求的线标准，如99.9%；保证线上稳定，如，网络/系统运维工程师对网络、系统稳定负责，那应用运维就需对线上应用的稳定负责。</p>
<p>　　2、不断的提升应用的可靠性与健壮性、性能优化、安全提升；这方面非常考验主动性、和创新思维</p>
<p>　　3、网站各层面实时状态的监控、统计的覆盖度；软件、硬件、运行状态，能监控的都需要监控统计，避免监控死角、并能实时了解应用的运转情况。</p>
<p>　　4、通过创新思维解决运维效率问题；目前各公司大部份运维主要工作还是依赖人工操作干预，需要尽可能的解放双手<br />
　　5、运维知识的积累与沉淀、文档的完备性，运维是一个经验性非常强的岗位，好的经验与陷阱都需积累下来，避免重复性范错。</p>
<p>　　6、成本控制；通过技术手段提升硬件承载、架构优化，如虚拟化技术，节省硬件开支。</p>
<p>　　7、自动化运维；能对日常机械化工作进行提炼、设计并开发成工具、系统，能让系统自动完成的尽量依靠系统；</p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/experience/204.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>古蓝科技的七年之痒</title>
		<link>http://www.china-php.com/news/196.html</link>
		<comments>http://www.china-php.com/news/196.html#comments</comments>
		<pubDate>Thu, 07 Oct 2010 17:43:52 +0000</pubDate>
		<dc:creator>古蓝科技</dc:creator>
				<category><![CDATA[公司动态]]></category>
		<category><![CDATA[古蓝]]></category>

		<guid isPermaLink="false">http://www.china-php.com/?p=196</guid>
		<description><![CDATA[2010年10月9日，古蓝科技正式结束七年之痒，我想说，这七年，真很痒。 2003年10月9日，一张营业执照发到我手里，连云港古蓝网络科技有限公司正式成立，我的创业生涯拉开序幕。今天还路过新龙新村，回忆起当年刚创业的房子，颇有感慨。80平方的民房，既是我住的地方，也是公司的办公地点。我和胖子两个人，拿到营业执照后互相看了看，我说，我们下面该干什么？我居然就是在这种朦胧的状态下走上了创业的道路。随后，在这间民房里，遇到了一些人，有代表特征的是刘洋。 刘洋，还是一个胖子，虽然嘴巴有点跑火车，但是人还算不错，我们聊得来。我们一起吃泡面，一起折腾项目，一起做一些现在想起来非常幼稚的事情。不管怎么样，也算混了1年，最终结果是，我们活下来了。 2004年7月4日，我们搬到了兆隆，到了宽敞的办公室，心情非常愉快。招兵买马，准备做一番轰轰烈烈的事业。经过一年的磨练，我们已经有了一些自己的想法，城市生活网的构思也渐渐成熟。在这里，我遇到了懵懵懂懂的武畅。 武畅，一个内向的程序员，刚开始到我们公司对着电脑发呆了一周，在我发誓明天如果他还发呆的话就赶走他的时候，他开始敲代码了。我们一起稀里糊涂的把连云港城市生活网弄上了线，也不知道为什么，流量上的挺快，那种得到一点点成功就非常喜悦和满足的心情，好久没有了。 2005年12月18日，连云港城市生活网第二版正式上线，这里不得不说到另外一个人：张柱。 张柱，一个非常优秀的程序员，大学毕业到古蓝，从什么都不懂到后来的技术大拿，完全是刻苦学习的结果。当时，生活网新版上线前一周，我们三人加上我媳妇几乎通宵一周，那种熬不住快要睡着时候的幸福感难以用言语来表述。 2007年11月开始，古蓝科技开始做外包，业务也越来越好，徐国祥、李丽等一批技术骨干全部成长起来了，一时间，古蓝科技成为了连云港最著名的技术公司了。2008年6月，苏海瑞来到了古蓝，可以说，又是一名猛将加盟了。 苏海瑞，一个能力全面的技术人员，表达能力强，逻辑清晰，成熟。虽然不是做PHP出身，但是学习很快，很快就担当了重要的开发任务。 2009年5月，我们搬进了开发区的软件园，古蓝科技在政府的扶持下进入了新时代。 到今天，古蓝科技人是换了一茬又一茬，但是我觉得精神还在，还在延续。古蓝科技辛辛苦苦创下的事业虽然不能算是轰轰烈烈，但我们也觉得有滋有味。我想说，这七年，真的很痒。我们经过改革的阵痛，人员的更迭，事业的不顺，工作的失误。。。。。。 不再感慨了，我要感谢一批人，那一批曾经为和正在为古蓝科技做贡献的人，以及那些关心过、帮助过古蓝科技成长的人。 董伟、武畅、汤俊昌、刘洋、汪洋、徐国祥、张柱、李丽、王芸、张明佳、李山、孙振山、许小东、尚文景、许强、江浩、顾保卫、苏海瑞、江希波、段晓明、汪维艳、闫和顺、赵卫华、彭弘泰、孙薇、张兴旺、李振华等等，当然也包括我自己。请原谅，还有很多很多人的名字我记得比较模糊了，这里我就不一一列举了。总之，感谢你们，感谢你们为古蓝科技的今天所做的贡献。我将永远记住你们，记住你们对古蓝的恩情，有一天古蓝发展壮大了，我会很骄傲的告诉大家，是你们把古蓝托举到镁光灯下的，是你们书写了古蓝的历史。 当然，我们还在一起奋斗的战友我特别送你们一句话：古蓝科技辉煌的明天正在向我们招手，和我一起奋斗吧，兄弟，相信我们只要坚持，美好的梦想定能实现。]]></description>
			<content:encoded><![CDATA[<p>2010年10月9日，古蓝科技正式结束七年之痒，我想说，这七年，真很痒。</p>
<p>2003年10月9日，一张营业执照发到我手里，连云港古蓝网络科技有限公司正式成立，我的创业生涯拉开序幕。今天还路过新龙新村，回忆起当年刚创业的房子，颇有感慨。80平方的民房，既是我住的地方，也是公司的办公地点。我和胖子两个人，拿到营业执照后互相看了看，我说，我们下面该干什么？我居然就是在这种朦胧的状态下走上了创业的道路。随后，在这间民房里，遇到了一些人，有代表特征的是刘洋。</p>
<p>刘洋，还是一个胖子，虽然嘴巴有点跑火车，但是人还算不错，我们聊得来。我们一起吃泡面，一起折腾项目，一起做一些现在想起来非常幼稚的事情。不管怎么样，也算混了1年，最终结果是，我们活下来了。</p>
<p>2004年7月4日，我们搬到了兆隆，到了宽敞的办公室，心情非常愉快。招兵买马，准备做一番轰轰烈烈的事业。经过一年的磨练，我们已经有了一些自己的想法，城市生活网的构思也渐渐成熟。在这里，我遇到了懵懵懂懂的武畅。</p>
<p>武畅，一个内向的程序员，刚开始到我们公司对着电脑发呆了一周，在我发誓明天如果他还发呆的话就赶走他的时候，他开始敲代码了。我们一起稀里糊涂的把连云港城市生活网弄上了线，也不知道为什么，流量上的挺快，那种得到一点点成功就非常喜悦和满足的心情，好久没有了。</p>
<p>2005年12月18日，连云港城市生活网第二版正式上线，这里不得不说到另外一个人：张柱。</p>
<p>张柱，一个非常优秀的程序员，大学毕业到古蓝，从什么都不懂到后来的技术大拿，完全是刻苦学习的结果。当时，生活网新版上线前一周，我们三人加上我媳妇几乎通宵一周，那种熬不住快要睡着时候的幸福感难以用言语来表述。</p>
<p>2007年11月开始，古蓝科技开始做外包，业务也越来越好，徐国祥、李丽等一批技术骨干全部成长起来了，一时间，古蓝科技成为了连云港最著名的技术公司了。2008年6月，苏海瑞来到了古蓝，可以说，又是一名猛将加盟了。</p>
<p>苏海瑞，一个能力全面的技术人员，表达能力强，逻辑清晰，成熟。虽然不是做PHP出身，但是学习很快，很快就担当了重要的开发任务。</p>
<p>2009年5月，我们搬进了开发区的软件园，古蓝科技在政府的扶持下进入了新时代。</p>
<p>到今天，古蓝科技人是换了一茬又一茬，但是我觉得精神还在，还在延续。古蓝科技辛辛苦苦创下的事业虽然不能算是轰轰烈烈，但我们也觉得有滋有味。我想说，这七年，真的很痒。我们经过改革的阵痛，人员的更迭，事业的不顺，工作的失误。。。。。。</p>
<p>不再感慨了，我要感谢一批人，那一批曾经为和正在为古蓝科技做贡献的人，以及那些关心过、帮助过古蓝科技成长的人。</p>
<p>董伟、武畅、汤俊昌、刘洋、汪洋、徐国祥、张柱、李丽、王芸、张明佳、李山、孙振山、许小东、尚文景、许强、江浩、顾保卫、苏海瑞、江希波、段晓明、汪维艳、闫和顺、赵卫华、彭弘泰、孙薇、张兴旺、李振华等等，当然也包括我自己。请原谅，还有很多很多人的名字我记得比较模糊了，这里我就不一一列举了。总之，感谢你们，感谢你们为古蓝科技的今天所做的贡献。我将永远记住你们，记住你们对古蓝的恩情，有一天古蓝发展壮大了，我会很骄傲的告诉大家，是你们把古蓝托举到镁光灯下的，是你们书写了古蓝的历史。</p>
<p>当然，我们还在一起奋斗的战友我特别送你们一句话：古蓝科技辉煌的明天正在向我们招手，和我一起奋斗吧，兄弟，相信我们只要坚持，美好的梦想定能实现。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.china-php.com/news/196.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

