<?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>CN &#8211; bhzhuOS爱好者(原StartOS爱好者)</title>
	<atom:link href="https://www.bhzhu203.com/tag/cn/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bhzhu203.com</link>
	<description>QQ群号125732839</description>
	<lastBuildDate>Mon, 22 Jan 2018 13:31:25 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>
	<item>
		<title>在 Linux 上简单模拟系统负载的方法</title>
		<link>https://www.bhzhu203.com/2018/01/22/%e5%9c%a8-linux-%e4%b8%8a%e7%ae%80%e5%8d%95%e6%a8%a1%e6%8b%9f%e7%b3%bb%e7%bb%9f%e8%b4%9f%e8%bd%bd%e7%9a%84%e6%96%b9%e6%b3%95/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Mon, 22 Jan 2018 13:31:25 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[14]]></category>
		<category><![CDATA[28]]></category>
		<category><![CDATA[CN]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=450</guid>

					<description><![CDATA[编译自：https://bash-prompt.net/guides/creat [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="header_info" class="h bm bm_c">
<p class="copyright"><span class="z textcut">编译自：<a href="https://bash-prompt.net/guides/create-system-load/" target="_blank" rel="noopener">https://bash-prompt.net/guides/create-system-load/</a></span> <span class="y">作者： Elliot Cooper</span> <br class="clear" /> <span class="z">原创：<a href="https://linux.cn/lctt/" target="_blank" rel="noopener">LCTT</a> <a href="https://linux.cn/article-9235-1.html" target="_blank" rel="noopener">https://linux.cn/article-9235-1.html</a></span> <span class="y">译者： <a href="https://linux.cn/lctt/lujun9972" target="_blank" rel="noopener">DarkSun</a></span> <br class="clear" /> <span class="z">本文地址：<a href="https://linux.cn/article-9235-1.html">https://linux.cn/article-9235-1.html</a></span></p>
<p class="xg1">2018-01-14 10:31</p>
</div>
<div id="diysummarytop" class="area"></div>
<div id="diysummarybottom" class="area"></div>
<div class="d">
<div id="diycontenttop" class="area"></div>
<div id="inner_nav" class="bm">
<div class="bm_h cl">本文导航</div>
<div class="bm_c inner_menu">
<ul class="xl cl">
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9235-1.html#3_496">CPU</a><span class="y">13%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9235-1.html#3_1063">内存占用</a><span class="y">28%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9235-1.html#3_2054">磁盘 I/O</a><span class="y">54%</span></li>
</ul>
</div>
</div>
<div id="ad10" class="linuxcnad"></div>
<div id="article_content" class="bm">
<div class="linuxcnad"></div>
<p>系统管理员通常需要探索在不同负载对应用性能的影响。这意味着必须要重复地人为创造负载。当然，你可以通过专门的工具来实现，但有时你可能不想也无法安装新工具。</p>
<p>每个 Linux 发行版中都自带有创建负载的工具。他们不如专门的工具那么灵活，但它们是现成的，而且无需专门学习。</p>
<p><a id="3_496" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_1">CPU</h3>
<p>下面命令会创建 CPU 负荷，方法是通过压缩随机数据并将结果发送到 <code>/dev/null</code>：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">cat</span> <span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">urandom </span><span class="pun">|</span><span class="pln"> gzip </span><span class="pun">-</span><span class="lit">9</span> <span class="pun">&gt;</span> <span class="str">/dev/</span><span class="kwd">null</span></code></li>
</ol>
<p>如果你想要更大的负荷，或者系统有多个核，那么只需要对数据进行压缩和解压就行了，像这样：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">cat</span> <span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">urandom </span><span class="pun">|</span><span class="pln"> gzip </span><span class="pun">-</span><span class="lit">9</span> <span class="pun">|</span><span class="pln"> gzip </span><span class="pun">-</span><span class="pln">d </span><span class="pun">|</span><span class="pln"> gzip </span><span class="pun">-</span><span class="lit">9</span> <span class="pun">|</span><span class="pln"> gzip </span><span class="pun">-</span><span class="pln">d </span><span class="pun">&gt;</span> <span class="str">/dev/</span><span class="kwd">null</span></code></li>
</ol>
<p>按下 <code>CTRL+C</code> 来终止进程。</p>
<p><a id="3_1063" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_2">内存占用</h3>
<p>下面命令会减少可用内存的总量。它是通过在内存中创建文件系统然后往里面写文件来实现的。你可以使用任意多的内存，只需哟往里面写入更多的文件就行了。</p>
<p>首先，创建一个挂载点，然后将 ramfs 文件系统挂载上去：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">mkdir</span><span class="pln"> z</span></code></li>
<li class="L1"><code><span class="kwd">mount</span> <span class="pun">-</span><span class="pln">t ramfs ramfs z</span><span class="pun">/</span></code></li>
</ol>
<p>第二步，使用 <code>dd</code> 在该目录下创建文件。这里我们创建了一个 128M 的文件：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">dd</span> <span class="kwd">if</span><span class="pun">=</span><span class="str">/dev/</span><span class="pln">zero of</span><span class="pun">=</span><span class="pln">z</span><span class="pun">/</span><span class="kwd">file</span><span class="pln"> bs</span><span class="pun">=</span><span class="lit">1M</span><span class="pln"> count</span><span class="pun">=</span><span class="lit">128</span></code></li>
</ol>
<p>文件的大小可以通过下面这些操作符来修改：</p>
<ul>
<li><code>bs=</code> 块大小。可以是任何数字后面接上 <code>B</code>（表示字节），<code>K</code>（表示 KB），<code>M</code>（ 表示 MB）或者 <code>G</code>（表示 GB）。</li>
<li><code>count=</code> 要写多少个块。</li>
</ul>
<p><a id="3_2054" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_3">磁盘 I/O</h3>
<p>创建磁盘 I/O 的方法是先创建一个文件，然后使用 <code>for</code> 循环来不停地拷贝它。</p>
<p>下面使用命令 <code>dd</code> 创建了一个全是零的 1G 大小的文件：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">dd</span> <span class="kwd">if</span><span class="pun">=</span><span class="str">/dev/</span><span class="pln">zero of</span><span class="pun">=</span><span class="pln">loadfile bs</span><span class="pun">=</span><span class="lit">1M</span><span class="pln"> count</span><span class="pun">=</span><span class="lit">1024</span></code></li>
</ol>
<p>下面命令用 <code>for</code> 循环执行 10 次操作。每次都会拷贝 <code>loadfile</code> 来覆盖 <code>loadfile1</code>：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span> <span class="pun">{</span><span class="lit">1.</span><span class="pun">.</span><span class="lit">10</span><span class="pun">};</span> <span class="kwd">do</span> <span class="kwd">cp</span><span class="pln"> loadfile loadfile1</span><span class="pun">;</span> <span class="kwd">done</span></code></li>
</ol>
<p>通过修改 <code>{1..10}</code> 中的第二个参数来调整运行时间的长短。（LCTT 译注：你的 Linux 系统中的默认使用的 <code>cp</code> 命令很可能是 <code>cp -i</code> 的别名，这种情况下覆写会提示你输入 <code>y</code> 来确认，你可以使用 <code>-f</code> 参数的 <code>cp</code> 命令来覆盖此行为，或者直接用 <code>/bin/cp</code> 命令。）</p>
<p>若你想要一直运行，直到按下 <code>CTRL+C</code> 来停止，则运行下面命令：</p>
<ol class="linenums">
<li class="L0"><code><span class="kwd">while</span> <span class="kwd">true</span><span class="pun">;</span> <span class="kwd">do</span> <span class="kwd">cp</span><span class="pln"> loadfile loadfile1</span><span class="pun">;</span> <span class="kwd">done</span></code></li>
</ol>
<hr />
<p>via: <a class="ext" href="https://bash-prompt.net/guides/create-system-load/" target="_blank" rel="external nofollow noopener">https://bash-prompt.net/guides/create-system-load/</a></p>
<p>作者：<a class="ext" href="https://bash-prompt.net" target="_blank" rel="external nofollow noopener">Elliot Cooper</a> 译者：<a class="ext" href="https://github.com/lujun9972" target="_blank" rel="external nofollow noopener">lujun9972</a> 校对：<a class="ext" href="https://github.com/wxy" target="_blank" rel="external nofollow noopener">wxy</a></p>
<p>本文由 <a class="ext" href="https://github.com/LCTT/TranslateProject" target="_blank" rel="external nofollow noopener">LCTT</a> 原创编译，<a href="https://linux.cn/article-9235-1.html?utm_source=index&amp;utm_medium=more">Linux中国</a> 荣誉推出</p>
</div>
</div>
<div id="footer_info" class="h bm_c bm">
<p class="copyright"><span class="z textcut">编译自：<a href="https://bash-prompt.net/guides/create-system-load/" target="_blank" rel="noopener">https://bash-prompt.net/guides/create-system-load/</a></span> <span class="y">作者： Elliot Cooper</span> <br class="clear" /> <span class="z">原创：<a href="https://linux.cn/lctt/" target="_blank" rel="noopener">LCTT</a> <a href="https://linux.cn/article-9235-1.html" target="_blank" rel="noopener">https://linux.cn/article-9235-1.html</a></span> <span class="y">译者： lujun9972</span> <br class="clear" /><br />
本文由 LCTT 原创翻译，<a href="https://linux.cn/article-9235-1.html">Linux中国首发</a>。也想加入译者行列，为开源做一些自己的贡献么？欢迎加入 <a href="http://lctt.github.io/" target="_blank" rel="noopener">LCTT</a>！<br />
翻译工作和译文发表仅用于学习和交流目的，翻译工作遵照 <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank" rel="noopener">CC-BY-NC-SA 协议规定</a>，如果我们的工作有侵犯到您的权益，请及时联系我们。 <br class="clear" /> 欢迎遵照 <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank" rel="noopener">CC-BY-NC-SA 协议规定</a>转载，敬请在正文中标注并保留原文/译文链接和作者/译者等信息。 <br class="clear" /> 文章仅代表作者的知识和看法，如有不同观点，请楼下排队<a>吐槽</a> <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bash 脚本：正则表达式基础篇</title>
		<link>https://www.bhzhu203.com/2017/12/28/bash-%e8%84%9a%e6%9c%ac%ef%bc%9a%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e5%9f%ba%e7%a1%80%e7%af%87/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Dec 2017 13:11:47 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[70]]></category>
		<category><![CDATA[CN]]></category>
		<category><![CDATA[HTTPS]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=448</guid>

					<description><![CDATA[原创：LCTT https://linux.cn/article-9182-1. [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="header_info" class="h bm bm_c">
<p class="copyright"><br class="clear" /> <span class="z">原创：<a href="https://linux.cn/lctt/" target="_blank" rel="noopener">LCTT</a> <a href="https://linux.cn/article-9182-1.html" target="_blank" rel="noopener">https://linux.cn/article-9182-1.html</a></span> <span class="y">译者： <a href="https://linux.cn/lctt/kimii" target="_blank" rel="noopener">kimii</a></span> <br class="clear" /> <span class="z">本文地址：<a href="https://linux.cn/article-9182-1.html">https://linux.cn/article-9182-1.html</a></span></p>
<p class="xg1">2017-12-27 15:11    收藏: <em id="_favtimes">1</em></p>
</div>
<div id="diysummarytop" class="area"></div>
<div id="diysummarybottom" class="area"></div>
<div class="d">
<div id="diycontenttop" class="area"></div>
<div id="inner_nav" class="bm">
<div class="bm_h cl">本文导航</div>
<div class="bm_c inner_menu">
<ul class="xl cl">
<li><span class="folder"><a>&#8211;</a></span><a href="https://linux.cn/article-9182-1.html#3_2078">基础的正则表示式</a><span class="y">23%</span>
<ul class="xl cl">
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_3172">. （点）</a><span class="y">35%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_3837">[ ]</a><span class="y">43%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_4458">[^ ]</a><span class="y">50%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_5511">* (星号)</a><span class="y">62%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_5834">+</a><span class="y">66%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_6225">?</a><span class="y">70%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_6513">非常重要的提示</a><span class="y">73%</span></li>
<li><span class="folder">&#8211;</span><a href="https://linux.cn/article-9182-1.html#4_7542">\</a><span class="y">85%</span></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="ad10" class="linuxcnad"></div>
<div id="article_content" class="bm">
<div class="linuxcnad"></div>
<p><ruby>正则表达式<rt>Regular expressions</rt></ruby>（简写为 regex 或者 regexp）基本上是定义一种搜索模式的字符串，可以被用来执行“搜索”或者“搜索并替换”操作，也可以被用来验证像密码策略等条件。</p>
<p>正则表达式是一个我们可利用的非常强大的工具，并且使用正则表达式的优点是它能在几乎所有计算机语言中被使用。所以如果你使用 Bash 脚本或者创建一个 python 程序时，我们可以使用正则表达式，或者也可以写一个单行搜索查询。</p>
<p>在这篇教程中，我们将会学习一些正则表达式的基本概念，并且学习如何在 Bash 中通过 <code>grep</code> 使用它们，但是如果你希望在其他语言如 python 或者 C 中使用它们，你只能使用正则表达式部分。那么让我们通过正则表达式的一个例子开始吧，</p>
<p>正则表达式看起来像 <code>/t[aeiou]l/</code> 这个样子。</p>
<p>但这是什么意思呢？它意味着所提到的正则表达式将寻找一个词，它以 <code>t</code> 开始，在中间包含字母 <code>a e i o u</code> 中任意一个，并且字母 <code>l</code> 最为最后一个字符。它可以是 <code>tel</code>，<code>tal</code> 或者 <code>til</code>，可以匹配一个单独的词或者其它单词像 <code>tilt</code>，<code>brutal</code> 或者 <code>telephone</code> 的一部分。</p>
<p>grep 使用正则表达式的语法是 <code>$ grep "regex_search_term" file_location</code></p>
<p>如果不理解，不要担心，这只是一个例子，来展示可以利用正则表达式获取什么，相信我，这是最简单的例子。我们可以从正则表达式中获取更多。现在我们将从正则表达式基础的开始。</p>
<ul>
<li>推荐阅读: <a class="ext" href="http://linuxtechlab.com/useful-linux-commands-you-should-know/" target="_blank" rel="external nofollow noopener">你应该知道的有用的 linux 命令</a></li>
</ul>
<p><a id="3_2078" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_1">基础的正则表示式</h3>
<p>现在我们开始学习一些被称为<ruby>元字符<rt>MetaCharacters</rt></ruby>的特殊字符。它们可以帮助我们创建更复杂的正则表达式搜索项。下面提到的是基本元字符的列表，</p>
<ul>
<li><code>.</code> 点将匹配任意字符</li>
<li><code>[ ]</code> 将匹配一个字符范围</li>
<li><code>[^ ]</code> 将匹配除了括号中提到的那个之外的所有字符</li>
<li><code>*</code> 将匹配零个或多个前面的项</li>
<li><code>+</code> 将匹配一个或多个前面的项</li>
<li><code>?</code> 将匹配零个或一个前面的项</li>
<li><code>{n}</code> 将匹配 n 次前面的项</li>
<li><code>{n,}</code> 将匹配 n 次或更多前面的项</li>
<li><code>{n,m}</code> 将匹配在 n 和 m 次之间的项</li>
<li><code>{,m}</code> 将匹配少于或等于 m 次的项</li>
<li><code>\</code> 是一个转义字符，当我们需要在我们的搜索中包含一个元字符时使用</li>
</ul>
<p>现在我们将用例子讨论所有这些元字符。</p>
<p><a id="4_3172" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_2"><code>.</code> （点）</h4>
<p>它用于匹配出现在我们搜索项中的任意字符。举个例子，我们可以使用点如：</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"d.g"</span><span class="pln"> file1</span></code></li>
</ol>
<p>这个正则表达式意味着我们在名为 ‘file1’ 的文件中查找的词以 <code>d</code> 开始，以 <code>g</code>结尾，中间可以有 1 个字符的字符串。同样，我们可以使用任意数量的点作为我们的搜索模式，如 <code>T......h</code>，这个查询项将查找一个词，以 <code>T</code> 开始，以 <code>h</code> 结尾，并且中间可以有任意 6 个字符。</p>
<p><a id="4_3837" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_3"><code>[ ]</code></h4>
<p>方括号用于定义字符范围。例如，我们需要搜索一些特别的单词而不是匹配任何字符，</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"N[oen]n"</span><span class="pln"> file2</span></code></li>
</ol>
<p>这里，我们正寻找一个单词，以 <code>N</code>开头，以 <code>n</code> 结尾，并且中间只能有 <code>o</code>、<code>e</code> 或者 <code>n</code> 中的一个。 在方括号中我们可以提到单个到任意数量的字符。</p>
<p>我们在方括号中也可以定义像 <code>a-e</code>或者 <code>1-18</code> 作为匹配字符的列表。</p>
<p><a id="4_4458" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_4"><code>[^ ]</code></h4>
<p>这就像正则表达式的 not 操作。当使用 <code>[^ ]</code> 时，它意味着我们的搜索将包括除了方括号内提到的所有字符。例如，</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"St[^1-9]d"</span><span class="pln"> file3</span></code></li>
</ol>
<p>这意味着我们可以拥有所有这样的单词，它们以 <code>St</code> 开始，以字母 <code>d</code> 结尾，并且不得包含从 <code>1</code> 到 <code>9</code> 的任何数字。</p>
<p>到现在为止，我们只使用了仅需要在中间查找单个字符的正则表达式的例子，但是如果我们需要更多字符该怎么办呢。假设我们需要找到以一个字符开头和结尾的所有单词，并且在中间可以有任意数量的字符。这就是我们使用乘数元字符如 <code>+</code> <code>*</code> 与 <code>?</code> 的地方。</p>
<p><code>{n}</code>、<code>{n,m}</code>、<code>{n,}</code> 或者 <code>{,m}</code> 也是可以在我们的正则表达式项中使用的其他乘数元字符。</p>
<p><a id="4_5511" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_5"><code>*</code> (星号)</h4>
<p>以下示例匹配字母 <code>k</code> 的任意出现次数，包括一次没有：</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"lak*"</span><span class="pln"> file4</span></code></li>
</ol>
<p>它意味着我们可以匹配到 <code>lake</code>、<code>la</code> 或者 <code>lakkkk</code>。</p>
<p><a id="4_5834" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_6"><code>+</code></h4>
<p>以下模式要求字符串中的字母 <code>k</code> 至少被匹配到一次：</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"lak+"</span><span class="pln"> file5</span></code></li>
</ol>
<p>这里 <code>k</code> 在我们的搜索中至少需要发生一次，所以我们的结果可以为 <code>lake</code> 或者 <code>lakkkk</code>，但不能是 <code>la</code>。</p>
<p><a id="4_6225" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_7"><code>?</code></h4>
<p>在以下模式匹配中</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"ba?b"</span><span class="pln"> file6</span></code></li>
</ol>
<p>匹配字符串 <code>bb</code> 或 <code>bab</code>，使用 <code>?</code> 乘数，我们可以有一个或零个字符的出现。</p>
<p><a id="4_6513" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h4 id="toc_8">非常重要的提示</h4>
<p>当使用乘数时这是非常重要的，假设我们有一个正则表达式</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"S.*l"</span><span class="pln"> file7</span></code></li>
</ol>
<p>我们得到的结果是 <code>small</code>、<code>silly</code>，并且我们也得到了 <code>Shane is a little to play ball</code>。但是为什么我们得到了 <code>Shane is a little to play ball</code>？我们只是在搜索中寻找单词，为什么我们得到了整个句子作为我们的输出。</p>
<p>这是因为它满足我们的搜索标准，它以字母 <code>s</code> 开头，中间有任意数量的字符并以字母 <code>l</code> 结尾。那么，我们可以做些什么来纠正我们的正则表达式来只是得到单词而不是整个句子作为我们的输出。</p>
<p>我们在正则表达式中需要增加 <code>?</code> 元字符，</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"S.*?l"</span><span class="pln"> file7</span></code></li>
</ol>
<p>这将会纠正我们正则表达式的行为。</p>
<h4 id="toc_9"><code>\</code></h4>
<p><code>\</code> 是当我们需要包含一个元字符或者对正则表达式有特殊含义的字符的时候来使用。例如，我们需要找到所有以点结尾的单词，所以我们可以使用：</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">$ </span><span class="kwd">grep</span> <span class="str">"S.*\\."</span><span class="pln"> file8</span></code></li>
</ol>
<p>这将会查找和匹配所有以一个点字符结尾的词。</p>
<p>通过这篇基本正则表达式教程，我们现在有一些关于正则表达式如何工作的基本概念。在我们的下一篇教程中，我们将学习一些高级的正则表达式的概念。同时尽可能多地练习，创建正则表达式并试着尽可能多的在你的工作中加入它们。如果有任何疑问或问题，您可以在下面的评论区留言。</p>
<hr />
<p>via: <a class="ext" href="http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/" target="_blank" rel="external nofollow noopener">http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/</a></p>
<p>作者：<a class="ext" href="http://linuxtechlab.com/author/shsuain/" target="_blank" rel="external nofollow noopener">SHUSAIN</a> 译者：<a class="ext" href="https://github.com/kimii" target="_blank" rel="external nofollow noopener">kimii</a> 校对：<a class="ext" href="https://github.com/wxy" target="_blank" rel="external nofollow noopener">wxy</a></p>
<p>本文由 <a class="ext" href="https://github.com/LCTT/TranslateProject" target="_blank" rel="external nofollow noopener">LCTT</a> 原创编译，<a href="https://linux.cn/article-9182-1.html">Linux中国</a> 荣誉推出</p>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SDB:Setup Ipsec VPN with Strongswan</title>
		<link>https://www.bhzhu203.com/2016/04/28/sdbsetup-ipsec-vpn-with-strongswan/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 08:23:35 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[CN]]></category>
		<category><![CDATA[Distinguished Names]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=251</guid>

					<description><![CDATA[生成证书（可选） 注意 如果不生成证书，后面配置部分的配置中用 pubkey 认 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>生成证书（可选）<br />
注意 如果不生成证书，后面配置部分的配置中用 pubkey 认证的 conn 都不能用，甚至不能保留在配置中。</p>
<p>每一个完整的 ssl 证书都有一个公钥和一个私钥，它们可以在一起也可以分开放（当然如果你要在网络上传输，肯定只能用公钥）。公钥是在网络上传输的，而私钥是藏好用来和接收到的公钥配对的（因此私钥里也有整个公钥，用来配对）。<br />
生成 CA 证书</p>
<p>生成一个私钥：</p>
<p>ipsec pki &#8211;gen &#8211;outform pem &gt; ca.pem</p>
<p>没什么好解释的，&#8211;outform 一共有三个格式可选，但是另外两个是 der 和 pgp&#8230;</p>
<p>基于这个私钥自己签一个 CA 证书：</p>
<p>ipsec pki &#8211;self &#8211;in ca.pem &#8211;dn &#8220;C=CN, O=strongSwan, CN=strongSwan CA&#8221; &#8211;ca &#8211;outform pem &gt; ca.cert.pem</p>
<p>这里 &#8211;self 表示自签证书，&#8211;in 是输入的私钥，&#8211;dn 是判别名，&#8211;ca 表示生成 CA，其它同上。这里需要解释下判别名：</p>
<p>C 表示国家名，同样还有 ST 州/省名，L 地区名，STREET（全大写） 街道名。<br />
O 表示组织名。<br />
CN 为通用名。</p>
<p>具体见微软的文档：Distinguished Names<br />
生成服务器证书</p>
<p>同样生成私钥：</p>
<p>ipsec pki &#8211;gen &#8211;outform pem &gt; server.pem</p>
<p>用我们刚才自签的 CA 证书给自己发一个服务器证书：</p>
<p>ipsec pki &#8211;pub &#8211;in server.pem | ipsec pki &#8211;issue &#8211;cacert ca.cert.pem<br />
&#8211;cakey ca.pem &#8211;dn &#8220;C=CN, O=strongSwan, CN=forum.suse.org.cn&#8221;<br />
&#8211;san=&#8221;forum.suse.org.cn&#8221; &#8211;flag serverAuth &#8211;flag ikeIntermediate<br />
&#8211;outform pem &gt; server.cert.pem</p>
<p>这条命令的意思解释下：</p>
<p>ipsec pki &#8211;pub &#8211;in server.pem</p>
<p>是从我们刚生成的私钥里把公钥提取出来，然后用公钥去参与后面的服务器证书签发（这个是 VPN 连接时候要用的，你不想把私钥也给它吧？那样跟没签证书一样&#8230;）。</p>
<p>&#8211;issue, &#8211;cacert 和 &#8211;cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。</p>
<p>&#8211;dn, &#8211;san，&#8211;flag 是一些客户端方面的特殊要求：</p>
<p>iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;<br />
Windows 7 不但要求了上面，还要求必须显式说明这个服务器证书的用途（用于与服务器进行认证），&#8211;flag serverAuth;<br />
非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间（IP Security IKE Intermediate）”这种增强型密钥用法（EKU），&#8211;flag ikdeIntermediate;<br />
Android 和 iOS 都要求服务器别名（serverAltName）就是服务器的 URL 或 IP 地址，&#8211;san。</p>
<p>生成客户端证书</p>
<p>依然是生成私钥：</p>
<p>ipsec pki &#8211;gen &#8211;outform pem &gt; client.pem</p>
<p>然后用刚才自签的 CA 证书来签客户端证书：</p>
<p>ipsec pki &#8211;pub &#8211;in client.pem | ipsec pki &#8211;issue &#8211;cacert caCert.pem<br />
&#8211;cakey caKey.pem &#8211;dn &#8220;C=CN, O=strongSwan, CN=client&#8221;<br />
&#8211;outform pem &gt; client.cert.pem</p>
<p>这时命令行会提示你输入两遍密码，这个就是你的客户端证书密码。</p>
<p>看懂了服务器的，客户端的也就不难理解了。除了没有那一堆特殊要求别的都一样。</p>
<p>客户端证书可以每个客户端签一个，也可以让它们公用一个。是否多签看用途，一般用于区分设备（计费是不用这样的，是用账户来区分的）。<br />
生成 pkcs12 证书（可选）</p>
<p>你可能还想生成一个可以直接导入的 pkcs12 证书（用于手机，诺基亚没这东西还不行）：</p>
<p>openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name &#8220;client&#8221;<br />
-certfile ca.cert.pem -caname &#8220;strongSwan CA&#8221; -out client.cert.p12</p>
<p>原文地址：https://zh.opensuse.org/SDB:Setup_Ipsec_VPN_with_Strongswan</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
