Category: 快速教程

使用wp-super-cache插件静态缓冲的nginx rewrite规则

WordPress的缓冲插件wp-super-cache默认支持apahce的缓冲方式,在生成了静态页面数据后,通过.htaccess的规则直接让apache读取静态文件,完全不经过PHP,可以很大的提高博客的页面性能。

但是Nginx的改写规则就没这么容易让代码来配置了,虽然wp-super-cache的第二种缓存方式就是为这种使用环境设计,但实际上是用了PHP来提供静态数据了,在使用apache benchmark压力的时候,php-cgi依然占很高的CPU占有率。

通过编写nginx的rewrite规则还是可以让nginx直接读取静态文件,参考来自Code Exchange: nginx rewrite rules for WordPress + WP Super Cache,这里的配置被很多地方引用过,但实际尝试使用过程看到那里面的代码还需要微调。

    server {
        listen          80;
        server_name     apt-blog.net;
        root    /var/www/pt-sites/wordpress;
        index   index.html index.htm index.php;
        location / {
                # enable search for precompressed files ending in .gz
                # nginx needs to be complied using –-with-http_gzip_static_module
                # for this to work, comment out if using nginx from aptitude
                gzip_static on;
 
                # if the requested file exists, return it immediately
                if (-f $request_filename) {
                        break;
                }
 
                set $supercache_file '';
                set $supercache_uri $request_uri;
 
                if ($request_method = POST) {
                        set $supercache_uri '';
                }
 
                # Using pretty permalinks, so bypass the cache for any query string
                if ($query_string) {
                        set $supercache_uri '';
                }
 
                if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                        set $supercache_uri '';
                }
 
                # !!!! IMPORTANT
                # if we haven't bypassed the cache, specify our supercache file
                if ($supercache_uri ~ ^(.+)$) {
                        set $supercache_file /wp-content/cache/supercache/$http_host/$1/index.html;
                }
 
                # only rewrite to the supercache file if it actually exists
                if (-f $document_root$supercache_file) {
                        rewrite ^(.*)$ $supercache_file break;
                }
 
                # all other requests go to Wordpress
                if (!-e $request_filename) {
                        rewrite ^(.*)$ /index.php?q=$1 last;
                }
 
        }
        location ~ \.php$ {
              include        fastcgi_params;
              fastcgi_pass   127.0.0.1:9000;
              fastcgi_index  index.php;
              fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
    }

需要重点关注的是set $supercache_uri这一行,这里的路径是wp-super-cache生成静态文件的路径,配置文件起作用的时候,这个路径会和$document_root组成最终静态文件的绝对路径,最终输出文件。所以如果这个路径不对的话,最终还是交给了index.php,缓冲就不起作用了。

wp-super-cache在wordpress目录/wp-content/cache/supercache/$http_host/下生成了各个请求url的目录,目录下是一个index.html静态文件,可以在wordpress工作时候,在这个目录下用命令watch find观察(在缓冲不多的情况下),总之小心的把这个路径写好,因为估计每个博客的permanent link的样式都不一样,wp-super-cache生成的目录也不一样,需要仔细调试一下。

完成后用apache benchmark压一下,Request per second应该很容易上百,而且php-cgi应该不会出现在top的列表前面了,CPU应该集中在nginx的子进程上,而且都是个位数CPU占有率,系统的load非常低。

顺便说一下,如果仅使用ab测试压力,用不着安装整个apache2,只需要apt-get install apache2-utils

搭建企业级邮件系统 iRedMail

一 软件环境
最近负责一个公司网站和邮件系统的搭建,以前自己一直没有仔细的研究过邮件系统的从零开始搭建工作,趁现在工作之余也同时将文档整理一次;
主要针对快捷高效搭建,简单实用为主,基本够一个人数50-100的小型公司使用。

操作系统:CentOS release 5.3 (Final) x86_64
数据库:mysql Ver 14.12 Distrib 5.0.45
php:php 5.2 up
邮件系统:postfix 2.5.6 + iredmail 0.4.0
webmail:RoundCube 1.0.2

iRedMail 0.4.0 下载地址:这里

二 安装过程
因许多软件涉及到yum安装,这里我给出国内一个非常快的Centos镜像,请 这里下载
1. 数据库和邮件系统安装
mysql 安装和postfix 安装 全部采取yum安装

$ yum install -y mysql mysql-server mysql-devel
$ yum install -y postfix

2.php安装

$ yum install -y php php-ldap php-gd php-imap php-mysql php-pear php-mbstring

3.iredmail 安装
下载解压 iRedMail-0.4.0.tar.bz2
安装指令:

$ cd /path/to/iRedMail-x.y.z/
$ cd pkgs/
$ sh get_all.sh
$ cd ../
$ sh iRedMail.sh

安装过程详细介绍请参看:戳这里
注:
a:安装之前请先行设定mysql的root帐号和密码;空密码不被接受;
b:其中数据库只需选择mysql即可;
c:webprogrem选择RoundCube即可,其他默认;
d:请记住设定的mail admin的帐号和密码。

三 配置过程
因为iRedMail的高度整合,使得配置过程异常的简单。甚至可以不需要对postfix进行多余设定;
注意修改以下基本配置:iRedmail安装过程中已经增加的这部分设定,请在配置文件的最末尾处修改

1. myorigin
myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省 地,postfix使用本地主机名作为myorigin,但是建议你最好使用你的域名,因为这样更具有可读性。比如:安装postfix的主机为 mail.domain.com则我们可以这样指定myorigin:

myorigin = domain.com
当然我们也可以引用其他参数,如:
myorigin = $mydomain

2. mydestination
mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就
是你的postfix系统要接收什么样的邮件。比如:你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样,缺省地,postfix使用本地主机名作为 mydestination。如:

mydestination = $mydomain
mydestination = domain.com

3. notify_classes
在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户,
只有这样,在用户遇到问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:

bounce:将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。

2bounce:将两次不可投递的邮件拷贝发送给postfix管理员。

delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。

policy:将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员,包含整个SMTP会话的内容。

protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。

resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。

software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。

缺省值为:

notify_classes = resource, software

4.myhostname
myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也可以指定该值,需要注意的是,要指定完整的主机名。如:

myhostname = mail.domain.com

5.mydomain
mydomain参数指定你的域名,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值,如:

mydomain = domain.com

6.mynetworks
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址,也可以用CIDR(无类域间路由)地址来表示,如:

192.168.1.0/24
192.168.1.0/26

7.inet_interfaces
inet_interfaces 参数指定postfix系统监听的网络接口。缺省地,postfix监听
所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。如:

inet_interfaces = all
inet_interface = 192.168.1.1

关于postfix的配置详细介绍可参看戳这里
需要注意的是dovecat配置在main.cf中的和master.cf的端口一致;否则会导致邮件发送失败;

#main.cf
content_filter = smtp-amavis:[127.0.0.1]:10024
#master.cf
127.0.0.1:10024  inet n  –   –   –   –  smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

以上设定完成后,确认启动postfix、policyd、dovecot、httpd、mysqld;

四、测试过程
1. 访问:http://your_server/mail/

以上设定正确,请登录测试发送邮件是否正常;

2. 增加邮件用户和邮箱容量大小配额设定
a.首先登录mysql;
b.依次执行以下指令:

mysql> use vmail;
Database changed
mysql> INSERT INTO mailbox (username, password, name, maildir, quota, domain, active)
->     VALUES (‘testuser@hiadmin.com’,  ‘$1$W.UWoG.0$Bnq8mcbsi1UhFVpiJ2jvY0′, ‘testuser’,  ‘hiamdin.com/testuser/’, ’2048′, ‘hiadmin.com’, ’1);
Query OK, 1 row affected (0.00 sec)

注:
#在mailbox生成用户帐号、密码、以及邮箱容量quota 2048为2GB
#其中password字段值,可以使用 openssl passwd -1 testuser生成;

mysql> INSERT INTO alias (address, goto, domain, active)
->     VALUES (‘testuser@hiadmin.com’, ‘testuser@hiadmin.com’, ‘hiadmin.com’, ’1);
Query OK, 1 row affected (0.00 sec)

注:
#alias 中生成别名;

c.也可以用iRedmail的tools 脚本;

———————————————-

$cd /path/to/iRedMail-0.4.0/tools

#该目录下有个create_mail_user_MySQL.sh的脚本,可以为你生成增加用户的sql语句;
#执行脚本前实现生成userlist.txt

$echo testuser >userlist.txt

#每行一个用户名即可

$sh create_mail_user_MySQL.sh userlist.txt

#生成output.sql
#登录到mysql,在vmail库中执行

mysql> source /path/to/output.sql

d.设定自己域名的mx记录,再登录RoundCube测试能否收发邮件!

源文

在 Ubuntu 上安装 Google App Inventor

App Inventor 是 Google 新近推出的一个 Android 程序开发工具,目的是为了简化 Android 程序的开发,吸引新开发者。

现在使用 App Inventor 已经不需要 Google 的邀请,只需要 App Inventor 和一个 Google 帐号即可。

首先是需要安装 App Inventor,可以在点击此处下载。

下载 deb 包,只需要双击即可安装。

安装结束,打开 http://appinventor.googlelabs.com/ 点击 Get Start 用 Google 账户登录即可开始使用 App Inventor。如果你拥有 Android 设备也可以连接上进行开发和调试。

话说 Google 为什么不做一个完全无须插件的 App Inventor 呢?

kindle 3用作modem共享3G上网 RT

大家都知道,kindle 3的3G上网是免费的,不过在kindle上看网页是比较痛苦的事情,要是kindle 3的3G上网能共享出来上网那就爽了,尤其在外面带了笔记本而又没WIFI的时候,也许就管用了。今天在网上看到了一个方法,翻译一下过来,我还试过呢。

原作者是用MAC电脑来举例的,其实别的电脑也差不多,懂些电脑知识的人比较容易理解,一共只要10步:

越狱和安装usbNetwork请看我之前的文章

1. 越狱你的Kindle

2. 安装usbNetwork,然后在kindle的根目录运行两条命令

;debugOn
 
~usbNetwork

3. 连接Kindle的USB到你的笔记本,然后手动配置笔记本IP成192.168.2.1。

4. 打开一个终端窗口运行

ssh root:fiona@192.168.2.2
或
telnet 192.168.2.2

5. 下载tcpdump-arm,然后再上传tcpdump-arm到Kindle并移动到home根目录。为防万一运行下“mntroot rw”。

6.在kindle 3上 输入

“~/tcpdump-arm -nAi ppp0 -s0″

找出Kindle使用3G上网时浏览器的x-fsn验证密匙

7. 在Kindle与笔记本之间创建一个用于代理的ssh连接

8. 如果sshd挂了,telnet到Kindle,重置与你笔记本之间的ssh

9. 安装Firefox浏览器一个叫做“Modify Headers”的插件,这样能在你浏览的页面里插入你的x-fsn密匙

10. 设置笔记本上Firefox的代理为127.0.0.1:8099,你也可以添加一个端口供SSL

这样就大功告成了。

不过 不是所用网站都没问题,貌似gmail就不行,而且没有iPhone的3G快(估计作为Modem也是需要性能的)。最重要的一点Amazon可以根据你 的x-fsn密匙知道你浏览哪些网站,可能会将免费的3G服务变成0.99美元/MB的收费服务,所以非必要的话就不要乱用。

转帖地址:  http://www.wincold.com/archives/116.html

原贴:http://balaganov.wordpress.com/2010/09/25/tethering-the-kindle-3/

Linux 下控制操作以太网卡

Ethtool的工具用于查看和更改的以太网设备。

 

1. 查看以太网设备属性列表

当你执行ethtool命令,它显示有关的以太网设备的以下信息。

# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: d
        Wake-on: d
        Link detected: yes

上面的ethtool输出显示以太网卡的速度,唤醒,全双工和链路状态属性。以下是复式可用的三种类型。

  • Full duplex : Enables sending and receiving of packets at the same time. This mode is used when the ethernet device is connected to a switch.

  全双工:允许发送和接收的数据包在同一时间。

  • Half duplex : Enables either sending or receiving of packets at a single point of time. This mode is used when the ethernet device is connected to a hub.

  半双工:允许发送或接收的数据包在一个时间点。

  • Auto-negotiation : If enabled, the ethernet device itself decides whether to use either full duplex or half duplex based on the network the ethernet device attached to.

  自适应模式:如果启用,以太网设备本身决定是否使用或全双工或半双工的工作模式。

2.更改网卡参数 使用的ethtool – s选项 autoneg

上述的ethtool eth0的输出显示,启用状态是“自适应”。您可以禁用此参数,如下所示的ethtool使用autoneg选项。

# ifdown eth0
    eth0      device: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
    eth0      configuration: eth-bus-pci-0000:0b:00.0
 
# ethtool  -s eth0 autoneg off
 
# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  Not reported
        Advertised auto-negotiation: No
        Speed: Unknown! (65535)
        Duplex: Unknown! (255)
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: off
        Supports Wake-on: g
        Wake-on: g
        Link detected: no
# ifup eth0

经过上面的命令操作改变了以太网卡工作状态,你可以看到检测的值从”自适应”改为OFF状态。

3.更改以太网设备的速度

使用的ethtool可以改变的以太网设备的速度和新分配的速度值应在某些状态的能力。

# ethtool -s eth0 speed 100 autoneg off
 
# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  Not reported
        Advertised auto-negotiation: No
        Speed: Unknown! (65535)
        Duplex: Unknown! (255)
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: off
        Supports Wake-on: g
        Wake-on: g
        Link detected: no

一旦改变的以太网卡速度时,它会自动断线,需要重新启用,使用ifup命令。

# ifup eth0
    eth0      device: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
    eth0      configuration: eth-bus-pci-0000:0b:00.0
Checking for network time protocol daemon (NTPD):                     running
 
# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  Not reported
        Advertised auto-negotiation: No
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: off
        Supports Wake-on: g
        Wake-on: g
        Link detected: yes

正如在上面的输出显示,速度从1000Mb /秒到100MB / s和自适应模式是OFF设置。

要更改最大传输单元(MTU),请参考的ifconfig的例子文章。

4.显示以太网卡驱动设置

命令 ethtool – i 选项显示驱动程序版本,固件版本详情 如下所示。

# ethtool -i eth0
driver: bnx2
version: 2.0.1-suse
firmware-version: 1.9.3
bus-info: 0000:04:00.0

5.显示自适应模式的以太网卡RX(接收/下载)和TX(发送/上传)

查看有关以太网卡自适应上传下载细节如下所示。

# ethtool -a eth0
Pause parameters for eth0:
Autonegotiate:  on
RX:             on
TX:             on

6.显示特定的某个以太网卡的统计数据

使用的ethtool – S选项来显示的字节传输,接收,错误等等,如下所示。

# ethtool -S eth0
NIC statistics:
     rx_bytes: 74356477841
     rx_error_bytes: 0
     tx_bytes: 110725861146
     tx_error_bytes: 0
     rx_ucast_packets: 104169941
     rx_mcast_packets: 138831
     rx_bcast_packets: 59543904
     tx_ucast_packets: 118118510
     tx_mcast_packets: 10137453
     tx_bcast_packets: 2221841
     tx_mac_errors: 0
     tx_carrier_errors: 0
     rx_crc_errors: 0
     rx_align_errors: 0
     tx_single_collisions: 0
     tx_multi_collisions: 0
     tx_deferred: 0
     tx_excess_collisions: 0
     tx_late_collisions: 0
     tx_total_collisions: 0
     rx_fragments: 0
     rx_jabbers: 0
     rx_undersize_packets: 0
     rx_oversize_packets: 0
     rx_64_byte_packets: 61154057
     rx_65_to_127_byte_packets: 55038726
     rx_128_to_255_byte_packets: 426962
     rx_256_to_511_byte_packets: 3573763
     rx_512_to_1023_byte_packets: 893173
     rx_1024_to_1522_byte_packets: 42765995
     rx_1523_to_9022_byte_packets: 0
     tx_64_byte_packets: 3633165
     tx_65_to_127_byte_packets: 51169838
     tx_128_to_255_byte_packets: 3812067
     tx_256_to_511_byte_packets: 113766
     tx_512_to_1023_byte_packets: 104081
     tx_1024_to_1522_byte_packets: 71644887
     tx_1523_to_9022_byte_packets: 0
     rx_xon_frames: 0
     rx_xoff_frames: 0
     tx_xon_frames: 0
     tx_xoff_frames: 0
     rx_mac_ctrl_frames: 0
     rx_filtered_packets: 14596600
     rx_discards: 0
     rx_fw_discards: 0

7.以太网联接问题解答

当网络连接出现问题,您可能要检查(或更改)的以太网设备的参数,用ethtool命令检查并显问题。

■速度和双工值显示为未知

■链接检测值显示为无

连接成功后,上述两项指标得到适当的值。即速度与已知值分配,无论是双式成为全/半,成为有链路检测。经过上述变化,如果链路检测仍然说“不”,检查是否是从网线到交换机和系统间的任何问题,您可能希望将这一方面进一步深入研究。捕捉和分析来自一个特定的网络接口的数据包,使用tcpdump工具。

8.从多个网络设备中确定某个具体的设备(闪烁的LED网卡端口)

假设一台机器有四个以太网卡适配器,并要确定一个特定的以太网卡的物理端口。 (例如eth0)。使用Ethtool的选项- p,它将使物理端口对应的LED闪烁。

# ethtool -p eth0

9.让更改设置在重启后依然有效

如果使用ethtool改变任何以太网设备的参数,它都将在下一次重新启动后消失,除非你做到以下几点。在Ubuntu,必须修改/etc/network/interfaces文件,并添加所有的变化如下所示。

# vim /etc/network/interfaces
post-up ethtool -s eth2 speed 1000 duplex full autoneg off

将上面的这行程序放到该文件的最后一行。这将改变速度,设备eth2 将永久工作在全双工模式下。

在SUSE下修改/etc/sysconfig/network/ifcfg-eth-id文件,该脚本使用到POST_UP_SCRIPT变量,如下所示。包括下列的最后一行相应的eth1 adpater配置文件。

#vim /etc/sysconfig/network/ifcfg-eth-id 
POST_UP_SCRIPT='eth1'

然后,创建一个新文件scripts/eth1如下在/etc/sysconfig/network中的目录显示。确保脚本有执行权限(chmod a+x),并确保Ethtool的实用程序在/sbin目录中。

#cd /etc/sysconfig/network/
#vim scripts/eth1 
#!/bin/bash /sbin/ethtool -s duplex full speed 100 autoneg off

源文

RPM Builder:一个用于构建 RPM 包的图形化前端

在构建 RPM 包的过程中,RPM spec 文件以其复杂的结构让人望而生畏。虽然都是和一般 bash 脚本没有太多的分别,但是用一般的编辑器看起来还是太复杂了。更遑论要制作 RPM 包了。事实上制作一个完整的 RPM 包比 DEB 包要简单。

身为 LSB 标准的软件包打包格式,却没有独揽软件包管理的大旗,与 DEB 分庭抗礼。话说回来,这款软件可没有简化 RPM 打包的意思,只是有一个更加好的界面。%build、%install 、%files 这些 Section 还得制作者自己填写好,当一切填写好以后,你按一下 Build my RPM 就会自动生成 RPM 包了。

下载地址:https://affix.me/2010/11/13/rpmbuilder-0-1-a-graphical-way-to-create-rpm-packages/

linux出错提示信息详解

出错提示信息详解

发布于2009年2月28日,星期六,下午2:52

LXF深 入地讲:许多人害怕Linux,因为它给出的出错提示信息简直像天书一样。并且这样的信息有很多。如果你在Linux Format(译者注:这是一家英国销售量最好的Linux杂志)的论坛上搜索“Error”这个词,你将会得到超过150页的内容。那些是许多人遇到的 许多问题。

用户们遇到的最大的困难并非出错提示信息的数量,而是如何从中找出有用的东西。例如,“
Kernel Oops”是什么意思,或者“PCI can’t allocate”是什么意思?Linux的出错提示相当愚钝且很难理解,几乎起不了什么帮助。这是一个遗憾,因为大绝大多数问题本可以很容易的解决,而 且有相当数量的涉及同样问题的出错提示一次又一次的出现。用商业圈里的话来说,这是最能获得立竿见影效果的部分(译者:不知些句如此翻译妥当否?请指 教)。我们要解决的正是这一部分问题。

启动你的系统不需要你成为一个Linux专家,播放视频文件也无需成为程序员。然而大部分出错信息都假定他们的用户已掌握了此类专门技术。我们试图 阐明这些常见错误,并提供解决方案,以帮助普通的Linux用户规避这些问题,并使他们的系统回到正常状态。我们挑选了一些我们认为问题最多的领域,包括 启动、常规软件应用、文件系统、网络和发行版的安装。

我们从每个领域中挑选了几个最常见的错误,并解释了相应的解决方案是如何起作用的。这样做的目的是,即使这些问题不适合你的情况,你也能了解为什么Linux的出错提示信息看上去如此的难以捉摸并令人生畏。希望你能从中学会找到解决自己问题所需知识的方法。

发行版的安装

每一种Linux发行版都有不同的安装例程,并且都会制造一些问题。Ubuntu也许在一台电脑上工作良好而另外一台则不行。一台安装了 Ubuntu并运行正常的电脑也许根本无法安装Fedora, OpenSUSE, Linux Mint, 或者Mandriva…

ERROR Can’t boot from CD/DVD(无法从光盘启动)

如何你刚开始接触Linux,下述情况通常会是你对该操作系统的第一体验:你将你的新光盘放入光驱并重启电脑,结果发现却是进入了你先前使用的操作 系统。问题在于你硬盘的启动优先级高于光驱。许多现代的BIOS包含了一个启动菜单,在这里你可以动态地修改设备的启动优先级。当屏幕上第一次出现东西的 时候,试着按下Escape键或F12键,你只需在那里选择从光驱启动。

老一点的电脑可能没有这样的方便。你需要在开机时按F12或者Del键进入系统的BIOS菜单,从那儿更改启动顺序。通常你可以在“Boot”菜单 下找到相关选项,你需要保存这些更改以便能够从光驱启动。如果你需要从外接驱动器或U盘启动,可以执行相同的步骤。如果你在网吧或者面对一台公司的电脑, 上述内容同样有用。

Occasionally you will need to change the device boot priority to be able to boot a live Linux distro from your optical drive

有时你可能需要更改设备的启动优先级以便能够从光驱启动一个live版的Linxu发行版。

ERROR PCI: cannot allocate(无法指派)

这样的错误有许多,他们主要在启动系统时出现。他们有一个共同的起因:错误的电源管理行为。罪魁祸首是一个叫做ACPI的东西,即高级配置与电源接口。尽管他是一种电源管理标准,但在十几年的时间里他已经引起了无数问题。麻烦在于硬件驱动总是不完全执行这个协议规范。

当你打开电脑的时候,或者将电脑从睡眠状态唤醒的时候,你的电源管理便开始起作用,每到此时某些设备就会出问题。通过Live CD进行的安装加剧了些问题,因为他们启动时不提供严格侦测硬件匹配的额外功能,也无法包含所有设备的驱动,这就是为什么通过Live CD进行安装后常会出现此问题。

你能做的只有一件事——关闭ACPI。有时你可以通过系统的BIOS菜单来关闭此功能,如果不能关闭的话,你需要在启动时禁用ACPI。启动时按下 Escape键,进入Grub菜单,选择你通常用的那个项。向下翻到从内核启动的那一行,按下E键编辑该行。在此行末尾加上acpi=off noapic,按回车及B键进行启动。你会发现你的电脑顺便启动,如果你以后再安装Linux,你选择的发行版应该能够更好的在安装时选择正确的驱动。

Booting problems(启动出错)

没有什么比一条中止你系统启动的信息更糟糕的了——主要是因为你现在还没有解决主要问题的工具。然而启动时出错相当常见。因为我们都喜欢安装发行 版,并且我们经常在一台电脑上安装不止不种发行版,还和Windows共享一块硬盘。任何这样的安装都能扰乱引导程序,将一个运行良好的系统回复原状并不 是那么容易的。

ERROR Grub…

如果你在打开电脑时看见了这条信息,说明Grub 的启动菜单损坏了。这是你安装的Linux的中负责启动操作系统的部分。你唯一能做的就是从其他媒介启动Linux,最好是Live CD。进入桌面后,打开一个命令行终端,切换到管理员账户,键入grub。以下步骤在你的Grub菜单项不再指向你的Linux分区的情况下也能起作用。

键入find /boot/grub/stage1,此命令的作用是搜寻初始启动驱动器的位置,他将会返回包含(hd0,0)字样的几行输出——这是Grub用来表示硬 盘驱动器位置的语法规则,返回什取决于你自己的安装,所以不要以为他就是(hd0,0)。现在键入    root (hd0,0) (或者是你自己得到的返回值),以告诉Grub该从哪个分区启动,然后键入setup (hd0)以在你的硬盘主引导记录重新安装引导程序。然后重启电脑,他应该已经能正常启动了。

Knowing how to install the Grub bootloader onto your main hard drive can get you out of all sorts of tricky problems.

知道如何在你的主硬盘安装Grub启动引导程序将会摆脱各种难缠的问题。

ERROR Out of range, ERROR Fatal server error: no screens found(超出范围错误,服务器致命错误:无法找到屏幕)

当你的屏幕预设值跟你的显示器不兼容时就会出现此错误。按下Ctrl+Alt+F1进入控制台模式,以root身份登录(或者用你在ubuntu中 的普通账户使用sudo命令)。基于Debian发行版的用户可以键入命令dpkg-reconfigure xserver-xorg来重新配置你的屏幕。

其他用户将不得不按以下步骤手动修复他们的设置。首先,键入cd /etc/X11,然后是cp xorg.conf xorg.lxf,以便备份你的设置文件。现在用一款你用着最顺手的命令行编辑器打开此文件。如果你不确定的话就键入nano xorg.conf。如果你知道你显示屏的规格,将此配置文件向下翻找到“Section Monitor”项,现在你需要手动设定水平和垂直刷新率。

如果你不知道你屏幕的分辨率,继续向下翻直到找到Screen section项。你需要删除此处所有的高分辨率,因为我们在寻找最小公分母(我们建议删除任何高于1024×768的分辨率)。在你的屏幕恢复正常后你 可以重新从桌面增加其分辨率。如何这些方法都不起作用,那么最后的保护性选项就是将你的设备调整为“vesa”模式,完全避开你的显卡驱动。

ERROR Kernel panic!

Kernel panic 或者 Kernel oops!错误信息是我们Linux用户所遇到的最接近那个经常困扰Windows用户的蓝屏死机的故障了。和Windows一样,当这种情况出现时你除 了关掉电源开关外别无他法。内核处于你的Linux系统的心脏部位,内核崩溃通常是由于硬件动作异常而导致内核强制进入系统内存的未知区域。

最好的解决办法是升级内核,因为硬件的问题可能已经在新版本中得到修正。但是你可能需要从启动菜单退回到一个早期版本的内核以便能够使用Linux,然后进行升级。

另外一种选择是确定出问题的硬件。如何你刚刚更改过你的硬件或者安装了新的驱动器,这可能就是问题所在。否则,你可能不得不采取逐个移除硬件的方法 来测试你的电脑是否能够正常启动。尽管内核崩溃会给出大量信息,普通用户通常只能理解其中的极少数,因为原来的错误已将系统推向一种无法预知的状态。

ERROR Incorrect username or password(用户名或密码错误)

你会吃惊于竟有如此多的用户给我们打来电话说他们忘记了自己的密码,或者更糟,用户信誓旦旦的宣称他们从来没有被要求输入密码。幸运的是,密码并非 永远丢失了。你需要启动你的电脑到单用户模式或者修复模式。为达此目的,只需启动后在电脑离开BIOS界面时按下Escape键,就会显示Grub启动菜 单。

如果没有进入单用户模式或者修复模式的选项,那就选择通常启动的那一项(通常位于菜单的顶部),按E键编辑启动参数。移动到以kernel字样开头 的那一行,然后再次按E键编辑那一行的文本。确定指针处于行尾,增加以下参数rw init=/bin/bash。按回车,然后按B键启动。我们刚刚改变了默认的启动选项来打开一个Bash终端而非通常启动的会话。

至于安全和修复模式,你要做的就是键入你要改变密码的用户名和新密码。如果没有用户名,passwd命令将会改变root的密码。现在重启你的电脑就可以使用你的新密码了。

If you've got physical access to a machine, you can easily change any user passwords by booting into recovery mode.

如果你能够跟一台电脑有物理接触,那么就能通过启动后进入修复模式的方法轻松改变任何用户的密码。(译者注:据本人的经验,如果root用户原来就 设有密码,那么在进入recover mode的时候,会首先要求你输入root密码,故上述方法只适用于root原来没有密码的情况。 而通过开机更改grub启动参数的方法则不受此限制,连root密码也可以改掉)

文件系统

文件系统是你安装的Linux内核的一部分,他负责对包括外部设备上的文件的读写。此部分通常是很健壮的,但突然断电或行为异常的硬件有时也会引起一些问题。关于你的文件系统的任何问题通常解决起来都比较复杂。所以,我们列出的解决方案都是用命令行。

ERROR Run fsck manually(手动运行fsck)

基本的文件系统错误就有数十个不同的种类。这些错误通常在启动电脑时出现,并经常导致出现对根分区的“只读”警告。这意味着如果你的电脑能够启动, 你将不能做任何事。解决方法是从Live CD启动,这保证了你损坏的驱动器不被启动程序触及以使文件系统修复工具能够进行必要的修改来修复问题。

你需要运行的命令是fsck -f /dev/drive,但是你需要用你自己的根分区的设备替换掉以上命令中的“drive”。这取决于你的安装。例如,主驱动器上的第一个分区是 sda1。初始的错误提示中应该会包含此信息。你需要以管理员身份运行fsck,这意味着Ubuntu用户需要用Ubuntu Live CD创建一个用户,只需先后键入以下两条命令sudo passwd root,sudo bash。

ERROR Device is busy(设备忙)

我们许多人使用外接硬盘和U盘,但有时这些设备拒绝从文件系统卸载自己。你不能只简单地将其拔下,因为这样你可能会丢失本地缓存中尚未写入该设备的数据。你可以通过在命令行键入sync解决此问题,这将迫使任何缓存的数据立刻写入该设备,但这仍不能解决无法载载的问题。

要解决无法载载的问题,你需要用到一个叫做lsof的命令,该命令需要单独安装。键入“lsof 挂载点”能够列出当前正在访问设备上文件的进程,你需要杀死这些进程之后才能卸下该驱动器。

知道这个技巧将会使无法卸载CD或者DVD的情况变得很容易处理,因为所用到的技术是一样的(只是不涉及sync的问题,因为他们是只读设备)。这里有一个例子:

> umount /mnt/content
umount: /mnt/content: device is busy
> lsof /mnt/content
COMMAND  PID USER  FD  TYPE DEVICE SIZE NODE NAME
smbd  23222 root cwd  DIR  8,33 4096  2 /mnt/content
> kill -9 23222
> umount /mnt/content

Networking(网络)

极少有人乐于检测并修复网络问题。但在我们的有线世界,这些问题是无法避免的。幸运的是,有少数几个错误占据了这些问题的很大一部分比例,我们已经替你把他们解决了。

ERROR Server not found(找不到服务器)

这是经典的网络错误。你打开了电脑,等系统启动,点开了指向你最喜欢的网页的链接。然而他并没有打开,而且出现了“服务器错误”的信息。这个问题是 无法接入互联网,有许多可能的原因。解决此问题的最好办法从主要连接开始查起。你的路由器连接电源了吗?你的宽带连接在你的路由器上工作吗?

如果你在使用无线网,显然你需要检查一下你装有Linux的机器上的无线连接。如果你在用有线的以太网,你需要检查一下看电缆周围的两个LED指示灯是不是都亮了。橘黄色LED灯亮表示有连接,而绿色的LED指示灯随着网络动作而闪烁。

如果这些都没有问题,那说明问题出在你的Linux系统中。如果你已经检查过你的发行版的网络设置面板,并且看上去一切正常,你就需要尝试一系统命 令行工具了。ifconfig命令产生许多输出,但这是确保你的网络连接已被分配IP的最快捷的方法。如果是有线连接就查找eth0,如果是无线连接就查 找ath0或者wlan0,确保你的网路有正确的网络地址。

如果上述方法不起作用,那么试试先后输入以下命令:ifconfig eth0 down,然后是ifconfig eth0 up。也许你还想试试route命令以确定只有一个确定的网关地址。如果你找到两个,键入”route del 网关地址”以删除一个。

This kind of error message can be caused by a virtually limitless number of problems.

此类出错提示信息上可能是由数不清的问题导致。

ERROR MSN won’t connect(MSN无法连接)

这跟你用的messenger客户端没有关系——Pidgin, Kopete, KMess 和 AMSN 有时都会连不上服务器。此类问题通常可归结为服务器协议的改变,这意味着每个客户端都需要升级。但也可能是由你的本地连接引起的。MSN对防火墙和端口转 发非常敏感。解决办法是使用HTTP,通常这是你账户窗口中的一个选项。鉴于HTTP是网络传输的通用协议,你不应该再在连接方面有什么困难。

If the connection options for MSN aren't working, switch to HTTP in the account settings page.

如果MSN的连接选项不起作用,那么就在用户设置页面转换成HTTP。

Software(软件)

这是我们使用Linux时都感到沮丧的一个方面。OS X和Windows用户经常会惊奇的发现Linux用户甚至无法从因特网上下载一个软件包,之后双击该包并毫无阻碍的完成应用程序的安装。他们能只需下载 一个文件并运行之便能轻松获得最新版的如Gimp, Inkscape a和OpenOffice.org这样的应用程序。Linux用户可没有这样的好运,且此问题又因多数发行版使用不同的软件安装方法而进一步恶化。

ERROR Permission denied(权限不足)

这个错误是由系统安全设置引起的,当从命令行执行程序或编辑某些文件时常会出现。Linux锁定了某些文件和目录,这样即使帐户被盗,该用户也无法 运行系统的关键程序。这样的机制在Linux服务器或者那种有着数百用户的Linux框架中显得更加有用。尽管他在单用户系统中也很重要,但即使你避开这 些预防措施以给自己足够的权限进行或打开某些关键文件,这也没什么错。

你可以在桌面或命令行来达到此目的,但你需要使用系统管理员账户以便能够改变所需要权限。在命令行,可以输入sudo bash命令来进入管理员账户,如果是非Debian用户,则只需输入su 即可。你可以用”chown 用户名 文件名”来改变文件的所有权,加上 -R 参数将会递归改变该文件夹下所有文件的所有权。但这帮不了你电脑上其他用户的忙,因为他们仍将面对权限问题。

正确答案是改变文件的可执行权限。可以用chmod命令来改变权限。键入 “chmod +x 文件名” 以便给你电脑上的每个用户增加对该文件的可执行权限。类似的,”chmod +rw 文件名”将会授予所有用户对该文件的读写权限。

ERROR Downloads won’t run!(不能下载)

数个月前,我们在我们发行的DVD里包含了Runes of Avalon 2(译者注:阿瓦隆神符2,一款益智类消除游戏)试用版。他被封装在一个tar.gz文件中。我们中的大多数人甚至不会注意到这个游戏,因为我们已经被 Linux的古怪弄得麻木了。但我们还是接到了几个新Linux用户(这些正是我们需要努力争取的人)的电话,询问为什么那个tar.gz文件无法运行。 当然,答案是.tar.gz文件是一个归档文件。我们解释说它就像是一个zip文件,需要解压到一个文件夹才能运行那个试用版游戏。

你可以在桌面上右击该文件选择解压,或者在命令行键入“tar xvf 文件名.tar.gz”,但新手根本没必要知道命令行的方法。然后你需要找到一个.bin或者.sh文件,双击该文件以运行此游戏。如果你运气不好,你可 能需要在命令行进入刚才创建的文件夹并键入./install.sh进行安装。我们代表世界各地的Linux拥护者对此不便之处表示歉意。

Unless you're used to Linux, running demos and downloads isn't as straightforward as on other operating systems.

除非你以Linux比较熟悉,否则运行试用版软件和下载不会像在其他操作系统中那样顺畅。

ERROR Flash movies don’t move(Flash影片无法播放)

真同情那些刚接触Linux的用户,他们启动了新安装的系统,却发现自己无法在YouTube度过当天的时间。是的,极少有Linux发行版默认支 持Flash回放功能的。更糟糕的是,你的浏览器不可的乐观的宣称只需点几下鼠标就可以完成Flash的安装,而这通常都是在说谎。然而,这里有一个很保 险的方法来获得Flash回放支持。

在Google搜索“adobe flash download”,点击第一个靠前的链接。在新页面中“version to download”的下拉菜单中,选择“tar.gz for linux”并点击用户协议。该文件会被保存,你需要记住浏览器把文件存在什么地方了。接着,打开一个命令行终端,键入cd+空格+你下载的文件的路径 (通常是你主文件夹中的~/Desktop)。

进入那个文件夹之后,键入 tar xvf install_flash* 解压缩下载的文件,cd 进入此新文件夹。现在你需要键入./flashplayer-installer来执行安装程序,并注意屏幕上的提示符(译者注:即闪动的光标)。稍后浏 览器会重启,你已得到了一个工作正常的Adobe Flash。

Even if Adobe Flash support isn't part of your distribution, a working installation is only two minutes away.

即使你的发行版不包含Adobe Flash支持,安装一个支持程序也就是两分钟的事。

文章来源: Yeeyan