<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>自言自语之部落 &#187; 编程摘录</title>
	<atom:link href="http://blog.yoooung.com/categorize/program/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.yoooung.com</link>
	<description>Imagine your life, keep going forward！</description>
	<lastBuildDate>Fri, 30 Dec 2011 03:51:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>MySQL的1045错误解决办法</title>
		<link>http://blog.yoooung.com/archives/mysql-error-1045/</link>
		<comments>http://blog.yoooung.com/archives/mysql-error-1045/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 03:22:34 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[ERROR]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.yoooung.com/?p=505</guid>
		<description><![CDATA[机子上装了MySQL已经有一段时间了，今天再去连接发现报错1045，很奇怪，密码应该没问题啊，于是网上搜索了下解答，记录下。 系统：Windows 7 版本：MySQL5.0 问题：1045 access denied for user &#8216;root&#8217;@'localhost&#8217; using password yes 解决方法： 1.停止MySQL服务 2.运行cmd 3.进入到MySQL安装bin目录 cd C:\Program Files\MySQL\MySQL Server 5.0\bin 4.运行 mysqld &#8211; -defaults-file=”C:\Program Files\MySQL\MySQL Server 5.0\my.ini” &#8211; -console &#8211;]]></description>
			<content:encoded><![CDATA[<p>机子上装了MySQL已经有一段时间了，今天再去连接发现报错1045，很奇怪，密码应该没问题啊，于是网上搜索了下解答，记录下。</p>
<p><span id="more-505"></span></p>
<p>系统：Windows 7</p>
<p>版本：MySQL5.0</p>
<p>问题：1045 access denied for user &#8216;root&#8217;@'localhost&#8217; using password yes</p>
<p>解决方法：</p>
<p>1.停止MySQL服务</p>
<p>2.运行cmd</p>
<p>3.进入到MySQL安装bin目录 <strong>cd C:\Program Files\MySQL\MySQL Server 5.0\bin</strong></p>
<p>4.运行 <strong>mysqld &#8211; -defaults-file=”C:\Program Files\MySQL\MySQL Server 5.0\my.ini” &#8211; -console &#8211; -skip-grant-tables</strong></p>
<p>提示以下信息说明MySQL已经运行成功：</p>
<p>111230 10:53:40 InnoDB: Started; log sequence number 0 558063<br />
111230 10:53:40 [Note] mysqld: ready for connections.<br />
Version: &#8217;5.0.27-community&#8217; socket: ” port: 3306 MySQL Community Edition (GP<br />
L)</p>
<p>5.再打开一个cmd窗口，进入到MySQL安装bin目录 <strong>cd C:\Program Files\MySQL\MySQL Server 5.0\bin</strong></p>
<p>6.输入<strong>mysql -uroot mysql </strong>提示以下信息</p>
<p>Welcome to the MySQL monitor. Commands end with ; or \g.<br />
Your MySQL connection id is 2<br />
Server version: 5.1.33-community-log MySQL Community Server (GPL)</p>
<p>Type &#8216;help;&#8217; or &#8216;\h&#8217; for help. Type &#8216;\c&#8217; to clear the buffer.</p>
<p>mysql&gt;</p>
<p>7.输入 <strong>update user set password=password(&#8216;root&#8217;) where user=&#8217;root&#8217;;</strong> 回车</p>
<p>提示以下信息则成功</p>
<p>Query OK, 1 row affected (0.01 sec)<br />
Rows matched: 2 Changed: 1 Warnings: 0</p>
<p>8.输入<strong>flush privileges;</strong> 回车</p>
<p>提示以下信息则成功</p>
<p>Query OK, 0 rows affected (0.01 sec)</p>
<p>9.<strong>quit</strong></p>
<p>10.输入<strong>mysql -uroot -proot</strong></p>
<p>提示以下信息则成功</p>
<p>Welcome to the MySQL monitor. Commands end with ; or \g.<br />
Your MySQL connection id is 3 to server version: 5.0.27-communit</p>
<p>Type &#8216;help;&#8217; or &#8216;\h&#8217; for help. Type &#8216;\c&#8217; to clear the buffer.</p>
<p>mysql&gt;</p>
<p>到此1045异常解决完毕。Linux也可以参照以上方法解决。</p>
<p>本文参考：<a href="http://topic.csdn.net/u/20090515/21/2b3c9a12-d8a5-4bb1-9895-6069cef5aef8.html">http://topic.csdn.net/u/20090515/21/2b3c9a12-d8a5-4bb1-9895-6069cef5aef8.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/mysql-error-1045/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>linux查看cpu是64位还是32位的</title>
		<link>http://blog.yoooung.com/archives/linux-cpuinfo/</link>
		<comments>http://blog.yoooung.com/archives/linux-cpuinfo/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 09:15:41 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.yoooung.com/?p=499</guid>
		<description><![CDATA[/proc/cpuinfo &#8211; CPU 的信息 (型号, 家族, 缓存大小等) more /proc/cpuinfo 查看cpu是64位还是32位的 /proc &#8212; 一个虚拟文件系统 /proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互，获取有关进程的有用信息，在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同，/proc 存在于内存之中而不是硬盘上。如果你察看文件 /proc/mounts (和 mount 命令一样列出所有已经加载的文件系统)，你会看到其中 一行是这样的： grep proc /proc/mounts /proc /proc proc rw 0 0 /proc 由内核控制，没有承载 /proc 的设备。因为 /proc 主要存放由内核控制 的状态信息，所以大部分这些信息的逻辑位置位于内核控制的内存。对 /proc 进行 一次 &#8217;ls -l&#8217; 可以看到大部分文件都是 0 字节大的；不过察看这些文件的时候，确 实可以看到一些信息。这怎么可能？这是因为 /proc 文件系统和其他常规的文件系 统一样把自己注册到虚拟文件系统层 (VFS) 了。然而，直到当 VFS 调用它，请求 文件、目录的 i-node 的时候，/proc 文件系统才根据内核中的信息建立相应的文件]]></description>
			<content:encoded><![CDATA[<p align="left">
<p align="left">/proc/cpuinfo &#8211; CPU 的信息 (型号, 家族, 缓存大小等)</p>
<p align="left">more /proc/cpuinfo 查看cpu是64位还是32位的</p>
<p align="left"><strong><span style="font-family: 宋体; font-size: large;">/proc &#8212; </span></strong><strong><span style="font-family: 宋体; font-size: large;">一个虚拟文件系统</span></strong></p>
<p align="left">
<p align="left"><span style="font-family: 宋体; font-size: small;">/proc </span><span style="font-family: 宋体; font-size: small;">文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互，获取有关进程的有用信息，在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同，/proc 存在于内存之中而不是硬盘上。如果你察看文件 /proc/mounts (和 mount 命令一样列出所有已经加载的文件系统)，你会看到其中 一行是这样的：</span></p>
<p align="left">
<p align="left"><span style="font-family: 宋体; font-size: small;">grep proc /proc/mounts</span></p>
<p align="left">
<p align="left"><span style="font-family: 宋体; font-size: small;">/proc /proc proc rw 0 0</span></p>
<p align="left">
<p align="left"><span style="font-family: 宋体; font-size: small;">/proc </span><span style="font-family: 宋体; font-size: small;">由内核控制，没有承载 /proc 的设备。因为 /proc 主要存放由内核控制 的状态信息，所以大部分这些信息的逻辑位置位于内核控制的内存。对 /proc 进行 一次 &#8217;ls -l&#8217; 可以看到大部分文件都是 0 字节大的；不过察看这些文件的时候，确 实可以看到一些信息。这怎么可能？这是因为 /proc 文件系统和其他常规的文件系 统一样把自己注册到虚拟文件系统层 (VFS) 了。然而，直到当 VFS 调用它，请求 文件、目录的 i-node 的时候，/proc 文件系统才根据内核中的信息建立相应的文件 和目录。</span></p>
<p align="left"><span style="font-family: 宋体; font-size: small;">proc </span><span style="font-family: 宋体; font-size: small;">文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要 的文件：</span></p>
<ul>
<li><span style="font-family: 宋体; font-size: small;">/proc/cpuinfo &#8211; CPU </span><span style="font-family: 宋体; font-size: small;">的信息 (型号, 家族, 缓存大小等)</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/meminfo - </span><span style="font-family: 宋体; font-size: small;">物理内存、交换空间等的信息</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/mounts - </span><span style="font-family: 宋体; font-size: small;">已加载的文件系统的列表</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/devices - </span><span style="font-family: 宋体; font-size: small;">可用设备的列表</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/filesystems - </span><span style="font-family: 宋体; font-size: small;">被支持的文件系统</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/modules - </span><span style="font-family: 宋体; font-size: small;">已加载的模块</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/version - </span><span style="font-family: 宋体; font-size: small;">内核版本</span></li>
<li><span style="font-family: 宋体; font-size: small;">/proc/cmdline - </span><span style="font-family: 宋体; font-size: small;">系统启动时输入的内核命令行参数</span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/linux-cpuinfo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle必须熟悉掌握的DBA视图</title>
		<link>http://blog.yoooung.com/archives/oracle%e5%bf%85%e9%a1%bb%e7%86%9f%e6%82%89%e6%8e%8c%e6%8f%a1%e7%9a%84dba%e8%a7%86%e5%9b%be/</link>
		<comments>http://blog.yoooung.com/archives/oracle%e5%bf%85%e9%a1%bb%e7%86%9f%e6%82%89%e6%8e%8c%e6%8f%a1%e7%9a%84dba%e8%a7%86%e5%9b%be/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 02:06:14 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.yoooung.com/?p=490</guid>
		<description><![CDATA[今天查看了一些oracle的dba相关视图，特别转载至此备查，不过这些视图里的相关字段代表什么意思还不是很清楚，oracle官方手册应该可以查的吧。 oracle维护了一种“虚拟”表的集合记录当前数据库的活动。这些表称为动态性能表。数据库管理员可以基于这些表执行查询和创建视图等操作。不能被数据库管理员修改和删除。 最有用的DBA视图 DBA_DATA_FILES   关于数据库的信息 DBA_DB_LINKS   数据库中的所有数据库链路 DBA_EXTENTS   数据库中包括的所有分区 DBA_FREE_SPACE   所有表空间中自由分区 DBA_INDEXES   数据库中所有索引的描述 DBA_IND_COLUMNS   在所有表及聚集上压缩索引的列 DBA_OBJECTS   数据库中所有的对象 DBA_ROLLBACK_SEGS 回滚段的描述 DBA_SEGMENTS   为所有数据库段分配的存储空间 DBA_SEQUENCES   数据库中所有序列数的描述 DBA_SYNONYMS   数据库中所有同义词 DBA_TABLES   数据库中所有表的描述 DBA_TABLESPACES   数据库中所有表空间的描述 DBA_TAB_COLUMNS  ]]></description>
			<content:encoded><![CDATA[<p>今天查看了一些oracle的dba相关视图，特别转载至此备查，不过这些视图里的相关字段代表什么意思还不是很清楚，oracle官方手册应该可以查的吧。</p>
<p>oracle维护了一种“虚拟”表的集合记录当前数据库的活动。这些表称为动态性能表。数据库管理员可以基于这些表执行查询和创建视图等操作。不能被数据库管理员修改和删除。</p>
<p>最有用的DBA视图<br />
DBA_DATA_FILES   关于数据库的信息<br />
DBA_DB_LINKS   数据库中的所有数据库链路<br />
DBA_EXTENTS   数据库中包括的所有分区<br />
DBA_FREE_SPACE   所有表空间中自由分区<br />
DBA_INDEXES   数据库中所有索引的描述<br />
DBA_IND_COLUMNS   在所有表及聚集上压缩索引的列<br />
DBA_OBJECTS   数据库中所有的对象<br />
DBA_ROLLBACK_SEGS 回滚段的描述<br />
DBA_SEGMENTS   为所有数据库段分配的存储空间<br />
DBA_SEQUENCES   数据库中所有序列数的描述<br />
DBA_SYNONYMS   数据库中所有同义词<br />
DBA_TABLES   数据库中所有表的描述<br />
DBA_TABLESPACES   数据库中所有表空间的描述<br />
DBA_TAB_COLUMNS   所有表描述、视图以及聚集的列<br />
DBA_TAB_GRANTS   数据库中的对象所授予的权限<br />
DBA_TAB_PRIVS   数据库中的对象所授予的权限<br />
DBA_TS_QUOTAS   所有用户表空间限额<br />
DBA_USERS   关于数据库的所有用户信息<br />
DBA_VIEWS   数据库中所有视图的文本</p>
<p>最有用的V$视图<br />
V$datafile   数据库使用的数据文件信息，如控制文件信息<br />
V$librarycache   共享池中SQL语句的管理信息<br />
V$lock    通过访问数据库会话设置对象锁的有关信息。当某个用户修改数据库中的数据时，使用加锁以防止另一个用户做同样的修改。<br />
V$log    从控制文件中提取有关重做日志组的信息<br />
V$logfile   有关实例重做日志组文件名及其位置的信息<br />
V$parameter   初始化参数文件中所有项的值<br />
V$process   当前进程的信息<br />
V$rollname   回滚段信息<br />
V$rollstat   联机回滚段统计信息<br />
V$rowcache   内存中数据字典活动/性能信息<br />
V$session   有关活动会话的信息<br />
V$sesstat   在V$session中报告当前会话的统计信息<br />
V$sqlarea   共享池中使用当前光标的统计信息，光标是一块内存区域，由oracle处理SQL语句时打开<br />
V$statname   在V$sesstat中报告的各个统计的含义<br />
V$sysstat   基于当前操作会话进行的系统统计<br />
V$waitstat   出现一个以上会话访问数据库的数据时的详细情况。当有一个以上的会话同时访问相同的信息时，可能出现等待的情况。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/oracle%e5%bf%85%e9%a1%bb%e7%86%9f%e6%82%89%e6%8e%8c%e6%8f%a1%e7%9a%84dba%e8%a7%86%e5%9b%be/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>VMware Workstation错误记录</title>
		<link>http://blog.yoooung.com/archives/vmware-workstation-unrecoverable-error-vmx-not_implemented/</link>
		<comments>http://blog.yoooung.com/archives/vmware-workstation-unrecoverable-error-vmx-not_implemented/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 03:07:27 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Vmware]]></category>

		<guid isPermaLink="false">http://blog.yoooung.com/?p=471</guid>
		<description><![CDATA[今天准备跑VMware看下前几天写的存储过程，竟然跑不起来，提示如标题的错误，于是到google了下，发现是VM没有用adminstrator启动的缘故，记录下。 VM错误记录：VMware Workstation Unrecoverable Error: (vmx) NOT_IMPLEMENTED 参考：http://www.tipsandscripts.net/archives/51]]></description>
			<content:encoded><![CDATA[<p>今天准备跑VMware看下前几天写的存储过程，竟然跑不起来，提示如标题的错误，于是到google了下，发现是VM没有用adminstrator启动的缘故，记录下。</p>
<p>VM错误记录：VMware Workstation Unrecoverable Error: (vmx) NOT_IMPLEMENTED</p>
<p><span id="more-471"></span></p>
<p><img src="file:///C:/Users/Kola/AppData/Local/Temp/moz-screenshot.png" alt="" /><img class="alignnone" title="vmware-unrecoverable-error" src="http://www.tipsandscripts.net/wp-content/uploads/2009/06/vmware-unrecoverable-error.png" alt="" width="505" height="213" /></p>
<p>参考：http://www.tipsandscripts.net/archives/51</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/vmware-workstation-unrecoverable-error-vmx-not_implemented/feed/</wfw:commentRss>
		<slash:comments>149</slash:comments>
		</item>
		<item>
		<title>我常去的一些网站</title>
		<link>http://blog.yoooung.com/archives/javaer-go-website/</link>
		<comments>http://blog.yoooung.com/archives/javaer-go-website/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 10:38:22 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://blog.yoooung.com/?p=452</guid>
		<description><![CDATA[作为一个java开发人员，不仅仅是java的，其他相关技术人员都需要经常学习新技能，了解业界发展动态的，为了更方便自己登录，在这里列出一些我常去的网站，不保证所有网站都是关注java的，但是都是我感兴趣的。如果您有相关网站推荐的，请留言告知。 Javaeye  http://www.javaeye.com  kola Itpub  http://www.itpub.net  kola110 Csdn  http://www.csdn.net 近日想采购一个数码相机，不知道尼康数码相机的质量怎么样呢？有了解的同学给我点参考意见哦。。]]></description>
			<content:encoded><![CDATA[<p>作为一个java开发人员，不仅仅是java的，其他相关技术人员都需要经常学习新技能，了解业界发展动态的，为了更方便自己登录，在这里列出一些我常去的网站，不保证所有网站都是关注java的，但是都是我感兴趣的。如果您有相关网站推荐的，请留言告知。</p>
<p>Javaeye  http://www.javaeye.com  kola</p>
<p>Itpub  http://www.itpub.net  kola110</p>
<p>Csdn  http://www.csdn.net</p>
<p>近日想采购一个数码相机，不知道<a href="http://www.holaba.com.cn/nikon/digital-cameras" target="_blank">尼康数码相机</a>的质量怎么样呢？有了解的同学给我点参考意见哦。。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/javaer-go-website/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Tomcat启动时出现“严重: Error starting static Resources”问题的解决</title>
		<link>http://blog.yoooung.com/archives/tomcat-start-error/</link>
		<comments>http://blog.yoooung.com/archives/tomcat-start-error/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 07:21:13 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.1kps.com/?p=415</guid>
		<description><![CDATA[解决办法: 第一步，停掉Tomcat服务 第二步，把/conf/Catalina/localhost下的对应工程的xml删除 第三步，重启Tomcat 参考:http://www.blogjava.net/xingcyx/archive/2008/07/25/217349.html]]></description>
			<content:encoded><![CDATA[<p>解决办法:</p>
<p>第一步，停掉Tomcat服务</p>
<p>第二步，把/conf/Catalina/localhost下的对应工程的xml删除</p>
<p>第三步，重启Tomcat</p>
<p>参考:<a href="http://www.blogjava.net/xingcyx/archive/2008/07/25/217349.html">http://www.blogjava.net/xingcyx/archive/2008/07/25/217349.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/tomcat-start-error/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Eclipse 编辑,调试等快捷键</title>
		<link>http://blog.yoooung.com/archives/eclipse-quick/</link>
		<comments>http://blog.yoooung.com/archives/eclipse-quick/#comments</comments>
		<pubDate>Tue, 05 May 2009 05:37:59 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.1kps.com/?p=406</guid>
		<description><![CDATA[编辑相关快捷键Eclipse的编辑功能非常强大，掌握了Eclipse快捷键功能，能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 1. 【ALT+/】 此快捷键为用户编辑的好帮手，能为用户提供内容的辅助，不要为记不全方法和属性名称犯愁，当记不全类、方法和属性的名字时，多体验一下【ALT+/】快捷键带来的好处吧。   2. 【Ctrl+O】 显示类中方法和属性的大纲，能快速定位类的方法和属性，在查找Bug时非常有用。 3. 【Ctrl+/】 快速添加注释，能为光标所在行或所选定行快速添加注释或取消注释，在调试的时候可能总会需要注释一些东西或取消注释，现在好了，不需要每行进行重复的注释。 4. 【Ctrl+D】 删除当前行，这也是笔者的最爱之一，不用为删除一行而按那么多次的删除键。 5. 【Ctrl+M】 窗口最大化和还原，用户在窗口中进行操作时，总会觉得当前窗口小（尤其在编写代码时），现在好了，试试【Ctrl+M】快捷键。 查看和定位快捷键 在程序中，迅速定位代码的位置，快速找到Bug的所在，是非常不容易的事，Eclipse提供了强大的查找功能，可以利用如下的快捷键帮助完成查找定位的工作。 1. 【Ctrl+K】、【Ctrl++Shift+K】 快速向下和向上查找选定的内容，从此不再需要用鼠标单击查找对话框了。 2. 【Ctrl+Shift+T】 查找工作空间（Workspace）构建路径中的可找到Java类文件，不要为找不到类而痛苦，而且可以使用“*”、“？”等通配符。 3. 【Ctrl+Shift+R】 和【Ctrl+Shift+T】对应，查找工作空间（Workspace）中的所有文件（包括Java文件），也可以使用通配符。 4. 【Ctrl+Shift+G】]]></description>
			<content:encoded><![CDATA[<p><strong>编辑相关快捷键</strong>Eclipse的编辑功能非常强大，掌握了Eclipse快捷键功能，能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。<br />
1. 【ALT+/】<br />
此快捷键为用户编辑的好帮手，能为用户提供内容的辅助，不要为记不全方法和属性名称犯愁，当记不全类、方法和属性的名字时，多体验一下【ALT+/】快捷键带来的好处吧。</p>
<p> </p>
<p>2. 【Ctrl+O】<br />
显示类中方法和属性的大纲，能快速定位类的方法和属性，在查找Bug时非常有用。</p>
<p>3. 【Ctrl+/】<br />
快速添加注释，能为光标所在行或所选定行快速添加注释或取消注释，在调试的时候可能总会需要注释一些东西或取消注释，现在好了，不需要每行进行重复的注释。</p>
<p>4. 【Ctrl+D】<br />
删除当前行，这也是笔者的最爱之一，不用为删除一行而按那么多次的删除键。</p>
<p>5. 【Ctrl+M】<br />
窗口最大化和还原，用户在窗口中进行操作时，总会觉得当前窗口小（尤其在编写代码时），现在好了，试试【Ctrl+M】快捷键。</p>
<p><span id="more-406"></span></p>
<p><strong>查看和定位快捷键</strong></p>
<p>在程序中，迅速定位代码的位置，快速找到Bug的所在，是非常不容易的事，Eclipse提供了强大的查找功能，可以利用如下的快捷键帮助完成查找定位的工作。</p>
<p>1. 【Ctrl+K】、【Ctrl++Shift+K】<br />
快速向下和向上查找选定的内容，从此不再需要用鼠标单击查找对话框了。</p>
<p>2. 【Ctrl+Shift+T】<br />
查找工作空间（Workspace）构建路径中的可找到Java类文件，不要为找不到类而痛苦，而且可以使用“*”、“？”等通配符。</p>
<p>3. 【Ctrl+Shift+R】<br />
和【Ctrl+Shift+T】对应，查找工作空间（Workspace）中的所有文件（包括Java文件），也可以使用通配符。</p>
<p>4. 【Ctrl+Shift+G】<br />
查找类、方法和属性的引用。这是一个非常实用的快捷键，例如要修改引用某个方法的代码，可以通过【Ctrl+Shift+G】快捷键迅速定位所有引用此方法的位置。</p>
<p>5. 【Ctrl+Shift+O】<br />
快速生成import，当从网上拷贝一段程序后，不知道如何import进所调用的类，试试【Ctrl+Shift+O】快捷键，一定会有惊喜。</p>
<p>6. 【Ctrl+Shift+F】<br />
格式化代码，书写格式规范的代码是每一个程序员的必修之课，当看见某段代码极不顺眼时，选定后按【Ctrl+Shift+F】快捷键可以格式化这段代码，如果不选定代码则默认格式化当前文件（Java文件）。</p>
<p>7. 【ALT+Shift+W】<br />
查找当前文件所在项目中的路径，可以快速定位浏览器视图的位置，如果想查找某个文件所在的包时，此快捷键非常有用（特别在比较大的项目中）。</p>
<p>8. 【Ctrl+L】<br />
定位到当前编辑器的某一行，对非Java文件也有效。</p>
<p>9. 【Alt+←】、【Alt+→】<br />
后退历史记录和前进历史记录，在跟踪代码时非常有用，用户可能查找了几个有关联的地方，但可能记不清楚了，可以通过这两个快捷键定位查找的顺序。</p>
<p>10. 【F3】<br />
快速定位光标位置的某个类、方法和属性。</p>
<p>11. 【F4】<br />
显示类的继承关系，并打开类继承视图。</p>
<p><strong>调试快捷键</strong></p>
<p>Eclipse中有如下一些和运行调试相关的快捷键。</p>
<p>1. 【Ctrl+Shift+B】：在当前行设置断点或取消设置的断点。<br />
2. 【F11】：调试最后一次执行的程序。<br />
3. 【Ctrl+F11】：运行最后一次执行的程序。<br />
4. 【F5】：跟踪到方法中，当程序执行到某方法时，可以按【F5】键跟踪到方法中。<br />
5. 【F6】：单步执行程序。<br />
6. 【F7】：执行完方法，返回到调用此方法的后一条语句。<br />
7. 【F8】：继续执行，到下一个断点或程序结束。</p>
<p><strong>常用编辑器快捷键</strong></p>
<p>通常文本编辑器都提供了一些和编辑相关的快捷键，在Eclipse中也可以通过这些快捷键进行文本编辑。<br />
1. 【Ctrl+C】：复制。<br />
2. 【Ctrl+X】：剪切。<br />
3. 【Ctrl+V】：粘贴。<br />
4. 【Ctrl+S】：保存文件。<br />
5. 【Ctrl+Z】：撤销。<br />
6. 【Ctrl+Y】：重复。<br />
7. 【Ctrl+F】：查找。</p>
<p><strong>其他快捷键</strong></p>
<p>Eclipse中还有很多快捷键，无法一一列举，用户可以通过帮助文档找到它们的使用方式，另外还有几个常用的快捷键如下。<br />
1. 【Ctrl+F6】：切换到下一个编辑器。<br />
2. 【Ctrl+Shift+F6】：切换到上一个编辑器。<br />
3. 【Ctrl+F7】：切换到下一个视图。<br />
4. 【Ctrl+Shift+F7】：切换到上一个视图。<br />
5. 【Ctrl+F8】：切换到下一个透视图。<br />
6. 【Ctrl+Shift+F8】：切换到上一个透视图。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/eclipse-quick/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linux下启动Oracle服务和监听程序</title>
		<link>http://blog.yoooung.com/archives/linux-oracle-start/</link>
		<comments>http://blog.yoooung.com/archives/linux-oracle-start/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 01:59:28 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.1kps.com/?p=404</guid>
		<description><![CDATA[[oracle]linux平台启动关闭oracle数据库 oracle数据库是重量级的，其管理非常复杂，将其在linux平台上的启动和关闭步骤整理一下。 安装完毕oracle以后，需要创建oracle系统用户，并在/home/oracle下面的.bash_profile添加几个环境变量：ORACLE_SID,ORACLE_BASE,ORACLE_HOME。比如： export ORACLE_SID=test  export ORACLE_BASE=oracle_install_dir export ORACLE_HOME=xxx 启动步骤：注意$代表shell命令提示符，这里的oracle是9.0以上版本。 $ su &#8211; oracle $ sqlplus / nolog sql&#62; conn / as sysdba sql&#62; startup (一般不需要加参数，只要设置好环境变量） sql&#62; quit (退出sql模式) $]]></description>
			<content:encoded><![CDATA[<div class="postTitle"><script src="http://wz.csdn.net/javascripts/vote.js"></script><a href="http://blog.csdn.net/blueilove2003/archive/2008/01/28/2070075.aspx"><span style="text-decoration: underline;"><span style="color: #800080;">[oracle]linux平台启动关闭oracle数据库</span></span></a> <script src="http://blog.csdn.net/count.aspx?ID=2070075&amp;Type=Rank"></script></div>
<div class="postText">
<p id="fp">oracle数据库是重量级的，其管理非常复杂，将其在linux平台上的启动和关闭步骤整理一下。</p>
<p>安装完毕oracle以后，需要创建oracle系统用户，并在/home/oracle下面的.bash_profile添加几个环境变量：ORACLE_SID,ORACLE_BASE,ORACLE_HOME。比如：</p>
<p>export ORACLE_SID=test  export ORACLE_BASE=oracle_install_dir export ORACLE_HOME=xxx</p>
<p>启动步骤：注意$代表shell命令提示符，这里的oracle是9.0以上版本。</p>
<ol>
<li>$ su &#8211; oracle</li>
<li>$ sqlplus / nolog</li>
<li>sql&gt; conn / as sysdba</li>
<li>sql&gt; startup (一般不需要加参数，只要设置好环境变量）</li>
<li>sql&gt; quit (退出sql模式)</li>
<li>$ lsnrctl start (启动监听器）关闭oracle
<ol>
<li>$ lsnrctl stop(关闭监听器，在这之前，应该先关闭应用程序）</li>
<li>$ sqlplus  /nolog</li>
<li>sql&gt;shutdown 其参数 ：shutdown有四个参数，四个参数的含义如下：<br />
Normal 需要等待所有的用户断开连接<br />
Immediate 等待用户完成当前的语句<br />
Transactional 等待用户完成当前的事务<br />
Abort 不做任何等待，直接关闭数据库<br />
normal需要在所有连接用户断开后才执行关闭数据库任务，所以有的时候看起来好象命令没有运行一样！在执行这个命令后不允许新的连接<br />
immediate在用户执行完正在执行的语句后就断开用户连接，并不允许新用户连接。<br />
transactional 在拥护执行完当前事物后断开连接，并不允许新的用户连接数据库。<br />
abort 执行强行断开连接并直接关闭数据库。<br />
前三种方式不回丢失用户数据。第四种在不的已的情况下，不建议采用！<span id="more-404"></span></li>
</ol>
<p>经常遇到的问题：</p>
<p>1）权限问题，解决方法，切换到oracle用户；</p>
<p>2）没有关闭监听器 ，解决方法：关闭监听器</p>
<p>3）有oracle实例没有关闭，解决办法：关闭oracle实例</p>
<p>4）环境变量设置不全，解决办法：修改环境变量</li>
</ol>
</div>
<p><a href="http://blog.csdn.net/3yugui/archive/2002/05/20/13483.aspx"><span style="color: #000080;">Oracle数据库的启动和关闭方式小结</span></a></p>
<p>Oracle数据库的启动和关闭方式</p>
<p><span style="color: #111111;">一、几种启动方式：</span></p>
<p><span style="color: #111111;">1、startup nomount<br />
非安装启动，这种方式启动下可执行：重建控制文件、重建数据库<br />
启动instance，即启动SGA和后台进程，这种启动只需要init.ora文件。<br />
2、startup mount dbname<br />
安装启动，这种方式启动下可执行：数据库日志归档、数据库恢复、重新命名一些数据库文件<br />
如：系统表空间或日志文件。<br />
执行“nomount”，然后打开控制文件<br />
3、startup open dbname<br />
先执行“nomount”，然后执行“mount”，再打开包括Redo log文件在内的所有数据库文件，<br />
这种方式下可访问数据库中的数据。<br />
4、startup，等于以下三个命令<br />
startup nomount<br />
alter database mount<br />
alter database open<br />
5、startup restrict<br />
约束方式启动<br />
这种方式能够启动数据库，但只允许具有一定特权的用户访问<br />
非特权用户访问时，会出现以下提示：<br />
ERROR：<br />
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用<br />
6、startup force<br />
强制启动方式<br />
当不能关闭数据库时，可以用startup force来完成数据库的关闭<br />
先关闭数据库，再执行正常启动数据库命令<br />
7、startup pfile=参数文件名<br />
带初始化参数文件的启动方式<br />
先读取参数文件，再按参数文件中的设置启动数据库<br />
例：startup pfile=E:\Oracle\admin\oradb\pfile\init.ora<br />
8、startup EXCLUSIVE </span></p>
<p><span style="color: #111111;">二、几种关闭方式：</span></p>
<table style="height: 144px;" border="0" cellspacing="0" cellpadding="0" width="520" align="center">
<tbody>
<tr>
<td valign="top"><span style="color: #090909;">1、shutdown normal<br />
正常方式关闭数据库。<br />
2、shutdown immediate<br />
立即方式关闭数据库。<br />
在SVRMGRL中执行shutdown immediate，数据库并不立即关闭，<br />
而是在Oracle执行某些清除工作后才关闭（终止会话、释放会话资源），<br />
当使用shutdown不能关闭数据库时，shutdown immediate可以完成数据库关闭的操作。<br />
3、shutdown abort<br />
直接关闭数据库，正在访问数据库的会话会被突然终止，<br />
如果数据库中有大量操作正在执行，这时执行shutdown abort后，重新启动数据库需要很长时间。</span></td>
</tr>
</tbody>
</table>
<p>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=13483</p>
<p><a href="http://blog.csdn.net/gaofeng2000/archive/2004/08/26/85205.aspx"><span style="color: #000000; font-size: x-small;">Oracle9i 的启动和关闭</span></a> <script src="http://blog.csdn.net/count.aspx?ID=85205&amp;Type=Rank"></script></p>
<div class="postText">
<p>一、启动</p>
<p>语法：startup [force] [pfile=文件名] [exclusive|shared] [mount 数据库名|normal 数据库名] [nomount]</p>
<p>1、正常启动：</p>
<p>sql&gt;conn sys/sys as sysdba;</p>
<p>sql&gt;startup</p>
<p>也可在启动时指定数据库名</p>
<p>sql&gt;startup ora9</p>
<p>2、安装和非安装启动</p>
<p>安装启动的选项是mount，表示例程只将数据库装入，而不打开数据库;非安装启动的选项是nomount，表示只建立数据库现场，并不装入数据库，当然也不能打开。</p>
<p>sql&gt;startup mount &#8211;安装启动</p>
<p>sql&gt;startup nomount&#8211;非安装启动</p>
<p>3、独占和共享启动</p>
<p>独占启动的选项是exclusive，表示只允许一个例程使用该数据库；共享启动的参数是shared，表示允许多个例程并行使用该数据库，即将数据库装入多个现场。</p>
<p>4、约束启动</p>
<p>约束启动的选项是restrict，它启动数据库时装入并打开它，但是此时的数据库只能为有特殊权限的数据库管理员使用，一般用户不能联入到该数据库。</p>
<p>sql&gt;startup restrict</p>
<p>一般说来，当用户有create session权限时，可以联入数据库，但对于restrict方式启动的数据库，则只有用户具有restricted session系统权限才允许联入。</p>
<p>若要在数据库运行过程中改变这一方式，可用alter system命令。</p>
<p>sql&gt;alter system disable restricted session;</p>
<p>也可以先将数据库关闭再重新以非restrict方式启动数据库。</p>
<p>5、强制启动</p>
<p>若在正常启动数据库时遇到一些麻烦，或在上次关闭数据库时不能正常关闭，则可以采取强制启动，其选项是force。</p>
<p>联入sys用户</p>
<p>sql&gt;startup force</p>
<p>6、带初始化参数文件的启动</p>
<p>初始化参数文件在数据库启动时由系统读取，设置一些全局参数，它并不影响数据库的运行方式。</p>
<p>sql&gt;startup pfile=d:\oracle\admin\site\pfile\init.ora</p>
<p>技巧：用alter database可以进行一些启动模式转换，但是转换的类型十分有限，比如从mount模式下将数据库打开，则可用以下命令：</p>
<p>sql&gt;alter database open;</p>
<p>还可以从mount状态转为mount状态，如下所示：</p>
<p>sql&gt;alter database mount;</p>
<p>二、关闭</p>
<p>1、正常关闭</p>
<p>正常关闭数据库所用的选项是normal，数据库在关闭前将检查所有的连接，并且发出命令后不允许再有新的用户连接，在等待所有连接都断开后再关闭数据库，再次启动数据库不需要任何恢复过程。</p>
<p>联入sys用户</p>
<p>sql&gt;shutdown normal;</p>
<p>2、紧急关闭</p>
<p>该方式用在某些紧急的情况下，比如通知马上停电，此时需要紧急关闭数据库以应付这些情况。这种方式用的选项是immediate，在这种方式下并不等待所有的用户断开连接再关闭，而是由系统断开连接，然后关闭数据库。</p>
<p>sql&gt;shutdown immediate;</p>
<p>一旦执行了这条命令，则将当前正在处理的sql语句马上停止，然后将所有未提交的事务回退，并且不等待当前联入数据库的用户断开连接，而是由系统强行将各个联接断开。在下次启动数据库时要执行恢复动作，不过是由系统自动执行的，用户不必去了解它。</p>
<p>3、异常关闭</p>
<p>异常关闭选项是abort，此种方式下系统并不做任何检查和断开用户操作以及回退操作，而是直接将数据库现场撤销，这样现场中的数据库数据当然就无效了，数据库自然也就被关掉了。</p>
<p>sql&gt;shutdown abort;</p>
<p>以abort方式关闭数据库时只有一行关闭信息表示关闭了数据库现场。以abort方式关闭的数据库再次启动时必须要进行恢复动作，这些恢复操作同样是系统自动来完成的，需要的时间较长。</p>
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=85205</p>
</div>
<div class="tit">linux下oracle数据库服务和监听的启动停止</div>
<div class="date">2007/10/23 19:33</div>
<p>1、启动数据库：<br />
oracle@suse92:~&gt; sqlplus /nolog</p>
<p>SQL*Plus: Release 9.2.0.4.0 &#8211; Production on Fri Jan 20 02:29:37 2006</p>
<p>Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.</p>
<p>SQL&gt; connect /as sysdba<br />
Connected to an idle instance.<br />
SQL&gt; startup<br />
ORACLE instance started.</p>
<p>Total System Global Area 135352820 bytes<br />
Fixed Size 455156 bytes<br />
Variable Size 109051904 bytes<br />
Database Buffers 25165824 bytes<br />
Redo Buffers 679936 bytes<br />
Database mounted.<br />
2、关闭数据库：<br />
oracle@suse92:~&gt; sqlplus /nolog</p>
<p>SQL*Plus: Release 9.2.0.4.0 &#8211; Production on Fri Jan 20 02:29:37 2006</p>
<p>Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.</p>
<p>SQL&gt; connect /as sysdba<br />
Connected to an idle instance.<br />
SQL&gt; shutdwon abort;<br />
3、启动监听器<br />
oracle@suse92:~&gt; lsnrctl start<br />
4、停止监听器<br />
oracle@suse92:~&gt; lsnrctl stop<br />
5、查看监听器状态<br />
oracle@suse92:~&gt; lsnrctl</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/linux-oracle-start/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Linux下用apt-spy得到最快的源</title>
		<link>http://blog.yoooung.com/archives/linux-apt-spy/</link>
		<comments>http://blog.yoooung.com/archives/linux-apt-spy/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 07:50:46 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.1kps.com/?p=402</guid>
		<description><![CDATA[我使用的是在VM里跑的Ubuntu Server版，刚开始运行update，速度慢的要死，所以google了下发现使用apt-spy真的可以找到一个快的源。。不错,下面说说具体的操作方法，菜鸟学习中。。 用root用户，就可以不用每次都打sudo了 首先要按照apt-spy这个东西的 apt-get install apt-apy 提示我现在用的源没有这个东西，我只好去网上下载了个deb，具体地址是http://ftp.de.debian.org/debian/pool/main/a/apt-spy/ 下载其中的apt-spy_3.1-19_hurd-i386.deb 我是下载来用vsftp上传到虚拟机中的，好恶心的方法，不过我挂载windows分区到ubuntu里没成功，所以只能这样了 安装的时候 dpkg -i apt-spy_3.1-19_hurd-i386.deb 提示我这个依赖包libcurl3，在安装iso里找到了这个 要先将iso挂载的，才能查找到这个包的 mkdir /mnt/cdrom mount  /dev/cdrom /mnt/cdrom find / -name *libcurl3* 就找到这个了，dpkg -i   /mnt/cdrom0/pool/main/c/curl/libcurl3_7.18.0-1ubuntu2_i386.deb 这样就再运行 dpkg -i apt-spy_3.1-19_hurd-i386.deb 安装成功]]></description>
			<content:encoded><![CDATA[<p>我使用的是在VM里跑的Ubuntu Server版，刚开始运行update，速度慢的要死，所以google了下发现使用apt-spy真的可以找到一个快的源。。不错,下面说说具体的操作方法，菜鸟学习中。。</p>
<p>用root用户，就可以不用每次都打sudo了</p>
<p>首先要按照apt-spy这个东西的</p>
<p>apt-get install apt-apy</p>
<p>提示我现在用的源没有这个东西，我只好去网上下载了个deb，具体地址是<a href="http://ftp.de.debian.org/debian/pool/main/a/apt-spy/">http://ftp.de.debian.org/debian/pool/main/a/apt-spy/</a></p>
<p>下载其中的<a href="http://ftp.de.debian.org/debian/pool/main/a/apt-spy/apt-spy_3.1-19_hurd-i386.deb">apt-spy_3.1-19_hurd-i386.deb</a></p>
<p>我是下载来用vsftp上传到虚拟机中的，好恶心的方法，不过我挂载windows分区到ubuntu里没成功，所以只能这样了</p>
<p>安装的时候</p>
<p>dpkg -i apt-spy_3.1-19_hurd-i386.deb</p>
<p>提示我这个依赖包libcurl3，在安装iso里找到了这个</p>
<p>要先将iso挂载的，才能查找到这个包的</p>
<p>mkdir /mnt/cdrom</p>
<p>mount  /dev/cdrom /mnt/cdrom</p>
<p>find / -name *libcurl3*</p>
<p>就找到这个了，dpkg -i   /mnt/cdrom0/pool/main/c/curl/libcurl3_7.18.0-1ubuntu2_i386.deb</p>
<p>这样就再运行 dpkg -i apt-spy_3.1-19_hurd-i386.deb</p>
<p>安装成功</p>
<p>首先备份下sources.list,因为用apt-spy会覆盖sources.list，具体为什么要保留sources.list，我还不是很明白。。</p>
<p>cp  /etc/apt/sources.list /etc/apt/sources.list.bak</p>
<p>命令</p>
<p>apt-spy update</p>
<p>这样就OK了，发现更新速度快了不少。。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/linux-apt-spy/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>VSFTP的安装和配置【转】</title>
		<link>http://blog.yoooung.com/archives/vsftp_install/</link>
		<comments>http://blog.yoooung.com/archives/vsftp_install/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 13:06:29 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[编程摘录]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[vsftp]]></category>

		<guid isPermaLink="false">http://www.1kps.com/?p=397</guid>
		<description><![CDATA[在因特网上或是企业内部，有许多站点需要高质量的FTP应用和安全的服务控制，如何能配置高质量应用的安全站点是企业应用和一些提供下载服务的网站的重要需求。基于这个出发点，我们将使用VSFTP–very safe ftp–架设高质量应用的安全FTP站点。 我们的步骤分为两大步：安装VSFTP和配置VSFTP。第一步：安装VSFTP 准备：下载VSFTP源码包或VSFTP的RPM包软件，这里我使用的是vsftpd-1.2.1.tar.gz，或是使用RPM包，我下载了vsftpd-1.1.3-8.i386.rpm，无论你使用哪种包安装vsftp都需要有root权限。 使用tar.gz源码包安装VSFTP，把下载的源码包放在一个目录下，这里我建一个目录ftp，所有的操作都在这个目录下进行： mkdir ftp 把vsftpd-1.2.1.tar.gz复制到目录ftp下： cp 下载vsftpd-1.2.1.tar.gz放置目录 ftp/ 进入ftp目录： cd ftp 接下来解压： tar zxvf vsftpd-1.2.1.tar.gz 解压之后ftp目录下多了一个名为vsftpd-1.2.1的目录，进入该目录编译VSFTP： cd vsftpd-1.2.1 make 编译之后目录下多了一个可执行文件vsftpd， #ls -l vsftpd -rwxr-xr-x 1 root]]></description>
			<content:encoded><![CDATA[<p>在因特网上或是企业内部，有许多站点需要高质量的FTP应用和安全的服务控制，如何能配置高质量应用的安全站点是企业应用和一些提供下载服务的网站的重要需求。基于这个出发点，我们将使用VSFTP–very safe ftp–架设高质量应用的安全FTP站点。</p>
<p>我们的步骤分为两大步：安装VSFTP和配置VSFTP。第一步：安装VSFTP<br />
准备：下载VSFTP源码包或VSFTP的RPM包软件，这里我使用的是vsftpd-1.2.1.tar.gz，或是使用RPM包，我下载了vsftpd-1.1.3-8.i386.rpm，无论你使用哪种包安装vsftp都需要有root权限。</p>
<p><span id="more-397"></span></p>
<p>使用tar.gz源码包安装VSFTP，把下载的源码包放在一个目录下，这里我建一个目录ftp，所有的操作都在这个目录下进行：<br />
mkdir ftp<br />
把vsftpd-1.2.1.tar.gz复制到目录ftp下：</p>
<p class="code">cp 下载vsftpd-1.2.1.tar.gz放置目录 ftp/</p>
<p>进入ftp目录：</p>
<p class="code">cd ftp</p>
<p>接下来解压：</p>
<p class="code">tar zxvf vsftpd-1.2.1.tar.gz</p>
<p>解压之后ftp目录下多了一个名为vsftpd-1.2.1的目录，进入该目录编译VSFTP：</p>
<p class="code">cd vsftpd-1.2.1<br />
make</p>
<p>编译之后目录下多了一个可执行文件vsftpd，</p>
<p class="code">#ls -l vsftpd<br />
-rwxr-xr-x 1 root root 77144 4月 13 21:17 vsftpd</p>
<p>这是vsftp的主程序。因为vsftp默认需要使用”nobody”这个用户来配置，所以你必须确定你的系统中有这个用户，一般说都会有的，但为了明确起见，执行下述命令添加nobody用户：</p>
<p class="code">#adduser nobody<br />
adduser: user nobody exists</p>
<p>因为我的系统里已经有nobody用户了，所以提示该用户已经存在了。<br />
vsftp默认的配置还需要一个空的目录(empty)，该目录的绝对路径应该是/usr/share/empty/，另外若ftp服务器需要匿名用户(anonymous)需要加一个用户ftp，此用户的要求这样：用户目录设为/var/ftp，它是VSFTP的匿名用户的映射本地用户，即指anonymous用户在进程中以ftp用户身分运行 进程，但anonymous用户并不继承了ftp用户的文件权限，它只拥有其他组的文件权限。可使用下述的命令完成上面的需求：</p>
<p class="code">#mkdir /var/ftp/<br />
#useradd -d /var/ftp ftp</p>
<p>如果你的系统已经存在有ftp用户的话，使用下面的命令更改目录属主和用户目录：</p>
<p class="code">#chown root.root /var/ftp<br />
#chmod og-w /var/ftp</p>
<p>接下来把编译的文件安装到相应目录：</p>
<p class="code">make install</p>
<p>安装之后，在/usr/local/sbin/目录下有vsftpd这个主程序。<br />
在/etc/xinetd.d下也有一个vsftpd配置文件，这个文件是由xinetd守护进程启动vsftpd的配置文件。另外你不使用xinetd启动vsftp的话，你应该在/etc/目录下加一个vsftp的配置文件，默认的文件名为/etc/vsftpd.conf，这个文件你可以手动编辑，但在我们的源码目录里已经有一个样本配置文件了，可以直接修改这个文件以满足我们的需求，现在把这个样本配置文件拷贝到这个目录下：</p>
<p class="code">#cp vsftpd.conf /etc/</p>
<p>这样在/etc/下有一个配置文件vsftpd.conf了。<br />
我们来测试一下VSFTP是否能够正常运行，我们采取使用独立进程而不是xinetd来启动VSFTP，这样要在刚才的文件/etc/vsftpd.conf后面加入一行：</p>
<p class="code">listen=YES</p>
<p>加入之后用下面的命令试试启动VSFTP：</p>
<p class="code">#/usr/local/sbin/vsftpd &amp;<br />
[1] 7208</p>
<p>好了，VSFTP已经启动，进程号为7208。<br />
接下来测试FTP(你应该确定你的机器里没有里别的FTP服务软件运行，否则使用相同的端口会发生冲突)：</p>
<p class="code"># ftp 127.0.0.1<br />
Connected to 127.0.0.1 (127.0.0.1).<br />
220 (vsFTPd 1.2.1)<br />
Name (127.0.0.1:root): ftp<br />
331 Please specify the password.<br />
Password:<br />
230 Login successful.<br />
Remote system type is UNIX.<br />
Using binary mode to transfer files.</p>
<p>OK，FTP服务器运行正常，使用匿名用户ftp登陆成功，你也可以使用anonymous代替用户名ftp，一样可以成功登陆。</p>
<p><!--more--></p>
<p>使用RPM包安装VSFTP就容易多了，只需要执行下面的命令：</p>
<p class="code">#rpm -ivh sftpd-1.1.3-8.i386.rpm</p>
<p>好了，看来我们的VSFTP至此为止安装得很正确并且运行得非常良好，这样我们可以进入第二大步：配置VSFTP。</p>
<p>第二步：配置VSFTP<br />
a)使本地用户能登录FTP。按照上面的源码安装配置我们的FTP还不能让本地用户登录，因为缺少一个认证PAM文件，在源码目录下有一个RedHat/vsftpd.pam认证文件，把它复制到/etc/pam.d/ftp。</p>
<p class="code">#cp RedHat/vsftpd.pam /etc/pam.d/ftp</p>
<p>测试一下，假设有一个本地用户test，登录FTP：</p>
<p class="code">#ftp 127.0.0.1<br />
Connected to 127.0.0.1 (127.0.0.1).<br />
220 (vsFTPd 1.2.1)<br />
Name (127.0.0.1:root): test<br />
331 Please specify the password.<br />
Password:<br />
230 Login successful.<br />
Remote system type is UNIX.<br />
Using binary mode to transfer files.</p>
<p>看来情况很好：)<br />
b)配置匿名用户有浏览，读写，创建目录权限的FTP。这种配置的FTP是极度不安全的FTP，但在某些FTP网站上可能希望能匿名用户能上传文件，因此有必要讲解一下：<br />
编辑配置VSFTP的配置文件vsftpd.conf，在文件加入下面几行：</p>
<p class="code">anon_world_readable_only=NO //关闭匿名用户只读权限，这个选项是控制匿名用户只能下载具有可读权限的文件，绝不允许有其他权限，特别是写权限，因此要使匿名用户有写权限，应该禁止它<br />
anon_upload_enable=YES //匿名用户上传权限开放<br />
anon_mkdir_write_enable=YES //匿名用户写和创建目录权限开放<br />
write_enable=YES //这是VSFTP控制用户改变文件系统的权限的选项，若任何用户要使用改变文件系统命令(如，读写，删除等等操作)都必须使它开放，默认值是NO</p>
<p>OK，保存后退出。<br />
测试：</p>
<p class="code">#ftp127.0.0.1<br />
Connected to 127.0.0.1 (127.0.0.1).<br />
220 (vsFTPd 1.2.1)<br />
Name (127.0.0.1:root): test<br />
331 Please specify the password.<br />
Password:<br />
230 Login successful.<br />
Remote system type is UNIX.<br />
Using binary mode to transfer files.<br />
ftp&gt; put mp3.txt<br />
local: mp3.txt remote: mp3.txt<br />
227 Entering Passive Mode (127,0,0,1,25,17)<br />
150 Ok to send data.<br />
226 File receive OK.<br />
682 bytes sent in 0.00885 secs (75 Kbytes/sec)</p>
<p>测试成功，匿名用户已经有了上传的权限。<br />
几点说明：<br />
1， anon_other_write_enable选项可以使匿名用户删除文件目录，一般不开启。<br />
2，匿名用户要拥有上传的权限除应该在上面VSFTP的配置文件里设置几项之外，还应该使目录的其他组权限有写的权限。<br />
c)其他的几种有用的配置选项。<br />
1，开启ACSII上传下载传输模式</p>
<p class="code">ascii_download_enable=YES //开启了下载时的ASCII模式数据传输<br />
ascii_upload_enable=YES //开启了上传时的ASCII模式数据传输</p>
<p>因为二进制传输不用进行二进制和ASCII码之间的相互转化，因而速度较ASCII模式快，VSFTP在默认情况下是不开启ASCII码传输模式的，上述两个语句使ASCII上传下载传输模式分别开启。<br />
2，更改FTP服务器默认监听端口</p>
<p class="code">listen_port=2121 //改变默认的21端口号为2121</p>
<p>3，设置用户会话的空闲中断时间</p>
<p class="code">idle_session_timeout=300 //连接服务器的用户在5分钟时间内没有任何动作将被断开，默认为300</p>
<p>4，设置空闲的数据连接的中断时间</p>
<p class="code">data_connection_timeout=300 //数据连接空闲5分钟将被断开，默认为300秒</p>
<p>5，设置客户端空闲时的自动中断和激活连接的时间</p>
<p class="code">accept_timeout=60 //客户端建立PASV模式数据连接空闲1分钟自动中断，默认为60秒<br />
connect_timeout=60 //客户端在中断1分钟后自动激活连接，默认为60秒</p>
<p>6，设置最大传输速率限制</p>
<p class="code">local_max_rate=50000 //本地用户最大传输速率为50kbytes/s<br />
anon_max_rate=30000 //匿名用户最大传输速率为30kbytes/s</p>
<p>若把上述的数值设为0则为不限速，这也是VSFTP的默认值。<br />
7，设置最大客户端连接数</p>
<p class="code">max_clients=30 //服务器最大连接数设为30，默认为0，即不加以限制，安全的FTP应该加以限制</p>
<p>8，设置客户端连接时的端口范围</p>
<p class="code">pasv_min_port=50000<br />
pasv_max_port=60000</p>
<p>上述语句使客户端连接端口范围在50000至60000之间，这有利于提高服务器的安全。默认两个值都是0，即不限制，使用任意端口。<br />
9，把用户限制在家目录，即设置chroot()</p>
<p class="code">chroot_local_user<br />
chroot_list_enable<br />
chroot_list_file</p>
<p>要设置chroot()，可以使用</p>
<p class="code">chroot_local_user=YES</p>
<p>上述语句是使全部的本地用户都被限制在家目录，这无法只限制特定的用户，要限制特定用户，使用下面的方法：</p>
<p class="code">chroot_local_user=NO //关闭本地用户chroot()<br />
chroot_list_enable=YES //开启要设置chroot()用户项<br />
chroot_list_file=/etc/vsftpd.chroot_list //指定要设置chroot()的特定用户文件，这个文件的格式应该每个用户名占用一行</p>
<p>11，开启进站或进入目录的欢迎或说明性文字</p>
<p class="code">dirmessage_enable=YES //开启目录文字选项<br />
message_file=.welcome //欢迎或说明性文字文件设为.welcome，在默认是.message</p>
<p>这样在目录下建立文件.welcome(默认是.message)，在用户进入目录时可把该文件的内容显示出来。<br />
10，开启FTP服务器的日志功能</p>
<p class="code">xferlog_enable=YES //启动日志记录功能，记录在xferlog_file指明的文件里<br />
xferlog_file=/var/log/ftp.log //日志记录在文件/var/log/ftp.log里，默认值为/var/log/xferlog</p>
<p>上面不是默认配置，默认配置是如下语句</p>
<p class="code">xferlog_enable=YES<br />
vsftpd_log_file=/var/log/vsftpd.log //日志记录在/var/log/vsftpd.log里，默认也是这个文件</p>
<p>默认配置xferlog_std_format语句没有启用。<br />
d)配置基于用户的访问控制<br />
有两种方法：<br />
A)使用认证文件，前面我们让本地用户能够登录服务器的时候是使用源码树里的一个样本pam文件(RedHat/vsftpd.pam)，把它复制到/etc/pam.d/目录下并改名为ftp就可使本地用户登录，改名为ftp的原因是VSFTP默认的pam认证文件名为ftp，但我们可以使用下面的语句来改变</p>
<p class="code">pam_service_name=vsftppam //这样设置后VSFTP使用/etc/pam.d/vsftppam文件来认证用户</p>
<p>回来主题，应该如何使本地用户不能登录呢？回想到原来本地用户不能够登录是因为没有ftp这个认证文件，那么我们把它删除就可以了。<br />
B)使用VSFTP相关的几个语句</p>
<p class="code">userlist_enable<br />
userlist_deny<br />
userlist_file</p>
<p>用这三个语句可以控制指定用户不能登录，方法如下：</p>
<p class="code">userlist_enable=YES //用户清单功能开启<br />
userlist_deny=YES //把用户清单设为拒绝用户清单<br />
userlist_file=/etc/vsftpd.user_list //用户清单文件为<br />
/etc/vsftpd.user_list，这个文件的格式也是一个用户名占用一行</p>
<p>因为第二个语句把文件/etc/vsftpd.user_list设为拒绝用户清单，那么，文件里面的用户名都不能登录。<br />
或是另外一种设置方法：</p>
<p class="code">userlist_enable=YES //用户清单功能开启<br />
userlist_deny=NO //把用户清单设为接受用户清单<br />
userlist_file=/etc/vsftpd.user_list //用户清单文件为/etc/vsftpd.user_list</p>
<p>因为第二个语句把文件/etc/vsftpd.user_list设为接受用户清单，那么，文件里面的用户名都能登录，不在文件里的用户不能登录。<br />
从这里可以看出userlist_deny语句起了开关的作用，可把用户清单文件设为拒绝或是接受，是不是很有趣？：)</p>
<p>e)配置安全的匿名FTP站点。要求匿名用户只有浏览和下载权限，没有其他的用户。通过上面的学习，配置这种常见的匿名FTP站点很容易：<br />
首先，把本地用户禁止登录，可以使用上面介绍的方法，这里不再复述。<br />
然后，确定把下面的语句设为下面的样例：</p>
<p class="code">anon_world_readable_only=YES<br />
anon_upload_enable=NO<br />
anon_mkdir_write_enable=NO<br />
write_enable=NO</p>
<p>这样做之后，就能有一个满足要求的FTP站点了，其实只要设anon_world_readable_only=YES也可以做到上述效果的了。</p>
<p>f)上面讲述的启动服务器的方法是都是以独立(standalone)进程的方式启动的，还有一种启动VSFTP的方法，就是使用超级服务器xinetd启动，这两种方法的区别是，xinetd的启动使支持的并发进程比独立进程方式启动少，不适合访问人数多的大站点，一般如果访问的流量少可以使用xinetd启动，如果是访问的流量多应该以独立方式启动。好了，下面介绍以xinetd启动的方法：<br />
编辑/etc/vsftpd.conf把原来加入的listen=YES这行删除，或前面加注释#<br />
编辑/etc/xinetd.d/vsftpd(这个文件在源码安装时已经被复制存在了)，确定这行值为NO：</p>
<p class="code">disable= NO</p>
<p>执行下面的命令重启xinetd服务器：</p>
<p class="code">#service xinetd restart<br />
Stopping xinetd: [ OK ]<br />
Starting xinetd: [ OK ]<br />
#ftp 127.0.0.1<br />
Connected to 127.0.0.1 (127.0.0.1).<br />
220 (vsFTPd 1.2.1)<br />
Name (127.0.0.1:root): test<br />
331 Please specify the password.<br />
Password:<br />
230 Login successful.<br />
Remote system type is UNIX.<br />
Using binary mode to transfer files.</p>
<p>成功通过xinetd启动VSFTP了。<br />
可以通过xinetd的功能实现控制VSFTP，下面一一介绍：<br />
1,配置基于主机的访问控制<br />
配置基于主机的访问控制可以使用超级服务器xinetd的功能，由xinetd去控制特定的IP可以访问FTP服务器，VSFTP只提供基于本地用户的访问控制，控制特定的访问可使用下面的xinetd的语句：</p>
<p class="code">only_from //允许访问IP<br />
no_access //拒绝访问IP<br />
per_source //每个IP的最大连接数<br />
instances //并发最高连接数<br />
access_time //访问时间<br />
banner_fail //登录失败显示的内容文件</p>
<p>这里的具体使用属于xinetd的内容，读者可以参考相关内容，这里就不多说了</p>
<p>2，配置绑定IP的FTP服务器<br />
LINUX下可以使用虚拟网卡，这样我们就可以利用xinetd为VSFTP配置几个绑定IP的FTP服务器，执行如下的步骤来创建一个新的虚拟网卡，网卡IP可以自己指定，假定我们原来的IP为192.168.0.2，新加的IP为192.168.0.3，则：</p>
<p class="code">#cp /etc/sysconfig/network-scripts/ifcfg-eth0<br />
/etc/sysconfig/network-scripts/ifcfg-eth0:0</p>
<p>编辑/etc/sysconfig/network-scripts/ifcfg-eth0，把其中的相关字段改为如下的值：</p>
<p class="code">DEVICE=”eth0:0″<br />
IPADDR=”192.168.0.3″</p>
<p>保存后退出，执行下面的命令激活虚拟网卡eth0:0</p>
<p class="code">#ifup eth0:0</p>
<p>这样就成功配置了虚拟网卡，现在我们要配置两个FTP服务器，分别绑定到192.168.0.2和192.168.0.3。<br />
编辑/etc/xinetd.d/vsftpd，加入下面两行</p>
<p class="code">server_args=/etc/vsftp.conf<br />
bind=192.168.0.2</p>
<p>并确定disable=NO。<br />
复制/etc/xinetd.d/vsftpd为/etc/xinetd.d/ftp，复制配置文件</p>
<p class="code">/etc/vsftpd.conf为第二个服务器的配置文件/etc/ftp.conf<br />
#cp /etc/xinetd.d/vsftpd /etc/xinetd.d/ftp<br />
#cp /etc/vsftpd.conf /etc/ftp.conf</p>
<p>编辑/etc/xinetd.d/ftp，改bind=192.168.0.2为bind=192.168.0.3，改server_args=/etc/vsftp.conf为server_args=/etc/ftp.conf同样disable=NO。<br />
保存并退出。<br />
为新的服务器加一个匿名用户映射的本地用户，类似我们安装的时候执行的命令一样：</p>
<p class="code">#mkdir /var/ftp2/<br />
#useradd -d /var/ftp2 ftp2<br />
#chown root.root /var/ftp2<br />
#chmod og-w /var/ftp2</p>
<p>这样就建立了映射的本地用户ftp2，家目录为/var/ftp2，这也是该服务器匿名用户登录时的根目录。<br />
现在可以编辑第二个FTP服务器的配置文件/etc/ftp.conf了，首先把映射用户由默认的ftp改为我们新建的用户ftp2，但要注意，匿名用户登录的时候还是用anonymous或是ftp，用ftp2不能登录。使用下面的语句：</p>
<p class="code">ftp_username=ftp2</p>
<p>另外，因为VSFTP默认是使用/etc/pam.d/ftp为本地用户的认证文件，所以现在两个服务器都是共用一个/etc/pam.d/ftp认证文件的，可以编辑/etc/ftp.conf使用下面的语句更改默认的认证文件使IP为192.168.0.3的新的FTP服务器使用新的认证文件，从而把两个服务器完全的独立开来：</p>
<p class="code">pam_service_name=ftp2</p>
<p>这样就把192.168.0.3FTP服务器的认证文件改为/etc/pam.d/ftp2，若这个文件不存在，本地用户不能登录该服务器。<br />
好了，另外的修改你可以参照上面的介绍修改以定制新的服务器的属性来满足需求。<br />
修改/etc/ftp.conf完毕，保存退出。<br />
用下面的命令重启xinetd：</p>
<p class="code">#service xinetd restart</p>
<p>另外要确定两个服务器的配置文件没有listen=YES这一句，因为我们是以xinetd启动VSFTP服务器的。好了，可以进行测试了，具体过程不说了，结果说一下：以127.0.0.1不能访问任何的FTP服务器，但以192.168.0.2和192.168.0.3却可以分别访问两个服务器。<span id="lblContent">g)其实以独立方式启动FTP也可以创建虚拟服务器，下面把上面的两个服务器改为由独立方式启动的模式，直接更改它们两个配置文件就可以了：<br />
编辑第一个服务器的配置文件/etc/vsftpd.conf，加入下面的两行：</span></p>
<p class="code">listen_address=192.168.0.2<br />
listen=YES</p>
<p>编辑第二个服务器的配置文件/etc/ftp.conf，加入下面的两行：</p>
<p class="code">listen_address=192.168.0.3<br />
listen=YES</p>
<p>保存后退出，由下面的命令来启动服务器：</p>
<p class="code">#/usr/local/sbin/vsftpd /etc/ftp.conf &amp;<br />
[1] 2196<br />
# /usr/local/sbin/vsftpd /etc/vsftpd.conf &amp;<br />
[2] 2201</p>
<p>测试一下，两个服务器都成功运行了。<br />
h)VSFTP一个称为安全的保证是采用了虚拟用户的认证方式，它靠对/etc/pam.d/目录下指定的一个认证文件对用户进行认证，认证成功后再把虚拟用户映射为本地用户，该本地用户由服务器配置文件里的语句ftp_username的值指定。现在详细介绍虚拟用户的使用方法，使用PAM文件认证虚拟用户的方法需要有一个口令数据库文件来存储虚拟用户名和对应密码，首先建立一个文本文件，里面包含虚拟用户名和对应的密码，格式为虚拟用户名和密码各占一行，虚拟用户名后紧跟对应密码，举个例子，在我的家目录下有一个虚拟用户名和密码的文本文件test.txt</p>
<p class="code">#cat ~/test.txt<br />
test1<br />
test1password<br />
test2<br />
test2password</p>
<p>格式就像上面的一样。<br />
把上面的文本文件生成口令数据库文件以供PAM认证，这要用到db_load命令：<br />
#db_load -T -t hash -f ~/test.txt /etc/user_passwd.db<br />
这样我们就生成了/etc/user_passwd.db口令数据库文件。<br />
在192.168.0.2服务器的PAM文件中加入这个口令数据库文件/etc/pam.d/ftp，删除掉原来的所有行或在前面加#注释掉，然后加入下面两行</p>
<p class="code">auth required /lib/security/pam_userdb.so db=/etc/user_passwd<br />
account required /lib/security/pam_userdb.so db=/etc/user_passwd</p>
<p>保存后退出，因为虚拟用户要映射为本地的用户，因此我们应该再加一个用户：</p>
<p class="code">#adduser -d /var/ftp3/ ftp3<br />
#chmod 605 /var/ftp3</p>
<p>然后编辑192.168.0.2服务器的配置文件/etc/vsftpd.conf：<br />
加入或修改下面几个语句(值)：</p>
<p class="code">guest_enable=YES //开启虚拟用户的功能<br />
guest_username=ftp3 //虚拟用户映射为本地用户ftp3<br />
pam_service_name=ftp //PAM认证文件为/etc/pam.d/ftp</p>
<p>保存后退出。<br />
启动服务：</p>
<p class="code"># /usr/local/sbin/vsftpd /etc/vsftpd.conf &amp;</p>
<p>分别用ftp或anonymous和test1或test2测试服务器，结果都能连通服务器，并且，匿名和虚拟用户登录后的根目录都不同，但在VSFTP推荐是不开启匿名服务，但小心设置用户权限之后还是可以在保证系统安全的情况下一起开启匿名和虚拟用户的。<br />
对虚拟用户分别分配权限，具体做法如下：<br />
1，修改服务器配置文件，在这里192.168.0.2服务器的配置文件为/etc/vsftpd.conf，在顶部加入一行：</p>
<p class="code">user_config_dir=/etc/user_config //存放用户权限的配置文件的目录为/etc/user_config</p>
<p>2，建立存放用户权限的配置文件的目录/etc/user_config/</p>
<p class="code">#mkdir /etc/user_config/</p>
<p>3，在上面的目录下分别建立以每个用户的名称为文件名的文件，每个用户的文件里写入此用户的权限。在下面的例子里，我为test1用户建立具有浏览，下载，上传的权限，为test2用户建立具有浏览，下载的权限。</p>
<p class="code">#echo “anon_world_readable_only=YES”&gt;/etc/user_config/test2 //test2用户只有读权限<br />
#echo&lt;&gt;/etc/user_config/test2<br />
&gt;anon_world_readable_only=YES<br />
&gt;write_enable=YES<br />
&gt;anon_upload_enable=YES<br />
&gt;! //test1用户有浏览，上传，下载的权限</p>
<p>4，重启服务器：</p>
<p class="code">#killall vsftpd<br />
# /usr/local/sbin/vsftpd /etc/vsftpd.conf &amp;</p>
<p>测试发现，两个用户的权限和我们希望的一样：)<br />
5，不一定所有的测试都能成功，因为上面的讲解还不完善，还需要有几点特别注意的问题：<br />
a)在服务器的配置文件(我们的例子里是/etc/vsftpd.conf)里的设置能覆盖用户权限的配置文件的设置(这里是目录/etc/user_config/下的文件)，举个例子说明，像上面如果配置了用户了test2只有读权限，但在服务器配置文件里我们设置了匿名用户有读写权限，那么，可怕的事情会发生，test2也拥有读写权限！并且，像上面配置的匿名用户和虚拟用户test2即使不在同一个根目录，匿名用户在服务器配置文件里的匿名用户根目录的读写权限也一样会使虚拟用户它的根目录拥有读写权限，听起来好像很复杂，但只要读者测试一下就会明白。<br />
b)设置用户权限时要考虑用户映射的用户的文件系统权限，举个例子，如果用户虽然在配置文件里设置了有可写权限，但它在文件系统上是没有写权限的，综合的结果用户还是没有写权限。<br />
c)这里总结一下，对于权限的设置不言而喻是很重要的，上面给出的要考虑方面应该综合起来分析，权限之间的制约关系要分清，才能正确的设置用户的权限。</p>
<p>OK，所有的安装配置都已经讲完了，现在完全可以利用VSFTP构建一个安全的FTP站点了。</p>
<p>原文：<a href="http://lyp.cn/study/digest/2006-03-31/250/vsftp-install.html">http://lyp.cn/study/digest/2006-03-31/250/vsftp-install.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoooung.com/archives/vsftp_install/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

