<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[李勇]]></title> 
<link>http://www.kevinliyong.com/index.php</link> 
<description><![CDATA[当爱在靠近]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[李勇]]></copyright>
<item>
<link>http://www.kevinliyong.com/read.php?333</link>
<title><![CDATA[Linux 技巧：让进程在后台可靠运行的几种方法]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 02 Apr 2010 09:54:19 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?333</guid> 
<description>
<![CDATA[ 
	<a href="http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/"><a href="http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/" target="_blank">http://www.ibm.com/develop...</a></a>&nbsp;&nbsp;先抄过来~！<br /><br />想让进程在断开连接后依然保持运行？如果该进程已经开始运行了该如何补救？ 如果有大量这类需求如何简化操作？<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> <p>我们经常会碰到这样的问题，用 telnet/ssh 登录了远程的 Linux 服务器，运行了一些耗时较长的任务， 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢？下面举了一些例子， 您可以针对不同的场景选择不同的方式来处理这个问题。<br /><br /><a name="N1005B" title="N1005B"></a><span class="atitle"><strong><span style="font-size: medium">nohup/setsid/&amp;</span></strong></span><br /><br /></p><p>如果只是临时有一个命令需要长时间运行，什么方法能最简便的保证它在后台稳定运行呢？ <br /><br /></p><p><table border="0" cellspacing="0" cellpadding="0" width="40%" align="right"><tbody><tr><td width="10"><img src="http://www.ibm.com/i/c.gif" border="0" width="10" height="1" /></td><td><table border="1" cellspacing="0" cellpadding="5" width="100%"><tbody><tr><td bgcolor="#eeeeee"><a name="N1006E" title="N1006E"></a><strong>hangup 名称的来由</strong><br />在 Unix 的早期版本中，每个终端都会通过 modem 和系统通讯。当用户 logout 时，modem 就会挂断（hang up）电话。 同理，当 modem 断开连接时，就会给终端发送 hangup 信号来通知其关闭所有子进程。 </td></tr></tbody></table></td></tr></tbody></table></p><p><span class="smalltitle"><strong><span style="font-size: small">解决方法：</span></strong></span></p><p>我们知道，当用户注销（logout）或者网络断开时，终端会收到 HUP（hangup）信号从而关闭其所有子进程。因此，我们的解决办法就有两种途径：要么让进程忽略 HUP 信号，要么让进程运行在新的会话里从而成为不属于此终端的子进程。 <br /><br /><strong>1. nohup</strong> </p><p>nohup 无疑是我们首先想到的办法。顾名思义，nohup 的用途就是让提交的命令忽略 hangup 信号。<br /><br /><strong>nohup 示例</strong><br /><div class="code">&#91;root@pvcent107 ~&#93;# nohup ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a> &amp;<br/>&#91;1&#93; 3059<br/>nohup: appending output to `nohup.out&#039;<br/>&#91;root@pvcent107 ~&#93;# ps -ef &#124;grep 3059<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3059&nbsp;&nbsp; 984&nbsp;&nbsp;0 21:06 pts/3&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3067&nbsp;&nbsp; 984&nbsp;&nbsp;0 21:06 pts/3&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 grep 3059<br/>&#91;root@pvcent107 ~&#93;#</div><br /><br /><strong>2。setsid</strong> </p><p>nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断，但如果我们换个角度思考，如果我们的进程不属于接受 HUP 信号的终端的子进程，那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。<br /><strong>setsid 示例</strong><br /><div class="code">&#91;root@pvcent107 ~&#93;# setsid ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>&#91;root@pvcent107 ~&#93;# ps -ef &#124;grep <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>root&nbsp;&nbsp;&nbsp;&nbsp; 31094&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;0 07:28 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>root&nbsp;&nbsp;&nbsp;&nbsp; 31102 29217&nbsp;&nbsp;0 07:29 pts/4&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 grep <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>&#91;root@pvcent107 ~&#93;#&nbsp;&nbsp; </div><br /><br /><strong>3。&amp;</strong> </p><p>这里还有一个关于 subshell 的小技巧。我们知道，将一个或多个命名包含在&ldquo;()&rdquo;中就能让这些命令在子 shell 中运行中，从而扩展出很多有趣的功能，我们现在要讨论的就是其中之一。</p><p>当我们将&quot;&amp;&quot;也放入&ldquo;()&rdquo;内之后，我们就会发现所提交的作业并不在作业列表中，也就是说，是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。<br /><br /><a name="N100D5"></a><strong>subshell 示例</strong><br /><div class="code">&#91;root@pvcent107 ~&#93;# (ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a> &amp;)<br/>&#91;root@pvcent107 ~&#93;# ps -ef &#124;grep <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>root&nbsp;&nbsp;&nbsp;&nbsp; 16270&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;0 14:13 pts/4&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>root&nbsp;&nbsp;&nbsp;&nbsp; 16278 15362&nbsp;&nbsp;0 14:13 pts/4&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 grep <a href="http://www.ibm.com" target="_blank">www.ibm.com</a><br/>&#91;root@pvcent107 ~&#93;#&nbsp;&nbsp;</div><br /><br /><a name="N100E1"></a><span class="atitle"><strong>disown</strong></span><br /><br /><a name="disown"></a><strong>disown 示例1（如果提交命令时已经用&ldquo;&amp;&rdquo;将命令放入后台运行，则可以直接使用&ldquo;disown&rdquo;）</strong><br /><div class="code">&#91;root@pvcent107 build&#93;# cp -r testLargeFile largeFile &amp;<br/>&#91;1&#93; 4825<br/>&#91;root@pvcent107 build&#93;# jobs<br/>&#91;1&#93;+&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp -i -r testLargeFile largeFile &amp;<br/>&#91;root@pvcent107 build&#93;# disown -h %1<br/>&#91;root@pvcent107 build&#93;# ps -ef &#124;grep largeFile<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4825&nbsp;&nbsp; 968&nbsp;&nbsp;1 09:46 pts/4&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 cp -i -r testLargeFile largeFile<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4853&nbsp;&nbsp; 968&nbsp;&nbsp;0 09:46 pts/4&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 grep largeFile<br/>&#91;root@pvcent107 build&#93;# logout&nbsp;&nbsp;</div><br /><div class="code">&#91;root@pvcent107 build&#93;# cp -r testLargeFile largeFile2<br/><br/>&#91;1&#93;+&nbsp;&nbsp;Stopped&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp -i -r testLargeFile largeFile2<br/>&#91;root@pvcent107 build&#93;# bg %1<br/>&#91;1&#93;+ cp -i -r testLargeFile largeFile2 &amp;<br/>&#91;root@pvcent107 build&#93;# jobs<br/>&#91;1&#93;+&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp -i -r testLargeFile largeFile2 &amp;<br/>&#91;root@pvcent107 build&#93;# disown -h %1<br/>&#91;root@pvcent107 build&#93;# ps -ef &#124;grep largeFile2<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5790&nbsp;&nbsp;5577&nbsp;&nbsp;1 10:04 pts/3&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 cp -i -r testLargeFile largeFile2<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5824&nbsp;&nbsp;5577&nbsp;&nbsp;0 10:05 pts/3&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 grep largeFile2<br/>&#91;root@pvcent107 build&#93;#&nbsp;&nbsp;</div><br /><br /><a name="N10166"></a><span class="atitle"><strong>screen</strong></span><br /><br />我们已经知道了如何让进程免受 HUP 信号的影响，但是如果有大量这种命令需要在稳定的后台里运行，如何避免对每条命令都做这样的操作呢？ <br /><br />此时最方便的方法就是 screen 了。简单的说，screen 提供了 ANSI/VT100 的终端模拟器，使它能够在一个真实终端下运行多个全屏的伪终端。screen 的参数很多，具有很强大的功能，我们在此仅介绍其常用功能以及简要分析一下为什么使用 screen 能够避免 HUP 信号的影响。<br /><br /></p><p>使用 screen 很方便，有以下几个常用选项：</p><ul><li>用screen -dmS <em>session name</em> 来建立一个处于断开模式下的会话（并指定其会话名）。</li><li>用screen -list 来列出所有会话。</li><li>用screen -r <em>session name</em> 来重新连接指定会话。</li><li>用快捷键CTRL-a d 来暂时断开当前会话。</li></ul><p><a name="screen"></a><strong>screen 示例</strong><br /><div class="code">&#91;root@pvcent107 ~&#93;# screen -dmS Urumchi<br/>&#91;root@pvcent107 ~&#93;# screen -list<br/>There is a screen on:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12842.Urumchi&nbsp;&nbsp; (Detached)<br/>1 Socket in /tmp/screens/S-root.<br/><br/>&#91;root@pvcent107 ~&#93;# screen -r Urumchi&nbsp;&nbsp; </div><br /><br/>1. 未使用 screen 时新进程的进程树<br /><br/><div class="code"><br/>&#91;root@pvcent107 ~&#93;# ping <a href="http://www.google.com" target="_blank">www.google.com</a> &amp;<br/>&#91;1&#93; 9499<br/>&#91;root@pvcent107 ~&#93;# pstree -H 9499<br/>init─┬─Xvnc<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─acpid<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─atd<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─2*&#91;sendmail&#93;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─sshd─┬─sshd───bash───pstree<br/>&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─sshd───bash───ping<br/></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br /><br/>我们可以看出，未使用 screen 时我们所处的 bash 是 sshd 的子进程，当 ssh 断开连接时，HUP 信号自然会影响到它下面的所有子进程（包括我们新建立的 ping 进程）。<br/><br /><br/>2. 使用了 screen 后新进程的进程树<br/><div class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#91;root@pvcent107 ~&#93;# screen -r Urumchi<br/>&#91;root@pvcent107 ~&#93;# ping <a href="http://www.ibm.com" target="_blank">www.ibm.com</a> &amp;<br/>&#91;1&#93; 9488<br/>&#91;root@pvcent107 ~&#93;# pstree -H 9488<br/>init─┬─Xvnc<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─acpid<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─atd<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─screen───bash───ping<br/>&nbsp;&nbsp;&nbsp;&nbsp; ├─2*&#91;sendmail&#93;&nbsp;&nbsp; <br/></div><br /><br />而使用了 screen 后就不同了，此时 bash 是 screen 的子进程，而 screen 是 init（PID为1）的子进程。那么当 ssh 断开连接时，HUP 信号自然不会影响到 screen 下面的子进程了。<br /><br /></p><p><a name="N101DC"></a><span class="atitle"><strong><span style="font-size: small">总结</span></strong></span></p><p>现在几种方法已经介绍完毕，我们可以根据不同的场景来选择不同的方案。nohup/setsid 无疑是临时需要时最方便的方法，disown 能帮助我们来事后补救当前已经在运行了的作业，而 screen 则是在大批量操作时不二的选择了。<br /></p><br/><br/><br/>Tags - <a href="http://www.kevinliyong.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://www.kevinliyong.com/tag.php?tag=%25E5%2590%258E%25E5%258F%25B0%25E8%25BF%2590%25E8%25A1%258C" rel="tag">后台运行</a>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?331</link>
<title><![CDATA[pure-ftpd ]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 02 Apr 2010 03:51:51 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?331</guid> 
<description>
<![CDATA[ 
	<h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>1</span> <span>．简介</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>自从</span> <span><span style="font-family: Courier New">0.99.2</span> </span><span>版本开始，</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>就开始支持虚拟用户。虚拟用户方式十分类似</span> <span><span style="font-family: Courier New">/etc/passwd</span> </span><span>，将用户的相关信息，如口令、姓名、</span> <span><span style="font-family: Courier New">uid</span> </span><span>、目录等，存入文件。但是该文件只适用于</span> <span><span style="font-family: Courier New">FTP</span> </span><span>。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span>这意味着，可以为</span> <span><span style="font-family: Courier New">FTP</span> </span><span>设置虚拟用户，而不需要在系统中添加系统用户。同时，可以为这些用户单独设置配额、</span> <span><span style="font-family: Courier New">ratio</span> </span><span>、带宽等限制。很多虚拟用户可以共享同一个系统用户的属性，因此建议为这些虚拟用户单独创建一个系统用户，从而方便管理。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span>首先，可以在系统中添加相应的用户和组，如</span> <span><span style="font-family: Courier New">ftpuser</span> </span><span>和</span> <span><span style="font-family: Courier New">ftpgroup</span> </span><span>。如：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">groupadd ftpgroup</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">useradd -g ftpgroup -d /dev/null -s /etc ftpuser</span> </span></p></div><p style="margin: 0cm 0cm 0pt" class="a0"><span>可以使用</span> <span><span style="font-family: Courier New">&rdquo;pure-pw&rdquo;</span> </span><span>来创建虚拟用户。虚拟用户的信息以每个用户一行的方式存放在相应的文件中，其格式如下所示：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span style="font-family: Courier"><span>&lt;account&gt;:&lt;password&gt;:&lt;uid&gt;:&lt;gid&gt;:&lt;gecos&gt;:&lt;home directory&gt;:&lt;upload</span> <span>bandwidth&gt;:&lt;download bandwidth&gt;:&lt;upload ratio&gt;:&lt;download ratio&gt;:&lt;max number</span> <span>of connections&gt;:&lt;files quota&gt;:&lt;size quota&gt;:&lt;authorized local IPs&gt;:&lt;refused</span> <span>local IPs&gt;:&lt;authorized client IPs&gt;:&lt;refused client IPs&gt;:&lt;time</span> <span>restrictions&gt;</span> </span></span></p></div><p style="text-indent: 0cm; margin: 0cm 0cm 0pt" class="a0"><span>其中，除了帐号、口令、</span> <span><span style="font-family: Courier New">uid</span> </span><span>、</span> <span><span style="font-family: Courier New">gid</span> </span><span>和</span> <span><span style="font-family: Courier New">home</span> </span><span>目录之外，其它的可以是空值。</span> </p><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>2</span> <span>．创建一个用户</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>接下来，我们来创建一个新的用户。</span> <span><span style="font-family: Courier New">pure-pw</span> </span><span>的语法规范如下：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw useradd &lt;login&gt; [-f &lt;passwd file&gt;] -u &lt;uid&gt; [-g &lt;gid&gt;]</span> </span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">-D/-d &lt;home directory&gt; [-c &lt;gecos&gt;]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-t &lt;download bandwidth&gt;] [-T &lt;upload bandwidth&gt;]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-n &lt;max number of files&gt;] [-N &lt;max Mbytes&gt;]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-q &lt;upload ratio&gt;] [-Q &lt;download ratio&gt;]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-r &lt;allow client host&gt;[/&lt;mask&gt;][,&lt;allow client host&gt;[/&lt;mask&gt;]]...]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-R &lt;deny client host&gt;[/&lt;mask&gt;][,&lt;deny client host&gt;[/&lt;mask&gt;]]...]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-i &lt;allow local host&gt;[/&lt;mask&gt;][,&lt;allow client host&gt;[/&lt;mask&gt;]]...]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-I &lt;deny local host&gt;[/&lt;mask&gt;][,&lt;deny local host&gt;[/&lt;mask&gt;]]...]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-y &lt;max number of concurrent sessions&gt;]</span> </span></span></p><p style="text-indent: 0cm; margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-size: x-small"><span style="font-family: Courier">[-z &lt;hhmm&gt;-&lt;hhmm&gt;] [-m]</span> </span></span></p></div><p style="margin: 0cm 0cm 0pt" class="a0"><span>假设我们要创建</span> <span><span style="font-family: Courier New">joe</span> </span><span>这样一个虚拟用户，则可以使用如下命令：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe</span> </span></p></div><p style="text-indent: 0cm; margin: 0cm 0cm 0pt" class="a0"><span>其中，</span> <span><span style="font-family: Courier New">-u</span> </span><span>将虚拟用户</span> <span><span style="font-family: Courier New">joe</span> </span><span>同系统用户</span> <span><span style="font-family: Courier New">ftpuser</span> </span><span>关联在一起。</span> <span><span style="font-family: Courier New">-d</span> </span><span>参数使</span> <span><span style="font-family: Courier New">joe</span> </span><span>只能访问其</span> <span><span style="font-family: Courier New">home</span> </span><span>目录。而如果想让他访问整个文件系统，可以用</span> <span><span style="font-family: Courier New">-D</span> </span><span>选项。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span>这时，如果</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>启动时加入</span> <span><span style="font-family: Courier New">-j(--createhome)</span> </span><span>选项，则不需要创建</span> <span><span style="font-family: Courier New">/home/ftpuser/joe</span> </span><span>目录。系统会在该用户第一次登陆时自动创建。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span><span style="font-family: Courier New">-z</span> </span><span>选项运用用户在一天当中指定的时间段连接服务器。如</span> <span><span style="font-family: Courier New">-z 0900-1800</span> </span><span>，则该用户只能在上午</span> <span><span style="font-family: Courier New">9</span> </span><span>点到晚上</span> <span><span style="font-family: Courier New">6</span> </span><span>点之间连接服务器。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span><span style="font-family: Courier New">-r</span> </span><span>选项或</span> <span><span style="font-family: Courier New">-R</span> </span><span>选项，可以限制用户从指定</span> <span><span style="font-family: Courier New">IP</span> </span><span>和掩码连入服务器</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span><span style="font-family: Courier New">-y</span> </span><span>，用户同一时间的并发连接数。</span> <span><span style="font-family: Courier New">&rsquo;&rsquo;</span> </span><span>或者</span> <span><span style="font-family: Courier New">0</span> </span><span>意味着不限制</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span><span style="font-family: Courier New">-f</span> </span><span>，默认虚拟用户的信息会被存放在</span> <span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>文件中，通过该选项可以改变该文件的位置。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span>用户的口令会根据系统对加密方式的支持情况，选择一个最安全的方式进行加密。</span> </p><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>3</span> <span>．更改一个用户</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>同</span> <span><span style="font-family: Courier New">pure-pw adduser</span> </span><span>唯一不同的是，使用</span> <span><span style="font-family: Courier New">pure-pw usermod</span> </span><span>不是创建一个用户，而是更改已经存在用户的某些属性。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span>重置某些属性的语法如下：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -n ''</span> </span><span>：禁用文件配额</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -N ''</span> </span><span>：禁用文件大小配额</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -q '' -Q ''</span> </span><span>：禁用</span> <span><span style="font-family: Courier">ratio</span> </span></span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -t ''</span> </span><span>：禁用下载带宽限制</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -T ''</span> </span><span>：禁用上传带宽限制</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; &lt;-i,-I,-r or -R&gt; ''</span> </span><span>：禁用</span> <span><span style="font-family: Courier">IP</span> </span><span>过滤</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -z ''</span> </span><span>：禁用时间段约束</span> </span></p><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span style="font-size: x-small"><span><span style="font-family: Courier">pure-pw usermod &lt;user&gt; -y ''</span> </span><span>：禁用并发数限制</span> </span></p></div><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>4</span> <span>．删除一个用户</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>删除一个用的命令语法是：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw userdel &lt;login&gt; [-f &lt;passwd file&gt;] [-m]</span> </span></p></div><p style="text-indent: 0cm; margin: 0cm 0cm 0pt" class="a0"><span>这时，用户的信息会被从指定的</span> <span><span style="font-family: Courier New">passwd</span> </span><span>文件中删除，但是用户的</span> <span><span style="font-family: Courier New">home</span> </span><span>目录会被保留，需要手工删除。</span> </p><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>5</span> <span>．改变用户口令</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>更改一个用户口令的语法是：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw passwd &lt;login&gt; [-f &lt;passwd file&gt;] [-m]</span> </span></p></div><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>6</span> <span>．显示用户信息</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>文件中记录的信息不方便用户的阅读，因此</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>提供了显示用户信息的命令。其语法是：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw show &lt;login&gt; [-f &lt;passwd file&gt;]</span> </span></p></div><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>7</span> <span>．提交更改</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>可以通过上面提到的命令，或者以手工方式对</span> <span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>文件进行修改，从而创建、修改和删除一个虚拟用户信息。但是，只有提交这些更改时，</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>访问才能生效。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"><span>提交更改，意味着系统会根据</span> <span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>（或者指定的其它文件）来创建一个</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>可读的二进制格式的文件</span> <span><span style="font-family: Courier New">/etc/pureftpd.pdb</span> </span><span>。通常，通过下面的命令：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw mkdb</span> </span></p></div><p style="text-indent: 0cm; margin: 0cm 0cm 0pt" class="a0"><span>可以通过</span> <span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>文件自动创建</span> <span><span style="font-family: Courier New">/etc/pureftpd.pbd</span> </span><span>文件。但是，如果需要指定特定的文件，可以通过下面的方式来实现：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt</span> </span></p></div><p style="margin: 0cm 0cm 0pt" class="a0"><span>这时，没有必要去重启</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>服务，对虚拟用户进行的更改可以更新。同时，也可以通过</span> <span><span style="font-family: Courier New">-m</span> </span><span>选项，在对</span> <span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>文件进行修改的时候自动进行提交。</span> </p><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>8</span> <span>．打开对虚拟用户的支持</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>使得</span> <span><span style="font-family: Courier New">pure-ftpd</span> </span><span>支持虚拟用户，需要在编译的时候加入选项</span> <span><span style="font-family: Courier New">--with-puredb</span> </span><span>。这时，可以通过在启动服务是的</span> <span><span style="font-family: Courier New">&rsquo;-l&rsquo;</span> </span><span>参数来设置。如：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">/usr/local/sbin/pure-ftpd -j -lpuredb:/etc/pureftpd.pdb &amp;</span> </span></p></div><p style="text-indent: 0cm; margin: 0cm 0cm 0pt" class="a0"><span>可以在后台，以自动创建虚拟用户</span> <span><span style="font-family: Courier New">home</span> </span><span>目录，用</span> <span><span style="font-family: Courier New">puredb</span> </span><span>的方式来支持虚拟用户。</span> </p><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>9</span> <span>．转换系统用户</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>可以通过如下命令，将系统用户转换为虚拟用户：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pwconvert</span> </span></p></div><p style="text-indent: 0cm; margin: 0cm 0cm 0pt" class="a0"><span>如果以</span> <span><span style="font-family: Courier New">root</span> </span><span>用户运行该命令，系统用户的口令一并被转入虚拟用户配置文件。如：</span> </p><div style="padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #bad4ff 0% 50%; margin-left: 17.85pt; margin-right: 0cm; padding-top: 1pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial; border: windowtext 1pt solid"><p style="margin: 0cm 0cm 0pt; background: #bad4ff 0% 50%; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" class="a"><span><span style="font-family: Courier; font-size: x-small">pure-pwconvert &gt;&gt; /etc/pureftpd.passwd</span> </span></p></div><h3 style="margin: 13pt 0cm"><span style="font-size: large"><span>10</span> <span>．环境变量</span> </span></h3><p style="margin: 0cm 0cm 0pt" class="a0"><span>默认的情况下，如果指定了环境变量</span> <span><span style="font-family: Courier New">PURE_PASSWDFILE</span> </span><span>，则虚拟用户的</span> <span><span style="font-family: Courier New">passwd</span> </span><span>文件位置由该变量的值指定。否则，默认是</span> <span><span style="font-family: Courier New">/etc/pureftpd.passwd</span> </span><span>。用样，</span> <span><span style="font-family: Courier New">PURE_DBFILE</span> </span><span>环境变量用来指定</span> <span><span style="font-family: Courier New">pdb</span> </span><span>文件的位置。默认是</span> <span><span style="font-family: Courier New">/etc/pureftpd.pdb</span> </span><span>。</span> </p><p style="margin: 0cm 0cm 0pt" class="a0"></p><p style="margin: 0cm 0cm 0pt" class="a0"></p><p style="margin: 0cm 0cm 0pt" class="a0"></p><p style="margin: 0cm 0cm 0pt" class="a0"><a href="http://download.pureftpd.org/pub/pure-ftpd/doc/README.Virtual-Users"><a href="http://download.pureftpd.org/pub/pure-ftpd/doc/README.Virtual-Users" target="_blank">http://download.pureftpd.o...</a></a><br /><br /><span style="font-size: small">本为出处：</span><a href="http://hi.baidu.com/haigang/blog/item/c57b62d00783308da0ec9c84.html" target="_blank"><span style="font-size: small"><a href="http://hi.baidu.com/haigang/blog/item/c57b62d00783308da0ec9c84.html" target="_blank">http://hi.baidu.com/haigan...</a></span><br /></a><br /></p><br/>Tags - <a href="http://www.kevinliyong.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://www.kevinliyong.com/tag.php?tag=ftp" rel="tag">ftp</a> , <a href="http://www.kevinliyong.com/tag.php?tag=pure-ftpd" rel="tag">pure-ftpd</a>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?316</link>
<title><![CDATA[split命令分割linux大文件的方法]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Wed, 10 Mar 2010 02:06:31 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?316</guid> 
<description>
<![CDATA[ 
	<p><span style="font-size: small">linux split 命令<br /></span></p><p><span style="font-size: small">功能说明：切割文件。<br /></span></p><p><span style="font-size: small">语　　法：split [--help][--version][-b &lt;字节&gt;][-C &lt;字节&gt;][-l &lt;行数&gt;][要切割的文件][输出文件名]<br /></span></p><p><span style="font-size: small">补充说明：split可将文件切成较小的文件，预设每1000行会切成一个小文件。<br /></span></p><p><span style="font-size: small">参　　数：<br /></span></p><p><span style="font-size: small">-l&lt;行数&gt; 　指定每多少行就要切成一个小文件。<br /></span></p><p><span style="font-size: small">-b&lt;字节&gt; 　指定每多少字就要切成一个小文件。支持单位:m,k<br /></span></p><p><span style="font-size: small">-C&lt;字节&gt; 　与-b参数类似，但切割时尽量维持每行的完整性。<br /></span></p><p><span style="font-size: small">&ndash;help 　显示帮助。<br /></span></p><p><span style="font-size: small">&ndash;version 　显示版本信息。<br /></span></p><p><span style="font-size: small">[输出文件名] 　设置切割后文件的前置文件名，split会自动在前置文件名后再加上编号。<br /></span></p><p><span style="font-size: small">使用例子：<br /></span></p><p><span style="font-size: small">split -b 100m filename //分割文件按照 每100M存储一个新文件<br /></span></p><p><span style="font-size: small">split -l 10 filename //分割文件按照 每10行存储一个新文件</span></p><p></p><br/>Tags - <a href="http://www.kevinliyong.com/tag.php?tag=linux" rel="tag">linux</a> , <a href="http://www.kevinliyong.com/tag.php?tag=split" rel="tag">split</a>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?279</link>
<title><![CDATA[linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 25 Aug 2009 02:00:18 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?279</guid> 
<description>
<![CDATA[ 
	================== <br />scp 命令 <br />================== <br />scp 可以在 2个 linux 主机间复制文件； <br /><br />命令基本格式： <br />scp [可选参数] file_source file_target <br /><br />====== <br />从 本地 复制到 远程 <br />====== <br />* 复制文件： <br />* 命令格式： <br />scp local_file remote_username@remote_ip:remote_folder <br />或者 <br />scp local_file remote_username@remote_ip:remote_file <br />或者 <br />scp local_file remote_ip:remote_folder <br />或者 <br />scp local_file remote_ip:remote_file <br /><br />第1,2个指定了用户名，命令执行后需要再输入密码，第1个仅指定了远程的目录，文件名字不变，第2个指定了文件名； <br />第3,4个没有指定用户名，命令执行后需要输入用户名和密码，第3个仅指定了远程的目录，文件名字不变，第4个指定了文件名； <br />* 例子： <br />scp /home/space/music/1.mp3 root@<a href="http://www.cumt.edu.cn:/home/root/others/music" target="_blank">www.cumt.edu.cn:/home/root...</a> <br />scp /home/space/music/1.mp3 root@<a href="http://www.cumt.edu.cn:/home/root/others/music/001.mp3" target="_blank">www.cumt.edu.cn:/home/root...</a> <br />scp /home/space/music/1.mp3 <a href="http://www.cumt.edu.cn:/home/root/others/music" target="_blank">www.cumt.edu.cn:/home/root...</a> <br />scp /home/space/music/1.mp3 <a href="http://www.cumt.edu.cn:/home/root/others/music/001.mp3" target="_blank">www.cumt.edu.cn:/home/root...</a> <br /><br />* 复制目录： <br />* 命令格式： <br />scp -r local_folder remote_username@remote_ip:remote_folder <br />或者 <br />scp -r local_folder remote_ip:remote_folder <br /><br />第1个指定了用户名，命令执行后需要再输入密码； <br />第2个没有指定用户名，命令执行后需要输入用户名和密码； <br />* 例子： <br />scp -r /home/space/music/ root@<a href="http://www.cumt.edu.cn:/home/root/others/" target="_blank">www.cumt.edu.cn:/home/root...</a> <br />scp -r /home/space/music/ <a href="http://www.cumt.edu.cn:/home/root/others/" target="_blank">www.cumt.edu.cn:/home/root...</a> <br /><br />上面 命令 将 本地 music 目录 复制 到 远程 others 目录下，即复制后有 远程 有 ../others/music/ 目录 <br /><br /><br />====== <br />从 远程 复制到 本地 <br />====== <br />从 远程 复制到 本地，只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可； <br /><br />例如： <br />scp root@<a href="http://www.cumt.edu.cn:/home/root/others/music" target="_blank">www.cumt.edu.cn:/home/root...</a> /home/space/music/1.mp3 <br />scp -r <a href="http://www.cumt.edu.cn:/home/root/others/" target="_blank">www.cumt.edu.cn:/home/root...</a> /home/space/music/ <p>最简单的应用如下 : <br /><br />scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2 <br /><br />[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 . <br /><br />可能有用的几个参数 : <br /><br />-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 . <br /><br />-C 使能压缩选项 . <br /><br />-P 选择端口 . 注意 -p 已经被 rcp 使用 . <br /><br />-4 强行使用 IPV4 地址 . <br /><br />-6 强行使用 IPV6 地址 .</p><br/>Tags - <a href="http://www.kevinliyong.com/tag.php?tag=linux" rel="tag">linux</a>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?277</link>
<title><![CDATA[Freebsd Crontab]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 20 Aug 2009 09:31:55 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?277</guid> 
<description>
<![CDATA[ 
	<span style="font-size: small">crontab<br />功能说明：设置计时器。<br />语　　法：crontab [-u &lt;<span class="t_tag">用户</span>名称&gt;][配置文件] 或 crontab [-u &lt;用户名称&gt;][-elr]<br />补充说明：cron是一个常驻<span class="t_tag">服务</span>，它提供计时器的功能，让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件，就可以使用计时器的功能。其配置文件格式如下：<br />Minute Hour Day Month DayOFWeek Command <br />配置命令的取值范围：<br />minute (0-59), hour (0-23), day of the month (1-31), month of the year (1-12), day of the week (0-6 with 0=Sunday).<br />参　　数： <br />-e 　编辑该用户的计时器设置。 <br />-l 　列出该用户的计时器设置。 <br />-r 　删除该用户的计时器设置。 <br />-u&lt;用户名称&gt; 　指定要设定计时器的用户名称。<br />详细说明：<br />时程表的格式如下 : <br />f1 f2 f3 f4 f5 program<br />其中 f1 是表示分钟，f2 表示小时，f3 表示一个月份中的第几日，f4 表示月份，f5 表示一个星期中的第几天。program 表示要执行的程序。 <br />当 f1 为 * 时表示每分钟都要执行 program，f2 为 * 时表示每小时都要执行程序，其余类推 <br />当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行，f2 为 a-b 时表示从第 a 到第 b 小时都要执行，其余类推<br />当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次，f2 为 */n 表示每 n 小时个时间间隔执行一次，其余类推 <br />当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行，f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行，其余类推<br />使用者也可以将所有的设定先存放在档案 file 中，用 crontab file 的方式来设定时程表。 <br />引用例子： <br />每月每天7点的第 0 分钟执行一次 /bin/ls : <br />0 7 * * * /bin/ls<br />在 12 月内, 每天的早上 6 点到 12 点中，每隔 20 分钟执行一次 /usr/bin/backup : <br />0 6-12/20 * 12 * /usr/bin/backup<br />周一到周五每天下午 5:00 寄一封信给 </span><a href="mailto:panzhiqi@youku.com"><span style="color: #0000ff; font-size: small">panzhiqi@youku.com</span></a><span style="font-size: small"> : <br />0 17 * * 1-5 mail -s &quot;hi&quot; </span><a href="mailto:panzhiqi@youku.com"><span style="color: #0000ff; font-size: small">panzhiqi@youku.com</span></a><span style="font-size: small"> &lt; /tmp/maildata<br />每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo &quot;haha&quot; <br />20 0-23/2 * * * echo &quot;haha&quot;<br /><br />备注：<br />1、1-5是星期一至星期五 2,3逗号分割是星期二和星期三</span>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?235</link>
<title><![CDATA[Linux下tar bz gz等压缩包的压缩和解压]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 07 Apr 2009 02:29:59 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?235</guid> 
<description>
<![CDATA[ 
	大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到，也就不全，希望大家帮我补充，我将随时修改完善，谢谢！<br />　　.tar<br />　　解包：tar xvf FileName.tar<br />　　打包：tar cvf FileName.tar DirName<br />　　（注：tar是打包，不是压缩！）<br />　　---------------------------------------------<br />　　.gz<br />　　解压1：gunzip FileName.gz<br />　　解压2：gzip -d FileName.gz<br />　　压缩：gzip FileName<br />　　.tar.gz 和 .tgz<br />　　解压：tar zxvf FileName.tar.gz<br />　　压缩：tar zcvf FileName.tar.gz DirName<br />　　---------------------------------------------<br />　　.bz2<br />　　解压1：bzip2 -d FileName.bz2<br />　　解压2：bunzip2 FileName.bz2<br />　　压缩： bzip2 -z FileName<br />　　.tar.bz2<br />　　解压：tar jxvf FileName.tar.bz2<br />　　压缩：tar jcvf FileName.tar.bz2 DirName<br />　　---------------------------------------------<br />　　.bz<br />　　解压1：bzip2 -d FileName.bz<br />　　解压2：bunzip2 FileName.bz<br />　　压缩：未知<br />　　.tar.bz<br />　　解压：tar jxvf FileName.tar.bz<br />　　压缩：未知<br />　　---------------------------------------------<br />　　.Z<br />　　解压：uncompress FileName.Z<br />　　压缩：compress FileName<br />　　.tar.Z<br />　　解压：tar Zxvf FileName.tar.Z<br />　　压缩：tar Zcvf FileName.tar.Z DirName<br />　　---------------------------------------------<br />　　.zip<br />　　解压：unzip FileName.zip<br />　　压缩：zip FileName.zip DirName<br />　　---------------------------------------------<br />　　.rar<br />　　解压：rar x FileName.rar<br />　　压缩：rar a FileName.rar DirName <p>　　rar请到：<a href="http://www.rarsoft.com/download.htm" target="_blank">http://www.rarsoft.com/dow...</a> 下载！<br />　　解压后请将rar_static拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：<br />　　[root@www2 tmp]# cp rar_static /usr/bin/rar<br />　　---------------------------------------------<br />　　.lha<br />　　解压：lha -e FileName.lha<br />　　压缩：lha -a FileName.lha FileName</p><p>　　lha请到：<a href="http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/" target="_blank">http://www.infor.kanazawa-...</a>下载！<br />　　&gt;解压后请将lha拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：<br />　　[root@www2 tmp]# cp lha /usr/bin/<br />　　---------------------------------------------<br />　　.rpm<br />　　解包：rpm2cpio FileName.rpm &#124; cpio -div<br />　　---------------------------------------------<br />　　.deb<br />　　解包：ar p FileName.deb data.tar.gz &#124; tar zxf -<br />　　---------------------------------------------<br />　　.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm </p><p>.deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx </p><p>.zoo .cab .kar .cpt .pit .sit .sea<br />　　解压：sEx x FileName.*<br />　　压缩：sEx a FileName.* FileName</p><p>　　sEx只是调用相关程序，本身并无压缩、解压功能，请注意！<br />　　sEx请到： <a href="http://sourceforge.net/projects/sex" target="_blank">http://sourceforge.net/pro...</a>下载！<br />　　解压后请将sEx拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：<br />　　[root@www2 tmp]# cp sEx /usr/bin/</p><p><br />　　参考文献：Linux 文件压缩工具指南<br />（其实看帮助是最好的方法，一般各个命令都可以用&ldquo;--help&rdquo;参数得到常用使用方法！）</p><p>　　用户经常需要备份计算机系统中的数据，为了节省存储空间，常常将备份文件进行压缩。下面分别介绍备份与压缩的命令。</p><p>　　tar命令</p><p>　　tar可以为文件和目录创建档案。利用tar，用户可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。 tar最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案，如软盘。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。</p><p>　　语法：tar ［主选项+辅选项］ 文件或者目录</p><p>　　使用该命令时，主选项是必须要有的，它告诉tar要做什么事情，辅选项是辅助使用的，可以选用。</p><p>　　主选项：</p><p>　　c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。</p><p>　　r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件，又发现还有一个目录或是一些文件忘记备份了，这时可以使用该选项，将忘记的目录或文件追加到备份文件中。</p><p>　　t 列出档案文件的内容，查看已经备份了哪些文件。</p><p>　　u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中找不到要更新的文件，则把它追加到备份文件的最后。</p><p>　　x 从档案文件中释放文件。</p><p>　　辅助选项：</p><p>　　b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。</p><p>　　f 使用档案文件或设备，这个选项通常是必选的。</p><p>　　k 保存已经存在的文件。例如我们把某个文件还原，在还原的过程中，遇到相同的文件，不会进行覆盖。</p><p>　　m 在还原文件时，把所有文件的修改时间设定为现在。</p><p>　　M 创建多卷的档案文件，以便在几个磁盘中存放。</p><p>　　v 详细报告tar处理的文件信息。如无此选项，tar不报告文件信息。</p><p>　　w 每一步都要求确认。</p><p>　　z 用gzip来压缩/解压缩文件，加上该选项后可以将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。</p><p>　　例1：把/home目录下包括它的子目录全部做备份文件，备份文件名为usr.tar。</p><p>　　$ tar cvf usr.tar /home</p><p>　　例2：把/home目录下包括它的子目录全部做备份文件，并进行压缩，备份文件名为usr.tar.gz 。</p><p>　　$ tar czvf usr.tar.gz /home</p><p>　　例3：把usr.tar.gz这个备份文件还原并解压缩。</p><p>　　$ tar xzvf usr.tar.gz</p><p>　　例4：查看usr.tar备份文件的内容，并以分屏方式显示在显示器上。</p><p>　　$ tar tvf usr.tar &#124; more</p><p>　　要将文件备份到一个特定的设备，只需把设备名作为备份文件名。</p><p>　　例5：用户在/dev/fd0设备的软盘中创建一个备份文件，并将/home 目录中所有的文件都拷贝到备份文件中。 </p><p>　　$ tar cf /dev/fd0 /home</p><p>　　要恢复设备磁盘中的文件，可使用xf选项：</p><p>　　$ tar xf /dev/fd0</p><p>　　如果用户备份的文件大小超过设备可用的存贮空间，如软盘，您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设备，当使用M选项向一个软驱进行存档时，tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。</p><p>　　$ tar cMf /dev/fd0 /home</p><p>　　要恢复几张盘中的档案，只要将第一张放入软驱，然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。</p><p>　　$ tar xMf /dev/fd0</p><p>　　gzip命令</p><p>　　减少文件大小有两个明显的好处，一是可以减少存储空间，二是通过网络传输文件时，可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令，既方便又好用。</p><p>　　语法：gzip ［选项］ 压缩（解压缩）的文件名</p><p>　　各选项的含义：</p><p>　　-c 将输出写到标准输出上，并保留原有文件。</p><p>　　-d 将压缩文件解压。</p><p>　　-l 对每个压缩文件，显示下列字段：</p><p>　　压缩文件的大小</p><p>　　未压缩文件的大小</p><p>　　压缩比</p><p>　　未压缩文件的名字</p><p>　　-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。</p><p>　　-t 测试，检查压缩文件是否完整。</p><p>　　-v 对每一个压缩和解压的文件，显示文件名和压缩比。</p><p>　　-num 用指定的数字num调整压缩的速度，-1或--fast表示最快压缩方法（低压缩比），-9或--best表示最慢压缩方法（高压缩比）。系统缺省值为6。</p><p>　　假设一个目录/home下有文件mm.txt、sort.txt、xx.com。</p><p>　　例1：把/home目录下的每个文件压缩成.gz文件。</p><p>　　$ cd /home</p><p>　　$ gzip *</p><p>　　$ ls</p><p>　　m.txt.gz sort.txt.gz xx.com.gz</p><p>　　例2：把例1中每个压缩的文件解压，并列出详细的信息。</p><p>　　$ gzip -dv *</p><p>　　mm.txt.gz 43.1%-----replaced with mm.txt</p><p>　　sort.txt.gz 43.1%-----replaced with sort.txt</p><p>　　xx.com.gz 43.1%-----replaced with xx.com</p><p>　　$ ls</p><p>　　mm.txt sort.txt xx.com</p><p><br />　　例3：详细显示例1中每个压缩的文件的信息，并不解压。</p><p>　　$ gzip -l *</p><p>　　compressed uncompr. ratio uncompressed_name</p><p>　　277 445 43.1% mm.txt</p><p>　　278 445 43.1% sort.txt</p><p>　　277 445 43.1% xx.com</p><p>　　$ ls</p><p>　　mm.txt.gz sort.txt.gz xx.com.gz</p><p>　　例4：压缩一个tar备份文件，如usr.tar，此时压缩文件的扩展名为.tar.gz</p><p>　　$ gzip usr.tar</p><p>　　$ ls</p><p>　　usr.tar.gz</p><p>　　unzip命令</p><p>　　用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢？可以用unzip命令，该命令用于解扩展名为.zip的压缩文件。</p><p>　　语法：unzip ［选项］ 压缩文件名.zip</p><p>　　各选项的含义分别为：</p><p>　　-x 文件列表 解压缩文件，但不包括指定的file文件。</p><p>　　-v 查看压缩文件目录，但不解压。</p><p>　　-t 测试文件有无损坏，但不解压。</p><p>　　-d 目录 把压缩文件解到指定目录下。</p><p>　　-z 只显示压缩文件的注解。</p><p>　　-n 不覆盖已经存在的文件。</p><p>　　-o 覆盖已存在的文件且不要求用户确认。</p><p>　　-j 不重建文档的目录结构，把所有文件解压到同一目录下。</p><p>　　例1：将压缩文件text.zip在当前目录下解压缩。</p><p>　　$ unzip text.zip</p><p>　　例2：将压缩文件text.zip在指定目录/tmp下解压缩，如果已有相同的文件存在，要求unzip命令不覆盖原先的文件。</p><p>　　$ unzip -n text.zip -d /tmp</p><p>　　例3：查看压缩文件目录，但不解压。</p><p>　　$ unzip -v text.zip</p><p>　　zgrep命令</p><p>　　这个命令的功能是在压缩文件中寻找匹配的正则表达式，用法和grep命令一样，只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话，便可用zgrep命令。</p><br/>Tags - <a href="http://www.kevinliyong.com/tag.php?tag=linux" rel="tag">linux</a>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?234</link>
<title><![CDATA[mysqldump 命令 导出完整 sql 语句]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 03 Apr 2009 09:56:06 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?234</guid> 
<description>
<![CDATA[ 
	<br />mysqldump -uroot -proot <span style="color: #ff0000">--skip-opt</span> db_name table_name &gt; file.sql<br /><br />其他参数<br />-c, --complete-insert <p>　　使用完整的insert语句(用列名字)。<br />-d, --no-data</p><p>　　不写入表的任何行信息。如果你只想得到一个表的结构的导出，这是很有用的.</p>
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?233</link>
<title><![CDATA[cp rm mv 文件夹操作]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Wed, 01 Apr 2009 09:15:38 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?233</guid> 
<description>
<![CDATA[ 
	通常情况下，删除文件用：rm 文件名 <br /><br />删除文件夹用：rmdir 文件夹名 <br /><br />但是rmdir不能删除非空的文件夹，那如何删除非空文件夹呢： <br /><br />命令：rm -rf 非空文件夹名 <br /><br />建议使用前做好备份，好像此命令是不会放到回收站的，删了就再也见不着下面的文件了。 <br /><br />复制文件夹 <br />CP命令 <br />格式: CP [选项] 源文件或目录 目的文件或目录 <br />选项说明:-b 同名,备分原来的文件 <br />-f 强制覆盖同名文件 <br />-r 按递归方式保留原目录结构复制文件 <br /><br />cp -r /tmp/a /root/a <br /><br />重命名文件夹 <br />mv oldfilename newfilename <br />
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?231</link>
<title><![CDATA[linux 改权限]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 30 Mar 2009 10:00:26 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?231</guid> 
<description>
<![CDATA[ 
	<br />Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.<br /><br />chown -R www:www session/
]]>
</description>
</item><item>
<link>http://www.kevinliyong.com/read.php?157</link>
<title><![CDATA[学习Linux]]></title> 
<author>kevinliyong &lt;kevinliyong@163.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Wed, 16 Jul 2008 13:38:04 +0000</pubDate> 
<guid>http://www.kevinliyong.com/read.php?157</guid> 
<description>
<![CDATA[ 
	明天准备将系统换作Linux，尽管现在还不怎么会用，不过决定坚持使用Linux了。<br/>Tags - <a href="http://www.kevinliyong.com/tag.php?tag=linux" rel="tag">linux</a>
]]>
</description>
</item>
</channel>
</rss>