<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_== OLD 关注高可用的系统架构 &amp; 海量数据处理 ==</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/44451/rss</id><updated>2012-05-24T03:13:09Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/44451/rss"/><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/05/16/2503727.html</id><title type="text">CentOS — 搭建 LAMP 运行环境 &amp;amp; Webmin</title><summary type="text">安装 CentOS RPM 签署金钥、添加外部源、安装 Apache、安装 MySQL、安装 PHP、安装 Webmin</summary><published>2012-05-16T04:12:00Z</published><updated>2012-05-16T04:12:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/16/2503727.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/16/2503727.html"/><content type="html">&lt;p&gt;以 CentOS 5.8 32位的系统为例。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装 CentOS RPM 签署金钥&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;你须要安装 CentOS RPM 签署金钥。基于安全理由，这个金钥在基本系统安装时不会被安装。如此你就可以在核实金钥的真确性后才将它安装在你的系统上。RPM 有能力从一个 CentOS 镜像中取得金钥：&lt;em&gt;&lt;span style="font-size: 12px;"&gt;参考：&lt;a href="http://wiki.centos.org/zh/FAQ/CentOS5#head-fb657eaf6b9cade03c12ce599dc92fafdbdbb82b" target="_blank"&gt;我可以从哪里取得 CentOS 的组件签署金钥？&lt;/a&gt;&lt;/span&gt;&lt;/em&gt;&lt;a href="http://wiki.centos.org/zh/FAQ/CentOS5#head-fb657eaf6b9cade03c12ce599dc92fafdbdbb82b"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 id="添加外部源，保证MySQL和PHP最新"&gt;添加外部源&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;因为系统基本的源的MySQL和PHP程序比较旧，所以我们添加比较新的外部源。&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;vi /etc/yum.repos.d/CentOS-Base.repo&lt;/div&gt;&lt;p&gt;&lt;span&gt;在底部增加下面信息：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;[utterramblings]&lt;br/&gt;name&lt;/span&gt;=&lt;span style="color: #000000;"&gt;Jason's Utter Ramblings Repo&lt;br/&gt;baseurl&lt;/span&gt;=http://www.jasonlitka.com/media/EL&lt;span style="color: #800080;"&gt;$releasever&lt;/span&gt;/&lt;span style="color: #800080;"&gt;$basearch&lt;/span&gt;/&lt;span style="color: #000000;"&gt;&lt;br/&gt;enabled&lt;/span&gt;=1&lt;span style="color: #000000;"&gt;&lt;br/&gt;gpgcheck&lt;/span&gt;=1&lt;span style="color: #000000;"&gt;&lt;br/&gt;gpgkey&lt;/span&gt;=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装 Apache&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;默认CentOS都安装了Apache，你可以通过在终端输入如下命令来启动Apache服务器:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;apachectl start&lt;/div&gt;&lt;p&gt;启动，停止，重启的命令如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;apachectl start&lt;br/&gt;apachectl stop&lt;br/&gt;apachectl restart&lt;/span&gt;&lt;/div&gt;&lt;p&gt;默认配置文件的路径在：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/etc/httpd/conf/httpd.conf&lt;/div&gt;&lt;p&gt;默认的网页文件的存放路径在：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/var/www/html/&lt;/div&gt;&lt;p&gt;&lt;strong&gt;* 如果您的Server没有安装Apache，那么请参考以下命令安装Apache&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;yum install httpd&lt;br/&gt;chkconfig &lt;/span&gt;--levels 235&lt;span style="color: #000000;"&gt; httpd on&lt;br/&gt;&lt;/span&gt;/etc/init.d/httpd start&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装 MySQL&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;执行yum程序安装MySQL&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;yum install mysql mysql-server&lt;/div&gt;&lt;p&gt;&lt;span&gt;添加MySQL进启动项（这样系统启动时会自动启动MySQL)，并立即启动MySQL服务器：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;chkconfig --levels 235&lt;span style="color: #000000;"&gt; mysqld on&lt;br/&gt;&lt;/span&gt;/etc/init.d/mysqld start&lt;/div&gt;&lt;p&gt;&lt;span&gt;设置MySQL root帐号密码：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;mysql_secure_installation&lt;/div&gt;&lt;p&gt;Shell交互：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL&lt;br/&gt;      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!&lt;br/&gt; &lt;br/&gt; &lt;br/&gt;In order to log into MySQL to secure it, we'll need the current&lt;br/&gt;password for the root user.  If you've just installed MySQL, and&lt;br/&gt;you haven't set the root password yet, the password will be blank,&lt;br/&gt;so you should just press enter here.&lt;br/&gt; &lt;br/&gt;Enter current password for root (enter for none):&lt;br/&gt;OK, successfully used password, moving on...&lt;br/&gt; &lt;br/&gt;Setting the root password ensures that nobody can log into the MySQL&lt;br/&gt;root user without the proper authorisation.&lt;br/&gt; &lt;br/&gt;Set root password? [Y/n] &amp;lt;-- ENTER&lt;br/&gt;New password: &amp;lt;-- 你的MySQL root密码&lt;br/&gt;Re-enter new password: &amp;lt;-- 你的MySQL root密码&lt;br/&gt;Password updated successfully!&lt;br/&gt;Reloading privilege tables..&lt;br/&gt; ... Success!&lt;br/&gt; &lt;br/&gt; &lt;br/&gt;By default, a MySQL installation has an anonymous user, allowing anyone&lt;br/&gt;to log into MySQL without having to have a user account created for&lt;br/&gt;them.  This is intended only for testing, and to make the installation&lt;br/&gt;go a bit smoother.  You should remove them before moving into a&lt;br/&gt;production environment.&lt;br/&gt; &lt;br/&gt;Remove anonymous users? [Y/n] Y&amp;lt;-- ENTER #删除匿名用户？&lt;br/&gt; ... Success!&lt;br/&gt; &lt;br/&gt;Normally, root should only be allowed to connect from 'localhost'.  This&lt;br/&gt;ensures that someone cannot guess at the root password from the network.&lt;br/&gt; &lt;br/&gt;Disallow root login remotely? [Y/n] n&amp;lt;-- ENTER #不允许远程连接？&lt;br/&gt; ... Success!&lt;br/&gt; &lt;br/&gt;By default, MySQL comes with a database named 'test' that anyone can&lt;br/&gt;access.  This is also intended only for testing, and should be removed&lt;br/&gt;before moving into a production environment.&lt;br/&gt; &lt;br/&gt;Remove test database and access to it? [Y/n] Y&amp;lt;-- ENTER #删除测试数据库？&lt;br/&gt; - Dropping test database...&lt;br/&gt; ... Success!&lt;br/&gt; - Removing privileges on test database...&lt;br/&gt; ... Success!&lt;br/&gt; &lt;br/&gt;Reloading the privilege tables will ensure that all changes made so far&lt;br/&gt;will take effect immediately.&lt;br/&gt; &lt;br/&gt;Reload privilege tables now? [Y/n] Y&amp;lt;-- ENTER #立刻刷新权限表？&lt;br/&gt; ... Success!&lt;br/&gt; &lt;br/&gt;Cleaning up...&lt;br/&gt; &lt;br/&gt; &lt;br/&gt; &lt;br/&gt;All done!  If you've completed all of the above steps, your MySQL&lt;br/&gt;installation should now be secure.&lt;br/&gt; &lt;br/&gt;Thanks for using MySQL!&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;这里我设置了允许MySQL远程连接，所以需要重启MySQL服务器：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/etc/init.d/mysqld restart&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装 PHP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;我们可以按照下面的命令安装PHP和Apache PHP模块：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;yum install php&lt;/div&gt;&lt;p id="安装相关模块使用PHP支持MySQL"&gt;安装相关模块使用PHP支持MySQL：为了让PHP支持MySQL，我们可以安装php-mysql软件包；你也可以安装其它的php模块；&lt;/p&gt;&lt;p&gt;可以使用以下命令搜索可用的php模块：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;yum search php&lt;/div&gt;&lt;p&gt;&lt;span&gt;选择一些你需要的模块进行安装：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;yum install php-mysql php-common php-mbstring php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pdo php-mcrypt&lt;/div&gt;&lt;p&gt;&lt;span&gt;现在重启Apache:&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;apachectl restart&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装 Webmin&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;下载Webmin RPM包&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;wget http://prdownloads.sourceforge.net/webadmin/webmin-1.580-1.noarch.rpm&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;em&gt;请到官网查看是否是最新版本的链接。&lt;a href="http://www.webmin.com/download.html" target="_blank"&gt;Webmin Download&lt;/a&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;安装Webmin&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;rpm -U webmin-1.550-1.noarch.rpm&lt;/div&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;* 在我的机器上出现了如下的错误：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #ff0000;"&gt;Header V3 DSA signature: NOKEY, key ID 11f63c51&lt;/span&gt;&lt;/div&gt;&lt;p&gt;解决办法如下：&lt;em&gt;&lt;span style="font-size: 12px;"&gt;可参考&amp;nbsp;&lt;a href="http://lishixin.blog.51cto.com/blog/846451/408193" target="_blank"&gt;linux Header V3 DSA signature: NOKEY, key ID 错误解决方法&lt;/a&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #ff0000;"&gt;rpm --import /etc/pki/rpm-gpg/RPM*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;rpm &lt;/span&gt;-U webmin-1.550-1.noarch.rpm&lt;/div&gt;&lt;p&gt;在终端命令行下启动Webmin&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;strong&gt;/etc/rc.d/init.d/webmin start&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;通过浏览器访问Webmin，假设您的Ip地址为：192.168.100.100，那么访问Webmin的URL为 &lt;a href="http://192.168.100.100:10000"&gt;http://192.168.100.100:10000&lt;/a&gt;，用户名为 root， 密码为 root 的密码。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size: 12px;"&gt;参考：&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size: 12px;"&gt;&lt;a href="http://www.centos.bz/2011/04/centos-yum-install-lamp-apache-mysql-php/" target="_blank"&gt;CentOS 5.x yum安装LAMP(Apache+MySQL+PHP)&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size: 12px;"&gt;&lt;span&gt;&lt;a href="http://www.centos.bz/2011/03/centos-webmin-install/" target="_blank"&gt;CentOS 5安装免费主机控制面板Webmin&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size: 12px;"&gt;&lt;span&gt;&lt;a href="http://lishixin.blog.51cto.com/blog/846451/408193" target="_blank"&gt;&lt;span&gt;linux Header V3 DSA signature: NOKEY, key ID 错误解决方法&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size: 12px;"&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://blog.chinaunix.net/uid-11647316-id-2858292.html"&gt;Centos下webmin安装&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;到这里就完成了 LAMP 运行环境的搭建。对于MySQL的备份，请参考&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;a id="homepage1_HomePageDays_DaysList_DayItem_3_DayList_3_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html" target="_blank"&gt;&lt;span style="color: #0000ff;"&gt;CentOS &amp;mdash; MySQL备份 Shell 脚本&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2503727.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/16/2503727.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501496.html</id><title type="text">Shell 脚本学习 — 简单的执行跟踪</title><summary type="text">程序是人写的，难免会出错。想知道你的程序正在做什么，有个好方法，就是把执行跟踪的功能打开。这会使得Shell显示每个被执行到的命令，并在前面加上"+ " ，一个加号后面跟着一个空格。在脚本里，用 set -x 命令将执行跟踪的功能打开，然后再用 set +x 命令关闭它。这个功能对复杂的脚本比较有用，不过这里只用简单的程序来说明：cat &gt; trace1.sh#! /bin/shset -x #打开跟踪功能echo 1st echo #做些事set +x #关闭跟踪功能echo 2nd echo #再做些事^D #...</summary><published>2012-05-15T05:49:00Z</published><updated>2012-05-15T05:49:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501496.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501496.html"/><content type="html">&lt;p&gt;程序是人写的，难免会出错。想知道你的程序正在做什么，有个好方法，就是把执行跟踪的功能打开。这会使得Shell显示每个被执行到的命令，并在前面加上"+ " ，一个加号后面跟着一个空格。&lt;/p&gt;&lt;p&gt;在脚本里，用 set -x 命令将执行跟踪的功能打开，然后再用 set +x 命令关闭它。这个功能对复杂的脚本比较有用，不过这里只用简单的程序来说明：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat &amp;gt;&lt;span style="color: #000000;"&gt; trace1.sh&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;! /bin/sh&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;set &lt;/span&gt;-x           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;打开跟踪功能&lt;/span&gt;&lt;br/&gt;echo 1st echo    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;做些事&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;set &lt;/span&gt;+x           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;关闭跟踪功能&lt;/span&gt;&lt;br/&gt;echo 2nd echo    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;再做些事&lt;/span&gt;&lt;br/&gt;^D               &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;以end-of-file结尾&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;chmod +&lt;span style="color: #000000;"&gt;x trace1.sh&lt;br/&gt;.&lt;/span&gt;/&lt;span style="color: #000000;"&gt;trace1.sh&lt;br/&gt;&lt;/span&gt;+ echo 1st echo    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;被跟踪的第一行&lt;/span&gt;&lt;br/&gt;1st echo           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;命令的输出&lt;/span&gt;&lt;br/&gt;+ sex +x           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;被跟踪的下一行&lt;/span&gt;&lt;br/&gt;2nd echo           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;下一个命令的输出&lt;/span&gt;&lt;/div&gt;&lt;p&gt;执行时，set -x 不会被跟踪，因为跟踪功能是在这条命令执行后才打开的。同理，sex +x 会被跟踪，因为跟踪功能是在这条命令执行后才关闭的。最后的echo命令不会被跟踪，因为此时跟踪功能已经关闭。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2501496.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501496.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501450.html</id><title type="text">Shell 脚本学习 — 访问 Shell 脚本的参数</title><summary type="text">所谓的位置参数指的也就是Shell脚本的命令行参数。在Shell函数里，它们同事也可以是函数的参数。各参数都有整数来命名。基于历史原因，当它超过9，就应该用大括号把数字框起来：echo first arg is $1echo tenth arg is ${10}此外，通过特殊变量，我们还可以取得参数的总数，以及一次取得所有参数。案例假设你想知道某个用户正使用的终端是什么，你当然可以直接使用who命令，然后在输出中自己慢慢找。这么做很麻烦又容易出错——特别是当系统的用户很多的时候。你想做的只不过是在who的输出中找到那位用户，这个时候你可以用grep命令来进行查找操作，它会列出与grep第一个参</summary><published>2012-05-15T05:34:00Z</published><updated>2012-05-15T05:34:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501450.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501450.html"/><content type="html">&lt;p&gt;所谓的位置参数指的也就是Shell脚本的命令行参数。在Shell函数里，它们同事也可以是函数的参数。各参数都有整数来命名。基于历史原因，当它超过9，就应该用大括号把数字框起来：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;echo first arg is &lt;span style="color: #800080;"&gt;$1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;echo tenth arg is &lt;/span&gt;&lt;span style="color: #800080;"&gt;${10}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;此外，通过特殊变量，我们还可以取得参数的总数，以及一次取得所有参数。&lt;/p&gt;&lt;p&gt;案例&lt;/p&gt;&lt;p&gt;假设你想知道某个用户正使用的终端是什么，你当然可以直接使用who命令，然后在输出中自己慢慢找。这么做很麻烦又容易出错&amp;mdash;&amp;mdash;特别是当系统的用户很多的时候。你想做的只不过是在who的输出中找到那位用户，这个时候你可以用grep命令来进行查找操作，它会列出与grep第一个参数匹配的每一行。假设你要找的用户是 betsy:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;strong&gt;who&lt;/strong&gt; |&lt;span style="color: #000000;"&gt;&lt;strong&gt; grep&lt;/strong&gt; &lt;strong&gt;betsy&lt;/strong&gt;&lt;br/&gt;betsy   pts&lt;/span&gt;/3   Dec 27 11:07   (flags-r-us.example.com)&lt;/div&gt;&lt;p&gt;知道如何寻找特定的用户后，我们可以将命令放进脚本里，这段脚本的第一个参数就是我们要找的用户名称：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat &amp;gt; finduser    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;建立新文件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br/&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;! /bin/sh&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; finduser --- 查看第一个参数所指定的用户是否登录&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;who &lt;/span&gt;| grep &lt;span style="color: #800080;"&gt;$1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;^D                &lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;以 End-of-file 结尾&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;chmod +x finduser        &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置执行权限&lt;/span&gt;&lt;br/&gt;./finduser betsy         &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;测试：寻找 betsy&lt;/span&gt;&lt;br/&gt;betsy          pts/3      Dec 27 11:07   (flags-r-&lt;span style="color: #000000;"&gt;us.example.com)&lt;br/&gt;.&lt;/span&gt;/finduser benjamin      &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;再找找好友 Ben&lt;/span&gt;&lt;br/&gt;benjamin       dtlocal    Dec 27 17:55&lt;span style="color: #000000;"&gt;   (kites.example.com)&lt;br/&gt;mv finduser &lt;/span&gt;&lt;span style="color: #800080;"&gt;$HOME&lt;/span&gt;/bin    &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;将这个文件存进自己的bin目录&lt;/span&gt;&lt;/div&gt;&lt;p&gt;当然，这个程序还没有达到完美。要是我们没给任何参数，会发生什么事？&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;finduser&lt;br/&gt;Usage: grep [OPTION]... PATTERN [FILE]...&lt;br/&gt;Try 'grep &lt;/span&gt;--help' &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; more information.&lt;/div&gt;&lt;p&gt;具体的测试参数，待续...&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2501450.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/15/2501450.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/05/08/2489868.html</id><title type="text">Shell 脚本学习 — 基本元素</title><summary type="text">变量、简单的 echo 输出、华丽的 printf 输出、基本的 I/O 重定向（重定向与管道、特殊文件：/dev/null 与 /dev/tty）</summary><published>2012-05-08T08:27:00Z</published><updated>2012-05-08T08:27:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/08/2489868.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/08/2489868.html"/><content type="html">&lt;p&gt;&lt;strong&gt;1 变量&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Shell 变量名称的开头是&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;一个字母或下划线&lt;/span&gt;&lt;/strong&gt;符号，后面可以接着&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;任意长度的字母、数字或下划线&lt;/span&gt;&lt;/strong&gt;符号。&lt;/p&gt;&lt;p&gt;Shell 变量名称的&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;字符&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;长度并无限制&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;Shell 变量可以用来保存字符串值，所能保存的字符数同样没有限制。&lt;/p&gt;&lt;p&gt;变量的赋值方式为：先写变量名称，紧接着 = 字符，最后是新值，中间完全没有任何空格。当你想取出 Shell 变量的值时，需于变量名称前面加 $ 字符。当所赋予的值内含空格时，请加上引号：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;first=isaac middle=bashevis last=singer   &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;单行可进行多次赋值&lt;/span&gt;&lt;br/&gt;fullname=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;isaac bashevis singer&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;          &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;值中包含空格时使用引号&lt;/span&gt;&lt;br/&gt;oldname=&lt;span style="color: #800080;"&gt;$fullname&lt;/span&gt;                         &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;此处不需要引号&lt;/span&gt;&lt;/div&gt;&lt;p&gt;不过，当你将几个变量连接起来时，就需要使用引号了：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;fullname=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;$first $middle $last&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;这里需要双引号&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2 简单的 echo 输出&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;$ echo &lt;strong&gt;Now is the time &lt;span style="color: #000000;"&gt;for&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt; all good men&lt;/strong&gt;&lt;br/&gt;Now is the time &lt;/span&gt;&lt;span style="color: #000000;"&gt;for&lt;/span&gt; all good men&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3 华丽的 printf 输出&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;printf 命令模仿 C 程序库里的 printf() 程序。它几乎复制了该函数所有的功能，如果你曾使用C、C++、awk、Perl、Python 或 Tcl 写过程序，对它的基本概念应该不陌生。当然，它在 Shell 层级的版本上，会有些差异。&lt;/p&gt;&lt;p&gt;如同 echo 命令， printf 命令可以输出简单的字符串：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;printf &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;hello, world\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;p&gt;printf 不像 echo 那样会自动提供一个换行符号。你必须显示地将换行符号指定成 \n 。printf 命令的完整语法分为两部分：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;printf &lt;span style="color: #ff0000;"&gt;&lt;em&gt;format-string&lt;/em&gt;&lt;/span&gt; [&lt;span style="color: #ff0000;"&gt;&lt;em&gt;arguments&lt;/em&gt;&lt;/span&gt; ...]&lt;/div&gt;&lt;p&gt;第一部分（&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;&lt;em&gt;format-string&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;）是一个字符串，用来描述输出的排列方式，最好为此字符串加上引号。此字符串包含了按字面显示的字符以及格式声明，后者是特殊的占位符，用来描述如何显示相应的参数。格式声明分成两部分：百分比符号（%）和指示符。最常用的格式指示符有两个，%s 用于字符串，而 %d 用于十进制整数。&lt;/p&gt;&lt;p&gt;第二部分（&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;arguments&lt;/span&gt;&lt;/strong&gt; ...）是与格式声明想对应的参数列表。&lt;/p&gt;&lt;p&gt;格式字符串中，一般字符会按字面显示，转义序列则解释后再输出成相应的字符。格式什么以 % 符号开头，并以定义的字母集中的一个字符来结束，用来控制相应参数的输出。例如，%s 用户字符串的输出：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;$ printf &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;The first program always prints '%s, %s!'\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; Hello world&lt;br/&gt;The first program always prints 'Hello world&lt;/span&gt;!'&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4 基本的 I/O 重定向&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.1 重定向与管道&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Shell 提供了数种语法标记，可以用来改变默认 I/O 的来源端与目的端。&lt;/p&gt;&lt;p&gt;* &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;以 &amp;lt; 改变标准输入&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;program&lt;/em&gt; &amp;lt; &lt;em&gt;file&lt;/em&gt; 可将 &lt;em&gt;program&lt;/em&gt; 的标准输入修改为 &lt;em&gt;file&lt;/em&gt;:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;tr -d '\r' &amp;lt; dos&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;.txt&lt;/div&gt;&lt;p&gt;&amp;nbsp;* &lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;以 &amp;gt; 改变标准输出&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;program&lt;/em&gt; &amp;gt; &lt;em&gt;file &amp;nbsp;&lt;/em&gt;可将 &lt;em&gt;program&lt;/em&gt; 的标准输出修改为 &lt;em&gt;file&lt;/em&gt;:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;tr -d '\r' &amp;lt; dos&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;.txt &amp;gt; UNIX&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;.txt&lt;/div&gt;&lt;p&gt;&amp;nbsp;这条命令会先以 tr 将 dos-file.txt 里的 ASCII 回车删除，再将转换完成的数据输出到 UNIX-file.txt。（dos-file.txt 里的原始数据不会有变化）。&lt;/p&gt;&lt;p&gt;&amp;gt; 重定向符在目的文件不存在时，会新建一个。然而，如果目的文件已存在，它就会被覆盖掉；原本的数据都会丢失。&lt;/p&gt;&lt;p&gt;* &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;以 &amp;gt;&amp;gt; 附加到文件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;program&lt;/em&gt; &amp;gt;&amp;gt; &lt;em&gt;file&lt;/em&gt; 可将 &lt;em&gt;program&lt;/em&gt; 的标准输出附加到 file 的结尾处。&lt;/p&gt;&lt;p&gt;如同 &amp;gt;，如果目的文件不存在，&amp;gt;&amp;gt;重定向符便会新建一个。然而，如果目的文件存在，它不会直接覆盖掉文件，而是将程序所产生的数据附加到文件结尾处：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; f &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; dos&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;*&lt;span style="color: #000000;"&gt;.txt&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    tr &lt;/span&gt;-d '\r' &amp;lt; &lt;span style="color: #800080;"&gt;$f&lt;/span&gt; &amp;gt;&amp;gt; big-UNIX&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;&lt;span style="color: #000000;"&gt;.txt&lt;br/&gt;done&lt;/span&gt;&lt;/div&gt;&lt;p&gt;* &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;以 | 建立管道&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;em&gt;program1&lt;/em&gt; | &lt;em&gt;program2 &amp;nbsp;&lt;/em&gt;可将 &lt;em&gt;program1&lt;/em&gt; 的标准输出修改为 &lt;em&gt;program2&lt;/em&gt; 的标准输入。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;tr -d '\r' &amp;lt; dos&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;.txt | sort &amp;gt; UNIX&lt;span style="color: #008080;"&gt;-file&lt;/span&gt;.txt&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;tr 命令详解&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;语法&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;tr [ &lt;span style="color: #ff0000;"&gt;options&lt;/span&gt; ] source-char-list replace-char-list&lt;/div&gt;&lt;p&gt;用途&lt;/p&gt;&lt;p&gt;转换字符。例如，将大写字符转换成小写。选项可让你指定要删除的字符，以及将一串重复出现的字符浓缩成一个。&lt;/p&gt;&lt;p&gt;常用选项&lt;/p&gt;&lt;p&gt;- c&lt;/p&gt;&lt;p&gt;取 source-char-list 的反义。tr 要转换的字符，变成未列在 source-char-list 中的字符。此选项通常与 &amp;nbsp;-d 或 -s 配合使用。&lt;/p&gt;&lt;p&gt;- C&lt;/p&gt;&lt;p&gt;与 -c 相似，但所处理的是字符（可能是包含多个字节的宽字符），而非二进制的字节值。&lt;/p&gt;&lt;p&gt;-d&lt;/p&gt;&lt;p&gt;自标准输入删除 source-char-list 里所列的字符，而不是转换它们。&lt;/p&gt;&lt;p&gt;-s&lt;/p&gt;&lt;p&gt;浓缩重复的字符。如果标准输入中连续重复出现 source-char-list 里的所列的字符，则将其浓缩成一个。&lt;/p&gt;&lt;p&gt;行为模式&lt;/p&gt;&lt;p&gt;如同过滤器：自标准输入读取字符，再将结果写到标准输出。任何输入字符只要出现在 source-char-list 中，就会置换成 replace-char-list 里相应的字符。POSIX 风格的字符与等效的字符集也适用，而且 tr 还支持 replace-char-list 中重复字符的标记法。&lt;/p&gt;&lt;p&gt;警告&lt;/p&gt;&lt;p&gt;根据 POSIX 标准的定义，-c 处理的是二进制字节值，而 -C 处理的是现行 locale 所定义的字符。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.2 &amp;nbsp;特殊文件：/dev/null 与 /dev/tty&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;UNIX 系统提供了两个对 Shell 编程特别有用的特殊文件。第一个文件 /dev/null，就是大家所熟知的位桶（bit bucket）。传说到此文件的数据都会被系统丢掉。也就是说，当程序将数据写到此文件时，会认为它已经成功完成写入数据的操作，但实际上什么事都没做。如果你需要的是命令的退出状态，而非它的输出，次功能会很有用。例如，测试一个文件是否包含某个模式：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; grep patten myfile &amp;gt; /dev/&lt;span style="color: #000000;"&gt;null&lt;br/&gt;then&lt;br/&gt;    ...      &lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;找到模式时&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    ...      &lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;找不到模式时&lt;/span&gt;&lt;br/&gt;fi&lt;/div&gt;&lt;p&gt;&amp;nbsp;相对地，读取 /dev/null 则会立即返回文件结束符号。读取 /dev/null 的操作很少会出现在 Shell 程序里，不过了解这个文件的行为模式还是非常重要的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;另一个特殊文件为 /dev/tty 。当程序打开此文件时，UNIX 会自动将它重定向到一个终端 [ 一个实体的控制台或串行端口，也可能是一个通过网络与窗口登录的伪终端 ] 再也程序结合。这在程序必须读取人工输入时（例如密码）特别有用。此外，用它来产生错误信息也很方便，只是比较少人这么做：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;printf &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Enter new password: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;   &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;提示输入&lt;/span&gt;&lt;br/&gt;stty -echo                      &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;关闭自动打印输入字符的功能&lt;/span&gt;&lt;br/&gt;read pass &amp;lt; /dev/tty            &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;读取密码&lt;/span&gt;&lt;br/&gt;printf &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Enter again: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;          &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;提示再输入一次&lt;/span&gt;&lt;br/&gt;read pass2 &amp;lt; /dev/tty           &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;再读取一次以确认&lt;/span&gt;&lt;br/&gt;stty echo                       &lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;别忘了打开自动打印输入字符的功能&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br/&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;p&gt;stty 命令用来控制终端的各种设置。 -echo 选项用来关闭自动打印每个输入字符的功能；stty echo 用来恢复该功能。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;参考：&amp;lt;&amp;lt;Shell 脚本学习指南&amp;gt;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2489868.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/08/2489868.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html</id><title type="text">CentOS — MySQL备份 Shell 脚本</title><summary type="text">使用 mysqldump 备份数据库，通过 FTP 上传到备份服务器，同时在本地保留备份文件。</summary><published>2012-05-04T07:01:00Z</published><updated>2012-05-04T07:01:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html"/><content type="html">&lt;p&gt;* &lt;strong&gt;使用 mysqldump 备份数据库，通过 FTP 上传到备份服务器，同时在本地保留备份文件。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;新建一个 Shell 脚本文件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;vi /home/work/backup.sh&lt;/div&gt;&lt;p&gt;添加如下内容：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;! /bin/bash&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SqlBakName&lt;/span&gt;=_u1_sql_$(date +%y%m%&lt;span style="color: #000000;"&gt;d).tar.gz&lt;br/&gt;mysqldump &lt;/span&gt;--user=mysql_user1 --password=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;your password&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; --lock-all-tables --all-databases &amp;gt;&lt;span style="color: #000000;"&gt; backup.sql&lt;br/&gt;tar zcvf &lt;/span&gt;&lt;span style="color: #800080;"&gt;$SqlBakName&lt;/span&gt;&lt;span style="color: #000000;"&gt; backup.sql&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;FTP to your Server&lt;/span&gt;&lt;br/&gt;ftp -nv 192.168.1.100&lt;span style="color: #000000;"&gt; &amp;lt;&amp;lt; EOF&lt;br/&gt;user ftp_user1 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;password1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;cd &lt;/span&gt;/home/MySQL_Backup/&lt;span style="color: #000000;"&gt;&lt;br/&gt;put &lt;/span&gt;&lt;span style="color: #800080;"&gt;$SqlBakName&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;quit&lt;br/&gt;EOF&lt;br/&gt;&lt;br/&gt;rm &lt;/span&gt;&lt;span style="color: #008080;"&gt;-f&lt;/span&gt;&lt;span style="color: #000000;"&gt; backup.sql&lt;br/&gt;mv &lt;/span&gt;&lt;span style="color: #800080;"&gt;$SqlBakName&lt;/span&gt; /home/MySQL_Backup/&lt;span style="color: #800080;"&gt;$SqlBakName&lt;/span&gt;&lt;/div&gt;&lt;p&gt;按 :wq 保存并退出&lt;/p&gt;&lt;p&gt;* &lt;strong&gt;将脚本添加到定时启动项中&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1 新建一个 cronfile 文件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;vi /home/work/backup_cronfile&lt;/div&gt;&lt;p&gt;2 添加如下内容：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;00 00 * * * /home/work/&lt;span style="color: #000000;"&gt;backup.sh&lt;/span&gt;&lt;/div&gt;&lt;p&gt;按 :wq 保存并退出&lt;/p&gt;&lt;p&gt;00 00 * * * 表示每天的0点执行 backup.sh 文件。&lt;/p&gt;&lt;p&gt;3 输入以下命令：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;crontab /home/work/backup_cronfile&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2482733.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482438.html</id><title type="text">Linux — cat 命令的使用方法</title><summary type="text">cat 主要有三大功能:1. 一次显示整个文件cat filename2. 从键盘创建一个文件cat &gt; filename只能创建新文件,不能编辑已有文件。3. 将几个文件合并为一个文件cat file1 file2 &gt; filecat 具体命令格式为:cat [-AbeEnstTuv] [--help] [--version] fileName说明：把档案串连接后传到基本输出(屏幕 &amp; "&gt; fileName" 到另一个档案)参数： -n 或 –number 由 1 开始对所有输出的行数编号 -b 或 –number-nonblank 和 -n </summary><published>2012-05-04T03:35:00Z</published><updated>2012-05-04T03:35:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482438.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482438.html"/><content type="html">&lt;div class="entry"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;cat 主要有三大功能:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1. 一次显示整个文件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat filename&lt;/div&gt;&lt;p&gt;2. 从键盘创建一个文件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat &amp;gt; filename&lt;/div&gt;&lt;p&gt;&lt;em&gt;只能创建新文件,不能编辑已有文件。&lt;/em&gt;&lt;/p&gt;&lt;p&gt;3. 将几个文件合并为一个文件&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat file1 file2 &amp;gt; file&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;cat 具体命令格式为:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;strong&gt;cat [-AbeEnstTuv] [--help] [--version] fileName&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;说明：把档案串连接后传到基本输出(屏幕 &amp;amp; "&amp;gt; fileName" 到另一个档案)&lt;br /&gt;参数：&lt;br /&gt;-n 或 &amp;ndash;number 由 1 开始对所有输出的行数编号&lt;br /&gt;-b 或 &amp;ndash;number-nonblank 和 -n 相似，只不过对于空白行不编号&lt;br /&gt;-s 或 &amp;ndash;squeeze-blank 当遇到有连续两行以上的空白行，就代换为一行的空白行&lt;br /&gt;-v 或 &amp;ndash;show-nonprinting&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;范例：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;* 把 linuxfile1 的档案内容加上行号后输入 linuxfile2 这个档案里：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat -n linuxfile1 &amp;gt; linuxfile2&lt;/div&gt;&lt;p&gt;* 把 linuxfile1 和 linuxfile2 的档案内容加上行号(空白行不加)之后将内容附加到linuxfile3 里:&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat -b linuxfile1 linuxfile2 &amp;gt; linuxfile3&lt;/div&gt;&lt;p&gt;*&amp;nbsp;清空/etc/test.txt档案内容&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;cat /dev/&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; &amp;gt; /etc/test.txt&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;参考：&lt;a title="linux中cat命令的使用方法" href="http://www.9usb.net/200902/linux-cat.html" rel="bookmark"&gt;http://www.9usb.net/200902/linux-cat.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2482438.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482438.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/04/23/2466237.html</id><title type="text">CentOS 5.7 - 安装 MongoDB PHP 扩展</title><summary type="text">查看官方文档，只需要执行如下命令即可：sudo pecl install mongo但在我的机器上，这种方法无法执行成功。出现了以下错误：pecl install mongodownloading mongo-1.2.10.tgz ...Starting to download mongo-1.2.10.tgz (86,463 bytes).....................done: 86,463 bytes36 source files, buildingrunning: phpizeConfiguring for:PHP Api Version: 20041225Z...</summary><published>2012-04-23T04:19:00Z</published><updated>2012-04-23T04:19:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/04/23/2466237.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/04/23/2466237.html"/><content type="html">&lt;p&gt;查看官方文档，只需要执行如下命令即可：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;sudo pecl install mongo&lt;/div&gt;&lt;p&gt;但在我的机器上，这种方法无法执行成功。出现了以下错误：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;pecl install mongo&lt;br/&gt;downloading mongo&lt;/span&gt;-1.2.10&lt;span style="color: #000000;"&gt;.tgz ...&lt;br/&gt;Starting to download mongo&lt;/span&gt;-1.2.10.tgz (86,463&lt;span style="color: #000000;"&gt; bytes)&lt;br/&gt;.....................done: &lt;/span&gt;86,463&lt;span style="color: #000000;"&gt; bytes&lt;br/&gt;&lt;/span&gt;36&lt;span style="color: #000000;"&gt; source files, building&lt;br/&gt;running: phpize&lt;br/&gt;Configuring &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br/&gt;PHP Api Version:         &lt;/span&gt;20041225&lt;span style="color: #000000;"&gt;&lt;br/&gt;Zend Module Api No:      &lt;/span&gt;20060613&lt;span style="color: #000000;"&gt;&lt;br/&gt;Zend Extension Api No:   &lt;/span&gt;220060519&lt;br/&gt;/usr/bin/phpize: /tmp/mongo/build/shtool: /bin/&lt;span style="color: #000000;"&gt;sh: bad interpreter: Permission denied&lt;br/&gt;Cannot find autoconf. Please check your autoconf installation and the&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$PHP_AUTOCONF&lt;/span&gt;&lt;span style="color: #000000;"&gt; environment variable. Then, rerun this script.&lt;br/&gt;&lt;br/&gt;ERROR: `phpize' failed&lt;/span&gt;&lt;/div&gt;&lt;p&gt;于是就自己安装，步骤如下：&lt;/p&gt;&lt;p&gt;* 下载Mongo扩展包：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;mkdir  /home/&lt;span style="color: #000000;"&gt;mongo_php&lt;br/&gt;cd &lt;/span&gt;/home/&lt;span style="color: #000000;"&gt;mongo_php&lt;br/&gt;pecl download mongo&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;我下载的版本是 mongo-1.2.10.tgz&lt;/em&gt;&lt;/p&gt;&lt;p&gt;* 解压文件并进入mongo目录，运行phpize命令，生成configure脚本：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;tar zxf mongo-1.2.10&lt;span style="color: #000000;"&gt;.tgz&lt;br/&gt;cd mongo&lt;/span&gt;-1.2.10&lt;br /&gt;phpize&lt;/div&gt;&lt;p&gt;执行配置与安装：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;./configure --with-php-config=/usr/bin/php-&lt;span style="color: #000000;"&gt;config&lt;br/&gt;make&lt;br/&gt;make install&lt;/span&gt;&lt;/div&gt;&lt;p&gt;安装成功后，显示安装成功后的路径&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Installing shared extensions:     /usr/lib/php/modules/&lt;/div&gt;&lt;p&gt;编辑 /etc/php.ini，添加mongo.so&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;vi /etc/php.ini&lt;/div&gt;&lt;p&gt;&lt;span&gt;extension=mongo.so&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;:wq 保存退出后，重启Apache&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;运行命令查看是否执行成功&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;php -i | grep mongo&lt;/div&gt;&lt;p&gt;或者在 phpinfo() 的输出中查看&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/40872/2012042312273830.jpg" alt="" data-pinit="registered" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2466237.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/04/23/2466237.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/04/07/2435980.html</id><title type="text">WordPress — 性能瓶颈，遭遇攻击</title><summary type="text">上一篇写了关于 《突破WordPress性能瓶颈——使用WordPress站群做SEO推广》。在最近的时间里，服务器依旧会瘫掉，无法处理HTTP请求。（每台Server安装了50个WP博客，每篇博客每天都有几十篇博客的更新，Google等各大主流爬虫成天都在爬）。分析了Apache的日志文件(/etc/httpd/logs/access_log)后发现有大量的扫描网站漏洞的程序在猜phpMyAdmin的后台路径等。213.149.105.61 - - [05/Apr/2012:22:03:39 -0400] "GET /mysql/index.php HTTP/1.1" 4</summary><published>2012-04-07T07:20:00Z</published><updated>2012-04-07T07:20:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/04/07/2435980.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/04/07/2435980.html"/><content type="html">&lt;p&gt;上一篇写了关于 《&lt;a id="homepage1_HomePageDays_DaysList_DayItem_0_DayList_0_TitleUrl_0" class="postTitle2" style="text-decoration: none; color: #999999; font-family: verdana, 宋体, Arial; font-weight: bold; line-height: 24px; padding: 0px; margin: 0px;" href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/30/2424456.html" target="_blank"&gt;突破WordPress性能瓶颈&amp;mdash;&amp;mdash;使用WordPress站群做SEO推广&lt;/a&gt;》。在最近的时间里，服务器依旧会瘫掉，无法处理HTTP请求。（每台Server安装了50个WP博客，每篇博客每天都有几十篇博客的更新，Google等各大主流爬虫成天都在爬）。分析了Apache的日志文件(/etc/httpd/logs/access_log)后发现有大量的扫描网站漏洞的程序在猜phpMyAdmin的后台路径等。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /mysql/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;292&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /myadmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;294&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /dbadmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;294&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /admin/phpmyadmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;301&lt;/span&gt; - &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /db/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;301&lt;/span&gt; - &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /mysqladmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;297&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;39&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /mysql/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;292&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;40&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /myadmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;294&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;40&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /db/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;301&lt;/span&gt; - &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;40&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /typo3/phpmyadmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;303&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;40&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /mysqladmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;297&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;40&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /mysql/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;292&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;213.149&lt;/span&gt;.&lt;span style="color: #800080;"&gt;105.61&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;05&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;22&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;40&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET /dbadmin/index.php HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;301&lt;/span&gt; - &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;p&gt;那么为何Server上的WP博客对于如上的攻击会不堪一击呢？答案就在于我Server上的WP博客配置使用了自定义Permalink，使用了自定义Permalink后，对于每个URL，WP程序都需要去尝试解析URL是否正确。那么这里就会带来对Mysql数据库的访问。当扫描程序对Server上的几个或几十个博客进行扫描的话，那么Mysql的连接数很快就会让Server当机了。默认的Mysql5.1的连接数为151，那么这个数值对于一个安装了50个WP的Server来说。一旦有扫描程序来，也就5分钟左右Server的Mysql的连接数就会飙到151。我在这篇文章&amp;mdash;&amp;nbsp;&lt;a id="homepage1_HomePageDays_DaysList_DayItem_1_DayList_1_TitleUrl_0" class="postTitle2" style="text-decoration: none; color: #333333; font-family: verdana, 宋体, Arial; font-weight: bold; line-height: 24px; padding: 0px; margin: 0px;" href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/27/2419869.html"&gt;Centos下修改mysql默认最大连接数&lt;/a&gt;&amp;nbsp;里提到了修改Mysql的连接数为1000。结果就是在一次的攻击中，Mysql的连接数飙到了760，导致我SSH都无法连接。只能联系机房硬重启机器。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;解决办法&lt;/strong&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;对于某些特定 User Agent, 我们可以在Apache的配置文件httpd.conf或者网站的.htaccess文件中去屏蔽它。比如我就是修改了Apache的配置文件httpd.conf。&lt;/p&gt;&lt;p&gt;比如我屏蔽了对于&amp;rdquo;ZmEu&amp;ldquo;的恶意扫描：&lt;/p&gt;&lt;p&gt;== 恶意扫描日志 ==&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #800080;"&gt;209.15&lt;/span&gt;.&lt;span style="color: #800080;"&gt;236.190&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;04&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;30&lt;/span&gt;:&lt;span style="color: #800080;"&gt;32&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET //phpmyadmin/ HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;288&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Made by &lt;span style="color: #0000ff;"&gt;ZmEu&lt;/span&gt; @ WhiteHat Team - www.whitehat.ro&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;209.15&lt;/span&gt;.&lt;span style="color: #800080;"&gt;236.190&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;04&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;30&lt;/span&gt;:&lt;span style="color: #800080;"&gt;32&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET //phpMyAdmin/ HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;288&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Made by &lt;span style="color: #0000ff;"&gt;ZmEu&lt;/span&gt; @ WhiteHat Team - www.whitehat.ro&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;209.15&lt;/span&gt;.&lt;span style="color: #800080;"&gt;236.190&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;04&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;30&lt;/span&gt;:&lt;span style="color: #800080;"&gt;32&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET //PMA/ HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;281&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Made by &lt;span style="color: #0000ff;"&gt;ZmEu&lt;/span&gt; @ WhiteHat Team - www.whitehat.ro&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;209.15&lt;/span&gt;.&lt;span style="color: #800080;"&gt;236.190&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;04&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;30&lt;/span&gt;:&lt;span style="color: #800080;"&gt;32&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET //phpmyadmin/ HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;301&lt;/span&gt; - &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Made by &lt;span style="color: #0000ff;"&gt;ZmEu&lt;/span&gt; @ WhiteHat Team - www.whitehat.ro&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #800080;"&gt;209.15&lt;/span&gt;.&lt;span style="color: #800080;"&gt;236.190&lt;/span&gt; - - [&lt;span style="color: #800080;"&gt;04&lt;/span&gt;/Apr/&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;:&lt;span style="color: #800080;"&gt;03&lt;/span&gt;:&lt;span style="color: #800080;"&gt;30&lt;/span&gt;:&lt;span style="color: #800080;"&gt;32&lt;/span&gt; -&lt;span style="color: #800080;"&gt;0400&lt;/span&gt;] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET //pma/ HTTP/1.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800080;"&gt;404&lt;/span&gt; &lt;span style="color: #800080;"&gt;281&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Made by &lt;span style="color: #0000ff;"&gt;ZmEu&lt;/span&gt; @ WhiteHat Team - www.whitehat.ro&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;p&gt;在httpd.conf中配置的网站的目录小节中做如下修改&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;Directory &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/home/website&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;SetEnvIfNoCase User-Agent "&lt;span style="color: #0000ff;"&gt;ZmEu&lt;/span&gt;" getout&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;    Options -Indexes FollowSymLinks&lt;br /&gt;    AllowOverride All&lt;br /&gt;    Order allow,deny&lt;br /&gt;    &lt;span style="color: #000000;"&gt;Allow from all&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;deny from env=getout&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;/div&gt;&lt;p&gt;以上红色的2行是需要添加的。其中蓝色的为User Agent中出现的关键词，也就是你要屏蔽的HTTP请求。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;对于那些修改了看似正常的User Agent来恶意扫描的。屏蔽IP其实不是个好办法，（每次扫描的IP都在变）。那就选择最简单、最笨的办法，不适用WP博客的自定义Permalink，使用默认的URL（就是带查询参数的: /?p=1170）。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2435980.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/04/07/2435980.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/03/30/2424456.html</id><title type="text">WordPress — 突破性能瓶颈，使用 WordPress 站群做 SEO 推广</title><summary type="text">WordPress本身的并发很低。在一台双核2.5G+，2G内存的Linux机器上。使用Apache的ab命令测试下来。并发在6-10个左右。这样的速度对于做站群的SEO策略来说，就是拿钱开玩笑，一台Server部署个50个WP博客，基本上也算是极限了。一旦Google来，基本上博客就无法访问了，很多情况下会报数据库的连接错误。这对google蜘蛛来说是灾难性的。（网站的访问速度也被参与了网站的排名）。那么有没有什么办法能提高单台Server上安装的WP博客的数量，还能在Google来的时候，保持良好的访问速度？本文将探讨如何在一台Server上部署上超过100，甚至超过200个WordPre</summary><published>2012-03-29T16:25:00Z</published><updated>2012-03-29T16:25:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/30/2424456.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/30/2424456.html"/><content type="html">&lt;p&gt;WordPress本身的并发很低。在一台双核2.5G+，2G内存的Linux机器上。使用Apache的ab命令测试下来。并发在6-10个左右。这样的速度对于做站群的SEO策略来说，就是拿钱开玩笑，一台Server部署个50个WP博客，基本上也算是极限了。一旦Google来，基本上博客就无法访问了，很多情况下会报数据库的连接错误。这对google蜘蛛来说是灾难性的。（网站的访问速度也被参与了网站的排名）。&lt;/p&gt;&lt;p&gt;那么有没有什么办法能提高单台Server上安装的WP博客的数量，还能在Google来的时候，保持良好的访问速度？&lt;/p&gt;&lt;p&gt;本文将探讨如何在一台Server上部署上超过100，甚至超过200个WordPress博客（在Google蜘蛛来或是大访问量的情况下，能正常的打开博客）&lt;/p&gt;&lt;p&gt;需要解决的问题&lt;/p&gt;&lt;p&gt;* 数据库的最大连接数&lt;/p&gt;&lt;p&gt;WP的硬伤就是Mysql。Mysql5.1+后的版本，默认的最大连接数为151，之前的才100。这点并发在有50个博客的服务器上，真的不够用。google蜘蛛以来，基本上就会有个别博客出现数据库无法连接的问题。&lt;/p&gt;&lt;p&gt;我一般会修改 /etc/my.cnf 文件，修改Mysql的最大连接数为1000，其实这个数值太大了也不好，Linux服务器以及Apache在内存的限制下，能打开的有效连接数也不是很大。超过300以上就能危险了。如果真要是到了1000个情况下，我想你SSH也无法登录了。只能听天由命了~~~&lt;/p&gt;&lt;p&gt;OK，修改数据库的最大连接数只是第一步，最简单的一步。其实这个修改不能改变什么，我们只是将Mysql预计会出现的问题先处理掉。下面就是专心优化WP了。&lt;/p&gt;&lt;p&gt;* WP博客文章静态化&lt;/p&gt;&lt;p&gt;通过ab命令，在启用了WP super cache插件的情况下。相同Server的并发在1300+左右。这和并发10来说，简直就是天壤之别啊。&lt;/p&gt;&lt;p&gt;（具体如何安装WP super cache,可参阅其它资料。&lt;strong&gt;或者我下次补一篇文章&lt;/strong&gt;）&lt;/p&gt;&lt;p&gt;我这里要说的是：&lt;/p&gt;&lt;p&gt;安装了WP super cache后，首先需要开启预处理所有的文章页面（建立永不过期的缓存文件）&lt;/p&gt;&lt;p&gt;为每个博客添加一个robots.txt文件，屏蔽对tag/, category/, 2012/等URL的抓取。&lt;/p&gt;&lt;p&gt;为每个博客添加Google Sitemap工具，生成站点地图。&lt;/p&gt;&lt;p&gt;对于新添加的文章而言，缓存系统需要在访问一次后才能生成静态缓存文件。对于做推广来说的博客，通常一个站长手里有数百个博客，发布博客也通常是使用伪原创软件自动发布的。一个博客每天可能会发布几十篇文章，不可能在所有的博客发布文章后，一个一个页面的去点击（让WP缓存静态文件）。所以这里需要一个类似于蜘蛛的程序，在发布文章后，去模拟蜘蛛去采。这样当蜘蛛来采集的时候，WP已经为它准备好了静态页面，瞬间让对WP博客的访问速度提高好几个等级）。但是有些博客的Google来的很快，可能发布了一篇文章后5分钟，蜘蛛就来了。所以最好的策略就是在发布了一篇文章后，程序能访问一次当前发布的文章，这样就算蜘蛛在5分钟内来采，我们的WP也已经缓存好了对应的静态文件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于做推广的WP博客，在配置的时候需要注意。&lt;/p&gt;&lt;p&gt;* &lt;strong&gt;为博客添加robots.txt，屏蔽Tag，分类，存档的抓取&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;user-agent: *&lt;br /&gt;disallow: /wp-&lt;br /&gt;disallow: /feed/&lt;br /&gt;disallow: /comments/feed&lt;br /&gt;disallow: /trackback/&lt;br /&gt;disallow: /sample-page/&lt;br /&gt;disallow: /hello-world/&lt;br /&gt;disallow: /category/&lt;br /&gt;disallow: /tag/&lt;br /&gt;disallow: /&lt;span style="color: #800080;"&gt;2012&lt;/span&gt;/&lt;/div&gt;&lt;p&gt;* &lt;strong&gt;禁用博客文章的评论&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;* &lt;strong&gt;对文章的评论需要登录的用户才可以&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;*&lt;strong&gt; 取消PingBack等&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;* 取消发布文章Ping文章中的URL（这点很关键，如果你是用WP博客做推广的，那么文章里面难免会出现你需要推广的网站的URl，如果这个选项没用禁用，那么在发布一篇文章后，WP会在Ping文章中出现的URL。如果你服务器上很多的博客在使用程序自动发布文章的话，那么可能对于被推广的服务器来说。在短期内连接数很飙升，严重是会导致被推广的服务器无法访问）&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2424456.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/30/2424456.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bruceleeliya/archive/2012/03/27/2419869.html</id><title type="text">CentOS — 修改 MySQL 默认最大连接数</title><summary type="text">vi /usr/bin/mysqld_safe找到mysqld启动的那两行，在后面加上参数 ：-O max_connections=1000（大概在300多行左右），可搜索关键词if test -z "$args"if test -z "$args" then $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking -</summary><published>2012-03-27T09:07:00Z</published><updated>2012-03-27T09:07:00Z</updated><author><name>Old</name><uri>http://www.cnblogs.com/bruceleeliya/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/27/2419869.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/27/2419869.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;vi /usr/bin/mysqld_safe&lt;/div&gt;&lt;p&gt;&lt;span&gt;找到mysqld启动的那两行，在后面加上参数 ：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;-O max_connections=1000&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;（大概在300多行左右），可搜索关键词&amp;nbsp;if test -z "$args"&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; test -z &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;$args&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;  then&lt;br /&gt;    $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking -O max_connections=&lt;span style="color: #800080;"&gt;1000&lt;/span&gt; &amp;gt;&amp;gt; $err_log &lt;span style="color: #800080;"&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;    eval &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking $args -O max_connections=1000 &amp;gt;&amp;gt; $err_log 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;  fi&lt;/div&gt;&lt;p&gt;或者修改 my.cnf&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;vi /etc/my.cnf&lt;/div&gt;&lt;p&gt;在最后添加如下代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[mysqld]&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;-variable=max_connections=&lt;span style="color: #800080;"&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;查看Mysql连接数&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;mysqladmin -uroot -p &lt;span&gt;processlist&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;show full processlist;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bruceleeliya/aggbug/2419869.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bruceleeliya/archive/2012/03/27/2419869.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
