深入浅出讲述提升 WordPress 性能的九大秘笈

Summary: 在建站和 web 应用程序交付方面，WordPress 是全球最大的一个平台。全球大约四分之一 的站点现在正在使用开源 WordPress 软件，包括 eBay、 Mozilla、 RackSpace、 TechCrunch、 CNN、 MTV、纽约时报、华尔街日报 等等。 最流行的个人博客平台 WordPress.com，其也运行在 WordPress 开源软件上。而 NGINX 则为 WordPress.com 提供了动力。在 WordPress.com 的用户当中，许多站点起步于 WordPress.com，然后换成了自己运行 WordPress 开源软件；它们中越来越多的站点也使用了 NGINX 软件。 WordPress 的吸引力源于其简单性，无论是对于最终

国人开发的有一个插件叫super static cache，是完全把页面缓存成静态网页的，性能也不错，推荐一下

在建站和 web 应用程序交付方面，WordPress 是全球最大的一个平台。全球大约[四分之一](http://w3techs.com/technologies/overview/content_management/all) 的站点现在正在使用开源 WordPress 软件，包括 eBay、 Mozilla、 RackSpace、 TechCrunch、 CNN、 MTV、纽约时报、华尔街日报 等等。

最流行的个人博客平台 WordPress.com，其也运行在 WordPress 开源软件上。[而 NGINX 则为 WordPress.com 提供了动力](https://www.nginx.com/press/choosing-nginx-growth-wordpresscom/)。在 WordPress.com 的用户当中，许多站点起步于 WordPress.com，然后换成了自己运行 WordPress 开源软件；它们中越来越多的站点也使用了 NGINX 软件。

WordPress 的吸引力源于其简单性，无论是对于最终用户还是安装架设。然而，当使用量不断增长时，WordPress 站点的体系结构也存在一定的问题 - 这里有几个方法，包括使用缓存，以及将 WordPress 和 NGINX 组合起来，可以解决这些问题。

在这篇博客中，我们提供了九个提速技巧来帮助你解决 WordPress 中一些常见的性能问题：

* 缓存静态资源
* 缓存动态文件
* 迁移到 NGINX
* 添加 NGINX 静态链接支持
* 为 NGINX 配置 FastCGI
* 为 NGINX 配置 W3*Total*Cache
* 为 NGINX 配置 WP-Super-Cache
* 为 NGINX 配置安全防范措施
* 配置 NGINX 支持 WordPress 多站点

![深入浅出讲述提升 WordPress 性能的九大秘笈](/data/attachment/album/201512/21/185659seueice60zn5n5c6.jpg)

### 在 LAMP 架构下 WordPress 的性能

大多数 WordPress 站点都运行在传统的 LAMP 架构下：Linux 操作系统，Apache Web 服务器软件，MySQL 数据库软件（通常是一个单独的数据库服务器）和 PHP 编程语言。这些都是非常著名的，广泛应用的开源工具。在 WordPress 世界里，很多人都用的是 LAMP，所以很容易寻求帮助和支持。

当用户访问 WordPress 站点时，浏览器为每个用户创建六到八个连接来连接到 Linux/Apache 上。当用户请求连接时，PHP 即时生成每个页面，从 MySQL 数据库获取资源来响应请求。

LAMP 或许对于数百个并发用户依然能照常工作。然而，流量突然增加是常见的，并且通常这应该算是一件好事。

但是，当 LAMP 站点变得繁忙时，当同时在线的用户达到数千个时，它的瓶颈就会被暴露出来。瓶颈存在主要是两个原因：

1. Apache Web 服务器 - Apache 的每个/每次连接需要消耗大量资源。如果 Apache 接受了太多的并发连接，内存可能会耗尽，从而导致性能急剧降低，因为数据必须交换到磁盘了。如果以限制连接数来提高响应时间，新的连接必须等待，这也导致了用户体验变得很差。
2. PHP/MySQL 的交互 - 一个运行 PHP 和 MySQL 数据库服务器的应用服务器上每秒的请求量有一个最大限制。当请求的数量超过这个最大限制时，用户必须等待。超过这个最大限制时也会增加所有用户的响应时间。超过其两倍以上时会出现明显的性能问题。

LAMP 架构的网站出现性能瓶颈是常见的情况，这时就需要升级硬件了 - 增加 CPU，扩大磁盘空间等等。当 Apache 和 PHP/MySQL 的架构超载后，在硬件上不断的提升却跟不上系统资源指数增长的需求。

首选替代 LAMP 架构的是 LEMP 架构 – Linux, NGINX, MySQL, 和 PHP。 (这是 LEMP 的缩写，E 代表着 “engine-x.” 的发音。) 我们在 技巧 3 中会描述 LEMP 架构。

### 技巧 1. 缓存静态资源

静态资源是指不变的文件，像 CSS，JavaScript 和图片。这些文件往往在网页的数据中占半数以上。页面的其余部分是动态生成的，像在论坛中评论，性能仪表盘，或个性化的内容（可以看看 Amazon.com 产品）。

缓存静态资源有两大好处：

* 更快的交付给用户 - 用户可以从它们浏览器的缓存或者从互联网上离它们最近的缓存服务器获取静态文件。有时候文件较大，因此减少等待时间对它们来说帮助很大。
* 减少应用服务器的负载 - 从缓存中检索到的每个文件会让 web 服务器少处理一个请求。你的缓存越多，用户等待的时间越短。

要让浏览器缓存文件，需要在静态文件中设置正确的 HTTP 首部。看看 HTTP Cache-Control 首部，特别是设置了 max-age 参数，Expires 首部，以及 Entity 标记。[这里](http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/) 有详细的介绍。

当启用本地缓存，然后用户请求以前访问过的文件时，浏览器首先检查该文件是否在缓存中。如果在，它会询问 Web 服务器该文件是否改变过。如果该文件没有改变，Web 服务器将立即响应一个304状态码（未改变），这意味着该文件没有改变，而不是返回状态码200 OK 并检索和发送已改变的文件。

要在浏览器之外支持缓存，可以考虑下面讲到的技巧，以及考虑使用内容分发网络（CDN）。CDN 是一种流行且强大的缓存工具，但我们在这里不详细描述它。在你实现了这里讲到的其它技术之后可以考虑 CDN。此外，当你的站点从 HTTP/1.x 过渡到 HTTP/2 协议时，CDN 的用处可能不太大；根据需要调查和测试，找到你网站需要的正确方法。

如果你转向 NGINX Plus 或将开源的 NGINX 软件作为架构的一部分，建议你考虑 技巧 3，然后配置 NGINX 缓存静态资源。使用下面的配置，用你 Web 服务器的 URL 替换 www.example.com。

```
server {
    ### 将 www.example.com 替换为你的 URL
    server_name www.example.com;
    root /var/www/example.com/htdocs;
    index index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        ### 使用你 WordPress 服务器的套接字，地址和端口来替换
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        #fastcgi_pass 127.0.0.1:9000;
    }

    location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        expires max;
        log_not_found off;
        access_log off;
    }
}

```

### 技巧 2. 缓存动态文件

WordPress 动态地生成网页，这意味着每次请求时它都要生成一个给定的网页（即使和前一次的结果相同）。这意味着用户随时获得的是最新内容。

想一下，当用户访问一个帖子时，并在文章底部有用户的评论时。你希望用户能够看到所有的评论 - 即使评论刚刚发布。动态内容就是处理这种情况的。

但现在，当帖子每秒出现十几二十几个请求时。应用服务器可能每秒需要频繁生成页面导致其压力过大，造成延误。为了给用户提供最新的内容，每个访问理论上都是新的请求，因此它们不得不在原始出处等待很长时间。

为了防止页面由于不断提升的负载而变得缓慢，需要缓存动态文件。这需要减少文件的动态内容来提高整个系统的响应速度。

要在 WordPress 中启用缓存中，需要使用一些流行的插件 - 如下所述。WordPress 的缓存插件会请求最新的页面，然后将其缓存短暂时间 - 也许只有几秒钟。因此，如果该网站每秒中会有几个请求，那大多数用户获得的页面都是缓存的副本。这也有助于提高所有用户的检索时间：

* 大多数用户获得页面的缓存副本。应用服务器没有做任何工作。
* 用户会得到一个之前的崭新副本。应用服务器只需每隔一段时间生成一个崭新页面。当服务器产生一个崭新页面（对于缓存过期后的第一个用户访问），它这样做要快得多，因为它的请求并没有超载。

你可以缓存运行在 LAMP 架构或者 LEMP 架构 上 WordPress 的动态文件（在 技巧 3 中说明了）。有几个缓存插件，你可以在 WordPress 中使用。运用到了最流行的缓存插件和缓存技术，从最简单到最强大的：

* [Hyper-Cache](https://wordpress.org/plugins/hyper-cache/) 和 [Quick-Cache](https://wordpress.org/plugins/quick-cache/) – 这两个插件为每个 WordPress 页面创建单个 PHP 文件。它支持绕过多个 WordPress 与数据库的连接核心处理的一些动态功能，创建一个更快的用户体验。它们不会绕过所有的 PHP 处理，所以并不会如下面那些取得同样的性能提升。它们也不需要修改 NGINX 的配置。
* [WP Super Cache](https://wordpress.org/plugins/wp-super-cache/) – 最流行的 WordPress 缓存插件。在它易用的界面易用上提供了许多功能，如下所示。我们在 技巧 7 中展示了一个简单的 NGINX 配置实例。
* [W3 Total Cache](https://wordpress.org/plugins/w3-total-cache/) – 这是第二流行的 WordPress 缓存插件。它比 WP Super Cache 的功能更强大，但它有些配置选项比较复杂。样例 NGINX 配置，请看 技巧 6。
* [FastCGI](http://www.fastcgi.com/) – CGI 的意思是<ruby> 通用网关接口 <rp>  （ </rp> <rt>  Common Gateway Interface </rt> <rp>  ） </rp></ruby>，在因特网上发送请求和接收文件的一种通用方式。它不是一个插件，而是一种与缓存交互缓存的方法。FastCGI 可以被用在 Apache 和 Nginx 上，它也是最流行的动态缓存方法；我们在 技巧 5 中描述了如何配置 NGINX 来使用它。

这些插件和技术的文档解释了如何在典型的 LAMP 架构中配置它们。配置方式包括数据库和对象缓存；最小化 HTML、CSS 和 JavaScript；集成流行的 CDN 集成环境。对于 NGINX 的配置，请看列表中的提示技巧。

**注意**：缓存不会用于已经登录的 WordPress 用户，因为他们的 WordPress 页面都是不同的。（对于大多数网站来说，只有一小部分用户可能会登录）此外，大多数缓存不会对刚刚评论过的用户显示缓存页面，因为当用户刷新页面时希望看到他们的评论。若要缓存页面的非个性化内容，如果它对整体性能来说很重要，可以使用一种称为 [碎片缓存（fragment caching）](https://css-tricks.com/wordpress-fragment-caching-revisited/) 的技术。

### 技巧 3. 使用 NGINX

如上所述，当并发用户数超过某一数量时 Apache 会导致性能问题 – 可能是数百个用户同时使用。Apache 对于每一个连接会消耗大量的资源，因而容易耗尽内存。Apache 可以配置连接数的值来避免耗尽内存，但是这意味着，超过限制时，新的连接请求必须等待。

此外，Apache 为每个连接加载一个 mod\_php 模块副本到内存中，即使只有服务于静态文件（图片，CSS，JavaScript 等）。这使得每个连接消耗更多的资源，从而限制了服务器的性能。

要解决这些问题，从 LAMP 架构迁到 LEMP 架构 – 使用 NGINX 取代 Apache 。NGINX 在一定的内存之下就能处理成千上万的并发连接数，所以你不必经历颠簸，也不必限制并发连接数到很小的数量。

NGINX 处理静态文件的性能也较好，它有内置的，容易调整的 [缓存](https://www.nginx.com/resources/admin-guide/content-caching/) 控制策略。减少应用服务器的负载，你的网站的访问速度会更快，用户体验更好。

你可以在部署环境的所有 Web 服务器上使用 NGINX，或者你可以把一个 NGINX 服务器作为 Apache 的“前端”来进行反向代理 - NGINX 服务器接收客户端请求，将请求的静态文件直接返回，将 PHP 请求转发到 Apache 上进行处理。

对于动态页面的生成，这是 WordPress 核心体验，可以选择一个缓存工具，如 技巧 2 中描述的。在下面的技巧中，你可以看到 FastCGI，W3\_Total\_Cache 和 WP-Super-Cache 在 NGINX 上的配置示例。 （Hyper-Cache 和 Quick-Cache 不需要改变 NGINX 的配置。）

**技巧** 缓存通常会被保存到磁盘上，但你可以用 [tmpfs](https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt) 将缓存放在内存中来提高性能。

为 WordPress 配置 NGINX 很容易。仅需四步，其详细的描述在指定的技巧中：

1. 添加永久链接的支持 - 让 NGINX 支持永久链接。此步消除了对 **.htaccess** 配置文件的依赖，这是 Apache 特有的。参见 技巧 4。
2. 配置缓存 - 选择一个缓存工具并安装好它。可选择的有 FastCGI cache，W3 Total Cache, WP Super Cache, Hyper Cache, 和 Quick Cache。请看技巧 5、 6 和 7。
3. 落实安全防范措施 - 在 NGINX 上采用对 WordPress 最佳安全的做法。参见 技巧 8。
4. 配置 WordPress 多站点 - 如果你使用 WordPress 多站点，在 NGINX 下配置子目录，子域，或多域名架构。见 技巧9。

### 技巧 4. 让 NGINX 支持永久链接

许多 WordPress 网站依赖于 **.htaccess** 文件，此文件为 WordPress 的多个功能所需要，包括永久链接支持、插件和文件缓存。NGINX 不支持 **.htaccess** 文件。幸运的是，你可以使用 NGINX 的简单而全面的配置文件来实现大部分相同的功能。

你可以在你的主 [server](http://nginx.org/en/docs/http/ngx_http_core_module.html#server) 块下添加下面的 location 块中为使用 NGINX 的 WordPress 启用 [永久链接](http://codex.wordpress.org/Using_Permalinks)。（此 location 块在其它代码示例中也会被包括）。

**try\_files** 指令告诉 NGINX 检查请求的 URL 在文档根目录（**/var/www/example.com/htdocs**）下是作为文件(**$uri**)还是目录(**$uri/**) 存在的。如果都不是，NGINX 将重定向到 **/index.php**，并传递查询字符串参数作为参数。

```
server {
    server_name example.com www.example.com;
    root /var/www/example.com/htdocs;
    index index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

```

### 技巧 5. 在 NGINX 中配置 FastCGI

NGINX 可以缓存来自 FastCGI 应用程序的响应，如 PHP 响应。此方法可提供最佳的性能。

对于开源的 NGINX，编译入第三方模块 [ngx\_cache\_purge](https://github.com/FRiCKLE/ngx_cache_purge) 可以提供缓存清除能力，配置代码如下所示。NGINX Plus 已经包含了它自己实现此代码。

当使用 FastCGI 时，我们建议你安装 [NGINX 辅助插件](https://wordpress.org/plugins/nginx-helper/) 并使用下面的配置文件，尤其是要注意 **fastcgi\_cache\_key** 的使用和包括 **fastcgi\_cache\_purge** 的 location 块。当页面发布或有改变时，有新评论被发布时，该插件会自动清除你的缓存，你也可以从 WordPress 管理控制台手动清除。

NGINX 的辅助插件还可以在你网页的底部添加一个简短的 HTML 代码，以确认缓存是否正常并显示一些统计数据。（你也可以使用 [$upstream*cache*status](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#variables) 确认缓存功能是否正常。）

```
fastcgi_cache_path /var/run/nginx-cache levels=1:2
               keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
    server_name example.com www.example.com;
    root /var/www/example.com/htdocs;
    index index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    set $skip_cache 0;

    ### POST 请求和带有查询参数的网址应该交给 PHP
    if ($request_method = POST) {
        set $skip_cache 1;
    }

    if ($query_string != "") {
        set $skip_cache 1;
    }

    ### 以下 uris 中包含的部分不缓存
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php
                         |sitemap(_index)?.xml") {
        set $skip_cache 1;
    }

    ### 不要为登录用户或最近的评论者进行缓存
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass
        |wordpress_no_cache|wordpress_logged_in") {
        set $skip_cache 1;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid  60m;
    }

    location ~ /purge(/.*) {
        fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
    }

    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png
                      |ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {

        access_log off;
        log_not_found off;
        expires max;
    }

    location = /robots.txt {
        access_log off;
        log_not_found off;
    }

    location ~ /\. {
        deny  all;
        access_log off;
        log_not_found off;
    }
}

```

### 技巧 6. 为 NGINX 配置 W3\_Total\_Cache

[W3 Total Cache](https://wordpress.org/plugins/w3-total-cache/), 是 [W3-Edge](http://www.w3-edge.com/) 的 Frederick Townes 出品的， 是一个支持 NGINX 的 WordPress 缓存框架。其有众多选项配置，可以替代 FastCGI 缓存。

这个缓存插件提供了各种缓存配置，还包括数据库和对象的缓存，最小化 HTML、CSS 和 JavaScript，并可选与流行的 CDN 整合。

这个插件会通过写入一个位于你的域的根目录的 NGINX 配置文件来控制 NGINX。

```
server {
    server_name example.com www.example.com;

    root /var/www/example.com/htdocs;
    index index.php;
    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    include /path/to/wordpress/installation/nginx.conf;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

```

### 技巧 7. 为 NGINX 配置 WP Super Cache

[WP Super Cache](https://wordpress.org/plugins/wp-super-cache/) 是由 Donncha O Caoimh 开发的, 他是 [Automattic](http://automattic.com/) 的一个 WordPress 开发者, 这是一个 WordPress 缓存引擎，它可以将 WordPress 的动态页面转变成静态 HTML 文件，以使 NGINX 可以很快的提供服务。它是第一个 WordPress 缓存插件，和其它的相比，它更专注于某一特定的领域。

配置 NGINX 使用 WP Super Cache 可以根据你的喜好而进行不同的配置。以下是一个示例配置。

在下面的配置中，带有名为 supercache 的 location 块是 WP Super Cache 特有的部分。 WordPress 规则的其余代码用于不缓存已登录用户的信息，不缓存 POST 请求，并对静态资源设置过期首部，再加上标准的 PHP 处理；这部分可以根据你的需求进行定制。

```
server {
    server_name example.com www.example.com;
    root /var/www/example.com/htdocs;
    index index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log debug;

    set $cache_uri $request_uri;

    ### POST 请求和带有查询字符串的网址应该交给 PHP
    if ($request_method = POST) {
        set $cache_uri 'null cache';
    }
    if ($query_string != "") {
        set $cache_uri 'null cache';
    }

    ### 以下 uris 中包含的部分不缓存
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php
                          |wp-.*.php|/feed/|index.php|wp-comments-popup.php
                          |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml
                          |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {

        set $cache_uri 'null cache';
    }

    ### 不对已登录用户和最近的评论者使用缓存
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+
                         |wp-postpass|wordpress_logged_in") {
        set $cache_uri 'null cache';
    }

    ### 当请求的文件存在时使用缓存，否则将请求转发给 WordPress
    location / {
        try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html
                  $uri $uri/ /index.php;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        log_not_found off
        access_log off;
    }

    location ~ .php$ {
        try_files $uri /index.php;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        #fastcgi_pass 127.0.0.1:9000;
    }

    ### 尽可能的缓存静态文件
    location ~*.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css
           |rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2
           |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        expires max;
        log_not_found off;
        access_log off;
    }
}

```

### 技巧 8. 为 NGINX 配置安全防范措施

为了防止攻击，可以控制对关键资源的访问并限制机器人对登录功能的过量攻击。

只允许特定的 IP 地址访问 WordPress 的仪表盘。

```
### 对访问 WordPress 的仪表盘进行限制
location /wp-admin {
    deny  192.192.9.9;
    allow 192.192.1.0/24;
    allow 10.1.1.0/16;
    deny  all;
}

```

只允许上传特定类型的文件，以防止恶意代码被上传和运行。

```
### 当上传的不是图像，视频，音乐等时，拒绝访问。
location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php|js|swf)$ {
    deny all;
}

```

拒绝其它人访问 WordPress 的配置文件 **wp-config.php**。拒绝其它人访问的另一种方法是将该文件的一个目录移到域的根目录之上的目录。

```
### 拒绝其它人访问 wp-config.php
location ~* wp-config.php {
    deny all;
}

```

对 **wp-login.php** 进行限速来防止暴力破解。

```
### 拒绝访问 wp-login.php
location = /wp-login.php {
    limit_req zone=one burst=1 nodelay;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    #fastcgi_pass 127.0.0.1:9000;
}

```

### 技巧 9. 配置 NGINX 支持 WordPress 多站点

<ruby> WordPress 多站点 <rp>  （ </rp> <rt>  WordPress Multisite </rt> <rp>  ） </rp></ruby>，顾名思义，这个版本 WordPress 可以让你以单个实例管理两个或多个网站。[WordPress.com](https://wordpress.com/) 运行的就是 WordPress 多站点，其主机为成千上万的用户提供博客服务。

你可以从单个域的任何子目录或从不同的子域来运行独立的网站。

使用此代码块添加对子目录的支持。

```
### 在 WordPress 多站点中添加对子目录结构的支持
if (!-e $request_filename) {
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    rewrite ^(/[^/]+)?(/wp-.*) $2 last;
    rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}

```

使用此代码块来替换上面的代码块以添加对子目录结构的支持，替换为你自己的子目录名。

```
### 添加支持子域名
server_name example.com *.example.com;

```

旧版本（3.4以前）的 WordPress 多站点使用 readfile() 来提供静态内容。然而，readfile() 是 PHP 代码，它会导致在执行时性能会显著降低。我们可以用 NGINX 来绕过这个非必要的 PHP 处理。该代码片段在下面被（==============）线分割出来了。

```
### 避免对子目录中 /blogs.dir/ 结构执行  PHP readfile()
location ^~ /blogs.dir {
    internal;
    alias /var/www/example.com/htdocs/wp-content/blogs.dir;
    access_log off;
    log_not_found off;
    expires max;
}

============================================================

### 避免对子目录中 /files/ 结构执行  PHP readfile()
    location ~ ^(/[^/]+/)?files/(?.+) {
    try_files /wp-content/blogs.dir/$blogid/files/$rt_file /wp-includes/ms-files.php?file=$rt_file;
    access_log off;
    log_not_found off;
    expires max;
}

============================================================

### 子域路径的WPMU 文件结构
location ~ ^/files/(.*)$ {
    try_files /wp-includes/ms-files.php?file=$1 =404;
    access_log off;
    log_not_found off;
    expires max;
}

============================================================

### 映射博客 ID 到特定的目录
map $http_host $blogid {
    default           0;
    example.com       1;
    site1.example.com 2;
    site1.com         2;
}

```

### 结论

可扩展性对许多要让他们的 WordPress 站点取得成功的开发者来说是一项挑战。（对于那些想要跨越 WordPress 性能门槛的新站点而言。）为 WordPress 添加缓存，并将 WordPress 和 NGINX 结合，是不错的答案。

NGINX 不仅用于 WordPress 网站。世界上排名前 1000、10000 和 100000 网站中 NGINX 也是 [遥遥领先的 web 服务器](http://w3techs.com/technologies/cross/web_server/ranking)。

欲了解更多有关 NGINX 的性能，请看我们最近的博客，[让应用性能提升 10 倍的 10 个技巧](https://www.nginx.com/blog/10-tips-for-10x-application-performance/)。

NGINX 软件有两个版本：

* NGINX 开源软件 - 像 WordPress 一样，此软件你可以自行下载，配置和编译。
* NGINX Plus - NGINX Plus 包括一个预构建的参考版本的软件，以及服务和技术支持。

想要开始，先到 [nginx.org](http://www.nginx.org/en) 下载开源软件并了解下 [NGINX Plus](https://www.nginx.com/products/)。

---

via: <https://www.nginx.com/blog/9-tips-for-improving-wordpress-performance-with-nginx/>

作者：[Floyd Smith](https://www.nginx.com/blog/author/floyd/) 译者：[strugglingyouth](https://github.com/strugglingyouth) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


CentOS 7 ARM 版正式发布：支持树莓派2/香蕉派/CubieTruck

Summary: 来自 CentOS 团队的Karanbir Singh 宣布，基于 ARM 硬件架构的 CentOS 7 Linux 系统已经发布！  当前，除了 Twitter 上一则消息外，CentOS 开发者们并没有在他们的网站上对这个 ARM 版本有更多说明。  根据目前给出的下载链接看，该 CentOS 7 ARM 版可以工作在各种 ARMv7 设备上，预构建的二进制镜像包括了流行的 树莓派2（Raspberry Pi 2）、香蕉派（Banana Pi）和 CubieTruck （这是一个国内团队的产品，闻名于国际）。 下载链接：http://mirror.centos.org/altarch/7/isos/armhfp/

CubieTrunck国内宣传太少了，而且也没有中文教程。

不错啊，可以用“派”搭微型服务器了。

默认密码是多少

nice

来自 CentOS 团队的 Karanbir Singh 宣布，基于 ARM 硬件架构的 CentOS 7 Linux 系统已经发布！

![运行在树莓派上的 CentOS 7](/data/attachment/album/201512/21/224514kkkwxwpwaz22jqug.jpg)

当前，除了 Twitter 上一则消息外，CentOS 开发者们并没有在他们的网站上对这个 ARM 版本有更多说明。

![](/data/attachment/album/201512/21/224501p6w6w66jwb67hz4l.jpg)

根据目前给出的[下载链接](http://mirror.centos.org/altarch/7/isos/armhfp/)看，该 CentOS 7 ARM 版可以工作在各种 ARMv7 设备上，预构建的二进制镜像包括了流行的 <ruby> 树莓派2 <rp>  （ </rp> <rt>  Raspberry Pi 2 </rt> <rp>  ） </rp></ruby>、<ruby> 香蕉派 <rp>  （ </rp> <rt>  Banana Pi </rt> <rp>  ） </rp></ruby>和 CubieTruck （这是一个国内团队的产品，闻名于国际）。

下载链接： <http://mirror.centos.org/altarch/7/isos/armhfp/>


目标未达成：Ubuntu 未达成 4 年 2 亿用户目标

Summary: 4年前在UDS 布达佩斯，Shuttleworth 表示 Ubuntu 将在 4 年内达到 2 亿用户。 时间已经接近了2015年底，看起来 Ubuntu 并不像是能达成这个目标的样子。Ubuntu 的母公司Canonical 并没有提供确切的用户数，但是之前的迹象表明，Ubuntu 装机数量（包括桌面和服务器）也就是千万级，我没有看到任何报告说达到了1亿，更别说是2亿. 在游戏玩家中，根据 Valve 的 Steam 调查数据显示，Linux 的市场份额大约是 1%。据 StatCounter 的数据，当前的笔记本/桌面市场上，Linux 桌面大约占比 1.5%。Ubuntu 在云市场和物联网方面也有一定的占比。很难统

我这也应该是ubuntu的用户之一哇 O(∩_∩)O哈哈~

一直觉得Canonical折腾ubuntu手机平板完全是浪费资源

除了桌面UB，最大起色的是UB SERVER吧，毕竟是从无到有了。

其它的应用，只闻其声，未见其面。

UB手机，我认为想都不要想，最基本的IM都没有完善～

不会要倒闭吧，希望坚持住。

但不得不承认UB在Linux中的份额相当大，许多老牌Linux厂商都倒闭或被收购呀，而UB却想着产生新事物，从桌面到服务器，到手机以及其它

linux不是不好用，也不是不先进，但没有良好的生态环境。这一些向乔布斯的macos学习。

希望UBUNTU 等linux桌面系统崛起

ubuntu各种内部错误，其他发行版都没碰到过

说好的手机呢。。。

4年前在 [UDS 布达佩斯](http://www.phoronix.com/vr.php?view=16002)，[Shuttleworth 表示 Ubuntu 将在 4 年内达到 2 亿用户](http://www.phoronix.com/scan.php?page=news_item&px=2015-200-Million-Goal-Retro)。

时间已经接近了2015年底，看起来 Ubuntu 并不像是能达成这个目标的样子。Ubuntu 的母公司 Canonical 并没有提供确切的用户数，但是之前的迹象表明，Ubuntu 装机数量（包括桌面和服务器）也就是千万级，我没有看到任何报告说达到了1亿，更别说是2亿.

在游戏玩家中，根据 Valve 的 Steam 调查数据显示， [Linux 的市场份额大约是 1%](https://www.phoronix.com/scan.php?page=news_item&px=Steam-Survey-Nov-2015) 。据 StatCounter 的数据，当前的笔记本/桌面市场上，Linux 桌面大约占比 1.5%。Ubuntu 在云市场和物联网方面也有一定的占比。很难统计 Ubuntu Phone 的用户量，但是肯定不会超过 100 万，在9月份时，[估计只有 25000 个独立用户](https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Phone-Estimate-25k)。

![](/data/attachment/album/201512/21/233223aykuk6za2yujkbnk.jpeg)

在 Mark 宣布 2 亿的目标时，他可能是估计了 Ubuntu 在手机和平板上的市场，以及短命的 [Ubuntu 电视](https://www.phoronix.com/scan.php?page=search&q=Ubuntu%20TV)，甚至他可能还想到了 [Ubuntu 在车载上的应用](https://www.phoronix.com/scan.php?page=news_item&px=MTgzOTU)。不过，这些都没有实现。


2015：微软开源年

Summary: 在开源和 Linux 方面，2015年的微软有许多惊人的举动！让我们来盘点一下这一年来微软都做了些什么。  微软在其 Edge 浏览器中支持了 VP9 解码器，这是 Google 推出的免费视频解码器 在浏览器前端，微软宣布他们将开源其名为 Chakra 的 JavaScript 引擎 微软会通过 PowerShell 支持 OpenSSH。为了在 Windows 上更好地支持 OpenSSH，微软还捐赠了 OpenBSD 微软开源了其 .NET 的主要部分，将 .NET 带到了 Linux 和 BSD上 MS Build Engine也开源了 微软发布了其第一个 Linux 发行版Azure Cloud Switch，它运行在他们的 SDN 数据中心内 作为其

GO

来自湖北鄂州的 Internet Explorer 11.0|Windows 8.1 用户

软件开源免费，服务收费！看来这是趋势呀

Visual Studio Code 算是集成开发环境？没试过。可以编译项目么？

编辑器而已，类似于Atom，SublimeText

![](/data/attachment/album/201512/22/185643c5k5zff5ibkcqdru.jpg)

在开源和 Linux 方面，2015年的微软有许多惊人的举动！让我们来盘点一下这一年来微软都做了些什么。

* 微软在其 Edge 浏览器中[支持了 VP9 解码器](http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-VP9-Edge-Win)，这是 Google 推出的免费视频解码器
* 在浏览器前端，微软宣布他们[将开源其名为 Chakra 的 JavaScript 引擎](/article-6698-1.html)
* 微软会通过 PowerShell [支持 OpenSSH](/article-6432-1.html)。为了在 Windows 上更好地支持 OpenSSH，微软还[捐赠了 OpenBSD](/article-5786-1.html)
* 微软[开源了其 .NET 的主要部分](/article-4821-1.html)，将 .NET 带到了 Linux 和 [BSD](/article-5416-1.html) 上
* [MS Build Engine](/article-5091-1.html) 也开源了
* 微软发布了其第一个 Linux 发行版 [Azure Cloud Switch](/article-6269-1.html)，它运行在他们的 SDN 数据中心内
* 作为其 Azure 战略的一部分，微软继续为 Linux [贡献 Hyper-V 代码](/article-5230-1.html)
* Visual Studio 2015 支持[构建 Linux 平台上的应用](http://www.phoronix.com/scan.php?page=news_item&px=Visual-Studio-2015-Launches)，虽然现在还不能在 Linux 系统上运行 VS2015
* 不过其集成开发环境 Visual Studio Code [支持运行在 Linux 上](/article-5376-1.html) ，而且[开源](/article-6604-1.html)了
* 微软在 Clang 编译器上[做了很多工作](http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-Clang-Continues)，他们[对 Clang 做了改进](http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-Visual-Clang-Windows)、[开源了其调试引擎](http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-Open-GDB-LLDB)
* 和 Clang 方面的工作相关，微软开始开发一个称之为 LLILC 的[基于 LLVM 的 .NET 编译器](http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-LLVM-dotNET-LLILC)，这个[新的编译器的进展很快](http://www.phoronix.com/scan.php?page=news_item&px=LLILC-6-Month-Update)
* 开发了 Android 上的 Office 软件，为手机/平板提供了微软 Office 套件的基本功能
* 以上这些都[放在了 GitHub 上](http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-CodePlex-To-GitHub)，而不是他们自己的 CodePlex 上
* 此外，微软开放技术公司被合并回了微软公司

这一年对于微软来说是不寻常的一年，不管你喜欢不喜欢微软，都让我们对这个 Windows 的缔造者在开源和 Linux 方面 2016 年的表现拭目以待吧！


451：对不起，从法律上说，它不存在

Summary: 上周五，IESG（互联网工程指导委员会（Internet Engineering Steering Group））批准了一个新的互联网标准，为 HTTP 增加了一个新状态码：451Unavailable For Legal Reasons。还需要一点点工作就会发布为正式的 RFC ，不过现在已经可以用了。  缘起 几年前，英国政府要求 ISP 们对海盗湾的内容进行封挡，Terence Eden就这个事情写了一个帖子，建议应该有一个不同的状态码来区分禁止访问的原因。这样的话，ISP 们就可以向他们的用户说明为什么这些资源不能访问。有人提议使用数字 451 作为状态码，也有各种其它的建议。 谷歌的Tim Bray受此

以后从中国大陆访问Google是不是就显示451了？

木用，你無法區分到底是由於技術原因還是法律原因導致的～

大陆访问不了 google，只会给你一个“连接超时”的错误。

话说能给个网站让我们见识下 451 的效果不？

对不起，从法律上说，它不存在

不规范 :D

404也会有

来自云南昆明的 Internet Explorer 11.0|Windows 10 用户

好机智的回答

451<br />
对不起，该回复从法律上说，它不存在。

451<br />
对不起，该回复从法律上说，它不存在。

不是超时，是404

是 502 bad gateway

连接超时太可恶了， 这要网页里有这种连接， 就会一直等。 还不如直接不能访问来的痛快。

上周五，IESG（<ruby>   互联网工程指导委员会  <rp>  （ </rp> <rt>  Internet Engineering Steering Group </rt> <rp>  ） </rp></ruby>）批准了一个新的互联网标准，为 HTTP 增加了一个新状态码：**[451 Unavailable For Legal Reasons](https://datatracker.ietf.org/doc/draft-ietf-httpbis-legally-restricted-status/)**。还需要一点点工作就会发布为正式的 RFC ，不过现在已经可以用了。

![](/data/attachment/album/201512/22/221756pgydk85ymz673363.jpg)

### 缘起

几年前，英国政府要求 ISP 们对海盗湾的内容进行封挡，[Terence Eden](http://shkspr.mobi/blog/2012/06/there-is-no-http-code-for-censorship-but-perhaps-there-should-be/) 就这个事情写了一个[帖子](http://shkspr.mobi/blog/2012/06/there-is-no-http-code-for-censorship-but-perhaps-there-should-be/)，建议应该有一个不同的状态码来区分禁止访问的原因。这样的话，ISP 们就可以向他们的用户说明为什么这些资源不能访问。有人[提议](http://yro.slashdot.org/comments.pl?sid=2906113&cid=40270621)使用数字 451 作为状态码，也有各种其它的建议。

谷歌的 [Tim Bray](https://www.tbray.org/ongoing/) 受此启发，于[前几年](https://www.tbray.org/ongoing/When/201x/2012/06/20/Latin-Scholar-451)给 <ruby> HTTP 工作组 <rt>  HTTP Working Group </rt></ruby>提交了一份提案，他（及很多人）认为应该将由于技术原因的不可见与非技术原因的不可见区分开来：

* 403 状态码，用于描述由于技术原因禁止访问
* 451 状态码，则用于描述由于国家法律所要求而禁止访问

据说，451 这个数字来源于 [Ray Bradbury](https://en.wikipedia.org/wiki/Fahrenheit_451) 的一篇小说《<ruby>   华氏 451  <rp>  （ </rp> <rt>  Fahrenheit 451 </rt> <rp>  ） </rp></ruby>》。

![](/data/attachment/album/201512/22/210244lnizo3g8ws00o8od.png)

### 发展

最初，对于这份提案，IETF HTTP 工作组的主席 Mark Nottingham 是拒绝的。因为 HTTP 状态码是有限的，虽然说从 400 到 499 有足足一百个位置，但是谁也不知道将来会有什么需求。而当时也没有任何需要让程序/机器来区分禁止访问的这两种情形，所以不应该浪费代码——最多，在 HTTP 首部或页面上呈现具体原因就可以了。

而 Tim 依旧坚持他的提案，并偶尔更新一下提案内容，和关心这件事的人谈论。

有一些站点开始实验性的使用这个状态码，不过这并不足以让 IESG 同意增加新的状态码。但是，随着网络上的审查的越来越多，比如欧盟政府要求 ISP 禁止对盗版内容的访问，而韩国、俄罗斯和其它一些国家会限制某些内容的访问等等，IESG 意识到网站需要能够区分这其中的不同。

此外，还有一些人希望能够自动找到和分类哪些内容是被审查的。这就需要一种机器可读的机制来区分 403 和 451 所代表的不同意义。

### 451 能做什么和不能做什么

虽然 451 状态码的原意是用于标示出哪些内容是被法律禁止访问的，比如可以用在网络设备上（比如防火墙）或 Web 服务器上。就目前已知的， [Github](https://en.wikipedia.org/wiki/Censorship_of_GitHub)、 [Twitter](https://en.wikipedia.org/wiki/Censorship_of_Twitter)、 [Facebook](https://en.wikipedia.org/wiki/Censorship_of_Facebook) 和 [Google](https://en.wikipedia.org/wiki/Censorship_by_Google) 都已经开始使用这个状态码来应对各个国家地区的审查要求了。

但是显然，451 状态码并不能标示出所有的被审查的内容，也许有些国家（比如[英国](https://en.wikipedia.org/wiki/Internet_Watch_Foundation)）的法律要求不允许使用这个状态码。

*本文内容编译自 [Mark Nottingham 的博客](https://www.mnot.net/blog/2015/12/18/451)、维基百科、Solidot 等来源。*


如何在 CentOS 上启用 软件集 Software Collections（SCL）

Summary: 红帽企业版 linux（RHEL）和它的社区版分支CentOS，提供10年的生命周期，这意味着 RHEL/CentOS 的每个版本会提供长达10年的安全更新。虽然这么长的生命周期为企业用户提供了迫切需要的系统兼容性和可靠性，但也存在一个缺点：随着底层的 RHEL/CentOS 版本接近生命周期的结束，核心应用和运行时环境变得陈旧过时。例如 CentOS 6.5，它的生命周期结束时间是2020年11月30日，其所携带的 Python 2.6.6和 MySQL 5.1.73，以今天的标准来看已经非常古老了。 另一方面，在 RHEL/CentOS 上试图手动升级开发工具链和运行时环境存在使系统崩溃的潜在

红帽企业版 linux（RHEL）和它的社区版分支——CentOS，提供10年的生命周期，这意味着 RHEL/CentOS 的每个版本会提供长达10年的安全更新。虽然这么长的生命周期为企业用户提供了迫切需要的系统兼容性和可靠性，但也存在一个缺点：随着底层的 RHEL/CentOS 版本接近生命周期的结束，核心应用和运行时环境变得陈旧过时。例如 CentOS 6.5，它的生命周期结束时间是2020年11月30日，其所携带的 Python 2.6.6和 MySQL 5.1.73，以今天的标准来看已经非常古老了。

另一方面，在 RHEL/CentOS 上试图手动升级开发工具链和运行时环境存在使系统崩溃的潜在可能，除非所有依赖都被正确解决。通常情况下，手动升级都是不推荐的，除非你知道你在干什么。

![SCL](/data/attachment/album/201512/22/233500uy6ajwunz1ydnbwz.png)

<ruby> <a href="https://www.softwarecollections.org/">  软件集 </a> <rp>  （ </rp> <rt>  Software Collections </rt> <rp>  ） </rp></ruby>（SCL）源出现了，以帮助解决 RHEL/CentOS 下的这种问题。SCL 的创建就是为了给 RHEL/CentOS 用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个（而且可能是更新的）版本的方式，同时避免把系统搞乱。与之相对的是第三方源，它们可能会在已安装的包之间引起冲突。

最新的 SCL 提供了：

* Python 3.3 和 2.7
* PHP 5.4
* Node.js 0.10
* Ruby 1.9.3
* Perl 5.16.3
* MariaDB 和 MySQL 5.5
* Apache httpd 2.4.6

在这篇教程的剩余部分，我会展示一下如何配置 SCL 源，以及如何安装和启用 SCL 中的包。

### 配置 SCL 源

SCL 可用于 CentOS 6.5 及更新的版本。要配置 SCL 源，只需执行：

```
$ sudo yum install centos-release-SCL

```

要启用和运行 SCL 中的应用，你还需要安装下列包：

```
$ sudo yum install scl-utils-build

```

执行下面的命令可以查看 SCL 中可用包的完整列表：

```
$ yum --disablerepo="*" --enablerepo="scl" list available

```

![](/data/attachment/album/201512/22/233523yz4vr4zbbj11uc97.jpg)

### 从 SCL 中安装和启用包

既然你已配置好了 SCL，你可以继续并从 SCL 中安装包了。

你可以搜索 SCL 中的包：

```
$ yum --disablerepo="*" --enablerepo="scl" search <keyword>

```

我们假设你要安装 Python 3.3。

继续，就像通常安装包那样使用 yum 安装：

```
$ sudo yum install python33

```

任何时候你都可以查看从 SCL 中安装的包的列表，只需执行：

```
$ scl --list

python33

```

SCL 的优点之一是安装其中的包不会覆盖任何系统文件，并且保证不会引起与系统中其它库和应用的冲突。

例如，如果在安装 python33 包后检查默认的 python 版本，你会发现默认的版本并没有改变：

```
$ python --version

Python 2.6.6

```

如果想使用一个已经安装的 SCL 包，你需要在每个命令中使用 `scl` 命令显式启用它（LCTT 译注：即想在哪条命令中使用 SCL 中的包，就得通过`scl`命令执行该命令）

```
$ scl enable <scl-package-name> <command>

```

例如，要针对`python`命令启用 python33 包：

```
$ scl enable python33 'python --version'

Python 3.3.2

```

如果想在启用 python33 包时执行多条命令，你可以像下面那样创建一个启用 SCL 的 bash 会话：

```
$ scl enable python33 bash

```

在这个 bash 会话中，默认的 python 会被切换为3.3版本，直到你输入`exit`，退出会话。

![](/data/attachment/album/201512/22/233523y7z7393tmfeytm4f.jpg)

简而言之，SCL 有几分像 Python 的虚拟环境，但更通用，因为你可以为远比 Python 更多的应用启用/禁用 SCL 会话。

更详细的 SCL 指南，参考官方的[快速入门指南](https://www.softwarecollections.org/docs/)

---

via: <http://xmodulo.com/enable-software-collections-centos.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[bianjp](https://github.com/bianjp) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux/Unix 桌面趣事：桌面上追逐的猫和老鼠

Summary: Oneko 是一个有趣的应用。它会把你的光标变成一只老鼠，并在后面创建一个可爱的小猫，并且始终追逐着老鼠光标。单词neko在日语中的意思是猫。它最初是一位日本人开发的 Macintosh 桌面附件。  安装 oneko 试下下面的命令： $ sudo apt-get install oneko  示例输出：  password for vivek: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: oneko 0 upgraded, 1 newly installed, 0 to remove and 10 not upgraded. Need to get 38.6 kB of arc

neko在日语中的意思是“猫”，不是老鼠。。。

挺好玩的。

不错，已经试用了

还有各种萌妹子，具体请看文档哈哈哈

是蛮好玩的～～～哈哈

脑洞好大，我喜欢。

怎么取消设置呢

Ctrl Z

哈哈！

我記得這個遊戲我以前在Windows 95 上玩過……

既然ctrl z 能取消，那么要他何用？

播放视频没有用flash，好评！

请问下 mac 下怎么安装呢

看网上的介绍，参数里面的Sakura和Tomoyo分别是指《魔卡少女樱》里面的小樱和知世。文中的翻译可能需要订正一下 (^^)/

这还真是非二次元不知道的~

Oneko 是一个有趣的应用。它会把你的光标变成一只老鼠，并在后面创建一个可爱的小猫，并且始终追逐着老鼠光标。单词“neko”在日语中的意思是猫。它最初是一位日本人开发的 Macintosh 桌面附件。

![Oneko](/data/attachment/album/201512/23/001250utojgu1j1swg1jzu.png)

### 安装 oneko

试下下面的命令：

```
$ sudo apt-get install oneko

```

示例输出：

```
[sudo] password for vivek:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  oneko
0 upgraded, 1 newly installed, 0 to remove and 10 not upgraded.
Need to get 38.6 kB of archives.
After this operation, 168 kB of additional disk space will be used.
Get:1 http://debian.osuosl.org/debian/ squeeze/main oneko amd64 1.2.sakura.6-7 [38.6 kB]
Fetched 38.6 kB in 1s (25.9 kB/s)
Selecting previously deselected package oneko.
(Reading database ... 274152 files and directories currently installed.)
Unpacking oneko (from .../oneko_1.2.sakura.6-7_amd64.deb) ...
Processing triggers for menu ...
Processing triggers for man-db ...
Setting up oneko (1.2.sakura.6-7) ...
Processing triggers for menu ...

```

FreeBSD 用户输入下面的命令安装 oneko：

```
# cd /usr/ports/games/oneko
# make install clean

```

### 我该如何使用 oneko？

输入下面的命令：

```
$ oneko

```

你可以把猫变成 “tora-neko”，一只像白老虎条纹的猫：

```
$ oneko -tora

```

### 不喜欢猫?

你可以用狗代替猫：

```
$ oneko -dog

```

下面可以用樱花代替猫：

```
$ oneko -sakura

```

用大道寺代替猫：

```
$ oneko -tomoyo

```

### 查看相关媒体

这个教程同样也有视频格式：

### 其他选项

你可以传入下面的选项

1. **-tofocus**：让猫在获得焦点的窗口顶部奔跑。当获得焦点的窗口不在视野中时，猫像平常那样追逐老鼠。
2. **-position 坐标** ：指定X和Y来调整猫相对老鼠的位置
3. **-rv**：将前景色和背景色对调
4. **-fg 颜色** : 前景色 (比如 oneko -dog -fg red)。
5. **-bg 颜色** : 背景色 (比如 oneko -dog -bg green)。
6. 查看 oneko 的手册获取更多信息。

---

via: <http://www.cyberciti.biz/open-source/oneko-app-creates-cute-cat-chasing-around-your-mouse/>

作者：Vivek Gite 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何在 Ubuntu 中安装最新的 Arduino IDE 1.6.6

Summary: 本篇教程会教你如何在当前的 Ubuntu 发行版中安装最新的 Arduino IDE 1.6.6。  开源的 Arduino IDE 发布了1.6.6，并带来了很多的改变。新的发布已经切换到 Java 8，它与 IDE 绑定并且用于编译所需。具体见 发布说明。  对于那些不想使用软件中心的 1.0.5 旧版本的人而言，你可以使用下面的步骤在所有的 Ubuntu 发行版中安装 Arduino。  请用正确版本号替换下文中软件包的版本号  1、 从下面的官方链接下载最新的包 Linux 32-bit 或者 Linux 64-bit。  https://www.arduino.cc/en/Main/Software  如果不知道你系统的类型？进入系统设置-详

![Install latest Arduino in Ubuntu](/data/attachment/album/201512/23/083703fk8c02ujz74rqq30.png)

>
> 本篇教程会教你如何在当前的 Ubuntu 发行版中安装最新的 Arduino IDE 1.6.6。
>
>
>

开源的 Arduino IDE 发布了1.6.6，并带来了很多的改变。新的发布已经切换到 Java 8，它与 IDE 绑定并且用于编译所需。具体见 [发布说明](https://www.arduino.cc/en/Main/ReleaseNotes)。

![Arduino 1.6.6 in Ubuntu 15.10](/data/attachment/album/201512/23/083704utct2u3ljn7g29hx.jpg)

对于那些不想使用软件中心的 1.0.5 旧版本的人而言，你可以使用下面的步骤在所有的 Ubuntu 发行版中安装 Arduino。

>
> **请用正确版本号替换下文中软件包的版本号**
>
>
>

**1、** 从下面的官方链接下载最新的包 **Linux 32-bit 或者 Linux 64-bit**。

* <https://www.arduino.cc/en/Main/Software>

如果不知道你系统的类型？进入系统设置->详细->概览。

**2、** 从Unity Dash、App Launcher 或者使用 Ctrl+Alt+T 打开终端。打开后，一个个运行下面的命令：

进入下载文件夹：

```
cd ~/Downloads

```

![navigate-downloads](/data/attachment/album/201512/23/083704bxw6fxl2ff22d68k.jpg)

使用 tar 命令解压：

```
tar -xvf arduino-1.6.6-*.tar.xz

```

![extract-archive](/data/attachment/album/201512/23/083704hxo781oay7ytztyz.jpg)

将解压后的文件移动到**/opt/**下：

```
sudo mv arduino-1.6.6 /opt

```

![move-opt](/data/attachment/album/201512/23/083705hypxpj1tjwzbj18b.jpg)

**3、** 现在 IDE 已经与最新的 Java 绑定使用了。但是最好为程序设置一个桌面图标/启动方式：

进入安装目录：

```
cd /opt/arduino-1.6.6/

```

在这个目录给 install.sh 可执行权限

```
chmod +x install.sh

```

最后运行脚本同时安装桌面快捷方式和启动图标：

```
./install.sh

```

下图中我用“&&”同时运行这三个命令：

![install-desktop-icon](/data/attachment/album/201512/23/083705xzi00mb5nxh087pk.jpg)

最后从 Unity Dash、程序启动器或者桌面快捷方式运行 Arduino IDE。

---

via: <http://ubuntuhandbook.org/index.php/2015/11/install-arduino-ide-1-6-6-ubuntu/>

作者：[Ji m](http://ubuntuhandbook.org/index.php/about/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何深度定制 Ubuntu 面板的时间日期显示格式

Summary: 尽管设置页面里已经有一些选项可以用了，这个快速教程会向你展示如何更加深入地自定义 Ubuntu 面板上的时间和日期指示器。  在开始之前，在 Ubuntu 软件中心搜索并安装 dconf Editor。然后启动该软件并按以下步骤执行： 1、 当 dconf Editor 启动后，导航至 com - canonical - indicator - datetime。将 time-format 的值设置为 custom。  你也可以通过终端里的命令完成以上操作： gsettings set com.canonical.indicator.datetime time-format 'custom'  2、 现在你可以通过编辑 custom-time-format 的值来自定义时间和日期的格式。  你

好歹图片中的ubuntu是中文的呀！

我希望能显示农历时间、还能显示24节气。。。

![时间日期格式](/data/attachment/album/201512/23/084414d8uzhug1rgg613ur.png)

尽管设置页面里已经有一些选项可以用了，这个快速教程会向你展示如何更加深入地自定义 Ubuntu 面板上的时间和日期指示器。

![自定义世间日期](/data/attachment/album/201512/23/084414ia7fvj00vqllqv17.jpg)

在开始之前，在 Ubuntu 软件中心搜索并安装 **dconf Editor**。然后启动该软件并按以下步骤执行：

**1、** 当 dconf Editor 启动后，导航至 **com -> canonical -> indicator -> datetime**。将 **time-format** 的值设置为 **custom**。

![自定义时间格式](/data/attachment/album/201512/23/084416jmmx1l210mpptb0k.jpg)

你也可以通过终端里的命令完成以上操作：

```
gsettings set com.canonical.indicator.datetime time-format 'custom'

```

**2、** 现在你可以通过编辑 **custom-time-format** 的值来自定义时间和日期的格式。

![自定义-时间格式](/data/attachment/album/201512/23/084440lyiy81imm2y0p22i.jpg)

你也可以通过命令完成：(LCTT 译注：将 FORMAT*VALUE*HERE 替换为所需要的格式值)

```
gsettings set com.canonical.indicator.datetime custom-time-format 'FORMAT_VALUE_HERE'

```

以下是参数含义：

* %a = 星期名缩写
* %A = 星期名完整拼写
* %b = 月份名缩写
* %B = 月份名完整拼写
* %d = 每月的日期
* %l = 小时 ( 1..12)， %I = 小时 (01..12)
* %k = 小时 ( 1..23)， %H = 小时 (01..23)
* %M = 分钟 (00..59)
* %p = 午别，AM 或 PM， %P = am 或 pm.
* %S = 秒 (00..59)

可以打开终端键入命令 `man date` 并执行以了解更多细节。

一些自定义时间日期显示格式值的例子：

![%a %H:%M %m/%d/%Y](/data/attachment/album/201512/23/084441beeocencn3xkp4qf.jpg)

![%a %r %b %d or %a %I:%M:%S %p %b %d](/data/attachment/album/201512/23/084442fflhf68xhsh0xfa7.jpg)

![%a %-d %b %l:%M %P %z](/data/attachment/album/201512/23/084442etx3307pfte3thjk.jpg)

---

via: <http://ubuntuhandbook.org/index.php/2015/12/time-date-format-ubuntu-panel/>

作者：[Ji m](http://ubuntuhandbook.org/index.php/about/) 译者：[alim0x](https://github.com/alim0x) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何在树莓派 2B 上安装 FreeBSD

Summary: 在树莓派 2B 上如何安装 FreeBSD 10 或 FreeBSD 11（current）？怎么在 Linux，OS X，FreeBSD 或类 Unix 操作系统上烧录 SD 卡？ 在树莓派 2B 上安装 FreeBSD 10 或 FreeBSD 11（current）很容易。使用 FreeBSD 操作系统可以打造一个非常易用的 Unix 服务器。FreeBSD-CURRENT 自2012年十一月以来一直支持树莓派，2015年三月份后也开始支持树莓派2了。在这个快速教程中我将介绍如何在树莓派 2B 上安装 FreeBSD 11 current arm 版。 1. 下载 FreeBSD-current 的 arm 镜像 你可以 访问这个页面来下载 树莓派2的镜像。使用 wget 或 curl 命令

在树莓派 2B 上如何安装 FreeBSD 10 或 FreeBSD 11（current）？怎么在 Linux，OS X，FreeBSD 或类 Unix 操作系统上烧录 SD 卡？

在树莓派 2B 上安装 FreeBSD 10 或 FreeBSD 11（current）很容易。使用 FreeBSD 操作系统可以打造一个非常易用的 Unix 服务器。FreeBSD-CURRENT 自2012年十一月以来一直支持树莓派，2015年三月份后也开始支持树莓派2了。在这个快速教程中我将介绍如何在树莓派 2B 上安装 FreeBSD 11 current arm 版。

### 1. 下载 FreeBSD-current 的 arm 镜像

你可以 [访问这个页面来下载](ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv6/ISO-IMAGES/11.0) 树莓派2的镜像。使用 wget 或 curl 命令来下载镜像：

```
$ wget ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv6/ISO-IMAGES/11.0/FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img.xz

```

或

```
$ curl -O ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv6/ISO-IMAGES/11.0/FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img.xz

```

### 2. 解压 FreeBSD-current 镜像

执行以下命令中的任何一个：

```
$ unxz FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img.xz

```

或

```
$ xz --decompress FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img.xz

```

### 3. 设置 SD

你可以在 OS X，Linux，FreeBSD，MS-Windows 和类 Unix 系统来烧录 SD 卡。

#### 在 Mac OS X 下烧录 FreeBSD-current

使用下面的 dd 命令：

```
$ diskutil list
$ diskutil unmountDisk /dev/diskN
$ sudo dd if=FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img of=/dev/disk2 bs=64k

```

示例输出:

```
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 661.669584 secs (1622776 bytes/sec)

```

#### 使用 Linux/FreeBSD 或者类 Unix 系统来烧录 FreeBSD-current

语法是这样:

```
$ dd if=FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img of=/dev/sdb bs=1M

```

**确保使用实际的 SD 卡的设备名称来替换 /dev/sdb**（LCTT 译注：千万注意不要写错了）。

### 4. 引导 FreeBSD

在树莓派 2B 上插入 SD 卡。你需要连接键盘，鼠标和显示器。我使用的是 USB 转串口线来连接显示器的：

![Fig.01 RPi USB based serial connection](/data/attachment/album/201512/23/091643k9brer84vbsdl4eb.jpg)

*图01 基于树莓派 USB 的串行连接*

在下面的例子中，我使用 screen 命令来连接我的 RPI：

```
## Linux 上 ##
screen /dev/tty.USB0 115200

## OS X 上 ##
screen /dev/cu.usbserial 115200

## Windows 请使用 Putty.exe ##

```

FreeBSD RPI 启动输出样例：

![Gif 01: Booting FreeBSD-current on RPi 2](/data/attachment/album/201512/23/091645hi6az1zk6pzz690r.gif)

*图02: 在树莓派 2上引导 FreeBSD-current*

### 5. FreeBSD 在 RPi 2上的用户名和密码

默认的密码是 freebsd/freebsd 和 root/root。

到此为止, FreeBSD-current 已经安装并运行在树莓派 2上。

---

via: <http://www.cyberciti.biz/faq/how-to-install-freebsd-on-raspberry-pi-2-model-b/>

作者：[Vivek Gite](http://www.cyberciti.biz/tips/about-us) 译者：[strugglingyouth](https://github.com/strugglingyouth) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


可以在 Linux 下试试苹果编程语言 Swift

Summary: 是的，你知道的，苹果编程语言 Swift 已经开源了。其实我们并不应该感到意外，因为在六个月以前苹果就已经宣布了这个消息。 苹果宣布推出开源 Swift 社区。一个专用于开源 Swift 社区的新网站已经就位，网站首页显示以下信息：  我们对 Swift 开源感到兴奋。在苹果推出了编程语言 Swift 之后，它很快成为历史上增长最快的语言之一。Swift 可以编写出难以置信的又快又安全的软件。目前，Swift 是开源的，你可以将这个最好的通用编程语言用在各种地方。  swift.org 这个网站将会作为一站式网站，它会提供各种资料的下载，包括各种平台，社区

这语言有什么好的

来自广西来宾的 GNU/Linux 用户

苹果开发，高大上吧

![](/data/attachment/album/201512/23/093649o0qkph2li5flz5qi.jpg)

是的，你知道的，苹果编程语言 Swift 已经开源了。其实我们并不应该感到意外，因为[在六个月以前苹果就已经宣布了这个消息](http://itsfoss.com/apple-open-sources-swift-programming-language-linux/)。

苹果宣布推出开源 Swift 社区。一个专用于开源 Swift 社区的[新网站](https://swift.org/)已经就位，网站首页显示以下信息：

>
> 我们对 Swift 开源感到兴奋。在苹果推出了编程语言 Swift 之后，它很快成为历史上增长最快的语言之一。Swift 可以编写出难以置信的又快又安全的软件。目前，Swift 是开源的，你可以将这个最好的通用编程语言用在各种地方。
>
>
>

[swift.org](https://swift.org/) 这个网站将会作为一站式网站，它会提供各种资料的下载，包括各种平台，社区指南，最新消息，入门教程，为开源 Swift 做贡献的说明，文件和一些其他的指南。 如果你正期待着学习 Swift，那么必须收藏这个网站。

在苹果的这次宣布中，一个用于方便分享和构建代码的包管理器已经可用了。

对于所有的 Linux 使用者来说，最重要的是，源代码已经可以从 [Github](https://github.com/apple)获得了.你可以从以下链接 Checkout 它：

* [苹果 Swift 源代码](https://github.com/apple)

除此之外，对于 ubuntu 14.04 和 15.10 版本还有预编译的二进制文件。

* [ubuntu 系统的 Swift 二进制文件](https://swift.org/download/#latest-development-snapshots)

不要急着在产品环境中使用它们，因为这些都是开发分支而不适合于产品环境。因此现在应避免使用在产品环境中，一旦发布了 Linux 下 Swift 的稳定版本，我希望 ubuntu 会把它包含在 [umake](https://wiki.ubuntu.com/ubuntu-make)中，和 [Visual Studio Code](http://itsfoss.com/install-visual-studio-code-ubuntu/) 放一起。

---

via: <http://itsfoss.com/swift-open-source-linux/>

作者：[Abhishek](http://itsfoss.com/author/abhishek/) 译者：[Flowsnow](https://github.com/Flowsnow) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


一个涵盖 Unix 44 年进化史的版本仓库

这个必须顶

>
> <http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html>
>
>
> This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:
>
>
> * **Diomidis Spinellis**. [A repository with 44 years of Unix evolution](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html). In MSR '15: Proceedings of the 12th Working Conference on Mining Software Repositories, pages 13-16. IEEE, 2015. Best Data Showcase Award. ([doi:10.1109/MSR.2015.6](http://dx.doi.org/10.1109/MSR.2015.6))
>
>
> This document is also available in [PDF format](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.pdf).
>
>
> The document's metadata is available in [BibTeX format](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c-bibtex.html).
>
>
> This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.
>
>
> [Diomidis Spinellis Publications](http://www.dmst.aueb.gr/dds/pubs/)
>
>
> © 2015 IEEE. Personal use of this material is permitted. However, permission to reprint/republish this material for advertising or promotional purposes or for creating new collective works for resale or redistribution to servers or lists, or to reuse any copyrighted component of this work in other works must be obtained from the IEEE.
>
>
>

![](/data/attachment/album/201512/23/175143h2ks9ccy1cnv2z29.jpg)

### 摘要

Unix 操作系统的进化历史，可以从一个版本控制仓库中窥见，时间跨度从 1972 年的 5000 行内核代码开始，到 2015 年成为一个含有 26,000,000 行代码的被广泛使用的系统。该仓库包含 659,000 条提交，和 2306 次合并。仓库部署了被普遍采用的 Git 系统用于储存其代码，并且在时下流行的 GitHub 上建立了存档。它由来自<ruby> 贝尔实验室 <rp>  （ </rp> <rt>  Bell Labs </rt> <rp>  ） </rp></ruby>，<ruby> 伯克利大学 <rp>  （ </rp> <rt>  Berkeley University </rt> <rp>  ） </rp></ruby>，386BSD 团队所开发的系统软件的 24 个快照综合定制而成，这包括两个老式仓库和一个开源 FreeBSD 系统的仓库。总的来说，可以确认其中的 850 位个人贡献者，更早些时候的一批人主要做基础研究。这些数据可以用于一些经验性的研究，在软件工程，信息系统和软件考古学领域。

### 1、介绍

Unix 操作系统作为一个主要的工程上的突破而脱颖而出，得益于其模范的设计、大量的技术贡献、它的开发模型及广泛的使用。Unix 编程环境的设计已经被视为一个提供非常简洁、强大而优雅的设计 [[1](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#MPT78)] 。在技术方面，许多对 Unix 有直接贡献的，或者因 Unix 而流行的特性就包括 [[2](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#RT78)] ：用高级语言编写的可移植部署的内核；一个分层式设计的文件系统；兼容的文件，设备，网络和进程间 I/O；管道和过滤架构；虚拟文件系统；和作为普通进程的可由用户选择的不同 shell。很早的时候，就有一个庞大的社区为 Unix 贡献软件 [[3](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Rit84)] ，[[4](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Sal94),pp. 65-72] 。随时间流逝，这个社区不断壮大，并且以现在称为开源软件开发的方式在工作着 [[5](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Ray03),pp. 440-442] 。Unix 和其睿智的晚辈们也将 C 和 C++ 编程语言、分析程序和词法分析生成器（*yacc*，*lex*）、文档编制工具（*troff*，*eqn*，*tbl*）、脚本语言（*awk*，*sed*，*Perl*）、TCP/IP 网络、和<ruby> 配置管理系统 <rp>  （ </rp> <rt>  configuration management system </rt> <rp>  ） </rp></ruby>（*SCSS*，*RCS*，*Subversion*，*Git*）发扬广大了，同时也形成了现代互联网基础设施和网络的最大的部分。

幸运的是，一些重要的具有历史意义的 Unix 材料已经保存下来了，现在保持对外开放。尽管 Unix 最初是由相对严格的协议发行，但在早期的开发中，很多重要的部分是通过 Unix 的版权拥有者之一（Caldera International) （LCTT 译注：2002年改名为 SCO Group）以一个自由的协议发行。通过将这些部分再结合上由<ruby> 加州大学伯克利分校 <rp>  （ </rp> <rt>  University of California, Berkeley </rt> <rp>  ） </rp></ruby>和 FreeBSD 项目组开发或发布的开源软件，贯穿了从 1972 年六月二十日开始到现在的整个系统的开发。

通过规划和处理这些可用的快照以及或旧或新的配置管理仓库，将这些可用数据的大部分重建到一个新合成的 Git 仓库之中。这个仓库以数字的形式记录了过去44年来最重要的数字时代产物的详细的进化。下列章节描述了该仓库的结构和内容（第[2](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:data)节）、创建方法（第[3](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:dev)节）和该如何使用（第[4](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:use)节）。

### 2、数据概览

这 1GB 的 Unix 历史仓库可以从 [GitHub](https://github.com/dspinellis/unix-history-repo) 上克隆   1  。如今   2  ，这个仓库包含来自 850 个贡献者的 659,000 个提交和 2,306 个合并。贡献者有来自<ruby> 贝尔实验室 <rp>  （ </rp> <rt>  Bell Labs </rt> <rp>  ） </rp></ruby>的 23 个员工，<ruby> 伯克利大学 <rp>  （ </rp> <rt>  Berkeley University </rt> <rp>  ） </rp></ruby>的<ruby> 计算机系统研究组 <rp>  （ </rp> <rt>  Computer Systems Research Group </rt> <rp>  ） </rp></ruby>（CSRG）的 158 个人，和 FreeBSD 项目的 660 个成员。

这个仓库的生命始于一个 *Epoch* 的标签，这里面只包含了证书信息和现在的 README 文件。其后各种各样的标签和分支记录了很多重要的时刻。

* *Research-VX* 标签对应来自<ruby> 贝尔实验室 <rp>  （ </rp> <rt>  Bell Labs </rt> <rp>  ） </rp></ruby>六个研究版本。从 *Research-V1* （4768 行 PDP-11 汇编代码）开始，到以 *Research-V7* （大约 324,000 行代码，1820 个 C 文件）结束。
* *Bell-32V* 是第七个版本 Unix 在 DEC/VAX 架构上的移植。
* *BSD-X* 标签对应<ruby> 伯克利大学 <rp>  （ </rp> <rt>  Berkeley University </rt> <rp>  ） </rp></ruby>释出的 15 个快照。
* *386BSD-X* 标签对应该系统的两个开源版本，主要是 Lynne 和 William Jolitz 写的适用于 Intel 386 架构的内核代码。
* *FreeBSD-release/X* 标签和分支标记了来自 FreeBSD 项目的 116 个发行版。

另外，以 *-Snapshot-Development* 为后缀的分支，表示该提交由来自一个以时间排序的快照文件序列而合成；而以一个 *-VCS-Development* 为后缀的标签，标记了有特定发行版出现的历史分支的时刻。

仓库的历史包含从系统开发早期的一些提交，比如下面这些。

```
commit c9f643f59434f14f774d61ee3856972b8c3905b1
Author: Dennis Ritchie <research!dmr>
Date:   Mon Dec 2 18:18:02 1974 -0500
    Research V5 development
    Work on file usr/sys/dmr/kl.c

```

两个发布之间的合并代表着系统发生了进化，比如 BSD 3 的开发来自 BSD2 和 Unix 32/V，它在 Git 仓库里正是被表示为带两个父节点的图形节点。

更为重要的是，以这种方式构造的仓库允许 **git blame**，就是可以给源代码行加上注释，如版本、日期和它们第一次出现相关联的作者，这样可以知道任何代码的起源。比如说，检出 **BSD-4** 这个标签，并在内核的 *pipe.c* 文件上运行一下 git blame，就会显示出由 Ken Thompson 写于 1974，1975 和 1979年的代码行，和 Bill Joy 写于 1980 年的。这就可以自动（尽管计算上比较费事）检测出任何时刻出现的代码。

![](/data/attachment/album/201512/23/175502ctm4thin2bpnbnr4.png)

*图1：各个重大 Unix 发行版的代码来源*

如[上图](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:provenance)所示，现代版本的 Unix（FreeBSD 9）依然有相当部分的来自 BSD 4.3，BSD 4.3 Net/2 和 BSD 2.0 的代码块。有趣的是，这图片显示有部分代码好像没有保留下来，当时激进地要创造一个脱离于伯克利（386BSD 和 FreeBSD 1.0）所释出代码的开源操作系统。FreeBSD 9 中最古老的代码是一个 18 行的队列，在 C 库里面的 timezone.c 文件里，该文件也可以在第七版的 Unix 文件里找到，同样的名字，时间戳是 1979 年一月十日 - 36 年前。

### 3、数据收集和处理

这个项目的目的是以某种方式巩固从数据方面说明 Unix 的进化，通过将其并入一个现代的版本仓库，帮助人们对系统进化的研究。项目工作包括收录数据，分类并综合到一个单独的 Git 仓库里。

![](/data/attachment/album/201512/23/175222mhed8yeg2y8y78ey.png)

*图2：导入 Unix 快照、仓库及其合并*

项目以三种数据类型为基础（见[图2](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:branches)）。首先，早期发布版本的快照，获取自<ruby>   Unix 遗产社会归档  <rp>  （ </rp> <rt>  Unix Heritage Society archive </rt> <rp>  ） </rp></ruby>   3  、包括了 CSRG 全部的源代码归档的 [CD-ROM 镜像](https://www.mckusick.com/csrg/)   4  ， [Oldlinux 网站](http://www.oldlinux.org/Linux.old/distributions/386BSD)   5  和 [FreeBSD 归档](http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/)   6  。 其次，以前的和现在的仓库，即 CSRG SCCS [[6](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#SCCS)] 仓库，FreeBSD 1 CVS 仓库，和[现代 FreeBSD 开发的 Git 镜像](https://github.com/freebsd/freebsd)   7  。前两个都是从和快照相同的来源获得的。

最后，也是最费力的数据源是<ruby>   初步研究  <rp>  （ </rp> <rt>  primary research </rt> <rp>  ） </rp></ruby>。释出的快照并没有提供关于它们的源头和每个文件贡献者的信息。因此，这些信息片段需要通过<ruby> 初步研究 <rp>  （ </rp> <rt>  primary research </rt> <rp>  ） </rp></ruby>验证。至于作者信息主要通过作者的自传，研究论文，内部备忘录和旧文档扫描件；通过阅读并且自动处理源代码和帮助页面补充；通过与那个年代的人用电子邮件交流；在 *StackExchange* 网站上贴出疑问；查看文件的位置（在早期的内核版本的源代码，分为 `usr/sys/dmr` 和 `/usr/sys/ken` 两个位置）；从研究论文和帮助手册披露的作者找到源代码，从一个又一个的发行版中获取。（有趣的是，第一和第二的<ruby> 研究版 <rp>  （ </rp> <rt>  Research Edition </rt> <rp>  ） </rp></ruby>帮助页面都有一个 “owner” 部分，列出了作者（比如，*Ken*）及对应的系统命令、文件、系统调用或库函数。在第四版中这个部分就没了，而在 BSD 发行版中又浮现了 “Author” 部分。）关于作者信息更为详细地写在了项目的文件中，这些文件被用于匹配源代码文件和它们的作者和对应的提交信息。最后，关于源代码库之间的合并信息是获取自 [NetBSD 项目所维护的 BSD 家族树](http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/misc/bsd-family-tree)   8  。

作为本项目的一部分而开发的软件和数据文件，现在可以[在线获取](https://github.com/dspinellis/unix-history-make)   9  ，并且，如果有合适的网络环境，CPU 和磁盘资源，可以用来从头构建这样一个仓库。关于主要发行版的作者信息，都存储在本项目的 `author-path` 目录下的文件里。它们的内容中带有正则表达式的文件路径后面指出了相符的作者。可以指定多个作者。正则表达式是按线性处理的，所以一个文件末尾的匹配一切的表达式可以指定一个发行版的默认作者。为避免重复，一个以 `.au` 后缀的独立文件专门用于映射作者的<ruby> 识别号 <rp>  （ </rp> <rt>  identifier </rt> <rp>  ） </rp></ruby>和他们的名字及 email。这样一个文件为每个与该系统进化相关的社区都建立了一个：<ruby> 贝尔实验室 <rp>  （ </rp> <rt>  Bell Labs </rt> <rp>  ） </rp></ruby>，<ruby> 伯克利大学 <rp>  （ </rp> <rt>  Berkeley University </rt> <rp>  ） </rp></ruby><ruby></ruby>，386BSD 和 FreeBSD。为了真实性的需要，早期<ruby> 贝尔实验室 <rp>  （ </rp> <rt>  Bell Labs </rt> <rp>  ） </rp></ruby>发行版的 emails 都以 <ruby> UUCP 注释 <rp>  （ </rp> <rt>  UUCP notation </rt> <rp>  ） </rp></ruby>方式列出（例如， `research!ken`)。FreeBSD 作者的识别映射，需要导入早期的 CVS 仓库，通过从如今项目的 Git 仓库里拆解对应的数据构建。总的来说，由 1107 行构成了注释作者信息的文件（828 个规则），并且另有 640 行用于映射作者的识别号到名字。

现在项目的数据源被编码成了一个 168 行的 `Makefile`。它包括下面的步骤。

**Fetching** 从远程站点复制和克隆大约 11GB 的镜像、归档和仓库。

**Tooling** 从 2.9 BSD 中为旧的 PDP-11 归档获取一个归档器，并调整它以在现代的 Unix 版本下编译；编译 4.3 BSD 的 *compress* 程序来解压 386BSD 发行版，这个程序不再是现代 Unix 系统的组成部分了。

**Organizing** 用 *tar* 和 *cpio* 解压缩包；合并第六个研究版的三个目录；用旧的 PDP-11 归档器解压全部一个 BSD 归档；挂载 CD-ROM 镜像，这样可以作为文件系统处理；合并第 8 和 62 的 386BSD 磁盘镜像为两个独立的文件。

**Cleaning** 恢复第一个研究版的内核源代码文件，这个可以通过 OCR 从打印件上得到近似其原始状态的的格式；给第七个研究版的源代码文件打补丁；移除发行后被添加进来的元数据和其他文件，为避免得到错误的时间戳信息；修复毁坏的 SCCS 文件；用一个定制的 Perl 脚本移除指定到多个版本的 CVS 符号、删除与现在冲突的 CVS *Attr* 文件、用 *cvs2svn* 将 CVS 仓库转换为 Git 仓库，以处理早期的 FreeBSD CVS 仓库。

在仓库<ruby> 再现 <rp>  （ </rp> <rt>  representation </rt> <rp>  ） </rp></ruby>中有一个很有意思的部分就是，如何导入那些快照，并以一种方式联系起来，使得 *git blame* 可以发挥它的魔力。快照导入到仓库是基于每个文件的时间戳作为一系列的提交实现的。当所有文件导入后，就被用对应发行版的名字给标记了。然后，可以删除那些文件，并开始导入下一个快照。注意 *git blame* 命令是通过回溯一个仓库的历史来工作的，并使用<ruby> 启发法 <rp>  （ </rp> <rt>  heuristics </rt> <rp>  ） </rp></ruby>来检测文件之间或文件内的代码移动和复制。因此，删除掉的快照间会产生中断，以防止它们之间的代码被追踪。

相反，在下一个快照导入之前，之前快照的所有文件都被移动到了一个隐藏的后备目录里，叫做 `.ref`（引用）。它们保存在那，直到下个快照的所有文件都被导入了，这时候它们就会被删掉。因为 `.ref` 目录下的每个文件都精确对应一个原始文件，*git blame* 可以知道多少源代码通过 `.ref` 文件从一个版本移到了下一个，而不用显示出 `.ref` 文件。为了更进一步帮助检测代码起源，同时增加<ruby> 再现 <rp>  （ </rp> <rt>  representation </rt> <rp>  ） </rp></ruby>的真实性，每个发行版都被<ruby> 再现 <rp>  （ </rp> <rt>  represented </rt> <rp>  ） </rp></ruby>为一个有增量文件的分支（*-Development*）与之前发行版之间的合并。

上世纪 80 年代时期，只有<ruby> 伯克利大学 <rp>  （ </rp> <rt>  Berkeley University </rt> <rp>  ） </rp></ruby>开发的文件的一个子集是用 SCCS 版本控制的。在那个期间，我们的统一仓库里包含了来自 SCCS 的提交和快照的增量文件的导入数据。对于每个发行版，可用最近的时间戳找到该 SCCS 提交，并被标记为一个与发行版增量导入分支的合并。这些合并可以在[图2](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:branches) 的中间看到。

将各种数据资源综合到一个仓库的工作，主要是用两个脚本来完成的。一个 780 行的 Perl 脚本（`import-dir.pl`）可以从一个单独的数据源（快照目录、SCCS 仓库，或者 Git 仓库）中，以 *Git fast export* 格式导出（真实的或者综合的）提交历史。输出是一个简单的文本格式，Git 工具用这个来导入和导出提交。其他方面，这个脚本以一些东西为参数，如文件到贡献者的映射、贡献者登录名和他们的全名间的映射、哪个导入的提交会被合并、哪些文件要处理和忽略、以及“引用”文件的处理。一个 450 行的 Shell 脚本创建 Git 仓库，并调用带适当参数的 Perl 脚本，来导入 27 个可用的历史数据资源。Shell 脚本也会运行 30 个测试，比较特定标签的仓库和对应的数据源，核对查看的目录中出现的和没出现的，并回溯查看分支树和合并的数量，*git blame* 和 *git log* 的输出。最后，调用 *git* 作垃圾收集和仓库压缩，从最初的 6GB 降到分发的 1GB 大小。

### 4、数据使用

该数据可以用于软件工程、信息系统和<ruby> 软件考古学 <rp>  （ </rp> <rt>  software archeology </rt> <rp>  ） </rp></ruby>领域的经验性研究。鉴于它从不间断而独一无二的存在了超过了 40 年，可以供软件进化和跨代更迭参考。从那时以来，处理速度已经成千倍地增长、存储容量扩大了百万倍，该数据同样可以用于软件和硬件技术<ruby> 交叉进化 <rp>  （ </rp> <rt>  co-evolution </rt> <rp>  ） </rp></ruby>的研究。软件开发从研究中心到大学，到开源社区的转移，可以用来研究组织文化对于软件开发的影响。该仓库也可以用于学习著名人物的实际编程，比如 Turing 奖获得者（Dennis Ritchie 和 Ken Thompson）和 IT 产业的大佬（Bill Joy 和 Eric Schmidt）。另一个值得学习的现象是代码的长寿，无论是单行的水平，或是作为那个时代随 Unix 发布的完整的系统（Ingres、 Lisp、 Pascal、 Ratfor、 Snobol、 TMP），和导致代码存活或消亡的因素。最后，因为该数据让 Git 感到了压力，底层的软件仓库存储技术达到了其极限，这会推动版本管理系统领域的工程进度。

![](/data/attachment/album/201512/23/175229n3iydd44vvgh4vsd.png)

*图3：Unix 发行版的代码风格进化*

[图3](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:metrics) 根据 36 个主要 Unix 发行版描述了一些有趣的代码统计的趋势线（用 R 语言的局部多项式回归拟合函数生成），验证了代码风格和编程语言的使用在很长的时间尺度上的进化。这种进化是软硬件技术的需求和支持、软件构筑理论，甚至社会力量所驱动的。图片中的日期计算了出现在一个给定发行版中的所有文件的平均日期。正如可以从中看到，在过去的 40 年中，标示符和文件名字的长度已经稳步从 4 到 6 个字符增长到 7 到 11 个字符。我们也可以看到注释数量的少量稳步增加，以及 *goto* 语句的使用量减少，同时 *register* 这个类型修饰符的消失。

### 5、未来的工作

可以做很多事情去提高仓库的正确性和有效性。创建过程以开源代码共享了，通过 GitHub 的<ruby> 拉取请求 <rp>  （ </rp> <rt>  pull request </rt> <rp>  ） </rp></ruby>，可以很容易地贡献更多代码和修复。最有用的社区贡献将使得导入的快照文件的覆盖面增长，以便归属于某个具体的作者。现在，大约 90,000 个文件（在 160,000 总量之外）通过默认规则指定了作者。类似地，大约有 250 个作者（最初 FreeBSD 那些）仅知道其识别号。两个都列在了 build 仓库的 unmatched 目录里，欢迎贡献数据。进一步，BSD SCCS 和 FreeBSD CVS 的提交共享相同的作者和时间戳，这些可以结合成一个单独的 Git 提交。导入 SCCS 文件提交的支持会被添加进来，以便引入仓库对应的元数据。最后，也是最重要的，开源系统的更多分支会添加进来，比如 NetBSD、 OpenBSD、DragonFlyBSD 和 *illumos*。理想情况下，其他历史上重要的 Unix 发行版，如 System III、System V、 NeXTSTEP 和 SunOS 等的当前版权拥有者，也会在一个允许他们的合作伙伴使用仓库用于研究的协议下释出他们的系统。

### 鸣谢

本文作者感谢很多付出努力的人们。 Brian W. Kernighan, Doug McIlroy 和 Arnold D. Robbins 在贝尔实验室（Bell Labs）的登录识别号方面提供了帮助。 Clem Cole， Era Erikson， Mary Ann Horton, Kirk McKusick, Jeremy C. Reed, Ingo Schwarze 和 Anatole Shaw 在 BSD 的登录识别号方面提供了帮助。BSD SCCS 的导入代码是基于 H. Merijn Brand 和 Jonathan Gray 的工作。

这次研究由欧盟 ( <ruby> 欧洲社会基金 <rp>  （ </rp> <rt>  European Social Fund，ESF </rt> <rp>  ） </rp></ruby>) 和 <ruby> 希腊国家基金 <rp>  （ </rp> <rt>  Greek national funds </rt> <rp>  ） </rp></ruby>通过<ruby> 国家战略参考框架 <rp>  （ </rp> <rt>  National Strategic Reference Framework ，NSRF </rt> <rp>  ） </rp></ruby>的 Operational Program " Education and Lifelong Learning" - Research Funding Program: Thalis - Athens University of Economics and Business - Software Engineering Research Platform ，共同出资赞助。

### 引用

[1](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#MPT78) M. D. McIlroy, E. N. Pinson, and B. A. Tague, "UNIX time-sharing system: Foreword," *The Bell System Technical Journal*, vol. 57, no. 6, pp. 1899-1904, July-August 1978.

[2](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#RT78) D. M. Ritchie and K. Thompson, "The UNIX time-sharing system," *Bell System Technical Journal*, vol. 57, no. 6, pp. 1905-1929, July-August 1978.

[3](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Rit84) D. M. Ritchie, "The evolution of the UNIX time-sharing system," *AT&T Bell Laboratories Technical Journal*, vol. 63, no. 8, pp. 1577-1593, Oct. 1984.

[4](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Sal94) P. H. Salus, *A Quarter Century of UNIX*. Boston, MA: Addison-Wesley, 1994.

[5](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Ray03) E. S. Raymond, *The Art of Unix Programming*. Addison-Wesley, 2003.

[6](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:data) M. J. Rochkind, "The source code control system," *IEEE Transactions on Software Engineering*, vol. SE-1, no. 4, pp. 255-265, 1975.

### 脚注

[1](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAB) - <https://github.com/dspinellis/unix-history-repo>

[2](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAC) - Updates may add or modify material. To ensure replicability the repository's users are encouraged to fork it or archive it.

[3](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAD) - <http://www.tuhs.org/archive_sites.html>

[4](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAE) - <https://www.mckusick.com/csrg/>

[5](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAF) - <http://www.oldlinux.org/Linux.old/distributions/386BSD>

[6](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAG) - <http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/>

[7](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAH) - <https://github.com/freebsd/freebsd>

[8](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAI) - <http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/misc/bsd-family-tree>

[9](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAJ) - <https://github.com/dspinellis/unix-history-make>

---

via: <http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html>

作者：Diomidis Spinellis译者：[wi-cuckoo](https://github.com/wi-cuckoo) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Canonical：全球 Ubuntu 用户可能超过了10亿

Summary: 可能很多人并不知道自己在使用 Ubuntu。  Ubuntu 项目的高层领导之一 Dustin Kirkland 在一封冗长而全面的公开信中向社区披露，使用 Ubuntu 的人可能已经超过了10 亿人。 之前来自 Phoronix的一篇报道称，看起来 Canonical 在 2015 年底前完成不了其拥有 2 亿用户的目标。Dustin 收集汇总了所有他能找到的数据，然后发现，原来世界上很多人已经在使用 Ubuntu 了，无论自愿与否。 这个 2 亿用户的目标源于 4 年前 Canonical 的Mark Shuttleworth 的一次演讲，他当时预计到 2015 年 Ubuntu 会有 2 亿用户。Mark Shuttleworth 所指的应该是安

意淫，继续意淫……

好大一個衛星上天～

UB及其衍生版本确实支撑着Linux桌面前进

UB及其衍生版本确实支撑着Linux桌面前进

UB及其衍生版本确实支撑着Linux桌面前进

给Ubuntu安装个steam直接搞坏系统，开机进不去，Ubuntu的稳定性还是得加强啊。

虽然UBUNTU稳定性欠缺，但其衍生版本确实支持linux的前进

来自河南郑州的 Microsoft Edge 13.10586|Windows 10 用户

哈哈哈哈哈哈哈哈

遥记当年，第一个linux桌面版，就是ubuntu。后来。。。。

ubuntu代表应该是LINUX桌面，无论你现在用的是什么？<br />
只要是曾经用过UBUNTU一个月～

canonical不知道烧了多少钱了  简直就是慈善事业

贵站的验证码慢慢看完帖子再回的话第一次一定是失败的。

这种统计方式……哦呵呵。

哦，是这样的么？我研究研究，谢谢哈！！这实在太影响情绪了。。抱歉啊。

Ubuntu真的很好用，但是iptables操作就不能再方便些吗（掀桌

firewalld-cmd 试试？另外，有 GUI 界面可以配置的。。

应该没有那么多吧,好象是的第一个  验证码必错

阿Q精神。。

这种事情换个发行版也能搞定，因为没有自己独特不可替代的东西。另外吐槽一下 第一个验证码真的有问题...

听说UBUNTU挺好的，就是不知道怎么使用！以后有机会学习下！

外贸-小谢 [Microsoft Edge 13.10586|Windows 10]

这个我看到LINUX系列一直默默做着背后的工作，那些需要大量计算，处理数据等工作，我喜欢Ubuntu,但是桌面使用上还是体验不好<br />
其实我觉的做好自己的工作就是最好的，Ubuntu有些入魔了

来自北京的 Internet Explorer 11.0|Windows 10 用户

如果光说Linux，不涉及一些比较上层的软件包，你确定推进最前沿普适技术的不是Redhat和Fedora吗？

好像我ubuntu和ubuntu的衍生版都用过。

>
> 可能很多人并不知道自己在使用 Ubuntu。
>
>
>

Ubuntu 项目的高层领导之一 Dustin Kirkland 在一封冗长而全面的公开信中向社区披露，使用 Ubuntu 的人可能已经超过了10 亿人。

之前来自 [Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-No-200-Million-Users) 的一篇[报道](/article-6773-1.html)称，看起来 Canonical 在 2015 年底前完成不了其拥有 2 亿用户的目标。Dustin 收集汇总了所有他能找到的数据，然后发现，原来世界上很多人已经在使用 Ubuntu 了，无论自愿与否。

这个 2 亿用户的目标源于 4 年前 Canonical 的 Mark Shuttleworth 的一次[演讲](http://www.phoronix.com/scan.php?page=news_item&px=2015-200-Million-Goal-Retro)，他当时预计到 2015 年 Ubuntu 会有 2 亿用户。Mark Shuttleworth 所指的应该是安装了 Ubuntu 操作系统的个人计算机和笔记本电脑，不过当今 IT 界的格局已经和以前大大不同了。

问题是，并没有一个明确的方式可以统计有多少人使用了 Ubuntu。如 Dustin 所说，Canonical 并不要求用户注册，所以他们也只能估计。虽然，他们可以统计下有多少人连接到他们官方的软件源来下载更新，这是一个粗略的估计，然而该公司并不需要这样的数据。

### 可能超过了 10 亿用户

![](/data/attachment/album/201512/24/104735igdxheyax6zjx6og.jpg)

Dustin Kirkland 在 Canonical 负责相当重要的工作，他领导 Canonical 的 Ubuntu 产品与战略团队，直接汇报给 Mark Shuttleworth，负责技术战略、路线图、Ubuntu Cloud 和物联网商业产品的生命周期等等。所以，他说的应该有一定道理。

Dustin [解释说](http://blog.dustinkirkland.com/2015/12/more-people-use-ubuntu-than-anyone.html)：“没有人可以统计世界上所有的 Ubuntu 用户。Canonical 不像苹果、微软或谷歌，并不要求每个用户注册其 安装的 Ubuntu。当然，你可以从戴尔、惠普、联想和华硕买预装了 Ubuntu 的笔记本电脑，除此之外还有几百万其它的产品。而且你还可以从 IBM、戴尔、惠普、思科、联想、Quanta 购买安装了 Ubuntu 的服务器，以及 OpenCompute 项目的兼容产品。”

他收集了所有他能找到公开数据，包括服务器、云上部署的 Ubuntu、Ubuntu Phone 和各大公司对 Ubuntu 的应用，结果发现有超过 10 亿人在使用 Ubuntu，虽然其中绝大多数都并没有察觉到这一点。

[让我们来看看这些事实](http://blog.dustinkirkland.com/2015/12/more-people-use-ubuntu-than-anyone.html)：

* Docker 用户运行 Ubuntu 镜像超过 [355,000,000 次](https://hub.docker.com/search/?q=ubuntu&page=1&isAutomated=0&isOfficial=0&starCount=0&pullCount=0)。
* HashiCorp 的 Ubuntu 14.04 LTS 64-bit Vagrant 镜像下载超过 [10,000,000 次](https://atlas.hashicorp.com/boxes/search?utm_source=vagrantcloud.com&vagrantcloud=1)。
* 在 2015 年，在公有云、私有云和硬件服务器上至少启动了 20,000,000 个 Ubuntu 独立实例。
+ Ubuntu 运行在如 AWS、 Microsoft Azure、 Google Compute Engine、 Rackspace、 Oracle Cloud、 VMware 以及[其它](http://partners.ubuntu.com/programmes/public-cloud)的公有云上。
+ Ubuntu 也运行在类似 [OpenStack](https://insights.ubuntu.com/2015/10/28/news-from-the-summit-ubuntu-extends-lead-in-openstack/) 这样的私有云上。
- 其中包括 Deutsche Telekom 这样的世界上[最大的私有云](https://www.openstack.org/assets/survey/Public-User-Survey-Report.pdf)。

+ Ubuntu 也部署在 MAAS 的硬件上，通常由 [Chef 进行管理](https://insights.ubuntu.com/2015/04/14/chef-an-automation-story-with-a-bare-metal-soundtrack/)。

* 事实上，在 2015 年 11 月，就新启动了超过 2 亿的 Ubuntu Cloud 实例。
+ 每天新启动 67,000 个 Ubuntu Cloud 实例。
+ 每小时新启动 2,800 个 Ubuntu Cloud 实例。
+ 每分钟新启动 46 个 Ubuntu Cloud 实例。
+ 在 2015 年 11 月的每一天，接近每秒钟新启动一个 Ubuntu Cloud 实例。

* 还有来自[魅族](http://www.meizu.com/en/ubuntu/features.html)的 Ubuntu phone。
* 以及来自 [BQ](https://store.bq.com/en/ubuntu-edition-e5/) 的 Ubuntu phone。
* 当然，谁都可以在 Google Nexus 平板/电话上[安装](https://wiki.ubuntu.com/Touch/Install) Ubuntu。
* 噢，还有[特斯拉娱乐系统](http://www.autoblog.com/2014/04/12/tesla-model-s-owners-hack-their-cars-find-ubuntu/)？它也是 Ubuntu 充能的。
* [谷歌的无人驾驶汽车](https://www.linux.com/news/embedded-mobile/mobile-linux/737295-linux-leads-self-driving-car-movement)？它们也是由 Ubuntu 无人驾驶的。
* George Hotz 自己造的自驾汽车？ [那是一个自制的 Ubuntu 自动驾驶仪](http://www.bloomberg.com/features/2015-george-hotz-self-driving-car/)。
* 下载用于树莓派和 Beagle Bone Blacks 的 [Snappy Ubuntu](https://developer.ubuntu.com/en/snappy/start/raspberry-pi-2/) ——影响巨大，下载量超高。
* 无人机、机器人、网络交换机、智能设备和物联网， [到处都是 Snappy Ubuntu](http://www.ubuntu.com/internet-of-things)。
* 在沃尔玛呢？天天促销，天天 Ubuntu， [越来越多的 Ubuntu](http://www.zdnet.com/article/walmart-relies-on-openstack/)。
* 正在准备用 [Kubernetes](https://github.com/kubernetes/kubernetes/blob/master/docs/getting-started-guides/ubuntu.md) 或 Apache [Mesos](http://mesos.apache.org/gettingstarted/) 搭建容器环境？那里是 Ubuntu 乐园。
* 想用 Cloud Foundry 搞个 PaaS？ 应用实例是 [Ubuntu LXC 容器](https://bosh.cloudfoundry.org/docs/stemcell.html)。而 Pivotal 已经有了许多[重要客户](http://pivotal.io/customers)。
* Heroku 呢？我敢打赌承载你的应用的容器[是 Ubuntu](https://devcenter.heroku.com/articles/stack)，也有 [重量级客户](https://www.heroku.com/customers)。
* 世界上最大的超级计算机天河 2，多达 80,000 个 Xeon 处理器、 1.4 TB 内存、 12.4 PB 硬盘，全都是[运行在 Ubuntu](https://www.linux.com/news/enterprise/high-performance/147-high-performance/840542-tianhe-2-most-powerful-supercomputer-in-the-world-runs-ubuntu) 上的。
* 甚至在 Netflix 看影片？也是[由 Ubuntu 提供服务的](https://insights.ubuntu.com/2015/08/11/how-netflix-tunes-ubuntu-on-ec2/)。
* 约过 Uber 或 Lyft 吗？你的手机应用与之通讯的是 [后端的 Ubuntu 服务器](https://careers-uber.icims.com/jobs/16178/production-engineer---infrastructure/job)。
* 喜欢看《霍比特人》、《饥饿游戏》、《复仇者》、《阿凡达》吗？ [全是由 WETA Digital 的 Ubuntu 渲染的](http://blog.dustinkirkland.com/2010/01/39000-core-ubuntu-cluster-renders.html)。还有[很多](https://www.wetafx.co.nz/features)。
* 使用 Instagram 吗？ 耶！[Ubuntu，全部搞定，干得漂亮](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances)！
* 在华尔街做交易吗？ [Ubuntu 为彭博提供了重要服务](http://www.canonical.com/services)。
* Paypal、Dropbox、Snapchat、[Pinterest](https://engineering.pinterest.com/blog/building-pinterest-cloud)、[Reddit](http://www.redditblog.com/2012/01/january-2012-state-of-servers.html)，这些都在用 Ubuntu。
* 维基百科和维基媒体是互联网是最繁忙的站点之一， [每个月有 80 到 180 亿 PV](https://stats.wikimedia.org/EN/TablesPageViewsMonthly.htm)，也是[放在 Ubuntu 上的](https://meta.wikimedia.org/wiki/Wikimedia_servers)。


CentOS AltArch 7发布，支持 PPC64、PPC8LE、ARMhfp、i686 和 AArch64

Summary: 在前几天的一则CentOS 7 ARM 版正式发布：支持树莓派2/香蕉派/CubieTruck的简短消息之后，Karanbir Singh 正式宣布了 CentOS AltArch 7 的发布。 据发行公告，CentOS AltArch 7 基于最近发布的 CentOS 7 （1511） 滚动更新版，在该版本中包括了大量新功能，如 X.Org 服务器 1.17、以及在预装的应用中支持 TLS 1.1、TLS 1.2 和 EC 加密算法等。 此外，CentOS 7 （1511） 也完全支持了 virt-v2v 命令行工具，带有 KDE 4.14 和 GNOME 3.14 桌面环境、 LibreOffice 4.3.7 办公套件、支持 tcpdump 中的纳秒级时间戳，以及 OpenLDAP 2.4.40 等。

树莓派版的默认密码是多少

在前几天的一则 [CentOS 7 ARM 版正式发布：支持树莓派2/香蕉派/CubieTruck](/article-6772-1.html "CentOS 7 ARM 版正式发布：支持树莓派2/香蕉派/CubieTruck") 的简短消息之后，Karanbir Singh 正式宣布了 CentOS AltArch 7 的发布。

据[发行公告](https://lists.centos.org/pipermail/centos-announce/2015-December/021556.html)，CentOS AltArch 7 基于最近发布的 CentOS 7 （1511） 滚动更新版，在该版本中包括了大量新功能，如 X.Org 服务器 1.17、以及在预装的应用中支持 TLS 1.1、TLS 1.2 和 EC 加密算法等。

此外，CentOS 7 （1511） 也完全支持了 virt-v2v 命令行工具，带有 KDE 4.14 和 GNOME 3.14 桌面环境、 LibreOffice 4.3.7 办公套件、支持 tcpdump 中的纳秒级时间戳，以及 OpenLDAP 2.4.40 等。

“CentOS AltArch 7 已经可以下载了，” Karanbir Singh 在[发布公告](https://lists.centos.org/pipermail/centos-announce/2015-December/021556.html)中说，“预计支持 Aarch64 的 CentOS AltArch 7 （1511）过几天就发布，到时候会单独宣布”。

![](/data/attachment/album/201512/24/121626u6ncnc1a5f7gbbll.jpg)

### 支持 PPC64、PPC8LE、ARMhfp、AArch64、64位和32位

CentOS AltArch 7 操作系统支持多种硬件架构，它们是： CentOS AltArch 7 (1511) for i686 (32-bit)、 CentOS AltArch UserLand 7 (1511) for Armhfp、CentOS AltArch 7 (1511) for PowerPC64、 CentOS AltArch 7 (1511) for PowerPC8 LE 和 CentOS AltArch 7 (1511) for AArch64。

注意，PowerPC8 LE 和 PowerPC64 (PPC64) 版本目前只有技术预览版，不要用在生产环境中。

你可以从下面地址下载到：

* [CentOS AltArch 7 (1511) for i686](http://mirror.centos.org/altarch/7.2.1511/isos/i386/)
* [CentOS AltArch UserLand 7 (1511) for Armhfp](http://mirror.centos.org/altarch/7.2.1511/isos/armhfp/)
* [CentOS AltArch 7 (1511) for PowerPC64 (TechPreview)](http://mirror.centos.org/altarch/7.2.1511/isos/ppc64/)
* [CentOS AltArch 7 (1511) for PowerPC8 LE (TechPreview)](http://mirror.centos.org/altarch/7.2.1511/isos/ppc64le/)

请随时关注进一步的消息。


在 Debian Linux 上安装配置 ISC DHCP 服务器

Summary: 动态主机控制协议（Dynamic Host Control Protocol）（DHCP）给网络管理员提供了一种便捷的方式，为不断变化的网络主机或是动态网络提供网络层地址。其中最常用的 DHCP 服务工具是 ISC DHCP Server。DHCP 服务的目的是给主机提供必要的网络信息以便能够和其他连接在网络中的主机互相通信。DHCP 服务提供的信息包括：DNS 服务器信息，网络地址（IP），子网掩码，默认网关信息，主机名等等。 本教程介绍运行在 Debian 7.7 上 4.2.4 版的 ISC-DHCP-Server 如何管理多个虚拟局域网（VLAN），也可以非常容易应用到单一网络上。 测试用的网络是

<ruby> 动态主机控制协议 <rp>  （ </rp> <rt>  Dynamic Host Control Protocol </rt> <rp>  ） </rp></ruby>（DHCP）给网络管理员提供了一种便捷的方式，为不断变化的网络主机或是动态网络提供网络层地址。其中最常用的 DHCP 服务工具是 ISC DHCP Server。DHCP 服务的目的是给主机提供必要的网络信息以便能够和其他连接在网络中的主机互相通信。DHCP 服务提供的信息包括：DNS 服务器信息，网络地址（IP），子网掩码，默认网关信息，主机名等等。

![](/data/attachment/album/201512/27/201502lkxxmzmmku5cmqtr.png)

本教程介绍运行在 Debian 7.7 上 4.2.4 版的 ISC-DHCP-Server 如何管理多个虚拟局域网（VLAN），也可以非常容易应用到单一网络上。

测试用的网络是通过思科路由器使用传统的方式来管理 DHCP 租约地址的。目前有 12 个 VLAN 需要通过集中式服务器来管理。把 DHCP 的任务转移到一个专用的服务器上，路由器可以收回相应的资源，把资源用到更重要的任务上，比如路由寻址，访问控制列表，流量监测以及网络地址转换等。

另一个将 DHCP 服务转移到专用服务器的好处，以后会讲到，它可以建立动态域名服务器（DDNS），这样当主机从服务器请求 DHCP 地址的时候，这样新主机的主机名就会被添加到 DNS 系统里面。

### 安装和配置 ISC DHCP 服务器

1、使用 apt 工具用来安装 Debian 软件仓库中的 ISC 软件，来创建这个多宿主服务器。与其他教程一样需要使用 root 或者 sudo 访问权限。请适当的修改，以便使用下面的命令。（LCTT 译注：下面中括号里面是注释，使用的时候请删除，#表示使用的 root 权限）

```
# apt-get install isc-dhcp-server       [安装 the ISC DHCP Server 软件]
# dpkg --get-selections isc-dhcp-server     [确认软件已经成功安装]
# dpkg -s isc-dhcp-server           [用另一种方式确认成功安装]

```

![Install ISC DHCP Server in Debian](/data/attachment/album/201512/25/113138echdsvthdtyuccnl.jpg)

2、 确认服务软件已经安装完成，现在需要提供网络信息来配置服务器，这样服务器才能够根据我们的需要来分发网络信息。作为管理员最起码需要了解的 DHCP 信息如下：

* 网络地址
* 子网掩码
* 动态分配的地址范围

其他一些服务器动态分配的有用信息包括：

* 默认网关
* DNS 服务器 IP 地址
* 域名
* 主机名
* 网络广播地址

这只是能让 ISC DHCP 服务器处理的选项中非常少的一部分。如果你想查看所有选项及其描述需要在安装好软件后输入以下命令：

```
# man dhcpd.conf

```

3、 一旦管理员已经确定了这台服务器分发的所有必要信息，那么是时候配置服务器并且分配必要的地址池了。在配置任何地址池或服务器配置之前，必须配置 DHCP 服务器侦听这台服务器上面的一个接口。

在这台特定的服务器上，设置好网卡后，DHCP 会侦听名称名为`'bond0'`的接口。请适根据你的实际情况来更改服务器以及网络环境。下面的配置都是针对本教程的。

![Configure ISC DHCP Network](/data/attachment/album/201512/25/113150b7h8nn3j8xn6un9v.jpg)

这行指定的是 DHCP 服务侦听接口（一个或多个）上的 DHCP 流量。修改主配置文件，分配适合的 DHCP 地址池到所需要的网络上。主配置文件在 /etc/dhcp/dhcpd.conf。用文本编辑器打开这个文件

```
# nano /etc/dhcp/dhcpd.conf

```

这个配置文件可以配置我们所需要的地址池/主机。文件顶部有 ‘ddns-update-style‘ 这样一句，在本教程中它设置为 ‘none‘。在以后的教程中会讲到动态 DNS，ISC-DHCP-Server 将会与 BIND9 集成，它能够使主机名更新指向到 IP 地址。

4、 接下来的部分是管理员配置全局网络设置，如 DNS 域名，默认的租约时间，IP地址，子网的掩码，以及其它。如果你想了解所有的选项，请阅读 man 手册中的 dhcpd.conf 文件，命令如下：

```
# man dhcpd.conf

```

对于这台服务器，我们需要在配置文件顶部配置一些全局网络设置，这样就不用到每个地址池中去单独设置了。

![Configure ISC DDNS](/data/attachment/album/201512/25/113154sxdiqtqphzp1mt6p.png)

我们花一点时间来解释一下这些选项，在本教程中虽然它们是一些全局设置，但是也可以单独的为某一个地址池进行配置。

* option domain-name “comptech.local”; – 所有使用这台 DHCP 服务器的主机，都将成为 DNS 域 “comptech.local” 的一员
* option domain-name-servers 172.27.10.6; DHCP 向所有配置这台 DHCP 服务器的的网络主机分发 DNS 服务器地址为 172.27.10.6
* option subnet-mask 255.255.255.0; – 每个网络设备都分配子网掩码 255.255.255.0 或 /24
* default-lease-time 3600; – 默认有效的地址租约时间（单位是秒）。如果租约时间耗尽，那么主机可以重新申请租约。如果租约完成，那么相应的地址也将被尽快回收。
* max-lease-time 86400; – 这是一台主机所能租用的最大的租约时间（单位为秒）。
* ping-check true; – 这是一个额外的测试，以确保服务器分发出的网络地址不是当前网络中另一台主机已使用的网络地址。
* ping-timeout; – 在判断地址以前没有使用过前，服务器将等待 ping 响应多少秒。
* ignore client-updates; 现在这个选项是可以忽略的，因为 DDNS 在前面已在配置文件中已经被禁用，但是当 DDNS 运行时，这个选项会忽略主机更新其 DNS 主机名的请求。

5、 文件中下面一行是权威 DHCP 所在行。这行的意义是如果服务器是为文件中所配置的网络分发地址的服务器，那么取消对该<ruby> 权威关键字 <rp>  （ </rp> <rt>  authoritative stanza </rt> <rp>  ） </rp></ruby>的注释。

通过去掉关键字 authoritative 前面的 ‘#’，取消注释全局权威关键字。这台服务器将是它所管理网络里面的唯一权威。

![Enable ISC Authoritative](/data/attachment/album/201512/25/113156kzkakqi2msc2672y.png)

默认情况下服务器被假定为**不是**网络上的权威服务器。之所以这样做是出于安全考虑。如果有人因为不了解 DHCP 服务的配置，导致配置不当或配置到一个不该出现的网络里面，这都将带来非常严重的连接问题。这行还可用在每个网络中单独配置使用。也就是说如果这台服务器不是整个网络的 DHCP 服务器，authoritative 行可以用在每个单独的网络中，而不是像上面截图中那样的全局配置。

6、 这一步是配置服务器将要管理的所有 DHCP 地址池/网络。简短起见，本教程只讲到配置的地址池之一。作为管理员需要收集一些必要的网络信息（比如域名，网络地址，有多少地址能够被分发等等）

以下这个地址池所用到的信息都是管理员收集整理的：网络 ID 172.27.60.0, 子网掩码 255.255.255.0 或 /24, 默认子网网关 172.27.60.1，广播地址 172.27.60.255.0 。

以上这些信息对于构建 dhcpd.conf 文件中新网络非常重要。使用文本编辑器修改配置文件添加新网络进去，这里我们需要使用 root 或 sudo 访问权限。

```
# nano /etc/dhcp/dhcpd.conf

```

![Configure DHCP Pools and Networks](/data/attachment/album/201512/25/113159yh78d07w6878td2h.png)

当前这个例子是给用 VMWare 创建的虚拟服务器分配 IP 地址。第一行显示是该网络的子网掩码。括号里面的内容是 DHCP 服务器应该提供给网络上面主机的所有选项。

第一行， range 172.27.60.50 172.27.60.254; 这一行显示的是，DHCP 服务在这个网络上能够给主机动态分发的地址范围。

第二行，option routers 172.27.60.1; 这里显示的是给网络里面所有的主机分发的默认网关地址。

最后一行， option broadcast-address 172.27.60.255; 显示当前网络的广播地址。这个地址不能被包含在要分发放的地址范围内，因为广播地址不能分配到一个主机上面。

必须要强调的是每行的结尾必须要用（;）来结束，所有创建的网络必须要在 {} 里面。

7、 如果要创建多个网络，继续创建完它们的相应选项后保存文本文件即可。配置完成以后如果有更改，ISC-DHCP-Server 进程需要重启来使新的更改生效。重启进程可以通过下面的命令来完成：

```
# service isc-dhcp-server restart

```

这条命令将重启 DHCP 服务，管理员能够使用几种不同的方式来检查服务器是否已经可以处理 dhcp 请求。最简单的方法是通过 [lsof 命令](http://www.tecmint.com/10-lsof-command-examples-in-linux/)来查看服务器是否在侦听67端口，命令如下：

```
# lsof -i :67

```

![Check DHCP Listening Port](/data/attachment/album/201512/25/113203nfb1rg8vvvlr9911.png)

这里输出的结果表明 dhcpd（DHCP 服务守护进程）正在运行并且侦听67端口。由于在 /etc/services 文件中67端口的映射，所以输出中的67端口实际上被转换成了 “bootps”。

在大多数的系统中这是非常常见的，现在服务器应该已经为网络连接做好准备，我们可以将一台主机接入网络请求DHCP地址来验证服务是否正常。

### 测试客户端连接

8、 现在许多系统使用网络管理器来维护网络连接状态，因此这个设备应该预先配置好的，只要对应的接口处于活跃状态就能够获取 DHCP。

然而当一台设备无法使用网络管理器时，它可能需要手动获取 DHCP 地址。下面的几步将演示怎样手动获取以及如何查看服务器是否已经按需要分发地址。

‘[ifconfig](http://www.tecmint.com/ifconfig-command-examples/)‘工具能够用来检查接口的配置。这台被用来测试的 DHCP 服务器的设备，它只有一个网络适配器（网卡），这块网卡被命名为 ‘eth0‘。

```
# ifconfig eth0

```

![Check Network Interface IP Address](/data/attachment/album/201512/25/113205zxppllueoljupnzp.png)

从输出结果上看，这台设备目前没有 IPv4 地址，这样很便于测试。我们把这台设备连接到 DHCP 服务器并发出一个请求。这台设备上已经安装了一个名为 ‘dhclient‘ 的DHCP客户端工具。因为操作系统各不相同，所以这个客户端软件也是互不一样的。

```
# dhclient eth0

```

![Request IP Address from DHCP](/data/attachment/album/201512/25/113207dyru6frkmryj0mr5.png)

当前 `'inet addr:'` 字段中显示了属于 172.27.60.0 网络地址范围内的 IPv4 地址。值得欣慰的是当前网络还配置了正确的子网掩码并且分发了广播地址。

到这里看起来还都不错，让我们来测试一下，看看这台设备收到新 IP 地址是不是由服务器发出的。这里我们参照服务器的日志文件来完成这个任务。虽然这个日志的内容有几十万条，但是里面只有几条是用来确定服务器是否正常工作的。这里我们使用一个工具 ‘tail’，它只显示日志文件的最后几行，这样我们就可以不用拿一个文本编辑器去查看所有的日志文件了。命令如下：

```
# tail /var/log/syslog

```

![Check DHCP Logs](/data/attachment/album/201512/25/113215jxwmv3cgagugvkae.png)

OK!服务器记录表明它分发了一个地址给这台主机 (HRTDEBXENSRV)。服务器按预期运行，给它充当权威服务器的网络分发了适合的网络地址。至此 DHCP 服务器搭建成功并且运行。如果有需要你可以继续配置其他的网络，排查故障，确保安全。

在以后的Debian教程中我会讲一些新的 ISC-DHCP-Server 功能。有时间的话我将写一篇关于 Bind9 和 DDNS 的教程，融入到这篇文章里面。

---

via: <http://www.tecmint.com/install-and-configure-multihomed-isc-dhcp-server-on-debian-linux/>

作者：[Rob Turner](http://www.tecmint.com/author/robturner/) 译者：[ivo-wang](https://github.com/ivo-wang) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


Linux/Unix 桌面趣事：让桌面下雪

Summary: 在这个节日里感到孤独么？试一下 Xsnow 吧。它是一个可以在 Unix/Linux 桌面下下雪的应用。圣诞老人和他的驯鹿会在屏幕中奔跑，伴随着雪片让你感受到节日的感觉。 我第一次安装它还是在 13、4 年前。它最初是在 1984 年 Macintosh 系统中创造的。你可以用下面的方法来安装： 安装 xsnow Debian/Ubuntu/Mint 用户用下面的命令： $ sudo apt-get install xsnow  Freebsd 用户输入下面的命令： # cd /usr/ports/x11/xsnow/ # make install clean  或者尝试添加包： # pkg_add -r xsnow  其他发行版的方法  Fedora/RHEL/CentOS 在 rpmfusion

有趣！

不错呀

不错呀

fedora 23 gnome-shell 3.18 上没有任何效果。

mint17.2 无效果

显示效果是常驻的吗？不会关掉终端就结束吧？

Arch+awesome 无效果

DEEPIN 不行呀！！！！无任何反映！！！！

ubuntu 15.10 也没有效果，不知道是不是我电脑的问题。

我的也是ubuntu, 怎么就不行

忘了，我那时实在fvwm下试的。。。

我在Ubuntu中试了，不行。<br />
我的Ubuntu中装了Cairo-Dock,是不是因为这个原因？

新的 Linux 桌面可能采用了不同的显示技术/显示服务器，所以有可能不行了，毕竟这个程序有十多年没更新了

难道只有我觉得这个东东好丑么？其他人为啥那么兴奋？

这个玩意似乎是用X WIndow直接写的，又没人维护，真看起来，就是大约上世纪末的电脑风格的东西吧。

KDE5下试了，不行，这个程序太老了

还不错，有圣诞节的问道

在这个节日里感到孤独么？试一下 Xsnow 吧。它是一个可以在 Unix/Linux 桌面下下雪的应用。圣诞老人和他的驯鹿会在屏幕中奔跑，伴随着雪片让你感受到节日的感觉。

我第一次安装它还是在 13、4 年前。它最初是在 1984 年 Macintosh 系统中创造的。你可以用下面的方法来安装：

### 安装 xsnow

Debian/Ubuntu/Mint 用户用下面的命令：

```
$ sudo apt-get install xsnow

```

Freebsd 用户输入下面的命令：

```
# cd /usr/ports/x11/xsnow/
# make install clean

```

或者尝试添加包：

```
# pkg_add -r xsnow

```

#### 其他发行版的方法

1. Fedora/RHEL/CentOS 在 [rpmfusion](http://rpmfusion.org/Configuration) 仓库中找找。
2. Gentoo 用户试下 Gentoo portage，也就是[emerge -p xsnow](http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1)
3. Opensuse 用户使用 yast 搜索 xsnow

### 我该如何使用 xsnow？

打开终端（程序 > 附件 > 终端），输入下面的额命令启动 xsnow：

```
$ xsnow

```

示例输出:

![](/data/attachment/album/201512/25/144759v3z84b28bmdhkhmk.jpg)

*图01: 在 Linux 和 Unix 桌面中显示雪花*

你可以设置背景为蓝色，并让它下白雪，输入：

```
$ xsnow -bg blue -sc snow

```

设置最大的雪片数量，并让它尽可能快地掉下，输入：

```
$ xsnow -snowflakes 10000 -delay 0

```

不要显示圣诞树和圣诞老人满屏幕地跑，输入：

```
$ xsnow -notrees -nosanta

```

关于 xsnow 更多的信息和选项，在命令行下输入 man xsnow 查看手册：

```
$ man xsnow

```

建议阅读

* 官网[下载 Xsnow](http://rpmfusion.org/Configuration)
* 注意 [MS-Windows](http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1) 和 [Mac OS X](http://dropmix.xs4all.nl/rick/Xsnow/) 版本有一次性的共享软件费用。

---

via: <http://www.cyberciti.biz/tips/linux-unix-xsnow.html>

作者：Vivek Gite 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux/Unix 桌面趣事：蒸汽火车

Summary: 你是不是经常把 ls 输入成了 sl。我已经设置了一个别名，也就是 alias sl=ls。但是这样你也许就错过了这辆带汽笛的蒸汽小火车了。 sl 是一个搞笑软件或，也是一个 Unix 游戏。它会在你错误地把ls输入成sl（Steam Locomotive）后出现一辆蒸汽火车穿过你的屏幕。 安装 sl 在 Debian/Ubuntu 下输入下面的命令： # apt-get install sl  它同样也在 Freebsd 和其他类Unix的操作系统上存在。 下面，让我们把 ls 输错成 sl： $ sl   图01: 如果你把 ls 输入成 sl ，蒸汽火车会穿过你的屏幕。 它同样支持下面的选项：  -a : 似乎发生了意外。你会

这么多年了，还是小火车、小火车、小火车...

好吧，我觉得也该弄个无人机啦~~:D

对火车的不完全统计……可将本页的网址的article后面的四位数字(6795)更改为1212/2831/5674/5763/5816/6130/6267/6795中的任何一个。

试试发送直连

https://linux.cn/article-1212-1.html

https://linux.cn/article-2831-1.html

https://linux.cn/article-5674-1.html

https://linux.cn/article-5763-1.html

https://linux.cn/article-5816-1.html

https://linux.cn/article-6130-1.html

https://linux.cn/article-6267-1.html

https://linux.cn/article-6795-1.html

重复一下也不错，给还不知道的人看。

你够狠！:D

哈哈！

你是不是[经常](http://www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html)把 ls 输入成了 sl。我已经设置了[一个别名](http://bash.cyberciti.biz/guide/Create_and_use_aliases)，也就是 `alias sl=ls`。但是这样你也许就错过了这辆带汽笛的蒸汽小火车了。

sl 是一个搞笑软件或，也是一个 Unix 游戏。它会在你错误地把“ls”输入成“sl”（Steam Locomotive）后出现一辆蒸汽火车穿过你的屏幕。

### 安装 sl

在 Debian/Ubuntu 下输入下面的命令：

```
# apt-get install sl

```

它同样也在 Freebsd 和其他类Unix的操作系统上存在。

下面，让我们把 ls 输错成 sl：

```
$ sl

```

![Fig.01: Run steam locomotive across the screen if you type "sl" instead of "ls"](/data/attachment/album/201512/25/145906yagt84326fzii83t.png)

*图01: 如果你把 “ls” 输入成 “sl” ，蒸汽火车会穿过你的屏幕。*

它同样支持下面的选项：

* **-a** : 似乎发生了意外。你会为那些哭喊求助的人们感到难过。
* **-l** : 显示小一点的火车
* **-F** : 它居然飞走了
* **-e** : 允许被 Ctrl+C 中断

---

via: <http://www.cyberciti.biz/tips/displays-animations-when-accidentally-you-type-sl-instead-of-ls.html>

作者：Vivek Gite 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux/Unix 桌面趣事：ASCII 艺术水族箱

Summary: 你可以在你的终端中使用 ASCIIQuarium 安全地欣赏海洋的神秘了。它是一个用 perl 写的 ASCII 艺术水族箱/海洋动画。 安装 Term::Animation 首先你需要安装名为 Term-Animation 的perl模块。打开终端（选择程序  附件  终端），并输入： $ sudo apt-get install libcurses-perl $ cd /tmp $ wget http://search.cpan.org/CPAN/authors/id/K/KB/KBAUCOM/Term-Animation-2.4.tar.gz $ tar -zxvf Term-Animation-2.4.tar.gz $ cd Term-Animation-2.4/ $ perl Makefile.PL  make  make test $ sudo make install  下载安装 ASCIIQuarium 接着在

看到这个，我想起了上初中的时候，在 Windows 系统上玩过的一款小游戏。控制轮船左右移动，投弹……记不清是什么名字了。

潜艇大战

桌面弹球

潜艇大战，好游戏 就是再也找不到当年的版本了……

对！对！对！就是这个！

好萌的一堆鱼~

这个必须点赞，对推广很有意义。

你可以在你的终端中使用 ASCIIQuarium 安全地欣赏海洋的神秘了。它是一个用 perl 写的 ASCII 艺术水族箱/海洋动画。

### 安装 Term::Animation

首先你需要安装名为 Term-Animation 的perl模块。打开终端（选择程序 > 附件 > 终端），并输入：

```
$ sudo apt-get install libcurses-perl
$ cd /tmp
$ wget http://search.cpan.org/CPAN/authors/id/K/KB/KBAUCOM/Term-Animation-2.4.tar.gz
$ tar -zxvf Term-Animation-2.4.tar.gz
$ cd Term-Animation-2.4/
$ perl Makefile.PL && make && make test
$ sudo make install

```

### 下载安装 ASCIIQuarium

接着在终端中输入：

```
$ cd /tmp
$ wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz
$ tar -zxvf asciiquarium.tar.gz
$ cd asciiquarium_1.0/
$ sudo cp asciiquarium /usr/local/bin
$ sudo chmod 0755 /usr/local/bin/asciiquarium

```

### 我怎么观赏 ASCII 水族箱?

输入下面的命令：

```
$ /usr/local/bin/asciiquarium

```

或者

```
$ perl /usr/local/bin/asciiquarium

```

![Fig.01: ASCII Aquarium](/data/attachment/album/201512/25/152912u4yng3yg4ggr3z3e.png)

*ASCII 水族箱*

### 相关媒体

### 下载：ASCII Aquarium 的 KDE 和 Mac OS X 版本

[点此下载 asciiquarium](http://www.robobunny.com/projects/asciiquarium/html/)。如果你运行的是 Mac OS X，试下这个可以直接使用的已经打包好的[版本](http://habilis.net/macasciiquarium/)。对于 KDE 用户，试试基于 Asciiquarium 的[KDE 屏幕保护程序](http://kde-look.org/content/show.php?content=29207)

---

via: <http://www.cyberciti.biz/tips/linux-unix-apple-osx-terminal-ascii-aquarium.html>

作者：Vivek Gite 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


真的，Perl 6 发布了！！！——我们已经等了整整十五年！

Summary: Larry Wall 发布消息：Perl 6 于 2015 年 12 月 25 日 22:00 GMT 时间发布了！按照承诺，发布了测试套件和编译器。愿上帝保佑我们每个人。    Hello，听，听，听！注意！大家请注意了！！！ 喔，谢谢大家。 嗨，我是卡梅丽娅（Camelia）（LCTT 译注：这是 Perl 6 的 logo 的名字），认识我吧（也许不认识呢）。他们告诉我，我需要在 Perl 6 官方发布会（Perl 6s official Coming Out Party）上作个讲话，所以我就来了。嗯，他们是棋手，而我只是一枚棋子。他们还跟我强调要严肃点，呃，说的好像我知道怎么认真演讲一样，玩真的吗？ 好吧好

几周前，PHP7发布，现在Perl6也发布了

不会 Perl

我们的编程语言又进步了，是吧？是吧！

>
> **Larry Wall [发布消息](https://twitter.com/TimToady/status/680511168713064448)：Perl 6 于 2015 年 12 月 25 日 22:00 GMT 时间发布了！按照承诺，发布了测试套件和编译器。愿上帝保佑我们每个人。**
>
>
>

![Perl 6  的 LOGO： Camelia](/data/attachment/album/201512/26/181829nnhu22zzlhxv2c55.png)

Hello，听，听，听！注意！——大家请注意了！！！

喔，谢谢大家。

嗨，我是<ruby> 卡梅丽娅 <rp>  （ </rp> <rt>  Camelia </rt> <rp>  ） </rp></ruby>（LCTT 译注：这是 Perl 6 的 logo 的名字），认识我吧（也许不认识呢）。他们告诉我，我需要在 <ruby> Perl 6 官方发布会 <rp>  （ </rp> <rt>  Perl 6’s official Coming Out Party </rt> <rp>  ） </rp></ruby>上作个讲话，所以我就来了。嗯，他们是棋手，而我只是一枚棋子。他们还跟我强调要严肃点，呃，说的好像我知道怎么认真演讲一样，玩真的吗？

好吧好吧，严肃一些，首先我要感谢所有今天“<ruby> 走出来 <rp>  （ </rp> <rt>  coming out </rt> <rp>  ） </rp></ruby>”的人。

呃，我好像说错了什么。呃，抱歉，我不是指“<ruby> 出柜 <rp>  （ </rp> <rt>  coming out </rt> <rp>  ） </rp></ruby>”的那个意思……

但是，感谢您的到来。今天是 Perl 6 的大日子，从现在起，她成年了。或者说快成年了吧。反正，她可以正式上路了。看着吧，全世界!

*[从后排传来了一些听不清的议论]*

(旁白)额，我之前是不是不应该多嘴的？我并不是说她剐坏了那些翼子板什么的。好吧，无论如何，让继续吧。我相信从现在起她会是一个好司机。

不管怎样，我已经对 Perl 6 着迷不已，因为我就是一只<ruby> 蝴蝶 <rp>  （ </rp> <rt>  butterfly </rt> <rp>  ） </rp></ruby>啊（LCTT 译注，Perl 6 的 logo 就是一只蝴蝶，见题图）。我花了很长一段时间才从蝶蛹里<ruby> 走出来 <rp>  （ </rp> <rt>  coming out </rt> <rp>  ） </rp></ruby>。是真正意义上的走出来，走出来，走出来！重要的事情说三遍！

哎呀，又碰到高压线了，哈哈哈。

不管怎么说，请大家对 Perl 6 耐心点。今天，我们宣布她基本上是个大人了，但是你也知道，她毕竟还年轻啊。我们小时候，岁数有多少，我们就多大。青年时期，经历荷尔蒙的变化，我们开始变得动荡。而且一小会就振动一次。所以我们 15 岁时，波动像是能加减 10 年。所以，有时候我们会表现得像 25 岁那么成熟，有时候又会回到 5 岁般无知。

当然，Perl 6 还要更成熟些，这并不是说在她发脾气把我们逼疯时就不爱她了。我的意思是，她就像家人一样。你和家人有时疏远有时亲近，因为你知道，一家人总会慢慢亲近的。

我们和她是一个大家庭，今天聚集一堂。有人说抚养一个孩子需要有一个村庄，但是从来没有这样的孩子，也没有这样的村庄。明天宿醉醒后，有机会的话看看节目单，你会在后面看到一个感恩列表，有超过 800 个人的名字！他们通过相同或者不同方式，积极地为 Perl 6 的发展做出了贡献。当然，有些名字无法一一列出。

我说的不是你，我说的是在座的各位，你们全是伟大的人！不仅仅是家庭里最亲近的成员。这个家庭很久以前就意识到，对于一个不断发展的编程语言来说，一些最有价值的建议都是来自直系成员之外。来自朋友和熟人的要比家里的更多。所以说需要一个村庄。

成熟是一个分形的概念，它可以在不同的尺度上说。你们全是 Perl 6 走向互联网的代表。眼前是一个粗暴的世界，多亏有你们， Perl 6 已经为它做好了一些准备。

当然，她才仅仅 15 岁，有些事她做的很好，她的沟通技巧很棒，如果她不认识你的时候也很守礼。她能够同时做几个对话，她在数学方面很棒，在操作各种对象时也技巧谙熟，她喜欢外语以及那些有趣的字母。

但是她仍然是个孩子，有时候学习一些东西时觉得有点困难。没关系，接下来几年她会越来越快，越来越有效率，她的大脑也会自我进化得像个成年人一样。她会学习很多东西，包括这个世界和她自己。但是我觉得她的个性是改不了的，至少现在看来如此。

这是因为她的个性都是来自你们。你们全都爱着她，现在，她已经准备好把这些爱传递给她未曾谋面的人。

当火箭发射时我们全都会很兴奋！TimToady（LCTT 译注：即 [Larry Wall](https://twitter.com/TimToady)）告诉我凌晨起床去看水星、双子座和阿波罗火箭起飞。我年纪太小，记不清那些。不过我们也有我们自己激动人心的事情要关注。我是非常高兴看到 SpaceX 火箭本周回收成功，虽然有点磕磕碰碰……

![](/data/attachment/album/201512/26/181831py4keifl4kuctftf.png)

*SpaceX 火箭发射回收成功*

*[又一些听不清的议论]*

(旁白)抱歉，我没注意到你。我们确实会忽视某些人，不要成为之一。

好吧，幸灾乐祸的人我也很讨厌。

不管怎么说，Perl 6 的发布挺像火箭发射。倒计时的时候会很紧张，当你在想它是发射成功还是爆炸时会情不自禁的屏住呼吸。这就像我们现在的情况，主引擎已经点火，夹具已经放开。看起来非常戏剧性，主要是因为目前看来不会出大娄子。

但是这并不是火箭发射，戏剧性也不是火箭发射所想要的。火箭要的是发射！越来越快，越来越快！无关高度，甚至无关速度，要的是加速度。

*[让我们举杯]*

所以，Perl 6 破茧了，她可以自由飞翔了。因其成长而快乐，因其发现而欢愉，不断加速吧！干杯！

*感谢 @soooogreen 的校对补完。*


黑客利用 Wi-Fi 攻击你的七种方法

Summary: 黑客利用 Wi-Fi 侵犯你隐私的七种方法 Wi-Fi  啊，你是如此的方便，却又如此的危险！ 这里给大家介绍一下通过 Wi-Fi 连接慷慨捐赠你的身份信息的七种方法和反制措施。  利用免费热点 它们似乎无处不在，而且它们的数量会在接下来四年里增加三倍。但是它们当中很多都是不值得信任的，从你的登录凭证、email 甚至更加敏感的账户，都能被黑客用嗅探器（sniffers）软件截获  这种软件能截获到任何你通过该连接提交的信息。防止被黑客盯上的最好办法就是使用VPN（虚拟私有网virtual private network），它加密了你所输入的信息，因此能够保护你

赶紧打开网银看了一下余额，还好仍然是0，万一多了，咋整。。。

以后多注意下

![](/data/attachment/album/201512/28/150402led74zjk6d7f3w0b.jpg)

### 黑客利用 Wi-Fi 侵犯你隐私的七种方法

Wi-Fi — 啊，你是如此的方便，却又如此的危险！

这里给大家介绍一下通过 Wi-Fi 连接“慷慨捐赠”你的身份信息的七种方法和反制措施。

![](/data/attachment/album/201512/28/150403q2353vv9225l3ztu.jpg)

### 利用免费热点

它们似乎无处不在，而且它们的数量会在[接下来四年里增加三倍](http://www.pcworld.com/article/243464/number_of_wifi_hotspots_to_quadruple_by_2015_says_study.html)。但是它们当中很多都是不值得信任的，从你的登录凭证、email 甚至更加敏感的账户，都能被黑客用“<ruby> 嗅探器 <rp>  （ </rp> <rt>  sniffer </rt> <rp>  ） </rp></ruby>”软件截获 — 这种软件能截获到任何你通过该连接提交的信息。防止被黑客盯上的最好办法就是使用VPN（<ruby> 虚拟私有网 <rp>  （ </rp> <rt>  virtual private network </rt> <rp>  ） </rp></ruby>），它加密了你所输入的信息，因此能够保护你的数据隐私。

![](/data/attachment/album/201512/28/150403fzoh7nk25k8bxphg.jpg)

### 网上银行

你可能认为没有人需要被提醒不要使用免费 Wi-Fi 来操作网上银行, 但网络安全厂商卡巴斯基实验室表示**[全球超过100家银行因为网络黑客而损失9亿美元](http://www.nytimes.com/2015/02/15/world/bank-hackers-steal-millions-via-malware.html?hp&action=click&pgtype=Homepage&module=first-column-region%C2%AEion=top-news&WT.nav=top-news&_r=3)**，由此可见还是有很多人因此受害。如果你确信一家咖啡店的免费 Wi-Fi 是正规的，想要连接它，那么你应该向服务员确认网络名称。[其他人在店里用路由器设置一个开放的无线连接](http://news.yahoo.com/blogs/upgrade-your-life/banking-online-not-hacked-182159934.html)，并将它的网络名称设置成店名是一件相当简单的事。

![](/data/attachment/album/201512/28/150404kdc4lv9w3ml3973w.jpg)

### 始终开着 Wi-Fi 开关

如果你手机的 Wi-Fi 开关一直开着的，你会自动被连接到一个不安全的网络中去，你甚至都没有意识到。你可以利用你手机中[基于位置的 Wi-Fi 功能](http://pocketnow.com/2014/10/15/should-you-leave-your-smartphones-wifi-on-or-turn-it-off)，如果有这种功能的话，那它会在你离开你所保存的网络范围后自动关闭你的 Wi-Fi 开关并在你回去之后再次开启。

![](/data/attachment/album/201512/28/150404re00e2vverrhfnfv.jpg)

### 不使用防火墙

防火墙是你的第一道抵御恶意入侵的防线，它能有效地让你的电脑网络保持通畅并阻挡黑客和恶意软件。你应该时刻开启它除非你的杀毒软件有它自己的防火墙。

![](/data/attachment/album/201512/28/150405eba2m6aa5yygu1b3.jpg)

### 浏览非加密网页

说起来很难过，**[世界上排名前100万个网站中55%是不加密的](http://www.cnet.com/news/chrome-becoming-tool-in-googles-push-for-encrypted-web/)**，一个未加密的网站会让一切传输数据暴露在黑客的眼中。如果一个网页是安全的，你的浏览器则会有标明（比如说火狐浏览器是一把灰色的挂锁，Chrome 浏览器则是个绿锁图标）。但是即使是安全的网站不能让你免于被劫持的风险，他们能通过公共网络从你访问过的网站上窃取 cookies，无论是不是正规网站。

![](/data/attachment/album/201512/28/150405x3e7ez113e7g3vb2.jpg)

### 不更新你的安全防护软件

如果你想要确保你自己的网络是受保护的，就更新路由器固件。你要做的就是进入你的路由器管理页面去检查，通常你能在厂商的官方网页上下载到最新的固件版本。

![](/data/attachment/album/201512/28/150405azqsozi8zqni3nb7.jpg)

### 不保护你的家用 Wi-Fi

不用说，设置一个复杂的密码和更改无线连接的默认名都是非常重要的。你还可以过滤你的 MAC 地址来让你的路由器只识别那些确认过的设备。

本文作者 **Josh Althuser** 是一个开源支持者、网络架构师和科技企业家。在过去12年里，他花了很多时间去倡导使用开源软件来管理团队和项目，同时为网络应用程序提供企业级咨询并帮助它们把产品推向市场。你可以通过[他的推特](https://twitter.com/JoshAlthuser)联系他。

---

via: <http://www.networkworld.com/article/3003170/mobile-security/7-ways-hackers-can-use-wi-fi-against-you.html>

作者：[Josh Althuser](https://twitter.com/JoshAlthuser) 译者：[ZTinoZ](https://github.com/ZTinoZ) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何在 Ubuntu 15.04 / CentOS 7 上安装 Android Studio

Summary: 随着最近几年智能手机的进步，安卓成为了最大的手机平台之一，在开发安卓应用中所用到的所有工具也都可以免费得到。Android Studio 是基于 IntelliJ IDEA 用于开发安卓应用的集成开发环境（IDE）。它是 Google 2014 年发布的免费开源软件，继 Eclipse 之后成为主要的 IDE。 在这篇文章，我们一起来学习如何在 Ubuntu 15.04 和 CentOS 7 上安装 Android Studio。  在 Ubuntu 15.04 上安装 我们可以用两种方式安装 Android Studio。第一种是配置所需的库然后再安装它；另一种是从 Android 官方网站下载然后在本地编译安装。在下面的例子中，

赞一个

随着最近几年智能手机的进步，安卓成为了最大的手机平台之一，在开发安卓应用中所用到的所有工具也都可以免费得到。Android Studio 是基于 [IntelliJ IDEA](https://www.jetbrains.com/idea/) 用于开发安卓应用的集成开发环境（IDE）。它是 Google 2014 年发布的免费开源软件，继 Eclipse 之后成为主要的 IDE。

在这篇文章，我们一起来学习如何在 Ubuntu 15.04 和 CentOS 7 上安装 Android Studio。

![](/data/attachment/album/201512/28/152525u9ot743o4n5t8n9v.jpg)

### 在 Ubuntu 15.04 上安装

我们可以用两种方式安装 Android Studio。第一种是配置所需的库然后再安装它；另一种是从 Android 官方网站下载然后在本地编译安装。在下面的例子中，我们会使用命令行设置库并安装它。在继续下一步之前，我们需要确保我们已经安装了 JDK 1.6 或者更新版本。

这里，我打算安装 JDK 1.8。

```
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer oracle-java8-set-default

```

验证 java 是否安装成功：

```
poornima@poornima-Lenovo:~$ java  -version

```

现在，设置安装 Android Studio 需要的库

```
$ sudo apt-add-repository ppa:paolorotolo/android-studio

```

![Android-Studio-repo](/data/attachment/album/201512/28/152535vfgcgdcrncokdg3w.png)

```
$ sudo apt-get update
$ sudo apt-get install android-studio

```

上面的安装命令会在 /opt 目录下面安装 Android Studio。

现在，运行下面的命令启动安装向导：

```
$ /opt/android-studio/bin/studio.sh

```

这会激活安装窗口。下面的截图展示了安装 Android Studio 的过程。

![安装 Android Studio](/data/attachment/album/201512/28/152536lu4qpzpaup66abg7.png)

![安装类型](/data/attachment/album/201512/28/152536a18845k55uklloou.png)

![设置模拟器](/data/attachment/album/201512/28/152537lb3s3ioffvspkqko.png)

你点击了 Finish 按钮之后，就会显示同意协议页面。当你接受协议之后，它就开始下载需要的组件。

![下载组件](/data/attachment/album/201512/28/152538hqyf2vpdyp2kxcif.png)

这一步完成之后就结束了 Android Studio 的安装。当你重启 Android Studio 时，你会看到下面的欢迎界面，从这里你可以开始用 Android Studio 工作了。

![欢迎界面](/data/attachment/album/201512/28/152538objgmgbh11ajj1h6.png)

### 在 CentOS 7 上安装

现在再让我们来看看如何在 CentOS 7 上安装 Android Studio。这里你同样需要安装 JDK 1.6 或者更新版本。如果你不是 root 用户，记得在命令前面使用 ‘sudo’。你可以下载[最新版本](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)的 JDK。如果你已经安装了一个比较旧的版本，在安装新的版本之前你需要先卸载旧版本。在下面的例子中，我会通过下载需要的 rpm 包安装 JDK 1.8.0\_65。

```
[root@li1260-39 ~]# rpm -ivh jdk-8u65-linux-x64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8.0_65-2000:1.8.0_65-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
jfxrt.jar...

```

如果没有正确设置 Java 路径，你会看到错误信息。因此，设置正确的路径：

```
export JAVA_HOME=/usr/java/jdk1.8.0_25/
export PATH=$PATH:$JAVA_HOME

```

检查是否安装了正确的版本：

```
[root@li1260-39 ~]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

```

如果你安装 Android Studio 的时候看到任何类似 “unable-to-run-mksdcard-sdk-tool:” 的错误信息，你可能要在 CentOS 7 64 位系统中安装以下软件包：

* glibc.i686
* glibc-devel.i686
* libstdc++.i686
* zlib-devel.i686
* ncurses-devel.i686
* libX11-devel.i686
* libXrender.i686
* libXrandr.i686

通过从 [Android 网站](http://developer.android.com/sdk/index.html) 下载 IDE 文件然后解压安装 studio 也是一样的。

```
[root@li1260-39 tmp]# unzip android-studio-ide-141.2343393-linux.zip

```

移动 android-studio 目录到 /opt 目录

```
[root@li1260-39 tmp]# mv /tmp/android-studio/ /opt/

```

需要的话你可以创建一个到 studio 可执行文件的符号链接用于快速启动。

```
[root@li1260-39 tmp]# ln -s /opt/android-studio/bin/studio.sh /usr/local/bin/android-studio

```

现在在终端中启动 studio：

```
[root@localhost ~]#studio

```

之后用于完成安装的截图和前面 Ubuntu 安装过程中的是一样的。安装完成后，你就可以开始开发你自己的 Android 应用了。

### 总结

虽然发布不到一年，但是 Android Studio 已经替代 Eclipse 成为了 Android 的开发最主要的 IDE。它是唯一能支持 Google 之后将要提供的 Android SDK 和其它 Android 特性的官方 IDE 工具。那么，你还在等什么呢？赶快安装 Android Studio 来体验开发 Android 应用的乐趣吧。

---

via: <http://linoxide.com/tools/install-android-studio-ubuntu-15-04-centos-7/>

作者：[B N Poornima](http://linoxide.com/author/bnpoornima/) 译者：[ictlyh](http://mutouxiaogui.cn/blog/) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


有人试图在树莓派上预装恶意软件！

Summary: 恶意软件分销商并不知道开源社区是多么痛恨网络犯罪，所以他们就被曝光到推特上了。

“某 Q 公司” “英语并不娴熟”<br />
难道是QIHU

给树莓派发这种邮件，智商感人啊

文字第三行，Q 后边好像有一串的啊，不像是这个

来自四川成都成都信息工程学院的 Sogou Explorer 2|Windows 8.1 用户

.exe文件在树莓派上运行。。。。。<br />
简直是在逗我，发邮件的简直智商感人

恶意软件分销商并不知道开源社区是多么痛恨网络犯罪，所以他们就被曝光到推特上了。

>
> 恶意软件分销商并不知道开源社区是多么痛恨网络犯罪，所以他们就被曝光到推特上了。
>
>
>

![](/data/attachment/album/201512/28/225821l6hvc62fh4sa4hjj.jpg)

树莓派基金会的<ruby> 传播总监 <rp>  （ </rp> <rt>  Director of Communications </rt> <rp>  ） </rp></ruby> Liz Upton 最近在推特上贴出了一封邮件截图，邮件显示有人试图让树莓派基金会在其所有产品上安装恶意软件。

>
> 鹅妹子嘤！有人想要给我们钱让我们在你的机器上安装恶意软件。 [pic.twitter.com/1soL0MIc5Z](https://t.co/1soL0MIc5Z)
>
>
> — Raspberry Pi (@Raspberry\_Pi) [December 23, 2015](https://twitter.com/Raspberry_Pi/status/679640660044058624)
>
>
> ![试图让树莓派预装恶意软件的邮件](/data/attachment/album/201512/28/220357t946ohh9y49yo9v9.png)
>
>
>

在该邮件中，一位名叫 Linda 的人向 Upton 夫人提出，她们公司提供一个 EXE 文件，该文件会在桌面上建立一个快捷方式，用户点击即可访问到一个特定的网站。（树莓派也可以运行 Windows，不仅仅是 Linux）

这位来自某 Q 公司的 Linda 也询问了树莓派基金会的 PPI 价格（每份安装价）。

从邮件的用语可以看出其英语并不娴熟，是业务人员，这位 Linda 应该不是来自专业公司的人员。有许多公司充当恶意软件分销商和正规公司之间的中间人，冒充广告代理公司或公关公司。

就在两周前，<ruby> 数字公民联盟 <rp>  （ </rp> <rt>  Digital Citizens Alliance </rt> <rp>  ） </rp></ruby>和 RiskIQ 发布了一份报告称，BT 站点可以通过恶意文件或受感染的种子文件来散发恶意软件给他们的访问者，从而每年[牟取了 7 千万美金](http://news.softpedia.com/news/torrent-sites-earned-70-million-to-drop-malware-on-their-visitors-497470.shtml)。

### 联系开源社区的公司并没有想到其邮件会被曝光

树莓派基金会有多达 5 百万的用户基础，恶意软件分销商肯定对此垂涎欲滴，希望能将他们的恶意代码隐藏在市场上最热的产品固件之中。

树莓派这块信用卡大小的廉价电脑已经用在了物联网方面，黑客可以通过它来访问到其所运行的高安全的环境中。

因为当前还没有可以运行在物联网设备上的安全软件，如果感染了恶意软件，它会持续运行很多年——直到你擦除了固件——而这在产品环境中很少发生。

如果树莓派基金会不是和 Linux 基金会关系密切，而且遵循其开放原则，让社区构建软件，我们可能就得对此担忧了。

在网上有很多人说，绝大多数的树莓派都是运行在 Linux 下，EXE 文件根本没用。其实这并不是关键。发送这封邮件的人显然没有专业水准。这篇文章真正的着眼点是，**恶意软件分销商在不断地寻找可以注入他们的恶意软件的新客户端**，而并不是讨论这封邮件本身的技术问题。


揭秘朝鲜的“可管可控”的红星操作系统

Summary: 上周日在汉堡举行的混沌通讯大会（Chaos Communication congress）上，两位来自德国的 IT 安全公司 ERNW GmbH的研究人员揭秘了朝鲜的红星操作系统（Red Star OS）的一些安全细节。   正如我们之前听到的消息那样，朝鲜的红星操作系统基于 Fedora Linux，目前的版本拥有类似 Mac OS 的外观。也许你认为它是一个安全的系统，或许是吧只是可能和大部分人的标准不同。可能由于红星操作系统是由朝鲜政府所支持开发的，该操作系统在对安全方面上做到了一定程度的可管可控。 两位来自德国的 IT 安全公司 ERNW GmbH的研究人员 Florian Grunow 和 N

big brother

东亚试验田<br />
接下来就是西朝鲜

呵呵呵

>
> 上周日在汉堡举行的<ruby> 混沌通讯大会 <rp>  （ </rp> <rt>  Chaos Communication congress </rt> <rp>  ） </rp></ruby> 上，两位来自德国的 IT 安全公司 ERNW GmbH 的研究人员揭秘了朝鲜的<ruby> 红星操作系统 <rp>  （ </rp> <rt>  Red Star OS </rt> <rp>  ） </rp></ruby>的一些安全细节。
>
>
>

![](/data/attachment/album/201512/29/075615wuie4nwubbqzwmnn.jpg)

正如我们之前听到的[消息](/article-4626-1.html)那样，朝鲜的红星操作系统基于 Fedora Linux，目前的版本拥有类似 Mac OS 的[外观](/article-2541-1.html)。也许你认为它是一个安全的系统，或许是吧——只是可能和大部分人的标准不同。可能由于红星操作系统是由朝鲜政府所支持开发的，该操作系统在对“安全”方面上做到了一定程度的“可管可控”。

两位来自德国的 IT 安全公司 ERNW GmbH 的研究人员 Florian Grunow 和 Niklaus Schiess 深入研究了该操作系统，检查了其代码和运行方式。这个朝鲜本土制造的操作系统控制了其使用的许多方面，包括加密。这表明了朝鲜政府对西方通过软件进行渗透干预的担心。

他们从一个来自朝鲜境外的网站上下载到了该操作系统的镜像。从演示视频可以看到，操作系统的镜像大概有 2.5G。他们用 VMWare 的虚拟机安装了该操作系统。

他们告诉路透社：“金正日说朝鲜应该开发自己的操作系统，现在他们已经做到了。”由于平壤担心来自西方的干预和间谍活动，所以不是拥抱互联网而是构建了其国家局域网，仅允许访问官方媒体和几个官方许可的几个网站，但是朝鲜民众对此表示情绪稳定。

这一系统已经开发了超过十年，最新的版本大约开发于 2013 年，基于 Fedora Linux，放弃了之前的 Windows XP 风格的界面，而采用了 Mac OS 风格。这可能是来自金正恩的个人偏好，之前有照片显示他附近有一台苹果计算机的样子。

![](/data/attachment/album/201512/29/092425g3o4ioe0ooefoogf.jpg)

Grunow 说，红星操作系统是“一个大部分代码处于控制之下的完整操作系统”。根据对代码的深入分析，研究人员认为该操作系统基本上是从头构建的，并且包含了防止通过技术手段以绕过限制条件的功能：

>
> “红星操作系统很难被篡改。如果用户对核心功能做了改动，比如试图禁用反病毒检查或防火墙，计算机就会显示一个错误消息或重启。”
>
>
>

开发独立的操作系统，并对代码进行控制，这或许是缘于朝鲜政府对西方通过后门进行渗透的担心。

该操作系统更危险的一个功能是，计算机上和连接的驱动器上的每个文件都会被打上水印。这可以跟踪到具体的人，政府可以据此追查某个文件的传播。Grunow 警告说：

>
> “这绝对侵犯了隐私，它对用户并不透明，会悄悄完成跟踪，即便是你从未打开过的文件也会被追踪。”
>
>
>

但是红星操作系统也解决了一个问题，可以避免地下传播盗版的电影、音乐和文字。在朝鲜，人们通常通过 USB 盘和 microSD 卡来传播非法的文件，这让政府很难跟踪。但是通过红星操作系统，可以跟踪到计算机上和连接的驱动器上的每个文件，这意味着可以追溯到所有的文件。

一位在朝鲜的外国媒体的负责人 Nat Kretchun 说，这反映了平壤意识到了“需要新的监控和安全手段来面对新技术和新信息源”。

研究人员指出，并没有迹象表明朝鲜在所被指责的网络攻击中使用了这种操作系统。Grunow 说，“看起来就像是他们为自己使用而构建的操作系统，给用户提供了基本的应用软件”，包括韩文的文字处理器、日历和编撰乐曲的应用等。

![](/data/attachment/album/201512/29/080416z300rtiukt2igwkg.png)

目前还不知道朝鲜有多少计算机运行该操作系统。从去朝鲜的游客那里听到反映说，那里的个人计算机在逐渐增多，但是大多仍旧在使用 Windows XP。

参考信息来源：[theguardian](http://www.theguardian.com/world/2015/dec/27/north-koreas-computer-operating-system-revealed-by-researchers?CMP=Share_AndroidApp_reddit_is_fun)，[betanews](http://betanews.com/2015/12/27/north-koreas-red-star-os-leaves-the-government-in-control-of-computers/)，[路透社](http://www.reuters.com/article/northkorea-computers-idUSKBN0UA0GF20151227)。


eSpeak: Linux 文本转语音工具

Summary: eSpeak是一款 Linux 命令行工具，能把文本转换成语音。它是一款简洁的语音合成器，用C语言编写而成，它支持英语和其它多种语言。 eSpeak 从标准输入或者输入文件中读取文本。虽然语音输出与真人声音相去甚远，但是，在你项目需要的时候，eSpeak 仍不失为一个简便快捷的工具。 eSpeak 部分主要特性如下：  提供给 Linux 和 Windows 的命令行工具 从文件或者标准输入中把文本读出来 提供给其它程序使用的共享库版本 为 Windows 提供 SAPI5 版本，所以它能用于 screen-readers 或者其它支持 Windows SAPI5 接口的程序 可移植到其它平台，包括

马上下载来试了一下，挺不错的。

支持中文？

不支持

可以，但需要手动添加

![Text to speech tool in Linux](/data/attachment/album/201512/29/141839xmy773m9nyt97377.jpg)

[eSpeak](http://espeak.sourceforge.net/)是一款 Linux 命令行工具，能把文本转换成语音。它是一款简洁的语音合成器，用C语言编写而成，它支持英语和其它多种语言。

eSpeak 从标准输入或者输入文件中读取文本。虽然语音输出与真人声音相去甚远，但是，在你项目需要的时候，eSpeak 仍不失为一个简便快捷的工具。

eSpeak 部分主要特性如下：

* 提供给 Linux 和 Windows 的命令行工具
* 从文件或者标准输入中把文本读出来
* 提供给其它程序使用的共享库版本
* 为 Windows 提供 SAPI5 版本，所以它能用于 screen-readers 或者其它支持 Windows SAPI5 接口的程序
* 可移植到其它平台，包括安卓，OSX等
* 提供多种声音特性选择
* 语音输出可保存为 [.WAV](http://en.wikipedia.org/wiki/WAV) 格式的文件
* 配合 HTML 部分可支持 SSML(语音合成标记语言，[Speech Synthesis Markup Language](http://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language))
* 体积小巧，整个程序连同语言支持等占用小于2MB
* 可以实现文本到音素编码（phoneme code）的转化，因此可以作为其它语音合成引擎的前端工具
* 开发工具可用于生产和调整音素数据

### 安装 eSpeak

基于 Ubuntu 的系统中，在终端运行以下命令安装 eSpeak：

```
sudo apt-get install espeak

```

eSpeak 是一个古老的工具，我推测它应该能在其它众多 Linux 发行版中运行，比如 Arch，Fedora。使用 dnf，pacman 等命令就能轻松安装。

eSpeak 用法如下：输入 espeak 运行程序。输入字符按 enter 转换为语音输出（LCTT 译注：补充）。使用 Ctrl+C 来关闭运行中的程序。

![eSpeak command line](/data/attachment/album/201512/29/141839v9npf9h9yg9gc3gb.png)

还有一些其他的选项可用，可以通过程序帮助进行查看。

### GUI 版本：Gespeaker

如果你更倾向于使用 GUI 版本，可以安装 Gespeaker，它为 eSpeak 提供了 GTK 界面。

使用以下命令来安装 Gespeaker：

```
sudo apt-get install gespeaker

```

操作界面简明易用，你完全可以自行探索。

![eSpeak GUI tool for text to speech in Ubuntu](/data/attachment/album/201512/29/141840ob2gvypovw4vp3bv.png)

虽然这些工具在大多数计算任务下用不到，但是当你的项目需要把文本转换成语音时，使用 espeak 还是挺方便的。是否使用 espeak 这款语音合成器，选择权就交给你们啦。

---

via: <http://itsfoss.com/espeak-text-speech-linux/>

作者：[Abhishek](http://itsfoss.com/author/abhishek/) 译者：[soooogreen](https://github.com/soooogreen) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux 中如何通过命令行访问 Dropbox

Summary: 在当今这个多设备的环境下，云存储无处不在。无论身处何方，人们都想通过多种设备来从云存储中获取所需的内容。由于拥有漂亮的 UI 和完美的跨平台兼容性，Dropbox 已成为最为广泛使用的云存储服务。 Dropbox 的流行已引发了一系列官方或非官方 Dropbox 客户端的出现，它们支持不同的操作系统平台。  当然 Linux 平台下也有着自己的 Dropbox 客户端： 既有命令行的，也有图形界面客户端。Dropbox Uploader 是一个简单易用的 Dropbox 命令行客户端，它是用 Bash 脚本语言所编写的（LCTT 译注：对，你没看错， 就是 Bash）。在这篇教程中，我

这个好，树莓派也能用碉堡盒辣！

很cool，可惜我的openwrt不能用

在当今这个多设备的环境下，云存储无处不在。无论身处何方，人们都想通过多种设备来从云存储中获取所需的内容。由于拥有漂亮的 UI 和完美的跨平台兼容性，Dropbox 已成为最为广泛使用的云存储服务。 Dropbox 的流行已引发了一系列官方或非官方 Dropbox 客户端的出现，它们支持不同的操作系统平台。

![](/data/attachment/album/201512/29/144554tccvqeicev0ukcuv.jpg)

当然 Linux 平台下也有着自己的 Dropbox 客户端： 既有命令行的，也有图形界面客户端。[Dropbox Uploader](http://www.andreafabrizi.it/?dropbox_uploader) 是一个简单易用的 Dropbox 命令行客户端，它是用 Bash 脚本语言所编写的（LCTT 译注：对，你没看错， 就是 Bash）。在这篇教程中，我将描述 **在 Linux 中如何使用 Dropbox Uploader 通过命令行来访问 Dropbox**。

### Linux 中安装和配置 Dropbox Uploader

要使用 Dropbox Uploader，你需要下载该脚本并使其可被执行。

```
$ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
$ chmod +x dropbox_uploader.sh

```

请确保你已经在系统中安装了 `curl`，因为 Dropbox Uploader 通过 curl 来运行 Dropbox 的 API。

要配置 Dropbox Uploader，只需运行 dropbox\_uploader.sh 即可。当你第一次运行这个脚本时，它将请求得到授权以使得脚本可以访问你的 Dropbox 账户。

```
$ ./dropbox_uploader.sh

```

![](/data/attachment/album/201512/29/144607z0qverzqxj20q2oj.jpg)

如上图所指示的那样，你需要通过浏览器访问 <https://www.dropbox.com/developers/apps> 页面，并创建一个新的 Dropbox app。接着像下图那样填入新 app 的相关信息，并输入 app 的名称，它与 Dropbox Uploader 所生成的 app 名称类似。

![](/data/attachment/album/201512/29/144608ew93gw1h9uq7jhz9.jpg)

在你创建好一个新的 app 之后，你将在下一个页面看到 app key 和 app secret。请记住它们。

![](/data/attachment/album/201512/29/144609vkencwmmhf9fq0yu.jpg)

然后在正运行着 dropbox*uploader.sh 的终端窗口中输入 app key 和 app secret。然后 dropbox*uploader.sh 将产生一个 oAUTH 网址(例如，[https://www.dropbox.com/1/oauth/authorize?oauth\_token=XXXXXXXXXXXX)。](https://www.dropbox.com/1/oauth/authorize?oauth_token=XXXXXXXXXXXX)%E3%80%82)

![](/data/attachment/album/201512/29/144610rrg21ifhlhgsrf2x.jpg)

接着通过浏览器访问那个 oAUTH 网址，并同意访问你的 Dropbox 账户。

![](/data/attachment/album/201512/29/144610bfye6yeeh1cb1eby.jpg)

这便完成了 Dropbox Uploader 的配置。若要确认 Dropbox Uploader 是否真的被成功地认证了，可以运行下面的命令。

```
$ ./dropbox_uploader.sh info

```

---

```
Dropbox Uploader v0.12

 > Getting info...

Name:   Dan Nanni
UID:    XXXXXXXXXX
Email:  my@email_address
Quota:  2048 Mb
Used:   13 Mb
Free:   2034 Mb

```

### Dropbox Uploader 示例

要显示根目录中的所有内容，运行：

```
$ ./dropbox_uploader.sh list

```

要列出某个特定文件夹中的所有内容，运行：

```
$ ./dropbox_uploader.sh list Documents/manuals

```

要上传一个本地文件到一个远程的 Dropbox 文件夹，使用：

```
$ ./dropbox_uploader.sh upload snort.pdf Documents/manuals

```

要从 Dropbox 下载一个远程的文件到本地，使用：

```
$ ./dropbox_uploader.sh download Documents/manuals/mysql.pdf ./mysql.pdf

```

要从 Dropbox 下载一个完整的远程文件夹到一个本地的文件夹，运行：

```
$ ./dropbox_uploader.sh download Documents/manuals ./manuals

```

要在 Dropbox 上创建一个新的远程文件夹，使用：

```
$ ./dropbox_uploader.sh mkdir Documents/whitepapers

```

要完全删除 Dropbox 中某个远程的文件夹（包括它所含的所有内容），运行：

```
$ ./dropbox_uploader.sh delete Documents/manuals

```

---

via: <http://xmodulo.com/access-dropbox-command-line-linux.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[FSSlc](https://github.com/FSSlc) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Debian 创始人在 Twitter 上宣称自杀！并已删除 Twitter 账号

Summary: 目前并不清楚是他本人所为还是遭到了入侵。   Debian Linux 发行版的创始人 Ian Murdock 在他的 Twitter 账号（已删除）上发布消息称其受到警察的暴力对待，准备自杀。  im committing suicide tonight.. do not intervene as i have many stories to tell and do not want them to die with me#debian#runnerkristy67  Ian Murdock (@imurdock)December 28, 2015  随后他又连续发布了多条推文，放弃了自杀，称会在其个人博客上详述始末。警察去拜访了他，然后把他送去了医院。  Ill write more on my blog later. But the police here be

没有其他发言人了吗？没有家属朋友吗？

目前为止，尚未任何消息。

test，test，test<br />
目前来说，我已经不用debian了，但是它是一个很好的发行版，表示关注。曾经，开发reiserfs的家伙也进去了。

虽然不用debian，不得不承认许多基于debian的Linux在Linux推广上做了很大贡献。但愿无事

Debian GNU/Linux创始人Ian Murdock不幸辞世

当地时间2015年12月30日早些时候，Debian GNU/Linux创始人伊恩·默多克（Ian Murdock）不幸辞世。此前，他曾通过Twitter表示自己遭到了警方的暴力，并且透露了要自杀的倾向。在之前的文章中，考虑到要对其家人给予隐私和尊重，我们并未深入这件事。伊恩·默多克辞世的声明，由Debian项目组的三名成员（Ana Guerrero Lopez、Donald Norwood、Paul Tagliamonte）所发出。

http://www.cnbeta.com/articles/462145.htm

卧槽 这TM是什么情况

>
> 目前并不清楚是他本人所为还是遭到了入侵。
>
>
>

![](/data/attachment/album/201512/30/095520llnpppplenuxeipi.jpg)

**更新：[旧金山警局给出了事件经过。](/article-6829-1.html)**

**更新：据 Docker 公司 消息， Ian Murdock 已经去世，终年 42 岁！目前，旧金山警局尚未有进一步说明。**

Debian Linux 发行版的创始人 Ian Murdock 在[他的 Twitter 账号](https://twitter.com/imurdock)（已删除）上发布消息称其受到警察的暴力对待，准备自杀。

>
> i’m committing suicide tonight.. do not intervene as i have many stories to tell and do not want them to die with me [#debian](https://twitter.com/hashtag/debian?src=hash) [#runnerkristy67](https://twitter.com/hashtag/runnerkristy67?src=hash)
>
>
> — Ian Murdock (@imurdock) [December 28, 2015](https://twitter.com/imurdock/status/681598929205526528)
>
>
>

随后他又连续发布了多条推文，放弃了自杀，称会在其[个人博客](http://ianmurdock.com/blog/)上详述始末。警察去“拜访”了他，然后把他送去了医院。

>
> I’ll write more on my blog later. But the police here beat me up for knowing on my neighbor’s door.. they sent me to the hospital.
>
>
> — Ian Murdock (@imurdock) [December 28, 2015](https://twitter.com/imurdock/status/681600579114672129)
>
>
>

他称他被控袭击了警察，需要2.5万美金的保释金才能获释。这意味着他要在监狱里待一段时间了。

但到目前为止，尚未见到其进一步信息，并且[其 Twitter 账号](https://twitter.com/imurdock)已被删除。

目前并不清楚这个事情的真伪，是真的受到了警察的暴力对待，还是其 Twitter 账号遭到了入侵。但是，目前看起来情况并不乐观。

一个可能是他的 Twitter 账户遭到了入侵，因为发的这些推文并不像是他平时说话的方式。他现在任职于 Docker ，社区已经有人通过 Twitter 询问了 Docker 公司，但尚未收到答复。

希望 Ian Murdock 一切都安好。

参考来源：[techaeris](http://techaeris.com/2015/12/28/debian-founder-ian-murdocks-tweets-raising-eyebrows/)、[twitter](https://twitter.com)、[softpedia](http://news.softpedia.com/news/founder-of-debian-threatens-suicide-on-twitter-and-police-abuse-allegedly-498205.shtml) 等。