<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>朝闻道的“爱学”日志</title>
		<link>http://www.ax.net.cn/</link>
		<description>天道酬勤，唯爱学可成才</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Thu, 09 Sep 2010 03:42:30 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=387</guid>
			<title>用会zendstudio5.5</title>
			<author>admin</author>
			<description><![CDATA[<p>公司配了个AMD的机器，慢得死。zned for eclipse系列的一打开复杂点的代码就提示内存溢出，反反复复，周而复始，我郁闷。</p>
<p>用会了zendstudio5.5</p>
<p>安装完Zend  studio运行后发现就显示的应用程序页面是空白的，什么都没有，在Zend.com上找了一下，发现有两种解决方法，我用的方法是里边讲的第一种 bin/ZDE中加入一行代码，在1693加入   <br />
options=&quot;$options  -Dawt.toolkit=sun.awt.motif.MToolkit&quot;也就是debugOut前面。其他的方法可以参考这篇文章：   <br />
http://www.zend.com/support/knowledgebase.php?kbid=241</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=387" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=387</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2010-06-05 15:31</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=381</guid>
			<title>ubuntu 9.10 编译安装 Wesnoth1.8</title>
			<author>admin</author>
			<description><![CDATA[<p>Wesnoth1.8 （韦诺之战1.8）新近发布，作为linux下的一款可玩性比较高的游戏我当然想尝尝鲜啦。下面是它的编译方法。</p>
<p>&nbsp;</p>
<p>构建环境</p>
<pre class="code bash"><span class="kw2">sudo</span> <span class="kw2">apt-get</span> update <span class="sy0">&amp;&amp;</span> <span class="kw2">sudo</span> <span class="kw2">apt-get</span> upgrade<br /><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> build-essential scons <br /><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> libboost1.40-all-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-net1.2-dev libsdl-ttf2.0-dev <span class="kw2">gettext</span> python2.6-dev libx11-dev libfribidi-dev libpango1.0-dev liblua5.1-0-dev<br /><br />到这里下载 http://www.wesnoth.org/wiki/Download wesnoth-1.8.tar.bz2 文件<br /><br /><span class="kw3">cd</span> ~<span class="sy0">/</span>down<br /><span class="kw2">tar</span> jxfv wesnoth-1.8.tar.bz2<br /><span class="kw3">cd</span> wesnoth-<span class="nu0">1.8</span><br />scons<br /><span class="kw2">sudo</span> scons <span class="kw2">install</span></pre><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=381" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=381</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2010-04-19 12:51</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=380</guid>
			<title>10 个最酷的 Linux 单行命令</title>
			<author>admin</author>
			<description><![CDATA[sudo !!

以 root 帐户执行上一条命令。

python -m SimpleHTTPServer

利用 Python 搭建一个简单的 Web 服务器，可通过 http://$HOSTNAME:8000 访问。

:w !sudo tee %

在 Vim 中无需权限保存编辑的文件。

cd -

更改到上一次访问的目录。

^foo^bar

将上一条命令中的 foo 替换为 bar，并执行。

cp filename{,.bak}

快速备份或复制文件。

mtr google.com

traceroute + ping。

!whatever:p

搜索命令历史，但不执行。

$ssh-copy-id user@host

将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

把 Linux 桌面录制为视频。<br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=380" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=380</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2010-04-09 18:08</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=378</guid>
			<title>ubuntu下编译nginx0.8.34时的ssl问题</title>
			<author>admin</author>
			<description><![CDATA[<p>ubuntu下编译nginx0.8.34时的ssl问题<br />
在ubuntu9.10下编译nginx0.8.34时的总是提示ssl模块找不到的问题。可是我的openssl明明装了呀。</p>
<p>折腾了有一会了，发现有libssl-dev这个开发库，安装后一试，果然问题解决。</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=378" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=378</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2010-03-24 12:54</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=368</guid>
			<title>基于red5的在线视频录制实例和详细注释</title>
			<author>admin</author>
			<description><![CDATA[<p><span style="font-size: 13px; line-height: 23px;">
<div class="hl-main"><strong><u><strong>FLASH</strong></u>代码</strong></div>
<div class="hl-main">&nbsp;</div>
<div class="hl-main">//预定义声明<br />
import mx.utils.Delegate;<br />
//创建一个基本的网络连接对象<br />
var nc:NetConnection = new NetConnection();<br />
//连接到本地的<a style="color: rgb(0, 0, 255);" href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Red5');"><u><strong>Red5</strong></u></a>服务器<br />
nc.connect(&quot;rtmp://localhost/online&quot;);<br />
//将已和red5服务器建立连接的nc传递给NetStream<br />
var ns:NetStream = new NetStream(nc);<br />
//从摄像头和麦克风取得信息<br />
var cam:Camera = Camera.get();<br />
var mic:Microphone = Microphone.get();<br />
//初始化摄像头和麦克风，调用函数<br />
setupCameraMic();<br />
//保存上次录制的内容，并进行清空<br />
var lastVideoName:String = &quot;&quot;;<br />
//监听开始录制和停止录制两个按键的点击动作并进行相应的处理<br />
playButton.addEventListener(&quot;click&quot;, Delegate.create(this, playClick));<br />
stopButton.addEventListener(&quot;click&quot;, Delegate.create(this, stopClick));<br />
//定义开始录制的playclick函数<br />
function playClick():Void<br />
{<br />
//此<a style="color: rgb(0, 0, 255);" href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'flv');"><u><strong>flv</strong></u></a>文件是保存在 webapps/oflaDemo/streams/文件夹<br />
//将摄像头和麦克风赋给ns<br />
ns.attachVideo(cam);<br />
ns.attachAudio(mic);<br />
//将摄像头信息赋给视频显示窗口，这样我们可以即时看到信息<br />
videoContainer.attachVideo(cam);<br />
// 此处是定义存储名字的，用随机数目获得一个唯一的文件名<br />
lastVideoName = &quot;red5RecordDemo_&quot; + random(getTimer());<br />
ns.publish(lastVideoName, &quot;record&quot;);<br />
//锁定开始按键使其失效<br />
playButton.enabled = false;<br />
//锁定停止按键使其生效<br />
stopButton.enabled = true;<br />
}<br />
function stopClick():Void<br />
{<br />
//关闭ns与red5的连接<br />
ns.close();<br />
//并清空视频显示窗口<br />
videoContainer.attachVideo(null);<br />
videoContainer.clear();<br />
//锁定开始按键使其生效<br />
playButton.enabled = true;<br />
//锁定停止按键使其失效<br />
stopButton.enabled = false;<br />
//播放已经录制的视频<br />
playLastVideo();<br />
}<br />
<br />
function playLastVideo():Void<br />
{<br />
// 传递录制的视频信息给视屏显示窗口<br />
videoContainer.attachVideo(ns);<br />
//回访已经上次录制的视频片段<br />
ns.play(lastVideoName);<br />
}<br />
function setupCameraMic():Void<br />
{<br />
//启动摄像头<br />
cam = Camera.get();<br />
//设置尺寸<br />
cam.setMode(320, 240, 30);<br />
//设置录制质量<br />
cam.setQuality(0,70);<br />
//启动麦克风<br />
mic = Microphone.get();<br />
mic.setRate(44);<br />
}</div>
<div class="hl-main">&nbsp;...............</div>
</span></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=368" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=368</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2010-01-05 16:55</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=367</guid>
			<title>Ubuntu系统Gnome环境下解决标题栏消失问题</title>
			<author>admin</author>
			<description><![CDATA[<p>偶尔用着一次所有窗口的最大化，最小化和关闭按钮都消失了，好不郁闷。解决了一次，这次又遇上了。</p>
<p>网上有一篇文章教解决这个问题， <a target="_blank" href="http://www.gnome-cn.org/documents/howto/window_button_layout">www.gnome-cn.org/documents/howto/window_button_layout</a><br />
<br />
于是就试着调出 metacity 窗口管理器，但不成功。如下：$ metacity<br />
<br />
窗口管理器警告： 显示&ldquo;:0.0&rdquo;上的屏幕 0 已经有一个窗口管理器；请尝试使用 --replace 选项替换当前的窗口管理器。<br />
<br />
莫非当前的窗口管理器不是metacity？于是继续按照提示运行replace 选项替换当前的窗口管理器:</p>
<p>sudo metacity --replace<br />
<br />
出现这种现象的主要原因就是窗口管理器metacity没有打开，可能是和其他软件冲突了（注：nautilus是文件管理器）</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=367" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=367</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2010-01-03 22:46</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=365</guid>
			<title>madedit支持多平台的文本编辑器</title>
			<author>admin</author>
			<description><![CDATA[<p>madedit支持多平台的文本编辑器，对各个编码自动识别做的比较好，有ubuntu下<br />
可直接用的ded包<br />
http://sourceforge.net/projects/madedit/</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=365" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=365</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-12-28 13:49</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=364</guid>
			<title>ubuntu linux下使用rename批量改名</title>
			<author>admin</author>
			<description><![CDATA[<p>linux 里面的rename支持正则批量改名是最方便的啦。<br />
例如手机看电子书太大的文件打开速度慢，使用 split分割的文件便都是没有后缀的，这时候就需要用到rename啦。<br />
假设文件名都是 xxx_01,xxx_02,xxx_03那么使用<br />
rename 's/(\d+)$/$1\.txt/' *<br />
文件名就成了 xxx_01.txt,xxx_02.txt,xxx_03.txt<br />
再用 rename 's/(\d+)\.txt$/$1\.html/' *.txt<br />
文件名就成了xxx_01.html,xxx_02.html,xxx_03.html<br />
<br />
格式<br />
rename&nbsp; 命<br />
's/(\d+)\.txt$/$1\.html/'&nbsp; 正则表达式，s表示查找并替换，(\d+) 匹配数字一到多位出在第一次 可以用 $1获得匹配的值，\.txt 和 \.html 固定字符<br />
*.txt&nbsp; 所有.txt结尾的文件</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=364" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=364</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-12-28 10:55</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=354</guid>
			<title>ubuntu 9.10环境下eclipse部分按钮点击无效的解决方法</title>
			<author>admin</author>
			<description><![CDATA[<p>&nbsp; 1.设置一个环境变量，运行eclipse前先运行</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export GDK_NATIVE_WINDOWS=1</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 2.在eclipse 启动命令前加上&nbsp;&nbsp; <span style="color: rgb(194, 12, 185); font-weight: bold;">env</span> <span style="color: rgb(0, 120, 0);">GDK_NATIVE_WINDOWS</span>=<span style="color: rgb(0, 0, 0);">1</span></p>
<p>ZendStudioForEclipse-6.1.2 和7.x的也一样适合</p>
<p>&nbsp;&nbsp; 如我elipse 桌面快捷命令为:/home/iicc/Zend/ZendStudioForEclipse-6.1.2/ZendStudio</p>
<p>&nbsp;&nbsp;&nbsp; 加上后为: env GDK_NATIVE_WINDOWS=1 /home/iicc/Zend/ZendStudioForEclipse-6.1.2/ZendStudio</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=354" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=354</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-11-25 17:53</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=353</guid>
			<title>miro 的一些订阅源</title>
			<author>admin</author>
			<description><![CDATA[<p>中文的</p>
<ol style="list-style-type: decimal;">
    <li>锵锵三人行 <a target="_blank" href="http://feed.feedsky.com/qiangqiang3">http://feed.feedsky.com/qiangqiang3</a></li>
    <li>开卷8分钟 <a target="_blank" href="http://feed.feedsky.com/8minutesreading">http://feed.feedsky.com/8minutesreading</a></li>
    <li>BBC中国丛谈 <a target="_blank" href="http://downloads.bbc.co.uk/podcasts/worldservice/chinareel/rss.xml">http://downloads.bbc.co.uk/podcasts...inareel/rss.xml</a></li>
    <li>德国之声 <a target="_blank" href="http://rss.dw-world.de/xml/podcast_radio_china">http://rss.dw-world.de/xml/podcast_radio_china</a></li>
    <li>NHK中文广播 <a target="_blank" href="http://www3.nhk.or.jp/rj/podcast/rss/chinese.xml">http://www3.nhk.or.jp/rj/podcast/rss/chinese.xml</a></li>
</ol>
<p>英文的</p>
<ol style="list-style-type: decimal;">
    <li>bloomberg <a target="_blank" href="http://www.bloomberg.com/tvradio/podcast/cat_news.xml">http://www.bloomberg.com/tvradio/podcast/cat_news.xml</a></li>
    <li>NPR
    <ol style="list-style-type: decimal;">
        <li>NPR: Science Friday Podcast <a target="_blank" href="http://www.npr.org/rss/podcast.php?id=510221">http://www.npr.org/rss/podcast.php?id=510221</a></li>
    </ol>
    </li>
    <li>Sky News <a target="_blank" href="http://skyscape.sky.com/skynewsradio/NEWS/dailyheads.xml">http://skyscape.sky.com/skynewsradi.../dailyheads.xml</a></li>
    <li>Youtube 浏览 <a target="_blank" href="http://www.youtube.com/rssls">http://www.youtube.com/rssls</a><br />
    <ol style="list-style-type: decimal;">
        <li><strong>Most Viewed Videos</strong>  today <a target="_blank" href="http://youtube.com/rss/global/top_viewed_today.rss">http://youtube.com/rss/global/top_viewed_today.rss</a></li>
    </ol>
    </li>
</ol><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=353" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=353</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-11-22 22:26</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=350</guid>
			<title>Ubuntu下挂载ISO文件挂载cue/bin文件</title>
			<author>admin</author>
			<description><![CDATA[<p>在linux下默认的ISO挂载点位于&quot;/media&quot;目录，下面是挂载一个ISO文件的方法：<br />
<br />
sudo mkdir /media/cdimage  ＃建立一个文件夹作为ISO挂载点<br />
sudo mount -o loop myfile.iso /media/cdimage   ＃挂载ISO文件，使用参数 -o loop<br />
<br />
使用你想挂载的iso文件代替myfile.iso。<br />
<br />
挂载一个镜像文件使之能被写入，使用下面的命令：<br />
<br />
sudo mkdir /media/cdimage<br />
sudo mount -o rw,loop myfile.iso /media/cdimage<br />
<br />
卸载镜像文件：<br />
<br />
sudo umount /media/cdimage<br />
rmdir /media/cdimage<br />
...</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=350" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=350</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-10-30 12:00</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=347</guid>
			<title>vi的使用</title>
			<author>admin</author>
			<description><![CDATA[<h3 class="title">vi的使用</h3>
<p>功能最强在的编辑器&mdash;&mdash;vi<br />
vi是所有UNIX系统都会提供的屏幕编辑器，它提供了一个视窗设备，通过它可以编辑文件。当然，对UNIX系统略有所知的人，或多或少都觉得vi超级难 用，但vi是最基本的编辑器，所以希望读者能好好把它学起来，以后在UNIX世界里必将畅行无阻、游刃有余，因为其他几种文本处理器并非UNIX标准配 备。说不定别人的Linux机器没安装joe或pico，如果您不会vi，那您可能就没辄了。<br />
vi的基本概念<br />
基本上vi可分为三种操作状态，分别是命令模式（Command mode）、插入模式（Insert mode）和底线命令模式（Last line mode），各模式的功能区分如下：<br />
1．	Comand mode：控制屏幕光标的移动，字符或光标的删除，移动复制某区段及进入Insert mode下，或者到Last line mode。<br />
2．	Insert mode：唯有在Insert mode下，才可做文字数据输入，按Esc等可回到Comand mode。<br />
3．	Last line mode：将储存文件或离开编辑器，也可设置编辑环境，如寻找字符串、列出行号等。<br />
不过可以把vi简化成两个模式，即是将Last line mode也算入Command mode,把vi分成Command 和Insert mode。<br />
vi的基本操作<br />
&bull;进入vi<br />
在系统提示符号输入vi及文件名称后，即可进入vi全屏幕编辑画面：<br />
$ vi testfile<br />
有一点要特别注意，就是您进入vi之后是处于&ldquo;Command mode&rdquo;下，您要切换到Insert mode才能输入文字。初次用vi的用户都会想先用上下左右键移动光标，结果电脑一直叫，把自己气个半死，所以进入vi后，先不要乱动，转换入Insert后再说。<br />
&bull;切换至Insert mode编辑文件<br />
在Command mode下按&lsquo;i&rsquo;、&lsquo;a&rsquo;或&lsquo;o&rsquo;三键就可进入Insert mode。这时候您就可以开始输入文字了。<br />
i: 插入，从目前光标所在之处插入所输入的文字。<br />
a: 增加，目前光标所在的下一个字开始输入文字。<br />
o: 插入新的一行，从行首开始输入文字。<br />
&bull;Insert的切换&rarr;Command mode，按Esc键<br />
您目前处于Insert mode，您就只能一直打字。假如您发现打错字了，想用光标键往回移动，将该字删除，就要按ESC键转换回Command mode，再删除文字。<br />
&bull;离开vi及存文件...</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=347" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=347</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-10-27 09:47</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=344</guid>
			<title>ubuntu下Perl 中的正则表达式 与 rename的应用</title>
			<author>admin</author>
			<description><![CDATA[<p>在ubuntu下了部历史小说打算在公车上看，小说7M多，对于手机来说有点大，于是用split分割了。</p>
<p>可是手机不认识没有后缀的文件类型，现在就要用到批量重命名了。</p>
<p>mv不认识字符带* ？这些，重命名就用到了rename。</p>
<p>rename是perl下的命令，支持正则。下面是perl正则基础。</p>
<p>我的文件是 dqdgxs00 dqdgxs01 ....这样的格式，rename给批量加上txt后缀。</p>
<p>命令：rename 's/(dqdgxs)(\d+)/$1_$2.txt/ dqdgxs*</p>
<p>执行后得到 dqdgxs_00.txt dqdgxs_01.txt</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=344" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=344</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-10-23 15:21</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=343</guid>
			<title>ProFTPD搭载sqlite3，简单配置轻量级FTP服务器</title>
			<author>admin</author>
			<description><![CDATA[<p>所谓简单，是因为<a target="_blank" href="http://www.proftpd.org/" title="Highly configurable GPL-licensed FTP server software ">ProFTPD</a>的一些复杂功能都没有写进来，比如用户磁盘空间配额、上传下载速率限制等。<br />
所谓轻量级，是因为配这个平台，是为了公司内部使用，用户有限。更复杂的配置，日后再说吧:)</p>
<p>网上的很多关于ProFTPD搭载数据库进行管理的文章，大多用的都是MySQL(搜baidu的结果)和PostgreSQL(搜google的 结果)，可是单单为了一个公司内部使用的这么一个小平台，使用这么两个重量级的数据库，是在有点杀鸡用牛刀的感觉。对于我的需求，<a target="_blank" href="http://www.sqlite.org/" title="a lightweight embeddable database system">Sqlite</a>这个轻量级的嵌入式数据库，显然是最最合适的选择。在网上跑来跑去找了1个多小时，也没有一篇像样的配置文档，甚至连ProFTPD的官方doc里，提起sqlite也是只言片语。没办法，只有自己对着英文的Howto，自己摸索了。</p>
<p><strong>1，Install Sqlite3 and ProFTPD</strong><br />
下载安装Sqlite3最新版：http://www.sqlite.org/</p>
<blockquote>
<p>#tar -zxf sqlite-amalgamation-3.6.13.tar.gz<br />
#cd sqlite-3.6.13/<br />
#./configure<br />
#make<br />
#make install</p>
</blockquote>
<p>下载安装ProFTPD最新版：http://www.proftpd.org/<br />
<span style="color: rgb(255, 102, 0);">ProFTPD对于数据库的支持，并不是通过linux的PAM方式来实现的<br />
而是内置了模块，这点曾经让我走了很多弯路，TMD居然没有文章提及这点。使用sqlite模块:</span></p>
<blockquote>
<p>#tar -zxf proftpd-1.3.2.tar.gz<br />
#cd proftpd-1.3.2<br />
#./configure &ndash;prefix=/usr/local/proftpd &ndash;with-modules=mod_sql:mod_sql_sqlite<br />
#make<br />
#make install</p>
</blockquote>
<p><strong>2，配置ProFTPD</strong><br />
编辑/usr/local/proftpd/etc/proftpd.conf文件，加入下面列出来的这一大坨参数。<br />
这里只说说跟Sqlite3有关的参数，其他比较有用的参数配置说明，满世界都是。完整配置文件放在最后。<br />
其实除了SQLBackend和SQLConnectInfo两个参数之外，剩下的一些参数在配置其他数据库时也会用到<br />
我在配置这些数据库相关参数的时候，走了很多弯路，查了很多文档，记下来也给自己脑子备个份。</p>
<blockquote>
<p>#首先来说这俩，定义proftpd以什么身份来运行，跟apache里的是一个意思<br />
#我是习惯了apache定义为www用户和www组，配置proftpd也就这样了<br />
#以什么身份运行，我个人感觉没啥特别意义，关键是虚拟用户对实体用户的映射！<br />
<span style="color: rgb(255, 102, 0);">User                    www<br />
Group                   www</span><br />
#sqlite2跟3差别较大，各软件平台对其支持也是分开来的，比如PHP<br />
#这里就是指明，使用sqlite3<br />
<span style="color: rgb(255, 102, 0);">SQLBackend sqlite3</span><br />
#数据库文件的绝对路径，一定要绝对<br />
<span style="color: rgb(255, 102, 0);">SQLConnectInfo /home/www/ftpd.db</span><br />
#数据库内虚拟用户的密码认证方式<br />
#我认为Backend的意思就是数据库自己的认证方式，比如mysql的password方案<br />
#该方案可以指定多种，使用空格隔开，按照先后，依次try<br />
#下面这句的意思就是&ldquo;先用sqlite自己的认证方式(我用的明文，其他解决方案没研究)<br />
#如果不行，再使用crypt(3)的方案&rdquo;，实际配置文件里我只要了一个Backend<br />
<span style="color: rgb(255, 102, 0);">SQLAuthTypes Backend Crypt</span><br />
#自定义存放用户信息的表和字段<br />
#下面这句的意思就是<br />
#users表 里的 字段：用户名 密码 系统映射uid 系统映射gid 主目录 shell路径<br />
#切记：表和字段的名字可以随便起(跟实际数据库中的表和字段相对应)，但顺序不可乱<br />
#按照我对英文howto的理解，前4个字段名是必须要设置的，后两个如果自己用不上<br />
#必须使用NULL来填补，这样mod_sql模块就不会去检索这俩字段了<br />
<span style="color: rgb(255, 102, 0);">SQLUserInfo users user_name user_passwd uid gid home_dir NULL</span><br />
#如果主目录字段名设置为NULL，那么这里这个就必须要定义<br />
#这个是用来定义那些没有&ldquo;主目录定义的用户&rdquo;的主目录，有点绕口:P<br />
<span style="color: rgb(255, 102, 0);">#SQLDefaultHomedir &ldquo;/tmp&rdquo;</span><br />
#这个参数设置为off的意思，是不让proftpd去检查该FTP用户映射到系统里的用户的shell<br />
#就是说，有没有shell，我都让你登陆。特别是上面的字段，将shell路径这个设置为了NULL<br />
<span style="color: rgb(255, 102, 0);">RequireValidShell off</span><br />
#组信息，没啥意思，就这么放着吧，意思跟上面那个SQLUserInfo一样<br />
#表名 组名 组id 成员<br />
<span style="color: rgb(255, 102, 0);">SQLGroupInfo groups group_name gid members</span><br />
#这里是用户身份认证的程度，只验证user，连带group啥的都验证<br />
#图简单，我这里只验证user这一层<br />
<span style="color: rgb(255, 102, 0);">SQLAuthenticate users</span><br />
#设置ProFTPD允许登陆的最小UID，这个UID是映射到linux系统内实际用户的UID，小于这个值将不允许登陆<br />
#这个值如果不设置，系统默认的是999，在很多国内的文章里，uid和gid都是设置5000多<br />
#所以即使不管这个值，也不会有问题，可是如果你跟我一样，映射用户的uid和gid都小于999了，就要注意它了<br />
#我的www用户的uid和gid都是504，在这里，卡了我有一个多小时，TNND<br />
<span style="color: rgb(255, 102, 0);">SQLMinUserUID 500</span><br />
#这两个的意思，是所有未在数据库中定义uid和gid的用户的默认uid及gid<br />
<span style="color: rgb(255, 102, 0);">SQLDefaultUID 504</span><br />
<span style="color: rgb(255, 102, 0);">SQLDefaultGID 504</span></p>
</blockquote>
<p>我的完整的proftpd.conf文件</p>
<blockquote>
<p><a target="_blank" href="http://rui7905.googlecode.com/svn/trunk/proftpd_sqlite3">http://rui7905.googlecode.com/svn/trunk/proftpd_sqlite3</a></p>
</blockquote>
<p><strong>3，建立数据库及用户表</strong><br />
#sqlite3 /home/www/ftpd.db 数据库就建好了，简单吧~<br />
其实理论上，这个文件的路径，是放在哪里都可以的。我配置完这个平台后，又用php写了一个简单的管理平台<br />
为了方便我的apache运行用户www读写数据库，就放在了www的主目录下。。<br />
在sqlite3环境下，用下面这个语句建立数据表</p>
<blockquote>
<p>CREATE TABLE &ldquo;users&rdquo; (&rdquo;user_name&rdquo; varchar(20), &ldquo;user_passwd&rdquo; varchar(50), &ldquo;uid&rdquo; int(11) NOT NULL DEFAULT 504, &ldquo;gid&rdquo; int(11) NOT NULL DEFAULT 504, &ldquo;home_dir&rdquo; varchar(200), &ldquo;shell&rdquo; varchar(200))</p>
</blockquote>
<p>下面创建一个新用户：</p>
<blockquote>
<p>INSERT INTO &ldquo;users&rdquo; VALUES(&rsquo;test&rsquo;,'test&rsquo;,504,504,&rsquo;/home/www/ftp/test&rsquo;,NULL);</p>
</blockquote>
<p>表的uid和gid的默认值都设置为了504，即www用户在系统内的uid和gid的值。新添加字段时，这两个字段我也设置了。www用户和组在 我系统内是早就建好的，uid和gid分别都是504。通过这两个字段的值，就完成了proftpd内的虚拟用户跟系统内实体用户的映射。具体到自己，请 根据实际情况来设置这两个字段的默认值，及新添加记录的值。<br />
<strong>4，最后</strong><br />
到现在，整个配置应该是完成了，使用这个命令来启动ProFTPD:</p>
<blockquote>
<p>/usr/local/proftpd/sbin/proftpd -c /usr/local/proftpd/etc/proftpd.conf &amp;</p>
</blockquote>
<p>参考资料：<br />
ProFTPD Howto:SQL and mod_sql:<br />
<a target="_blank" href="http://www.proftpd.org/docs/howto/SQL.html" title="ProFTPD Howto:SQL and mod_sql">http://www.proftpd.org/docs/howto/SQL.html</a><br />
ProFTPD module mod_sql:<br />
<a target="_blank" href="http://www.proftpd.org/docs/contrib/mod_sql.html" title="ProFTPD module mod_sql">http://www.proftpd.org/docs/contrib/mod_sql.html</a><br />
ProFTPD module mod_sql_sqlite:<br />
<a href="http://www.proftpd.org/docs/contrib/mod_sql_sqlite.html" title="ProFTPD module mod_sql_sqlite">http://www.proftpd.org/docs/contrib/mod_sql_sqlite.html</a><br />
Configuration Directive List:<br />
<a target="_blank" href="http://www.proftpd.org/docs/directives/linked/by-name.html" title="Configuration Directive List">http://www.proftpd.org/docs/directives/linked/by-name.html</a><br />
Simple MySQL Authentication:<br />
<a target="_blank" href="http://www.proftpd.org/docs/configs/mysql_simple.conf" title="Simple MySQL Authentication">http://www.proftpd.org/docs/configs/mysql_simple.conf</a></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=343" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=343</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-10-12 09:21</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=341</guid>
			<title>功能强大的sed命令</title>
			<author>admin</author>
			<description><![CDATA[<p>vim不太熟练，发现shell的sed命令很强大。<br />
1. Sed简介 <br />
2. 定址 <br />
3. Sed命令 <br />
4. 选项 <br />
5. 元字符集 <br />
6. 实例 <br />
7. 脚本</p>
<p><strong>1. Sed简介</strong></p>
<p>sed是一种在线编辑器，它一次处理一行内容。处理时，把当前处理的行存储在临时缓冲区中，称为&ldquo;模式空间&rdquo;（pattern space），接着用sed命令处理缓冲区中的内容，处理完成后，把缓冲区的内容送往屏幕。接着处理下一行，这样不断重复，直到文件末尾。文件内容并没有 改变，除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件；简化对文件的反复操作；编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。</p>
<p><br />
2. 定址</p>
<p>可以通过定址来定位你所希望编辑的行，该地址用数字构成，用逗号分隔的两个行数表示以这两行为起止的行的范围（包括行数表示的那两行）。如1，3表示1，2，3行，美元符号($)表示最后一行。范围可以通过数据，正则表达式或者二者结合的方式确定 。</p>
<p><br />
3. Sed命令</p>
<p>调用sed命令有两种形式：</p>
<p><br />
sed [options] 'command' file(s)</p>
<p>sed [options] -f scriptfile file(s)</p>
<p><br />
&lt; <br />
a\ <br />
在当前行后面加入一行文本。</p>
<p>b lable <br />
分支到脚本中带有标记的地方，如果分支不存在则分支到脚本的末尾。</p>
<p>c\ <br />
用新的文本改变本行的文本。</p>
<p>d <br />
从模板块（Pattern space）位置删除行。</p>
<p>D <br />
删除模板块的第一行。</p>
<p>i\ <br />
在当前行上面插入文本。</p>
<p>h <br />
拷贝模板块的内容到内存中的缓冲区。</p>
<p>H <br />
追加模板块的内容到内存中的缓冲区</p>
<p>g <br />
获得内存缓冲区的内容，并替代当前模板块中的文本。</p>
<p>G <br />
获得内存缓冲区的内容，并追加到当前模板块文本的后面。</p>
<p>l <br />
列表不能打印字符的清单。</p>
<p>n <br />
读取下一个输入行，用下一个命令处理新的行而不是用第一个命令。</p>
<p>N <br />
追加下一个输入行到模板块后面并在二者间嵌入一个新行，改变当前行号码。</p>
<p>p <br />
打印模板块的行。</p>
<p>P（大写） <br />
打印模板块的第一行。</p>
<p>q <br />
退出Sed。</p>
<p>r file <br />
从file中读行。</p>
<p>t label <br />
if分支，从最后一行开始，条件一旦满足或者T，t命令，将导致分支到带有标号的命令处，或者到脚本的末尾。</p>
<p>T label <br />
错误分支，从最后一行开始，一旦发生错误或者T，t命令，将导致分支到带有标号的命令处，或者到脚本的末尾。</p>
<p>w file <br />
写并追加模板块到file末尾。</p>
<p>W file <br />
写并追加模板块的第一行到file末尾。</p>
<p>! <br />
表示后面的命令对所有没有被选定的行发生作用。</p>
<p>s/re/string <br />
用string替换正则表达式re。</p>
<p>= <br />
打印当前行号码。</p>
<p># <br />
把注释扩展到下一个换行符以前。</p>
<p>以下的是替换标记</p>
<p>g表示行内全面替换。</p>
<p>p表示打印行。</p>
<p>w表示把行写入一个文件。</p>
<p>x表示互换模板块中的文本和缓冲区中的文本。</p>
<p>y表示把一个字符翻译为另外的字符（但是不用于正则表达式）</p>
<p><br />
4. 选项<br />
&lt; <br />
-e command, --expression=command <br />
允许多台编辑。</p>
<p>-h, --help <br />
打印帮助，并显示bug列表的地址。</p>
<p>-n, --quiet, --silent <br />
取消默认输出。</p>
<p>-f, --filer=script-file <br />
引导sed脚本文件名。</p>
<p>-V, --version <br />
打印版本和版权信息。</p>
<p><br />
5. 元字符集<br />
&lt; <br />
^ <br />
锚定行的开始 如：/^sed/匹配所有以sed开头的行。</p>
<p>$ <br />
锚定行的结束 如：/sed$/匹配所有以sed结尾的行。</p>
<p>. <br />
匹配一个非换行符的字符 如：/s.d/匹配s后接一个任意字符，然后是d。</p>
<p>* <br />
匹配零或多个字符 如：/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。</p>
<p>[] <br />
匹配一个指定范围内的字符，如/[Ss]ed/匹配sed和Sed。</p>
<p>[^] <br />
匹配一个不在指定范围内的字符，如：/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头，紧跟ed的行。</p>
<p>\(..\) <br />
保存匹配的字符，如s/\(love\)able/\1rs，loveable被替换成lovers。</p>
<p>&amp; <br />
保存搜索字符用来替换其他字符，如s/love/**&amp;**/，love这成**love**。</p>
<p>\&lt; <br />
锚定单词的开始，如:/\</p>
<p>\&gt; <br />
锚定单词的结束，如/love\&gt;/匹配包含以love结尾的单词的行。</p>
<p>x\{m\} <br />
重复字符x，m次，如：/0\{5\}/匹配包含5个o的行。</p>
<p>x\{m,\} <br />
重复字符x,至少m次，如：/o\{5,\}/匹配至少有5个o的行。</p>
<p>x\{m,n\} <br />
重复字符x，至少m次，不多于n次，如：/o\{5,10\}/匹配5--10个o的行。</p>
<p>6. 实例<br />
删除：d命令 <br />
$ sed '2d' example-----删除example文件的第二行。</p>
<p>$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。</p>
<p>$ sed '$d' example-----删除example文件的最后一行。</p>
<p>$ sed '/test/'d example-----删除example文件所有包含test的行。</p>
<p>替换：s命令 <br />
$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记，则只有每行第一个匹配的test被替换成mytest。</p>
<p>$ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说，如果某一行开头的test被替换成mytest，就打印它。</p>
<p>$ sed 's/^192.168.0.1/&amp;localhost/' example-----&amp;符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost，变成192.168.0.1localhost。</p>
<p>$ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1，所有loveable会被替换成lovers，而且替换的行会被打印出来。</p>
<p>$ sed 's#10#100#g' example-----不论什么字符，紧跟着s命令的都被认为是新的分隔符，所以，&ldquo;#&rdquo;在这里是分隔符，代替了默认的&ldquo;/&rdquo;分隔符。表示把所有10替换成100。</p>
<p>选定行的范围：逗号 <br />
$ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。</p>
<p>$ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。</p>
<p>$ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行，每行的末尾用字符串sed test替换。</p>
<p>多点编辑：e命令 <br />
$ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示，第一条命令删除1至5行，第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令，那么第一个替换命令将影响第二个替换命令的结果。</p>
<p>$ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。</p>
<p>从文件读入：r命令 <br />
$ sed '/test/r file' example-----file里的内容被读进来，显示在与test匹配的行后面，如果匹配多行，则file的内容将显示在所有匹配行的下面。</p>
<p>写入文件：w命令 <br />
$ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。</p>
<p><br />
追加命令：a命令 <br />
$ sed '/^test/a\\---&gt;this is a example' example&lt;-----'this is a example'被追加到以test开头的行后面，sed要求命令a后面有一个反斜杠。</p>
<p>插入：i命令 <br />
$ sed '/test/i\\</p>
<p>new line</p>
<p>-------------------------' example</p>
<p>如果test被匹配，则把反斜杠后面的文本插入到匹配行的前面。</p>
<p>下一个：n命令 <br />
$ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配，则移动到匹配行的下一行，替换这一行的aa，变为bb，并打印该行，然后继续。</p>
<p>变形：y命令 <br />
$ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写，注意，正则表达式元字符不能使用这个命令。</p>
<p>退出：q命令 <br />
$ sed '10q' example-----打印完第10行后，退出sed。</p>
<p>保持和获取：h命令和G命令 <br />
$ sed -e '/test/h' -e '$G example-----在sed处理文件的时候，每一行都被保存在一个叫模式空间的临时缓冲区中，除非行被删除或者输出被取消，否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空，并存入新的一行等待处理。在这个例子里，匹配test的行被找到后，将存入模式空间，h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是，当到达最后一行后，G命令取出保持缓冲区的行，然后把它放回模式空间中，且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说，任何包含test的行都被复制并追加到该文件的末尾。</p>
<p>保持和互换：h命令和x命令 <br />
$ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。</p>
<p>7. 脚本<br />
Sed脚本是一个sed的命令清单，启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔，在命令的末尾不能有任何空白或文本，如果在一行中有多个命令，要用分号分隔。以#开头的行为注释行，且不能跨行。</p>
<p><br />
比如，如果要打印出含有字串&rdquo;1024&rdquo;的行，我就可能会用：<br />
cat filename | sed &ndash;n &lsquo;/1024/p&rsquo;sed命令详解!!(要学习shell的 朋友要好好看看)</p>
<p>sed /^$/d filename</p>
<p>可以删除文件中的空行。</p>
<p>sed /^[[:space:]]*$/d filename</p>
<p>可以删除内容为多个空格/tab组成的行。</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=341" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=341</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-10-08 14:49</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=340</guid>
			<title>为nginx配置perl cgi支持</title>
			<author>admin</author>
			<description><![CDATA[<p>在ubuntu下使用extmai作为postfix邮件前端webmail的时候需要用到perl cgi，可是我的httpd已经使用了nginx了，于是又得为nginx配置perl cgi支持，google了很多资料都不齐全这里把我收集的整理下。<br />
<br />
1.先要个perl-cgi接口程序<span id="localfile_1">fastcgi-wrapper.pl</span>，以便产生 套接字 文件。<br />
文件<span id="localfile_1">fastcgi-wrapper.pl</span>见附件[attach=24] <span id="localfile_1"><br />
<br />
文件的 33 行<br />
<br />
&nbsp;$socket = FCGI::OpenSocket( &quot;<span style="background-color: rgb(153, 51, 0);">/var/run/nginx/perl_cgi-dispatch.sock</span>&quot;, 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!<br />
</span><br />
红色标注部分自己更改。并记下，后面用得到。<br />
<br />
<br />
2.运行 <span id="localfile_1">fastcgi-wrapper.pl 注意权限<br />
<br />
可能出现错误<br />
</span>Can&rsquo;t locate FCGI.pm<br />
安装FCGI就可以了</p>
<p>wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz<br />
tar zxvf FCGI-0.67.tar.gz<br />
cd FCGI-0.67<br />
perl Makefile.PL<br />
make<br />
sudo make install</p>
<p>也可能出现错误Can&rsquo;t locate FCGI/ProcManager.pm</p>
<p>安装FCGI-ProcManager<br />
wget http://www.cpan.org/modules/by-module/FCGI/FCGI-ProcManager-0.18.tar.gz<br />
tar zxvf FCGI-ProcManager-0.18.tar.gz<br />
cd FCGI-ProcManager-0.18<br />
perl Makefile.PL<br />
make<br />
sudo make install</p>
<p>3.编写nginx的配置文件perl_fcgi.conf</p>
<p>可以下载附件[attach=25]</p>
<p>修改附件文件中的</p>
<p>fastcgi_pass unix:<span style="background-color: rgb(153, 51, 0);">/usr/local/www/nginx/logs/perl_cgi-dispatch.sock</span>;</p>
<p><span style="background-color: rgb(255, 255, 255);">红色部分改成先前的红色部分一样的.sock文件位置</span></p>
<p>4.修改nginx.conf文件</p>
<p>在server内添加 include perl_fcgi.conf;</p>
<p>配置完成，从新启动nginx测试 cgi吧</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=340" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=340</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-10-07 15:03</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=339</guid>
			<title>ubuntu 8.0.4中的VSFTPD.CONF文件详解</title>
			<author>admin</author>
			<description><![CDATA[<p><font color="#000000">VSFTPD.CONF<br />
Section: File Formats (5)<br />
Index Return to Main Contents <br />
名称<br />
<br />
vsftpd.conf - vsftpd 的配置文件 <br />
描述<br />
vsftpd.conf 可以用于控制 vsftpd, 以实现各种各样的功能. vsftpd 缺省到 /etc/vsftpd.conf 处查找此文件. 当然, 您也可以通过命令行参数进行指定. 这个命令行参数就是指 vsftpd 的配置文件. 对于想使用高级 inetd 管理的用户, 例如, xinetd, 则这个功能非常有用. 可以使用不同的配置文件来启动基于虚拟主机的每个服务.<br />
<br />
格式<br />
vsftpd.conf 的格式非常简单. 每行要么是注释, 要么是指令. 注释行以 # 开始, 将被忽略. 指令行格式如下:<br />
<br />
选项=值<br />
<br />
应当注意的一点是如果在 选项, = 和 值 之间存在空格, 将会报错.(译者注: 即三者之间不允许存在空格)<br />
<br />
每项设定都有默认值, 这可以通过配置文件来修改.<br />
<br />
布尔选项<br />
下边是布尔选项的列表. 一个布尔选项的值可以被设为 YES 或 NO<br />
<br />
allow_anon_ssl<br />
只有在 ssl_enable 被激活时才有用. 如果设为 YES, 匿名用户将被允许使用安全的 SSL 联接.<br />
<br />
默认: NO <br />
anon_mkdir_write_enable<br />
如果设为 YES, 匿名用户将允许在某些情况下创建目录. 这需要激活 write_enable 选项, 并且匿名 ftp 用户需要对父目录有写权限.<br />
<br />
默认: NO <br />
anon_other_write_enable<br />
如果设为 YES, 匿名用户将拥有除 上载, 和创建目录 外更多的权限, 比如 删除和重命名. 通常不建议这么做, 但完整的配置文件是包括这一选项的.<br />
<br />
默认: NO <br />
anon_upload_enable<br />
如果设为 YES, 匿名用户在某些情况下允许上载文件. 这需要将 write_enable 选项激活, 并且匿名用户应当对对应目录有写权限.<br />
<br />
默认: NO <br />
anon_world_readable_only<br />
启用时, 将只允许匿名用户下载具有全球读权限的文件. 这将意味着 ftp 用户可以拥有自己的文件, 特别是前边提到的上载的文件.<br />
<br />
默认: YES <br />
anonymous_enable<br />
用于控制是否允许匿名用户登录. 如果激活, ftp 和 anonymous 都将被视为匿名用户登录.<br />
<br />
默认: YES <br />
ascii_download_enable<br />
如果被激活, 下载时将使用 ASCII 模式进行数据传输.<br />
<br />
默认: NO <br />
ascii_upload_enable<br />
如果被激活, 上载时将使用 ASCII 模式进行数据传输.<br />
<br />
默认: NO <br />
async_abor_enable<br />
如 果被激活, 一个特别的 FTP 命令 &quot;async ABOR&quot; 将被激活. 只有某些 FTP 客户端需要使用这一特性. 另外, 这个特性并不是很好控制, 因此默认没有启用. 不幸的是, 如果没有启用这个特性, 某些 FTP 客户端在取消一个传输时就会挂起, 因此, 您可能希望启用它.<br />
<br />
默认: NO <br />
background<br />
如果被激活, 并且 vsftpd 以 &quot;listen&quot; 模式启动, vsftpd 将会background 监听进程. 即 control will immediately be returned to the shell which launched vsftpd.<br />
<br />
默认: NO <br />
check_shell<br />
注意! 这个选项只对构建时加入 non-PAM 参数的 vsftpd 有效. 如果令其失效, vsftpd 将不会检查有效用户的用于本地登录的 /etc/shells.<br />
<br />
默认: YES <br />
chmod_enable<br />
如果被激活, 将允许使用 SITE CHMOD 命令. 注意! 这只对本地用户有效. 匿名用户从不允许使用 SITE CHMOD.<br />
<br />
默认: YES <br />
chown_uploads<br />
如果被激活, 所有匿名上载的文件的宿主将会调整为 chown_username 中指定的用户. 这样就便于管理, 特别是从安全的角度考虑.<br />
<br />
默认: NO <br />
chroot_list_enable<br />
如 果被激活, 您需要提供一个需要将其限制于其家目录中的本地用户列表. 如果将 chroot_local_user 设为 YES 则意义稍有不同. 在此情况下, 此列表变成不需将用户限制于其家目录的用户的列表. 默认情况下,这个列表文件是 /etc/vsftpd.chroot_list, 但可以通过 chroot_list_file 选项来设定.<br />
<br />
默认: NO <br />
chroot_local_user<br />
如果设 为 YES, 本地用户, 在登录后将(默认)被限制在其家目录中. 警告: 此选项有安全隐患, 特别是在用户拥有上载权限, 或可以shell访问的时候. 如果您不清楚后果, 请不要启用它. 注意, 这些安全隐患并不是 vsftpd 所特有的. 所有的提供将本地用户进行目录限制的 FTP 守护进程有存在这种隐患.<br />
<br />
默认: NO <br />
connect_from_port_20<br />
用于控制在服务器端, 是否使用端口20(ftp-data)进行数据联接. 基于安全的考虑, 有些客户端需要这样做. 相反, 禁用这个选项, 可以使 vsftpd 以较少特权运行.<br />
<br />
默认: NO(但是在示例设置中启用了这个选项) <br />
deny_email_enable<br />
如果激活, 您应当提供一个禁止匿名用户用做密码的 e-mail 地址列表. 默认情况下, 这个列表文件为 /etc/vsftpd.banned_emails, 当然, 您可以通过 banned_email_file 选项指定.<br />
<br />
默认: NO <br />
dirlist_enable<br />
如果设为 NO, 所有的目录列取命令都将被禁止.<br />
<br />
默认: YES <br />
dirmessage_enable<br />
如果启用, 当用户首次进入一个新目录时, FTP 服务器将会显示欢迎信息. 默认情况下, 是扫描目录下的 .message 文件获取的, 当然, 您也可以通过 message_file 选项设定.<br />
<br />
默认: NO(但是在示例设置中启用了这个选项) <br />
download_enable<br />
如果设为 NO, 所有的下载请求都将被拒绝.<br />
<br />
默认: YES <br />
dual_log_enable<br />
如果启用, 将生成两个相似的日志文件, 默认在 /var/log/xferlog 和 /var/log/vsftpd.log 目录下. 前者是 wu-ftpd 类型的传输日志, 可以用于 标准工具分析. 后者是 vsftpd 自己类型的日志.<br />
<br />
默认: NO <br />
force_dot_files<br />
如果激活, 以 . 开始的文件和目录在目录列取的时候将会被显示, 即使客户端没有使用 &quot;a&quot; 标识. 这不包括 &quot;.&quot; 和 &quot;..&quot; 目录<br />
<br />
默认: NO <br />
force_local_data_ssl<br />
只有在 ssl_enable 被激活时才能使用. 如果被激活, 则所有的 非匿名用户 登录时都被强制使用安全 SSL 联接来传送接收数据.<br />
<br />
默认: YES <br />
force_local_logins_ssl<br />
只有在 ssl_enable 被激活时才能使用. 如果被激活, 则所有的 非匿名用户 登录时都被强制使用安全 SSL 联接来传送密码.<br />
<br />
默认: YES <br />
guest_enable<br />
如果启用, 所有非匿名用户都将以 &quot;guest&quot; 身份登录. guest 通过 guest_username 设定, 来映射到一个指定用户.<br />
<br />
默认: NO <br />
hide_ids<br />
如果启用, 所有目录中的用户和组信息列取时都将显示为 &quot;ftp&quot;.<br />
<br />
默认: NO <br />
listen<br />
如果启用, vsftpd 将以独立模式运行. 这就意味着 vsftpd 不能由类 inetd 来启动. vsftpd 应当直接执行. 由 vsftpd 自身监听和处理联接请求.<br />
<br />
默认: NO <br />
listen_ipv6<br />
如 listen 参数, 所不同的是, vsftpd 将对 IPv6 接口进行监听, 而不是 IPv4 接口. 此参数 和 listen 参数相互独立.<br />
<br />
默认: NO <br />
local_enable<br />
用于控制是否允许本地登录. 如果启用, /etc/passwd 中的普通帐号即可用于登录.<br />
<br />
默认: NO <br />
log_ftp_protocol<br />
如果启用, 假若选项 xferlog_std_format 没有启用, 所有的 FTP 请求和应答都会被记录. 此选项对将对调试很有用.<br />
<br />
默认: NO <br />
ls_recurse_enable<br />
如果启用, 此设置将允许用户使用 &quot;ls -R&quot;. 这有点安全威胁, 因为在大型站点的根目录下进行 ls -R 将会消耗很多资源.<br />
<br />
默认: NO <br />
no_anon_password<br />
如果启用, 匿名用户登录将不再需要密码 - 可以直接登录.<br />
<br />
默认: NO <br />
no_log_lock<br />
如果启用, 在写日志文件时, 将会阻止 vsftpd 使用文件锁定. 这个选项通常不会启用. 它的存在是为了处理操作系统的一个bug, 如 Solaris / Veritas 文件系统组合某些情况下试图锁定日志文件的现象.<br />
<br />
默认: NO <br />
one_process_model<br />
如果你使用 Linux 2.4 内核, 您就可以使用一个不同的安全模式, 它只允许每个联接使用一个进程. 这有一点小小的安全问题, 但是提高了性能. 如果您不清楚后果, 或者您的站点要承受大量的并发用户联接时, 请不要启用此选项.<br />
<br />
默认: NO <br />
passwd_chroot_enable<br />
如 果启用, 同 chroot_local_user 一起使用, 就会基于每个用户创建限制目录, 每个用户限制的目录源于 /etc/passwd 中的家目录. 当家目录路径中包含 /./ 时, enotes that the jail is at that particular location in the path. <br />
pasv_enable<br />
如果数据传输时, 您不允许使用 PASV 模式, 则将此选项设为 NO<br />
<br />
默认: YES <br />
pasv_promiscuous<br />
如果您要禁用 PASV 安全检查, 将此选项设置为 YES. 该检查用于确保数据传输联接与控制联接源于同一 IP 地址. 如果不清楚后果, 请不要启用此选项! 此选项只有在某些使用安全隧道的方案中才能正常使用, 或者需要 FXP 的支持.<br />
<br />
默认: NO <br />
port_enable<br />
如果您不允许使用端口模式获取数据联接, 将此选项设置为 NO.<br />
<br />
默认: YES <br />
port_promiscuous<br />
如果您想禁用端口安全检查, 将此选项设置为 YES. 此检查用于确认出站的数据只流向客户端. 搞清楚后果前,不要启用此选项!<br />
<br />
默认: NO <br />
run_as_launching_user<br />
如 果您希望可以由用户来启动 vsftpd, 将此选项设置为 YES. 当不能使用root登录时, 这通常很有用. 严重警告: 搞清楚后果前,不要启用此选项, 随意的启用此选项将会导致非常严重的安全问题. 特别是 vsftpd 没有/不能使用目录限制技术来限制文件访问时(甚至vsftpd是由root启动的). 一个愚蠢的替代方法是将选项 deny_file 设为 {/*,*..*}, 但是其可靠性并不能和限制目录相比, 甚至不在一个等级上. 如果启用此选项, 应当限制其它选项的使用. 例如, 非匿名登录, 上载文件宿主转换, 使用源自端口20的联接和低于 1024 的端口不会工作. 其它一些选项也可能受到影响.<br />
<br />
默认值: NO <br />
secure_email_list_enable<br />
如 果您要为匿名用户指定一个做为密码的邮件地址列表, 将此选项设置为 YES. 在不需要创建虚拟用户的情况下, 构建一个低安全性访问控制很有用. 如果启用, 匿名用户只有使用在 email_password_file 中指定的邮件地址做为密码, 才能登录. 文件格式是每行一个密码, 没有空格. 默认文件名是 /etc/vsftpd.email_passwords.<br />
<br />
默认: NO <br />
session_support<br />
此 选项用于控制 vsftpd 是否为登录保持会话. 如果保持会话, vsftpd 将会尝试和更新 utmp 和 wtmp. 如果使用 PAM 认证, 同时还会打开 pam_session, 直至登出. 如果不需要保持登录会话, 或许您希望禁用此选项, 以使得 vsftpd 占用更少的进程和/或更少的特权. 注意 - utmp 和 wtmp 只有在启用 PAM 的情况下才支持.<br />
<br />
默认: NO <br />
setproctitle_enable<br />
如果启用, vsftpd 将会尝试在系统进程列表中显示会话状态信息. 也就是说, 进程报告将会显示每个 vsftpd会话在做什么 (闲置, 下载 等等). 出于安全的考虑, 您可能需要将其关闭.<br />
<br />
默认: NO <br />
ssl_enable<br />
如 果启用此选项, 并在编译时加入 OpenSSL 支持, vsftpd 将支持通过 SSL 进行安全联接. 此选项用于控制联接(包括登录) 以及数据联接. 您可能同时需要支持SSL的客户端. 注意!! 小心启用此选项. 仅在需要时才启用. vsftpd 对使用 OpenSSL 库的安全性不做任何担保. 启用此选项, 就意味着您相信所安装的 OpenSSL 库的安全性.<br />
<br />
默认: NO <br />
ssl_sslv2<br />
只有激活 ssl_enable 选项时才有效. 如果启用, 此选项将允许使用 SSL v2 协议进行联接. TLS v1 仍为首选联接.<br />
<br />
默认: NO <br />
ssl_sslv3<br />
只有激活 ssl_enable 选项时才有效. 如果启用, 此选项将允许使用 SSL v3 协议进行联接. TLS v1 仍为首选联接.<br />
<br />
默认: NO <br />
ssl_tlsv1<br />
只有激活 ssl_enable 选项时才有效. 如果启用, 此选项将允许使用 TLS v1 协议进行联接. TLS v1 仍为首选联接.<br />
<br />
默认: YES <br />
syslog_enable<br />
如果启用, 任何本来应该输出到 /var/log/vsftpd/vsftpd.log 的日志, 将会输出到系统日志中. 记录由 FTPD 完成.<br />
<br />
默认: NO <br />
tcp_wrappers<br />
如 果启用, 并且在编译 vsftpd 时加入了对 TCP_Wrappers 的支持, 则连入请求转由 TCP_Wrappers 完成访问控制. 另外, 这是基于每个IP的配置机制. 如果 tcp_wrappers 设置了 VSFTPD_LOAD_CONF 环境变量, 则 vsftpd 会话将会试图加载在此变量中指定的 vsftpd 配置文件.<br />
<br />
默认: NO <br />
text_userdb_names<br />
默认情况下, 目录列取时在用户和组字段显示的是数字ID. 如果启用此选项,则可以得到文本名称. 基于性能的考虑, 默认情况下关闭此选项.<br />
<br />
默认: NO <br />
tilde_user_enable<br />
如 果启用, vsftpd 将试图解析类似 ~chris/pics 的路径名, 即跟着用户名的波型号. 注意, vsftpd 有时会一直解析 ~ 和 ~/ (这里, ~ 被解析称为初始登录路径). ~user 则只有在可以找到包含闲置目录的 /etc/passwd 文件时才被解析.<br />
<br />
默认值: NO <br />
use_localtime<br />
如果启用, vsftpd 在列取目录时, 将显示您本地时区的时间. 默认显示为 GMT. 由 MDTM FTP 命令返回的时间同样也受此选项的影响.<br />
<br />
默认: NO <br />
use_sendfile<br />
一个内部设定，用于测试在您的平台上使用 sendfile() 系统的性能.<br />
<br />
默认: YES <br />
userlist_deny<br />
此选项只有在激活 userlist_enable 时才会有效. 如果您将此选项设置为 NO, 则只有在 userlist_file 文件中明确指定的用户才能登录系统. 当登录被拒绝时, 拒绝发生在被寻问命令之前.<br />
<br />
默认: YES <br />
userlist_enable<br />
如果启用, vsftpd 将会从 userlist_file 选项指定的文件中加载一个用户名列表. 如果用户试图使用列表中指定的名称登录, 那么他们将在寻问密码前被拒绝. 这有助于阻止明文传送密码. 详见 userlist_deny.<br />
<br />
默认: NO <br />
virtual_use_local_privs<br />
如果启用, 虚拟用户将拥有同本地用户一样的权限. 默认情况下, 虚拟用户同匿名用户权限相同, 这倾向于更多限制 (特别是在写权限上).<br />
<br />
默认: NO <br />
write_enable<br />
用于控制是否允许 FTP 命令更改文件系统. 这些命令是: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE.<br />
<br />
默认: NO <br />
xferlog_enable<br />
如果启用, 将会维护一个日志文件, 用于详细记录上载和下载. 默认情况下, 这个日志文件是 /var/log/vsftpd.log. 但是也可以通过配置文件中的 vsftpd_log_file 选项来指定.<br />
<br />
默认: NO(但是在示例设置中启用了这个选项) <br />
xferlog_std_format<br />
如 果启用, 传输日志文件将以标准 xferlog 的格式书写, 如同 wu-ftpd 一样. 这可以用于重新使用传输统计生成器. 然而, 默认格式更注重可读性. 此格式的日志文件默认为 /var/log/xferlog, 但是您也可以通过 xferlog_file 选项来设定.<br />
<br />
默认: NO<br />
<br />
<br />
数字选项<br />
下边是数字选项的列表. 数字选项必须设置一个非负的整数. 为了便于umask选项, 同样也支持八进制数字. 八进制数字首位应为 0 .<br />
<br />
accept_timeout<br />
超时, 以秒计, 用于远程客户端以 PASV 模式建立数据联接.<br />
<br />
默认: 60 <br />
anon_max_rate<br />
允许的最大数据传输速率, 单位 b/s, 用于匿名客户端.<br />
<br />
默认: 0 (无限制) <br />
anon_umask<br />
用于设定匿名用户建立文件时的 umask 值. 注意! 如果您要指定一个八进制的数字, 首位应当是 &quot;0&quot;, 否则将视作 10 进制数字.<br />
<br />
默认: 077 <br />
connect_timeout<br />
超时, 单位 秒, 用于响应 PORT 方式的数据联接.<br />
<br />
默认: 60 <br />
data_connection_timeout<br />
超时, 单位 秒, 用于设定空闲的数据连接所允许的最大时长. 如果触发超时, 则远程客户端将被断开.<br />
<br />
默认: 300 <br />
file_open_mode<br />
用于设定创建上载文件的权限. mask 的优先级高于这个设定. 如果想允许上载的文件可以执行, 将此值修改为 0777<br />
<br />
默认: 0666 <br />
ftp_data_port<br />
FTP PORT 方式的数据联接端口.(需要激活 connect_from_port_20 选项)<br />
<br />
默认: 20 <br />
idle_session_timeout<br />
超时, 单位 秒, 远程客户端的最大 FTP 命令间隔. 如果超时被触发, 远程客户端将被断开.<br />
<br />
默认: 300 <br />
listen_port<br />
如果 vsftpd 以独立模式启动, 此端口将会监听 FTP 连入请求.<br />
<br />
默认: 21 <br />
local_max_rate<br />
允许的最大数据传输速率, 单位 b/s, 用于限制本地授权用户.<br />
<br />
默认: 0 (无限制) <br />
local_umask<br />
用于设定本地用户上载文件的 umask 值. 注意! 如果您要指定一个八进制的数字, 首位应当是 &quot;0&quot;, 否则将视作 10 进制数字.<br />
<br />
默认: 077 <br />
max_clients<br />
如果 vsftpd 以独立模式启动, 此选项用于设定最大客户端联接数. 超过部分将获得错误信息.<br />
<br />
默认: 0 (无限制) <br />
max_per_ip<br />
如果 vsftpd 以独立模式启动, 此选项用于设定源于同一网络地址的最大联接数. 超过部分将获得错误信息.<br />
<br />
默认: 0 (无限制) <br />
pasv_max_port<br />
为 PASV 方式数据联接指派的最大端口. 基于安全性考虑, 可以把端口范围指定在一样较小的范围内.<br />
<br />
默认: 0 (可以使用任意端口) <br />
pasv_min_port<br />
为 PASV 方式数据联接指派的最小端口. 基于安全性考虑, 可以把端口范围指定在一样较小的范围内.<br />
<br />
默认: 0 (可以使用任意端口) <br />
trans_chunk_size<br />
您可能不想修改这个设置, 如果有带宽限制, 可以尝试将此值设置为 8192.<br />
<br />
默认: 0 (让vsftpd 自己选择一个更合理的设置) <br />
<br />
<br />
字符选项<br />
下边是字符选项列表<br />
<br />
anon_root<br />
此选项声明, 匿名用户在登录后将被转向一个指定目录(译者注: 默认根目录). 失败时将被忽略.<br />
<br />
默认: (无) <br />
banned_email_file<br />
此选项用于指定包含不允许用作匿名用户登录密码的电子邮件地址列表的文件. 使用此选项需要启用 deny_email_enable 选项.<br />
<br />
默认: /etc/vsftpd.banned_emails <br />
banner_file<br />
此选项用于指定包含用户登录时显示欢迎标识的文件. 设置此选项, 将取代 ftpd_banner 选项指定的欢迎标识.<br />
<br />
默认: (无) <br />
chown_username<br />
用于指定匿名用户上载文件的宿主. 此选项只有在 chown_uploads 选项设定后才会有效.<br />
<br />
默认；root <br />
chroot_list_file<br />
此选项用于指定包含被限制在家目录中用户列表的文件. 使用此选项, 需启用 chroot_list_enable . 如果启用了 chroot_local_user 选项, 此文件所包含的则为不会被限制在家目录中的用户列表.<br />
<br />
默认: /etc/vsftpd.chroot_list <br />
cmds_allowed<br />
此选项指定允许使用的 FTP 命令(登录以后. 以及登录前的USER, PASS 和 QUIT), 以 逗号分割. 其它命令将被拒绝使用. 这对于锁定一个 FTP 服务器非常有效. 例如: mds_allowed=PASV,RETR,QUIT<br />
<br />
默认: (无) <br />
deny_file<br />
此 选项用于设定拒绝访问的文件类型(和目录名等). 此设定并不是对文件进行隐藏, 但是您不能对其操作(下载, 更换目录, 以及其它操作). 此选项非常简单, 不能用于严格的访问控制--文件系统的优先级要高一些. 然而, 此选项对于某些虚拟用户的设定非常有效. 特别是在一个文件可以通过各种名称访问时(可能时通过符号联接或者硬联接), 应当注意拒绝所有的访问方法. 与 hide_file 中给出名称匹配的文件会被拒绝访问. 注意 vsftpd 只支持正则表达式匹配的部分功能. 正因为如此, 您需要尽可能的对此选项的设置进行测试. 同时基于安全性考虑, 建议您使用文件系统自身的访问控制. 例如: deny_file={*.mp3,*.mov,.private}<br />
<br />
默认: (无) <br />
dsa_cert_file<br />
此选项用于指定用于 SSL 加密联接的 DSA 证书的位置.<br />
<br />
默认: (无 - 使用 RSA 证书) <br />
email_password_file<br />
此选项用于提供启用 secure_email_list_enable 选项, 所需要的可替代文件.<br />
<br />
默认: /etc/vsftpd.email_passwords <br />
ftp_username<br />
用于处理匿名 FTP 的用户名. 此用的家目录即为匿名发 FTP 的根目录.<br />
<br />
默认: ftp <br />
ftpd_banner<br />
用于替换首次连入 vsftpd 时显示的欢迎标识字符串.<br />
<br />
默认: (无 - 显示默认 vsftpd 标识) <br />
guest_username<br />
参阅布尔选项 guest_enable . 此选项用于将 guest 用户映射到一个真实用户上.<br />
<br />
默认: ftp <br />
hide_file<br />
此 选项用于设定列取目录时, 要隐藏的文件类型(以及目录等). 尽管隐藏了, 知道其宿主的客户端仍然能对文件/目录等有完全访问权限. 与名称 hide_file 中包含的字符串匹配的项都将隐藏. 注意 vsftpd 只支持正则表达式匹配的部分功能. 例如: hide_file={*.mp3,.hidden,hide*,h?}<br />
<br />
默认: (无) <br />
listen_address<br />
如果 vsftpd 以独立模式运行, 此设定用于修改默认(所有本地接口)监听地址. 格式为数字 IP 地址.<br />
<br />
默认: (无) <br />
listen_address6<br />
如 listen_address, 不过应该指定为IPv6 监听器指定默认监听地址. 格式为标准 IPv6 地址格式.<br />
<br />
默认: (无) <br />
local_root<br />
本选项用于指定本地用户(即, 非匿名用户)登录后将会转向的目录. 失败时将被忽略.<br />
<br />
默认: (无) <br />
message_file<br />
此选项用于指定进入新目录时要查询的文件名. 这个文件的内容为显示给远程用户的欢迎信息. 使用此选项, 需要启用 dirmessage_enable 选项.<br />
<br />
默认: .message <br />
nopriv_user<br />
用于指定一个用户, 当 vsftpd 要切换到无权限状态时, 使用此用户. 注意这最好是一个专用用户, 而不是用户 nobody. 在大多数机器上, 用户 nobody 被用于大量重要的事情.<br />
<br />
默认: nobody <br />
pam_service_name<br />
用于指定 PAM 服务的名称.<br />
<br />
默认: ftp <br />
pasv_address<br />
此选项为 vsftpd 指定一个 IP 地址, 用作对 PASV 命令的响应. IP 地址应该为数字模式.<br />
<br />
默认: (无 - 即地址从连入的联接套接字中获取) <br />
rsa_cert_file<br />
此选项用于指定 SSL 加密联接所用 RSA 证书的位置.<br />
<br />
默认: /usr/share/ssl/certs/vsftpd.pem <br />
secure_chroot_dir<br />
此选项用于指定一个空目录. 并且 ftp 用户不应对此目录有写权限. 当 vsftpd 不需要访问文件系统是, 此此目录做为一个限制目录, 将用户限制在此目录中.<br />
<br />
默认: /usr/share/empty <br />
ssl_ciphers<br />
此选项用于选择 vsftpd 允许使用哪些 SSL 加密算法来用于 SSL 加密联接. 更多信息参阅 ciphers 的联机手册. 注意这样可以有效的防止对某些发现漏洞的算法进行恶意的远程攻击.<br />
<br />
默认: DES-CBC3-SHA <br />
user_config_dir<br />
此 选项用于定义用户个人配置文件所在的目录. 使用非常简单, 一个例子即可说明. 如果您将 user_config_dir 设置为 /etc/vsftpd_user_conf 并以用户 &quot;chris&quot;登录, 那么 vsftpd 将对此用户使用文件 /etc/vsftpd_user_conf/chris 中的设定. 此文件的格式在联机手册中有详细说明. 请注意, 不是每个设定都能影响用户的. 例如, 有些设定只在用户会话开始时起作用. 这包括 listen_address, banner_file, max_per_ip, max_clients, xferlog_file, 等等.<br />
<br />
默认: (无) <br />
user_sub_token<br />
此 选项需要和虚拟用户联合使用. 其将依据一个模板为每个虚拟用户创建家目录. 例如, 如果真实用户的家目录由选项 guest_username 指定为 /home/virtual/$USER, 并且将 user_sub_token 设定为 $USER, 当虚拟用户 fred 登入后, 将会进入(限制)目录 /home/virtual/fred. 如果 local_root 中包含了 user_sub_token 此选项也会起作用.<br />
<br />
默认: (无) <br />
userlist_file<br />
此选项用于指定启用 userlist_enable 选项后需要加载文件的名称.<br />
<br />
默认: /etc/vsftpd.user_list <br />
vsftpd_log_file<br />
此 选项用于指定写入 vsftpd 格式日志的文件. 如果启用了 xferlog_enable, 而没有设定 xferlog_std_format 的话, 日志将只会写入此文件. 另为,如果设置了 dual_log_enable 的话, 日志同样会写入此文件. 更复杂一点, 如果您设置了 syslog_enable 的话, 输出将不会写入此文件, 而是写入系统日志文件.<br />
<br />
默认: /var/log/vsftpd.log <br />
xferlog_file<br />
此选项用于指定写入 wu-ftpd 样式日志的文件名. 只有在 xferlog_enable 和 xferlog_std_format 做了相应设定, 才会记录此传输日志. 另外, 如果您设置了 dual_log_enable 选项, 也会记录此日志.<br />
<br />
默认: /var/log/xferlog</font></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=339" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=339</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-09-30 17:13</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=336</guid>
			<title>给ubuntu8.04编译安装了Nginx 0.8.14 和php 5.2.10记录</title>
			<author>admin</author>
			<description><![CDATA[<p>网站才刚刚开始一直没流量，可是老是内存飆升不下，心一横决定换个Nginx试试。</p>
<p>编译环境花了我很大功夫。</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>apt-get&nbsp;update&nbsp;-y&nbsp;&nbsp;</span></span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;build-essential&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;gcc&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;g++&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;ssh&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;automake&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;autoconf&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;make&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;re2c&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;wget&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;cron&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;bzip2&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;rcconf&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;flex&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;vim&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;bison&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;m4&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;awk&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;make&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;cpp&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;binutils&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;unzip&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;tar&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libncurses5&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libncurses5-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libtool&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpcre3&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpcrecpp0&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libssl-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;zlibc&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;openssl&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libxml2-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libltdl3-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libmcrypt-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libmysqlclient15-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libbz2-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpcre3-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libssl-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;zlib1g-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpng3&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libfreetype6&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libfreetype6-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libjpeg62&nbsp;libjpeg62-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpng12-0&nbsp;libpng12-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libfreetype6&nbsp;libfreetype6-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;curl&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libcurl3&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libcurl3-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libcurl4-openssl-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libmhash2&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libmhash-dev&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpq-dev&nbsp;&nbsp;</span></li>
    <li class="alt"><span>apt-get&nbsp;install&nbsp;-y&nbsp;libpq5&nbsp;&nbsp;</span></li>
    <li class=""><span>apt-get&nbsp;install&nbsp;-y&nbsp;locales&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>下载 php-5.2.10.tar.gz&nbsp; php-5.2.10-fpm-0.5.13.diff.gz&nbsp;&nbsp;&nbsp; nginx-0.8.14.tar.gz&nbsp;&nbsp; libiconv-1.13.tar.gz</p>
<p>安装libiconv-1.13.tar.gz先</p>
<p>tar zxvf libiconv-1.13.tar.gz<br />
cd libiconv-1.13/<br />
./configure --prefix=/usr/local/libiconv<br />
make &amp;&amp; make install</p>
<p>再安装php-5.2.10.tar.gz 并且打上补丁 这里用的是部署环境的php.ini-recommended 记得打开短标记支持 否则discuz的产品罢工<br />
tar zxvf php-5.2.10.tar.gz<br />
gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1<br />
cd php-5.2.10/<br />
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear<br />
make &amp;&amp; make install<br />
cp php.ini-recommended /usr/local/php/etc/php.ini<br />
strip /usr/local/php/bin/php-cgi</p>
<p>准备安装nginx啦</p>
<p>groupadd www<br />
useradd -g www www<br />
mkdir -p /home/iicc/logs<br />
chmod 777 /home/iicc/logs<br />
touch /home/iicc/logs/nginx_error.log</p>
<p>安装nginx</p>
<p>tar zxf nginx-0.8.14.tar.gz<br />
cd nginx-0.8.14/<br />
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module<br />
make<br />
make install</p>
<p>更改 /usr/local/nginx/conf/nginx.conf 我这里建了3个虚拟主机 我的主机2G内存，一般双核CPU</p>
<p>文件可以在我的附件下载 请进入阅读全文...</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=336" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=336</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-09-15 13:37</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=335</guid>
			<title>ubuntu cron定时任务crontab命令详解</title>
			<author>admin</author>
			<description><![CDATA[<p><span style="font-size: small; color: rgb(0, 0, 0);">cron是一个linux下的定时执行工具，可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务，但它不自动起来，可以用以下的方法启动、关闭这个服务:<br />
/sbin/service crond start //启动服务<br />
/sbin/service crond stop //关闭服务<br />
/sbin/service crond restart //重启服务<br />
/sbin/service crond reload //重新载入配置 </span></p>
<p><span style="font-size: small; color: rgb(0, 0, 0);">1.crontab命令选项:<br />
-u指定一个用户,<br />
-l列出某个用户的任务计划,<br />
-r删除某个用户的任务,<br />
-e编辑某个用户的任务<br />
2.cron文件语法:<br />
分&nbsp;&nbsp;&nbsp;&nbsp; 小时&nbsp;&nbsp; 日&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 星期&nbsp;&nbsp;&nbsp;&nbsp; 命令<br />
0-59&nbsp;&nbsp; 0-23&nbsp;&nbsp; 1-31&nbsp;&nbsp; 1-12&nbsp;&nbsp;&nbsp;&nbsp; 0-6&nbsp;&nbsp;&nbsp;&nbsp; command&nbsp;&nbsp;&nbsp;&nbsp; (取值范围,0表示周日一般一行对应一个任务) </span></p>
<p><span style="font-size: small; color: rgb(0, 0, 0);">3.记住几个特殊符号的含义:<br />
&ldquo;*&rdquo;代表取值范围内的数字,<br />
&ldquo;/&rdquo;代表&rdquo;每&rdquo;,<br />
&ldquo;-&rdquo;代表从某个数字到某个数字,<br />
&ldquo;,&rdquo;分开几个离散的数字</span></p>
<p><span style="font-size: small; color: rgb(0, 0, 0);">任务调度设置文件的写法<br />
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件<br />
具体格式如下：<br />
Minute Hour Day Month Dayofweek&nbsp;&nbsp; command<br />
分钟&nbsp;&nbsp;&nbsp;&nbsp; 小时&nbsp;&nbsp; 天&nbsp;&nbsp;&nbsp;&nbsp; 月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 天每星期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令<br />
每个字段代表的含义如下：<br />
Minute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个小时的第几分钟执行该任务<br />
Hour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每天的第几个小时执行该任务<br />
Day&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每月的第几天执行该任务<br />
Month&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每年的第几个月执行该任务<br />
DayOfWeek&nbsp;&nbsp;&nbsp;&nbsp; 每周的第几天执行该任务<br />
Command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定要执行的程序<br />
在这些字段里，除了&ldquo;Command&rdquo;是每次都必须指定的字段以外，其它字段皆为可选字段，可视需要决定。对于不指定的字段，要用&ldquo;*&rdquo;来填补其位置。<br />
举例如下：<br />
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定每小时的第5分钟执行一次ls命令<br />
30&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定每天的 5:30 执行ls命令<br />
30&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定每月8号的7：30分执行ls命令<br />
30&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定每年的6月8日5：30执行ls命令<br />
30&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定每星期日的6:30执行ls命令[注：0表示星期天，1表示星期1，以此类推，也可以用英文来表示，sun表示星期天，mon表示星期一等。]<br />
30&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 10,20&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp; 每月10号及20号的3：30执行ls命令[注：&ldquo;，&rdquo;用来连接多个不连续的时段]<br />
25&nbsp;&nbsp;&nbsp;&nbsp; 8-11 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每天8-11点的第25分钟执行ls命令[注：&ldquo;-&rdquo;用来连接连续的时段]<br />
*/15&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]<br />
30&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; */10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; ls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个月中，每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6：30执行一次ls命令。 ]<br />
每天7：50以root 身份执行/etc/cron.daily目录中的所有可执行文件<br />
50&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; run-parts&nbsp;&nbsp;&nbsp;&nbsp; /etc/cron.daily&nbsp;&nbsp; [ 注：run-parts参数表示，执行后面目录中的所有可执行文件。</span></p>
<p>添加后保存的路径是<span style="font-size: small; color: rgb(0, 0, 0);">/var/spool/cron,可以用vi查看修改，这个不难</span></p>
<p><span style="font-size: small; color: rgb(0, 0, 0);">&nbsp;</span></p>
<p><span style="font-size: small; color: rgb(0, 0, 0);">&nbsp;</span></p>
<p>一句话总结crontab（指这个应用、这个机制）的作用：&rdquo;run this command at this time on this day&rdquo;，在指定的日期、时间，运行指定的命令。下面是Linux 上crontab手册中的知识点，小结如下：</p>
<p><strong>1. crontab文件&ldquo;正式行&rdquo;的开始</strong></p>
<p>空行、以空格或者&ldquo;tab&rdquo;开行的行，被cron(daemon)忽略。</p>
<p>以#开始的行，作为注释被cron(daemon)忽略。</p>
<p>&ldquo;注释&rdquo;不允许与&ldquo;命令&rdquo;放在同一行（作为命令的注释），会被作为&ldquo;第六段&rdquo;，被cron(daemon)执行。</p>
<p>同样的，也不能放在设置环境变量的同一行。</p>
<p><strong>2. 在crontab文件中指定环境变量</strong></p>
<p>设置变量使用</p>
<p>name = value</p>
<p>这样的格式，&rdquo;=&rdquo;号左右的空格不是必须的。</p>
<p>几个变量默认已经被设置，比如：</p>
<p>SHELL=/bin/sh<br />
HOEM=/home/nnix<br />
LOGNAME=nnix</p>
<p>其中SHELL和HOME可以重新设定，LOGNAME则不可（大概跟确定crontab文件的位置有关）。</p>
<p>默认，crontab会把执行的输出发送给crontab的所有者，除非重新设定变量：</p>
<p>MAILTO=other_or_email</p>
<p>另外，当crontab发送输入时的邮件编码，可以通过设置变量&nbsp;CONTENT_TYPE 和 CONTENT_TRANSFER_ENCODING 来使用正确的编码来发送邮件。</p>
<p><strong>3. crontab 文件的分段</strong></p>
<p>依次分别是</p>
<ul>
    <li>分（0-59）</li>
    <li>时（0-23）</li>
    <li>日（1-31）</li>
    <li>月（1-23，或者英文名）</li>
    <li>周（0-7，或者英文名，0和7均表示周日）</li>
    <li>要执行的内容 &nbsp;&nbsp;</li>
</ul>
<p><strong>4. 前五段：时间和日期</strong></p>
<p>1）表示任意：* 号表示 &ldquo;任意&rdquo;（first-last)。</p>
<p>2）指定数字，表示指定的时间。</p>
<p>3）指定段，表示&ldquo;开始-结束&rdquo;内包含的数：比如3-6,表示3，4，5，6</p>
<p>4）指定列表：比如 &ldquo;1,2,3,4&Prime;,&rdquo;0-4,8-12&Prime;</p>
<p>5）指定&ldquo;步长&rdquo;：8-14/2 表示8，10，12，14</p>
<p><strong>5. 模糊的第六段：</strong></p>
<p>1）除去前五段，从第六段开始到换行符或者&ldquo;%&rdquo;为止，为要执行的命令。</p>
<p>2）默认第六段将被/bin/sh执行，除非在crontab文件中指定了非/bin/sh的SHELL变量。</p>
<p>3）第六段中的&rdquo;%&rdquo;号，除非前面加&rdquo;\&rdquo;号转交，否则，&ldquo;%&rdquo;号将结束命令行、换行的意义，并且其后的内容会被做为标准输入发送给前面的命令。</p>
<p><strong>6. 冲突的逻辑</strong></p>
<p>日期可以用月限定，也可以用&ldquo;星期&rdquo;指定，如果两个段有冲突（比如这两段不同时为&ldquo;*&rdquo;），那么，第六段的命令将在匹配任何一个的情况下运行，比如</p>
<p>&ldquo;30 4 1,15 * 5&Prime;，将在每月的1号和15号 加 每个周五，上午4：30运行。</p>
<p><strong>7. crontab文件中的神密符号&ldquo;%&rdquo;</strong></p>
<p>可能会遇到的一个问题是，在第六段中需要使用date生成日志文件名，比如：</p>
<p>0 &nbsp; 4 &nbsp; * &nbsp; * &nbsp; * &nbsp; /opt/cron/mysql_dump.sh &nbsp; &nbsp;&gt; /srv/logs/`date +%y-%m-%d`.dump.log</p>
<p>这时会发现crontab怎么也不运行这个mysql_dump.sh，也看不到有日志生成。这是因为在crontab文件中，&rdquo;%&rdquo;是有特殊含义的。假如不需要&ldquo;%&rdquo;的特殊作用，需要使用转义符转义。上面应该写成：</p>
<p>0 &nbsp; 4 &nbsp; * &nbsp; * &nbsp; * &nbsp; /opt/cron/mysql_dump.sh &nbsp; &nbsp;&gt; /srv/logs/`date +\%y-\%m-\%d`.dump.log</p>
<p>&ldquo;%&rdquo;在crontab文件中，有&ldquo;结束命令行&rdquo;、&ldquo;换行&rdquo;、&ldquo;重定向&rdquo;的作用，比如：</p>
<p>0 &nbsp;22 &nbsp;* * 1-5 &nbsp;mail -s &ldquo;It&rsquo;s 10:00 pm&rdquo; joe%Joe,%%Where are your kids?%</p>
<p>将会在周一至周五的22:00发送一分内容为：</p>
<p>Joe,&lt;换行&gt;<br />
&lt;换行&gt;<br />
Where are your kids?&lt;换行&gt;</p>
<p><strong>8. 不能理解的特殊用法</strong></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; @reboot &nbsp; &nbsp;: &nbsp; &nbsp;Run once, at startup.</p>
<p>为了达到在开机后运行，且只运行一次的目的，除了这个，恐怕无法通过前五段的设置来实现吧？</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=335" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=335</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-09-15 12:01</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=334</guid>
			<title>PHP-FPM高负载技巧 (PHP-FPM on highload tips)</title>
			<author>admin</author>
			<description><![CDATA[<p>导致nginx 502 bad gateway的PHP-CGI(FASTCGI)</p>
<p style="text-align: left;">NGINX频爆502 BAD GATEWAY的错误，看了网上的教程，仍没有彻底解决。<br />
目前我总结的解决502 BAD GATEWAY的方式有：<br />
<strong>1.视服务器的性能，在php-fmp.conf里增加max_children的值，我目前用的15.<br />
2.用reload参数定时重载php-fpm。这个主要原因是php脚本执行时间过长造成的，重载php-fpm能杜绝这个问题。如何彻底解决php-cgi脚本占用大量内存从而导致502错误的产生还值得进一步探讨，目前该做法不失为一种好办法。<br />
具体的做法是，用crontab让php-fpm平滑重启，从而不影响PHP脚本的运行。<br />
*/10 * * * * /usr/local/php/sbin/php-fpm reload</strong></p>
<p style="text-align: left;"><span style="color: gray;">When you running a highload website with <span>PHP-FPM</span> via FastCGI, the following tips may be useful to you : )</span><br />
<strong><span>如果您高负载网站使用<span>PHP-FPM</span>管理FastCGI，这些技巧也许对您有用：)</span></strong></p>
<p><span>1. Compile PHP&rsquo;s modules as less as possible, the simple the best (fast);</span><br />
<strong><span>1.尽量少安装PHP模块，最简单是最好（快）的</span></strong></p>
<p><span>2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);</span><br />
<strong><span>2.把您的PHP FastCGI子进程数调到100或以上，在4G内存的服务器上200就可以</span><br />
<span>注：我的1g测试机，开64个是最好的，建议使用压力测试获取最佳值</span></strong></p>
<p><span>3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;</span><br />
<strong><span>3.使用socket连接FastCGI，linux操作系统可以放在 /dev/shm中</span><br />
<span>注：在<span>php-fpm</span>.cnf里设置&lt;value name=&rdquo;listen_address&rdquo;&gt;/tmp/nginx.socket&lt;/value&gt;就可以通过socket连接FastCGI了，/dev/shm是内存文件系统，放在内存中肯定会快了</span></strong></p>
<p><span>4. Increase Linux &ldquo;max open files&rdquo;, using the following command (must be root):<br />
# echo &lsquo;ulimit -HSn 65536&prime; &gt;&gt; /etc/profile<br />
# echo &lsquo;ulimit -HSn 65536 &gt;&gt; /etc/rc.local<br />
# source /etc/profile </span><br />
<strong><font color="#000000"><span>4.调高linux内核打开文件数量，可以使用这些命令(必须是root帐号)<br />
echo &lsquo;ulimit -HSn 65536&prime; &gt;&gt; /etc/profile<br />
echo &lsquo;ulimit -HSn 65536&prime; &gt;&gt; /etc/rc.local<br />
source /etc/profile </span><br />
<span>注：我是修改/etc/rc.local，加入ulimit -SHn 51200的</span></font></strong></p>
<p><span>5. Increase <span>PHP-FPM</span> open file description rlimit:<br />
# vi /path/to/<span>php-fpm</span>.conf<br />
Find &ldquo;&lt;value name=&rdquo;rlimit_files&rdquo;&gt;1024&lt;/value&gt;&rdquo;<br />
Change 1024 to 4096 or higher number.<br />
Restart <span>PHP-FPM</span>.</span><br />
<strong><span>5. 增加 <span>PHP-FPM</span> 打开文件描述符的限制:<br />
# vi /path/to/<span>php-fpm</span>.conf<br />
找到&ldquo;&lt;value name=&rdquo;rlimit_files&rdquo;&gt;1024&lt;/value&gt;&rdquo;<br />
把1024 更改为 4096 或者更高.<br />
重启 <span>PHP-FPM</span>.</span></strong></p>
<p><span style="color: gray;">6. Using PHP code accelerator, e.g eAccelerator, XCache. And set &ldquo;cache_dir&rdquo; to /dev/shm on Linux.</span><br />
<strong><span>6.使用php代码加速器，例如 eAccelerator, XCache.在linux平台上可以把`cache_dir`指向 /dev/shm</span></strong></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=334" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=334</link>
			<category domain="http://www.ax.net.cn/?cid=10">系统</category>
			<pubDate>2009-09-15 11:56</pubDate>
		</item>
	</channel>
</rss>
