<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Linux_博客园|网站分类</title><subtitle type="text">代码改变世界</subtitle><id>http://feed.cnblogs.com/blog/sitecateogry/linux/rss</id><updated>2012-05-30T18:16:53Z</updated><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cate/linux/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/sitecateogry/linux/rss"/><entry><id>http://www.cnblogs.com/liangle/archive/2012/05/30/2517232.html</id><title type="text">Nginx + PHP 5.2.17(FastCGI) 502 Bad Gateway错误</title><summary type="text"/><published>2012-05-30T09:53:00Z</published><updated>2012-05-30T09:53:00Z</updated><author><name>亮了Over</name><uri>http://www.cnblogs.com/liangle/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liangle/archive/2012/05/30/2517232.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liangle/archive/2012/05/30/2517232.html"/><content type="html">&lt;p&gt;1、查看当前的PHP FastCGI进程数是否够用：netstat -anpo | grep &amp;ldquo;php-cgi&amp;rdquo; | wc -l&lt;/p&gt;&lt;p&gt;如果实际使用的&amp;rdquo;FastCGI进程数&amp;rdquo;接近预设的&amp;rdquo;FastCGI进程数&amp;rdquo;，那么，说明&amp;rdquo;FastCGI进程数&amp;rdquo;不够用，需要增大。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;2、部分PHP程序的执行时间超过了Nginx的等待时间，可以适当增加nginx.conf配置文件中FastCGI的timeout时间，例如：&lt;/p&gt;&lt;p&gt;&amp;hellip;&amp;hellip;&lt;br /&gt;http&lt;br /&gt;{&lt;br /&gt;&amp;hellip;&amp;hellip;&lt;br /&gt;fastcgi_connect_timeout 300;&lt;br /&gt;fastcgi_send_timeout 300;&lt;br /&gt;fastcgi_read_timeout 300;&lt;br /&gt;&amp;hellip;&amp;hellip;&lt;br /&gt;}&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liangle/aggbug/2517232.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liangle/archive/2012/05/30/2517232.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/XL-Liang/archive/2012/05/30/2526364.html</id><title type="text">Nginx 正向代理</title><summary type="text"/><published>2012-05-30T07:09:00Z</published><updated>2012-05-30T07:09:00Z</updated><author><name>sool</name><uri>http://www.cnblogs.com/XL-Liang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/XL-Liang/archive/2012/05/30/2526364.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/XL-Liang/archive/2012/05/30/2526364.html"/><content type="html">&lt;p&gt;Nginx配置如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;server&lt;br/&gt;        {&lt;br/&gt;                listen       8080;&lt;br/&gt;                server_name www.xxx.com;&lt;br/&gt;                index index.html index.htm index.php;&lt;br/&gt;                root  /home/wwwroot;&lt;br/&gt;                location / {&lt;br/&gt;                    resolver        222.166.225.132;&lt;br/&gt;                    proxy_pass      $scheme://$http_host$request_uri;&lt;br/&gt;                    proxy_buffers   256 4k;&lt;br/&gt;&lt;br/&gt;                }&lt;br/&gt;                access_log off;&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;p&gt;注意项：&lt;/p&gt;&lt;p&gt;1. 不能有hostname&lt;/p&gt;&lt;p&gt;2. 必须有resolver, 即dns，即上面的x.x.x.x，换成当前机器的DNS服务器ip即可(查看dns方法 cat /etc/resolv.conf 代理使用)&lt;/p&gt;&lt;p&gt;3 . $http_host和$request_uri是nginx系统变量，不要想着替换他们，保持原样就OK。&lt;/p&gt;&lt;p&gt;然后在浏览器中配置代理就可以了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/XL-Liang/aggbug/2526364.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/XL-Liang/archive/2012/05/30/2526364.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2012/05/30/2526146.html</id><title type="text">No package nginx available. |一次解决一个问题</title><summary type="text"/><published>2012-05-30T05:40:00Z</published><updated>2012-05-30T05:40:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2012/05/30/2526146.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2012/05/30/2526146.html"/><content type="html">&lt;p&gt;&lt;font face="宋体"&gt;No package nginx available.&amp;#160; |一次解决一个问题     &lt;hr /&gt;今天在新买的vps上安装nginx时提示没有nginx的包可安装      &lt;hr /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;问题现场&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;[root@localhost ~]# yum -y install nginx     &lt;br /&gt;Loaded plugins: fastestmirror      &lt;br /&gt;Loading mirror speeds from cached hostfile      &lt;br /&gt;* addons: centos.ustc.edu.cn      &lt;br /&gt;* base: centos.ustc.edu.cn      &lt;br /&gt;* extras: centos.ustc.edu.cn      &lt;br /&gt;* updates: data.nicehosting.co.kr      &lt;br /&gt;Setting up Install Process      &lt;br /&gt;&lt;font style="background-color: #ffff00"&gt;No package nginx available.&lt;/font&gt;      &lt;br /&gt;Nothing to do      &lt;hr /&gt;解决方法&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://winhows.net/search/no-package-nginx-available-yum/"&gt;&lt;font face="宋体"&gt;http://winhows.net/search/no-package-nginx-available-yum/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;在使用上述方法解决问题时发现,文中指示的 rpm包不可用,下载不了,404&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cyberciti.biz/faq/rhel-fedora-centos-linux-enable-epel-repo/"&gt;&lt;font face="宋体"&gt;http://www.cyberciti.biz/faq/rhel-fedora-centos-linux-enable-epel-repo/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;上述地址中的方法肯定了必须要解决 EPEL才可以安装nginx,问题转为寻找一个可用的rpm包&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;问题转为:&lt;font style="background-color: #ffff00"&gt;How Do I Enable EPEL Repo under CentOS or RHEL Servers?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rpm.pbone.net/index.php3/stat/4/idpl/15297742/dir/fedora_6/com/epel-release-6-5.noarch.rpm.html"&gt;&lt;font face="宋体"&gt;http://rpm.pbone.net/index.php3/stat/4/idpl/15297742/dir/fedora_6/com/epel-release-6-5.noarch.rpm.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;使用命令:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;rpm -Uvh &lt;/font&gt;&lt;a title="ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm" href="ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm"&gt;&lt;font face="宋体"&gt;ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;以上内容即可启用EPEL,之后再次yum install nginx即可安装!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201205/201205301339513673.png"&gt;&lt;font face="宋体"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Image(18)" border="0" alt="Image(18)" src="http://images.cnblogs.com/cnblogs_com/kkun/201205/201205301339511655.png" width="615" height="589" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;最终在此找到大量可用的rpm再次按照链接1文中提到的方法,解决战斗!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201205/201205301339522702.png"&gt;&lt;font face="宋体"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Image(19)" border="0" alt="Image(19)" src="http://images.cnblogs.com/cnblogs_com/kkun/201205/201205301339521033.png" width="609" height="512" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201205/201205301339522952.png"&gt;&lt;font face="宋体"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Image(20)" border="0" alt="Image(20)" src="http://images.cnblogs.com/cnblogs_com/kkun/201205/201205301339532047.png" width="609" height="512" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;[root@303914 downloads]# rpm -Uvh &lt;/font&gt;&lt;a href="ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm"&gt;&lt;font face="宋体"&gt;ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Retrieving &lt;/font&gt;&lt;a href="ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm"&gt;&lt;font face="宋体"&gt;ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font face="宋体"&gt;warning: /var/tmp/rpm-tmp.xrqJSG: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY     &lt;br /&gt;Preparing...&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ########################################### [100%]      &lt;br /&gt;&amp;#160;&amp;#160; 1:epel-release&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ########################################### [100%]      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;[root@303914 downloads]# yum repolist     &lt;br /&gt;Loaded plugins: fastestmirror      &lt;br /&gt;Loading mirror speeds from cached hostfile      &lt;br /&gt;epel/metalink&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160; 12 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; * epel: mirrors.solfo.com      &lt;br /&gt;epel&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 4.0 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;epel/primary_db&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 3.6 MB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:01&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;repo id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repo name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; status      &lt;br /&gt;base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CentOS-6 - Base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4,764      &lt;br /&gt;epel&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Extra Packages for Enterprise Linux 6 - i386&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6,061      &lt;br /&gt;extras&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CentOS-6 - Extras&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4      &lt;br /&gt;updates&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CentOS-6 - Updates&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 732      &lt;br /&gt;vz-base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; vz-base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3      &lt;br /&gt;vz-updates&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; vz-updates&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0      &lt;br /&gt;repolist: 11,564      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;[root@303914 downloads]# yum install nginx     &lt;br /&gt;Loaded plugins: fastestmirror      &lt;br /&gt;Loading mirror speeds from cached hostfile      &lt;br /&gt; * epel: mirrors.solfo.com      &lt;br /&gt;Setting up Install Process      &lt;br /&gt;Resolving Dependencies      &lt;br /&gt;--&amp;gt; Running transaction check      &lt;br /&gt;---&amp;gt; Package nginx.i686 0:1.0.15-1.el6 will be installed      &lt;br /&gt;--&amp;gt; Processing Dependency: libxslt.so.1(LIBXML2_1.0.18) for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libxslt.so.1(LIBXML2_1.0.11) for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libxslt.so.1 for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libgd.so.2 for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libexslt.so.0 for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libGeoIP.so.1 for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: gd for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: GeoIP for package: nginx-1.0.15-1.el6.i686      &lt;br /&gt;--&amp;gt; Running transaction check      &lt;br /&gt;---&amp;gt; Package GeoIP.i686 0:1.4.8-1.el6 will be installed      &lt;br /&gt;---&amp;gt; Package gd.i686 0:2.0.35-10.el6 will be installed      &lt;br /&gt;--&amp;gt; Processing Dependency: libfontconfig.so.1 for package: gd-2.0.35-10.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libX11.so.6 for package: gd-2.0.35-10.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libXpm.so.4 for package: gd-2.0.35-10.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libfreetype.so.6 for package: gd-2.0.35-10.el6.i686      &lt;br /&gt;---&amp;gt; Package libxslt.i686 0:1.1.26-2.el6 will be installed      &lt;br /&gt;--&amp;gt; Running transaction check      &lt;br /&gt;---&amp;gt; Package fontconfig.i686 0:2.8.0-3.el6 will be installed      &lt;br /&gt;---&amp;gt; Package freetype.i686 0:2.3.11-6.el6_2.9 will be installed      &lt;br /&gt;---&amp;gt; Package libX11.i686 0:1.3-2.el6 will be installed      &lt;br /&gt;--&amp;gt; Processing Dependency: libX11-common = 1.3-2.el6 for package: libX11-1.3-2.el6.i686      &lt;br /&gt;--&amp;gt; Processing Dependency: libxcb.so.1 for package: libX11-1.3-2.el6.i686      &lt;br /&gt;---&amp;gt; Package libXpm.i686 0:3.5.8-2.el6 will be installed      &lt;br /&gt;--&amp;gt; Running transaction check      &lt;br /&gt;---&amp;gt; Package libX11-common.noarch 0:1.3-2.el6 will be installed      &lt;br /&gt;---&amp;gt; Package libxcb.i686 0:1.5-1.el6 will be installed      &lt;br /&gt;--&amp;gt; Processing Dependency: libXau.so.6 for package: libxcb-1.5-1.el6.i686      &lt;br /&gt;--&amp;gt; Running transaction check      &lt;br /&gt;---&amp;gt; Package libXau.i686 0:1.0.5-1.el6 will be installed      &lt;br /&gt;--&amp;gt; Finished Dependency Resolution&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Dependencies Resolved&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;================================================================================     &lt;br /&gt; Package&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Arch&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Version&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Repository&amp;#160;&amp;#160;&amp;#160;&amp;#160; Size      &lt;br /&gt;================================================================================      &lt;br /&gt;Installing:      &lt;br /&gt; nginx&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.0.15-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; epel&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 381 k      &lt;br /&gt;Installing for dependencies:      &lt;br /&gt; GeoIP&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.4.8-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; epel&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 621 k      &lt;br /&gt; fontconfig&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.8.0-3.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 186 k      &lt;br /&gt; freetype&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.3.11-6.el6_2.9&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; updates&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 363 k      &lt;br /&gt; gd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.0.35-10.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 141 k      &lt;br /&gt; libX11&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 585 k      &lt;br /&gt; libX11-common&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; noarch&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.3-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 188 k      &lt;br /&gt; libXau&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.0.5-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 22 k      &lt;br /&gt; libXpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.5.8-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 58 k      &lt;br /&gt; libxcb&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.5-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 104 k      &lt;br /&gt; libxslt&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.1.26-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 448 k&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Transaction Summary     &lt;br /&gt;================================================================================      &lt;br /&gt;Install&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 11 Package(s)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Total download size: 3.0 M     &lt;br /&gt;Installed size: 10 M      &lt;br /&gt;Is this ok [y/N]: y      &lt;br /&gt;Downloading Packages:      &lt;br /&gt;(1/11): GeoIP-1.4.8-1.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 621 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(2/11): fontconfig-2.8.0-3.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 186 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(3/11): freetype-2.3.11-6.el6_2.9.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 363 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(4/11): gd-2.0.35-10.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 141 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(5/11): libX11-1.3-2.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 585 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:01&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(6/11): libX11-common-1.3-2.el6.noarch.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 188 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(7/11): libXau-1.0.5-1.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160; 22 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(8/11): libXpm-3.5.8-2.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160; 58 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(9/11): libxcb-1.5-1.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 104 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(10/11): libxslt-1.1.26-2.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 448 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;(11/11): nginx-1.0.15-1.el6.i686.rpm&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; | 381 kB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:00&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;--------------------------------------------------------------------------------      &lt;br /&gt;Total&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 367 kB/s | 3.0 MB&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00:08&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY      &lt;br /&gt;Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6      &lt;br /&gt;Importing GPG key 0x0608B895:      &lt;br /&gt; Userid : EPEL (6) &amp;lt;epel@fedoraproject.org&amp;gt;      &lt;br /&gt; Package: epel-release-6-5.noarch (installed)      &lt;br /&gt; From&amp;#160;&amp;#160; : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6      &lt;br /&gt;Is this ok [y/N]: y      &lt;br /&gt;Running rpm_check_debug      &lt;br /&gt;Running Transaction Test      &lt;br /&gt;Transaction Test Succeeded      &lt;br /&gt;Running Transaction      &lt;br /&gt;Warning: RPMDB altered outside of yum.      &lt;br /&gt;&amp;#160; Installing : freetype-2.3.11-6.el6_2.9.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1/11       &lt;br /&gt;&amp;#160; Installing : libX11-common-1.3-2.el6.noarch&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2/11       &lt;br /&gt;&amp;#160; Installing : fontconfig-2.8.0-3.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3/11       &lt;br /&gt;&amp;#160; Installing : GeoIP-1.4.8-1.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4/11       &lt;br /&gt;&amp;#160; Installing : libxslt-1.1.26-2.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 5/11       &lt;br /&gt;&amp;#160; Installing : libXau-1.0.5-1.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6/11       &lt;br /&gt;&amp;#160; Installing : libxcb-1.5-1.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 7/11       &lt;br /&gt;&amp;#160; Installing : libX11-1.3-2.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 8/11       &lt;br /&gt;&amp;#160; Installing : libXpm-3.5.8-2.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 9/11       &lt;br /&gt;&amp;#160; Installing : gd-2.0.35-10.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 10/11       &lt;br /&gt;&amp;#160; Installing : nginx-1.0.15-1.el6.i686&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 11/11 &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Installed:     &lt;br /&gt;&amp;#160; nginx.i686 0:1.0.15-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Dependency Installed:     &lt;br /&gt;&amp;#160; GeoIP.i686 0:1.4.8-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fontconfig.i686 0:2.8.0-3.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; freetype.i686 0:2.3.11-6.el6_2.9&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gd.i686 0:2.0.35-10.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; libX11.i686 0:1.3-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; libX11-common.noarch 0:1.3-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; libXau.i686 0:1.0.5-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; libXpm.i686 0:3.5.8-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; libxcb.i686 0:1.5-1.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; libxslt.i686 0:1.1.26-2.el6&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;Complete!     &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2526146.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2012/05/30/2526146.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MRPUNK/archive/2012/05/30/2525097.html</id><title type="text">Linux服务器管理系统wdcp Lanmp</title><summary type="text"/><published>2012-05-30T00:49:00Z</published><updated>2012-05-30T00:49:00Z</updated><author><name>MR.Punk</name><uri>http://www.cnblogs.com/MRPUNK/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MRPUNK/archive/2012/05/30/2525097.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MRPUNK/archive/2012/05/30/2525097.html"/><content type="html">&lt;p&gt;wdcp（WDlinux Control Panel）是一套用PHP开发的Linux服务器管理系统，旨在易于使用和管理Linux服务器，可以在线通过网页管理服务器和虚拟主机。简单，方便，易操作。只有Linux版本，没有Windows版本，让你方便地使用和管理Linux服务器，让不懂Linux的人也可以用Linux做服务器了。支持CentOS/RedHat版本，其它Linux版本尚未测试，欢迎测试！&lt;/p&gt;&lt;p&gt;&lt;img src="http://upload.chinaz.com/2012/0528/1338198973409.png" alt="" border="0" /&gt;&lt;/p&gt;&lt;p&gt;lanmp一键安装包是wdlinux官网2010年开始推出的lamp，lnmp，lnamp（apache，nginx，php，mysql，zend，eAccelerator，pureftpd）应用环境的快速简易安装包，执行一个脚本，整个环境就安装完成就可使用，快速，方便易用，安全稳定&lt;/p&gt;&lt;p&gt;1 支持lamp（linux+apache+php+mysql），lnmp（linux+nginx+php+mysql）环境快速安装部署上线&lt;/p&gt;&lt;p&gt;2 支持lnamp，即支持nginx+apache组合环境的应用，也即是nginx前端处理静态，图片等，apche处理后台php脚本程序。nginx在处理静态文件上有着非常好的性能和稳定性，且省节点资源，但在处理php的应用上相对没那么稳定，而apache在处理php的应用上是非常稳定的，也因此，目前比较流行的一个n+a的组合应用应运而生&lt;/p&gt;&lt;p&gt;3 同时集成最新版本的wdcp服务器/虚拟主机管理系统，wdcp （WDlinux Control Panel）是一套Linux服务器/虚拟主机管理系统，可通过web界面对服务器进行日常的管理和维护，省去通过终端输命令的烦琐操作和难度，更是降低了使用Linux做web服务器的门槛，让更多人的可以轻松使用Linux做服务器。以及可以管理网站，FTP，数据库等，包括在线创建，删除，修改等操作，详细功能介绍可查看http://www.wdlinux.cn/wdcp&lt;/p&gt;&lt;p&gt;4 支持WdLinux定制版，CentOS，RedHat，ubunntu，更多的版本支持将在后续增加，也欢迎测试&lt;/p&gt;&lt;p&gt;&lt;strong&gt;演示&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;http://demo.wdlinux.cn:8080&lt;/p&gt;&lt;p&gt;用户密码：admin/wdlinux.cn&lt;/p&gt;&lt;p&gt;&lt;strong&gt;此次更新&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1 增加ubuntu系统的支持，测试版本为12.04&lt;/p&gt;&lt;p&gt;2 增加安装环境切换，可切换到lamp，lnmp，lnamp等&lt;/p&gt;&lt;p&gt;部分组件的可选安装，如memcache，mysqli，pdo_mysql，innodb等&lt;/p&gt;&lt;p&gt;具体的安装方法可见http://www.wdlinux.cn/bbs/thread-1356-1-1.html&lt;/p&gt;&lt;p&gt;&lt;strong&gt;下载安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;wget http://dl.wdlinux.cn:5180/lanmp_v2.3.tar.gz&lt;/p&gt;&lt;p&gt;tar zxvf lanmp_v2.3.tar.gz&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装全部&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;sh in.sh&lt;/p&gt;&lt;p&gt;可选安装lnamp，lamp，lnmp三个中任一个&lt;/p&gt;&lt;p&gt;wdcp管理系统后台访问地址：http://ip:8080&lt;/p&gt;&lt;p&gt;默认用户密码：adminwdlinux.cn&lt;/p&gt;&lt;p&gt;mysql默认的用户密码：rootwdlinux.cn&lt;/p&gt;&lt;p&gt;&lt;strong&gt;web应用环境切换&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如安装好后又想切换到另一环境，可如下操作，但不可重复操作&lt;/p&gt;&lt;p&gt;。/tolamp.sh 切换至lamp环境&lt;/p&gt;&lt;p&gt;。/tolnmp.sh 切换至lnmp环境&lt;/p&gt;&lt;p&gt;。/tolnamp.sh 切换至lnamp环境&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装说明&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有比较多的朋友说在安装mysql时会&amp;ldquo;卡住&amp;rdquo;，其实不然，只不过是因为mysql的编译时间比较长，10至30分钟不等，具体看机器的硬件配置，所以请耐心等待，但有些是网络中断就真像卡住了一样，到底是不是真卡住，可以看这里的说明&lt;/p&gt;&lt;p&gt;http://www.wdlinux.cn/bbs/thread-65-1-1.html&lt;/p&gt;&lt;p&gt;&lt;strong&gt;相关说明&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;所有软件安装目录/www/wdlinux&lt;/p&gt;&lt;p&gt;站点配置文件&lt;/p&gt;&lt;p&gt;/www/wdlinux/nginx/conf/vhost&lt;/p&gt;&lt;p&gt;/www/wdlinux/apache/conf/vhost&lt;/p&gt;&lt;p&gt;数据库配置文件/www/wdlinux/etc/my.cnf&lt;/p&gt;&lt;p&gt;数据库数据文件目录 /www/wdlinux/mysql/var&lt;/p&gt;&lt;p&gt;卸载或重装（注意备份数据，否则后果自负）&lt;/p&gt;&lt;p&gt;sh in.sh un&lt;/p&gt;&lt;p&gt;即可卸载，并且自动重起&lt;/p&gt;&lt;p&gt;启动完登录后，再次运行&lt;/p&gt;&lt;p&gt;sh in.sh&lt;/p&gt;&lt;p&gt;便可重装&lt;/p&gt;&lt;p&gt;重装后重新打开IE，否则会有session错误提示的问题&lt;/p&gt;&lt;p&gt;相关软件版本&lt;/p&gt;&lt;p&gt;httpd-2.2.22&lt;/p&gt;&lt;p&gt;nginx-1.0.12&lt;/p&gt;&lt;p&gt;php-5.2.17&lt;/p&gt;&lt;p&gt;mysql-5.1.61&lt;/p&gt;&lt;p&gt;phpmyadmin-3.3.7&lt;/p&gt;&lt;p&gt;zend-3.3.3&lt;/p&gt;&lt;p&gt;eAccelerator-0.9.5.3&lt;/p&gt;&lt;p&gt;pure-ftpd-1.0.35&lt;/p&gt;&lt;p&gt;文章来源：http://cnbeta.com/articles/189517.htm&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MRPUNK/aggbug/2525097.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MRPUNK/archive/2012/05/30/2525097.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/05/29/2524801.html</id><title type="text">linux以命令行下配置连接wlan无线网卡</title><summary type="text"/><published>2012-05-29T14:41:00Z</published><updated>2012-05-29T14:41:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/05/29/2524801.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/05/29/2524801.html"/><content type="html">&lt;div&gt;大体思路&lt;/div&gt;&lt;div&gt;工作的大体思路如下：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;用iwconfig开启无线网卡的电源，并查找区域内的无线网络&lt;/div&gt;&lt;div&gt;连接到相应的无线网络&lt;/div&gt;&lt;div&gt;通过ifconfig启用无线网卡，并获取IP（如果使用DHCP的话）&lt;/div&gt;&lt;div&gt;注意：&lt;/div&gt;&lt;div&gt;假设无线被识别为wlan0，如果您的网卡没有被识别为wlan0，可以在操作时做相应的修改。&lt;/div&gt;&lt;div&gt;具体过程&lt;/div&gt;&lt;div&gt;1. 打开无线网卡电源&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;iwconfig wlan0 txpower on&lt;/div&gt;&lt;div&gt;2. 列出区域内的无线网络&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;iwlist wlan0 scan&lt;/div&gt;&lt;div&gt;3. 假设要连接到网络MyHome（即essid为MyHome的网络），那么输入命令&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;iwconfig wlan0 essid "MyHome"&lt;/div&gt;&lt;div&gt;如果网络是加密的，密码是0123456789，那么就输入命令&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;iwconfig wlan0 essid "MyHome" key 0123-4567-89&lt;/div&gt;&lt;div&gt;4. 如果正常的话，输入&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;iwconfig wlan0&lt;/div&gt;&lt;div&gt;就可以看到连接正常的各项参数了。 5. 启用无线网卡&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ifconfig wlan0 up&lt;/div&gt;&lt;div&gt;6. 如果是用DHCP获取IP的，那么用dhclient或dhcpcd获取ip&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;dhclient wlan0&lt;/div&gt;&lt;div&gt;或&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;dhcpcd wlan0&lt;/div&gt;&lt;div&gt;7. 现在无线网卡应该可以正常使用了&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;注意：一定要把NetworkManager服务停掉&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2524801.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/05/29/2524801.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lzhskywalker/archive/2012/05/28/2521454.html</id><title type="text">Fedora和CentOS配置LDAP认证的vsftpd</title><summary type="text"/><published>2012-05-28T08:01:00Z</published><updated>2012-05-28T08:01:00Z</updated><author><name>lzhskywalker</name><uri>http://www.cnblogs.com/lzhskywalker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lzhskywalker/archive/2012/05/28/2521454.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lzhskywalker/archive/2012/05/28/2521454.html"/><content type="html">&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 公司内部的软件研发没有一个合适的发布方式向测试部门发布待测的软件版本，由于IT部门太土，自己又不太会搭建很复杂的持续集成系统，只好采用ftp服务器发布待测软件。目前软件研发部门拥有内部服务器一枚，是我向IT申请假设在VMware虚拟服务器内的一个Fedora14，上面装好了vsftpd服务，公司内网也有一台现成的LDAP认证服务器，不过配置非常简单。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 现在需求就是在这台Fedora上面配置vsftpd，能够让用户使用windows域帐号登录，并且实现不同目录的不同权限管理。本人对LDAP认证不甚了解，只知道以前实习的时候Intel内部办公采用的就是微软一整套集成协作系统，用起来超级爽，几经尝试把现在公司里面的Notes邮件客户端用thunderbird替换掉了，而且为了方便联系人管理，成功添加了LDAP服务器作为联系人地址簿。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 现在需要让vsftpd也使用这个东西认证，有点没头绪，先去网上搜了一下，大致的结果就是，70%的搜索结果内容和标题不吻合，完全没用；剩下20%的内容基本上都是作者也在尝试的过程中遇到奇怪的错误，导致认证不成功，属于求助贴，所以贴出来的配置也没啥参考价值；最后这10%的内容，作者倒是颇为笃定，也没说会出错啥的，就直接贴出配置文件内容，说明配置哪些服务，就结束了。要命的是，最后这些配置基本上都是在ubuntu上完成的，fedora上面屡试不过阿- -#&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 搜索的时候加上了关键字fedora，结果更要命，所有人都说fedora上面配置不能，一不小心系统不能登录了&amp;hellip;&amp;hellip;我了个去，有这么恐怖。回头想想，管他呢，反正是虚拟机，于是就按照unbuntu的步骤上去实验了，后果果然很严重，搞了半天ftp认证不通过，网络断了一次，再登录，我擦阿，本地帐号的认证全都拒绝了，悲了个剧阿&amp;hellip;&amp;hellip;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 幸好是虚拟机，找IT打开VMware的控制台，用我自己的帐号进去查看了一下log，发现原因了，因为看网上的帖子，认证的时候让配置一个nsswitch的东西，虽然不知道是啥，就配了，后来发现就是这个东西搞的鬼，相关配置的目的是把本地帐号也采用LDAP认证去了，而我本地帐号的LDAP配置还没写好，于是悲剧了。后来也是做好了重装虚拟机的心理准备之后，猛然发现，先前打开的一个ssh连接，当时一致连着却始终没有走到登录成功的地方，却也没说连不上，就没去管他，原来这货去尝试认证LDAP之后一致卡在哪里，试过各自配置文件里指定的认证方式之后，终于failover到本地帐号passwd文件认证了，于是成功登入系统，果断把那些做错的配置改回来&amp;hellip;&amp;hellip;虚惊一场阿&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 为了不把服务器上的wiki废掉，我还是自己装个centos先搞搞吧，于是自己装虚拟机搞起来，经过反复尝试，逐一把网上的配置筛选，不断的打开关闭某个配置项，删掉没用的配置，终于得出了系统装好之后，在默认配置下进行最小修改能够成功通过认证的配置方式。其中如果出现什么差错，失败的记录尽量去翻log，比如/var/log/messages，/var/log/secure等等，如果是登入认证失败，通常是secure文件会记录下来，登入之后的操作失败可以去看message或者/var/log/vsftpd或是其他你的ftp服务器指定的log文件。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;好了，废话完毕，下面是配置方法。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;首先简要说明，vsftpd服务器的认证方式可以选用第三方认证插件替代自带的机制，这里采用PAM模块，所以需要让vsftpd配置为采用PAM认证。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;第二，PAM认证方式因为是插件模式，其支持为许多软件提供第三方认证，所以其配置文件和是和调用PAM发起认证的软件一一对应，针对每个软件的不同需要，给PAM插件指定不同的后续认证方式，这里PAM的vsftpd配置就要指定成LDAP，这样就是告诉PAM当vsftpd服务器来发起认证的时候，你PAM就应该拿ftp服务器传递给你的帐号信息去做LDAP认证。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;第三，以我目前所知，LDAP的认证方式在系统内是唯一的，也就是说这个系统上不管是谁需要进行LDAP认证，都只能指定一套配置，一个LDAP服务器，我暂时还不了解能否为不同服务指定不同的LDAP服务器，这里指定好LDAP的服务器配置之后，PAM发起的LDAP认证就会来到LDAP这里，相关软件就会去LDAP服务器查询认证信息（我这里用的是openldap）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以下配置验证过的系统：&lt;span style="color: #ff0000;"&gt;Fedora14及以上，Centos6.0及以上&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 完成配置所需的软件组件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;在最小安装系统的基础上安装vsftpd和pam_ldap.so，或者在安装系统时勾选指定组件：&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;Base System -&amp;gt; Directory Client -&amp;gt; pam_ldap&lt;br/&gt;Servers -&amp;gt; Ftp Server&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;2. 关闭防火墙以简化配置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 安装完成后进入系统，为了方便起见，首先关闭防火墙，配置完成后根据需要修改防火墙配置再启动防火墙&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;service iptables stop&lt;/span&gt; #effective immediately&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;chkconfig iptables off&lt;/span&gt; #maintain off&lt;br/&gt;&lt;p&gt;&lt;strong&gt;3. 关闭SElinux以简化配置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 如果安装了SElinux，且不懂配置的，建议将其关闭。方法是修改&lt;span style="color: #0000ff;"&gt;/etc/selinux/config&lt;/span&gt;文件的如下内容&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;SELINUX=disabled&lt;/span&gt; #effective after restart&lt;br/&gt;&lt;p&gt;&lt;strong&gt;4. 配置PAM的LDAP认证参数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;设置pam的ldap认证配置，修改&lt;span style="color: #0000ff;"&gt;/etc/pam_ldap.conf&lt;/span&gt;文件，设置如下几个参数&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;host 10.0.1.1&lt;br/&gt;base cn=users,dc=server,dc=embedway,dc=com&lt;br/&gt;binddn cn=ldap,cn=users,dc=server,dc=embedway,dc=com&lt;br/&gt;bindpw 123456@E&lt;br/&gt;pam_login_attribute sAMAccountName&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;5. 配置vsftpd服务使用PAM的方式&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;设置vsftpd的pam认证配置，修改&lt;span style="color: #0000ff;"&gt;/etc/pam.d/vsftpd&lt;/span&gt;，添加如下两行&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;auth    sufficient pam_ldap.so&lt;/span&gt; #&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;keep this as the first 'auth' item&lt;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;account sufficient pam_ldap.so&lt;/span&gt; #&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;keep this as the first 'account' item&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;p&gt;&lt;strong&gt;6. 配置vsftpd服务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;设置vsftpd，启用guest用户以便配合ldap认证。在&lt;span style="color: #0000ff;"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;文件最下面添加如下内容（如果不是新安装的系统，则可能要适当修改其他选项）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;前提是你的默认vsftpd配置文件内已经存在一项&amp;ldquo;&lt;span style="color: #ff0000;"&gt;pam_service_name=vsftpd&lt;/span&gt;&amp;ldquo;&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;guest_enable=YES&lt;br/&gt;guest_username=ftp&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;7. 启动ftp服务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;执行如下命令启动ftp服务器&lt;/p&gt;&lt;span style="color: #0000ff;"&gt;service vsftpd start&lt;/span&gt; #effective immediately&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;chkconfig vsftpd on&lt;/span&gt;  #autostart after system bootup&lt;br /&gt;&lt;br /&gt;到此为止，全部配置完成～&lt;img src="http://www.cnblogs.com/lzhskywalker/aggbug/2521454.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lzhskywalker/archive/2012/05/28/2521454.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ypchenry/archive/2012/05/28/2520705.html</id><title type="text">我的日常VIM</title><summary type="text"/><published>2012-05-27T23:45:00Z</published><updated>2012-05-27T23:45:00Z</updated><author><name>清晨之臣</name><uri>http://www.cnblogs.com/ypchenry/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ypchenry/archive/2012/05/28/2520705.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ypchenry/archive/2012/05/28/2520705.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;相信每一vim本书都会介绍给初学者一个叫vimtutor的，可以花几十分钟时间跟着过一边。我总结一下最近看的&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;移动&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &lt;/strong&gt;&amp;nbsp; &lt;span style="font-size: 14px;"&gt;只列我用的比较多的命令，所有的注释都用"(vim脚本注释符)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; h      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;左&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; j      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;下&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; k      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;上&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; l      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;右，not left&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;w&lt;/span&gt;      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到下一个单词的首字符 a word forward&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; b      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到上一个单词的首字符&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; e      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到下一个单词的尾字符&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; ge     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到上一个单词的尾字符&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; $      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;将光标移动到当前行行尾&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; ^      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;将光标移动到当前行第一个非空白字符&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;将光标移动到当前行第一个字符&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;注： &amp;nbsp;1） &amp;nbsp;对于一个word(单词)边界的定义可以查看iskeyword选项.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2） &amp;nbsp;这些命令除了'0'命令以外都可以在前面接受一个记数，2$;上面所有命令可以在前面接受一些操作命令，如d$，dw等.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;搜索和定位标记与滚屏&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &lt;/strong&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="font-size: 14px;"&gt;单字符搜索&lt;/span&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: #008080;"&gt;1&lt;/span&gt; f&amp;lt;a&amp;gt;     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;单字符搜索，fa是在当前行搜索下一个a,find a&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; F&amp;lt;a&amp;gt;     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Fa是在当前行向前搜索上一个a&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; t&amp;lt;a&amp;gt;     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ta是当前行搜索下一个a,光标停在a的前一个字符，to a&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; T&amp;lt;a&amp;gt;     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;与ta方向相反&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;&amp;nbsp;&lt;span style="font-size: 14px;"&gt;单词搜索&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; /&lt;span style="color: #0000ff;"&gt;string&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;main&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;要用 /main&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; &lt;span style="color: #000000;"&gt;            如果文本有多个main,按下几次n就会移动到接下来的几个&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; &lt;span style="color: #000000;"&gt;            main中去;n前面也可以接受数字计数，如3n，就会找紧接&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; &lt;span style="color: #000000;"&gt;            着第三个main&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt; ？&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;    &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;与/string的功能相同，唯一的区别就是搜索的方向相反&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="font-size: 14px;"&gt;注： &amp;nbsp;1）可以用：set noingorecase 忽略字符大小写&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2）/和？命令都有记忆功能，可以用多次&amp;lt;UP&amp;gt;键选择搜索历史，记录命令最大的历史条数可以在会话viminfo上更改.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3) &amp;nbsp;搜索字符.*/?%$^[]等特殊字符要在前面加一个反斜杠转意&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4） 搜索到孤立的单词，也就是前后都没有其他字符的（除了空格，制表符）,如只搜the,不想搜到there或whether这样的，要用/\&amp;lt;the\&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5) &amp;nbsp;可以用:set hlsearch把要搜索的单词高亮显示，highlight search&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;&lt;span style="font-size: 14px;"&gt; 定位&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; G      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到文件的最后一行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; 15G    &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到文件的第15行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; gg     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到文件的第一行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; &lt;span style="color: #800080;"&gt;45&lt;/span&gt;%    &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到文件45%处&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt; H      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到当前屏幕的最开始，head or home&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt; M      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到当前屏幕的中间，middle&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt; L      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;光标移动到当前屏幕的最后，last&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="font-size: 14px;"&gt;注： &amp;nbsp; CTRL+G查看当前光标位置&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;标记&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;&lt;/strong&gt;&amp;nbsp; &amp;nbsp;1）在光标所在位置用m命令实现标记，如ma，就把当前光标状态标记为a,使用`a就会回到此光标位置;用:marks命令查看标记列表&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 2）:map设置简单的映射，如:map F5 i{&amp;lt;Esc&amp;gt;ea}&amp;lt;Esc&amp;gt; &amp;nbsp;,当光标在main这个单词的m上时，按下F5，这个命令会main变成{main}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="font-size: 14px;"&gt;滚屏&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; CTRL+U       &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;窗口向上滚半屏&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; CTRL+D       &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;窗口向下滚半屏&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; CTRL+E        &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向上滚一行，没太大实际意义&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; CTRL+Y        &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向下滚一行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt; CTRL+F        &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向前滚一整屏&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt; CTRL+B        &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向后滚一整屏&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt; zz            &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;当前行置于屏幕中央&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;8&lt;/span&gt; zt            &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;当前行置于屏幕顶端&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;9&lt;/span&gt; zb            &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;当前行置于屏幕底端&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;&amp;nbsp;改动&lt;/span&gt;&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;span style="color: #008080;"&gt; 1&lt;/span&gt; x           &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;删除一个字符&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; d           &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;其后跟任何一个位移命令，将删除从当前光标到位移终点处的文本&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;             内容，如dw，delete word                          &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; c           &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;与d命令功能类似，不同的在执行完删除后命令进去Insert模式，change &lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;dd&lt;/span&gt;          &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;删除一整行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; r           &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;等待键入下一个字符替代当前光标下的那个字符，如5rx&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; p           &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;把需要内容放到光标下，put&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; y           &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;复制，yank&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; yy          &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;复制一整行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*yy        &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;把一行内容复制到剪贴板&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*p         &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;把剪贴板内容复制过来&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;定制VIM&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 在linux系统的家目录下建一个.vimrc文件(ubuntu和fedora都需要自己建)， 然后在vimrc下写一些vim脚本命令就可以配置你的vim了,在vim配置文件上，要注意用户配置文件优先与系统配置文件，在增加vim plugin的时候要在～/.vim下mkdir plugin ftplugin 等等，把想用到的 &amp;nbsp;plugin（在/usr/share/vim/vim73/plugin或ftplugin或syntax）放到刚才新建的相应的文件夹下，当然如果对vim脚本比较熟悉也可以自己写一个plugin。下面是我的vimrc部分内容。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #000000;"&gt;set number&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; set nocompatible    &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 关闭兼容模式&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;filetype plugin indent on&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; syntax enable       &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 语法高亮&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;syntax on&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; set shortmess=atI   &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 去掉欢迎界面&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;set autoindent&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; set showcmd         &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 显示命令&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; set whichwrap=b,s,&amp;lt;,&amp;gt;,[,] &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 退格键和方向键可以换行&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; set incsearch       &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 增量式搜索&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; set ignorecase      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 搜索时忽略大小写&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; set ai              &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 自动缩进&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; set si              &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 智能缩进&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; set showmatch       &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; 显示匹配的括号&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; set history=&lt;span style="color: #800080;"&gt;400&lt;/span&gt;  &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; vim记住的历史操作的数量，默认的是20&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;set autowrite&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;从系统剪切板中复制，剪切，粘贴&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; map &amp;lt;F7&amp;gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;+y&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; map &amp;lt;F8&amp;gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;+x&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt; map &amp;lt;F9&amp;gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;+p&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="font-size: 15px;"&gt;viminfo&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 15px;"&gt;&lt;span style="font-size: 14px;"&gt;时刻要注意有这么一个东西，她记录了&amp;nbsp;&lt;strong&gt;1）命令行历史记录和搜索命令历史记录 2）vim寄存器中的内容 3）文件中的标记 4）缓冲区列表 5）全局变量，&lt;/strong&gt;每次推出vim时这些 &amp;nbsp;信息都会存在viminfo文件中，下次启动vim时vim会读取viminfo中的内容并恢复这些信息。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;可以用:set viminfo=string保存更多的东西，string指代要保存的东西，语法是一个选项字符跟一个参数，一对对的选项参数用逗号隔开，如:set viminfo='1000，&lt;/span&gt;:set viminfo='1000,f2&lt;/p&gt;&lt;p&gt;&amp;nbsp;string里的可选选项有&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;  为多少文件保存标记信息&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;f  是否保存全局标记，f0不保存，f1保存&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &amp;lt;&lt;span style="color: #000000;"&gt;  每个寄存器保存多少行&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;:  要保存冒号命令的历史记录数&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;@  要保存的输入历史记录数&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; /&lt;span style="color: #000000;"&gt;  要保存的搜索命令历史记录数&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; !&lt;span style="color: #000000;"&gt;  以大写开始并不含所有小写字母的全局变量&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;h  开始是禁用hlsearch选项&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; %&lt;span style="color: #000000;"&gt;  缓冲区列表&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; c  使用&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;encoding&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;选项中的方法进行字符编码转换&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; n  viminfo文件名字，必须是最后一项&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;编辑多个文件&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 14px;"&gt; &amp;nbsp;1）在vim窗口下可以用:edit 编辑两外一个文件，不需要重新打开一个vim窗口，如:edit 1.c&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;2) 启动vim是打开指定多个文件，如vim 1.c 2.c 3.c，：next跳转到下一个文件，:previous跳转到上一个文件，但跳转之前要保存当前文件，否则报错，所以最好用：wnext和：wprevious; :args显示整个文件列表和当前正在编辑的文件;:last和:first跳转到最后和最前一个文件。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;&amp;nbsp; &amp;nbsp;分割窗口&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&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;span style="color: #008080;"&gt; 1&lt;/span&gt; :&lt;span style="color: #0000ff;"&gt;split&lt;/span&gt;    &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;横着分割&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; :new      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;横着添加一个新窗口&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; :vsplit   &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;竖着分割&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; :vnew     &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;竖着添加新窗口&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; CRTL+W &lt;span style="color: #0000ff;"&gt;w&lt;/span&gt;&lt;span style="color: #000000;"&gt;  "按顺序切换小窗口&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; CRTL+&lt;span style="color: #000000;"&gt;W h&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; CRTL+&lt;span style="color: #000000;"&gt;W j&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; CRTL+&lt;span style="color: #000000;"&gt;W k&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; CRTL+W l   &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;按方向切换&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; :qall      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;关闭所有窗口&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; :&lt;span style="color: #0000ff;"&gt;wall&lt;/span&gt;      &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;保存所有窗口&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; vimdiff &lt;span style="color: #800080;"&gt;1&lt;/span&gt;.c &lt;span style="color: #800080;"&gt;2&lt;/span&gt;.c &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;创建一个垂直分割窗口比较这两个文件不同的地方&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="font-size: 19px; line-height: 27px;"&gt;&lt;strong&gt;页签&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: 27px; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; :tabedit filename 在正在编辑的vim窗口建一个叫filename 的页签&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: 27px; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; :tab split 新建一个页签&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: 27px; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gt命令或鼠标点击切换页签&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: 27px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;程序员的vim&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;1）CTRL+Z挂起vim，fg命令回到vim挂起前状态&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;2）zf创建折行，zo打开折行，zc关闭折叠&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;3）tags，ctags *.c 为所有.c文件创建tags,ctags -R 将当前目录下包括子目录所有tags生成一个大的tags；：tag functionname转到&lt;strong&gt;&lt;span&gt;fuctionname&lt;/span&gt;&lt;/strong&gt;函数的定义处，也可以将光标放到函数名处，按下CRTL+］达到一样的效果;:ptag 获取函数参数列表;:stag 分屏显示&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;&lt;span style="font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 注：可以下一个&lt;a href="http://vim.sourceforge.net/scripts/script.php?script_id=273"&gt;taglist&lt;/a&gt;（具体怎么设置google一下就知道了），显示tag的GUI，不过之前要安装&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;a style="font-size: 13px;" href="http://sourceforge.net/projects/ctags/"&gt;Exuberant Ctags&lt;/a&gt;，&lt;strong&gt;&lt;span style="font-size: 13px;"&gt;vim的taglist不支持gnu的ctags&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;4)假设正在编辑一个.c文件，光标在#include&amp;lt;sys/unistd.h&amp;gt;的左尖括号后面，此时按下gf(Normal模式)，vim就会找到unistd.h头文件定义的地方&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="line-height: 36px;"&gt;&lt;strong&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;span style="font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ypchenry/aggbug/2520705.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ypchenry/archive/2012/05/28/2520705.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520306.html</id><title type="text">查看Linux系统信息的常用命令</title><summary type="text"/><published>2012-05-27T08:37:00Z</published><updated>2012-05-27T08:37:00Z</updated><author><name>北国的雨</name><uri>http://www.cnblogs.com/lwm-1988/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520306.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520306.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一 系统：&lt;br&gt;&lt;/strong&gt;# uname -a # 查看内核/操作系统/CPU信息&lt;br&gt;# cat /etc/issue&lt;br&gt;# cat /etc/redhat-release # 查看操作系统版本&lt;br&gt;# cat /proc/cpuinfo # 查看CPU信息&lt;br&gt;# hostname # 查看计算机名&lt;br&gt;# lspci -tv # 列出所有PCI设备&lt;br&gt;# lsusb -tv # 列出所有USB设备&lt;br&gt;# lsmod # 列出加载的内核模块&lt;br&gt;# env # 查看环境变量 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;二 资源：&lt;/strong&gt;&lt;br&gt;# free -m # 查看内存使用量和交换区使用量&lt;br&gt;# df -h # 查看各分区使用情况&lt;br&gt;# du -sh &amp;lt;目录名&amp;gt; # 查看指定目录的大小&lt;br&gt;# grep MemTotal /proc/meminfo # 查看内存总量&lt;br&gt;# grep MemFree /proc/meminfo # 查看空闲内存量&lt;br&gt;# uptime # 查看系统运行时间、用户数、负载&lt;br&gt;# cat /proc/loadavg # 查看系统负载 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;三 磁盘和分区：&lt;/strong&gt;&lt;br&gt;# mount | column -t # 查看挂接的分区状态&lt;br&gt;# fdisk -l # 查看所有分区&lt;br&gt;# swapon -s # 查看所有交换分区&lt;br&gt;# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)&lt;br&gt;# dmesg | grep IDE # 查看启动时IDE设备检测状况 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;四 网络：&lt;/strong&gt;&lt;br&gt;# ifconfig # 查看所有网络接口的属性&lt;br&gt;# iptables -L # 查看防火墙设置&lt;br&gt;# route -n # 查看路由表&lt;br&gt;# netstat -lntp # 查看所有监听端口&lt;br&gt;# netstat -antp # 查看所有已经建立的连接&lt;br&gt;# netstat -s # 查看网络统计信息 &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;五 进程：&lt;/strong&gt;&lt;br&gt;# ps -ef # 查看所有进程&lt;br&gt;# top # 实时显示进程状态（另一篇文章里面有详细的介绍）&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;六 用户：&lt;/strong&gt;&lt;br&gt;# w # 查看活动用户&lt;br&gt;# id &amp;lt;用户名&amp;gt; # 查看指定用户信息&lt;br&gt;# last # 查看用户登录日志&lt;br&gt;# cut -d: -f1 /etc/passwd # 查看系统所有用户&lt;br&gt;# cut -d: -f1 /etc/group # 查看系统所有组&lt;br&gt;# crontab -l # 查看当前用户的计划任务 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;七 服务：&lt;/strong&gt;&lt;br&gt;# chkconfig --list # 列出所有系统服务&lt;br&gt;# chkconfig --list | grep on # 列出所有启动的系统服务 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;八 程序：&lt;/strong&gt;&lt;br&gt;# rpm -qa # 查看所有安装的软件包&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lwm-1988/aggbug/2520306.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520306.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520294.html</id><title type="text">几个比较常用的linux系统</title><summary type="text"/><published>2012-05-27T08:20:00Z</published><updated>2012-05-27T08:20:00Z</updated><author><name>北国的雨</name><uri>http://www.cnblogs.com/lwm-1988/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520294.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520294.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一 Mandriva&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mandriva原名Mandrake，最早由Gaël Duval创建并在1998年7月发布。记得前两年国内刚开始普及Linux时，Mandrake非常流行。说起Mandrake的历史，&lt;font color="#ff0000"&gt;其实最早Mandrake的开发者是基于Redhat进行开发的&lt;/font&gt;。Redhat默认采用GNOME桌面系统，而Mandrake将之改为KDE。而由于当时的Linux普遍比较难安装，不适合第一次接触Linux的新手，所以Mandrake还简化了安装系统。我想这也是当时Mandrake在国内如此红火的原因之一。Mandrake在易用性方面的确是下了不少功夫，包括默认情况下的硬件检测等。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mandrake的开发完全透明化，包括“cooker”。当系统有了新的测试版本后，便可以在cooker上找到。之前Mandrake的新版本的发布速度很快，但从9.0之后便开始减缓。估计是希望能够延长版本的生命力以确保稳定和安全性。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：友好的操作界面，图形配置工具，庞大的社区技术支持，NTFS分区大小变更 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：部分版本bug较多，最新版本只先发布给Mandrake俱乐部的成员 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：urpmi (RPM) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：FTP即时发布下载，ISO在版本发布后数星期内提供 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页： &lt;a href="http://www.mandrivalinux.com/"&gt;http://www.mandrivalinux.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;二 Red Hat&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 国内，乃至是全世界的Linux用户所最熟悉、最耳闻能详的发行版想必就是Red Hat了。Red Hat最早由Bob Young和MarcEwing在1995年创建。而公司在最近才开始真正步入盈利时代，归功于收费的Red Hat Enterprise Linux（RHEL，RedHat的企业版）。而正统的Red Hat版本早已停止技术支持，最后一版是Red Hat 9.0。于是，目前Red Hat分为两个系列：由RedHat公司提供收费技术支持和更新的Red Hat Enterprise Linux，以及由社区开发的免费的Fedora Core。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FedoraCore1发布于2003年年末，而FC的定位便是桌面用户。FC提供了最新的软件包，同时，它的版本更新周期也非常短，仅六个月。目前最新版本为FC3，而FC4也预定将于今年6月发布。这也是为什么服务器上一般不推荐采用Fedora Core。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 适用于服务器的版本是Red Hat Enterprise Linux，而由于这是个收费的操作系统。于是，国内外许多企业或空间商选择CentOS。&lt;font color="#ff0000"&gt;CentOS可以算是RHEL的克隆版&lt;/font&gt;，但它最大的好处是免费！菜鸟油目前的服务器便采用的CentOS 3.4。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：拥有数量庞大的用户，优秀的社区技术支持，许多创新 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：免费版（Fedora Core）版本生命周期太短，多媒体支持不佳 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：up2date (RPM), YUM (RPM) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.redhat.com/"&gt;http://www.redhat.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;strong&gt;三 SUSE &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUSE是德国最著名的Linux发行版，在全世界范围中也享有较高的声誉。SUSE自主开发的软件包管理系统YaST也大受好评。SUSE于2003年年末被Novell收购。 SUSE之后的发布显得比较混乱，比如9.0版本是收费的，而10.0版本（也许由于各种压力）又免费发布。这使得一部分用户感到困惑，也转而使用其它发行版本。但是，瑕不掩瑜，SUSE仍然是一个非常专业、优秀的发行版。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：专业，易用的YaST软件包管理系统 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：FTP发布通常要比零售版晚1~3个月 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：YaST (RPM), 第三方APT (RPM) 软件库（repository） &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：取决于版本 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.suse.com/"&gt;http://www.suse.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;四 Debian GNU/Linux &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debian是菜鸟油服务器之前所采用的操作系统。Debian最早由IanMurdock于1993年创建。可以算是迄今为止，最遵循GNU规范的Linux系统。Debian系统分为三个版本分支（branch）：stable, testing 和 unstable。截至2005年5月，这三个版本分支分别对应的具体版本为：Woody, Sarge 和Sid。其中，unstable为最新的测试版本，其中包括最新的软件包，但是也有相对较多的bug，适合桌面用户。testing的版本都经过unstable中的测试，相对较为稳定，也支持了不少新技术（比如SMP等）。而Woody一般只用于服务器，上面的软件包大部分都比较过时，但是稳定和安全性都非常的高。菜鸟油之前所采用的是Debian Sarge。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为何有如此多的用户痴迷于Debian呢（包括笔者在内）？apt-get /dpkg是原因之一。dpkg是Debian系列特有的软件包管理工具，它被誉为所有Linux软件包管理工具（比如RPM）最强大的！配合apt-get，在Debian上安装、升级、删除和管理软件变得异常容易。许多Debian的用户都开玩笑的说，Debian将他们养懒了，因为只要简单得敲一下”apt-get upgrade &amp;amp;&amp;amp; apt-get update”，机器上所有的软件就会自动更新了…… &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：遵循GNU规范，100%免费，优秀的网络和社区资源，强大的apt-get &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：安装相对不易，stable分支的软件极度过时 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：APT (DEB) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.debian.org/"&gt;http://www.debian.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;五 Ubuntu&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 笔者的桌面电脑便使用的Ubuntu。依照笔者的理解，简单而言，&lt;font color="#ff0000"&gt;Ubuntu就是一个拥有Debian所有的优点，以及自己所加强的优点的近乎完美的Linux操作系统。:)&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ubuntu是一个相对较新的发行版，但是，它的出现可能改变了许多潜在用户对Linux的看法。也许，从前人们会认为Linux难以安装、难以使用，但是，Ubuntu出现后，这些都成为了历史。Ubuntu基于DebianSid，所以这也就是笔者所说的，Ubuntu拥有Debian的所有优点，包括apt-get。然而，不仅如此而已，Ubuntu默认采用的GNOME桌面系统也将Ubuntu的界面装饰的简易而不失华丽。当然，如果你是一个KDE的拥护者的话，Kubuntu同样适合你！ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ubuntu的安装非常的人性化，只要按照提示一步一步进行，安装和Windows同样简便！并且，Ubuntu被誉为对硬件支持最好最全面的Linux发行版之一，许多在其他发行版上无法使用，或者默认配置时无法使用的硬件，在Ubuntu上轻松搞定。并且，Ubuntu采用自行加强的内核（kernel），安全性方面更上一层楼。并且，Ubuntu默认不能直接root登陆，必须从第一个创建的用户通过su或sudo来获取root权限&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; （这也许不太方便，但无疑增加了安全性，避免用户由于粗心而损坏系统）。Ubuntu的版本周期为六个月，弥补了Debian更新缓慢的不足。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：人气颇高的论坛提供优秀的资源和技术支持，固定的版本更新周期和技术支持，可从Debian Woody直接升级 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：还未建立成熟的商业模式 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：APT (DEB) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.ubuntulinux.org/"&gt;http://www.ubuntulinux.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;六 Gentoo&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gentoo最初由Daniel Robbins（前StampedeLinux和FreeBSD的开发者之一）创建。由于开发者对FreeBSD的熟识，所以Gentoo拥有媲美FreeBSD的广受美誉的ports系统&lt;br&gt;——portage。（Ports和Portage都是用于在线更新软件的系统，类似apt-get，但还是有很大不同）Gentoo的首个稳定版本发布于2002年。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gentoo的出名是因为其高度的自定制性：因为它是一个基于源代码的（source-based）发行版。尽管安装时可以选择预先编译好的软件包，但是大部分使用Gentoo的用户都选择自己手动编译。这也是为什么Gentoo适合比较有Linux使用经验的老手使用的原因。但是要注意的是，由于编译软件需要消耗大量的时间，所以如果你所有的软件都自己编译，并安装KDE桌面系统等比较大的软件包，可能需要几天时间才能编译完…… &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：高度的可定制性，完整的使用手册，媲美Ports的Portage系统，适合“臭美”的高手使用^^ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：编译耗时多，安装缓慢 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：Portage (SRC) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.gentoo.org/"&gt;http://www.gentoo.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;七 Slackware&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Slackware由Patrick Volkerding创建于1992年。算起来应当是历史最悠久的Linux发行版。曾经Slackware非常的流行，但是当Linux越来越普及，用户的技术层面越来越广（更多的新手）后，Slackware渐渐的被新来的人们所遗忘。在其他主流发行版强调易用性的时候，Slackware依然固执的追求最原始的效率——所有的配置均还是要通过配置文件来进行。 尽管如此，Slackware仍然深入人心（大部分都是比较有经验的Linux老手）。Slackware稳定、安全，所以仍然有大批的忠实用户。由于Slackware尽量采用原版的软件包而不进行任何修改，所以制造新bug的几率便低了很多。Slackware的版本更新周期较长（大约1年），但是新版本的软件仍然不间断的提供给用户下载。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：非常稳定、安全，高度坚持UNIX的规范 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：所有的配置均通过编辑文件来进行，自动硬件检测能力较差 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：Slackware Package Management (TGZ) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.slackware.com/"&gt;http://www.slackware.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;八 Knoppix&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由德国的Klaus Knopper开发的Knoppix，是一个基于Debian的发行版。Knoppix严格算起来是一款LiveCD Linux，所谓的LiveCD就是整个操作系统都在一张光盘上，只要开机从光盘启动，就能拥有一个完整的Linux系统！无需安装！当然，Knoppix也能够非常轻松的安装到硬盘上。其强大的硬件检测能力、系统修复能力、即时压缩传输技术，都令人大加称赞。可以说，在LiveCD界，Knoppix是无人能及的！ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：无需安装可直接运行于CD上，优秀的硬件检测能力，可作为系统急救盘使用 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：LiveCD由于光盘的数据读取速度限制导致性能大幅下降 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：APT (DEB) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.knoppix.com/"&gt;http://www.knoppix.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;九 MEPIS&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MEPIS由Warren Woodford在2003年建立。MEPIS虽然刚建立不久，但是迅速的传播在Linux用户间。简单来说，MEPIS是一个集合了Debian Sid和Knoppix的产物。用户即能将之当作LiveCD使用，也能使用常规的图形界面进行安装。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MEPIS默认集成安装了Java Runtime Environment、Flash插件、nVidia加速驱动等许多常用的程序。用户可以非常轻松的安装完系统后就直接开始使用，而不用到处寻找资料如&lt;br&gt;何下载、如何安装、如何配置这些软件。这不仅给Linux新手带来了便捷，也给老手们节约了相当多的时间。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：LiveCD与常规安装两用，优秀的硬件检测能力，预装了许多实用的软件 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：建立时间不长，默认的界面有些寒酸 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：APT (DEB) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.mepis.org/"&gt;http://www.mepis.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;十 Xandros &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xandros建立在已经成为历史的Corel Linux之上。当初Corel Linux的公司由于财政上的困难，被迫终止了CorelLinux的开发，而Xandros适时的将Corel Linux部门买下，于2002年10月推出全新的Xandros Desktop。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xandros的卖点在于极其简单的安装和使用，所以它的市场定位是那些没有任何Linux使用经验的新手，或是习惯使用Windows的用户。Xandros的标准版和增强版都是商业软件，分别售价$40和$99美元。不过你仍然可以在这里下载到免费的公开发行版。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：适合完全没有经验的新手，安装完以后就能立即投入使用，自带非常不错的工具 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：商业软件 &lt;br&gt;&amp;nbsp;&amp;nbsp; 软件包管理系统：Xandros Networks (DEB) 或 APT (DEB) （可选，但不提供技术支持） &lt;br&gt;&amp;nbsp;&amp;nbsp; 免费下载：公开发行版 &lt;br&gt;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.xandros.com/"&gt;http://www.xandros.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;十一 FreeBSD&lt;/strong&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先要强调的是：&lt;font color="#ff0000"&gt;FreeBSD不是一个Linux系统！&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可是，为什么笔者要介绍FreeBSD呢？因为FreeBSD的用户也相当多，其许多特性都与Linux相类似。事实上，Linux和BSD（Berkeley SoftwareDistribution）均是UNIX的演化分支。并且，Linux中相当多的特性和功能（比如用于配置DNS的Bind软件）都是取自于BSD的。而FreeBSD便是BSD家族中最出名，用户数量最多的一个发行版。MEZOC之前所采用的便是FreeBSD系统。 FreeBSD建立于1993年，拥有相当长的历史。FreeBSD拥有两个分支：stable和current。顾名思义，stable是稳定版，而current则是添加了新技术的测试版。另外，FreeBSD会不定期的发布新的版本，称为RELEASE，stable和current均有自己的RELEASE版本。比如4.11-RELEASE和5.3-RELEASE，请注意，这并不代表后者比前者的版本新。这仅仅代表前者（数字小的版本）是stable版本，后者（数字大的版本）是current版本。 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FreeBSD除了作为服务器系统外，也适合桌面用户。不过，考虑到软件方面的兼容性，一般用户选择FreeBSD作为桌面系统不是很明智。作为服务器而言，FreeBSD是相当优秀的。曾经有人说过，同样的服务器硬件配置，运行同样的一个vBulletin论坛，FreeBSD所用的资源要比Linux少。这也是为什么许多空间商极力推崇FreeBSD的原因。:) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 优点：速度快，非常稳定，优秀的使用手册，Ports系统 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缺点：比起Linux而言对硬件的支持较差，对于桌面系统而言软件的兼容性是个问题 &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件包管理系统：Ports (TBZ) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 免费下载：是 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 官方主页：&lt;a href="http://www.freebsd.org/"&gt;http://www.freebsd.org/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lwm-1988/aggbug/2520294.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lwm-1988/archive/2012/05/27/2520294.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/oldfeel/archive/2012/05/27/2520010.html</id><title type="text">ubuntu翻墙汇总</title><summary type="text"/><published>2012-05-27T05:41:00Z</published><updated>2012-05-27T05:41:00Z</updated><author><name>oldfeel</name><uri>http://www.cnblogs.com/oldfeel/</uri></author><link rel="alternate" href="http://www.cnblogs.com/oldfeel/archive/2012/05/27/2520010.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/oldfeel/archive/2012/05/27/2520010.html"/><content type="html">&lt;p&gt;转自&amp;nbsp;&lt;a href="http://blog.sina.com.cn/s/blog_63a27dc501012iyl.html"&gt;http://blog.sina.com.cn/s/blog_63a27dc501012iyl.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;方法一：&lt;/span&gt;&lt;span&gt;SSH+autoproxy+firefox&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1.首先要安装openSSH,&lt;br /&gt;&lt;span&gt;Ubuntu缺省没有安装SSH Server，使用以下命令安装：&amp;nbsp;&lt;br /&gt;sudo apt-get install openssh-server&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.在firfox中搜索安装autoproxy这个扩展组件，安装完成之后，会自动打开一个设置页面，选择gfwlist 这个规则，然后在最下面选择默认代理，设置为ssh -D 这种方式，之后点完成，完成设置&lt;br /&gt;&lt;br /&gt;3.本地的设置完毕之后，到&lt;a href="http://www.cjb.net/cgi-bin/shell.cgi?action=signup" target="_blank"&gt;http://www.cjb.net/cgi-bin/shell.cgi?action=signup&lt;/a&gt;&amp;nbsp;注 册一个免费的ssh的帐号，填上你的用户名, 邮箱, 设置密码就成了，邮箱最好是用gmail的邮箱，其他的邮箱我也没尝试过，然后cjb会给你发激活邮件, 收信点里边的激活链接，激活后会再发送一个邮件给你，告诉你帐号，密码，服务器之类的，有时候注册网站打不开，多尝试几次就好了&lt;br /&gt;&lt;br /&gt;4.有了以上的准备工作后，在终端输入ssh -qTfnN -D 7070&amp;nbsp;&lt;a href="mailto:user_name@216.194.70.6" target="_blank"&gt;user_name@216.194.70.6&lt;/a&gt;&lt;br /&gt;例如我自己的就是ssh -qTfnN -D 7070&amp;nbsp;&lt;a href="mailto:shenhao0129@216.194.70.6" target="_blank"&gt;shenhao0129@216.194.70.6&lt;/a&gt;&lt;br /&gt;其中@之前的user_name换成你刚才自己的申请的用户名就好了，本来@之后是主机名shell.cjb.net的，但是据说是DNS污染，导致指向的不是正确的IP地址，所以直接用IP地址来代替&lt;br /&gt;然后第一次运行会有个小提示，你直接输入yes就好了，然后提示输入密码，输入你申请的帐号的密码就万事OK了&lt;br /&gt;&lt;br /&gt;5. 如果认为每次输入这个东西比较麻烦的话，建议vim sshd，建立一个sshd的文本文件，然后把刚才输入的内容粘贴到sshd文件中，并chmod 755 sshd 然后拷贝到/usr/bin目录下，以后要翻墙的时候就执行sshd,输入密码就好了，系统启动后，之需要输入一次就好了。&lt;br /&gt;&lt;br /&gt;5.剩下的就不用多说了，赶快打开&lt;a href="http://www.youtube.com/" target="_blank"&gt;www.youtube.com&lt;/a&gt;测试一下吧！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;方法二：&amp;nbsp;phzilla&lt;br /&gt;&lt;br /&gt;1.首先搜索安装phzilla这个firefox扩展phproxy 找到Phzilla这个（对，你没有弄错，就是这个）插件安装，然后提示重启firefox的时候重新启动firefox。&lt;br /&gt;&lt;br /&gt;2.在地址栏最后面那可以看到一个P字的小图标，右击那个小图标，选择选项，打开设置页面，单击&amp;ldquo;使用默认服务&amp;rdquo;，然后选择开始测试，看到左边有成功的字样之后，点&amp;ldquo;建议此服务器&amp;rdquo;，然后关闭设置窗口，打开&lt;a href="http://www.youtube.com/" target="_blank"&gt;www.youtube.com&lt;/a&gt;&amp;nbsp;是不是依然显示&amp;ldquo;连接被重置&amp;rdquo;等？？？别着急，再次点击那个P字的小图标，然后刷新一下，一般就能上了。&lt;br /&gt;&lt;br /&gt;3.如果此时还不能打开的话，那么你需要回到上一步骤，然后重新选择服务器，重新测试，重新使用建议服务器等设置就好了。也可以自己添加服务器的，我就不详细说了。&lt;/span&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif;"&gt;&lt;span&gt;方法三：wine&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif;"&gt;&lt;span&gt;&lt;span&gt;先装好wine&lt;br /&gt;sodu apt-get install wine;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif;"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif;"&gt;&lt;span&gt;&lt;span&gt;然后终端：&lt;br /&gt;wget http://www.kegel.com/wine/winetricks&lt;br /&gt;sudo apt-get install cabextract&lt;br /&gt;chmod +x winetricks&lt;br /&gt;./winetricks&lt;br /&gt;在弹出的窗口选择你需要的库&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;想要在wine上使用&lt;a href="http://groups.google.com/group/qx01/web/%E8%87%AA%E7%94%B1%E9%97%A86.80%E5%A4%A7%E9%99%86%E4%B8%93%E7%94%A8%E7%89%88?hl=zh-CN" target="_blank"&gt;Free Gate&lt;/a&gt;就需要添加mfc42才行&lt;br /&gt;然后配合firefox+autoproxy就不再&amp;ldquo;撞墙&amp;rdquo;了！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/oldfeel/aggbug/2520010.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/oldfeel/archive/2012/05/27/2520010.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ma6174/archive/2012/05/26/2519427.html</id><title type="text">linux简单方法实现让普通用户执行管理员命令</title><summary type="text"/><published>2012-05-26T11:39:00Z</published><updated>2012-05-26T11:39:00Z</updated><author><name>ma6174</name><uri>http://www.cnblogs.com/ma6174/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519427.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519427.html"/><content type="html">&lt;p&gt;&amp;nbsp; &amp;nbsp; 某大神写了个程序，每次服务器开机是必须执行这个程序，这个程序必须用sudo管理员的权限执行才有效，每次开机后都要去手动执行这条命令，懒人怎么受的了？于是乎，我想到把这个命令添加到系统启动项里面，但是，普通命令好添加，必须加sudo的命令怎么添加呢？网上百了半天没百到，纠结，都怪自己linux没学好，以后还要研究研究linux怎么启动。这条路没走通就换一条吧。我昨天提到用pexpect实现自动交互，试了一下，很爽啊！哈哈，完美的完成了我的任务！看下面的示例代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&amp;nbsp;pexpect&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;def&lt;/span&gt;&amp;nbsp;RunCmd(cmd,passwd):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;run&amp;nbsp;=&amp;nbsp;pexpect.spawn(cmd)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;run.expect([&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;sudo&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;i&amp;nbsp;==&amp;nbsp;0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;run.sendline(passwd)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;run.sendline(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;yes\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;=&amp;nbsp;run.read()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;r&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;except&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Error&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080;"&gt;__name__&lt;/span&gt;==&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;__main__&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;sudo&amp;nbsp;apt-get&amp;nbsp;remove emacs&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;passwd&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; RunCmd(cmd,passwd)&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 昨天的ssh批量远程登录并执行命令这个问题（&lt;a href="http://www.cnblogs.com/ma6174/archive/2012/05/25/2508378.html"&gt;http://www.cnblogs.com/ma6174/archive/2012/05/25/2508378.html&lt;/a&gt;），有个缺陷，就是必须开启root管理员账户，以管理员的身份去执行命令，这样做是有风险的（你懂得），对于这种必须要必须要加sudo才能执行的命令，用自动交互来执行更好，这样我们可以把两种方式结合起来，思路是这样的：&lt;/p&gt;&lt;p&gt;首先把上面的python脚本放在某个服务器上（本地建一个apache服务器就行），然后ssh登录远程主机（非root用户），用wget让主机去下载服务器上面的python脚本，然后在远程主机上执行远程脚本，执行完后把这个脚本立即删除。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 刚才又发现一个好东西：加快ubuntu登录ssh的速度（&lt;a href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519430.html"&gt;http://www.cnblogs.com/ma6174/archive/2012/05/26/2519430.html&lt;/a&gt;），这样真的很快啊！我们可以写个程序去修改批量修改，这样运行效率又会提升很多！&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 如果机器少的话还可以设置免输入密码自动登录：（&lt;a href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519458.html"&gt;http://www.cnblogs.com/ma6174/archive/2012/05/26/2519458.html&lt;/a&gt;），这样就不需要我的python程序了&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 当然上面的工作是你必须提前做好的，一切都配置好了以后不管干什么都方便很多！&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ma6174/aggbug/2519427.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519427.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ma6174/archive/2012/05/26/2519430.html</id><title type="text">（转）解决ssh登录慢的问题（一定要在远端主机上修改啊）</title><summary type="text"/><published>2012-05-26T10:54:00Z</published><updated>2012-05-26T10:54:00Z</updated><author><name>ma6174</name><uri>http://www.cnblogs.com/ma6174/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519430.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519430.html"/><content type="html">&lt;div&gt;本文转自：&lt;a href="http://forum.ubuntu.org.cn/viewtopic.php?f=54&amp;amp;t=177845"&gt;http://forum.ubuntu.org.cn/viewtopic.php?f=54&amp;amp;t=177845&lt;/a&gt;&lt;/div&gt;&lt;p&gt;经常用ubuntu的朋友们可以已经习惯了一个事实&lt;/p&gt;&lt;div&gt;那就是,通过ssh登录到ubuntu,登录认证的时间总要用掉10多秒甚至20多秒30秒,&lt;/div&gt;&lt;div&gt;可能你已经习惯了这个事实,&lt;/div&gt;&lt;div&gt;但是,其实,这个漫长的等待时间完全是可以免掉的,怎么免,且看下面&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;步骤一 关闭ssh的gssapi认证&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;vi /etc/ssh/ssh_config&lt;/div&gt;&lt;div&gt;注释掉如下两行&lt;/div&gt;&lt;div&gt;GSSAPIAuthentication yes&lt;/div&gt;&lt;div&gt;GSSAPIDelegateCredentials no&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;步骤二 关闭ssh的UseDNS&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;vi /etc/ssh/sshd_config&lt;/div&gt;&lt;div&gt;注：ubuntu的sshd_config文件没有UseDNS参数,而据我了解,其它类*NIX、*BSD操作系统的sshd_config都有UseDNS参数，且它们缺省都是"UseDNS yes"，&lt;/div&gt;&lt;div&gt;那估计ubuntu的sshd_config虽然没有UseDNS，那它缺省也是"UseDNS yes"了&lt;/div&gt;&lt;div&gt;于是，在sshd_config末尾处插入如下行&lt;/div&gt;&lt;div&gt;UseDNS no&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;然后执行指令"/etc/init.d/ssh restart"，重启ssh服务，配置生效&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;经测试，使用此方法后，ubuntu的认证时间大大缩短，原来其登录认证一般耗时在10秒以上15秒左右，有些时候甚至达到20多秒到30秒左右，而经过此修改，ubuntu的登录认证时间将会缩短在3秒以内。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/ma6174/aggbug/2519430.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ma6174/archive/2012/05/26/2519430.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519334.html</id><title type="text">系统调用</title><summary type="text"/><published>2012-05-26T08:34:00Z</published><updated>2012-05-26T08:34:00Z</updated><author><name>Seiyagoo</name><uri>http://www.cnblogs.com/Seiyagoo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519334.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;由前2篇文章做基础，现在可以理解系统调用了。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_TitleUrl_1" class="entrylistItemTitle" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2518849.html"&gt;用户空间栈&amp;amp;系统空间栈&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;strong&gt;&lt;a title="发布于2012-05-26 12:58" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html"&gt;中断&amp;amp;异常&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;a title="发布于2012-05-26 12:58" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;strong&gt;&lt;a title="发布于2012-05-26 12:58" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;系统调用定义&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;系统调用是内核提供的一系列强大的函数。它们在内核中实现，然后通过一定的方式（X86是软中断，也即门陷入）呈现给用户，是用户程序与内核交互的接口。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;注意，我们在程序中用调用read、write函数时，这些不是系统调用函数，而是glibc库包装后，进行一些处理，然后再调用系统调用。如果想在程序中直接调用&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;的&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;话，需要调用_syscall()函数。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;上下文（context）&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; 上下文简单说来就是一个环境，相对于进程而言，就是进程执行时的环境。具体来说就是各个变量和数据，包括所有的寄存器变量、进程打开的文件、内存信息等。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。&lt;/span&gt;&lt;/div&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用户级上下文: 正文、数据、用户堆栈以及共享存储区；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP)；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当发生进程调度时，进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换，新调度的进程才能运行。而系统调用进行的模式&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;切换(mode switch)。模式切换与进程切换比较起来，容易很多，而且节省时间，因为模式切换最主要的任务只是切换进程寄存器上下文的切换。而进程内普通函数的调&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;用只需该进程的用户空间栈来进行用户级的上下文切换。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;处理器总处于以下状态中的一种：&lt;/span&gt;&lt;/div&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;span style="font-size: 16px;"&gt;１、内核态，运行于进程上下文，内核代表进程运行于内核空间；&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;２、内核态，运行于中断上下文，内核代表硬件运行于内核空间；&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;３、用户态，运行于用户空间。&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; 摘自：&lt;a href="http://blog.csdn.net/zhiyu520/article/details/2719827"&gt;进程上下文和中断上下文&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;地址转换&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;虽然linux偏向于使用分页机制，但分段式进入保护模式后Intel硬件机制所规定的，无法避免，而lLinux 以一种受限的方法来使用这种分段模型。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;逻辑地址-&amp;gt;线性地址（段机制）&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;在i386中，逻辑地址由CS（16位选择子）: OFFSET（32位偏移）组成；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img src="file:///F:/COMPUT~1/SYSTEM~1/enhtmlclip/%E9%80%BB%E8%BE%91%E5%9C%B0%E5%9D%80to%E7%BA%BF%E6%80%A7%E5%9C%B0%E5%9D%80.jpg" alt="" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;选择子分为三部分：索引、TI、RPL（当前特权级）。&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;GDTR是系统寄存器，存放GDT的基地址（物理地址），LDTR同理；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;TI=0选择GDT（全局描述符表），TI=1选择LDT（局部描述符表）；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;每个段描述符占8个字节&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;RPL可以为0（内核态）或者3（用户态）&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;线性地址-&amp;gt;物理地址（页机制）&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;linux下采用二级页表，通过MMU转换。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img src="file:///F:/COMPUT~1/SYSTEM~1/enhtmlclip/%E9%A1%B5%E8%A1%A8.jpg" alt="" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;CR3 用于保存页目录表页面的物理地址&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;详细参考：&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-memmod/"&gt;探索 Linux 内存模型&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strong&gt;系统调用函数寻址&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;第一步：IDTR（中断描述符表/向量表 寄存器）+ 4*中断向量号 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 系统调用入口地址（sys_call）；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;第二步：系统调用表(sys_call_table)基址 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ 4*内核函数偏移 &amp;nbsp; &amp;nbsp; =&amp;gt; 内核函数（read、write）。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;注：4是每个表项栈用4Bytes, 中断向量表是物理连续的，而系统调用表逻辑连续，物理则不一定连续。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;系统调用传递参数&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;include/asm-i386/unistd.h&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;无参数：#define _syscall() (type, name)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; type name ( void )&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;这个宏用于展开那些不用参数的系统调用, type是函数类型，name是函数名；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;带两个参数： #define _syscall2(type, name, type1, arg1, type2, arg2)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type &amp;nbsp;name ( type1 arg1, type2 arg2)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;typek就是第k个参数的类型，argk就是对应的参数名。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;系统调用传参最多支持6个参数，因为寄存器数量有限。当然带0~6个参数的宏定义都一样。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;当用户程序调用系统调用传递的参数不超过6个时（即_syscall0() ~ _syscall6()），用寄存器传递参数；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;当参数超过6个时，就用结构体打包传递指针到一个寄存器中就行了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;Linux系统调用接口、系统调用例程和内核服务例程之间的关系&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 因为Linux只允许系统调用接口使用128这一个软中断向量，这也就意味着所有的系统调用接口必须共享这一个中断通道，并在同一个中断服&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;务&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;例程中调用不同的内核服务例程，所以，系统调用接口除了要引发&amp;ldquo;int ＄Ox80&amp;rdquo;软中断之外，为了进人内核后能调用不同的内核服务例程，还&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;要&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;提供识别内核服务例程的参数，这个参数叫做&amp;ldquo;系统调用号&amp;rdquo;。也就是说，所有可为进程提供服务的内核服务例程都应具有一个唯一的系统调用号。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;当然，系统调用接口还应为内核服务例程准各必要的参数。&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;综上所述，系统调用接口需要完成以下几个任务：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●用软中断指令&amp;ldquo;int ＄Ox80&amp;rdquo;发生一个中断向量码为128的中断请求，以使进程进入内核态。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●要保护用户态的现场，即把处理器的用户态运行环境保护到进程的内核堆栈。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●为内核服务例程准备参数，并定义返回值的存储位置。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●跳转到系统调用例程。&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;●系统调用例程结束后返回。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;系统调用例程是系统提供的一个通用的汇编语言程序．其实它是一个中断向量为128的中断服务程序，其入口为system_call。它应完成的任务有：&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●接受系统调用接口的参数。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●根据系统调用号，转向对应的内核服务例程，并将相关参数传遴给内核服务例程。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;●在内核服务例程结束后，自中断返田到系统凋用接口.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;系统调用的过程如图所示。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;　&lt;/span&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/307487/2012052616161740.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 从图中可以看到，系统调用接口是用高级语言来编写的，而通过调用中断指令陷入内核后的系统调用例程（即图中的系统调用处理程序）则是用汇编语言编写的。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt; 为了通过系统调用号来调用不同的内核服务例程，系统必须维护一个系统调用表，这个表实质上就是系统调用号与内核服务函数的对照表。Linux是用数组sys_call_table来作为这个表的，在这个表的每个表项中存放着对应内核服务例程的指针，而该表项的下标就是该内核服务例程的系统调用号。Linux规定，在i386体系中，系统&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;调用号由处理器的寄存器eax来传递。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;相关数据结构&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;arch/i386/kernel/entry.S&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;这个汇编文件包含了系统调用和异常的底层处理程序，信号量识别程序（调用在每次时钟中断和系统调用时发生），而且汇编程序段ENTRY（system_call），&lt;br /&gt;是所有&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;系统调用响应程序的入口；而ret_from_sys_call则是系统调用和中断处理程序的返回点。当然还有用户态、内核态切换之前的保存动作：SAVE_ALL、RESTORE_ALL&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;宏。 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;arch/i386/kernel/syscall_table.S&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;这个汇编文件定义了一个数组sys_call_table，数组中每个元素的值就是系统函数（如sys_open()）的入口地址。这个数组会被上面的entry.S包含进去。 &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arch/i386/kernel/traps.c&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;这个文件给出了很多出错处理程序。但最重要的是trap_init函数。它初始化中断描述符表（IDTR），往表里填入中断门，陷入门和调用门。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;include/linux/unistd.h&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;这个头文件定义了所有的系统调用号，还定义了几个与系统调用相关的关键的宏（_syscall0()，_syscall1()等等）。 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;当然，不同内核版本所在文件不一致，并且内容会不同。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;系统调用完整步骤&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1、系统调用初始化&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在traps.c中，系统在trap_init()中，通过调用set_system_gate(0x80，&amp;amp;system_call）函数，在中断描述符表（IDTR）里填入系统调用的处理函数system_call，保证&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;每次用户执行指令int 0x80时，系统能把控制转移到entry.S中的system_call函数中去。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2、系统调用执行&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2.1、用户栈切换到内核栈&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;把%eax（存放系统调用号）压入内核栈；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;SAVE_ALL宏：保存环境；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;GET_CURRENT（%ebx）：取得当前进程的task_struct指针；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;testb $0x20,task_struct-&amp;gt;flags(%ebx)：判断进程是否被监视（即设置了断点），如果被trace了，则跳转到tracesys。&lt;span style="font-family: 宋体;"&gt;在那里将会把当前进程挂起并&lt;br /&gt;向其父进程发送&lt;/span&gt;SIGTRAP（这两步主要是为了设置调试断点而设计的）。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;2.2、进行中断处理，根据系统调用表调用具体的内核系统调用代码，将返回值（默认放在%eax中）保存到栈中；&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3、系统调用的返回&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.1、ret_from_sys_call这段汇编程序会检测进程task_struct中的相应位，然后作出相应的跳转。所以，系统的控制权不一定会返回到原先调用系统&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 调用&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;的那个进程（&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;包括重新调度，别的进程或系统对该进程发了信号等）。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.2、RESTALL_ALL：恢复环境，返回到用户空间。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;　 &amp;nbsp;用类C代码表示system_call过程：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void system_call（unsigned int eax）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; task_struct *ebx;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; save_context（）;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ebx=GET_CURRENT;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ebx-&amp;gt;tak_ptrace != 0x02)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto tracesys;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(eax &amp;gt; NR_syscalls)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto badsys;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; retval = (sys_call_table[eax * 4]) （）;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ebx-&amp;gt;need-&amp;gt;resched != 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto reschedule;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ebx-&amp;gt;sigpending != 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto signal_return;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; restall_context();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;参考： &amp;nbsp;&amp;nbsp;&lt;a href="http://www.aka.org.cn/Lectures/001/Lecture-4/index.html"&gt;http://www.aka.org.cn/Lectures/001/Lecture-4/index.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8"&gt;http://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/Seiyagoo/aggbug/2519334.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html</id><title type="text">中断&amp;amp;异常</title><summary type="text"/><published>2012-05-26T04:58:00Z</published><updated>2012-05-26T04:58:00Z</updated><author><name>Seiyagoo</name><uri>http://www.cnblogs.com/Seiyagoo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html"/><content type="html">&lt;div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;中断分类&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;/span&gt;&lt;table style="width: 545px;" border="1" cellspacing="0" cellpadding="6"&gt;&lt;colgroup&gt;&lt;col width="50" /&gt;&lt;col width="62" /&gt;&lt;col width="90" /&gt;&lt;col width="69" /&gt;&lt;col width="94" /&gt;&lt;col width="76" /&gt;&lt;col width="104" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="4" align="center" valign="middle" width="258" height="37"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;类别&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="81" height="37"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;原因&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="63" height="37"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;返回行为&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="91" height="37"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;例子&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan="5" align="center" valign="middle" width="37" height="42"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;广义&lt;/span&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;中断&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td rowspan="2" align="center" valign="middle" width="49" height="42"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;异步中断&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;(&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;狭义中断&lt;/span&gt;&lt;span style="color: #010101;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td rowspan="2" align="center" valign="middle" width="77" height="42"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;中断&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;interrupt)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="56" height="42"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;可屏蔽中断&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td rowspan="2" align="center" valign="middle" width="81" height="42"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;来自&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;I/O&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;设备的信号&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td rowspan="2" align="center" valign="middle" width="63" height="42"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;总是返回到下一条指令&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="91" height="42"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;所有的&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;IRQ&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;中断&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" valign="middle" width="56" height="77"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;不可屏蔽中断&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="91" height="77"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;电源掉电和物理存储器奇偶校验&lt;/span&gt;&lt;/span&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan="3" align="center" valign="middle" width="49"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;同步中断&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;(&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;也称异常&lt;/span&gt;&lt;span style="color: #010101;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="2" align="center" valign="middle" width="147"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;陷阱&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;(trap)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="81"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;有意的异常&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="63"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;总是返回到下一条指令&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="91"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;系统调用、信号机制&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;(&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;通过软中断实现&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" align="center" valign="middle" width="147"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;故障&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;(fault)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="81"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;潜在可恢复的错误&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="63"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;返回到当前指令&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="91"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;缺页异常、除&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;错误、段错误&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" align="center" valign="middle" width="147"&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;span style="color: #010101;"&gt;终止&lt;/span&gt;&amp;nbsp;&lt;span style="color: #010101;"&gt;(abort)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="81"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;不可恢复的错误&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="63"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;不会返回&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td align="center" valign="middle" width="91"&gt;&lt;div align="center"&gt;&lt;span style="color: #010101; font-family: 宋体; font-size: 14px;"&gt;硬件错误&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;注：&lt;/strong&gt;80386有两根引脚INTR和NMI接受外部中断请求信号，INTR接受可屏蔽中断请求。在80386中，标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;中断的定义(&lt;/strong&gt;&lt;strong&gt;wikipedia&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;中断&lt;/strong&gt;是指由于接收到来自外围硬件（相对于&lt;a title="中央处理器" href="http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8"&gt;中央处理器&lt;/a&gt;和&lt;a title="内存" href="http://zh.wikipedia.org/wiki/%E5%86%85%E5%AD%98"&gt;内存&lt;/a&gt;）的&lt;a title="异步" href="http://zh.wikipedia.org/wiki/%E9%9D%9E%E5%90%8C%E6%AD%A5"&gt;异步&lt;/a&gt;信号或来自&lt;a title="软件" href="http://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6"&gt;软件&lt;/a&gt;的&lt;a title="同步" href="http://zh.wikipedia.org/wiki/%E5%90%8C%E6%AD%A5"&gt;同步&lt;/a&gt;信号，而进行相应的硬件／软件处理。硬件中断导致处理器通过&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;一个上下文切换（context switch）来保存执行状态（以程序计数器和程序状态字等寄存器信息为主）；软件中断则通常作为CPU指令集中的一个指令(汇编中的int&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;指令)，以可编程的方式直接指示这种上下文切换，并将处理导向一段中断处理代码。软中断陷入内核，常被用于实现系统调用(int 80等)。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;如果计算机系统没有中断，则处理器与外部设备通信时，它必须在向该设备发出指令后进行忙等待(&lt;span lang="en" xml:lang="en"&gt;Busy waiting&lt;/span&gt;)，反复轮询该设备是否完成了动作并返回结果。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;这就造成了大量处理器周期被浪费。引入中断以后，当处理器发出设备请求后就可以立即返回以处理其他任务，而当设备完成动作后，发送中断信号给处理器，后者&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;就可以再回过头获取处理结果。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;注：下面中断都指狭义的中断（硬中断）。&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;几个区别&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;异常&amp;amp;中断&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;      异常的处理过程和中断类似，不同的是中断由外部设备产生而异常由CPU内部产生，中断产生的原因和CPU当前执行的指令无关（指令执行完毕，即公操作阶段），&lt;br/&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;而异常的产生就是由于CPU当前执行的指令出了问题，例如访问内存的指令被MMU检查出权限错误，除法指令的除数为0等都会产生异常。&lt;br/&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;异常与中断不同，它在产生时必须考虑与处理器时钟同步。并且中断是由硬件而不是软件引起的。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;硬中断&amp;amp;软中断&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1.&amp;nbsp; 硬中断是由外部事件引起的因此具有随机性和突发性；软中断是执行中断指令产生的，无面外部施加中断请求信号，因此中断的发生不是随机的而是由程序安排&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;好的。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.&amp;nbsp; 硬中断的中断响应周期，CPU需要发中断回合信号（NMI不需要），软中断的中断响应周期，CPU不需发中断回合信号。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.&amp;nbsp; 硬中断的中断号是由中断控制器提供的（NMI硬中断中断号系统指定为02H）；软中断的中断号由指令直接给出，无需使用中断控制器。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4.&amp;nbsp; 硬中断是可屏蔽的（NMI硬中断不可屏蔽），软中断不可屏蔽。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;软中断&amp;amp;函数调用&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;函数调用是将返回地址和CPU状态寄存器内容压栈，函数执行完毕后出栈返回断点继续执行。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;软中断调用是将返回地址和CPU状态寄存器内容压栈，修改特权级，根据中断号查找中断向量表，找到ISR中断服务例程地址，跳转执行。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;综上，函数调用和软中断调用的区别是，软中断多了修改特权级和查找中断向量表的功能，其他部分完全一样。软中断用于系统API调用。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;函数库调用 VS 系统调用&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;函数库调用&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;系统调用&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;在所有的ANSI C编译器版本中，C库函数是相同的&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;各个操作系统的系统调用是不同的&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;它调用函数库中的一段程序（或函数）&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;它调用系统内核的服务&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;与用户程序相联系&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;是操作系统的一个入口点&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;在用户地址空间执行&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;在内核地址空间执行&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;它的运行时间属于&amp;ldquo;用户时间&amp;rdquo;&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;它的运行时间属于&amp;ldquo;系统&amp;rdquo;时间&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;属于过程调用，调用开销较小&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;需要在用户空间和内核上下文环境间切换，开销较大&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;在C函数库libc中有大约300个函数&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;在UNIX中大约有90个系统调用&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;典型的C函数库调用：system fprintf malloc&lt;/span&gt;&lt;/td&gt;&lt;td width="290"&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;典型的系统调用：chdir fork write brk；&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;具体实现：通过软中断0x80，系统会跳转到一个预设的内核空间地址，它指向了&lt;span style="color: #000000;"&gt;系统调用处理程序（不要和系统调用服务例程相混淆&lt;/span&gt;），即在arch/i386/kernel/entry.S&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;文件中使用汇编语言编写的system_call函数。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;所有的系统调用都会统一跳转到这个地址进而执行system_call函数，system_call函数又该如何派发它们到各自的服务例程呢？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;软中断指令int 0x80执行时，系统调用号会被放入eax寄存器，同时，sys_call_table每一项占用4个字节。这样，如图5.5所示，system_call函数可以读取eax寄存器获得&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;当前系统调用的系统调用号，将其乘以4生成偏移地址，然后以sys_call_table为基址，基址加上偏移地址所指向的内容即是应该执行的系统调用服务例程的地址。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;有了软中断，就可以实现应用程序的动态加载。就像WINDOWS/Linux那样，应用程序和系统程序分别开发，不在一起编译连接，应用程序通过软中断调用系统提供的&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;功能。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;什么是中断上半部和下半部?&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;中断处理一般分为两个部分，上半部指的是中断处理程序，下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务。上半部接收到一个中断就立即执行，但&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;只做有严格时限的工作，这些工作都是在所有中断被禁止的情况下完成的。能够被允许稍后完成的工作被推迟到下半部去。通常情况下，下半部会在中断处理程序返回时立即&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;执行。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;对于一个工作是放在上半部还是放在下半部去执行，可以参考下面四条：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;a）如果一个任务对时间非常敏感，将其放在中断处理程序中执行。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;b）如果一个任务和硬件相关，将其放在中断处理程序中执行。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;c）如果一个任务要保证不被其他中断（特别是相同的中断）打断，将其放在中断处理程序中执行。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;d）其他所有任务，考虑放在下半部去执行。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;中断向量表&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;共有从0到255共256个中断类型码，每个中断类型码对应的中断向量所在地址为该类型码乘以4。如果中断类型码为33，则对应中断向量所在地址为00084H。这样，&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;如&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;果已知一个中断类型码，则需要通过两次地址转换（中断类型码到中断向量表地址；中断向量表地址到中断处理程序地址）才能到达中断处理程序。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在全部256个中断中，前32个（0&amp;mdash;31）为硬件系统所预留。后224个可由用户设定。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在INTEL后续的32位CPU中，使用中断描述符表来代替中断向量表。中断描述符表的起始地址由中断描述符表寄存器（IDTR）来定位，因此不再限于底部1K位置。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&lt;strong&gt;中断处理程序&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;&amp;nbsp; &amp;nbsp; 在响应一个特定中断的时候，内核会执行一个函数，该函数叫中断处理程序(interrupt handler)或中断服务例程(interrupt service routine，ISR)。产生中断&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;的每个设备&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;都有一个相应的中断处理程序。一个设备的中断处理程序是它设备驱动程序的一部分。&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/Seiyagoo/aggbug/2519179.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2519179.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/0771bc/archive/2012/05/26/2519167.html</id><title type="text">Linux系统开发全程精通实战课程高清版(Linux基础篇+Shell编程篇+Linux开发工具篇)</title><summary type="text"/><published>2012-05-26T04:29:00Z</published><updated>2012-05-26T04:29:00Z</updated><author><name>idonet</name><uri>http://www.cnblogs.com/0771bc/</uri></author><link rel="alternate" href="http://www.cnblogs.com/0771bc/archive/2012/05/26/2519167.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/0771bc/archive/2012/05/26/2519167.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 18pt"&gt;课程学习地址：&lt;/span&gt;&lt;a href="http://www.ibeifeng.com/goods.php?id=213"&gt;&lt;span style="font-size: 18pt"&gt;http://www.ibeifeng.com/goods.php?id=213&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1、Linux基础编&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 还在为Linux入门发愁吗？还在为繁杂的Linux知识感到无所适从吗？《Linux入门视频》教程将是您最佳的选择。《Linux入门视频》从Linux开发者的角度提炼出Linux开发者所必备的Linux知识。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.1&amp;nbsp;初识Linux&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是Linux&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Linux与Unix的关系&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux系统的特点&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Linux系统的组成&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.2&amp;nbsp;Linux基本操作&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;登录&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 口令文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 简单命令&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; man&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.3&amp;nbsp;Linux基本命令&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 目录操作命令（cd mkdir rmdir）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 文件操作命令（cp mv rm ln which cat less more head tail wc）&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.4&amp;nbsp;bash基础&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 通配符&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 输入输出重定向&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 管道&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 后台作业&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 历史记录&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 命令补全&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 别名&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.5&amp;nbsp;Linux文件系统&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是文件系统&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 文件类型&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mount与umount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软连接与硬连接&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.6&amp;nbsp;Linux管理命令&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; df、du(查看磁盘与目录容量命令）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(查看内存使用状态命令）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ps(查看进程命令)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top(进程监控命令)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kill、killall(向进程发信号命令)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rpm(安装软件包命令)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tar(备份与恢复命令)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.7&amp;nbsp;linux文件权限&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linux用户类别&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 组管理&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用户管理&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 权限管理&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; suid、sgid、sticky bit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;umask&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.8&amp;nbsp;vi使用&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是vi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vi的三种工作方式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 编辑模式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;插入模式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 命令模式（末行模式）&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.9&amp;nbsp;grep命令与正则表达式&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grep命令&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 正则表达式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grep命令中使用正则表达式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vi中使用正则表达式&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.10&amp;nbsp;find&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; find命令一般格式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; find常用表达式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; find逻辑表达式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; find示例&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2&amp;nbsp;Shell编程篇&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;从程序员的角度来看，Shell本身是一种用C语言编写的程序，从用户的角度来看，Shell是用户与Linux操作系统沟通的桥梁。对于Linux用户来说掌握一定的Shell知识是必要的。《Shell编程视频》总结常用的Shell编程知识，并通过Shell脚本实现一个俄罗斯方块程序让大家领略Shell的魅力。&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.1&amp;nbsp;Shell编程基础&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是Shell程序&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本地变量&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 环境变量&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 位置参量&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 数组&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.2&amp;nbsp;Shell输入输出&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo输出颜色与光标定位&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.3&amp;nbsp;Shell算术扩展&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 单引号、双引号、反引号区别&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 命令替换&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 算术扩展&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.4&amp;nbsp;Shell条件测试&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 字符串测试&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整数测试&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;逻辑测试&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 文件测试&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.5&amp;nbsp;Shell条件与分支语句&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if语句&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case语句&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.6&amp;nbsp;Shell循环语句&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for语句&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while语句&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; until语句&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select与菜单&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.7&amp;nbsp;函数&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 函数的使用&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 字符串操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一些内置命令（expr,shift,eval,trap等）&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.8&amp;nbsp;sed&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是流编辑器sed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sed地址定位方式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sed编辑命令&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.9&amp;nbsp;awk&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是awk&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;awk简单用法&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; awk脚本语法&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; awk执行过程&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.10&amp;nbsp;Shell俄罗斯方块(上)&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 获取键盘方向按键（read）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 棋盘绘制（echo）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 俄罗斯方块表示（一维数组）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 俄罗斯方块图形输出&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.11&amp;nbsp;Shell俄罗斯方块(下)&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 进程模型（显式进程，控制进程）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 捕捉信号（trap ）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 俄罗斯方块源码分析&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;3&amp;nbsp;Linux开发工具篇 &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;工欲善其事必先利其器，《Linux开发工具使用》视频讲解Linux底下C/C++开发工具的使用。主要包括编译工具gcc、调试工具gdb、make(Makefile)工具。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;3.1&amp;nbsp;gcc入门(上)&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什么是gcc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gcc特点&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gcc编译过程&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gcc常用选项&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gcc编译多文件&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2&amp;nbsp;gcc入门(下)&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 使用外部库&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 静态库与共享库&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 生成静态库&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 生成动态库&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;3.3&amp;nbsp;Makefile（上）&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; make与Makefile介绍&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Makefile基本规则&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;简单的Makefile编写&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Make自动化变量&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Makefile编译多个可执行文件&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;3.4&amp;nbsp;Makefile（下）&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; make常用内嵌函数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;多级目录Makefile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 实用的Makefile&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;3.5&amp;nbsp;gdb入门（上）&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 什&amp;nbsp;么是gdb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gdb功能&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 运行程序&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 查看源码&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 设置断点&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 单步调试&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gdb常用命令总结&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;3.6&amp;nbsp;gdb入门（下）&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 查看运行时数据&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 程序错误&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gdb调试段错误&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; core文件调试&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/0771bc/aggbug/2519167.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/0771bc/archive/2012/05/26/2519167.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2518849.html</id><title type="text">用户空间栈&amp;amp;系统空间栈</title><summary type="text"/><published>2012-05-25T17:48:00Z</published><updated>2012-05-25T17:48:00Z</updated><author><name>Seiyagoo</name><uri>http://www.cnblogs.com/Seiyagoo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2518849.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2518849.html"/><content type="html">&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;用户空间栈 &amp;amp; 系统空间栈&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;以下简称用户栈、内核栈&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;1、用户栈和内核栈的区别&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;内核在创建进程的时候，在创建task_struct的同时，会为进程创建相应的堆栈。每个进程会有两个栈，一个用户栈，&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;存在于用户空间，一个内核栈，存在于内核空间。记住，进程对应的用户栈和内核栈都是进程私有的。当进程在用户空间&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;运行时，cpu堆栈指针寄存器里面的内容是用户堆栈地址，使用用户栈；当进程在内核空间时，cpu堆栈指针寄存器里面&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;的&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;内容是内核栈空间地址，使用内核栈。 &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;注：有些系统中专门为全局中断处理提供了中断栈，但是x86中并没有中断栈，中断在当前进程的内核栈中处理。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;2、linux中有多少个内核栈&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;在/&lt;span lang="EN-US"&gt;include/linux/sched.h&lt;/span&gt;中定义了如下一个联合结构:&lt;/span&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;span style="font-size: 15px;" lang="EN-US"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;union&amp;nbsp;task_union&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 15px;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct&amp;nbsp;task_struct task;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 15px;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned&amp;nbsp;long stack[2048];&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 15px;" lang="EN-US"&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;每个进程在创建的时候会在内核空间连续分配两个page即8K的数据用来保存进程结构(task_struct)，这个进程结&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;构大概有1K左右，剩下的7K用作该进程的内核栈（写中断程序的时候不要用什么递归,大的局部变量）。 也就是说，&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;除&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;了每个进程都有一个用户栈之外，同时都有一个系统空间栈。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;实际上，进程的&lt;span lang="EN-US"&gt;task_struct&lt;/span&gt;结构所占的内存是由内核动态分配的，更确切地说，内核根本不给&lt;span lang="EN-US"&gt;task_struct&lt;/span&gt;分配内&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;存，&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;而仅仅给内核栈分配&lt;span lang="EN-US"&gt;8K&lt;/span&gt;的内存，并把其中的一部分给&lt;span lang="EN-US"&gt;task_struct&lt;/span&gt;使用。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.1、首先要搞清楚linux的调度机制,在内核态时是不会发生调度的；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.2、进入内核态与返回用户态对堆栈的使用是平衡的：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;在进程从用户态转到内核态的时候，进程的内核栈总是空的。这是因为，当进程在用户态运行时，使用的是用户&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;栈，当进程陷入到内核态时，内核栈保存进程在内核态运行的相关信息，但是一旦进程返回到用户态后，内核栈中保存&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;的信息无效，会全部恢复，因此每次进程从用户态陷入内核的时候得到的内核栈都是空的。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.3、linux把堆栈与task_struct放在一起,并用简单操作得到current指针（esp &amp;nbsp; &amp;amp; &amp;nbsp; 8191UL）,这在共享堆栈情况下&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;是不允许的，也无法区分是哪一个进程；&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.4、进程的独立性：如果一个进程(中断,调用)的时候由于某种原因(中断处理程序写的不对)使堆栈不平衡了,那就会影&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;响整个系统,而如果堆栈是独立的,那只会影响此进程,大不了把它kill掉。这就像linux的设计:用户与内核分的非常清楚,好&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;理解也更强壮,你死你的,不关别人的事。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;3、进程用户栈和内核栈的切换&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;当进程因为中断或者系统调用而陷入内核态时，进程所使用的堆栈也要从用户栈转到内核栈。进程陷入内核态后，首先把&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;用户态的堆栈地址保存在内核堆栈中，然后设置堆栈指针寄存器的地址为内核栈地址（&lt;span lang="EN-US"&gt;CPU&lt;/span&gt;从任务状态段&lt;span lang="EN-US"&gt;TSS&lt;/span&gt;中装入内核栈指&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;针&lt;span lang="EN-US"&gt;esp&lt;/span&gt;），这样就完成了用户栈向内核栈的转换； &amp;nbsp;当进程从内核态恢复到用户态之行时，在内核态之行的最后将保存在内核栈&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;里面的用户栈的地址恢复到堆栈指针寄存器即可。这样就实现了内核栈和用户栈的互转。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;那么，我们知道从内核转到用户态时用户栈的地址是在陷入内核的时候保存在内核栈里面的，但是在陷入内核的时候，我们&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;是如何知道内核栈的地址的呢？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;关键在进程从用户态转到内核态的时候，进程的内核栈总是空的（理由见上面的2.2）。所以在进程陷入内核的时候，直接&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;把&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;内核栈的栈顶地址给堆栈指针寄存器就可以了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;4、用户态、内核态之间的共享&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.1、我们知道linux的虚拟地址空间是内核态使用3G以上的高地址空间，那么所有的用户进程是如何共享这一个内核空间的呢?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Linux系统中的init进程(pid=1)是除了idle进程(pid=0，也就是init_task)之外另一个比较特殊的进程，它是Linux内核开始&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;建立起进程概念时第一个通过kernel_thread产生的进程，其开始在内核态执行，然后通过一个系统调用，开始执行用户空间的&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;/sbin/init程序，期间Linux内核也经历了从内核态到用户态的特权级转变，/sbin/init极有可能产生出了shell，然后所有的用户&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 进&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;程都有该进程派生出来。而linux采用2级页表（1K x 1K x 4K），页目录的1/4(3G/4G)即256B是属于内核的；所以创建用&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;户&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 15px;"&gt;进程时会复制init进程的这256B的页目录以及后面的一级、二级页表，也即实现了内核空间的共享。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.2、一个进程在内核态 可以直接通过虚拟地址访问其他进程内核态的数据，因为他们是一个页表。&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;一个进程在内核态 不可以直接通过虚拟地址访问其他进程的用户态的数据，因为他们不使用同一个页表。&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.3、由于系统中只有一个内核实例在运行，因此所有进程都映射到单一内核地址空间。内核中维护全局数据结构和每个进程的&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;一些对象信息，后者包括的信息使得内核可以访问任何进程的地址空间。通过地址转换机制进程可以直接访问当前进程的地址空&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;　 &amp;nbsp;间（通过MMU），而通过一些特殊的方法也可以访问到其它进程的地址空间。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.4、内核态与用户态的交互&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;举个特例：当系统调用的参数超过6个时，将借助寄存器将所要传递给内核的参数包装成一个结构体，并将结构体指针放到&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;指定寄存器。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;另请参考：&lt;a href="http://blog.chinaunix.net/uid-26675482-id-3067206.html" target="_blank"&gt;Linux 用户态与内核态的交互 &amp;mdash;&amp;mdash;netlink 篇&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&lt;a&gt;&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;参考：&lt;a href="http://blog.csdn.net/yming0221/article/details/6319328"&gt;进程的用户栈和内核栈&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 15px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://topic.csdn.net/t/20041012/16/3448620.html"&gt;http://topic.csdn.net/t/20041012/16/3448620.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/Seiyagoo/aggbug/2518849.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Seiyagoo/archive/2012/05/26/2518849.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wallen/archive/2012/05/25/2517387.html</id><title type="text">Linux文件权限与目录权限</title><summary type="text"/><published>2012-05-24T17:05:00Z</published><updated>2012-05-24T17:05:00Z</updated><author><name>wallenwang</name><uri>http://www.cnblogs.com/wallen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wallen/archive/2012/05/25/2517387.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wallen/archive/2012/05/25/2517387.html"/><content type="html">&lt;p&gt;文件和目录的权限表面看很简单，但真正弄懂还是得花点心思。&lt;/p&gt;&lt;p&gt;此文部分语句来自《鸟哥的Linux私房菜 第三版》，可能有理解不对的地方，还请各位路过的神仙指正。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;文件权限比较简单，但有几点也需要特别注意：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;r：读权限&lt;/strong&gt;，指文件的具体内容，比如说文本文件里面写了些什么。这里&amp;ldquo;读&amp;rdquo;的内容不包括文件的属性，比如大小、修改日期、权限等。因为那不属于文件内容。&lt;/p&gt;&lt;p&gt;看具体例子，以test.pl为例:&lt;/p&gt;&lt;p&gt;有文件的读权限，但是无法查看其属性：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052423312795.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;没有文件的读权限，照样可以查看其属性：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052423345227.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;由此可见，文件属性的查看并不是由文件自身的权限设置决定的。具体由什么决定，仔细看上面两张图的对比就可以看出来了，看不出来就看下文。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;w：写权限&lt;/strong&gt;，编辑，修改或者新增文件的内容，&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;但是不含删除该文件。（由父目录的w权限决定）&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;x：执行权限&lt;/strong&gt;。但拥有了文件的执行权限并不意味着一定可以执行文件，还得看是否拥有父目录的x权限&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052500063752.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;总之，对于文件的r、w、x来说，主要都是针对&amp;ldquo;文件的内容&amp;rdquo;，与文件名的存在与否没有关系。因为文件记录的是实际的数据（相对于目录）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;目录的权限：&lt;/p&gt;&lt;p&gt;相对于文件是记录的实际数据，目录主要记录的内容是文件名列表。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;r（read contents in directory）&lt;/strong&gt;：读取目录结构列表。比如ls、find之类。可查看文件名，文件的属性就不一定可以看了，还得得看目录的x权限。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;w（modify contents of directory）&lt;/strong&gt;：修改目录结构列表的权限。包括：新建文件、目录，&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;删除文件、目录（而且无视其权限）&lt;/strong&gt;&lt;/span&gt;，重命名文件、目录，移动文件、目录。&lt;/p&gt;&lt;p&gt;比如一个普通用户拥有一个目录的w权限（同时也要拥有目录的x权限），即便是该目录下有root的文件，也可以照删不误：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052500375681.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;x（access directory）&lt;/strong&gt;：意为用户是否可以进入该目录，以此目录作为工作目录。不具有某一目录的x权限，就无法切换到该目录下，该目录下的任何文件也不能被查看、修改、执行、删除。（最多只能看到文件名，前提是有父目录的r权限）。《鸟》书是这样说的。但我自己做实验时发现，只要没有目录的x权限，除了可以看该目录下的文件名（仅文件名而已），其他的所有操作就甭想了。不举例了，有疑惑自己做实验证实。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;嗯，目录的x权限还是有待深究，今天有点晚了，周末研究一下，补充上来&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wallen/aggbug/2517387.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wallen/archive/2012/05/25/2517387.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kevinwu/archive/2012/05/24/2516483.html</id><title type="text">【Kevin原创】ubuntu11.10安装WEBQQ</title><summary type="text"/><published>2012-05-24T08:21:00Z</published><updated>2012-05-24T08:21:00Z</updated><author><name>wurr707</name><uri>http://www.cnblogs.com/kevinwu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kevinwu/archive/2012/05/24/2516483.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevinwu/archive/2012/05/24/2516483.html"/><content type="html">&lt;p&gt;作为一个linux爱好者，最近终于把工作用的操作系统更改为ubuntu。虽然之前也用ubuntu，但是只是在虚拟机上小打小闹，遇到的问题也比较有限。从现在开始，我要把在使用ubuntu过程中遇到的问题，以及解决办法记录下来，这样就能够保证在下次不重蹈覆辙，也能够帮助到遇到同样问题的他人。&lt;/p&gt;&lt;p&gt;由于很多同学朋友只能通过QQ来联系，所以不得已还是需要在ubuntu上安装一个QQ。腾讯虽然出了一版QQ for linux，但是和windows上的QQ差距也太大了，而且还不大稳定。不过幸好还有Q+ web版的，这个tencent的云桌面做的还是相当不错的，也为Linux操作系统下使用QQ提供了一个比较完美的解决方案。&lt;/p&gt;&lt;p&gt;Q+ web版在使用上还是有一些不方便，例如它无法最小化到托盘、消息来了没有提醒。&lt;span&gt;pyWebQQ能够很好的解决一下问题，它是&lt;span&gt;基于python、python-webkit包装的webqq桌面版。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;pyWebQQ的方式如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;sudo&lt;/span&gt; apt-add-repository ppa:linux-deepin-team/linux-&lt;span style="color: #000000;"&gt;deepin&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;sudo&lt;/span&gt; apt-&lt;span style="color: #000000;"&gt;get update &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #0000ff;"&gt;install&lt;/span&gt; pywebqq&lt;/div&gt;&lt;p&gt;安装完成之后就可以使用WebQQ了。看到这里是不是觉得太简单了，其实这个安装方式网上一搜一大把，但是这个不是我要说的重点。&lt;/p&gt;&lt;p&gt;重点是系统重启之后当你想要打开ubuntu软件中心的时候，就会发现无法打开了。当你使用以下命令的时候&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;sudo&lt;/span&gt; software-center&lt;/div&gt;&lt;p&gt;就会报出以下错误信息&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Traceback (most recent call &lt;span style="color: #0000ff;"&gt;last&lt;/span&gt;&lt;span style="color: #000000;"&gt;):&lt;br/&gt;File &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/usr/bin/software-center&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, line &lt;span style="color: #800080;"&gt;149&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;from softwarecenter.ui.gtk3.app import SoftwareCenterAppGtk3&lt;br/&gt;File &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/usr/share/software-center/softwarecenter/ui/gtk3/app.py&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, line &lt;span style="color: #800080;"&gt;49&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;from softwarecenter.db.application import Application&lt;br/&gt;File &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/usr/share/software-center/softwarecenter/db/application.py&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, line &lt;span style="color: #800080;"&gt;25&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;from softwarecenter.backend.channel import is_channel_available&lt;br/&gt;File &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/usr/share/software-center/softwarecenter/backend/channel.py&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, line &lt;span style="color: #800080;"&gt;25&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;from softwarecenter.distro import get_distro&lt;br/&gt;File &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/usr/share/software-center/softwarecenter/distro/__init__.py&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, line &lt;span style="color: #800080;"&gt;165&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;distro_instance&lt;/span&gt;=&lt;span style="color: #000000;"&gt;_get_distro()&lt;br/&gt;File &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/usr/share/software-center/softwarecenter/distro/__init__.py&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, line &lt;span style="color: #800080;"&gt;148&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; _get_distro&lt;br/&gt;module &lt;/span&gt;=  __import__(distro_id, globals(), locals(), [], -&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;ImportError: No module named LinuxDeepin&lt;/span&gt;&lt;/div&gt;&lt;p&gt;造成以上是&lt;span&gt;因为安装pyWebQQ客户端的时候，添加了linuxdeepin的软件源导致的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;解决办法是修改/etc/&lt;span&gt;lsb-release文件中的内容&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;sudo&lt;/span&gt; vi /etc/lsb-release&lt;/div&gt;&lt;p&gt;把文件中的内容替换成以下的文本&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;DISTRIB_ID=&lt;span style="color: #000000;"&gt;Ubuntu&lt;br/&gt;DISTRIB_RELEASE&lt;/span&gt;=&lt;span style="color: #800080;"&gt;11.10&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;DISTRIB_CODENAME&lt;/span&gt;=&lt;span style="color: #000000;"&gt;oneiric&lt;br/&gt;DISTRIB_DESCRIPTION&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Ubuntu 11.10&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;p&gt;保存退出之后就可以正常打开ubuntu软件中心了。&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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/kevinwu/aggbug/2516483.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevinwu/archive/2012/05/24/2516483.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wallen/archive/2012/05/24/2515929.html</id><title type="text">chmod： 为毛w搞特殊？ umask：因为我是它大爷</title><summary type="text"/><published>2012-05-23T16:59:00Z</published><updated>2012-05-23T16:59:00Z</updated><author><name>wallenwang</name><uri>http://www.cnblogs.com/wallen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wallen/archive/2012/05/24/2515929.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wallen/archive/2012/05/24/2515929.html"/><content type="html">&lt;p&gt;感觉linux基础不扎实，所以想通读一遍《鸟哥的Linux私房菜》（不要鄙视我。。。）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;读到文件权限一章，chmod，发现一个问题：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052400273435.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;看出来没，chmod +r和chmod +x的效果相当于chmod a+r和chmod a+x，而chmod +w的效果仅相当于chmod u+w，&amp;ldquo;-&amp;rdquo;操作类似&lt;/p&gt;&lt;p&gt;为毛你&amp;ldquo;w&amp;rdquo;搞特殊？man一下吧：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;A combination of the letters ugoa controls which users' access to the file will be changed: the user who owns it (u), other users in the file's group (g), other users not in the file's group (o), or all users (a). &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;If none of these are given, the effect is as if a were given, but bits that are set in the umask are not affected.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;扫戴斯乃~&lt;/p&gt;&lt;p&gt;默认是a，但是在umask里设置的位是不受影响的，看下umask是啥：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052400351257.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;果然，group和other的w权限在umask里是有设置的&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;再测试确认下吧：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/411103/2012052400450648.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;嗯，符合预期，umask是0044，group和other的r权限有设置，这次理所当然换成&amp;ldquo;r&amp;rdquo;搞特殊了&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后总个结：&lt;/p&gt;&lt;p&gt;1. chmod，不显式指定ugoa时，默认值为a，但在umask中设置的位不受影响。&lt;/p&gt;&lt;p&gt;2. 遇到不明白的问题，先动脑想（我貌似没有这一步。。。惭愧），想不明白再动手查（最好先不要百度谷歌），实在不明白再百度谷歌，再不行就问大侠们吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;搜索引擎是很好用，网络上的信息也很全很多，但是主动思考的过程还是不能少的。想都不想上来就百度谷歌的，即便问题解决了，效果也不如通过自己的思考和查原始资料解决来的好。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;OK。。。我该说&amp;ldquo;奥呀斯密&amp;rdquo;呢还是说&amp;ldquo;奥斯&amp;rdquo;呢&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wallen/aggbug/2515929.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wallen/archive/2012/05/24/2515929.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/volcanol/archive/2012/05/23/2515256.html</id><title type="text">volcanol_Linux_问题汇总系列_1_系统引导过程中到check filesystem时就无法继续引导问题解决方法。</title><summary type="text"/><published>2012-05-23T11:52:00Z</published><updated>2012-05-23T11:52:00Z</updated><author><name>volcanol</name><uri>http://www.cnblogs.com/volcanol/</uri></author><link rel="alternate" href="http://www.cnblogs.com/volcanol/archive/2012/05/23/2515256.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/volcanol/archive/2012/05/23/2515256.html"/><content type="html">&lt;p&gt;在说问题之前，首先说一下我的用户名：volcanol。这里有点巧合，在上高中之前，我比较喜欢看火山喷发的景象，然后上了高中后&lt;/p&gt;&lt;p&gt;学习了火山这个单词：volcano， 然后加上我自己的姓的第一个字目是&amp;ldquo;l&amp;rdquo;，于是就给自己起了个网名为：volcanol。然后上大学的时候，&lt;/p&gt;&lt;p&gt;接触了linux， 发现&amp;ldquo;volcanol&amp;rdquo;这个字符串，刚好可以解释为：View OF Linux Can Appreciate Nature OF Linux，再加上个人很喜欢linux&lt;/p&gt;&lt;p&gt;这个优秀的操作系统，就这样，我就采用了这个网名。&lt;/p&gt;&lt;p&gt;下面是这次要说的问题：&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;系统引导过程中到check filesystem时就无法继续引导&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319455511.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319461480.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319463392.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319471321.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319473469.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319475224.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319482323.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319484762.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319490810.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319493082.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/304449/2012052319495394.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;　&lt;span style="color: #ff0000; font-size: 16px;"&gt;&lt;strong&gt;　Tip： &amp;nbsp;这里有一个需要注意的地方，那就是我们在整个过程中实际上是不需要格式化系统的，我格式化的原因是&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 16px;"&gt;&lt;strong&gt;我的/dev/sda3分区里面本身没有任何的内容，所以我选择了格式化。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 16px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/volcanol/aggbug/2515256.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/volcanol/archive/2012/05/23/2515256.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
