<?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>等待喝彩_OnEcho &#187; Linux</title>
	<atom:link href="http://www.onecho.com/category/server/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.onecho.com</link>
	<description>http://www.onecho.com  回声的启示</description>
	<lastBuildDate>Sat, 20 Mar 2010 14:26:02 +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>两台服务器间数据移植</title>
		<link>http://www.onecho.com/2009-11-20/513.html</link>
		<comments>http://www.onecho.com/2009-11-20/513.html#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:08:05 +0000</pubDate>
		<dc:creator>Kenami</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[APACHE]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[数据库备份]]></category>
		<category><![CDATA[数据移植]]></category>

		<guid isPermaLink="false">http://www.onecho.com/?p=513</guid>
		<description><![CDATA[因为小说站24note(http://www.24note.cn) 所在的服务器的压力大，再加上软件的问题，导致服务器不稳定，虽然现在的方法是每隔1小时重启下apache，但是也不是长久之计，所以，今天晚上就加班把24note 上面的数据都移植到另外一台服务器上面。]]></description>
			<content:encoded><![CDATA[<p>因为小说站24note(<a href="http://www.24note.cn">http://www.24note.cn</a>) 所在的服务器的压力大，再加上软件的问题，导致服务器不稳定，虽然现在的方法是每隔1小时重启下apache，但是也不是长久之计，所以，今天晚上就加班把24note 上面的数据都移植到另外一台服务器上面。</p>
<p>其实数据移植并不困难，但是数据量真的太大了，小说站上面有大量的静态页、txt文件、手机小说书的jrd 文件等等，还有一个几百兆的数据库，所以就不能用传统的ftp来操作了。</p>
<p>linux 有很多很好的工具，来实现不同服务器间的数据移植。我用的是scp命令：</p>
<p>#scp -r 用户名@原数据所在服务器IP : 原数据的局对路径 当前服务器的数据存放位置<br />
<span id="more-513"></span></p>
<p>例如：</p>
<p>#scp -r <a href="mailto:root@122.193.111.220:/data/wwwroot/24note">root@122.193.111.220:/data/wwwroot/24note</a> /home/</p>
<p>参数 -r 表示复制文件夹，如果是单独的文件可以不加</p>
<p>两台服务器在同一局域网内，但是这条命令已经执行了2个多小时，可见里面的数据可以说是海量了。</p>
<p>其次我有时间来转移下数据库</p>
<p>现在原来的服务器上面做备份：</p>
<p>#mysqldump -uuser -ppasswd db_name &#8211;add-drop-table &gt; /home/**.sql</p>
<p>再用scp 命令将刚备份的sql文件复制到新服务器，然后执行命令，先要保证创建库db_name</p>
<p>#mysql -uuer -p db_name &lt; **.sql</p>
<p>用phpMyAdmin 查看，数据已经完整的过来了，剩下的就是给这些库按照原先的服务器的权限配置来配置权限；</p>
<p>进入mysql命令行</p>
<p>mysql&gt; grant all on db_name.*  to db_user<a href="mailto:kenami@localhost">@localhost</a> identified by <a href="mailto:'eiJ3@3*eO2N9'">&#8216;passwd&#8217;</a>;</p>
<p>在这里localhost 表示此数据库只能在本地访问，如果要其他的服务器能访问这个数据库，把localhost 换成 另一台服务器的IP即可；</p>
<p>夜里两点了，该休息了。明天早上又要睡懒觉了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onecho.com/2009-11-20/513.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APACHE 日志管理，以及apache2.2 的配置问题</title>
		<link>http://www.onecho.com/2009-11-14/501.html</link>
		<comments>http://www.onecho.com/2009-11-14/501.html#comments</comments>
		<pubDate>Sat, 14 Nov 2009 14:14:44 +0000</pubDate>
		<dc:creator>Kenami</dc:creator>
				<category><![CDATA[APACHE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[403错误]]></category>
		<category><![CDATA[apache2.2]]></category>
		<category><![CDATA[rotatelogs]]></category>
		<category><![CDATA[日志截断]]></category>

		<guid isPermaLink="false">http://www.onecho.com/?p=501</guid>
		<description><![CDATA[最近服务器apache经常当机，一时也查不出原因，也只有想着如何去优化一下了。首先想到的是apache 的日志。
其实如果没有必要存储日志，可以禁用日志，这是对于不需要日志分析的情况，如果需要保存日志，又不想日志文件太大，则可以用下面的方法：
就是把日志按照日期分割，每天在服务器上面生成一个单独文件，这样，访问量再大，日志文件的大小也就有限制了。]]></description>
			<content:encoded><![CDATA[<p>最近服务器apache经常当机，一时也查不出原因，也只有想着如何去优化一下了。首先想到的是apache 的日志。<br />
其实如果没有必要存储日志，可以禁用日志，这是对于不需要日志分析的情况，如果需要保存日志，又不想日志文件太大，则可以用下面的方法：<br />
就是把日志按照日期分割，每天在服务器上面生成一个单独文件，这样，访问量再大，日志文件的大小也就有了限制。<br />
打开apache 的配置文件<br />
#vi /usr/local/apache2/conf/httpd.conf<span id="more-501"></span></p>
<p>找到ErrorLog 这一行，改成<br />
ErrorLog &#8220;|/usr/local/apache2.2/bin/rotatelogs /home/kenami/logsrvdata/input/%Y%m%d 86400 480</p>
<p>意思是调用rotatelogs 命令，把日志放进 /home/kenami/logsrcdata/input 文件夹，后面的日期是日志的名字，然后每一天保存一个新的日志</p>
<p>还有错误日志的修改，找到 CustomLog 行，改为：<br />
CustomLog &#8220;|usr/local/apache2.2/bin/rotatelogs /home/kenami/logsrvdata/input/%Y%m%d 86400 480&#8243; common</p>
<p>原理同上。<br />
这样，每天的apache 日志就可以独立成文件，减小了系统存入大日志文件的负担。</p>
<p>还有一个 apache 的日志截断工具，下面是安装方法：<br />
# cd /usr/local/src<br />
# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz<br />
# tar xzvf cronolog-1.6.2.tar.gz<br />
# cd cronolog-1.6.2<br />
# ./configure &#8211;prefix=/usr/local/cronolog<br />
# make<br />
# make install</p>
<p>服务器一直用的apache2，最近想升级一下，就安装了apache2.2.14，安装方法基本一致，但配置的时候还是有几点要注意：<br />
1、虚拟主机配置文件和apache 本来的 httpd.conf文件分离，如果在apache里面配置虚拟主机，需要把httpd.conf中的<br />
# Virtual hosts<br />
#Include conf/extra/httpd-vhosts.conf<br />
下面一行的注释去掉，这样配置虚拟主机有单独的配置文件，就是conf/extra/httpd-vhosts.conf<br />
2、配置好apache 的虚拟主机后，打开页面发现都是403错误，如何解决呢？<br />
原来在httpd.conf 中，默认是禁止了所有访问，</p>
<p>Order allow,deny<br />
Allow from all<br />
Deny from all</p>
<p>把Deny from all 这行注释掉就好。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onecho.com/2009-11-14/501.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转载]centos 5.0 编译安装apache 2.2.6+php5.2.5+mysql5.0.46+Z</title>
		<link>http://www.onecho.com/2008-10-13/403.html</link>
		<comments>http://www.onecho.com/2008-10-13/403.html#comments</comments>
		<pubDate>Mon, 13 Oct 2008 13:13:49 +0000</pubDate>
		<dc:creator>Kenami</dc:creator>
				<category><![CDATA[APACHE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[centos]]></category>

		<guid isPermaLink="false">http://www.onecho.com/2008-10-13/403.html</guid>
		<description><![CDATA[V2.0 2007年2月12日 操作系统更新为centos 5.0 apache 更新为2.2.6版本， php更新为5.2.5,增加集成Suhosin补丁，mysql 更新为5.0.46, Zend Optimizer 更新为3.3.0。解决新平台下的一些问题。修正文字错误。]]></description>
			<content:encoded><![CDATA[<p>V2.0 2007年2月12日 操作系统更新为centos 5.0 apache 更新为2.2.6版本， php更新为5.2.5,增加集成Suhosin补丁，mysql 更新为5.0.46, Zend Optimizer 更新为3.3.0。解决新平台下的一些问题。修正文字错误。</p>
<p>v1.2 2007年2月12日 apache 更新为2.2.4版本，增加mod_ssl和openssl支持，增加apr和apr-util的编译， php更新为5.2.1,增加集成Suhosin补丁，mysql 更新为5.0.33, Zend Optimizer 更新为3.2.2，增加phpmyadmin。修改一些文字错误。</p>
<p>v1.0 2007年1月11日</p>
<p>先声明，我绝对是个Linux的菜鸟，以下的这些文字个人的安装笔记，是参考了网上许多高手的成功经验组合而成的，说实话我自己的东西不多 ：）我想把这些经验写下来，既可以对其他跟我一样摸索的兄弟一个经验，也可以防止以后自己都忘记了，嘿嘿。</p>
<p>所以如果某个大虾看到我借用了你的资源，请你不要生气。也欢迎大家进行指点。</p>
<h4>1、下载centos 5</h4>
<p>我是下载的DVD版本，大家也可以下载服务器CD安装版本，其实都差不多。大家可以到这儿下载，速度很快的。<br />
<a href="http://ftp.iasi.roedu.net/mirrors/centos.org/5/isos/i386/CentOS-5.0-i386-bin-DVD.iso" target="_blank"><span style="color: #0000ff;">http://ftp.iasi.roedu.net/mirrors/ce&#8230;86-bin-DVD.iso</span></a></p>
<p>当然也可以在windows下用BT或迅雷下载，速度也很不错的。</p>
<p>下载后当然就刻录成光盘。我建议你刻录DVD啦，如果是菜鸟，也可以在图形界面进行学习，不会这么抓不住头脑。<span id="more-403"></span></p>
<h4>2、（1）安装CentOS 5</h4>
<p>作为服务器，不安装不需要的组件，所以在选择组件的时候，除了选择FTP SERVER外取消所有组件的选择。也不要选web服务器。因为我们后面要手动编译安装。</p>
<p>系统约定RPM包和源码包存放位置</p>
<p>RPM包和源码包存放位置 /usr/local/src<br />
源码包编译安装位置(prefix) /usr/local/xxx<br />
脚本以及维护程序存放位置 /usr/local/sbin<br />
MySQL 数据库位置 /var/lib/mysql<br />
Apache 网站根目录 /home/www<br />
Apache 虚拟主机日志根目录 /data/logs/www<br />
yum RPM包信息文件 /etc/yum.list</p>
<h4>3、系统环境部署及调整</h4>
<p>（1）. 检查系统是否正常<br />
# more /var/log/messages //检查有无系统内核级错误信息<br />
# demesg //检查硬件设备是否有错误信息<br />
# ifconfig //检查网卡设置是否正确<br />
# ping <a href="http://www.163.com/" target="_blank"><span style="color: #0000ff;">www.163.com</span></a> // 检查网络是否正常</p>
<p>（2）. 关闭不需要的服务<br />
# export LANG=&#8217;en_US&#8217; //设置语言<br />
# setup //选择启动的服务<br />
进入system service 选项。<br />
以space 键选定所需服务。<br />
以下仅列出需要启动的服务，未列出的服务一律关闭：<br />
crond<br />
irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时，才需开启，否则关闭。<br />
microcode_ctl<br />
network<br />
vsftpd<br />
sshd<br />
syslog</p>
<p>（3）、修改/etc/yum.repos.d/CentOS-Base.repo，将镜象站点地址改为在中国的镜象站点地址。不然我们通过yum安装软件速度会极慢。修改如下：</p>
<p># CentOS-Base.repo<br />
#<br />
# This file uses a new mirrorlist system developed by Lance Davis for CentOS.<br />
# The mirror system uses the connecting IP address of the client and the<br />
# update status of each mirror to pick mirrors that are updated to and<br />
# geographically close to the client. You should use this for CentOS updates<br />
# unless you are manually picking other mirrors.<br />
#<br />
# If the mirrorlist= does not work for you, as a fall back you can try the<br />
# remarked out baseurl= line instead.<br />
#<br />
#</p>
<p>[base]<br />
name=CentOS-$releasever &#8211; Base<br />
baseurl=http://mirror.be10.com/centos/$releasever/os/$basearch/<br />
gpgcheck=1<br />
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5<br />
protect=1</p>
<p>#released updates<br />
[updates]<br />
name=CentOS-$releasever &#8211; Updates<br />
baseurl=http://mirror.be10.com/centos/$releasever/updates/$basearch/<br />
gpgcheck=1<br />
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5<br />
protect=1</p>
<p>#packages used/produced in the build but not released<br />
[addons]<br />
name=CentOS-$releasever &#8211; Addons<br />
baseurl=http://mirror.be10.com/centos/$releasever/addons/$basearch/<br />
gpgcheck=1<br />
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5<br />
protect=0</p>
<p>#additional packages that may be useful<br />
[extras]<br />
name=CentOS-$releasever &#8211; Extras<br />
baseurl=http://mirror.be10.com/centos/$releasever/extras/$basearch/<br />
gpgcheck=1<br />
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5<br />
protect=0</p>
<p>#additional packages that extend functionality of existing packages<br />
[centosplus]<br />
name=CentOS-$releasever &#8211; Plus<br />
baseurl=http://mirror.be10.com/centos/$releasever/centosplus/$basearch/<br />
gpgcheck=1<br />
enabled=0<br />
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5<br />
protect=1</p>
<p>#contrib &#8211; packages by Centos Users<br />
[contrib]<br />
name=CentOS-$releasever &#8211; Contrib<br />
baseurl=http://mirror.be10.com/centos/$releasever/contrib/$basearch/<br />
gpgcheck=1<br />
enabled=0<br />
protect=0<br />
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5</p>
<p>#packages in testing<br />
[testing]<br />
name=CentOS-5 &#8211; Testing<br />
baseurl=http://mirror.be10.com/centos/5/testing/i386/</p>
<p>gpgcheck=1<br />
enabled=0<br />
protect=0</p>
<p>保存。</p>
<p>（2）更新系统，我们使用yum,</p>
<p>然后执行：<br />
# yum upgrade<br />
建议更新所有列出的程序，rhel 5.X的稳定性还要继续努力呢。</p>
<p>（4）、定时校正服务器时间<br />
# yum install ntp<br />
# crontab -e<br />
0 23 * * * root /usr/sbin/ntpdate 210.72.145.44 &gt; /dev/null 2&gt;&amp;1</p>
<p>以上命令设置好后存盘。您的机器将在每天的23:00根据中国国家授时中心的NTP服务器时间自动校准时间。</p>
<p>(5). 对TCP/IP网络参数进行调整，加强抗SYN Flood能力<br />
# echo &#8216;net.ipv4.tcp_syncookies = 1&#8242; &gt;&gt; /etc/sysctl.conf //将net.ipv4.tcp_syncookies = 1写入sysctl.conf 文件<br />
# sysctl -p //查看</p>
<p>（6）、FTP服务器的配置<br />
vi /etc/vsftpd/vsftpd.conf<br />
把anonymous_enable=YES注释掉不允许匿名登录。<br />
把chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
前的注释去掉。<br />
把ftpd_banner=*前的注释去掉。后面改成你的欢迎信息(这样设置可以避免显示ftp服务器的版本信息)<br />
然后保存，service vsftpd start就可以了。</p>
<p>这时应当添加用户，因为root默认不能通过FTP方式登录。</p>
<p># adduser username<br />
# passwd userpassword</p>
<p>这样对于我们上传一些文件到系统中很方便。</p>
<h4>4. 重新启动系统</h4>
<p># init 6</p>
<h4>5. 使用 yum 程序安装所需开发包（以下为标准的 RPM 包名称）</h4>
<p># yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel</p>
<p>#这里我们将编译GD所必须的一些小软件比如libpng,libtiff,freetype,libjpeg,等先用RPM的方式一并安装好，避免手动编译浪费时间，同时也能避免很多错误，这几个小软件的编译很麻烦。这几个小软件编译错误了，GD当然安装不了，php5的编译当然也没戏了。所以我们抓大放小，对这些小牛鬼蛇神采取快速简洁的方式进行安装。并且对服务器的性能也不能产生什么影响。<br />
另外libxml2系统已经默认安装了，所以我们不需要手工编译了，直接安装它的开发包就行了。</p>
<h4>6. 源码编译安装所需包 (Source)</h4>
<p>(1) GD2<br />
# cd /usr/local/src<br />
# wget <a href="http://www.boutell.com/gd/http/gd-2.0.34.tar.gz" target="_blank"><span style="color: #0000ff;">http://www.boutell.com/gd/http/gd-2.0.34.tar.gz</span></a><br />
# tar xzvf gd-2.0.34.tar.gz<br />
# cd gd-2.0.34<br />
# CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; ./configure &#8211;prefix=/usr/local/gd2 &#8211;mandir=/usr/share/man //./configure 配置。</p>
<p># make //make 是用来编译的，它从 Makefile 中读取指令，然后编译。<br />
# make install //make install 是用来安装的，它也从 Makefile 中读取指令，安装到指定的位置。</p>
<p>(2) Apache 日志截断程序<br />
# cd /usr/local/src<br />
# wget <a href="http://cronolog.org/download/cronolog-1.6.2.tar.gz" target="_blank"><span style="color: #0000ff;">http://cronolog.org/download/cronolog-1.6.2.tar.gz</span></a><br />
# tar xzvf cronolog-1.6.2.tar.gz<br />
# cd cronolog-1.6.2<br />
# ./configure &#8211;prefix=/usr/local/cronolog<br />
# make<br />
# make install</p>
<h4>7、编译mysql 5.0.46</h4>
<p>mysql 5.0.46是企业版本，貌似双数版本都是企业版本了。个人觉得代码质量要比社区版本要好一些。大家可以下载，免费使用。并不需要向mysql公司交钱。</p>
<p>cd /usr/local/src<br />
# wget <a href="http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-5.0.46.tar.gz" target="_blank"><span style="color: #0000ff;">http://mirror.provenscaling.com/mysq&#8230;-5.0.46.tar.gz</span></a><br />
# tar xzvf mysql-5.0.46.tar.gz<br />
# cd mysql-5.0.46</p>
<p>修改mysql 客户端最大连接数， 默认的只有100,远远达不到我们的要求。</p>
<p># vi sql/mysqld.cc</p>
<p>搜索找到下面一行：<br />
{&#8221;max_connections&#8221;, OPT_MAX_CONNECTIONS,<br />
&#8220;The number of simultaneous clients allowed.&#8221;, (gptr*) &amp;max_connections,<br />
(gptr*) &amp;max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,<br />
0},</p>
<p>将其中的100改为1500, 当然小点也可以，根据你的需要来，不建议改的太大。</p>
<p>{&#8221;max_connections&#8221;, OPT_MAX_CONNECTIONS,<br />
&#8220;The number of simultaneous clients allowed.&#8221;, (gptr*) &amp;max_connections,<br />
(gptr*) &amp;max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,<br />
0},</p>
<p>保存。</p>
<p># CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; ./configure &#8211;prefix=/usr/local/mysql &#8211;localstatedir=/var/lib/mysql &#8211;with-comment=Source &#8211;with-server-suffix=-enterprise-gpl &#8211;with-mysqld-user=mysql &#8211;without-debug &#8211;with-big-tables &#8211;with-charset=utf8 &#8211;with-collation=utf8_general_ci &#8211;with-extra-charsets=all &#8211;with-pthread &#8211;enable-static &#8211;enable-thread-safe-client &#8211;with-client-ldflags=-all-static &#8211;with-mysqld-ldflags=-all-static &#8211;enable-assembler &#8211;without-innodb &#8211;without-ndb-debug &#8211;without-isam</p>
<p>配置成功会提示：</p>
<p>MySQL has a Web site at <a href="http://www.mysql.com/" target="_blank"><span style="color: #0000ff;">http://www.mysql.com/</span></a> which carries details on the<br />
latest release, upcoming features, and other information to make your<br />
work or play with MySQL more productive. There you can also find<br />
information about mailing lists for MySQL discussion.</p>
<p>Remember to check the platform specific part of the reference manual for<br />
hints about installing MySQL on your platform. Also have a look at the<br />
files in the Docs directory.</p>
<p>Thank you for choosing MySQL!</p>
<p>// 注意 ，CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; 这个环境参数只针对intel P4 芯片，如果你的CPU是AMD的，注意不能使用。请查看相应的编译优化参数。否则程序会无法编译，即使编译成功也无法运行，嘿嘿。</p>
<p>关于其他CPU的优化请看我的BLOG的一篇转贴：<br />
<a href="http://www.cnprint.org/bbs/blogs/1/blog43.html" target="_blank"><span style="color: #800080;">http://www.cnprint.org/bbs/blogs/1/blog43.html</span></a></p>
<p># make<br />
编译的时间可能会比较长，毕竟优化的比较厉害。</p>
<p># make install</p>
<p>编译安装完成后执行后续操作：<br />
# useradd mysql //添加 mysql 用户<br />
# cd /usr/local/mysql<br />
# bin/mysql_install_db &#8211;user=mysql<br />
# chown -R root:mysql . //设置权限，注意后面有一个 &#8220;.&#8221;<br />
# chown -R mysql /var/lib/mysql //设置 mysql 目录权限<br />
# chgrp -R mysql . //注意后面有一个 &#8220;.&#8221;<br />
# cp share/mysql/my-medium.cnf /etc/my.cnf<br />
# cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld //开机自动启动 mysql。<br />
# chmod 755 /etc/rc.d/init.d/mysqld<br />
# chkconfig &#8211;add mysqld<br />
# /etc/rc.d/init.d/mysqld start //启动 MySQL<br />
# bin/mysqladmin -u root password &#8220;password_for_root&#8221;<br />
# service mysqld stop //关闭 MySQL</p>
<h4>8. 编译安装 Apache</h4>
<p># cd /usr/local/src<br />
# wget <a href="http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz" target="_blank"><span style="color: #0000ff;">http://www.ip97.com/apache.org/httpd/httpd-2.2.6.tar.gz</span></a><br />
# tar zxvf httpd-2.2.6.tar.gz<br />
# cd httpd-2.2.6</p>
<p>依次安装apr和apr-util</p>
<p># cd srclib/apr<br />
# CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; ./configure &#8211;prefix=/usr/local/apr &#8211;enable-threads &#8211;enable-other-child &#8211;enable-static<br />
# make &amp;&amp; make install</p>
<p># cd ../apr-util<br />
# CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; ./configure &#8211;prefix=/usr/local/apr-util &#8211;with-apr=/usr/local/apr/ &#8211;with-mysql=/usr/local/mysql<br />
# make &amp;&amp; make install</p>
<p>cd /usr/local/src/httpd-2.2.6<br />
# CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; ./configure &#8211;prefix=/usr/local/apache2 &#8211;enable-mods-shared=all &#8211;with-mysql=/usr/local/mysql &#8211;enable-cache &#8211;enable-file-cache &#8211;enable-mem-cache &#8211;enable-disk-cache &#8211;enable-static-support &#8211;enable-static-htpasswd &#8211;enable-static-htdigest &#8211;enable-static-rotatelogs &#8211;enable-static-logresolve &#8211;enable-static-htdbm &#8211;enable-static-ab &#8211;enable-static-checkgid &#8211;disable-cgid &#8211;disable-cgi &#8211;with-apr=/usr/local/apr/ &#8211;with-apr-util=/usr/local/apr-util/ &#8211;enable-ssl &#8211;with-ssl=/usr/include/openssl</p>
<p># make<br />
# make install<br />
# echo &#8216;/usr/local/apache2/bin/apachectl start &#8216; &gt;&gt; /etc/rc.local //将 apachectl 的调用加入到你的系统启动文件中。</p>
<p>注解：<br />
./configure //配置源代码树<br />
&#8211;prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ，也就Apache的安装目录。<br />
&#8211;enable-module=so //打开 so 模块，so 模块是用来提 DSO 支持的 apache 核心模块<br />
&#8211;enable-mods-shared=all //编译全部的模板，对于不需要我们可以在httpd.conf去掉。<br />
&#8211;enable-cache //支持缓存<br />
&#8211;enable-file-cache //支持文件缓存<br />
&#8211;enable-mem-cache //支持记忆缓存<br />
&#8211;enable-disk-cache //支持磁盘缓存<br />
&#8211;enable-static-support //支持静态连接(默认为动态连接)<br />
&#8211;enable-static-htpasswd //使用静态连接编译 htpasswd &#8211; 管理用于基本认证的用户文件<br />
&#8211;enable-static-htdigest //使用静态连接编译 htdigest &#8211; 管理用于摘要认证的用户文件<br />
&#8211;enable-static-rotatelogs //使用静态连接编译 rotatelogs &#8211; 滚动 Apache 日志的管道日志程序<br />
&#8211;enable-static-logresolve //使用静态连接编译 logresolve &#8211; 解析 Apache 日志中的IP地址为主机名<br />
&#8211;enable-static-htdbm //使用静态连接编译 htdbm &#8211; 操作 DBM 密码数据库<br />
&#8211;enable-static-ab //使用静态连接编译 ab &#8211; Apache HTTP 服务器性能测试工具<br />
&#8211;enable-static-checkgid //使用静态连接编译 checkgid<br />
&#8211;disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本<br />
&#8211;disable-cgi //禁止编译 CGI 版本的 PHP<br />
&#8211;enable-ssl // 编译 ssl模块。</p>
<p>我们不再使用worker模式编译apache，worker模式和php貌似有一些不协调不稳定之处。所以使用了默认的perfork模式。</p>
<p>将apache设置成开机自启动:</p>
<p>在/etc/rc.d/rc.local文件中加入一行<br />
/usr/local/apache2/bin/apachectl start<br />
这样每次重新启动系统以后,apache也会随系统一起启动.</p>
<p>或者<br />
# cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd<br />
然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)<br />
# chkconfig: 2345 10 90<br />
# description: Activates/Deactivates Apache Web Server<br />
最后，运行chkconfig把Apache添加到系统的启动服务组里面：<br />
# chkconfig &#8211;add httpd<br />
# chkconfig httpd on</p>
<h4>9、编译php 5.2.5-devel。</h4>
<p>php 5.2.4有点小BUG，无法在centos 5上正常编译，官方已经在php5.2.5中修复了。所以我们使用php 5.2.5进行编译。<br />
Suhosin是php增强型安全补丁，可以编译到静态内核中，也可以编译成php动态扩展。我个人强烈你建议安装成静态内核。Suhosin已经进入freebsd和gentoo的ports。下面的以下先说静态安装步骤。当然你也可以在安装php后将它编译成php的动态扩展。</p>
<p># cd /usr/local/src<br />
# wget <a href="http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror" target="_blank"><span style="color: #0000ff;">http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror</span></a><br />
wget <a href="http://www.hardened-php.net/suhosin/_media/suhosin-patch-5.2.5-0.9.6.2.patch.gz" target="_blank"><span style="color: #0000ff;">http://www.hardened-php.net/suhosin/&#8230;9.6.2.patch.gz</span></a><br />
# tar zxvf php-5.2.5.tar.gz<br />
# gunzip suhosin-patch-5.2.1-0.9.6.2.patch.gz<br />
# cd php-5.2.5</p>
<p># CHOST=&#8221;i686-pc-linux-gnu&#8221; CFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; CXXFLAGS=&#8221;-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer&#8221; ./configure &#8211;prefix=/usr/local/php &#8211;with-apxs2=/usr/local/apache2/bin/apxs &#8211;with-pear=/usr/share/php &#8211;with-zlib-dir &#8211;with-bz2 &#8211;with-libxml-dir=/usr &#8211;with-gd=/usr/local/gd2 &#8211;enable-gd-native-ttf &#8211;enable-gd-jis-conv &#8211;with-freetype-dir &#8211;with-jpeg-dir &#8211;with-png-dir &#8211;with-ttf=shared,/usr &#8211;enable-mbstring &#8211;with-mysql=/usr/local/mysql &#8211;with-mysqli=/usr/local/mysql/bin/mysql_config &#8211;with-config-file-path=/etc &#8211;with-iconv &#8211;disable-ipv6 &#8211;enable-static &#8211;enable-maintainer-zts &#8211;enable-zend-multibyte &#8211;enable-inline-optimization &#8211;enable-zend-multibyte &#8211;enable-sockets &#8211;enable-soap &#8211;with-openssl</p>
<p>配置成功会提示：</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
| License: |<br />
| This software is subject to the PHP License, available in this |<br />
| distribution in the file LICENSE. By continuing this installation |<br />
| process, you are bound by the terms of this license agreement. |<br />
| If you do not agree with the terms of this license, you must abort |<br />
| the installation process at this point. |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+</p>
<p>Thank you for using PHP.</p>
<p># make</p>
<p># make install</p>
<p># cp php.ini-recommended /etc/php.ini</p>
<p>在这里也顺便说一下将suhosin安装成为php的动态扩展的方法。毕竟网上根本不见它的中文安装教程。</p>
<p>虽然我个人不推荐这种方式。</p>
<p>wget <a href="http://www.hardened-php.net/suhosin/_media/suhosin-0.9.16.tgz" target="_blank"><span style="color: #0000ff;">http://www.hardened-php.net/suhosin/&#8230;sin-0.9.16.tgz</span></a><br />
tar zxvf suhosin-0.9.16.tgz<br />
cd suhosin-0.9.16<br />
./configure &#8211;with-php-config=/usr/local/php/bin/php-config<br />
make<br />
make install</p>
<p>会提示编译的模块存在的目录，记住它。<br />
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/</p>
<p>然后在php.ini中增加一行下列语句。<br />
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/suhosin.so</p>
<h4>10 、整合apache 与php</h4>
<p># vi /usr/local/apache2/conf/httpd.conf<br />
在最后一行加上：<br />
AddType application/x-httpd-php .php</p>
<p>查找：(设置 WEB 默认文件)<br />
DirectoryIndex index.html<br />
替换为：<br />
DirectoryIndex index.php index.html index.htm //在 WEB 目录不到默认文件，httpd 就会执行 /var/www/error/noindex.html</p>
<p>找到这一段：<br />
# AllowOverride controls what directives may be placed in .htaccess files.<br />
# It can be &#8220;All&#8221;, &#8220;None&#8221;, or any combination of the keywords:<br />
# Options FileInfo AuthConfig Limit<br />
#<br />
AllowOverride none</p>
<p>更改为AllowOverride all<br />
允许apache rewrite</p>
<p># 监听443端口,支持https连接<br />
取消注释 httpd.conf 中的 Include conf/extra/httpd-ssl.conf</p>
<p>保存httpd.conf，退出。</p>
<p># /usr/local/apache2/bin/apachectl restart //重启 Apache</p>
<p>这时会出现错误：</p>
<p>/usr/local/apache2/bin/apachectl start<br />
httpd: Syntax error on line 107 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied</p>
<p>不急，我们慢慢解决。</p>
<p>先重启下机器：<br />
reboot<br />
这个Permission denied问题，在centos 5下面一般是Selinux引起的，作为生产用服务器，我建议你千万别草率地关掉Selinux一了百了。就像家里的防盗网，阻碍了你的猫自由进出窗户，你不能为了猫方便，就把防盗网简单拆除是同样的道理。我看见网上许多人建议把Selinux简单关闭来解决这个问题，很不以为然。<br />
我们可以这样操作：</p>
<p># audit2allow -d<br />
allow initrc_t usr_t:file execmod;<br />
allow mount_t default_t:file execute;</p>
<p># cd /etc/selinux/targeted/modules/<br />
# audit2allow -M local -d</p>
<p>屏幕产生如下提示：</p>
<p>产生类型强制文件：local.te<br />
正在编译策略<br />
checkmodule -M -m -o local.mod local.te<br />
semodule_package -o local.pp -m local.mod</p>
<p>********************重要 ***********************</p>
<p>为了在内核中加载这个新创建的策略软件包，<br />
您需要执行</p>
<p>semodule -i local.pp</p>
<p>我们运行</p>
<p># semodule -i local.pp</p>
<p>这样就让Selinux加载了新的规则。</p>
<p>更详细的内容请看我在BLOG上的转贴：</p>
<p><a href="http://www.cnprint.org/bbs/blogs/1/blog48.html" target="_blank"><span style="color: #0000ff;">http://www.cnprint.org/bbs/blogs/1/blog48.html</span></a></p>
<p>reboot</p>
<p>哈哈，apache不会再报错了吧？<br />
这样我保留了selinux的功能，同时apache也能正常运行。</p>
<h4>11. 查看确认 L.A.M.P 环境信息</h4>
<p>vi /usr/local/apache2/htdocs/phpinfo.php</p>
<p>新增加下面一行，并保存。</p>
<p>&lt;?php phpinfo(); ?&gt;</p>
<p># chmod 755 /usr/local/apache2/htdocs/phpinfo.php</p>
<p>用浏览器打开 <a href="http://127.0.0.1/phpinfo.php" target="_blank"><span style="color: #0000ff;">http://127.0.0.1/phpinfo.php</span></a></p>
<p># echo &#8216; &#8216; &gt; /usr/local/apache2/htdocs/testdb.php<br />
# chmod 755 /usr/local/apache2/htdocs/testdb.php<br />
# service mysqld start<br />
用浏览器打开 <a href="http://127.0.0.1/testdb.php" target="_blank"><span style="color: #0000ff;">http://127.0.0.1/testdb.php</span></a><br />
检查 phpinfo 中的各项信息是否正确。</p>
<h4>12、设置SSL并创建自己的CA</h4>
<p># cd /usr/share/ssl/misc</p>
<p># ./CA -newca</p>
<p>屏幕上出现如下的提示:CA certificate filename (or enter to create)</p>
<p>这是要求输入要创建的CA的证书文件名, 可以直接回车或输入证书文件名。</p>
<p>Making CA certificate &#8230;<br />
Generating a 1024 bit RSA private key<br />
&#8230;&#8230;&#8230;++++++<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..++++++<br />
writing new private key to &#8216;./demoCA/private/./cakey.pem&#8217;<br />
Enter PEM pass phrase:</p>
<p>Verifying password &#8211; Enter PEM pass phrase:-</p>
<p>此时要求输入和验证CA的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。</p>
<p>至此,在当前目录下生成了demoCA的目录,CA的证书就在该目录下,文件名为cacert.pem</p>
<p>生成服务器的证书请求</p>
<p># ./CA -newreq</p>
<p>屏幕上出现如下的提示:</p>
<p>Generating a 1024 bit RSA private key<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..++++++<br />
&#8230;..++++++<br />
writing new private key to &#8216;newreq.pem&#8217;<br />
Enter PEM pass phrase:<br />
Verifying password &#8211; Enter PEM pass phrase:</p>
<p>此时要求输入和验证服务器的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。</p>
<p>Please enter the following &#8216;extra&#8217; attributes</p>
<p>to be sent with your certificaterequest</p>
<p>A challenge password []:</p>
<p>An optional company name []:</p>
<p>.Request (and private key) is in newreq.pem</p>
<p>这是要求输入服务器的相关信息。</p>
<p>此时,在当前目录下生成了一个名为newreq.pem的文件,包含了要生成服务器数字证书的请求。</p>
<p>签署证书</p>
<p># ./CA -sign</p>
<p>屏幕上出现如下的提示:</p>
<p>Using configuration from /usr/share/ssl/openssl.cnf</p>
<p>Enter PEM pass phrase:</p>
<p>此时一样需要输入CA的私钥口令、国家代码（中国是CN）、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。</p>
<p>Certificate is to be certified until Nov 19 13:46:19 2002 GMT (365 days)</p>
<p>Sign the certificate? [y/n]:y</p>
<p>这时显示证书请求文件中的各项信息,并询问是否要签署证书，回答y，进行签署。</p>
<p>1 out of 1 certificate requests certified, commit? [y/n]y</p>
<p>回答y,会显示已经签署的证书的信息,并在当前目录下生成服务器的证书文件newcert.pem。</p>
<p># mkdir /usr/local/apache2/conf/ssl.crt/<br />
# mkdir /usr/local/apache2/conf/ssl.key/<br />
# cp newcert.pem /usr/local/apache2/conf/ssl.crt/server.pem<br />
# cp newreq.pem /usr/local/apache2/conf/ssl.key/server.pem</p>
<p>更改服务器的证书文件的相关配置<br />
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf</p>
<p>查找并修改</p>
<p># Server Certificate:<br />
# Point SSLCertificateFile at a PEM encoded certificate. If<br />
# the certificate is encrypted, then you will be prompted for a<br />
# pass phrase. Note that a kill -HUP will prompt again. Keep<br />
# in mind that if you have both an RSA and a DSA certificate you<br />
# can configure both in parallel (to also allow the use of DSA<br />
# ciphers, etc.)<br />
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.pem<br />
#SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt</p>
<p># Server Private Key:<br />
# If the key is not combined with the certificate, use this<br />
# directive to point at the key file. Keep in mind that if<br />
# you&#8217;ve both a RSA and a DSA private key you can configure<br />
# both in parallel (to also allow the use of DSA ciphers, etc.)<br />
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.pem<br />
#SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key</p>
<p>示例文件</p>
<p>在SSL的根目录中生成一个index.html,它是如下所示:</p>
<p>＜html＞</p>
<p>这是SSL示例!</p>
<p>＜/html＞</p>
<p>测试</p>
<p>假如Web服务器的DNS名称是<a href="http://www.cnprint.org/" target="_blank"><span style="color: #0000ff;">www.cnprint.org</span></a>.</p>
<p>在浏览器的URL地址栏里输入 <a href="http://www.cnprint.org/ï¼Œæµè§ˆå™¨ä¾¿ä¼šæ˜¾ç¤ºAPACHEå®‰è£…æ—¶ç¡®çœçš„Test" target="_blank"><span style="color: #0000ff;">http://www.cnprint.org/，浏览器便会显示APACHE安装时确省的Test</span></a> Page.</p>
<p>在浏览器的URL地址栏里输入 <a href="https://www.cnprint.org/ï¼Œæ³¨æ„:æ˜¯" target="_blank"><span style="color: #0000ff;">https://www.cnprint.org/，注意:是</span></a> https 而不是http !</p>
<p>浏览器会提示站点已经采用了SSL进行数据的加密传输.由于我们的CA证书不是浏览器缺省的信任的根证书,所以,浏览器会说无法确认服务器的证书可信。暂时不管,一直NEXT,最后,浏览器会显示:这是SSL示例!</p>
<p>可以把CA的证书放在非SSL的站点上,让浏览器下载并安装CA证书,并将其设置成可信任的根证书,便可解决上面的问题.8 解除HTTPD起动时的口令输入。</p>
<p>由于安全的原因,Web服务器的私钥是口令加密了的，每次重新起动HTTPD或Linux时,都会要求输入Web服务器的私钥的口令。</p>
<p>如果要解除HTTPD起动时的口令输入,可以这样:</p>
<p># cd /usr/local/apache2/conf/ssl.key/<br />
# cp server.pem server.pem.org<br />
# openssl rsa -in server.pem.org -out server.pem<br />
# chmod 400 server.pem</p>
<p>另外在网上看到一个方法，我没有试。有兴趣的可以试下。</p>
<p>创建SSL密码自动应答文件，否则每次Apache启动的时候，都会要求你输入SSL的密码.<br />
创建 /usr/local/apache2/conf/ssl.key/sendsslpwd ,内容如下.<br />
#!/bin/bash<br />
SSLpasswd=&#8221;YOUR PASSPHRASE&#8221;<br />
echo $SSLpasswd<br />
chmod 755 /usr/local/apache2/conf/ssl.key/sendsslpwd</p>
<p>此时，Web服务器的私钥已经没有口令加密,一定要确保server.pem文件除root外,任何用户均无权读取它。</p>
<h4>13、安装 Zend Optimizer</h4>
<p># cd /usr/local/src<br />
# wget <a href="http://downloads.zend.com/optimizer/3.3.0/ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz" target="_blank"><span style="color: #0000ff;">http://downloads.zend.com/optimizer/&#8230;21-i386.tar.gz</span></a><br />
# tar xzvf ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz<br />
# ./ZendOptimizer-3.3.0-linux-glibc21-i386/install.sh<br />
按照它的提示一步步进行就行了。<br />
总之一句话。如果你的服务器环境不需要ZendOptimizer，那么能不安就不安装这个。避免和eaccelerator冲突。</p>
<h4>14、安装eaccelerator // eaccelerator是php的加速软件，使用后php的执行效率会有较大幅度的提升。</h4>
<p>目前eaccelerator 0.9.5.2已经和ZendOptimizer-3.3.0能够基本上兼容啦。不过我个人觉得，ZendOptimizer-3.3.0没有加速的功能，反而使php运行变慢，只是起到了运行zend加密文件的作用而已。闲话不多说了，大家有兴趣的，可以去google下。</p>
<p># cd /usr/local/src<br />
# wget <a href="http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2" target="_blank"><span style="color: #0000ff;">http://bart.eaccelerator.net/source/&#8230;.9.5.2.tar.bz2</span></a><br />
# tar -jxvf eaccelerator-0.9.5.2.tar.bz2<br />
# cd eaccelerator-0.9.5.2</p>
<p>export PHP_PREFIX=&#8221;/usr/local/php&#8221;<br />
$PHP_PREFIX/bin/phpize //指定一下php的目录</p>
<p># ./configure &#8211;enable-eaccelerator=shared &#8211;with-php-config=$PHP_PREFIX/bin/php-config // 设置</p>
<p># make &amp; make install</p>
<p>编译安装后我们会看到屏幕提示的eaccelerator.so所在的目录，比如我得到的是/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so，记住这个路径，待会要用到。</p>
<p>修改php.ini（安装完zend之后，php.ini存放于/usr/local/Zend/etc）<br />
在文件最后，zend之前，注意，这部分内容务必放在zend之前，不然可能会出现不可预期的服务器问题。添加下列信息：</p>
<p>[eaccelerator]<br />
extension=&#8221;/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so&#8221;<br />
eaccelerator.shm_size=&#8221;32&#8243;<br />
eaccelerator.cache_dir=&#8221;/tmp/eaccelerator&#8221;<br />
eaccelerator.enable=&#8221;1&#8243;<br />
eaccelerator.optimizer=&#8221;1&#8243;<br />
eaccelerator.check_mtime=&#8221;1&#8243;<br />
eaccelerator.debug=&#8221;0&#8243;<br />
eaccelerator.filter=&#8221;"<br />
eaccelerator.shm_max=&#8221;0&#8243;<br />
eaccelerator.shm_ttl=&#8221;0&#8243;<br />
eaccelerator.shm_prune_period=&#8221;0&#8243;<br />
eaccelerator.shm_only=&#8221;0&#8243;<br />
eaccelerator.compress=&#8221;1&#8243;<br />
eaccelerator.compress_level=&#8221;9&#8243;</p>
<p>解释:<br />
zend_extension 是安装完程序自动指示给我们的<br />
eaccelerator.shm_size=&#8221;32&#8243; 缓存大小单位MB<br />
eaccelerator.cache_dir=&#8221;/tmp/eaccelerator&#8221; 缓存路径</p>
<p># mkdir /tmp/eaccelerator // 建立目录<br />
# chmod 0777 /tmp/eaccelerator // 修改目录属性</p>
<p>最后重新启动apachectl</p>
<p>重启apache，phpinfo显示：<br />
This program makes use of the Zend Scripting Language Engine:<br />
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies<br />
with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator<br />
with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies<br />
with Zend Optimizer v3.3.0, Copyright (c) 1998-2006, by Zend Technologies</p>
<p>也会有eAccelerator的具体信息。</p>
<h4>15、安装phpmyadmin，管理mysql数据库</h4>
<p># cd /usr/local/apache2/htdocs/<br />
# wget <a href="http://nchc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz" target="_blank"><span style="color: #0000ff;">http://nchc.dl.sourceforge.net/sourc&#8230;-8-only.tar.gz</span></a></p>
<p># tar zxvf phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz<br />
# mv phpMyAdmin-2.11.1-all-languages-utf-8-only phpmyadmin</p>
<p># cd phpmyadmin/libraries</p>
<p>修改配置文件<br />
# vi config.default.php</p>
<p>找到这几行进行修改：<br />
$cfg['Servers'][$i]['auth_type'] = &#8216;http&#8217;; // Authentication method (valid choices: config, http, HTTP, signon or cookie)<br />
$cfg['Servers'][$i]['user'] = &#8216;root&#8217;; // MySQL user<br />
$cfg['Servers'][$i]['password'] = &#8216;PASSWORD&#8217;; // MySQL password (only needed</p>
<p>经过这几个步骤，我们一个比较安全的LAMP服务器就环境基本建立成功啦。感觉上也不是很难，是吧？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onecho.com/2008-10-13/403.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MYSQL命令行模式管理MySql的一点心得</title>
		<link>http://www.onecho.com/2008-09-03/118.html</link>
		<comments>http://www.onecho.com/2008-09-03/118.html#comments</comments>
		<pubDate>Wed, 03 Sep 2008 08:02:32 +0000</pubDate>
		<dc:creator>Kenami</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[心得]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://blog.oneilove.com.cn/?p=118</guid>
		<description><![CDATA[MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个"Linux+Apache+PHP+MySql"平台,这是一个最省钱的高效平台.在使用MySql进行开发时,MySql自带的文档对于新手来说是份很好的参考资料.本文是我在使用MySql中的小小心得。

]]></description>
			<content:encoded><![CDATA[<div id="textbody" class="content">
<p><span style="color: #000000;">MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个&#8221;Linux+Apache+PHP+MySql&#8221;平台,这是一个最省钱的高效平台.在使用MySql进行开发时,MySql自带的文档对于新手来说是份很好的参考资料.本文是我在使用MySql中的小小心得。</span></p>
<p><span style="color: #000000;">当前一般用户的开发环境多是Windows或Linux，用户可以到http://www.codepub.com/software/index.html下载相关版本进行安装，在windows中MySql以服务形式存在，在使用前应确保此服务已经启动，未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart&#8221;命令，注意启动者应具有管理员权限。</span></p>
<p><span style="color: #000000;">刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户，这是很大的安全隐患，对于一些重要的应用我们应将安全性尽可能提高，在这里应把匿名帐户删除、root帐户设置密码，可用如下命令进行：</span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">usemysql;</span><span style="color: #000000;">deletefromUserwhereUser=&#8221;";</span><span style="color: #000000;">updateUsersetPassword=PASSWORD(&#8217;newpassword&#8217;)whereUser=&#8217;root&#8217;;</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;">如果要对用户所用的登录终端进行限制，可以更新User表中相应用户的Host字段，在进行了以上更改后应重新启动数据库服务，此时登录时可用如下类似命令：</span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql-uroot-p;</span><span style="color: #000000;">mysql-uroot-pnewpassword;</span><span style="color: #000000;">mysqlmydb-uroot-p;</span></p>
<p><span style="color: #000000;">mysqlmydb-uroot-pnewpassword;</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;">上面命令参数是常用参数的一部分，详细情况可参考文档。此处的mydb是要登录的数据库的名称。</span></p>
<p><span style="color: #000000;">在进行开发和实际应用中，用户不应该只用root用户进行连接数据库，虽然使用root用户进行测试时很方便，但会给系统带来重大安全隐患，也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过User表来实现的，添加新用户常用的方法有两个，一是在User表插入相应的数据行，同时设置相应的权限；二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下：</span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">grantallonmydb.*toNewUserName@HostNameidentifiedby&#8221;password&#8221;;</span><span style="color: #000000;">grantusageon*.*toNewUserName@HostNameidentifiedby&#8221;password&#8221;;</span><span style="color: #000000;">grantselect,insert,updateonmydb.*toNewUserName@HostNameidentifiedby&#8221;password&#8221;;</span></p>
<p><span style="color: #000000;">grantupdate,deleteonmydb.TestTabletoNewUserName@HostNameidentifiedby&#8221;password&#8221;;</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;">若要给此用户赋予他在相应对象上的权限的管理能力，可在GRANT后面添加WITHGRANTOPTION选项。而对于用插入User表添加的用户，Password字段应用PASSWORD函数进行更新加密，以防不轨之人窃看密码。对于那些已经不用的用户应给予清除，权限过界的用户应及时回收权限，回收权限可以通过更新User表相应字段，也可以使用REVOKE操作。</span></p>
<p><span style="color: #000000;">下面给出本人从其它资料获得的对常用权限的解释：</span></p>
<p><strong><span style="color: #000000;">全局管理权限： </span></strong></p>
<p><span style="color: #000000;">FILE:在MySQL服务器上读写文件。 </span></p>
<p><span style="color: #000000;">PROCESS:显示或杀死属于其它用户的服务线程。 </span></p>
<p><span style="color: #000000;">RELOAD:重载访问控制表，刷新日志等。 </span></p>
<p><span style="color: #000000;">SHUTDOWN:关闭MySQL服务。</span></p>
<p><strong><span style="color: #000000;">数据库/数据表/数据列权限： </span></strong></p>
<p><span style="color: #000000;">Alter:修改已存在的数据表(例如增加/删除列)和索引。 </span></p>
<p><span style="color: #000000;">Create:建立新的数据库或数据表。 </span></p>
<p><span style="color: #000000;">Delete:删除表的记录。 </span></p>
<p><span style="color: #000000;">Drop:删除数据表或数据库。 </span></p>
<p><span style="color: #000000;">INDEX:建立或删除索引。 </span></p>
<p><span style="color: #000000;">Insert:增加表的记录。 </span></p>
<p><span style="color: #000000;">Select:显示/搜索表的记录。 </span></p>
<p><span style="color: #000000;">Update:修改表中已存在的记录。</span></p>
<p><strong><span style="color: #000000;">特别的权限： </span></strong></p>
<p><span style="color: #000000;">ALL:允许做任何事(和root一样)。 </span></p>
<p><span style="color: #000000;">USAGE:只允许登录&#8211;其它什么也不允许做。 </span></p>
<p><span style="color: #000000;">最后给出本人在RedHat9.0下的MySql操作演示：</span></p>
<p><span style="color: #000000;">选用数据库的root用户登录</span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">[weiwen@weiwenlinux]$mysql-uroot-p</span><span style="color: #000000;">Enterpassword:MyPassword</span><span style="color: #000000;">mysql&gt;createdatabasemydb;</span></p>
<p><span style="color: #000000;">QueryOK,1rowaffected(0.02sec)</span></p>
<p><span style="color: #000000;">mysql&gt;usemydb;</span></p>
<p><span style="color: #000000;">Databasechanged</span></p>
<p><span style="color: #000000;">mysql&gt;createtableTestTable(Idintaut_incrementprimarykey,</span></p>
<p><span style="color: #000000;">UserNamevarchar(16)notnull,</span></p>
<p><span style="color: #000000;">Addressvarchar(255));</span></p>
<p><span style="color: #000000;">QueryOK,0rowsaffected(0.02sec)</span></p>
<p><span style="color: #000000;">mysql&gt;grantallonmydb.*totest@localhostidentifiedby&#8221;test&#8221;;</span></p>
<p><span style="color: #000000;">QueryOK,0rowsaffected(0.01sec)</span></p>
<p><span style="color: #000000;">mysql&gt;quit</span></p>
<p><span style="color: #000000;">Bye</span></p>
<p><span style="color: #000000;">[weiwen@weiwenlinux]$mysqlmydb-utest-ptest</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;">其中test.sql是用vi编辑好的SQL脚本，其内容为：</span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">InsertintoTestTable(UserName,Address)values(&#8217;Tom&#8217;,&#8217;shanghai&#8217;);</span><span style="color: #000000;">InsertintoTestTable(UserName,Address)values(&#8217;John&#8217;,'beijing&#8217;);</span><span style="color: #000000;">select*fromTestTable;</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;">运行已经编辑好的SQL脚本可以用sourcefilename或.filename。</span></p>
<p><span style="color: #000000;">以上只是对新手的简单练习，要成为一个数据库好手，当以孜孜不倦地追求知识，不断地思考、尝试、再思考。</span></p>
<p><span style="color: #000000;">。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</span></p>
<p><strong><span style="color: #000000;">MySql常用命令总结 </span></strong></p>
<p><span style="color: #000000;">这两天搞个网站，又用到MySql,可是命令却一个都想不起来，所以，趁这次机会，把这些整理一下，权当作笔记吧，以便自己以后查阅！ </span></p>
<p><strong><span style="color: #000000;">1:使用SHOW语句找出在服务器上当前存在什么数据库： </span></strong></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;SHOWDATABASES; </span></td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000000;">2:2、创建一个数据库MYSQLDATA </span></strong></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;CreateDATABASEMYSQLDATA;</span></td>
</tr>
</tbody>
</table>
<p> </p>
<p><span style="color: #000000;"><strong>3:选择你所创建的数据库</strong> </span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;USEMYSQLDATA;(按回车键出现Databasechanged时说明操作成功！) </span></td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000000;">4:查看现在的数据库中存在什么表 </span></strong></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;SHOWTABLES; </span></td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000000;">5:创建一个数据库表 </span></strong></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;CreateTABLEMYTABLE(nameVARCHAR(20),sexCHAR(1)); </span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;"><strong>6:显示表的结构：</strong> </span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;DESCRIBEMYTABLE;</span></td>
</tr>
</tbody>
</table>
<p> </p>
<p><span style="color: #000000;"><strong>7:往表中加入记录</strong> </span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;insertintoMYTABLEvalues(&#8221;hyq&#8221;,&#8221;M&#8221;); </span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;"><strong>8:用文本方式将数据装入数据库表中</strong>（例如D:/mysql.txt） </span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;LOADDATALOCALINFILE&#8221;D:/mysql.txt&#8221;INTOTABLEMYTABLE; </span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;"><strong>9:导入.sql文件命令</strong>（例如D:/mysql.sql） </span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;usedatabase; </span><span style="color: #000000;">mysql&gt;sourced:/mysql.sql; </span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;"><strong>10:删除表</strong> </span></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;dropTABLEMYTABLE; </span></td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000000;">11:清空表 </span></strong></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;deletefromMYTABLE; </span></td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000000;">12:更新表中数据 </span></strong></p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#fdfddf"><span style="color: #000000;">mysql&gt;updateMYTABLEsetsex=&#8221;f&#8221;wherename=&#8217;hyq&#8217;;</span></td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.onecho.com/2008-09-03/118.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux服务器 Grep命令详解</title>
		<link>http://www.onecho.com/2008-09-03/114.html</link>
		<comments>http://www.onecho.com/2008-09-03/114.html#comments</comments>
		<pubDate>Wed, 03 Sep 2008 07:59:33 +0000</pubDate>
		<dc:creator>Kenami</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[Grep命令]]></category>
		<category><![CDATA[全面搜索]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://blog.oneilove.com.cn/?p=114</guid>
		<description><![CDATA[1. grep简介

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹配的行打印出来。Unix的grep家族包括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展，支持更多的re元字符， fgrep就是 fixed grep或fast grep，它们把所有的字母都看作单词，也就是说，正则表达式中的元字符表示回其自身的]]></description>
			<content:encoded><![CDATA[<p>Linux服务器 Grep命令详解</p>
<p>1. grep简介</p>
<p>grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹配的行打印出来。Unix的grep家族包括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展，支持更多的re元字符， fgrep就是 fixed grep或fast grep，它们把所有的字母都看作单词，也就是说，正则表达式中的元字符表示回其自身的字面意义，不再特殊。linux 使用GNU版本的grep。它功能更强，可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。</p>
<p>grep的工作方式是这样的，它在一个或多个文件中搜索字符串模板。如果模板包括空格，则必须被引用，模板后的所有字符串被看作文件名。搜索的结果被送到屏幕，不影响原文件内容。</p>
<p>grep可用于shell脚本，因为grep通过返回一个状态值来说明搜索的状态，如果模板搜索成功，则返回0，如果搜索不成功，则返回1，如果搜索的文件不存在，则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。</p>
<p>2. grep正则表达式元字符集(基本集)</p>
<p>^</p>
<p>锚定行的开始 如：&#8217;^grep&#8217;匹配所有以grep开头的行。</p>
<p>$</p>
<p>锚定行的结束 如：&#8217;grep$&#8217;匹配所有以grep结尾的行。</p>
<p>匹配一个非换行符的字符 如：&#8217;gr.p&#8217;匹配gr后接一个任意字符，然后是p。</p>
<p>*</p>
<p>匹配零个或多个先前字符 如：&#8217;*grep&#8217;匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。</p>
<p>[]</p>
<p>匹配一个指定范围内的字符，如&#8217;[Gg]rep&#8217;匹配Grep和grep。</p>
<p>[^]</p>
<p>匹配一个不在指定范围内的字符，如：&#8217;[^A-FH-Z]rep&#8217;匹配不包含A-R和T-Z的一个字母开头，紧跟rep的行。</p>
<p>\(..\)</p>
<p>标记匹配字符，如&#8217;\(love\)&#8217;，love被标记为1。</p>
<p>\&lt;</p>
<p>锚定单词的开始，如:&#8217;\\&gt;</p>
<p>锚定单词的结束，如&#8217;grep\&gt;&#8217;匹配包含以grep结尾的单词的行。</p>
<p>x\{m\}</p>
<p>重复字符x，m次，如：&#8217;0\{5\}&#8217;匹配包含5个o的行。</p>
<p>x\{m,\}</p>
<p>重复字符x,至少m次，如：&#8217;o\{5,\}&#8217;匹配至少有5个o的行。</p>
<p>x\{m,n\}</p>
<p>重复字符x，至少m次，不多于n次，如：&#8217;o\{5,10\}&#8217;匹配5&#8211;10个o的行。</p>
<p>\w</p>
<p>匹配文字和数字字符，也就是[A-Za-z0-9]，如：&#8217;G\w*p&#8217;匹配以G后跟零个或多个文字或数字字符，然后是p。</p>
<p>\W</p>
<p>\w的反置形式，匹配一个或多个非单词字符，如点号句号等。</p>
<p>\b</p>
<p>单词锁定符，如: &#8216;\bgrepb\&#8217;只匹配grep。</p>
<p>3. 用于egrep和 grep -E的元字符扩展集</p>
<p>+</p>
<p>匹配一个或多个先前的字符。如：&#8217;[a-z]+able&#8217;，匹配一个或多个小写字母后跟able的串，如loveable,enable,disable等。</p>
<p>?</p>
<p>匹配零个或多个先前的字符。如：&#8217;gr?p&#8217;匹配gr后跟一个或没有字符，然后是p的行。</p>
<p>a|b|c</p>
<p>匹配a或b或c。如：grep|sed匹配grep或sed</p>
<p>()</p>
<p>分组符号，如：love(able|rs)ov+匹配loveable或lovers，匹配一个或多个ov。</p>
<p>x{m},x{m,},x{m,n}</p>
<p>作用同x\{m\},x\{m,\},x\{m,n\}</p>
<p>4. POSIX字符类</p>
<p>为了在不同国家的字符编码中保持一至，POSIX(The Portable Operating System Interface)增加了特殊的字符类，如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式，如[A- Za-z0-9]或[[: alnum:]]。在linux下的grep除fgrep外，都支持POSIX的字符类。</p>
<p>[:alnum:]</p>
<p>文字数字字符</p>
<p>[:alpha:]</p>
<p>文字字符</p>
<p>[:digit:]</p>
<p>数字字符</p>
<p>[:graph:]</p>
<p>非空字符(非空格、控制字符)</p>
<p>[:lower:]</p>
<p>小写字符</p>
<p>[:cntrl:]</p>
<p>控制字符</p>
<p>[:print:]</p>
<p>非空字符(包括空格)</p>
<p>[:punct:]</p>
<p>标点符号</p>
<p>[:space:]</p>
<p>所有空白字符(新行，空格，制表符)</p>
<p>[:upper:]</p>
<p>大写字符</p>
<p>[:xdigit:]</p>
<p>十六进制数字(0-9，a-f，A-F)</p>
<p>5. Grep命令选项</p>
<p>-?</p>
<p>同时显示匹配行上下的？行，如：grep -2 pattern filename同时显示匹配行的上下2行。</p>
<p>-b，&#8211;byte-offset</p>
<p>打印匹配行前面打印该行所在的块号码。</p>
<p>-c,&#8211;count</p>
<p>只打印匹配的行数，不显示匹配的内容。</p>
<p>-f File，&#8211;file=File</p>
<p>从文件中提取模板。空文件中包含0个模板，所以什么都不匹配。</p>
<p>-h，&#8211;no-filename</p>
<p>当搜索多个文件时，不显示匹配文件名前缀。</p>
<p>-i，&#8211;ignore-case</p>
<p>忽略大小写差别。</p>
<p>-q，&#8211;quiet</p>
<p>取消显示，只返回退出状态。0则表示找到了匹配的行。</p>
<p>-l，&#8211;files-with-matches</p>
<p>打印匹配模板的文件清单。</p>
<p>-L，&#8211;files-without-match</p>
<p>打印不匹配模板的文件清单。</p>
<p>-n，&#8211;line-number</p>
<p>在匹配的行前面打印行号。</p>
<p>-s，&#8211;silent</p>
<p>不显示关于不存在或者无法读取文件的错误信息。</p>
<p>-v，&#8211;revert-match</p>
<p>反检索，只显示不匹配的行。</p>
<p>-w，&#8211;word-regexp</p>
<p>如果被\&lt;和\&gt;引用，就把表达式做为一个单词搜索。</p>
<p>-V，&#8211;version</p>
<p>显示软件版本信息。</p>
<p>6. 实例</p>
<p>要用好grep这个工具，其实就是要写好正则表达式，所以这里不对grep的所有功能进行实例讲解，只列几个例子，讲解一个正则表达式的写法。</p>
<p>$ ls -l | grep &#8216;^a&#8217;</p>
<p>通过管道过滤ls -l输出的内容，只显示以a开头的行。</p>
<p>$ grep &#8216;test&#8217; d*</p>
<p>显示所有以d开头的文件中包含test的行。</p>
<p>$ grep &#8216;test&#8217; aa bb cc</p>
<p>显示在aa，bb，cc文件中匹配test的行。</p>
<p>$ grep &#8216;[a-z]\{5\}&#8217; aa</p>
<p>显示所有包含每个字符串至少有5个连续小写字符的字符串的行。</p>
<p>$ grep &#8216;w\(es\)t.*\1&#8242; aa</p>
<p>如果west被匹配，则es就被存储到内存中，并标记为1，然后搜索任意个字符(.*)，这些字符后面紧跟着另外一个es(\1)，找到就显示该行。如果用egrep或grep -E，就不用&#8221;\&#8221;号进行转义，直接写成&#8217;w(es)t.*\1&#8242;就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onecho.com/2008-09-03/114.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
