<?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; Unix/Linux系统</title>
	<atom:link href="http://www.chenweionline.cn/archives/category/unixlinux%e7%b3%bb%e7%bb%9f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.chenweionline.cn</link>
	<description>言简意赅，论人论事论学问</description>
	<lastBuildDate>Thu, 05 May 2011 05:16:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>mysql手动停止无响应查询方法</title>
		<link>http://www.chenweionline.cn/archives/61.htm</link>
		<comments>http://www.chenweionline.cn/archives/61.htm#comments</comments>
		<pubDate>Thu, 05 May 2011 05:16:30 +0000</pubDate>
		<dc:creator>陈威</dc:creator>
				<category><![CDATA[Unix/Linux系统]]></category>
		<category><![CDATA[技术杂谈]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.chenweionline.cn/?p=61</guid>
		<description><![CDATA[

热度:


#result td {border:1px solid #000000}

&#160;&#160;&#160;&#160;&#160;&#160;使用phpmyadmin、Navicat for Mysql或Mysql Workbench等客户端连接mysql服务器时，若mysql查询返回结果数据量太大或查询耗时太长时经常会出现查询无响应的情况，此时在客户端选择停止查询只是中止了客户端的查询进程，而服务器端仍在运行已提交的查询请求，从而导致服务器不响应其他查询甚至中止服务的后果。本文介绍如何通过Linux下的mysql命令行手动停止无响应查询或超时查询的方法。
&#160;&#160;&#160;&#160;&#160;&#160;（1）登录mysql。在命令行下登录使用用户名（如admin)和密码（如password）登录的命令如下，其中，-u表示后面是登录使用的用户名， -p表示使用该用户名需要密码。执行该命令后系统会提示输入用户对应的密码，密码验证通过后即进入mysql的命令行界面。
mysql -u &#60;用户名&#62; -p
Enter Password: ******
mysql&#62;
&#160;&#160;&#160;&#160;&#160;&#160;（2）查看mysql正在运行的会话和查询。使用命令show processlist;查看mysql正在运行的查询情况，该命令执行后显示一个表状结构，如下所示：



Id
User
Host
db
Command
Time
State
Info


141438
root
localhost
NULL
Query
0
NULL
show processlist



&#160;&#160;&#160;&#160;&#160;&#160;（3）上表中Id列的值表示目前正在运行的查询的唯一标识，在上表中通过Command列和Info列中的SQL语句找到我们要停止的查询对应的Id号，然后执行kill语句即可停止该查询。命令如下：
kill 141438; 
附：常用命令行界面mysql命令
&#160;&#160;&#160;&#160;&#160;&#160;show databases; //显示mysql中的所有数据库
&#160;&#160;&#160;&#160;&#160;&#160;use [databaseName]; //使用某个数据库，只有运行此命令后才能进入该数据库做查询
&#160;&#160;&#160;&#160;&#160;&#160;show tables; //显示当前数据库下的所有数据表和视图
&#160;&#160;&#160;&#160;&#160;&#160;select * from [tableName] where [Where Clauses]; //执行常规查询语句，如select, insert, update, delete等。
]]></description>
			<content:encoded><![CDATA[
<table>
<tr cellpadding=0><td>热度:</td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td></tr>
</table>
<p><style type="text/css">
#result td {border:1px solid #000000}
</style>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用phpmyadmin、Navicat for Mysql或Mysql Workbench等客户端连接mysql服务器时，若mysql查询返回结果数据量太大或查询耗时太长时经常会出现查询无响应的情况，此时在客户端选择停止查询只是中止了客户端的查询进程，而服务器端仍在运行已提交的查询请求，从而导致服务器不响应其他查询甚至中止服务的后果。本文介绍如何通过Linux下的mysql命令行手动停止无响应查询或超时查询的方法。<span id="more-61"></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）登录mysql。在命令行下登录使用用户名（如admin)和密码（如password）登录的命令如下，其中，-u表示后面是登录使用的用户名， -p表示使用该用户名需要密码。执行该命令后系统会提示输入用户对应的密码，密码验证通过后即进入mysql的命令行界面。</p>
<pre><strong>mysql -u &lt;用户名&gt; -p</strong></pre>
<pre><strong>Enter Password: ******</strong></pre>
<pre><strong>mysql&gt;</strong></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）查看mysql正在运行的会话和查询。使用命令show processlist;查看mysql正在运行的查询情况，该命令执行后显示一个表状结构，如下所示：</p>
<table id="result" style="width: 95%; border-collapse: collapse; border: 1px solid #000000; text-align: center;" border="0">
<tbody>
<tr>
<td>Id</td>
<td>User</td>
<td>Host</td>
<td>db</td>
<td>Command</td>
<td>Time</td>
<td>State</td>
<td>Info</td>
</tr>
<tr>
<td><strong>141438</strong></td>
<td>root</td>
<td>localhost</td>
<td>NULL</td>
<td>Query</td>
<td>0</td>
<td>NULL</td>
<td>show processlist</td>
</tr>
</tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）上表中Id列的值表示目前正在运行的查询的唯一标识，在上表中通过Command列和Info列中的SQL语句找到我们要停止的查询对应的Id号，然后执行kill语句即可停止该查询。命令如下：</p>
<pre><strong>kill 141438; </strong></pre>
<p><strong>附：常用命令行界面mysql命令</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show databases; //显示mysql中的所有数据库<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use [databaseName]; //使用某个数据库，只有运行此命令后才能进入该数据库做查询<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show tables; //显示当前数据库下的所有数据表和视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select * from [tableName] where [Where Clauses]; //执行常规查询语句，如select, insert, update, delete等。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chenweionline.cn/archives/61.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用JDK 1.6自带的jvisualvm监控远程服务器中Java程序资源占用情况</title>
		<link>http://www.chenweionline.cn/archives/56.htm</link>
		<comments>http://www.chenweionline.cn/archives/56.htm#comments</comments>
		<pubDate>Thu, 24 Mar 2011 07:07:54 +0000</pubDate>
		<dc:creator>陈威</dc:creator>
				<category><![CDATA[Unix/Linux系统]]></category>
		<category><![CDATA[技术杂谈]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.chenweionline.cn/?p=56</guid>
		<description><![CDATA[

热度:

&#160;&#160;&#160;&#160;&#160;&#160;因为做实验的需要，最近把实验室的Web数据抽取程序修改为多线程版本并在服务器上做大量的数据抽取工作，服务器是Ubuntu Server 10.01版本，通过Putty连接监控程序的运行情况非常不直观，需要使用一个Java资源监控程序实现对目标程序的实时监控。Jdk1.5版本提供的监控工具是Jconsole，相信很多早期的Java开发人员都使用过这个程序，但Jconsole的界面实在是有点对不起观众，所以在jdk1.6中Oracle提供了一个新的可视化的JVM监控工具Java VisualVM（官方介绍链接：http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_remote.html），在Windows系统下的Java VisualVM启动路径是$java_home$/jdk1.6.0/bin/jvisualvm.exe。
&#160;&#160;&#160;&#160;&#160;&#160;双击启动Java VisualVM后可以看到窗口左侧“应用程序”栏中有“本地”、“远程”、“快照”三个项目。其中“本地”下显示的是在localhost运行的Java程序的资源占用情况，如果本地有Java程序在运行的话启动Java VisualVM即可看到相应的程序名，点击程序名打开相应的资源监控菜单，以图形的形式列出程序所占用的CPU、Heap、PermGen、类、线程的统计信息。“远程”项下列出的远程主机上的Java程序的资源占用情况，但需要在远程主机上运行jstatd守护程序，下面就以实现对远程Ubuntu Server中运行的Java程序资源监控为例说明如何使用Java VisualVM监控远程Java程序。
&#160;&#160;&#160;&#160;&#160;&#160;（1）在服务器上安装jstatd组件。由于安装JDK时配置选项的原因，有的服务器中没有默认安装jstatd组件。jstatd是openjdk中的一个package，使用apt-get命令安装openjdk即可。关于jstatd组件的详细介绍可参考：http://download.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html
sudo apt-get install openjdk-6-jdk
&#160;&#160;&#160;&#160;&#160;&#160;（2）在服务器上配置jstatd的security policy文件。jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI（Remote Method Invocation，远程方法调用）服务器程序，它是一个Daemon程序，要保证远程监控软件连接到本地的话需要jstatd始终保持运行。jstatd运行需要通过-J-Djava.security.policy=***指定安全策略，因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy，文件内容如下：
grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};
&#160;&#160;&#160;&#160;&#160;&#160;（3）修改服务器hosts文件中的IP地址。要使Java VisualVM成功连接到远程服务器上，服务器端应该在/etc/hosts文件中把本机地址设为本机的IP地址。使用hostname -i命令查看，如果显示的是127.0.0.1或者与本机实际IP不一致的话，需要把/etc/hosts文件中相应的地址改为本机实际IP。
&#160;&#160;&#160;&#160;&#160;&#160;（4）运行jstatd守护程序。由于jstatd需要保持一直运行，所以建议使用screen命令执行jstatd程序，命令如下：
screen jstatd -J-Djava.security.policy=jstatd.all.policy
如果需要RMI日志功能的话，还可以在启动参数中加入-J-Djava.rmi.server.logCalls=true。jstatd开始运行后，使用CTRL+A+D断开screen界面，回到shell界面。如果想切换回jstatd运行界面的话，使用screen -r -d命令即可。
&#160;&#160;&#160;&#160;&#160;&#160;（5）通过Java VisualVM连接到服务器监控Java程序。在Java VisualVM程序窗口左侧“远程”项目右键选择“添加远程主机”，在弹出的对话框中输入远程主机的IP地址，确认提交后即可看到相应的远程主机和在上面运行的Java程序，连接成功后应该会显示Jstatd及其PID。
]]></description>
			<content:encoded><![CDATA[
<table>
<tr cellpadding=0><td>热度:</td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td></tr>
</table>
<p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为做实验的需要，最近把实验室的Web数据抽取程序修改为多线程版本并在服务器上做大量的数据抽取工作，服务器是Ubuntu Server 10.01版本，通过Putty连接监控程序的运行情况非常不直观，需要使用一个Java资源监控程序实现对目标程序的实时监控。Jdk1.5版本提供的监控工具是Jconsole，相信很多早期的Java开发人员都使用过这个程序，但Jconsole的界面实在是有点对不起观众，所以在jdk1.6中Oracle提供了一个新的可视化的JVM监控工具Java VisualVM（官方介绍链接：<a href="http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_remote.html" target="_blank">http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_remote.html</a>），在Windows系统下的Java VisualVM启动路径是<strong>$java_home$/jdk1.6.0/bin/jvisualvm.exe</strong>。<span id="more-56"></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;双击启动Java VisualVM后可以看到窗口左侧“应用程序”栏中有“<strong>本地</strong>”、“<strong>远程</strong>”、“<strong>快照</strong>”三个项目。其中“本地”下显示的是在localhost运行的Java程序的资源占用情况，如果本地有Java程序在运行的话启动Java VisualVM即可看到相应的程序名，点击程序名打开相应的资源监控菜单，以图形的形式列出程序所占用的CPU、Heap、PermGen、类、线程的统计信息。“远程”项下列出的远程主机上的Java程序的资源占用情况，但需要在远程主机上运行<strong>jstatd守护程序</strong>，下面就以实现对远程Ubuntu Server中运行的Java程序资源监控为例说明如何使用Java VisualVM监控远程Java程序。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）<strong>在服务器上安装jstatd组件</strong>。由于安装JDK时配置选项的原因，有的服务器中没有默认安装jstatd组件。jstatd是openjdk中的一个package，使用apt-get命令安装openjdk即可。关于jstatd组件的详细介绍可参考：<a href="http://download.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html" target="_blank">http://download.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html</a></p>
<pre><strong>sudo apt-get install openjdk-6-jdk</strong></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）<strong>在服务器上配置jstatd的security policy文件</strong>。jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI（Remote Method Invocation，远程方法调用）服务器程序，它是一个Daemon程序，要保证远程监控软件连接到本地的话需要jstatd始终保持运行。jstatd运行需要通过<strong>-J-Djava.security.policy=***</strong>指定安全策略，因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy，文件内容如下：</p>
<pre><strong>grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};</strong></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）<strong>修改服务器hosts文件中的IP地址</strong>。要使Java VisualVM成功连接到远程服务器上，服务器端应该在/etc/hosts文件中把本机地址设为本机的IP地址。使用hostname -i命令查看，如果显示的是127.0.0.1或者与本机实际IP不一致的话，需要把/etc/hosts文件中相应的地址改为本机实际IP。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（4）<strong>运行jstatd守护程序</strong>。由于jstatd需要保持一直运行，所以建议使用screen命令执行jstatd程序，命令如下：</p>
<pre><strong>screen jstatd -J-Djava.security.policy=jstatd.all.policy</strong></pre>
<p>如果需要RMI日志功能的话，还可以在启动参数中加入<strong>-J-Djava.rmi.server.logCalls=true</strong>。jstatd开始运行后，使用CTRL+A+D断开screen界面，回到shell界面。如果想切换回jstatd运行界面的话，使用screen -r -d命令即可。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（5）<strong>通过Java VisualVM连接到服务器监控Java程序</strong>。在Java VisualVM程序窗口左侧“远程”项目右键选择“添加远程主机”，在弹出的对话框中输入远程主机的IP地址，确认提交后即可看到相应的远程主机和在上面运行的Java程序，连接成功后应该会显示Jstatd及其PID。</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.chenweionline.cn/archives/56.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apt-get出现E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists错误的解决方法</title>
		<link>http://www.chenweionline.cn/archives/55.htm</link>
		<comments>http://www.chenweionline.cn/archives/55.htm#comments</comments>
		<pubDate>Sat, 05 Mar 2011 10:51:11 +0000</pubDate>
		<dc:creator>陈威</dc:creator>
				<category><![CDATA[Unix/Linux系统]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[开发经验]]></category>

		<guid isPermaLink="false">http://www.chenweionline.cn/?p=55</guid>
		<description><![CDATA[

热度:

&#160;&#160;&#160;&#160;&#160;&#160;最近在Ubuntu上安装mysql-server时用命令apt-get install mysql-server出现报错提示：
E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/******
刚开始以为是apt lists中的package没有mysql-server，所以运行命令apt-get update更新list列表，但仍然报上述错误，提示是lists的某一个mirror站点的package入口文件Could not be parsed or opened。回想起上一次调用apt-get update时由于update时间太长我直接CTRL+C中止的情形，可能是由于lists中某一个文件没有下载完成，出现解析错误。
&#160;&#160;&#160;&#160;&#160;&#160;可用的解决方案：将/var/lib/apt/lists/下的所有list文件都删除，然后再update即可，命令如下： 
sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update
&#160;&#160;&#160;&#160;&#160;&#160;在Ubuntu server中通过apt-get install是一种比较方便的安装软件的途径，不过由于Ubuntu Mirrors的访问速度问题，安装过程往往耗时很长，比起直接下载代码在本地make的方式要更需要耐心。
]]></description>
			<content:encoded><![CDATA[
<table>
<tr cellpadding=0><td>热度:</td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td></tr>
</table>
<p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在Ubuntu上安装mysql-server时用命令apt-get install mysql-server出现报错提示：</p>
<pre><strong>E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/******</strong></pre>
<p>刚开始以为是apt lists中的package没有mysql-server，所以运行命令apt-get update更新list列表，但仍然报上述错误，提示是lists的某一个mirror站点的package入口文件Could not be parsed or opened。回想起上一次调用apt-get update时由于update时间太长我直接CTRL+C中止的情形，可能是由于lists中某一个文件没有下载完成，出现解析错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可用的解决方案：将/var/lib/apt/lists/下的所有list文件都删除，然后再update即可，命令如下： </p>
<pre><strong>sudo rm /var/lib/apt/lists/* -vf</strong></pre>
<pre><strong>sudo apt-get update</strong></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Ubuntu server中通过apt-get install是一种比较方便的安装软件的途径，不过由于Ubuntu Mirrors的访问速度问题，安装过程往往耗时很长，比起直接下载代码在本地make的方式要更需要耐心。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chenweionline.cn/archives/55.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu下配置apache的urlrewrite功能</title>
		<link>http://www.chenweionline.cn/archives/54.htm</link>
		<comments>http://www.chenweionline.cn/archives/54.htm#comments</comments>
		<pubDate>Fri, 25 Feb 2011 05:51:13 +0000</pubDate>
		<dc:creator>陈威</dc:creator>
				<category><![CDATA[Unix/Linux系统]]></category>
		<category><![CDATA[网站开发]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.chenweionline.cn/?p=54</guid>
		<description><![CDATA[

热度:

&#160;&#160;&#160;&#160;&#160;&#160;Ubuntu Server 10版本的操作系统安装过程中默认可以安装LAMP套件，但要保证apache2正常工作还需要进一步的配置。在站点运行中为了方便搜索引擎的索引，使用最多的就是通过对urlrewrite功能实现对类似/search.php?query=***的url地址静态化重写为/***.html的形式，因此需要在apache中配置urlrewrite功能。
&#160;&#160;&#160;&#160;&#160;&#160;（1）在apache中配置rewrite功能为可用。在windows环境下的apache中，所有配置都集中在httpd.conf中，并且rewriteengine的配置也已列出，只需要找到相应的加载rewrite功能模块的配置语句，将之前的#注释去掉即可。而在Ubuntu及其他linux/unix版本的操作系统中，apache的配置文件是由/etc/apache2文件夹下多个文件及子文件夹组成，其中mods-available文件夹是apache可配置的模块文件列表，mods-enabled是apache当前正在使用的模块文件列表，因此要配置rewrite功能，只需要把mods-avaiable文件夹下的rewrite.load文件链接到mods-enabled文件夹下的相应文件即可。命令如下：
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
需要注意的是要修改 /etc/apache2/sites-available/default中 AllowOverride None 修改为： AllowOverride All，以保证rewrite的权限。
&#160;&#160;&#160;&#160;&#160;&#160;（2）配置好rewrite功能后，即可在站点配置文件中编写rewrite规则了，典型的格式如下：
rewriteengine on
rewriterule  /(.*).html$ /search.php?query=$1
&#160;&#160;&#160;&#160;&#160;&#160;记得配置完成后要用sudo service apache2 restart重新启动apache以使最新配置生效。
]]></description>
			<content:encoded><![CDATA[
<table>
<tr cellpadding=0><td>热度:</td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun_dark.gif' width=10 height=10 border=0 /></td></tr>
</table>
<p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ubuntu Server 10版本的操作系统安装过程中默认可以安装LAMP套件，但要保证apache2正常工作还需要进一步的配置。在站点运行中为了方便搜索引擎的索引，使用最多的就是通过对urlrewrite功能实现对类似/search.php?query=***的url地址静态化重写为/***.html的形式，因此需要在apache中配置urlrewrite功能。<span id="more-54"></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）在apache中配置rewrite功能为可用。在windows环境下的apache中，所有配置都集中在httpd.conf中，并且rewriteengine的配置也已列出，只需要找到相应的加载rewrite功能模块的配置语句，将之前的#注释去掉即可。而在Ubuntu及其他linux/unix版本的操作系统中，apache的配置文件是由/etc/apache2文件夹下多个文件及子文件夹组成，其中mods-available文件夹是apache可配置的模块文件列表，mods-enabled是apache当前正在使用的模块文件列表，因此要配置rewrite功能，只需要把mods-avaiable文件夹下的rewrite.load文件链接到mods-enabled文件夹下的相应文件即可。命令如下：</p>
<pre>sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load</pre>
<p>需要注意的是要修改 /etc/apache2/sites-available/default中 AllowOverride None 修改为： AllowOverride All，以保证rewrite的权限。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）配置好rewrite功能后，即可在站点配置文件中编写rewrite规则了，典型的格式如下：</p>
<pre>rewriteengine on
rewriterule  /(.*).html$ /search.php?query=$1</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;记得配置完成后要用sudo service apache2 restart重新启动apache以使最新配置生效。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chenweionline.cn/archives/54.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Putty登录后Vim中文乱码问题</title>
		<link>http://www.chenweionline.cn/archives/4.htm</link>
		<comments>http://www.chenweionline.cn/archives/4.htm#comments</comments>
		<pubDate>Mon, 09 Nov 2009 13:40:42 +0000</pubDate>
		<dc:creator>陈威</dc:creator>
				<category><![CDATA[Unix/Linux系统]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[中文乱码]]></category>

		<guid isPermaLink="false">http://www.chenweionline.cn/?p=23</guid>
		<description><![CDATA[

热度:

在用Telnet或Putty登录到远程Unix服务器后，vim是用户最常用的文档编辑工具之一。但在使用Telnet或Putty等字符界面工具远程登录服务器时，vim打开包含有中文内容的文件时经常会遇到中文乱码问题，这可能是由于Unix的默认编码方式、vim的默认编码方式以及终端所在操作系统的编码方式不一致导致的。
在安装WordPress的时候，我用vim打开wp-config-sample.php文件时发现里面的中文都变成了乱码，检查发现服务器上的vim全局配置中把默认编码设为了GB2312，而wp-config=sample.php文件的编码方式却是UTF-8。出于安全考虑，不可能通过修改vim的全局配置来解决这个中文乱码问题。不过Unix在每个用户的主目录中都有生成一个.vimrc的vim局部配置文件（如果没有该文件，用户可以自己建立此文件，只需保证其中的内容符合语法规定即可），这个配置文件规定了以此用户名登录的终端在调用vim命令时的默认配置。为了解决打开wp-config-sample.php时的乱码问题，我在.vimrc文件中添加了如下两行内容：
 注意到上图中，修改了设置包括了termencoding, encoding和fileencodings三个选项，实现的功能是把用于终端的编码方式termencoding设为和vim的默认编码方式一致，并且设文件编码方式为utf-8, gb2312, gbk, ucs-bom和cp936（注意，这几个编码是有优先级关系的）.
.vimrc配置文件中和编码相关的参数主要包括以下四个：

encoding

encoding参数设置的vim的内部编码方式，当我们设置了 &#8221;encoding&#8221; 之后，Vim 内部所有的 buffer、寄存器、脚本中的字符串等都将都使用这个编码方式。Vim 在工作的时候，如果编码方式与它的内部编码不一致，它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符，在这些字符就会丢失。因此，在选择 Vim 的内部编码的时候，
一定要使用一种表现能力足够强的编码。由于 &#8221;encoding&#8221; 选项涉及到 Vim 中所有字符的内部表示，因此只能在 Vim 启动的时候设置一次。在 Vim 工作过程中修改 &#8221;encoding&#8221; 会造成非常多的问题。如果没有特别的理由，请始终将 &#8221;encoding&#8221; 设置为 &#8221;utf-8&#8221;。

termencoding

termencoding 是 Vim 用于屏幕显示的编码，在显示的时候，Vim 会把内部编码转换为屏幕编码，再用于输出。内部编码中含有无法转换为屏幕编码的字符时，该字符会变成问号，但不会影响对它的编辑操作。如果 &#8221;termencoding&#8221; 没有设置，
则直接使用 &#8221;encoding&#8221; 不进行转换。

fileencoding

fileencoding参数规定了vim默认的文件编码方式。当 Vim 从磁盘上读取文件的时候，会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同，Vim 就会对编码进行转换。转换完毕后，Vim 会将 &#8221;fileencoding&#8221; 选项设置为文件的编码。当 Vim 存盘的时候，如果 &#8221;encoding&#8221; 和 &#8221;fileencoding&#8221; 不一样，Vim 也会将文件转换成fileencoding定义的编码方式保存。通过打开文件后设置 &#8221;fileencoding&#8221;，我们可以实现文件的编码转换。但是，由于&#8221;fileencoding&#8221; 是在打开文件的时候，由 Vim 进行探测后自动设置的。所以如果出现乱码，我们无法通过在打开文件后重新设置 &#8221;fileencoding&#8221; 来纠正乱码。

fileencodings

fileencodings参数中可以设置多个编码方式以实现对文件编码的自动识别，因此它是fileencoding的复数形式。该参数的值是一个用逗号分隔的列表，列表中的每一项是一种编码的名称。当我们打开文件的时候，VIM [...]]]></description>
			<content:encoded><![CDATA[
<table>
<tr cellpadding=0><td>热度:</td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td><td cellpadding=0><img src='http://www.chenweionline.cn/wp-content/plugins/statpresscn/images/sun.gif' width=10 height=10 border=0 /></td></tr>
</table>
<p><p>在用Telnet或Putty登录到远程Unix服务器后，vim是用户最常用的文档编辑工具之一。但在使用Telnet或Putty等字符界面工具远程登录服务器时，vim打开包含有中文内容的文件时经常会遇到中文乱码问题，这可能是由于Unix的默认编码方式、vim的默认编码方式以及终端所在操作系统的编码方式不一致导致的。</p>
<p>在安装WordPress的时候，我用vim打开wp-config-sample.php文件时发现里面的中文都变成了乱码，检查发现服务器上的vim全局配置中把默认编码设为了GB2312，而wp-config=sample.php文件的编码方式却是UTF-8。出于安全考虑，不可能通过修改vim的全局配置来解决这个中文乱码问题。不过Unix在每个用户的主目录中都有生成一个.vimrc的vim局部配置文件（如果没有该文件，用户可以自己建立此文件，只需保证其中的内容符合语法规定即可），这个配置文件规定了以此用户名登录的终端在调用vim命令时的默认配置。为了解决打开wp-config-sample.php时的乱码问题，我在.vimrc文件中添加了如下两行内容：<span id="more-4"></span></p>
<p><img class="aligncenter size-medium wp-image-24" title="vim乱码问题" src="http://www.chenweionline.cn/wp-content/uploads/2009/11/vim乱码问题-300x28.jpg" alt="vim乱码问题" width="370" height="34" /> 注意到上图中，修改了设置包括了termencoding, encoding和fileencodings三个选项，实现的功能是把用于终端的编码方式termencoding设为和vim的默认编码方式一致，并且设文件编码方式为utf-8, gb2312, gbk, ucs-bom和cp936（注意，这几个编码是有优先级关系的）.</p>
<p>.vimrc配置文件中和编码相关的参数主要包括以下四个：</p>
<ul>
<li><strong>encoding</strong></li>
</ul>
<p style="padding-left: 30px;">encoding参数设置的vim的内部编码方式，当我们设置了 &#8221;encoding&#8221; 之后，Vim 内部所有的 buffer、寄存器、脚本中的字符串等都将都使用这个编码方式。Vim 在工作的时候，如果编码方式与它的内部编码不一致，它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符，在这些字符就会丢失。因此，在选择 Vim 的内部编码的时候，<br />
一定要使用一种表现能力足够强的编码。由于 &#8221;encoding&#8221; 选项涉及到 Vim 中所有字符的内部表示，因此只能在 Vim 启动的时候设置一次。在 Vim 工作过程中修改 &#8221;encoding&#8221; 会造成非常多的问题。如果没有特别的理由，请始终将 &#8221;encoding&#8221; 设置为 &#8221;utf-8&#8221;。</p>
<ul>
<li><strong>termencoding</strong></li>
</ul>
<p style="padding-left: 30px;">termencoding 是 Vim 用于屏幕显示的编码，在显示的时候，Vim 会把内部编码转换为屏幕编码，再用于输出。内部编码中含有无法转换为屏幕编码的字符时，该字符会变成问号，但不会影响对它的编辑操作。如果 &#8221;termencoding&#8221; 没有设置，<br />
则直接使用 &#8221;encoding&#8221; 不进行转换。</p>
<ul>
<li><strong>fileencoding</strong></li>
</ul>
<p style="padding-left: 30px;">fileencoding参数规定了vim默认的文件编码方式。当 Vim 从磁盘上读取文件的时候，会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同，Vim 就会对编码进行转换。转换完毕后，Vim 会将 &#8221;fileencoding&#8221; 选项设置为文件的编码。当 Vim 存盘的时候，如果 &#8221;encoding&#8221; 和 &#8221;fileencoding&#8221; 不一样，Vim 也会将文件转换成fileencoding定义的编码方式保存。通过打开文件后设置 &#8221;fileencoding&#8221;，我们可以实现文件的编码转换。但是，由于&#8221;fileencoding&#8221; 是在打开文件的时候，由 Vim 进行探测后自动设置的。所以如果出现乱码，我们无法通过在打开文件后重新设置 &#8221;fileencoding&#8221; 来纠正乱码。</p>
<ul>
<li><strong>fileencodings</strong></li>
</ul>
<p style="padding-left: 30px;">fileencodings参数中可以设置多个编码方式以实现对文件编码的自动识别，因此它是fileencoding的复数形式。该参数的值是一个用逗号分隔的列表，列表中的每一项是一种编码的名称。当我们打开文件的时候，VIM 按顺序使用 fileencodings 中的编码进行尝试解码，如果成功的话，就使用该编码方式进行解码，并将 &#8221;fileencoding&#8221; 设置为这个值，如果失败的话，就继续试验下一个编码。</p>
<p style="padding-left: 30px;"><strong>Vim是如何支持多编码方式的呢？</strong></p>
<ul>
<li>Vim启动，根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。</li>
</ul>
<ul>
<li>读取需要编辑的文件，根据 fileencodings 中列出的字符编码方式逐一探测该<strong>文件编码</strong>方式。并设置 fileencoding 为探测到的，看起来是正确的字符编码方式。</li>
</ul>
<ul>
<li> 对比 fileencoding 和 encoding 的值，若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式，并且把转换后的内容放到为此文件开辟的 buffer 里，此时我们就可以开始编辑这个文件了。注意，完成这一步动作需要调用外部的 iconv.dll，你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。</li>
</ul>
<ul>
<li>编辑完成后保存文件时，再次对比 fileencoding 和 encoding 的值。若不同，再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式，并保存到指定的文件中。同样，这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符，而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小)，因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时, Vim自动探测文件的编码方式会更准确。在中文 Windows 里编辑的文件，为了兼顾与其他软件的兼容性<strong>,文件编码</strong>还是设置为 GB2312/GBK 比较合适，因此 fileencoding 建议设置为 chinese (chinese 是个别名，在 Unix 里表示 gb2312，在 Windows 里表示cp936，也就是 GBK 的代码页)。</li>
</ul>
<p>关于Vim的更详细信息，可以参考Vim doc项目的网站：<a title="Vim Doc site" href="http://vimcdoc.sourceforge.net/" target="_blank">http://vimcdoc.sourceforge.net/</a></p>
<p>Vim的中文文档下载地址：<a title="下载Vim中文文档" href="http://vimcdoc.sourceforge.net/vim_user_manual_603.0.pdf" target="_blank">http://vimcdoc.sourceforge.net/vim_user_manual_603.0.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chenweionline.cn/archives/4.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

