Debian  创始人 Ian Murdock 先生去世，享年 42 岁！

Summary: Docker 公司宣布，著名的 Debian 创始人Ian Murdock 已经去世，享年 42 岁。他同时也是 Docker 公司员工、前 Sun 和 SalesForce 员工。 在公布该消息的文章中，并没有说明他的死因。Docker 公司拒绝对此评论。旧金山警局也没有及时提供导致Ian Murdock 死亡的原因。 当地时间本周一，他的 Twitter 账户贴了一些推文（PDF归档），表明其与警察发生了一些冲突，夜间的一则推文则说他要自杀。有人猜测其 Twitter 账户被入侵，之后，该 Twitter 账户被删除了。 Ian 率先建立了真正的开源项目和开源社区，拥抱开放设计和开放贡献；事实上开源运

何苦，太苦。

等待真相中

荣誉永存！！

何苦，太苦。

变真的了

为啥想不开啊，太可惜了。

RIP

求真相。到底发生了什么？

走好

好可惜啊

来自广东深圳南方科技大学的 Android Browser|Android 5.1 用户

到底是怎么回事？

走好

唉，。。。。。。

hero

hero

求真相

一路走好，我们会一如既往的热爱debian和开源

哎~就这样走了，至少也回来说两句啊，真tm的不负责任，快给我回来。好吧，一路走好，真可惜啊~~~~

/cry...

求真相

唉，好可惜啊。R.I.P

一路走好！Ian Murdock

表示震惊！

沉痛哀悼！

Requiescat in pace

没想到是真的！精神永存！

沉痛哀悼！

debian，debian，debian

哀悼

大神，一路走好。

感谢您所做的贡献，希望您早得解脱。

想起来了图灵，死的不明不白的

沉痛哀悼！

默哀

一路走好~~

一路走好。

一路走好

一路走好

有一个关于世界毁灭的传说，有的人可能深陷这个梦魇，回不来了，甚至自杀。只有逐步完善生态系统，能拯救自己！

# Debian  创始人 Ian Murdock 先生去世，享年 42 岁！

<img src="content_image/album_201512_31_083542iobbj6rw9z1oeeoa.jpg" alt="" title="">

**更新：[旧金山警局给出了事件经过。](/article-6829-1.html)**

**Docker 公司30日[宣布](http://blog.docker.com/2015/12/ian-murdock/)，著名的 Debian 创始人 Ian Murdock 已经去世，享年 42 岁。**

他同时也是 Docker 公司员工、之前还担任过 Linux 基金会的 CTO、 Sun 微系统的印第安纳项目的首席架构师和 SalesForce 员工。这件事情为他的家人、Debian 社区、Docker 社区以及开源世界带来了巨大悲痛。

在公布该消息的[文章](http://blog.docker.com/2015/12/ian-murdock/)中，并没有说明他的死因。Docker 公司拒绝对此评论。旧金山警局也没有及时提供导致 Ian Murdock 死亡的原因。（更新：[旧金山警局给出了事件经过。](/article-6829-1.html)）

当地时间本周一，他的 Twitter 账户贴了一些推文（[PDF 归档](https://img.sauf.ca/pictures/2015-12-29/c12fc3b2278596da4a26edd4a41f3373.pdf)），表明其与警察发生了一些冲突，夜间的一则[推文](http://webcache.googleusercontent.com/search?q=cache:umvcoAjl8SIJ:https://twitter.com/imurdock/status/681598929205526528+&cd=1&hl=en&ct=clnk&gl=us)则说[他要自杀](/article-6818-1.html)。有人猜测其 Twitter 账户被入侵，之后，该 [Twitter 账户](https://twitter.com/imurdock)被删除了。

周一晚上， Ian Murdock 去世，目前还不得而知具体事件经过。

“Ian 率先建立了真正的开源项目和开源社区，拥抱开放设计和开放贡献；事实上开源运动的指导性文件（<ruby> 开放源码定义 <rp>  （ </rp> <rt>  Open Source Definition </rt> <rp>  ） </rp></ruby>）的形成最初就是来自 Debian 的立场声明”，Docker 的 CEO，Ben Golub 在博文中写到，“这是一份来自 Ian 为开源所贡献的公约，而当前 Debian 社区已经有超过 1000 人参与到其开发之中。”

Murdock 于 1993年8月[创建了 Debian](http://ianmurdock.com/post/how-i-came-to-find-linux/)，他即是“Debian”这个名字中的“ian”。在[他的个人博客](http://ianmurdock.com/)中，他谈到了该项目的成果，“任何人都可以贡献到它所集成的软件库之中，Debian 可以说是行业内的第一个应用商店（虽然原始）”。

在过去几年，Docker 成为了[最流行的 Linux 容器](http://venturebeat.com/2015/04/14/docker-raises-95m-led-by-insight-venture-partners/)，这与他加入这个初创公司密不可分，而且他在 Linux 世界里受到广泛赞誉。在周一的 Twitter 上，很多 Debian 用户对他表示了同情和支持。Debian 社区也发布了[悼念文章](https://bits.debian.org/2015/12/mourning-ian-murdock.html)。

Debian 及广大的 Linux 社区的人们，可以发送你的哀悼信到 [in-memoriam-ian@debian.org](mailto:in-memoriam-ian@debian.org)。

参考来源：[venturebeat](http://venturebeat.com/2015/12/30/debian-founder-and-docker-employee-ian-murdock-has-died-at-42/)、[debian](https://bits.debian.org/2015/12/mourning-ian-murdock.html)、[docker](http://blog.docker.com/2015/12/ian-murdock/)


旧金山警方对 Ian Murdock 死亡案件的说法

Summary: Docker 公司的一位发言人说，死亡的具体原因还不确定，但是应该没有可疑之处，这是一个“私人问题（private matter）”。

震惊、遗憾

混乱、忧虑

唉……

rip`````

活了42年了，什么大风大浪没见过？

反而却想不开自寻短见，就连自杀的原因都让我感觉摸不着头脑……

我的确不太清楚这里面的真相到底是什么样，但目前给我的感觉就是：心理素质不太高，所以自杀？

哎~~太可惜了~~~

RIP

他不应该走的不明不白，这是所有开源者的痛。

突闻此消息有点悲伤，开源界的一个大牛又这样消失了。很期待死因的查明，还大家一个真相

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

唉...

是不是因爲抑鬱症離世？

Debian user來留名，沉痛哀悼

Rest in Peace, Ian

给人的感觉还是他自己的家人在遮掩。

# 旧金山警方对 Ian Murdock 死亡案件的说法

首先，让我们来回顾一下整个事件目前已知的经过：

>
> Ian Murdock 先生是著名的 Debian 发行版的创始人。Debian 发行版是包括 Ubuntu、Mint 等主要发行版在内的源头，创建于 1993年，并现在依旧是主要的 Linux 发行版之一。“Debian”这个名字中的“ian”即来自 Ian Murdock 先生。
>
>
> 他生前居住在美国旧金山，最后任职于 Docker 公司。
>
>
>

当地时间本周一（2015/12/28）下午，他在 Twitter 上发布了一系列的语无伦次的推文。据这些凌乱的推文说，他在他家附近被警察逮捕，被女警察剥掉内衣，被控殴打警察，并被送往医院，其后交了保释金之后被释放，他扬言要自杀，并发表了一系列愤怒的言论，在众人的安慰之下，暂时放弃了自杀的念头。

Ian Murdock 死于当天晚上，并且他的 Twitter 账户被禁用（删除？）。

这一事件引发了开源社区和技术界的广泛关注和沉痛哀悼。

根据旧金山警方披露的消息，事件经过如下：

>
> 当地时间上周六（12/26）晚上 11：30，警方接到该市 Steiner 大街和 Union 大街交汇处的报警信息，称一名男子试图闯入别人家中——该男人被认定为 Ian Murdock。据报其与警察发生了争吵，并被指控两项袭警罪名和一项涉嫌妨碍公务罪名。根据警察的记录，他当时已经喝醉了。医生被派来处理他头部的擦伤，他被释放以便带去医院处理。
>
>
> 过了几个小时，上周日（12/27）凌晨 2:40，警方再次接报他在使劲敲邻居家的门。医生到达来处理他的其它伤处，接着将他带到了拘留所，关在里面。
>
>
> 上周日当天稍晚时间，支付了保释金后他被释放了，据说是 $25,000。次日（12/28），Ian Murdock 死亡。
>
>
>

他的家人请求能在这段困难时间尊重他们的隐私。

Docker 公司的一位发言人说，死亡的具体原因还不确定，但是应该没有可疑之处，这是一个“<ruby> 私人问题 <rp>  （ </rp> <rt>  private matter </rt> <rp>  ） </rp></ruby>”。

参考来源：[theregister](http://www.theregister.co.uk/2015/12/30/ian_murdock_debian_founder/)


将 Tor socks 转换成 http 代理

Summary: 你可以通过不同的 Tor 工具来使用 Tor 服务，如 Tor 浏览器、Foxyproxy 和其它东西，像 wget 和 aria2 这样的下载管理器不能直接使用 Tor socks 开始匿名下载，因此我们需要一些工具来将 Tor socks 转换成 http 代理，这样就能用它来下载了。 注意：本教程基于 Debian ，其他发行版会有些不同，因此如果你的发行版是基于 Debian 的，就可以直接使用下面的配置了。 Polipo 这个服务会使用 8123 端口和 127.0.0.1 的 IP 地址，使用下面的命令来在计算机上安装 Polipo： sudo apt install polipo  现在使用如下命令打开 Polipo 的配置文件：

tor网络下载东西？

可拉倒吧，tor 网络慢成狗。 - -

新人一枚，感谢！

# 将 Tor socks 转换成 http 代理

<img src="content_image/album_201601_03_183650meu2pvil6epoj6rf.jpg" alt="" title="">

你可以通过不同的 Tor 工具来使用 Tor 服务，如 Tor 浏览器、Foxyproxy 和其它东西，像 wget 和 aria2 这样的下载管理器不能直接使用 Tor socks 开始匿名下载，因此我们需要一些工具来将 Tor socks 转换成 http 代理，这样就能用它来下载了。

**注意**：本教程基于 Debian ，其他发行版会有些不同，因此如果你的发行版是基于 Debian 的，就可以直接使用下面的配置了。

### Polipo

这个服务会使用 8123 端口和 127.0.0.1 的 IP 地址，使用下面的命令来在计算机上安装 Polipo：

```
sudo apt install polipo

```

现在使用如下命令打开 Polipo 的配置文件：

```
sudo nano /etc/polipo/config

```

在文件最后加入下面的行：

```
proxyAddress = "::0"
allowedClients = 192.168.1.0/24
socksParentProxy = "localhost:9050"
socksProxyType = socks5

```

用如下的命令来重启 Polipo：

```
sudo service polipo restart

```

现在 Polipo 已经安装好了！在匿名的世界里做你想做的吧！下面是使用的例子：

```
pdmt -l "link" -i 127.0.01 -p 8123

```

通过上面的命令 PDMT（Persian 下载器终端）会匿名地下载你的文件。

### Proxychains

在此服务中你可以设置使用 Tor 或者 Lantern 代理，但是在使用上它和 Polipo 和 Privoxy 有点不同，它不需要使用任何端口！使用下面的命令来安装：

```
sudo apt install proxychains

```

用这条命令来打开配置文件：

```
sudo nano /etc/proxychains.conf

```

现在添加下面的代码到文件底部，这里是 Tor 的端口和 IP：

```
socks5 127.0.0.1 9050

```

如果你在命令的前面加上“proxychains”并运行，它就能通过 Tor 代理来运行：

```
proxychains firefoxt
proxychains aria2c
proxychains wget

```

### Privoxy

Privoxy 使用 8118 端口，可以很轻松地通过 privoxy 包来安装：

```
sudo apt install privoxy

```

我们现在要修改配置文件：

```
sudo nano /etc/pivoxy/config

```

在文件底部加入下面的行：

```
forward-socks5 / 127.0.0.1:9050  .
forward-socks4a / 127.0.0.1:9050 .
forward-socks5t             /     127.0.0.1:9050 .
forward         192.168.*.*/     .
forward            10.*.*.*/     .
forward           127.*.*.*/     .
forward           localhost/     .

```

重启服务：

```
sudo service privoxy restart

```

服务已经好了！端口是 8118，IP 是 127.0.0.1，就尽情使用吧！

---

via: <http://www.unixmen.com/turn-tor-socks-http/>

作者：[Hossein heydari](http://www.unixmen.com/author/hossein/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


“Linux 中国”微信矩阵

Summary: 我们的微信公众号形成了一个矩阵联合，全方位、细分地为您提供合适的信息资讯。

有没有可能开发一款手机app，自动关注想要的内容。比如说，运维技术，新鲜资讯，桌面管理，个性定制，开发者，最后再来个论坛。

公布api，开源，然后大家搞个app

来个手机APP

加个公众号确实不错！

真的很好奇VIP组是什么

可以的，弄个app并非难事

强烈支持~Linux.cn加油~

加油

二楼自古出人才

同意二楼观点

其实就是不会有多少人使用——之前做过调查。

抽奖时高优先级？

好期待

这么多号我感觉我一个都不能漏啊，全关注

太好了！！！

这是要一个都不能漏的节奏啊！！！

这个 可以有

苹果和安卓的系统一起开发

我们的微信公众号形成了一个矩阵联合，全方位、细分地为您提供合适的信息资讯。

# “Linux 中国”微信矩阵

<img src="content_image/album_201601_03_224223kgb82e2n81ledzvd.jpg" alt="" title="">

我们“Linux 中国”除了自有的网站平台外，前几年就在微博、腾讯微博、QQ 空间、今日头条、微信公众号等平台开设了内容输出通道；甚至在微博还正常的时候，还打通了和微博的评论回流通道。近段时间以来，又陆陆续续的增加了百度百家、简书、开发者头条、QQ 公众平台等新的通道。

综合来看，我们发布的内容，有新闻，也有观点；有技术文章，也有软文投放；有编程开发，也有运维安全；有小白入门，也有高屋建瓴。因此，我们觉得，我们需要将我们亲爱的读者们分成几类。最起码，你得将专研技术的和关注开源发展的读者分开，也应该将开发人员和运维人员分开。还要考虑到我们的读者已经处于信息过载的情况下，是否仅将最有价值的内容送给他们呢？

这就是我们推出微信矩阵的原因。

### 微信矩阵

Linux 中国的微信公众号形成了一个矩阵联合，全方位、细分地为您提供合适的信息资讯。

#### Linux中国 （linux-cn，订阅号）

这是我们的主力旗舰号，微信公众平台订阅号。由于每日都推送 Linux 和开源相关的技术文章和资讯评论，所以信息量还是比较多的，因此往往会沉没在您的“订阅号”文件夹中。**如果您想跨界运维与开发，也同时是开源文化的积极拥趸，那么这个号值得订阅。**

微信号： **linux-cn**，搜索“**linux**”即可直达，或扫描/长按如下二维码：

#### Linux开源社区 （cn\_linux，认证订阅号）

这是我们的先锋号，微信公众平台认证订阅号。每天精选“Linux中国”的技术内容抢先发布，只推送干货。

微信号： **cn\_linux**，搜索“**Linux开源社区**”即可直达，或扫描/长按如下二维码：

#### Linux （cn-linux，服务号）

这是上面的订阅号的**精华摘要**。每周都会自上周的“Linux中国”订阅号中精选五条最受关注、最有价值的文章推送给你，让你可以**将注意力关注在重要内容上，而不必每天都花费时间去阅读**。毕竟，技术这个事情，重在学习，而不是时效性。

微信号： **cn-linux**，搜索“**linux**”即可直达，或扫描/长按如下二维码：

#### 运维伙伴 （OpsSays，服务号）

专门关注于运维者，目前的计划是：每周从“Linux中国”订阅号中精选运维侧的内容推送给您。

微信号： **OpsSays**，搜索“运维**伙伴**”，或扫描/长按如下二维码：

#### 编程学习手册 （DevSays，服务号）

专门关注于开发者，目前的计划是：支持各种编程手册查询，并每周从“Linux中国”订阅号中精选开发侧的内容推送给您。

微信号： **DevSays**，搜索“**编程学习手册**”，或扫描/长按如下二维码：

#### 开源杂谈 （ostalk，服务号）

关注开源界大事件，跟踪最新动态和观点争鸣，每周推送内容精选自“Linux中国”订阅号。

微信号： **ostalk**，搜索“**开源杂谈**”，或扫描/长按如下二维码：

### 我们的微信矩阵已有和即将到来的功能

我重构了我们的微信公众号的后台对接程序。去除了一些不必要的功能，合并梳理了一些功能，并留好了新的功能空间。下面就一一介绍：

#### 菜单功能

这个其实没什么好说的，其意自明。根据我们的统计，在这些菜单里面，“**技术学习**”和“**实时更新**”点击量最高——这两个呈现的是我们网站的技术文章和最新发布的文章，看来**干货是王道**啊。

“**爆款推荐**”（以前叫“热点推荐”）也有不错的点击——这呈现的是最近阅读量比较高的微信推送文章。

另外，顺便提一下，如果点击菜单出来的是文章列表，你可以通过**短时间内再次点击该菜单进行翻页**的。

#### 输入交互

除了菜单，作为有点<ruby> 逼格 <rp>  （ </rp> <rt>  big </rt> <rp>  ） </rp></ruby>的公众号，怎么能不提供输入交互功能呢？事实上，我们提供微信公众号接口程序的主要目的就是和大家进行输入交互的。

之前的输入交互方式比较复杂，现在统一整理了，嗯，重构了，功能更加简洁易用了。

**想输入你就输入**——这就是我们的追求。

切换到输入模式，你可以输入一些关键字，比如，“**热点**”、“**技术**”等和菜单匹配的功能，自然可以取得和菜单一样的效果——当然，具体都支持那些关键字，我就不披露了——这属于“*内部 API*” :D，没准里面我会埋一些“彩蛋”呢——不是“菜单”。

你也可以输入一个 Linux **命令名**，来获取这个命令的 man 手册，以及相关该命令的文章列表。以后我们会增加 **Linux 命令解析功能**，也就是说你可以输入一个比较长的，带有参数的 Linux 命令，我们会详细解释这个命令是如何运行的。如果你就是想了解某个命令的 man 手册，那你可以用明确的语法来查找：`man [n] command`，[n] 代表可选的 man 分类，比如： `man 1 ls`。

你还可以输入一个**数字**，可以获取到该数字所代表的微信推送文章。什么？这个数字哪里来的？以后我们会通过在文章底部推荐告诉大家一些优秀文章的 ID；大家也可以试试你的幸运数字，可能就是一篇你感兴趣的文章呢。

你还可以输入一些**关键字**，我们会根据这个关键字检索网站内相关的文章呈现给你。当然，目前的搜索功能还很弱——这一点亟待改进。

另外，如果你有什么想对小编（老编）说的，可以用“#”开头写给我看，我会尽快回复的——商务合作也可以通过此方式联系到我。

最后，但不是不重要，我们的两个订阅号都提供了“签到抽奖”功能，每天都有很多奖品送上，有书籍、折扣券等等，赶快去试试吧——就在微信公众号的菜单里面。


Summary: 大家好，这篇文章将要讲述如何在 CentOS 7 / Ubuntu 15.04 上安装 Laravel。如果你是一个 PHP Web 的开发者，你并不需要考虑如何在琳琅满目的现代 PHP 框架中选择，Laravel 是最轻松启动和运行的，它省时省力，能让你享受到 web 开发的乐趣。Laravel 信奉着一个普世的开发哲学，通过简单的指导创建出可维护代码是最优先的，你将保持着高速的开发效率，能够随时毫不畏惧更改你的代码来改进现有功能。  Laravel 安装并不繁琐，你只要跟着本文章一步步操作就能在 CentOS 7 或者 Ubuntu 15 服务器上安装。 1) 服务器要求 在安装 Laravel 前需

composer国内被墙，使用代理：<br />
composer config -g repositories.packagist composer ＨＴＴＰ://packagist.phpcomposer.com

composer install 这一步的时候直接卡住，composer install -vvv可解决

另外<pre>ServerName laravel-develop

DocumentRoot /var/www/laravel/public

start Directory /var/www/laravel

AllowOverride All

Directory close<pre>

添加后，systemctl restart httpd启动失败！

还有一件事，mysql启动不起来

#systemctl start mysqld

#systemctl enable mysqld

表示失败，我就是死在这一步放弃的！！！

这里的配置是源作者犯轴，弄错了，我们翻译校对时也没想到配置文件还能抄错。已经更正，请参阅。

这种情况下，你看看日志就知道哪里错了。 journalctl

# 如何在 CentOS 7 / Ubuntu 15.04 上安装 PHP 框架 Laravel

大家好，这篇文章将要讲述如何在 CentOS 7 / Ubuntu 15.04 上安装 Laravel。如果你是一个 PHP Web 的开发者，你并不需要考虑如何在琳琅满目的现代 PHP 框架中选择，Laravel 是最轻松启动和运行的，它省时省力，能让你享受到 web 开发的乐趣。Laravel 信奉着一个普世的开发哲学，通过简单的指导创建出可维护代码是最优先的，你将保持着高速的开发效率，能够随时毫不畏惧更改你的代码来改进现有功能。

Laravel 安装并不繁琐，你只要跟着本文章一步步操作就能在 CentOS 7 或者 Ubuntu 15 服务器上安装。

### 1) 服务器要求

在安装 Laravel 前需要安装一些它的依赖前提条件，主要是一些基本的参数调整，比如升级系统到最新版本，sudo 权限和安装依赖包。

当你连接到你的服务器时，请确保你能通以下命令能成功的使用 EPEL 仓库并且升级你的服务器。

#### CentOS-7

```
# yum install epel-release

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# yum update

```

#### Ubuntu

```
# apt-get install python-software-properties
# add-apt-repository ppa:ondrej/php5

# apt-get update

# apt-get install -y php5 mcrypt php5-mcrypt php5-gd

```

### 2) 防火墙安装

系统防火墙和 SELinux 设置对于用于产品应用安全来说非常重要，当你使用测试服务器的时候可以关闭防火墙，用以下命令行设置 SELinux 成<ruby> 宽容模式 <rp>  （ </rp> <rt>  permissive </rt> <rp>  ） </rp></ruby>来保证安装程序不受它们的影响。

```
# setenforce 0

```

### 3) Apache, MariaDB, PHP 安装

Laravel 安装程序需要完成安装 LAMP 整个环境，需要额外安装 OpenSSL、PDO，Mbstring 和 Tokenizer 等 PHP 扩展。如果 LAMP 已经运行在你的服务器上你可以跳过这一步，直接确认一些必要的 PHP 插件是否安装好。

要安装完整 AMP 你需要在自己的服务器上运行以下命令。

#### CentOS

```
# yum install httpd mariadb-server php56w php56w-mysql php56w-mcrypt php56w-dom php56w-mbstring

```

要在 CentOS 7 上实现 MySQL / Mariadb 服务开机自动启动，你需要运行以下命令。

```
# systemctl start httpd
# systemctl enable httpd

#systemctl start mysqld
#systemctl enable mysqld

```

在启动 MariaDB 服务之后，你需要运行以下命令配置一个足够安全的密码。

```
#mysql_secure_installation

```

#### Ubuntu

```
# apt-get install mysql-server apache2 libapache2-mod-php5 php5-mysql

```

### 4) 安装 Composer

在我们安装 Laravel 前，先让我们开始安装 composer。安装 composer 是安装 Laravel 的最重要步骤之一，因为 composer 能帮我们安装 Laravel 的各种依赖。

#### CentOS/Ubuntu

在 CentOS / Ubuntu 下运行以下命令来配置 composer 。

```
# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer
# chmod +x /usr/local/bin/composer

```

### 5) 安装 Laravel

我们可以运行以下命令从 github 上下载 Laravel 的安装包。

```
# wget https://github.com/laravel/laravel/archive/develop.zip

```

运行以下命令解压安装包并且移动 document 的根目录。

```
# unzip develop.zip

# mv laravel-develop /var/www/

```

现在使用 compose 命令来安装目录下所有 Laravel 所需要的依赖。

```
# cd /var/www/laravel-develop/
# composer install

```

### 6) 密钥

为了加密服务器，我们使用以下命令来生成一个加密后的 32 位的密钥。

```
# php artisan key:generate

Application key [Lf54qK56s3qDh0ywgf9JdRxO2N0oV9qI] set successfully

```

现在把这个密钥放到 'app.php' 文件，如以下所示。

```
# vim /var/www/laravel-develop/config/app.php

```

### 7) 虚拟主机和所属用户

在 composer 安装好后，分配 document 根目录的权限和所属用户，如下所示。

```
# chmod 775 /var/www/laravel-develop/app/storage

# chown -R apache:apache /var/www/laravel-develop

```

用任意一款编辑器打开 apache 服务器的默认配置文件，在文件最后加上虚拟主机配置。

```
# vim /etc/httpd/conf/httpd.conf

```

---

```
ServerName laravel-develop
DocumentRoot /var/www/laravel/public

<Directory /var/www/laravel>
  AllowOverride All
</Directory>

```

现在我们用以下命令重启 apache 服务器，打开浏览器查看 localhost 页面。

#### CentOS

```
# systemctl restart httpd

```

#### Ubuntu

```
# service apache2 restart

```

### 8) Laravel 5 网络访问

打开浏览器然后输入你配置的 IP 地址或者<ruby> 完整域名 <rp>  （ </rp> <rt>  Fully qualified domain name </rt> <rp>  ） </rp></ruby>你将会看到 Laravel 5 的默认页面。

### 总结

Laravel 框架对于开发网页应用来说是一个绝好的的工具。所以，看了这篇文章你将学会在 Ubuntu 15 和 CentOS 7 上安装 Laravel， 之后你就可以使用这个超棒的 PHP 框架提供的各种功能和舒适便捷性来进行你的开发工作。

如果您有什么意见或者建议请在以下评论区中回复，我们将根据您宝贵的反馈来使我们的文章更加浅显易懂。

---

via: <http://linoxide.com/linux-how-to/install-laravel-php-centos-7-ubuntu-15-04/>

作者：[Kashif](http://linoxide.com/author/kashifs/) 译者：[NearTan](https://github.com/NearTan) 校对：[Caroline](https://github.com/carolinewuyan)

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


在 Ubuntu 15.10 上为单个网卡设置多个 IP 地址

Summary: 有时候你可能想在你的网卡上使用多个 IP 地址。遇到这种情况你会怎么办呢？买一个新的网卡并分配一个新的 IP？不，没有这个必要（至少在小型网络中）。现在我们可以在 Ubuntu 系统中为一个网卡分配多个 IP 地址。想知道怎么做到的？跟着我往下看，其实并不难。 这个方法也适用于 Debian 以及它的衍生版本。  临时添加 IP 地址 首先，让我们找到网卡的 IP 地址。在我的 Ubuntu 15.10 服务器版中，我只使用了一个网卡。 运行下面的命令找到 IP 地址： sudo ip addr  样例输出： 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state

# 在 Ubuntu 15.10 上为单个网卡设置多个 IP 地址

有时候你可能想在你的网卡上使用多个 IP 地址。遇到这种情况你会怎么办呢？买一个新的网卡并分配一个新的 IP？不，没有这个必要（至少在小型网络中）。现在我们可以在 Ubuntu 系统中为一个网卡分配多个 IP 地址。想知道怎么做到的？跟着我往下看，其实并不难。

这个方法也适用于 Debian 以及它的衍生版本。

<img src="content_image/album_201601_05_223804s9mmmz1f22917qvk.jpg" alt="" title="">

### 临时添加 IP 地址

首先，让我们找到网卡的 IP 地址。在我的 Ubuntu 15.10 服务器版中，我只使用了一个网卡。

运行下面的命令找到 IP 地址：

```
sudo ip addr

```

**样例输出：**

```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:2a:03:4b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 192.168.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2a:34e/64 scope link
valid_lft forever preferred_lft forever

```

或

```
sudo ifconfig

```

**样例输出：**

```
enp0s3 Link encap:Ethernet HWaddr 08:00:27:2a:03:4b
inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe2a:34e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:186 errors:0 dropped:0 overruns:0 frame:0
TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21872 (21.8 KB) TX bytes:9666 (9.6 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:217 errors:0 dropped:0 overruns:0 frame:0
TX packets:217 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:38793 (38.7 KB) TX bytes:38793 (38.7 KB)

```

正如你在上面输出中看到的，我的网卡名称是 **enp0s3**，它的 IP 地址是 **192.168.1.103**。

现在让我们来为网卡添加一个新的 IP 地址，例如说 **192.168.1.104**。

打开你的终端并运行下面的命令添加额外的 IP。

```
sudo ip addr add 192.168.1.104/24 dev enp0s3

```

用命令检查是否启用了新的 IP：

```
sudo ip address show enp0s3

```

**样例输出：**

```
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:2a:03:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 192.168.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 192.168.1.104/24 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2a:34e/64 scope link
valid_lft forever preferred_lft forever

```

类似地，你可以添加任意数量的 IP 地址，只要你想要。

让我们 ping 一下这个 IP 地址验证一下。

```
sudo ping 192.168.1.104

```

**样例输出**

```
PING 192.168.1.104 (192.168.1.104) 56(84) bytes of data.
64 bytes from 192.168.1.104: icmp_seq=1 ttl=64 time=0.901 ms
64 bytes from 192.168.1.104: icmp_seq=2 ttl=64 time=0.571 ms
64 bytes from 192.168.1.104: icmp_seq=3 ttl=64 time=0.521 ms
64 bytes from 192.168.1.104: icmp_seq=4 ttl=64 time=0.524 ms

```

好极了，它能工作！

要删除 IP，只需要运行：

```
sudo ip addr del 192.168.1.104/24 dev enp0s3

```

再检查一下是否删除了 IP。

```
sudo ip address show enp0s3

```

**样例输出：**

```
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:2a:03:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 192.168.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2a:34e/64 scope link
valid_lft forever preferred_lft forever

```

可以看到已经没有了！！

正如你所知，重启系统后这些设置会失效。那么怎么设置才能永久有效呢？这也很简单。

### 添加永久 IP 地址

Ubuntu 系统的网卡配置文件是 **/etc/network/interfaces**。

让我们来看看上面文件的具体内容。

```
sudo cat /etc/network/interfaces

```

**输出样例：**

```
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp0s3
iface enp0s3 inet dhcp

```

正如你在上面输出中看到的，网卡启用了 DHCP。

现在，让我们来分配一个额外的地址，例如 **192.168.1.104/24**。

编辑 **/etc/network/interfaces**：

```
sudo nano /etc/network/interfaces

```

如下添加额外的 IP 地址。

```
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp0s3
iface enp0s3 inet dhcp
iface enp0s3 inet static
 address 192.168.1.104/24

```

保存并关闭文件。

运行下面的命令使更改无需重启即生效。

```
sudo ifdown enp0s3 && sudo ifup enp0s3

```

**样例输出：**

```
Killed old client process
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/enp0s3/08:00:27:2a:03:4e
Sending on LPF/enp0s3/08:00:27:2a:03:4e
Sending on Socket/fallback
DHCPRELEASE on enp0s3 to 192.168.1.1 port 67 (xid=0x225f35)
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/enp0s3/08:00:27:2a:03:4e
Sending on LPF/enp0s3/08:00:27:2a:03:4e
Sending on Socket/fallback
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 3 (xid=0xdfb94764)
DHCPREQUEST of 192.168.1.103 on enp0s3 to 255.255.255.255 port 67 (xid=0x6447b9df)
DHCPOFFER of 192.168.1.103 from 192.168.1.1
DHCPACK of 192.168.1.103 from 192.168.1.1
bound to 192.168.1.103 -- renewal in 35146 seconds.

```

**注意**：如果你从远程连接到服务器，把上面的两个命令放到**一行**中**非常重要**，因为第一个命令会断掉你的连接。而采用这种方式可以保留你的 ssh 会话。

现在，让我们用下面的命令来检查一下是否添加了新的 IP：

```
sudo ip address show enp0s3

```

**输出样例：**

```
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:2a:03:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.103/24 brd 192.168.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 192.168.1.104/24 brd 192.168.1.255 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2a:34e/64 scope link
valid_lft forever preferred_lft forever

```

很好！我们已经添加了额外的 IP。

再次 ping IP 地址进行验证。

```
sudo ping 192.168.1.104

```

**样例输出：**

```
PING 192.168.1.104 (192.168.1.104) 56(84) bytes of data.
64 bytes from 192.168.1.104: icmp_seq=1 ttl=64 time=0.137 ms
64 bytes from 192.168.1.104: icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from 192.168.1.104: icmp_seq=3 ttl=64 time=0.054 ms
64 bytes from 192.168.1.104: icmp_seq=4 ttl=64 time=0.067 ms

```

好极了！它能正常工作。就是这样。

想知道怎么给 CentOS/RHEL/Scientific Linux/Fedora 系统添加额外的 IP 地址，可以点击下面的链接。

* [在CentOS 7上给一个网卡分配多个IP地址](/article-5127-1.html)

工作愉快！

---

via: <http://www.unixmen.com/assign-multiple-ip-addresses-to-one-interface-on-ubuntu-15-10/>

作者：[SK](http://www.unixmen.com/author/sk/) 译者：[ictlyh](http://mutouxiaogui.cn/blog/) 校对：[Caroline](https://github.com/carolinewuyan)

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


如何在 Ubuntu 14/15 上配置 Apache Solr

Summary: 大家好，欢迎来阅读我们今天这篇 Apache Solr 的文章。简单的来说，Apache Solr 是一个最负盛名的开源搜索平台，配合运行在网站后端的 Apache Lucene，能够让你轻松创建搜索引擎来搜索网站、数据库和文件。它能够索引和搜索多个网站并根据搜索文本的相关内容返回搜索建议。  Solr 使用 HTTP 可扩展标记语言（XML），可以为 JSON、Python 和 Ruby 等提供应用程序接口(API)。根据 Apache Lucene 项目所述，Solr 提供了非常多的功能，让它很受管理员们的欢迎：  全文检索 分面导航（Faceted Navigation） 拼写建议/自动完成 自定义文档排序/

感觉solr还是比较不错，项目上在用，但是需要进行二次开发才能达到既定的需求。

看看

# 如何在 Ubuntu 14/15 上配置 Apache Solr

大家好，欢迎来阅读我们今天这篇 Apache Solr 的文章。简单的来说，Apache Solr 是一个最负盛名的开源搜索平台，配合运行在网站后端的 Apache Lucene，能够让你轻松创建搜索引擎来搜索网站、数据库和文件。它能够索引和搜索多个网站并根据搜索文本的相关内容返回搜索建议。

Solr 使用 HTTP 可扩展标记语言（XML），可以为 JSON、Python 和 Ruby 等提供应用程序接口(API)。根据 Apache Lucene 项目所述，Solr 提供了非常多的功能，让它很受管理员们的欢迎：

* 全文检索
* <ruby> 分面导航 <rp>  （ </rp> <rt>  Faceted Navigation </rt> <rp>  ） </rp></ruby>
* 拼写建议/自动完成
* 自定义文档排序/排列

#### 前提条件:

在一个使用最小化安装包的全新 Ubuntu 14/15 系统上，你仅仅需要少量的准备，就开始安装 Apache Solor.

### 1)System Update 系统更新

使用一个具有 sudo 权限的非 root 用户登录你的 Ubuntu 服务器，在接下来的所有安装和使用 Solr 的步骤中都会使用它。

登录成功后，使用下面的命令，升级你的系统到最新的更新及补丁：

```
$ sudo apt-get update

```

### 2) 安装 JRE

要安装 Solr，首先需要安装 JRE (Java Runtime Environment) 作为基础环境，因为 solr 和 tomcat 都是基于Java.所以，我们需要安装最新版的 Java 并配置 Java 本地环境.

要想安装最新版的 Java 8，我们需要通过以下命令安装 Python Software Properties 工具包

```
$ sudo apt-get install python-software-properties

```

完成后，配置最新版 Java 8的仓库

```
$ sudo add-apt-repository ppa:webupd8team/java

```

现在你可以通过以下命令更新包源列表，使用‘apt-get’来安装最新版本的 Oracle Java 8。

```
$ sudo apt-get update

$ sudo apt-get install oracle-java8-installer

```

在安装和配置过程中，点击'OK'按钮接受 Java SE Platform 和 JavaFX 的<ruby> Oracle 二进制代码许可协议 <rp>  （ </rp> <rt>  Oracle Binary Code License Agreement </rt> <rp>  ） </rp></ruby>。

在安装完成后，运行下面的命令，检查是否安装成功以及查看安装的版本。

```
kash@solr:~$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

```

执行结果表明我们已经成功安装了 Java，并达到安装 Solr 最基本的要求了，接着我们进行下一步。

### 安装 Solr

有两种不同的方式可以在 Ubuntu 上安装 Solr，在本文中我们只用最新的源码包来演示源码安装。

要使用源码安装 Solr，先要从[官网](http://lucene.apache.org/solr/)下载最新的可用安装包。复制以下链接，然后使用 'wget' 命令来下载。

```
$ wget http://www.us.apache.org/dist/lucene/solr/5.3.1/solr-5.3.1.tgz

```

运行下面的命令，将这个已归档的服务解压到 /bin 目录。

```
$ tar -xzf solr-5.3.1.tgz solr-5.3.1/bin/install_solr_service.sh --strip-components=2

```

运行脚本来启动 Solr 服务，这将会先创建一个 solr 的用户，然后将 Solr 安装成服务。

```
$ sudo bash ./install_solr_service.sh solr-5.3.1.tgz

```

使用下面的命令来检查 Solr 服务的状态。

```
$ service solr status

```

### 创建 Solr 集合:

我们现在可以使用 Solr 用户添加多个集合。就像下图所示的那样，我们只需要在命令行中指定集合名称和指定其配置集就可以创建多个集合了。

```
$ sudo su - solr -c "/opt/solr/bin/solr create -c myfirstcollection -n data_driven_schema_configs"

```

我们已经成功的为我们的第一个集合创建了新核心实例目录，并可以将数据添加到里面。要查看库中的默认模式文件，可以在这里找到： '/opt/solr/server/solr/configsets/data*driven*schema\_configs/conf' 。

### 使用 Solr Web

可以使用默认的端口8983连接 Apache Solr。打开浏览器，输入 http://your\_server\_ip:8983/solr 或者 http://your-domain.com:8983/solr. 确保你的防火墙允许8983端口.

```
http://172.25.10.171:8983/solr/

```

在 Solr 的 Web 控制台左侧菜单点击 'Core Admin' 按钮，你将会看见我们之前使用命令行方式创建的集合。你可以点击 'Add Core' 按钮来创建新的核心。

就像下图中所示，你可以选择某个集合并指向文档来向里面添加内容或从文档中查询数据。如下显示的那样添加指定格式的数据。

```
{
"number": 1,
"Name": "George Washington",
"birth_year": 1989,
"Starting_Job": 2002,
"End_Job": "2009-04-30",
"Qualification": "Graduation",
"skills": "Linux and Virtualization"
}

```

添加文件后点击 'Submit Document'按钮.

### 总结

在 Ubuntu 上安装成功后，你就可以使用 Solr Web 接口插入或查询数据。如果你想通过 Solr 来管理更多的数据和文件，可以创建更多的集合。希望你能喜欢这篇文章并且希望它能够帮到你。

---

via: <http://linoxide.com/ubuntu-how-to/configure-apache-solr-ubuntu-14-15/>

作者：[Kashif](http://linoxide.com/author/kashifs/) 译者：[taichirain](https://github.com/taichirain) 校对：[Caroline](https://github.com/carolinewuyan)

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


Debian 项目组向 Ian Murdock 的逝世表示哀悼

哀悼

致敬！

走好

致敬！！我觉得Debian Gnu/Linux就是比别的好用一点点。线上update和全软件组件ISO。让我无论什么时候都方便易用

一路走好@！～

致敬

愿天堂里没有暴力执法

# Debian 项目组向 Ian Murdock 的逝世表示哀悼

>
> Debian 项目组很悲伤地宣布 Debian 社区及项目失去了它的创立者 Ian Murdock。
>
>
>

Debian 只是 Ian 留给世人的一部分遗产，但也是 Ian 最为人所知的遗产之一。

Ian 很小就开始接触电脑。他对电脑从最初的好奇慢慢变得更加熟悉，在9岁的时候就开始经常写代码了。后来在 Krannert 管理学院的时候，有一门必修的编程课；这门课程强化了年轻的 Ian 对电脑的喜爱程度，也让他产生了让某些事情变得更好的想法。

1993年9月, Ian 启动了 Debian 项目；同年的晚些时候，发布了 Debian 的第一个版本。那个时候，Linux 发行版这样的概念还很新颖。正如 Ian 所说，这个想法是受 Linus Torvalds 所启发。Ian 发布 Debian 的目的很简单，他希望这个发行版能体现 Linux 和 GNU 的开源精神。

正是出于这个简单的目的，Ian 在软件世界掀起了一场运动。很多开发者加入 Ian 的项目，以在一个不断进步的世界里做出更好的软件。

正如 Ian 在<ruby>   Debian 宣言  <rp>  （ </rp> <rt>  Debian Manifesto </rt> <rp>  ） </rp></ruby>中所说的那样：“Debian 的设计过程是公开的；这样做的目的是希望保证一流的软件质量，并且能反映和满足用户社区的需求。Debian 可以以模块化的方式进行开发，使得不同背景、不同技能的人都能参与进来。[...] 让不同的人参与也意味着可以在开发过程中博采众长、扬长避短。这样做，也可以让项目满足不同用户的需求而不仅仅是满足开发者的需求。”

他的主要关注点是创建一个 Linux 发行版和一种行正道的社区文化，无论是道义上还是技术上。

Debian 项目不断发布新版本，Debian 关于<ruby> 软件自由 <rp>  （ </rp> <rt>  Software Freedom </rt> <rp>  ） </rp></ruby> 的立场过去是、现在仍然是自由和开源世界的标杆。

Debian 0.01 版到 0.90 版在 1993年8月至93年12月之间发布。Ian Murdock写道：

“Debian 0.91 在1994年1月发布；这个版本有一个比较原始的包管理系统。[...] 那个时候，已经有些人加入到 Debian 的开发中来了，但是绝大部分时间还是我来准备发布的版本。0.91是最后一个这样弄出来的版本。”

“1994年的大部分时间花在了 Debian 项目的组织上，也因此，其它参与者能高效地为该项目添砖添瓦; 还有一部分时间花在了dpkg上[...]。”

"Debian 0.93 的第五个版本是在95年的三月份发布的，它也是 Debain 项目的第一个*现代版*：因为当时有很多开发者参与其中（虽然我记不得到底有多少个了）；每个人维护他们自己的软件包；在安装完核心系统之后，当时我们用 dpkg 来管理这些软件包。”

“1995年发布了 Debian 0.93 版的第6个发布版本，这个版本也是 a.out 的最后一个版本（LCTT 译注：在 linux/unix 系统上，通过 gcc、g++ 来编译 C/C++ 程序时，如果没有指定 -o 参数，会默认生成名为 a.out 的目标二进制，这儿说明以前的开发管理相当原始，不是比较规范的那种方式来发布和管理相关的软件包）。当时大约有60多个开发者参与进来维护 0.93R6 的软件包。如果我没记错的话，dselect首先出现在093R6中。”

当他在1996年3月停止积极参与 Debian 项目之时，他表达了对 Debian 093R6 的钟爱；他说 0.93R6 “是我最喜欢的 Debian 版本”，虽然他也承认这有他的个人偏见在里面。

1996年3月，Ian Murdock 退出 Debian 项目的领导，并任命 Bruce Perens 作为 Debin 项目的新的领导人。

行正道这个理念一直影响着 Ian 的工作，包括 Debian 项目和其接下来数年的工作；他总是向着无限可能的明天而努力。

Debian 项目仍将前行，它会成为这个世界上随处可见的<ruby> 通用操作系统 <rp>  （ </rp> <rt>  Universal Operating System </rt> <rp>  ） </rp></ruby>。无论在小的嵌入式设备上，还是庞大的集群系统上，再到空间站上“<ruby> 都能见到 Debian 的身影 <rp>  （ </rp> <rt>  of course it runs Debian </rt> <rp>  ） </rp></ruby>”。Debian 已被移植到了多种架构和硬件类型上。

Ian 的梦想永存：Debian 由一个强大的社区所缔造；这个社区孕育了新的开发方式，成长理念和好奇心。Debian 社区仍是最活跃的社区；数以千计的开发人员日日夜夜的工作，以为人们提供可靠的安全的操作系统。Debian 点燃了那些希望让世界变得更好的人的兴趣、好奇心与激情。这种影响旷日持久。

我们对 Ian 表示由衷的感谢。

我们在 Debian 的所有网站和和服务中用深色的主页旗帜广告及 logo 上的绶带表达了我们的反应和哀悼。在这段艰苦的时期，Debian 社区的关怀与 Ian 的家人同在。

他的家人希望保护他们的隐私，而我们也很愿意遵从他们的意愿。

在 Debian 社区内或 Linux 社区中的成员，可以将悼词发送至 [in-memoriam-ian@debian.org](mailto:in-memoriam-ian@debian.org) ， 这些悼词将会被归档留存。

这个电子邮件地址将会在2016年1月末之前有效。而后 Debian 项目组将会将归档交给 Ian 的家人，若 Ian 的家人愿意，我们将在今年晚些时候公布其内容。

---

via: <https://www.debian.org/News/2016/20160105>

译者： [hittlle](https://github.com/hittlle), [StdioA](https://github.com/StdioA) 校对： [wxy](https://github.com/wxy)


Summary: Nginx 是一款自由开源的 HTTP 和反向代理服务器，也可以用作 POP3/IMAP 的邮件代理服务器。Nginx 是一款高性能的 web 服务器，其特点是功能丰富，结构简单以及内存占用低。 第一个版本由 Igor Sysoev 发布于2002年，到现在有很多大型科技公司在使用，包括 Netflix、 Github、 Cloudflare、 WordPress.com 等等。 在这篇教程里我们会在 freebsd 10.2 系统上，安装和配置 Nginx 网络服务器作为 Apache 的反向代理。 Apache 将在8080端口上运行 PHP ，而我们会配置 Nginx 运行在80端口以接收用户/访问者的请求。如果80端口接收到用户浏览器的

good

# 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理

Nginx 是一款自由开源的 HTTP 和反向代理服务器，也可以用作 POP3/IMAP 的邮件代理服务器。Nginx 是一款高性能的 web 服务器，其特点是功能丰富，结构简单以及内存占用低。 第一个版本由 Igor Sysoev 发布于2002年，到现在有很多大型科技公司在使用，包括 Netflix、 Github、 Cloudflare、 WordPress.com 等等。

在这篇教程里我们会“**在 freebsd 10.2 系统上，安装和配置 Nginx 网络服务器作为 Apache 的反向代理**”。 Apache 将在8080端口上运行 PHP ，而我们会配置 Nginx 运行在80端口以接收用户/访问者的请求。如果80端口接收到用户浏览器的网页请求，那么 Nginx 会将该请求传递给运行在8080端口上的 Apache 网络服务器和 PHP。

#### 前提条件

* FreeBSD 10.2
* Root 权限

### 步骤 1 - 更新系统

使用 SSH 认证方式登录到你的 FreeBSD 服务器，使用下面命令来更新你的系统：

```
freebsd-update fetch
freebsd-update install

```

### 步骤 2 - 安装 Apache

Apache 是开源的、使用范围最广的 web 服务器。在 FreeBSD 里默认没有安装 Apache， 但是我们可以直接通过 /usr/ports/www/apache24 下的 ports 或软件包来安装，也可以直接使用 pkg 命令从 FreeBSD 软件库中安装。在本教程中，我们将使用 pkg 命令从 FreeBSD 软件库中安装：

```
pkg install apache24

```

### 步骤 3 - 安装 PHP

一旦成功安装 Apache，接着将会安装 PHP ，它来负责处理用户对 PHP 文件的请求。我们将会用到如下的 pkg 命令来安装 PHP：

```
pkg install php56 mod_php56 php56-mysql php56-mysqli

```

### 步骤 4 - 配置 Apache 和 PHP

一旦所有都安装好了，我们将会配置 Apache 运行在8080端口上， 并让 PHP 与 Apache 一同工作。 要想配置Apache，我们可以编辑“httpd.conf”这个配置文件， 对于 PHP 我们只需要复制 “/usr/local/etc/”目录下的 PHP 配置文件 php.ini。

进入到“/usr/local/etc/”目录，并且复制 php.ini-production 文件到 php.ini :

```
cd /usr/local/etc/
cp php.ini-production php.ini

```

下一步，在 Apache 目录下通过编辑“httpd.conf”文件来配置 Apache：

```
cd /usr/local/etc/apache24
nano -c httpd.conf

```

端口配置在第**52**行 :

```
Listen 8080

```

服务器名称配置在第**219**行:

```
ServerName 127.0.0.1:8080

```

在第**277**行，添加 DirectoryIndex 文件，Apache 将用它来服务对目录的请求：

```
DirectoryIndex index.php index.html

```

在第**287**行下，配置 Apache ，添加脚本支持：

```
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>

```

保存并退出。

现在用 sysrc 命令，来添加 Apache 为开机启动项目：

```
sysrc apache24_enable=yes

```

然后用下面的命令测试 Apache 的配置：

```
apachectl configtest

```

如果到这里都没有问题的话，那么就启动 Apache 吧：

```
service apache24 start

```

如果全部完毕，在“/usr/local/www/apache24/data”目录下创建一个 phpinfo 文件来验证 PHP 在 Apache 下顺利运行：

```
cd /usr/local/www/apache24/data
echo "<?php phpinfo(); ?>" > info.php

```

现在就可以访问 freebsd 的服务器 IP : 192.168.1.123:8080/info.php 。

Apache 及 PHP 运行在 8080 端口。

### 步骤 5 - 安装 Nginx

Nginx 可以以较低内存占用提供高性能的 Web 服务器和反向代理服务器。在这个步骤里，我们将会使用 Nginx 作为Apache 的反向代理，因此让我们用 pkg 命令来安装它吧：

```
pkg install nginx

```

### 步骤 6 - 配置 Nginx

一旦 Nginx 安装完毕，在“**nginx.conf**”文件里，我们需要做一个新的配置文件来替换掉原来的 nginx 配置文件。切换到“/usr/local/etc/nginx/”目录下，并且备份默认 nginx.conf 文件：

```
cd /usr/local/etc/nginx/
mv nginx.conf nginx.conf.oroginal

```

现在就可以创建一个新的 nginx 配置文件了：

```
nano -c nginx.conf

```

然后粘贴下面的配置：

```
user  www;
worker_processes  1;
error_log  /var/log/nginx/error.log;

events {
worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log;

sendfile        on;
keepalive_timeout  65;

# Nginx cache configuration
proxy_cache_path    /var/nginx/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
proxy_temp_path     /var/nginx/cache/tmp;
proxy_cache_key     "$scheme$host$request_uri";

gzip  on;

server {
#listen       80;
server_name  _;

location /nginx_status {

stub_status on;
access_log off;
}

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /usr/local/www/nginx-dist;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:8080
#
location ~ \.php$ {
proxy_pass   http://127.0.0.1:8080;
include /usr/local/etc/nginx/proxy.conf;
}
}

include /usr/local/etc/nginx/vhost/*;

}

```

保存并退出。

下一步，在 nginx 目录下面，创建一个 **proxy.conf** 文件，使其作为反向代理 :

```
cd /usr/local/etc/nginx/
nano -c proxy.conf

```

粘贴如下配置：

```
proxy_buffering         on;
proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           100 8k;
add_header              X-Cache $upstream_cache_status;

```

保存并退出。

最后一步，为 nginx 的高速缓存创建一个“/var/nginx/cache”的新目录：

```
mkdir -p /var/nginx/cache

```

### 步骤 7 - 配置 Nginx 的虚拟主机

在这个步骤里面，我们需要创建一个新的虚拟主机域“saitama.me”，其文档根目录为“/usr/local/www/saitama.me”，日志文件放在“/var/log/nginx”目录下。

我们必须做的第一件事情就是创建新的目录来存放虚拟主机配置文件，我们创建的新目录名为“**vhost**”。创建它：

```
cd /usr/local/etc/nginx/
mkdir vhost

```

创建好 vhost 目录，然后我们就进入这个目录并创建一个新的虚拟主机文件。这里我取名为“**saitama.conf**”：

```
cd vhost/
nano -c saitama.conf

```

粘贴如下虚拟主机的配置：

```
server {
# Replace with your freebsd IP
listen 192.168.1.123:80;

# Document Root
root /usr/local/www/saitama.me;
index index.php index.html index.htm;

# Domain
server_name www.saitama.me saitama.me;

# Error and Access log file
error_log  /var/log/nginx/saitama-error.log;
access_log /var/log/nginx/saitama-access.log main;

# Reverse Proxy Configuration
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
include /usr/local/etc/nginx/proxy.conf;

# Cache configuration
proxy_cache my-cache;
proxy_cache_valid 10s;
proxy_no_cache $cookie_PHPSESSID;
proxy_cache_bypass $cookie_PHPSESSID;
proxy_cache_key "$scheme$host$request_uri";

}

# Disable Cache for the file type html, json
location ~* .(?:manifest|appcache|html?|xml|json)$ {
expires -1;
}

# Enable Cache the file 30 days
location ~* .(jpg|png|gif|jpeg|css|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
proxy_cache_valid 200 120m;
expires 30d;
proxy_cache my-cache;
access_log off;
}

}

```

保存并退出。

下一步，为 nginx 和虚拟主机创建一个新的日志目录“/var/log/”：

```
mkdir -p /var/log/nginx/

```

如果一切顺利，在文件的根目录下创建目录 saitama.me 用作文档根：

```
cd /usr/local/www/
mkdir saitama.me

```

### 步骤 8 - 测试

在这个步骤里面，我们只是测试我们的 nginx 和虚拟主机的配置。

用如下命令测试 nginx 的配置：

```
nginx -t

```

如果一切都没有问题，用 sysrc 命令添加 nginx 为开机启动项，并且启动 nginx 和重启 apache：

```
sysrc nginx_enable=yes
service nginx start
service apache24 restart

```

一切完毕后，在 saitama.me 目录下，添加一个新的 phpinfo 文件来验证 php 的正常运行：

```
cd /usr/local/www/saitama.me
echo "<?php phpinfo(); ?>" > info.php

```

然后访问这个域名： **[www.saitama.me/info.php](http://www.saitama.me/info.php)**。

Nginx 作为 Apache 的反向代理运行了，PHP 也同样工作了。

这是另一个结果：

测试无缓存的 .html 文件。

```
curl -I www.saitama.me

```

测试有三十天缓存的 .css 文件。

```
curl -I www.saitama.me/test.css

```

测试缓存的 .php 文件：

```
curl -I www.saitama.me/info.php

```

全部搞定。

### 总结

Nginx 是最受欢迎的 HTTP 和反向代理服务器，拥有丰富的功能、高性能、低内存/RAM 占用。Nginx 也用于缓存， 我们可以在网络上缓存静态文件使得网页加速，并且缓存用户请求的 php 文件。 Nginx 容易配置和使用，可以将它用作 HTTP 服务器或者 apache 的反向代理。

---

via: <http://linoxide.com/linux-how-to/install-nginx-reverse-proxy-apache-freebsd-10-2/>

作者：[Arul](http://linoxide.com/author/arulm/) 译者：[KnightJoker](https://github.com/KnightJoker) 校对：[Caroline](https://github.com/carolinewuyan)，[wxy](https://github.com/wxy)

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


DFileManager：封面流（CoverFlow）文件管理器

Summary: 这个一个 Ubuntu 标准软件仓库中缺失的像宝石般的、有着其独特的功能的文件管理器。这是 DFileManager 在推特中的宣称。 有一个不好回答的问题，如何知道到底有多少个 Linux 的开源软件？好奇的话，你可以在 Shell 里输入如下命令： ~$ for f in /var/lib/apt/lists/*Packages; do printf '%5d %s\n' $(grep '^Package: ' "$f" | wc -l) ${f##*/} done | sort -rn  在我的 Ubuntu 15.04 系统上，产生结果如下：  正如上面的截图所示，在 Universe 仓库中，大约有39000个包，在 main 仓库中大约有8500个包。这听起来很多。但是这些包括了开

# DFileManager：封面流（CoverFlow）文件管理器

这个一个 Ubuntu 标准软件仓库中缺失的像宝石般的、有着其独特的功能的文件管理器。这是 DFileManager 在推特中的宣称。

有一个不好回答的问题，如何知道到底有多少个 Linux 的开源软件？好奇的话，你可以在 Shell 里输入如下命令：

```
~$ for f in /var/lib/apt/lists/*Packages; do printf '%5d %s\n' $(grep '^Package: ' "$f" | wc -l) ${f##*/} done | sort -rn

```

在我的 Ubuntu 15.04 系统上，产生结果如下：

正如上面的截图所示，在 Universe 仓库中，大约有39000个包，在 main 仓库中大约有8500个包。这听起来很多。但是这些包括了开源应用、工具、库，有很多不是由 Ubuntu 开发者打包的。更重要的是，有很多重要的软件不在库中，只能通过源代码编译。DFileManager 就是这样一个软件。它是仍处在开发早期的一个基于 QT 的跨平台文件管理器。QT提供单一源码下的跨平台可移植性。

现在还没有二进制文件包，用户需要编译源代码才行。对于一些工具来说，这个可能会产生很大的问题，特别是如果这个应用依赖于某个复杂的依赖库，或者需要与已经安装在系统中的软件不兼容的某个版本。

### 安装

幸运的是，DFileManager 非常容易编译。对于我的老 Ubutnu 机器来说，在开发者网站上的安装介绍提供了大部分的重要步骤，不过少量的基础包没有列出（为什么总是这样？虽然许多库会让文件系统变得一团糟！）。在我的系统上，从github 下载源代码并且编译这个软件，我在 Shell 里输入了以下命令：

```
~$ sudo apt-get install qt5-default qt5-qmake libqt5x11extras5-dev
~$ git clone git://git.code.sf.net/p/dfilemanager/code dfilemanager-code
~$ cd dfilemananger-code
~$ mkdir build
~$ cd build
~$ cmake ../ -DCMAKE_INSTALL_PREFIX=/usr
~$ make
~$ sudo make install

```

你可以通过在shell中输入如下命令来启动它：

```
~$ dfm

```

题图是运行中的 DFileManager，完全展示了其最吸引人的地方：<ruby> 封面流 <rp>  （ </rp> <rt>  Cover Flow </rt> <rp>  ） </rp></ruby>视图。可以在当前文件夹的项目间滑动，提供了一个相当有吸引力的体验。这是看图片的理想选择。这个文件管理器酷似 Finder（苹果操作系统下的默认文件管理器)，可能会吸引你。

### 特点:

* 4种视图：图标、详情、列视图和封面流
* 按位置和设备归类书签
* 标签页
* 简单的搜索和过滤
* 自定义文件类型的缩略图，包括多媒体文件
* 信息栏可以移走
* 单击打开文件和目录
* 可以排队 IO 操作
* 记住每个文件夹的视图属性
* 显示隐藏文件

DFileManager 不是 KDE 的 Dolphin 的替代品，但是能做相同的事情。这个是一个真正能够帮助人们的浏览文件的文件管理器。还有，别忘了反馈信息给开发者，任何人都可以做出这样的贡献。

---

via: <http://gofk.tumblr.com/post/131014089537/dfilemanager-cover-flow-file-manager-a-real-gem>

作者：[gofk](http://gofk.tumblr.com/) 译者：[bestony](https://github.com/bestony) 校对：[wxy](https://github.com/wxy)

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


黑客们成功地在土豆上安装了 Linux ！

Summary: 这是该操作系统第一次在根用蔬菜上安装成功。

外国人真会玩

虽然我知道这是不可能的事情，但看到这里，越来越不喜欢linux.cn了

偶尔娱乐一下也挺好啊。

vegetable拼错了

已改:joy:

天才，天才，天才。

苦苦生命流，不悔时间醉。

形学由代码，处事异想违。

尘间凡人在，偷天指日待！

搞不懂。。。。。。。。。。。。。。。

还以为是真的，骗人~，不过以后技术发展说不定能成真呢

什么鬼，怎么摸不到头脑呢？

hehe

靠

好吧，开始我尽然信了

土豆可以发电，所以安装Linux还是有可能的

这是该操作系统第一次在根用蔬菜上安装成功。

# 黑客们成功地在土豆上安装了 Linux ！

来自荷兰阿姆斯特丹的消息称，LinuxOnAnything.nl 网站的黑客们成功地在土豆上安装了 Linux！这是该操作系统第一次在<ruby> 根用蔬菜 <rp>  （ </rp> <rt>  root vegetable </rt> <rp>  ） </rp></ruby>上安装成功（LCTT 译注：root vegetable，一语双关，root 在 Linux 是指超级用户）。

<img src="content_image/album_201601_07_221031o8qrlqgr2rerclxl.jpg" alt="Linux Potato" title="Linux Potato">

“土豆没有 CPU，内存和存储器，这真的是个挑战，” Linux On Anything (LOA) 小组的 Johan Piest 说。“显然我们不能使用一个像 Fedora 或 Ubuntu 这些体量较大的发行版，所以我们用的是 Damn Small Linux（一个超小型的 Linux）。”

在尝试了几周之后，LOA 小组的同学们弄出了一个适合土豆的 Linux 内核，这玩艺儿上面可以用 vi 来编辑小的文本文件。这个 Linux 通过一个小型的 U 盘加载到土豆上，并通过一组红黑线以二进制的方式向这个土豆发送命令。

LOA 小组是一个不断壮大的黑客组织的分支，这个组织致力于将 Linux 安装到所有物体上；他们先是将 Linux 装到 Gameboy 和 iPod 等电子产品上，不过最近他们在挑战一些高难度的东西，譬如将 Linux 安装到灯泡和小狗身上！

LOA 小组在与另一个黑客小组 Stuttering Monarchs （结巴王）竞赛，看谁先拿到土豆这一分。“土豆是一种每个人都会接触到的蔬菜，它的用途就像 Linux 一样极其广泛。无论你是想煮捣烹炸还是别的都可以” ，Piest 说道，“你也许认为我们完成这个挑战是为了获得某些好处，而我们只是追求逼格而已。”

LOA 是第一个将 Linux 安装到一匹设德兰矮种马上的小组，但这五年来竞争愈演愈烈，其它黑客小组的进度已经反超了他们。

“我们本来可以成为在饼干上面安装 Linux 的第一个小组，但是那群来自挪威的混蛋把我们击败了。” Piest 说。

第一个成功安装了 Linux 的蔬菜是一头卷心菜，它是由一个土耳其的一个黑客小组完成的。

（好啦——是不是已经目瞪口呆，事实上，这是一篇好几年前的恶搞文，你看出来了吗？哈哈哈哈）

---

via: <http://www.bbspot.com/news/2008/12/linux-on-a-potato.html>

作者：[Brian Briggs](file:///Users/wangxingyu/Develop/LCTT/TranslateProject/translated/share/briggsb@bbspot.com) 译者：[StdioA](https://github.com/StdioA), [hittlle](https://github.com/hittlle) 校对：[wxy](https://github.com/wxy)

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


哈希算法生存状况报告

Summary: 最近一个新闻说，原本各大浏览器厂商推动在 HTTPS 中放弃支持 SHA-1 算法，但是由于 Facebook 等公司认为尚有少部分用户采用老式的 SHA-1 算法，而建议延长支持期。姑且不论浏览器厂商和应用厂商的做法谁更合理，那么这里提到的 SHA-1 算法是什么呢？它有什么风险么？ 密码学里面有一类算法叫做哈希hash算法，也称作散列算法、摘要算法，通常用于对一段信息的取样。当你给它一段信息（message）时，可以用特定算法生成一段信息摘要（message digest），通常摘要的长度更短。摘要（digest）可以表示这段信息的某种特征就如同指纹一样，所以

前排跪舔wxy大牛

啊~~！

# 哈希算法生存状况报告

最近一个新闻说，原本各大浏览器厂商推动在 HTTPS 中放弃支持 SHA-1 算法，但是由于 Facebook 等公司认为尚有少部分用户采用老式的 SHA-1 算法，而[建议延长支持期](/article-6721-1.html)。姑且不论浏览器厂商和应用厂商的做法谁更合理，那么这里提到的 SHA-1 算法是什么呢？它有什么风险么？

密码学里面有一类算法叫做<ruby> 哈希 <rt>  hash </rt></ruby>算法，也称作散列算法、摘要算法，通常用于对一段信息的取样。当你给它一段<ruby> 信息 <rp>  （ </rp> <rt>  message </rt> <rp>  ） </rp></ruby>时，可以用特定算法生成一段<ruby> 信息摘要 <rp>  （ </rp> <rt>  message digest </rt> <rp>  ） </rp></ruby>，通常摘要的长度更短。<ruby> 摘要 <rp>  （ </rp> <rt>  digest </rt> <rp>  ） </rp></ruby>可以表示这段信息的某种特征——就如同指纹一样，所以这个特征也叫做<ruby> 指纹 <rp>  （ </rp> <rt>  fingerprint </rt> <rp>  ） </rp></ruby>、<ruby> 校验和 <rt>  checksum </rt></ruby>。

这种算法包括我们经常听说的 MD5 、SHA-1 等算法。它通常用于加密体系的信息摘要，以建立一个可靠、安全的数据交互通道。而现在，随着对加密技术的研究和计算能力的提升，不断发现摘要算法中的缺陷和攻击方法，因此，对于涉及到数据安全的算法方面，建议每过一个阶段就更换一次摘要算法。

理想情况下，哈希算法应该有四个重要特性：

* 不可逆：不能从摘要生成其原始信息
* 无冲突：不同的信息具备不同的摘要
* 易计算：对任意信息容易计算其摘要
* 特征化：信息修改后其摘要一定变化

当然，实际上，前两个特性在应用中有一些不成立的情况。

虽然算法可以做到不可完全逆转，但是存在找到生成相同摘要的两段或更多信息的可能性。这是因为摘要信息的域值范围有限，只能表现有限种类的信息，在用来表示无限的信息时，肯定存在冲突。而在摘要算法的应用场景中，往往并不要求使用具体的原始信息，只要你能生成同样的摘要就可以了，因此，也出现了类似彩虹表这样的数据库，供根据摘要信息查询原始信息。

而且由于算法本身可能会存在的缺陷，就有可能通过算法找到两个具有相同摘要的信息。比如 2004 年，山东大学的王小云教授就率团队突破了 MD5 算法，可以找到具备相同的 MD5 摘要的两段信息，从而为 MD5 算法的死亡盖上了“核准”印章。

那么我们就来看看，包括 MD5 在内的这些哈希算法们，都活着怎么样？

据 [valerieaurora.org](http://valerieaurora.org/hash.html) 的跟踪，当前的摘要算法们的生存状况如下：

<img src="content_image/album_201601_09_222437dyksyeztsjaalcz4.jpg" alt="" title="">

从上图可以看到，SHA-2 之前的算法，除了 RIPEMD-160 外，都已经被攻破或存在可实现的碰撞算法了，因此，再将其应用到产品中，就存在了各种风险。所以，尽快升级你的加密策略吧。


Atom 插件：让初音女神来鼓励你撸码

Summary: 前一段时间，有关程序员鼓励师的炒作传得满世界都是，原来宅男程序员们也有福利啊。当然，我是从来没在那些配备了程序员鼓励师的公司干过，无从体验是什么感觉。 不过，对于程序员来说，最重要的是咱可以双手撸码，没有咱可以自己造啊！这不，有位叫sunqibuhuake的程序员就自己撸了一个初音未来给自己写程序加油了！  （题图来自： kurorofikkykakao.deviantart.com） 如何给你的编辑器也配上一个初音未来给你加油呢？ 使用快捷键command + ,/ctrl + ,打开偏好设置。点击左侧的Install即可浏览线上的插件 。 顶部是一个搜索框，可以搜索已

死宅真可怕！

看笑了。。。。

这样还有心思写代码吗

我最讨厌把死宅和御宅分不清就随便说人家死宅的！

不懂~~求解~

求毛解，就是宅嘛，五十步还要笑百步，还笑得这么理直气壮

中国和支那不都是指China吗，区别很大吗？五十步还要笑百步，还笑得这么理直气壮

而我的电脑根本不适合运行 Atom 那样占用资源那么多的编辑器。

死宅就是家里蹲，御宅就是有兴趣爱好，不愿意出门与人交往的，区别在于死宅是没人约，被动地不想出去，御宅是想自己做自己事情而不想出去，主动的！！！！

学习啦~~哈哈

家里蹲着只睡觉吃饭打游戏，消耗食物与空气，爱好就是吃喝玩乐不工作，不是一样么？呵呵

看日本的东西看多了就这德性，呵呵

节操满满，动力满满。

还请赐教：码农、码畜和程序员的区别在哪里？

高人～～～

大致可以这么理解

程序员：80%时间在设计20%在编码

码农：80%时间在编码20%时间在设计

码畜：压根就不知道设计两个字是什么

道理我都懂，但是多少死宅自认为是技术宅，没人约假装是不想约，装着装着自己都信了

来自吉林长春的 Chrome Mobile 37.0|Android 5.0 用户

左手写代码，右手撸管（=--=）

楼上一定是左撇子~

让我想起了，office2000的那个回针，还有瑞星的小狮子

我就是个码畜啊

其实可以更加智能化的跳，二十六个英文字母，每一键的动作都不一样，哪么在按键时就可以做到如玩游戏一样，连击

还有江明杀毒的小青蛙

# Atom 插件：让初音女神来鼓励你撸码

前一段时间，有关程序员鼓励师的炒作传得满世界都是，原来宅男程序员们也有福利啊。当然，我是从来没在那些配备了程序员鼓励师的公司干过，无从体验是什么感觉。

不过，对于程序员来说，最重要的是咱可以双手撸码，没有咱可以自己造啊！这不，有位叫“[sunqibuhuake](https://atom.io/users/sunqibuhuake)”的程序员就自己撸了一个“[初音未来](https://atom.io/packages/atom-miku)”给自己写程序加油了！

*（题图来自： kurorofikkykakao.deviantart.com）*

如何给你的编辑器也配上一个初音未来给你加油呢？

使用快捷键 `command + ,`/`ctrl + ,` 打开偏好设置。点击左侧的 `Install` 即可浏览线上的插件 。 顶部是一个搜索框，可以搜索已经发布在 [atom.io](http://atom.io/http://atom.io/packages) 上的插件，输入“**atom-miku**”搜索安装即可。

然后用 `ctrl-alt-k` 激活就可以看到初音未来蹦到了你的桌面上了！ 她能从你的键盘输入获取到能量，就会唱歌和跳舞~继续撸，不能停！

来看看：

*（动图，1Mb+）*

据作者说，插件还很粗糙。当然作者也很勤奋，发布三天，已经放出了9个版本，大家快去提交 issues 和 PR 吧。程序员们，你不来试试？


X.Org 基金会恐将失去其单字母域名：x.org

Summary: 该域名将于 2016/1/19 日到期

没看明白啊~~~~~

way.land

看到X.org就想到开源驱动

# X.Org 基金会恐将失去其单字母域名：x.org

由于 [X.Org Foundation](http://www.x.org/wiki/XorgFoundation/) 管理不善，可能会失去其一直使用的单字母域名 [x.org](http://www.x.org/) 。在过去的半年里，他们尝试私下解决这个问题，但是目前看起来解决的希望不大，现在考虑寻求法律解决途径——而该域名将于 2016/1/19 日到期。

<img src="content_image/album_201601_10_233352drnrrl4jz9l44el7.jpg" alt="" title="">

这个域名注册的时间要比 [X.Org Foundation](http://www.x.org/wiki/XorgFoundation/) 还要早，最初是 The Open Group 用于 X Window System 的，注册于上世纪90年代（1997）。注册人 Leon Shiman 是 [X.Org Foundation](http://www.x.org/wiki/XorgFoundation/) 的创始成员，但过去几年已经不再参与该组织。

目前最大的问题是，由于之前 [X.Org Foundation](http://www.x.org/wiki/XorgFoundation/) 未能及时递交税务报告，而一度失去了501(c)(3)身份，所以改名为 X.Org Foundation LLC。后来在自由软件法律中心的帮助下恢复了501(c)(3)非盈利组织身份，于是又解散了 X.Org Foundation LLC，这个名字已经不再使用，而 X.Org Foundation 难以证明它和 X.Org Foundation LLC 是同一个组织。

这为各种开源组织提了一个醒。


Oracle 在其新的 Linux 内核中引入了热补丁功能

Summary: Oracle 的Michele Casey 宣布其 Unbreakable Enterprise Kernel (UEK) 4 发布！UEK 可用于 Oracle Linux 6 和 Oracle Linux 7 ，它们是基于 Centos 的衍生版。  UEK 4 带来了不少性能和功能方面的重大更新，包括 CPU 调度、自动NUMA 平衡以及众所期待的内核热补丁（Real-Time Kernel Patching）功能。 UEK 4 中的内核热补丁功能来自于 Linux 内核 4.1 主线内核的Ksplice 开源扩展，它可以让用户无需重启系统即可更新内核，这改进了系统安全和简化了云架构的管理。去年4月发布的 Linux 4.0 内核合并了 Live Patching，为实时内核打补丁功能

感觉这没大用处，也就更新内核的时候不用重启而已

# Oracle 在其新的 Linux 内核中引入了热补丁功能

Oracle 的 Michele Casey 宣布其 Unbreakable Enterprise Kernel (UEK) 4 发布！UEK 可用于 Oracle Linux 6 和 Oracle Linux 7 ，它们是基于 Centos 的衍生版。

<img src="content_image/album_201601_11_153804mtebbxx85sbdu8xs.jpg" alt="" title="">

UEK 4 带来了不少性能和功能方面的重大更新，包括 CPU 调度、自动 NUMA 平衡以及众所期待的<ruby> 内核热补丁 <rp>  （ </rp> <rt>  Real-Time Kernel Patching </rt> <rp>  ） </rp></ruby>功能。

UEK 4 中的内核热补丁功能来自于 Linux 内核 4.1 主线内核的 Ksplice 开源扩展，它可以让用户无需重启系统即可更新内核，这改进了系统安全和简化了云架构的管理。去年4月发布的 Linux 4.0 内核[合并了 Live Patching](/article-5272-1.html)，为实时内核打补丁功能提供了必要的内核模块 API 和用户空间 API/ABI。

除此之外，UEK 4 还带来了 LZ4 压缩算法、低延迟网络 polling等新的功能。以及在系统安全方面做了极大增强，包括新的随机数系统调用、内核地址空间随机化、对 SELinux 、nftables 等程序的更新等。


Linux 内核 4.4 LTS 发布，可以在虚拟机中玩 OpenGL 游戏了

Summary: 今天（美国时间 2016/1/10），Linux 历史翻开了新的一页，Linus Torvalds 以及千千万万辛勤的程序员们正式发布了 Linux 内核 4.4 LTS 版本（长期支持版）。

正道之路，偶有崎岖。

不错不错，这个要支持啊

archers, lead the way

对tcp的那个很惊讶啊

其实这次很多亮点都是不起眼的地方。

站长linux居然用的不是linux

-_-   把他的硬盘格了，赶紧装个Xubuntu...

TCP优化的确等了好多年了。virtio-gpu现在客户机驱动跟不上，别高兴得太早了。

mac os是属于unix的

偶编译kernel-4.4_x86-64, Fedora 23中替换kernel-4.3.3 总是不能关机,卡在kvm上,其它一切正常. 默认cpu从1024减少为64. 内核代码增加几百万行,主要是arm系列的.

看一下

从4.3开始到目前最新的所有版本，全部都会出现休眠不能唤醒或者唤醒后过没多久就挂起。在我的机子上……

悲剧的4.2只是个临时版本，只能降回4.1。

验证码有问题啊！！跳过个框提示”验证码验证中……"

。。。。

# Linux 内核 4.4 LTS 发布，可以在虚拟机中玩 OpenGL 游戏了

美国时间 2016/1/10，Linux 历史翻开了新的一页，Linus Torvalds 以及千千万万辛勤的程序员们正式发布了 Linux 内核 4.4 LTS 版本（长期支持版）。

<img src="content_image/album_201601_11_180039b2e3er9r22r853es.jpg" alt="可以现在可以在虚拟机中玩 OpenGL 游戏了" title="可以现在可以在虚拟机中玩 OpenGL 游戏了">

在这个版本中，最重要的更新莫过于在虚拟 GPU 驱动中支持了 3D 功能，这可以让虚拟机使用宿主机的 3D 硬件渲染功能。也就是说，**现在可以在虚拟机中使用宿主机的 GPU 加速能力来玩 OpenGL 游戏了**。

经过两年的努力，重构了 TCP 的实现，**使 TCP 监听器的快速路径完全无锁化**，可以支持更大的伸缩性和更快的 TCP 服务器了。在一台测试服务器上，每秒钟处理了 3,500,000 个 SYN 包仍富有余力，有可能还能提升2-3个数量级。

在 RAID/LVM 层增加了对日志型 RAID 5 阵列的支持。在日志型设备中，比如 NVRAM 或 SSD，写入到阵列的数据会首先写入到日志，然后才会写到阵列中。如果发生故障就可以从日志中恢复，加速阵列重新同步。同时修复了 RAID 的 Write Hole 问题。

此外，引入了支持<ruby> 异步 IO <rp>  （ </rp> <rt>  Asynchronous I/O </rt> <rp>  ） </rp></ruby>和<ruby> 直接 IO <rp>  （ </rp> <rt>  Direct I/O </rt> <rp>  ） </rp></ruby> 的更加精简快速的<ruby> 回路 <rp>  （ </rp> <rt>  loop </rt> <rp>  ） </rp></ruby>设备，从而提升了系统性能并减少了内存占用；通过 LightNVM 支持了开放通道固态硬盘；非特权用户可以运行 eBPF 程序了，从而实现了持久化运行，同时 pref 也增加了对 eBPF 程序的支持；支持<ruby> 块轮询 <rt>  Block polling </rt></ruby>以改善高端存储设备的整体性能；全新的 mlock2() 系统调用可以在内存页错误时锁住内存。

“这周没有什么意外发生，所以 Linux 4.4 如期到达。和之前的 4.4 rc8 差异不大”，Linus Torvalds 说，“其中有1/3的架构方面的更新、1/3的驱动和1/3的其它方面的更新（主要是一些内核和网络方面的），但是这些改动都很小。也许值得注意的是 x86-32 的 'sysenter' ABI，有些人（比如 android-x86）可能误用了它，没有使用 vdso 而是直接使用了该指令。”

完整的更新说明请参见 Linux Torvalds 的[发布公告](http://lkml.iu.edu/hypermail/linux/kernel/1601.1/01592.html)。

Linux 内核 4.4 LTS 是目前最新的长期支持内核分支，可以预期它会出现在 Ubuntu 16.04 LTS （Xenial Xerus）及其它的 Linux 发行版中。不过我觉得 Arch Linux 的用户们肯定是第一个用上的。当然，如果你想尝试一下，你也可以从 [kernel.org](http://kernel.org/) 网站下载源代码，自己构建即可。

参考来源：[softpedia](http://news.softpedia.com/news/linux-kernel-4-4-lts-officially-released-adds-3d-support-in-the-virtual-gpu-driver-498700.shtml)、[kernelnewbies](http://kernelnewbies.org/Linux_4.4)


问卷：您的意见将指导自由软件运动的发展方向！

Summary: 2015年，自由软件基金会（ Free Software Foundation）（FSF）度过了其三十岁生日。这三十年来，FSF 积极地站在捍卫和推进计算机用户权利的前沿，做出了不可磨灭的贡献。这三十年来，自由软件社区以及 FSF ，已经将自由软件（free software）的理念传播到了全世界，并得到了社区以及整个网络上的普遍认知。  为了指导 FSF 接下来五年的发展方向，FSF 特地发起了一个投票（兼募捐），希望能听到社区的声音，将您的观点和建议展示给 FSF，共创更加辉煌的未来。 请移步https://www.fsf.org/survey?pk_campaign=survey-launchpk_kwd=survey填

一方面过于理想化，一方面又想听取广泛意见，但却没有提供多语言版本的调查表。

☐ 不介意

  ☐ 介意

是不是弄反了？

是的，我修改下。

是啊，这算不算一种傲慢~

FSF是个激进会，笑笑就好

来自湖北武汉的 Chrome Mobile 78.0|Android 8.1 用户

# 问卷：您的意见将指导自由软件运动的发展方向！

2015年，<ruby> 自由软件基金会 <rp>  （ </rp> <rt>  Free Software Foundation </rt> <rp>  ） </rp></ruby>（FSF）[度过了其三十岁生日](/article-6384-1.html)。这三十年来，FSF 积极地站在捍卫和推进计算机用户权利的前沿，做出了不可磨灭的贡献。这三十年来，自由软件社区以及 FSF ，已经将<ruby> 自由软件 <rp>  （ </rp> <rt>  free software </rt> <rp>  ） </rp></ruby>的理念传播到了全世界，并得到了社区以及整个网络上的普遍认知。

为了指导 FSF 接下来五年的发展方向，FSF 特地发起了一个投票（兼募捐），希望能听到社区的声音，将您的观点和建议展示给 FSF，共创更加辉煌的未来。

请移步 <https://www.fsf.org/survey?pk_campaign=survey-launch&pk_kwd=survey> 填写调查问卷。

同时，为了方便中国的自由软件运动关注者，我们也对该问卷的内容做了一份翻译，列于下面供参考，如有不当之处敬请指出：

---

>
> FSF 愿景调查
> --------
>
>
> 通过这份问卷调查，您将帮助 FSF 更好的了解自由软件运动的优先事项、需求和关注点。它也许会占用您5到15分钟的时间。本问卷的最终截止时间是北京时间 2016/2/2 凌晨 1:00。
>
>
> 此问卷调查是匿名的（如果没有在最后填入您的邮箱地址）。不管是否匿名，我们都会重视您的意见。我们还是希望能够获得您的联系方式，以防需要跟您进行进一步的沟通。
>
>
> 本问卷一旦开始就不应该停止和重新开始，所有的内容都需要一次完成。所有的问题都可以跳过。您可以随时跳过那些您不关心的问题。十分感谢您的支持。
>
>
> ### FSF 和自由软件
>
>
> ##### 您认为在未来的5年，FSF 应该关注的重点是（最多选择3项）：
>
>
> * ☐ 网络自由：自由的 JavaScript，网络中立，推进去中心化的网络服务和抵制“<ruby>   服务即软件替代  <rp>  （ </rp> <rt>  Service as a Software Substitute </rt> <rp>  ） </rp></ruby>”（SaaSS）
> * ☐ Copyleft：推广使用类似 GNU GPL 的 copyleft 许可证，而不是更宽松的自由软件许可证，并贯彻 执行 GPL
> * ☐ 监控和安全：使用自由软件以防止大范围的监控，并确保自由软件是安全的
> * ☐ DRM：终结<ruby> 数字版权保护 <rp>  （ </rp> <rt>  Digital Restrictions Management </rt> <rp>  ） </rp></ruby>（DRM），让它从网上滚蛋
> * ☐ 许可证指导：帮助开发人员了解和使用自由许可证，并告诉他们哪个许可证最适合他们
> * ☐ 软件专利：终结（而不只是改革）软件专利
> * ☐ 开发：帮助 GNU 项目和其他项目编写新的软件和改进现有软件
> * ☐ 团队建设：增加多样性，让自由软件中的少数派也能够发声
> * ☐ 硬件：帮助或提振可以 100% 运行自由软件的硬件开发，特别是在移动/嵌入式领域
> * ☐ 采用：帮助个人或团体去使用自由软件
>
>
> ### 评价以下的内容
>
>
> ##### FSF 是自由软件运动的正面典型
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### 来自 FSF 的邮件太多
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### FSF 的在线资料缺乏吸引力且不够人性化
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### FSF 在促进自由软件社区中的多样性和少数派方面做了不少工作
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### FSF 偕同其他的组织在为计算机用户权益方面的广泛运动做了很好的工作
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### FSF 需要更妥协一些
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### FSF 有效地使用了收到的捐款
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### FSF 整体运作良好
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### 回顾过去30年，自由软件运动已经成功的实现了目标
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### 自由软件对于新手来说太过混乱，对于自由软件的开发来说，易用性应该优先考虑
>
>
> * ☐ 强烈反对 ☐ 不同意 ☐ 既不同意也不反对 ☐ 同意 ☐ 强烈同意
>
>
> ##### 假想到2020年，因为自由软件运动和 FSF 的努力，人们在使用计算机方面拥有更多的自由和权力。说说为了达成这一目标，我们应该做些什么。
>
>
> *
>
>
> ##### 假想到2020年，事实恰恰相反——我们作为计算机用户并不是那么自由。说说我们在哪些地方将会做错。
>
>
> *
>
>
> ##### 哪个社会运动或组织是您所乐见我们与之通力协作的。
>
>
> *
>
>
> ### 关于您
>
>
> ##### 过去您是否以以下一种方式参与到 FSF，请选择相应的选项
>
>
> * ☐ 志愿者，工作人员或者是董事会成员
> * ☐ 准成员
> * ☐ 非会员的捐助
> * ☐ 在网络上关注（网站，邮件，社交媒体）
> * ☐ 关注我们的消息
>
>
> ##### 如果您在网络上关注我们，请选择相应的选项
>
>
> * ☐ Email（包括每月的通报： Free Software Supporter）
> * ☐ 博客文章（fsf.org/blogs）
> * ☐ 新闻稿和新闻公告（fsf.org/news）
> * ☐ RSS 源
> * ☐ 除 twitter 外的社交媒体和新闻平台（GNU/social、Pump.io、Reddit 等）
> * ☐ Twitter
>
>
> ##### 如果您支持 FSF 的工作（在任何方面），请告知我们您的主要理由，选择相应的选项
>
>
> * ☐ 我想要支持自由软件的开发
> * ☐ 我想要支持自由软件理念的行动和宣讲
> * ☐ 我关注 GPL 的贯彻执行
> * ☐ 我使用 GNU 软件且想要给予回馈
>
>
> ##### 如果您之前有捐赠我们或是我们的成员，但是现在却不再继续了，请告知原因
>
>
> *
>
>
> ##### 为什么自由软件对你很重要，为什么你选择使用它
>
>
> *
>
>
> ##### 如何形容您参与自由软件的主要方式（以及对 FSF 感兴趣的地方），选择相应的选项
>
>
> * ☐ 我是自由软件的开发者
> * ☐ 我在文档，设计，测试，翻译或者是其他方面为自由软件开发提供帮助
> * ☐ 我使用自由软件
> * ☐ 我是自由软件的积极分子
>
>
> ##### 你为软件开发付过费没有（无论是自由软件还是其它）
>
>
> * ☐ 是 ☐ 否
>
>
> ##### 详细描述你的回答，无论是正面或负面的反馈，都可以在这里填写
>
>
> *
>
>
> ### 统计
>
>
> ##### 性别
>
>
> *
>
>
> ##### 生日
>
>
> *
>
>
> ### 联系信息
>
>
> ##### 是否介意 FSF 在公开著述中匿名引用您的文字？
>
>
> * ☐ 可能介意，请先联系我（假如没有登录，需要留下您的邮箱）
> * ☐ 介意
> * ☐ 不介意
>
>
> ##### 你希望加入我们的低频率邮件列表，接收我们的每月通报吗？
>
>
> （如果你没有登录，需要输入你的邮件地址） ☐ 登记
>
>
> ##### （可选）邮件地址。这将让你调查结果不再匿名
>
>
> *
>
>
>

**注意：以上译文仅供你在提交[调查问卷](https://www.fsf.org/survey?pk_campaign=survey-launch&pk_kwd=survey)时参考，此处并不具备问卷提交功能，请访问 [FSF 的问卷地址](https://www.fsf.org/survey?pk_campaign=survey-launch&pk_kwd=survey)提交。**

最后，提交完问卷之后，FSF 建议你考虑捐赠或付费注册成为会员，以支持 FSF 的工作。


Ubuntu 里的“间谍软件”将在 Ubuntu 16.04 LTS 中被禁用

Summary: 出于用户隐私的考虑，Ubuntu 阉割了一个有争议的功能。   Unity 中有争议的在线搜索功能将在今年四月份发布的 Ubuntu 16.04 LTS 中被默认禁用 用户在 Unity 7 的 Dash 搜索栏里将只能搜索到本地文件、文件夹以及应用。这样，用户输入的关键词将不会被发送到 Canonical 或任何第三方内容提供商的服务器里。  现在，Unity 的在线搜索在默认状况下是关闭的  在目前 ubuntu 的支持版本中，Dash 栏会将用户搜索的关键词发送到 Canonical 运营的远程服务器中。它发送这些数据以用于从50多家在线服务获取搜索结果，这些服务包括维基百科、YouTube

反正我不用 Ubuntu。

抛开隐私不讲，我想知道把我的搜索内容上传到远程服务器后，怎么就对用户的体验有帮助了？能不能给一份搜集前和搜集后的用户体验报表来看看？某个组织跟踪你、收集你的隐私，然后说这是为你好（按照 Canonical 的说法，贡献你的隐私，是为人民群众好），请问怎么个好法？

# Ubuntu 里的“间谍软件”将在 Ubuntu 16.04 LTS 中被禁用

>
> 出于用户隐私的考虑，Ubuntu 阉割了一个有争议的功能。
>
>
>

**Unity 中有争议的在线搜索功能将在今年四月份发布的 Ubuntu 16.04 LTS 中被默认禁用**

用户在 Unity 7 的 Dash 搜索栏里将**只能搜索到本地文件、文件夹以及应用**。这样，用户输入的关键词将不会被发送到 Canonical 或任何第三方内容提供商的服务器里。

>
> “现在，Unity 的在线搜索在默认状况下是关闭的”
>
>
>

在目前 ubuntu 的支持版本中，Dash 栏会将用户搜索的关键词发送到 Canonical 运营的远程服务器中。它发送这些数据以用于从50多家在线服务获取搜索结果，这些服务包括维基百科、YouTube 和 The Weather Channel 等。

我们可以选择去**系统设置 > 隐私控制**关闭这项功能。但是，一些开源社区针对的是默认打开这个事情。

### Ubuntu 在线搜索引发的争议

>
> “Richard Stallman 将这个功能描述为 ‘间谍软件’”
>
>
>

早在2012年，在 Ubuntu 搜索中整合了来自亚马逊的内容之后，开源社区就表示为其用户的隐私感到担忧。在2013年，“Smart Scopes 服务”全面推出后，开源社区再度表示担忧.

风波如此之大，以至于开源界大神 [Richard Stallman 都称 Ubuntu 为"间谍软件"](http://arstechnica.com/information-technology/2012/12/richard-stallman-calls-ubuntu-spyware-because-it-tracks-searches/?utm_source=omgubuntu)。

[电子前哨基金会 (EFF)](https://www.eff.org/deeplinks/2012/10/privacy-ubuntu-1210-amazon-ads-and-data-leaks?utm_source=omgubuntu)也在一系列博文中表达出对此的关注，并且建议 Canonical 将这个功能做成用户自由选择是否开启的功能。Privacy International 比其他的组织走的更远，对于 Ubuntu 的工作，他们给 Ubuntu 的缔造者发了一个“[老大哥奖](http://www.omgubuntu.co.uk/2013/10/ubuntu-wins-big-brother-austria-privacy-award)”。

[Canonical](http://blog.canonical.com/2012/12/07/searching-in-the-dash-in-ubuntu-13-04/) 坚称 Unity 的在线搜索功能所收集的数据是匿名的以及“不可识别是来自哪个用户的”。

在[2013年 Canoical 发布的博文中](http://blog.canonical.com/2012/12/07/searching-in-the-dash-in-ubuntu-13-04/?utm_source=omgubuntu)他们解释道：“**（我们）会使用户了解我们收集哪些信息以及哪些第三方服务商将会在他们搜索时从 Dash 栏中给出结果。我们只会收集能够提升用户体验的信息。**”

### Ubuntu 开始严肃对待的用户数据隐私

Canonical 在给新安装的 Ubuntu 14.04 LTS 以及以上版本中禁用了来自亚马逊的产品搜索结果（尽管来自其他服务商的搜索结果仍然在出现，直到你关闭这个选项）

在下一个LTS（长期支持）版，也就是 Ubuntu 16.04 中，Canonical 完全关闭了这个有争议的在线搜索功能，这个功能在用户安装完后就是关闭的。就如同 EFF 在2012年建议他们做的那样。

“你搜索的关键词将不会逃出你的计算机。” [Ubuntu 桌面主管 Will Cooke](http://www.whizzy.org/2015/12/online-searches-in-the-dash-to-be-off-by-default?utm_source=omgubuntu)解释道，“对于搜索结果的更精细的控制”和 Unity 8 所提供的“更有针对性的结果添加不到 Unity 7 里”。

这也就是“(Unity 7)的在线搜索功能将会退役”的原因。

这个变化也会降低对 Unity 7 的支持以及对 Canonical 基础设施的压力。Unity 提供的搜索结果越少，Canonical 就能把时间和工程师放到更加振奋人心的地方，比如更早的发布 Unity 8 桌面环境。

### 在 Ubuntu 16.04 中你需要自己开启在线搜索功能

*在 Ubuntu 隐私设置中你可以打开在线搜索功能*

禁用 Ubuntu 桌面的在线搜索功能的决定将获得众多开源/免费软件社区的欢呼。但是并不是每一个人都对 Dash 提供的语义搜索功能反感，如果你认为你失去了在搜索时预览天气、查看新闻或其他来自 Dash 在线搜索提供的内容所带来的效率的话，你只需要简单的点几下鼠标就可以**再次打开这个功能**，定位到 Ubuntu 的**系统设置 > 隐私控制 > 搜索**然后将选项调至“**开启**”。

这个选项不会自动把亚马逊的产品信息加入到搜索结果中。如果你想看产品信息的话，需要打开第二个可选项“shipping lens”才能看到来自 Amazon （和 Skimlinks）的内容。

### 总结

* 默认情况下，Ubuntu 16.04 LTS 的 Dash 栏将不会搜索到在线结果
* 可以手动打开在线搜索
* **系统设置 > 隐私控制 > 搜索**中的第二个可选项允许你看到亚马逊的产品信息
* 这个变动只会影响新安装的系统。从老版本升级的将会保留用户的喜好

你同意这个决定吗？抑或是 Cononical 可能降低了新用户的体验？在评论中告诉我们。

---

via: <http://www.omgubuntu.co.uk/2016/01/ubuntu-online-search-feature-disabled-16-04>

作者：[Joey-Elijah Sneddon](https://plus.google.com/117485690627814051450/?rel=author) 译者：[name1e5s](https://github.com/name1e5s) 校对：[wxy](https://github.com/wxy)

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


开源 DJ 软件 Mixxx 2.0 版发布

Summary: 时隔三年，开源 DJ 混音软件 Mixxx 再度发布一个大的版本更新----Mixxx 2.0。 Mixxx 是一个跨平台的自由、开源的 DJ 混音软件，它几乎提供了当你想自己混音时需要的一切功能。Mixxx 近几年在专业人士以及业余爱好者中都很火。 甚至在 Mixxx 中你能使用你的 iTunes 音乐库。它的强有力的引擎使它支持多种文件格式。Mixxx 默认即支持超过85种MIDI DJ 调节器以及少部分 HID 调节器。它也包含一个自动选项，可以让你在混音时休息一下。 Mixxx 的完整功能列表可以在这里找到。在查看完整列表之前，让我们看看最新版有何更新。 Mixxx 2.0更新

# 开源 DJ 软件 Mixxx 2.0 版发布

<img src="content_image/album_201601_13_093606fk2wvn8qnowveznn.jpg" alt="" title="">

时隔三年，开源 DJ 混音软件 [Mixxx](http://mixxx.org/) 再度发布一个大的版本更新----Mixxx 2.0。

Mixxx 是一个跨平台的自由、开源的 DJ 混音软件，它几乎提供了当你想自己混音时需要的一切功能。Mixxx 近几年在专业人士以及业余爱好者中都很火。

甚至在 Mixxx 中你能使用你的 iTunes 音乐库。它的强有力的引擎使它支持多种文件格式。Mixxx 默认即支持超过85种MIDI DJ 调节器以及少部分 HID 调节器。它也包含一个自动选项，可以让你在混音时休息一下。

Mixxx 的完整功能列表可以在[这里](http://mixxx.org/features/)找到。在查看完整列表之前，让我们看看最新版有何更新。

### Mixxx 2.0更新

* 可动态调整大小的外观
* 4 轨道混音并且和主轨道同步
* 内置特效
* 谐波混频（Harmonic Mixing）与音乐按键检测
* RGB 音频波形
* 4 个麦克风输入和 4 个音频输入，麦克风音量可调
* 黑胶音源输入、输出
* 支持自定义封面
* 核心混音引擎改进
* 更新的音乐库
* 改进增强了 DJ 调节器

你可以在[这里](http://mixxx.org/whats-new-in-mixxx-2-0/)中看到所有的新功能。

### 在基于 Ubuntu 的发行版中安装 Mixxx 2.0

Mixxx 提供了他们自己的ppa源，这使得在基于 Ubuntu 的发行版，如 Linux Mint、elementary OS、 Zorin OS 上安装Mixxx 2.0 变得十分简单.

打开终端,并输入如下命令:

```
sudo add-apt-repository ppa:mixxx/mixxx
sudo apt-get update
sudo apt-get install mixxx

```

使用如下命令卸载 Mixxx:

```
sudo apt-get remove mixxx
sudo add-apt-repository --remove ppa:mixxx/mixxx

```

如果你已经在使用旧版本的 Mixxx。它将很快升级到2.0版。

### 在其他发行版中安装 Mixxx 2.0

Archliunx

```
sudo pacman -S mixxx

```

对于其他发行版，你还可以从源码编译安装 Mixxx。从下列地址下载源代码：

* [源码地址](http://downloads.mixxx.org/mixxx-2.0.0/mixxx-2.0.0-src.tar.gz)

由于 Mixxx 是个跨平台的应用，你也可以下载它的 Windows 版或者 Mac OS 版，请访问 Mixxx 下载页面找到对应的下载链接：

* [下载地址](http://mixxx.org/download/)

---

via: <http://itsfoss.com/dj-mixxx-2/>

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

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


错误：无法与 SFTP 服务器建立 FTP 连接

Summary: 问题 有一天我要连接到我的 web 服务器。我使用 FileZilla 连接到 FTP 服务器。当我输入主机名和密码连接服务器后，我得到了下面的错误。  Error: Cannot establish FTP connection to an SFTP server. Please select proper protocol. Error: Critical error: Could not connect to server   原因 看见错误信息后我意识到了我的错误是什么。我尝试与一台 SFTP 服务器建立一个 FTP 连接。很明显我没有使用一个正确的协议（应该是SFTP而不是FTP）。 如你在上图所见，FileZilla 默认使用的是FTP协议。 解决 Cannot establish FTP connection

呵呵，我想打人

看完这种文章，有这种感觉是正常的。

好好奇这篇有些~~脑残~~简单的文章为何会被选题看中:joy:

我下载了gftp软件，在host地址里我输入一个错误网站，但是它一直被保留在host搜索框了，有没有什么办法可以删除它？

# 错误：无法与 SFTP 服务器建立 FTP 连接

### 问题

有一天我要连接到我的 web 服务器。我使用 [FileZilla](https://filezilla-project.org/) 连接到 FTP 服务器。当我输入主机名和密码连接服务器后，我得到了下面的错误。

>
> Error: Cannot establish FTP connection to an SFTP server. Please select proper protocol.
>
>
> Error: Critical error: Could not connect to server
>
>
>

### 原因

看见错误信息后我意识到了我的错误是什么。我尝试与一台 **SFTP** 服务器建立一个 **[FTP](https://en.wikipedia.org/wiki/File_Transfer_Protocol)** 连接。很明显我没有使用一个正确的协议（应该是SFTP而不是FTP）。

如你在上图所见，FileZilla 默认使用的是FTP协议。

### 解决 “Cannot establish FTP connection to an SFTP server” 的方案

解决方案很简单。使用 SFTP 协议而不是 FTP。你要做的就是把协议修改成 SFTP。这就是我要告诉你的。

在 FileZilla 菜单中，进入 **文件->站点管理**。

在站点管理中，进入通用选项并选择 SFTP 协议。同样填上主机、端口号、用户密码等。

我希望你从这里可以开始工作了。

我希望本篇教程可以帮助你修复 “Cannot establish FTP connection to an SFTP server. Please select proper protocol.”这个问题。在相关的文章中，你可以读[了解在 Linux 中如何设置 FTP](http://itsfoss.com/set-ftp-server-linux/)。

---

via: <http://itsfoss.com/fix-establish-ftp-connection-sftp-server/>

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

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


awk & sed ，一个老派系统管理员的基本素养

Summary: 我们不要让下一代 Linux 和 Unix 的管理员忘记初始化脚本和基本工具的好处 我曾经有一次在 Reddit 看到一个帖子，请问如何操作文本文件。这是一个很简单的需求，就像我们常用 Unix 的人每天遇到的一样。他的问题是，如何删除文件中的重复行，只保留不重复的。 这听起来似乎很简单，但是当文件足够大时，就会有些复杂。 这个问题有很多种不同的答案。你可以使用几乎任何一种语言来写这样的一个脚本，只是时间的投入和代码的复杂性不同罢了。根据你的个人水平，它大概会花费20-60分钟。但是如果你使用了 Perl、Pytho

awk的文本处理功能还是很强大的。

说好的sed呢？

sed -n s/loli/wife/ ./*register*

最后一句说的很好

# awk & sed ，一个老派系统管理员的基本素养

<img src="content_image/album_201601_13_140855yv1qv3qvwc9qvcce.jpg" alt="" title="">

*图片来源: Shutterstock*

**我们不要让下一代 Linux 和 Unix 的管理员忘记初始化脚本和基本工具的好处**

我曾经有一次在 Reddit 看到一个帖子，“[请问如何操作文本文件](https://www.reddit.com/r/linuxadmin/comments/3lwyko/how_do_i_remove_every_occurence_of_duplicate_line/)”。这是一个很简单的需求，就像我们常用 Unix 的人每天遇到的一样。他的问题是，如何删除文件中的重复行，只保留不重复的。 这听起来似乎很简单，但是当文件足够大时，就会有些复杂。

这个问题有很多种不同的答案。你可以使用几乎任何一种语言来写这样的一个脚本，只是时间的投入和代码的复杂性不同罢了。根据你的个人水平，它大概会花费20-60分钟。但是如果你使用了 Perl、Python、Ruby 中的一种，你可能很快实现它。

或者你可以使用下面的一个方法，让你无比暖心的: 只用 awk。

这个答案是迄今为止最简明、最简单的解决问题的方法。它只要一行！

```
awk '!seen[$0]++' <filename>

```

让我们来看看发生了什么：

在这个命令中，其实隐藏了很多代码。awk 是一种文本处理语言，并且它内部有很多预设。首先，你看到的实际上是一个 for 循环的结果。awk 假定你想通过循环处理输入文件的每一行，所以你不需要明确的去指定它。awk 还假定了你需要打印输出处理后的数据，所以你也不需要去指定它。最后，awk 假定循环在最后一句指令执行完结束，这一块也不再需要你去指定它。

这个例子中的字符串 seen 是一个关联数组的名字。$0 是一个变量，表示整个当前行。所以，这个命令翻译成人类语言就是“对这个文件的每一行进行检查，如果你之前没有见过它，就打印出来。” 如果该关联数组的键名还不存在就添加到数组，并增加其取值，这样 awk 下次遇到同样的行时就会不匹配（条件判断为“假”），从而不打印出来。

>
> 据微博上 [@ZorroLang](http://weibo.com/3246109510 "ZorroLang") 的补充：少提了一个重点，要不然只会 C 语言的人很难理解为什么 seen[$0]++ 一行代码就行了，这里隐含了 awk 对于其数组变量的处理方式。awk 的数组是关联数组，且不需要声明，而是引用即创建，注意是创建，后面都不会消失的。也就是你像 str[any] 这样随便写一个数组变量，这个数组元素就此就创建了，且初始化为0或空。
>
>
> 谢谢 [@ZorroLang](http://weibo.com/3246109510 "ZorroLang") ~
>
>
>

一些人认为这样是优雅的，另外的人认为这可能会造成混淆。任何在日常工作上使用 awk 的都是第一类人。awk 就是设计用来做这个的。在 awk 中，你可以写多行代码。你甚至可以[用 awk 写一些让人不安的复杂功能](http://intro-to-awk.blogspot.com/2008/08/awk-more-complex-examples.html)。但终究来说，awk 还是一个进行文本处理的程序，一般是通过管道。去掉（没必要的）循环定义是很常见的快捷用法，不过如果你乐意，你也可以用下面的代码做同样的事情：

```
awk '{ if (!seen[$0]) print $0; seen[$0]++ }’

```

这会产生相同的结果。

awk 是完成这项工作的完美工具。不过，我相信很多管理员--特别是新管理员会转而使用 [Bash](http://www.infoworld.com/article/2613338/linux/linux-how-to-script-a-bash-crash-course.html) 或 Python 来完成这一任务，因为对 awk 的知识和对它的能力的了解看起来随着时间而慢慢被人淡忘。我认为这是标志着一个问题，由于对之前的解决方案缺乏了解，那些已经解决了几十年的问题又突然出现了。

shell、grep、sed 和 awk 是 Unix 的基础。如果你不能非常轻松的使用它们，你将会被自己束缚住，因为它们构成了通过命令行和脚本与 Unix 系统交互的基础。学习这些工具如何工作最好的方法之一就是观察真实的例子和实验，你可以在各种 Unix 衍生系统的初始化系统中找到很多，但在 Linux 发行版中它们已经被 [systemd](http://www.infoworld.com/article/2608798/data-center/systemd--harbinger-of-the-linux-apocalypse.html) 取代了。

数以百万计的 Unix 管理员了解 Shell 脚本和 Unix 工具如何读、写、修改和用在初始化脚本上。不同系统的初始化脚本有很大不同，甚至是不同的 Linux 发行版也不同。但是它们都源自 sh，而且它们都用像 sed、awk 还有 grep 这样的核心的命令行工具。

我每天都会听到很多人抱怨初始化脚本太“古老”而且很“难”。但是实际上，初始化脚本和 Unix 管理员每天使用的工具一样，还提供了一个非常好的方式来更加熟悉和习惯这些工具。说初始化脚本难于阅读和难于使用实际上是承认你缺乏对 Unix 基础工具的熟悉。

说起在 Reddit 上看到的内容，我也碰到过这个问题，来自一个新入行的 Linux 系统管理员, “[问他是否应该还要去学老式的初始化系统 sysvinit](https://www.reddit.com/r/linuxadmin/comments/3ltq2y/when_i_start_learning_about_linux_administration/)”。 这个帖子的大多数的答案都是正面的——是的，应该学习 sysvinit 和 systemd 两个。一位评论者甚至指出，初始化脚本是学习 Bash 的好方法。而另一个消息是，Fortune 50 强的公司还没有计划迁移到以 systemd 为基础的发行版上。

但是，这提醒了我这确实是一个问题。如果我们继续沿着消除脚本和脱离操作系统核心组件的方式发展下去，由于疏于接触，我们将会不经意间使新管理员难于学习基本的 Unix 工具。

我不知道为什么有些人想在一层又一层的抽象化来掩盖 Unix 内部，但是这样发展下去可能会让新一代的系统管理员们变成只会按下按钮的工人。我觉得这不是一件好事情。

---

via: <http://www.infoworld.com/article/2985804/linux/remember-sed-awk-linux-admins-should.html>

作者：[Paul Venezia](http://www.infoworld.com/author/Paul-Venezia/) 译者：[Bestony](https://github.com/Bestony) 校对：[wxy](https://github.com/wxy)

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


如何在 Ubuntu 上使用 Glances 监控系统

Summary: Glances 是一个用于监控系统的跨平台、基于文本模式的命令行工具。它是用 Python 编写的，使用 psutil 库从系统获取信息。你可以用它来监控 CPU、平均负载、内存、网络接口、磁盘 I/O，文件系统空间利用率、挂载的设备、所有活动进程以及消耗资源最多的进程。Glances 有很多有趣的选项。它的主要特性之一是可以在配置文件中设置阀值（careful（小心）、warning（警告）、critical（致命）），然后它会用不同颜色显示信息以表明系统的瓶颈。 Glances 的功能  CPU 平均负载 不同状态（如活动、休眠）进程的数量 所有内存信息，如物理内存、

# 如何在 Ubuntu 上使用 Glances 监控系统

Glances 是一个用于监控系统的跨平台、基于文本模式的命令行工具。它是用 Python 编写的，使用 `psutil` 库从系统获取信息。你可以用它来监控 CPU、平均负载、内存、网络接口、磁盘 I/O，文件系统空间利用率、挂载的设备、所有活动进程以及消耗资源最多的进程。Glances 有很多有趣的选项。它的主要特性之一是可以在配置文件中设置阀值（<ruby> careful <rp>  （ </rp> <rt>  小心 </rt> <rp>  ） </rp></ruby>、<ruby> warning <rp>  （ </rp> <rt>  警告 </rt> <rp>  ） </rp></ruby>、<ruby> critical <rp>  （ </rp> <rt>  致命 </rt> <rp>  ） </rp></ruby>），然后它会用不同颜色显示信息以表明系统的瓶颈。

### Glances 的功能

* CPU 平均负载
* 不同状态（如活动、休眠）进程的数量
* 所有内存信息，如物理内存、交换空间、空闲内存
* CPU 信息
* 网络连接的上行/下行速度
* 磁盘 I/O 读/写速度详细信息
* 当前挂载设备的磁盘使用情况
* 消耗资源最多的进程和他们的 CPU/内存使用情况

### 安装 Glances

Glances 在 Ubuntu 的软件仓库中，所以安装很简单。执行下面的命令安装 Glances：

```
sudo apt-get install glances

```

（LCTT 译注：若安装后无法正常使用，可考虑使用 pip 安装/升级 glances：`sudo pip install --upgrade glances`）

### Glances 使用方法

安装完成后，可以执行下面的命令启动 Glances：

```
glances

```

你将看到类似下图的输出：

要退出 Glances 终端，按 ESC 键或 `Ctrl + C`。

默认情况下，时间间隔（LCTT 译注：显示数据刷新的时间间隔）是 1 秒，不过你可以在从终端启动 Glances 时自定义时间间隔。

要把时间间隔设为 5 秒，执行下面的命令：

```
glances -t 5

```

### Glances 中不同颜色含义

Glances 中不同颜色的含义：

* `绿色`：正常（OK）
* `蓝色`：小心（careful）
* `紫色`：警告（warning）
* `红色`：致命（critical）

默认设置下，Glances 的阀值设置是：careful=50，warning=70，critical=90。你可以通过 “/etc/glances/” 目录下的默认配置文件 glances.conf 来自定义这些阀值。

### Glances 的选项

Glances 提供了很多快捷键，可以在它运行时用来查找输出信息。

下面是一些常用的热键列表：

* `m` : 按内存占用排序进程
* `p` : 按进程名称排序进程
* `c` : 按 CPU 占用率排序进程
* `i` : 按 I/O 频率排序进程
* `a` : 自动排序进程
* `d` : 显示/隐藏磁盘 I/O 统计信息
* `f` : 显示/隐藏文件系统统计信息
* `s` : 显示/隐藏传感器统计信息
* `y` : 显示/隐藏硬盘温度统计信息
* `l` : 显示/隐藏日志
* `n` : 显示/隐藏网络统计信息
* `x` : 删除警告和严重日志
* `h` : 显示/隐藏帮助界面
* `q` : 退出
* `w` : 删除警告记录

### 使用 Glances 监控远程系统

你也可以使用 Glances 监控远程系统。要在远程系统上使用它，使用下面的命令：

```
glances -s

```

你会看到类似下面的输出：

如你所见，Glances 运行在 61209 端口。

现在，到远程机器上执行下面的命令以连接到指定 IP 地址的 Glances 服务器上。假设 192.168.1.10 是你的 Glances 服务器 IP 地址。

```
glances -c -P 192.168.1.10

```

### 结论

对于每个 Linux 系统管理员来说，Glances 都是一个非常有用的工具。使用它，你可以轻松、高效地监控 Linux 系统。如果你有什么问题，自由地评论吧。

---

via: <https://www.maketecheasier.com/glances-monitor-system-ubuntu/>

作者：[Hitesh Jethva](https://www.maketecheasier.com/author/hiteshjethva/) 译者：[bianjp](https://github.com/bianjp) 校对：[wxy](https://github.com/wxy)

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


在大学培养学生们参与开源代码开发的十四个技巧

只要算学分就行了

# 在大学培养学生们参与开源代码开发的十四个技巧

<img src="content_image/album_201601_14_055457d99z16v22gyczj91.png" alt="" title="">

学术界是培养和塑造未来的开源开发者的最佳平台。研究中发现，我们偶尔会开源自己编写的软件。这样做有两个理由，一是为了推广自己编写的工具的使用，二是为了了解人们使用这些工具时会遇到哪些问题。在这样一个编写研究软件的背景下，我的任务就是为 Bradford 大学重新设计二年级的本科软件工程课程。

这是一个挑战，因为我所面对的 80 个学生是来自不同专业的，包括 IT、商务计算和软件工程，这些学生将要在一起上课。最有难度的是，需要和这些编程经验差距很大的学生一起编写代码。按照传统，该课程允许学生选择自己的小组，然后给他们布置构建一个加油站数据库系统的任务，最后提交报告作为评估的一部分。

而我决定重新设计课程，让学生了解现实中的软件团队是如何协作的过程。根据学生的专业和编程技能，我将他们分为五、六个人一组。这是为了确保每个小组的整体水平相当，避免小组之间的不等。

### 核心课程

课程的形式改为讲座和实践课两项结合在一起。然而实践课作为指导过程，主要是老师监督各个小组的实践进度以及他们如何处理客户和产品之间的关系。而传统的教学方式由项目管理、软件测试、工程需求分析以及类似主题的讲座组成，再辅以实践和导师会议。这些会议可以很好的考核学生的水平以及检测出他们是否可以跟得上我们在讲座部分中的软件工程方法。本年的教学主题包括以下内容：

* 工程需求分析
* 如何与客户及其他团队成员互动
* 程序设计方法，如敏捷和极限编程方法
* 如何通过学习不同的软件工程方法进行短期的水平提高
* 小组会议及文档编写
* 项目管理及项目进展图表（甘特图）
* UML 图表及系统描述
* 使用 Git 来进行代码的版本控制
* 软件测试及 BUG 跟踪
* 使用开源库
* 开源代码许可及其选择
* 软件交付

在这些讲座之后，会有一些来自世界各地的嘉宾为我们说说他们在软件交付过程中的经验。我们也设法请来大学里知识产权律师谈关于软件在英国的知识产权问题，以及如何处理软件的知识产权问题。

### 协作工具

为了让上述教学内容的顺利进行，我们将会引入一些工具，并训练学生在他们的项目中使用这些工具。如下：

* Google Drive：团队与导师之间进行共享的工具，暂时存储用于描述项目的文档和图表、需求收集、会议纪要以及项目时间跟踪等信息。采取这样一个方式来监控并提供直接反馈到每个团队，是非常有效的。
* [Basecamp](https://basecamp.com/)：同样是用于分享文档，在随后的课程中，我们可能会考虑用它取代 Google Drive。
* BUG 报告工具，如 [Mantis](https://www.mantisbt.org/)：只能让有限的用户免费提交 BUG。稍后我们提到的 Git 可以让小组内的所有人员用做 BUG 提交。
* 远程视频会议工具：在人员不在校内，甚至去了其他城市的情况下使用。学生们可以定期通过 Skype 来交流并记录会议内容或则进行录音作为今后其他用处。
* 同时，学生们的项目中还会用到大量的开源工具包。他们可以根据自己小组的项目需求来选择自己使用的工具包和编程语言。唯一的条件是，这些项目必须开源，最后成果可以安装到大学里的实验室，并且大多的研究人员都非常支持这个条件。
* 最后，所有团队必须向客户交付他们的项目，包括完整的可以工作的软件版本、文档和他们自己选择的开放源码许可。大多数的团队选择了 GPLv3 许可证。

### 技巧和经验教训

在最后，这一年过的很愉快，并且所有学生的项目都做的非常棒。这里有一些我学到的经验教训，可能有助于提高明年的课程质量：

1. 提供各种各样有趣的选择项目给学生选择。比如说，游戏开发或者移动应用开发以及完成各种目标的项目等。建立普通的数据库系统已经不能提起学生的兴趣了，而参与到有趣的项目中去，学生本身就是自学者，同时可以帮助解决小组成员和小组之间的常见问题。再通过一个消息列表，学生们发表他们在测试中遇到的任何问题，以寻求其他人的帮助建议。然而，这种方法有一个缺点。外部考官建议我们使用统一种类型的项目和统一的编程语言以帮助缩小对学生的评估标准。
2. 定期给学生在每一个阶段的表现进行反馈。比方说，可以在和各个小组开指导会议的时候，或者每个阶段进行反馈，以帮助他们在接下来的工作中自我改进。
3. 学生更加愿意与校外的客户一起协作。他们期待着与外部公司代表或校外人员协作，不过是为了获得新体验而已。与导师进行交流时，他们都能够表现得很专业，这样使得老师非常放心。
4. 很多团队版将开发单元测试的部分放到项目结束之后，从极限编程方法的角度来说，这是一个严重的禁忌。也许测试应包括在不同阶段的评估中，来提醒他们需要并行开展软件开发和单元测试。
5. 在这个班的 80 个人里边，仅有 4 个女生，每个女生都分在不同的小组里边。我观察到，男生们总是充分准备好来承担起领队角色，并将最有趣的代码部分留给他们自己来编写，女生则多大遵循安排或者是编写文档。出于某种原因，女生选择不出头，即使在女性辅导员鼓励下，她们也不愿编写代码。这仍然是一个需要解决的主要问题。
6. 允许不同风格项目文档，比方说，UML 图表、状态图或其他形式的。让学生学习这些并与其他课程融汇贯通来提高他们的学习经验。
7. 学生里边，有些是很好的开发人员，有些做商务计算的则没有多少编程经验。我们要鼓励团队共同努力，避免开发人员做得比那些只做会议记录或文档的其他成员更好的错误认知。我们常在辅导课程中鼓励角色转换，让每个人都有机会学习如何编程。
8. 小组与导师每周见面沟通是非常重要的，可以有效监督各个小组进展情况，还可以了解是谁做了大部分工作。通常，没来参加会议的小组成员基本就是没有参与到他们的团队工作中去的，并且通过其他成员所提交的工作报告也可以确定哪些人不活跃。
9. 我们鼓励学生们把许可证附加到项目中去，使用外部库以及和客户协作的时候要表明确切知识产权问题。 这样可让打破陈规，开拓思维，并了解真实的软件交付问题。
10. 给学生们自己选择所用技术的空间。
11. 助教是关键。同时管理 80 个学生显然很有难度，特别是需要对他们进行评估的那几周。明年我一定会找个助教来帮我一起管理各个小组。
12. 实验室的技术支持是非常重要的。大学里的技术支持人员对于本课程是非常赞同的。他们正在考虑明年将虚拟机分配给每个团队，这样没个团队可以根据需要自行在虚拟机中安装任何软件。
13. 团队合作，相互帮助。大多数团队自然而然的支持其他团队成员，同时指导员在中间也帮助了不少。
14. 来自其他同事的帮助会锦上添花。作为一名新的大学导师，我需要从经验中学习，如果我想了解如何管理某些学生和团队，或者对如何让学生适应课程感到困惑时，我会通过多个方面来寻求建议。来自资深同事的支持对我来说是一种极大的鼓励。

最后，对于作为导师的我以及所有的学生来说，这都是个有趣的课程。在学习目标和传统评分方案上还有有一些问题需解决，以减少教师的工作量。明年，我计划会保留这种教学模式，并希望能够提出更好的评分方案以及引入更多的软件来帮助监督项目和控制代码版本。

---

via: <http://opensource.com/education/15/9/teaching-open-source-development-undergraduates>

作者：[Mariam Kiran](http://opensource.com/users/mariamkiran) 译者：[GHLandy](https://github.com/GHLandy) 校对：[Caroline](https://github.com/carolinewuyan)

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


如何在 Linux 中根据国家位置来阻断网络流量

Summary: 作为一名维护 Linux 生产服务器的系统管理员，你可能会遇到这样一些情形：你需要根据地理位置，选择性地阻断或允许网络流量通过。 例如你正经历一次由注册在某个特定国家的 IP 发起的 DoS 攻击；或者基于安全考虑，你想阻止来自未知国家的 SSH 登录请求；又或者你的公司对某些在线视频有分销权，它要求只能在特定的国家内合法发行；抑或是由于公司的政策，你需要阻止某个本地主机将文件上传至任意一个非美国的远程云端存储。  所有的上述情形都需要设置防火墙，使之具有基于国家位置过滤流量的功能。有几个方法可以做到这一点，其中之一是

iptables 已经过时,现在主流使用更高效的nftables!

可我大fedora的firewalld下面躺着的还是iptables#(滑稽)

主流说你追逐主流的人,永远都是非主流.

# 如何在 Linux 中根据国家位置来阻断网络流量

作为一名维护 Linux 生产服务器的系统管理员，你可能会遇到这样一些情形：你需要**根据地理位置，选择性地阻断或允许网络流量通过。** 例如你正经历一次由注册在某个特定国家的 IP 发起的 DoS 攻击；或者基于安全考虑，你想阻止来自未知国家的 SSH 登录请求；又或者你的公司对某些在线视频有分销权，它要求只能在特定的国家内合法发行；抑或是由于公司的政策，你需要阻止某个本地主机将文件上传至任意一个非美国的远程云端存储。

所有的上述情形都需要设置防火墙，使之具有**基于国家位置过滤流量**的功能。有几个方法可以做到这一点，其中之一是你可以使用 TCP wrappers 来为某个应用（例如 SSH，NFS， httpd）设置条件阻塞。但其缺点是你想要保护的那个应用必须以支持 TCP wrappers 的方式构建。另外，TCP wrappers 并不总是能够在各个平台中获取到（例如，Arch Linux [放弃了](http://xmodulo.com/block-unwanted-ip-addresses-linux.html)对它的支持）。另一种方式是结合基于国家的 GeoIP 信息，设置 [ipset](http://xtables-addons.sourceforge.net/geoip.php)，并将它应用到 iptables 的规则中。后一种方式看起来更有希望一些，因为基于 iptables 的过滤器是与应用无关的，且容易设置。

在本教程中，我将展示 **另一个基于 iptables 的 GeoIP 过滤器，它由 xtables-addons 来实现**。对于那些不熟悉它的人来说， xtables-addons 是用于 netfilter/iptables 的一系列扩展。一个包含在 xtables-addons 中的名为 xt\_geoip 的模块扩展了 netfilter/iptables 的功能，使得它可以根据流量来自或流向的国家来进行过滤，IP 掩蔽（NAT）或丢包。若你想使用 xt\_geoip，你不必重新编译内核或 iptables，你只需要使用当前的内核构建环境（/lib/modules/`uname -r`/build）以模块的形式构建 xtables-addons。同时也不需要进行重启。只要你构建并安装了 xtables-addons ， xt\_geoip 便能够配合 iptables 使用。

至于 xt\_geoip 和 ipset 之间的比较，[xtables-addons 的官方网站](http://xtables-addons.sourceforge.net/geoip.php) 上是这么说的： 相比于 ipset，xt\_geoip 在内存占用上更胜一筹，但对于匹配速度，基于哈希的 ipset 可能更有优势。

在教程的余下部分，我将展示**如何使用 iptables/xt\_geoip 来根据流量的来源地或流入的国家阻断网络流量**。

### 在 Linux 中安装 xtables-addons

下面介绍如何在各种 Linux 平台中编译和安装 xtables-addons。

为了编译 xtables-addons，首先你需要安装一些依赖软件包。

#### 在 Debian，Ubuntu 或 Linux Mint 中安装依赖

```
$ sudo apt-get install iptables-dev xtables-addons-common libtext-csv-xs-perl pkg-config

```

#### 在 CentOS，RHEL 或 Fedora 中安装依赖

CentOS/RHEL 6 需要事先设置好 EPEL 仓库（为 perl-Text-CSV\_XS 所需要）。

```
$ sudo yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS

```

#### 编译并安装 xtables-addons

从 `xtables-addons` 的[官方网站](http://xtables-addons.sourceforge.net/) 下载源码包，然后按照下面的指令编译安装它。

```
$ wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.10.tar.xz
$ tar xf xtables-addons-2.10.tar.xz
$ cd xtables-addons-2.10
$ ./configure
$ make
$ sudo make install

```

需要注意的是，对于基于红帽的系统（CentOS、RHEL、Fedora），它们默认开启了 SELinux，所以有必要像下面这样调整 SELinux 的策略。否则，SELinux 将阻止 iptables 加载 xt\_geoip 模块。

```
$ sudo chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko
$ sudo chcon -vR --type=lib_t /lib64/xtables/*.so

```

### 为 xtables-addons 安装 GeoIP 数据库

下一步是安装 GeoIP 数据库，它将被 xt\_geoip 用来查询 IP 地址与国家地区之间的对应关系。方便的是，`xtables-addons` 的源码包中带有两个帮助脚本，它们被用来从 MaxMind 下载 GeoIP 数据库并将它转化为 xt\_geoip 可识别的二进制形式文件；它们可以在源码包中的 geoip 目录下找到。请遵循下面的指导来在你的系统中构建和安装 GeoIP 数据库。

```
$ cd geoip
$ ./xt_geoip_dl
$ ./xt_geoip_build GeoIPCountryWhois.csv
$ sudo mkdir -p /usr/share/xt_geoip
$ sudo cp -r {BE,LE} /usr/share/xt_geoip

```

根据 [MaxMind](https://support.maxmind.com/geoip-faq/geoip2-and-geoip-legacy-databases/how-accurate-are-your-geoip2-and-geoip-legacy-databases/) 的说明,他们的 GeoIP 数据库能够以 99.8% 的准确率识别出 ip 所对应的国家，并且每月这个数据库将进行更新。为了使得本地安装的 GeoIP 数据是最新的，或许你需要设置一个按月执行的 [cron job](http://ask.xmodulo.com/add-cron-job-linux.html) 来时常更新你本地的 GeoIP 数据库。

### 阻断来自或流向某个国家的网络流量

一旦 xt\_geoip 模块和 GeoIP 数据库安装好后，你就可以在 iptabels 命令中使用 geoip 的匹配选项。

```
$ sudo iptables -m geoip --src-cc country[,country...] --dst-cc country[,country...]

```

你想要阻断流量的那些国家是使用[2个字母的 ISO3166 代码](https://en.wikipedia.org/wiki/ISO_3166-1) 来特别指定的（例如 US（美国）、CN（中国）、IN（印度）、FR（法国））。

例如，假如你想阻断来自也门（YE） 和 赞比亚（ZM）的流量，下面的 iptabels 命令便可以达到此目的。

```
$ sudo iptables -I INPUT -m geoip --src-cc YE,ZM -j DROP

```

假如你想阻断流向中国（CN） 的流量，可以运行下面的命令：

```
$ sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

```

匹配条件也可以通过在 `--src-cc` 或 `--dst-cc` 选项前加 `!` 来达到相反的目的：

假如你想在你的服务器上阻断来自所有非美国的流量，可以运行：

```
$ sudo iptables -I INPUT -m geoip ! --src-cc US -j DROP

```

#### 对于使用 Firewall-cmd 的用户

某些发行版本例如 CentOS/RHEL7 或 Fedora 已经用 firewalld 替代了 iptables 来作为默认的防火墙服务。在这些系统中，你可以类似使用 xt\_geoip 那样，使用 firewall-cmd 来阻断流量。利用 firewall-cmd 命令，上面的三个例子可被重新写为：

```
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc YE,ZM -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc CN -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc US -j DROP

```

### 总结

在本教程中，我展示了使用 iptables/xt\_geoip 来根据流量的来源地或流入的国家轻松地阻断网络流量。假如你有这方面的需求，把它部署到你的防火墙系统中可以使之成为一个实用的办法。作为最后的警告，我应该提醒你的是：在你的服务器上通过基于 GeoIP 的流量过滤来禁止特定国家的流量并不总是万无一失的。GeoIP 数据库本身就不是很准确或齐全，且流量的来源或目的地可以轻易地通过使用 VPN、Tor 或其他任意易受攻击的中继主机来达到欺骗的目的。基于地理位置的过滤器甚至可能会阻止本不该阻止的合法网络流量。在你决定把它部署到你的生产环境之前请仔细考虑这个限制。

---

via: <http://xmodulo.com/block-network-traffic-by-country-linux.html>

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

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


使用 Nmon 监控 Linux 的系统性能

Summary: Nmon（得名于 Nigel 的监控器）是IBM的员工 Nigel Griffiths 为 AIX 和 Linux 系统开发的一款计算机性能系统监控工具。Nmon 可以把操作系统的统计数据展示在屏幕上或者存储到一份数据文件里，来帮助了解计算机资源的使用情况、调整方向和系统瓶颈。这个系统基准测试工具只需要使用一条命令就能得到大量重要的性能数据。使用 Nmon 可以很轻松的监控系统的 CPU、内存、网络、硬盘、文件系统、NFS、高耗进程、资源和 IBM Power 系统的微分区的信息。 Nmon 安装 Nmon 默认是存在于 Ubuntu 的仓库中的。你可以通过下面的命令安装 Nmon： sudo a

又学到一招啊！！

nmon工具超赞啊！！支持lz！！

good

# 使用 Nmon 监控 Linux 的系统性能

Nmon（得名于 Nigel 的监控器）是IBM的员工 Nigel Griffiths 为 AIX 和 Linux 系统开发的一款计算机性能系统监控工具。Nmon 可以把操作系统的统计数据展示在屏幕上或者存储到一份数据文件里，来帮助了解计算机资源的使用情况、调整方向和系统瓶颈。这个系统基准测试工具只需要使用一条命令就能得到大量重要的性能数据。使用 Nmon 可以很轻松的监控系统的 CPU、内存、网络、硬盘、文件系统、NFS、高耗进程、资源和 IBM Power 系统的微分区的信息。

### Nmon 安装

Nmon 默认是存在于 Ubuntu 的仓库中的。你可以通过下面的命令安装 Nmon：

```
sudo apt-get install nmon

```

### 怎么使用Nmon来监控Linux的性能

安装完成后，通过在终端输入`nmon` 命令来启动 Nmon

```
nmon

```

你会看到下面的输出：

从上面的截图可以看到 nmon 命令行工具完全是交互式运行的，你可以使用快捷键来轻松查看对应的统计数据。你可以使用下面的 nmon 快捷键来显示不同的系统统计数据：

* `q` : 停止并退出 Nmon
* `h` : 查看帮助
* `c` : 查看 CPU 统计数据
* `m` : 查看内存统计数据
* `d` : 查看硬盘统计数据
* `k` : 查看内核统计数据
* `n` : 查看网络统计数据
* `N` : 查看 NFS 统计数据
* `j` : 查看文件系统统计数据
* `t` : 查看高耗进程
* `V` : 查看虚拟内存统计数据
* `v` : 详细模式

### 核查 CPU 处理器

如果你想收集关于 CPU 性能相关的统计数据，你应该按下键盘上的`c`键，之后你将会看到下面的输出：

### 核查高耗进程统计数据

如果想收集系统正在运行的高耗进程的统计数据，按键盘上的`t`键，之后你将会看到下面的输出：

### 核查网络统计数据

如果想收集 Linux 系统的网络统计数据，按下`n`键，你将会看到下面输出：

### 硬盘 I/O 图表

使用`d` 键获取硬盘相关的信息，你会看到下面输出：

### 核查内核信息

Nmon 一个非常重要的快捷键是`k`键，用来显示系统内核相关的概要信息。按下`k`键之后，会看到下面输出：

### 获取系统信息

对每个系统管理员来说一个非常有用的快捷键是`r`键，可以用来显示计算机的系统结构、操作系统版本号和 CPU 等不同资源的信息。按下`r`键之后会看到下面输出：

### 总结

还有许多其他的工具做的和 Nmon 同样的工作，不过 Nmon 对一个 Linux 新手来说还是很友好的。如果你有什么问题，尽管评论。

---

via: <https://www.maketecheasier.com/monitor-linux-system-performance/>

作者：[Hitesh Jethva](https://www.maketecheasier.com/author/hiteshjethva/) 译者：[sonofelice](https://github.com/sonofelice) 校对：[wxy](https://github.com/wxy)

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


最简明扼要的 Systemd 教程，只需十分钟

Summary: 这是我所阅读过的最简明扼要的 Systemd 教程，快速而清晰地讲述了 Systemd 的主要内容。无论你讨厌它还是喜欢它 ，只有了解才有正确的认识。

ps ax | grep systemd，看到第一行，其中的数字 1 表示它的进程号是1

ps --pid 1

Uselessd还活着？

还以为看题图就能看懂……

大势所趋！！！

学习了~

一直命令行，用旧版centos。关我卵事

这些功能的确很好，支持

enable--使能?

是的，目前并未找到更合适的译法，您有什么建议么？

enable  启用<br />
disable 禁用

哦，哈哈哈，我脑袋转筋了，原来这么简单的，为啥我就偏偏非“使能”。。。马上修改过来。

不过，真的有“使能”这么逼格的词在使用。。。

老实说刚开始接触systemd还真是不适应啊！！！but 这个也是要学的！！

systemd 感觉不太好用，一直习惯service [name] start还有chkconfig。不过这样统一了也挺方便的，Debian集成了Systemd，还好。

# 最简明扼要的 Systemd 教程，只需十分钟

干嘛要这么做？

* 理解现代 Linux 发行版中的显著变化；
* 看看 Systemd 是如何取代 SysVinit 的；
* 搞定单元（unit）和新的 journal 日志。

吐槽邮件、人身攻击、死亡威胁——Lennart Poettering，Systemd 的作者，对收到这些东西早就习以为常了。这位 Red Hat 公司的员工之前在 Google+ 上怒斥 FOSS 社区(<http://tinyurl.com/poorlennart>)的本质，悲痛且失望地表示：“那真是个令人恶心的地方”。他着重指出 Linus Torvalds 在邮件列表上言辞极其刻薄的帖子，并谴责这位内核的领导者为在线讨论定下基调，并使得人身攻击及贬抑之辞成为常态。

但为何 Poettering 会遭受如此多的憎恨？为何就这么个搞搞开源软件的人要忍受这等愤怒？答案就在于他的软件的重要性。如今大多数发行版中，Systemd 是 Linux 内核发起的第一个程序，并且它还扮演多种角色。它会启动系统服务、处理用户登录，每隔特定的时间执行一些任务，还有很多很多。它在不断地成长，并逐渐成为 Linux 的某种“基础系统”——提供系统启动和发行版维护所需的所有工具。

如今，在以下几点上 Systemd 颇具争议：它逃避了一些已经确立的 Unix 传统，例如纯文本的日志文件；它被看成是个“大一统”的项目，试图接管一切；它还是我们这个操作系统的支柱的重要革新。然而大多数主流发行版已经接受了（或即将接受）它，因此它就活了下来。而且它确实是有好处的：更快地启动，更简单地管理那些有依赖的服务程序，提供强大且安全的日志系统等。

因此在这篇教程中，我们将探索 Systemd 的特性，并向您展示如何最有效地利用这些特性。即便您此刻并不是这款软件的粉丝，读完本文后您至少可以更加了解和适应它。

*这部没正经的动画片来自<http://tinyurl.com/m2e7mv8>，它把 Systemd 塑造成一只狂暴的动物，吞噬它路过的一切。大多数批评者的言辞可不像这只公仔一样柔软。*

### 启动及服务

大多数主流发行版要么已经采用 Systemd，要么即将在下个发布中采用（如 Debian 和 Ubuntu）。在本教程中，我们使用 Fedora 21（该发行版已经是 Systemd 的优秀实验场地）的一个预览版进行演示，但不论您用哪个发行版，要用到的命令和注意事项都应该是一样的。这是 Systemd 的一个加分点：它消除了不同发行版之间许多细微且琐碎的区别。

在终端中输入 `ps ax | grep systemd`，看到第一行，其中的数字 **1** 表示它的进程号是1，也就是说它是 Linux 内核发起的第一个程序。因此，内核一旦检测完硬件并组织好了内存，就会运行 `/usr/lib/systemd/systemd` 可执行程序，这个程序会按顺序依次发起其他程序。（在还没有 Systemd 的日子里，内核会去运行 `/sbin/init`，随后这个程序会在名为 SysVinit 的系统中运行其余的各种启动脚本。）

Systemd 的核心是一个叫<ruby> 单元 <rp>  （ </rp> <rt>  unit </rt> <rp>  ） </rp></ruby>的概念，它是一些存有关于<ruby> 服务 <rp>  （ </rp> <rt>  service </rt> <rp>  ） </rp></ruby>（在运行在后台的程序）、设备、挂载点、和操作系统其他方面信息的配置文件。Systemd 的其中一个目标就是简化这些事物之间的相互作用，因此如果你有程序需要在某个挂载点被创建或某个设备被接入后开始运行，Systemd 可以让这一切正常运作起来变得相当容易。（在没有 Systemd 的日子里，要使用脚本来把这些事情调配好，那可是相当丑陋的。）要列出您 Linux 系统上的所有单元，输入以下命令：

```
systemctl list-unit-files

```

现在，`systemctl` 是与 Systemd 交互的主要工具，它有不少选项。在单元列表中，您会注意到这儿有一些格式化：被<ruby> 启用 <rp>  （ </rp> <rt>  enabled </rt> <rp>  ） </rp></ruby>的单元显示为绿色，被<ruby> 禁用 <rp>  （ </rp> <rt>  disabled </rt> <rp>  ） </rp></ruby>的显示为红色。标记为“static”的单元不能直接启用，它们是其他单元所依赖的对象。若要限制输出列表只包含服务，使用以下命令：

```
systemctl list-unit-files --type=service

```

注意，一个单元显示为“enabled”，并不等于对应的服务正在运行，而只能说明它可以被开启。要获得某个特定服务的信息，以 GDM (Gnome Display Manager) 为例，输入以下命令：

```
systemctl status gdm.service

```

这条命令提供了许多有用的信息：一段给人看的服务描述、单元配置文件的位置、启动的时间、进程号，以及它所从属的 CGroups（用以限制各组进程的资源开销）。

如果您去查看位于 `/usr/lib/systemd/system/gdm.service` 的单元配置文件，您可以看到各种选项，包括要被运行的二进制文件（“ExecStart”那一行），相冲突的其他单元（即不能同时进入运行的单元），以及需要在本单元执行前进入运行的单元（“After”那一行）。一些单元有附加的依赖选项，例如“Requires”（必要的依赖）和“Wants”（可选的依赖）。

此处另一个有趣的选项是：

```
Alias=display-manager.service

```

当您启动 **gdm.service** 后，您将可以通过 `systemctl status display-manager.service` 来查看它的状态。当您知道有<ruby> 显示管理程序 <rp>  （ </rp> <rt>  display manager </rt> <rp>  ） </rp></ruby>在运行并想对它做点什么，但您不关心那究竟是 GDM，KDM，XDM 还是什么别的显示管理程序时，这个选项会非常有用。

*使用 systemctl status 命令后面跟一个单元名，来查看对应的服务有什么情况。*

### “<ruby> 目标 <rp>  （ </rp> <rt>  target </rt> <rp>  ） </rp></ruby>”锁定

如果您在 `/usr/lib/systemd/system` 目录中输入 `ls` 命令，您将看到各种以 `.target` 结尾的文件。启动*<ruby> 目标 <rp>  （ </rp> <rt>  target </rt> <rp>  ） </rp></ruby>*是一种将多个单元聚合在一起以致于将它们同时启动的方式。例如，对大多数类 Unix 操作系统而言有一种“<ruby> 多用户 <rp>  （ </rp> <rt>  multi-user </rt> <rp>  ） </rp></ruby>”状态，意思是系统已被成功启动，后台服务正在运行，并且已准备好让一个或多个用户登录并工作——至少在文本模式下。（其他状态包括用于进行管理工作的<ruby> 单用户 <rp>  （ </rp> <rt>  single-user </rt> <rp>  ） </rp></ruby>状态，以及用于机器关机的<ruby> 重启 <rp>  （ </rp> <rt>  reboot </rt> <rp>  ） </rp></ruby>状态。）

如果您打开 **multi-user.target** 文件一探究竟，您可能期待看到的是一个要被启动的单元列表。但您会发现这个文件内部几乎空空如也——其实，一个服务会通过 **WantedBy** 选项让自己成为启动目标的依赖。因此如果您去打开 **avahi-daemon.service**, **NetworkManager.service** 及其他 **.service** 文件看看，您将在 Install 段看到这一行：

```
WantedBy=multi-user.target

```

因此，切换到多用户启动目标会<ruby> 启用 <rp>  （ </rp> <rt>  enable </rt> <rp>  ） </rp></ruby>那些包含上述语句的单元。还有其他一些启动目标可用（例如 **emergency.target** 提供一个紧急情况使用的 shell，以及 **halt.target** 用于机器关机），您可以用以下方式轻松地在它们之间切换：

```
systemctl isolate emergency.target

```

在许多方面，这些都很像 SysVinit 中的<ruby> 运行级 <rp>  （ </rp> <rt>  runlevel </rt> <rp>  ） </rp></ruby>，如文本模式的 **multi-user.target** 类似于第3运行级，**graphical.target** 类似于第5运行级，**reboot.target** 类似于第6运行级，诸如此类。

*与传统的脚本相比，单元配置文件也许看起来很陌生，但并不难以理解。*

### 开启与停止

现在您也许陷入了沉思：我们已经看了这么多，但仍没看到如何停止和开启服务！这其实是有原因的。从外部看，Systemd 也许很复杂，像野兽一般难以驾驭。因此在您开始摆弄它之前，有必要从宏观的角度看看它是如何工作的。实际用来管理服务的命令非常简单：

```
systemctl stop cups.service
systemctl start cups.service

```

（若某个单元被禁用了，您可以先通过 `systemctl enable` 加上该单元名的方式将其启用。这种做法会为该单元创建一个符号链接，并将其放置在当前启动目标的 `.wants` 目录下，这些 `.wants` 目录在`/etc/systemd/system` 文件夹中。）

还有两个有用的命令是 `systemctl restart` 和 `systemctl reload`，后面接单元名。后者用于让单元重新加载它的配置文件。Systemd 的绝大部分都有良好的文档，因此您可以查看手册 (`man systemctl`) 了解每条命令的细节。

### 定时器单元：取代 Cron

除了系统初始化和服务管理，Systemd 还染指了其他方面。在很大程度上，它能够完成 **cron** 的工作，而且可以说是以更灵活的方式（并带有更易读的语法）。**cron** 是一个以规定时间间隔执行任务的程序——例如清除临时文件，刷新缓存等。

如果您再次进入 `/usr/lib/systemd/system` 目录，您会看到那儿有多个 `.timer` 文件。用 `less` 来查看这些文件，您会发现它们与 `.service` 和 `.target` 文件有着相似的结构，而区别在于 `[Timer]` 段。举个例子：

```
 [Timer]
 OnBootSec=1h
 OnUnitActiveSec=1w

```

**OnBootSec** 选项告诉 Systemd 在系统启动一小时后启动这个单元。第二个选项的意思是：自那以后每周启动这个单元一次。关于定时器有大量选项您可以设置，输入 `man systemd.time` 查看完整列表。

Systemd 的时间精度默认为一分钟。也就是说，它会在设定时刻的一分钟内运行单元，但不一定精确到那一秒。这么做是基于电源管理方面的原因，但如果您需要一个没有任何延时且精确到毫秒的定时器，您可以添加以下一行：

```
 AccuracySec=1us

```

另外， **WakeSystem** 选项（可以被设置为 true 或 false）决定了定时器是否可以唤醒处于休眠状态的机器。

*有一个 Systemd 的图形界面程序，即便它已有多年未被积极维护。*

### 日志文件：向 journald 问声好

Systemd 的第二个主要部分是 journal 。这是个日志系统，类似于 syslog 但也有些显著区别。如果您是个 Unix 日志管理模式的粉丝，准备好出离愤怒吧：这是个二进制日志，因此您不能使用常规的命令行文本处理工具来解析它。这个设计决定不出意料地在网上引起了激烈的争论，但它的确有些优点。例如，日志可以被更系统地组织，带有更多的元数据，因此可以更容易地根据可执行文件名和进程号等过滤出信息。

要查看整个 journal，输入以下命令：

```
journalctl

```

像许多其他的 Systemd 命令一样，该命令将输出通过管道的方式引向 `less` 程序，因此您可以使用空格键向下滚动，键入`/`（斜杠）查找，以及其他熟悉的快捷键。您也能在此看到少许颜色，像红色的警告及错误信息。

以上命令会输出很多信息。为了限制其只输出本次启动的消息，使用如下命令：

```
journalctl -b

```

这就是 Systemd 大放异彩的地方！您想查看自上次启动以来的全部消息吗？试试 **journalctl -b -1** 吧。再上一次的？用 **-2** 替换 **-1** 吧。那自某个具体时间，例如2014年10月24日16:38以来的呢？

```
journalctl -b --since=”2014-10-24 16:38”

```

即便您对二进制日志感到遗憾，那依然是个有用的特性，并且对许多系统管理员来说，构建类似的过滤器比起写正则表达式而言容易多了。

我们已经可以根据特定的时间来准确查找日志了，那可以根据特定程序吗？对单元而言，试试这个：

```
journalctl -u gdm.service

```

（注意：这是个查看 X server 产生的日志的好办法。）那根据特定的进程号？

```
journalctl _PID=890

```

您甚至可以请求只看某个可执行文件产生的消息：

```
journalctl /usr/bin/pulseaudio

```

若您想将输出的消息限制在某个优先级，可以使用 **-p** 选项。该选项参数为 0 的话只会显示紧急消息（也就是说，是时候向 **$DEITY** 祈求保佑了）（LCTT 译注： $DEITY 是一个计算机方面的幽默，DEITY 是指广义上的“神”，$前缀表示这是一个变量），为 7 的话会显示所有消息，包括调试消息。请查看手册 (`man journalctl`) 获取更多关于优先级的信息。

值得指出的是，您也可以将多个选项结合在一起，若想查看在当前启动中由 GDM 服务输出的优先级数小于等于 3 的消息，请使用下述命令：

```
journalctl -u gdm.service -p 3 -b

```

最后，如果您仅仅想打开一个随 journal 持续更新的终端窗口，就像在没有 Systemd 时使用 `tail` 命令实现的那样，输入 `journalctl -f` 就好了。

*二进制日志并不流行，但 journal 的确有它的优点，如非常方便的信息查找及过滤。*

### 没有 Systemd 的生活？

如果您就是完全不能接受 Systemd，您仍然有一些主流发行版中的选择。尤其是 Slackware，作为历史最为悠久的发行版，目前还没有做出改变，但它的主要开发者并没有将其从未来规划中移除。一些不出名的发行版也在坚持使用 SysVinit 。

但这又将持续多久呢？Gnome 正越来越依赖于 Systemd，其他的主流桌面环境也会步其后尘。这也是引起 BSD 社区一阵恐慌的原因：Systemd 与 Linux 内核紧密相连，导致在某种程度上，桌面环境正变得越来越不可移植。一种折衷的解决方案也许会以 Uselessd ([http://uselessd.darknedgy.net](http://uselessd.darknedgy.net/)) 的形式到来：一种裁剪版的 Systemd，纯粹专注于启动和监控进程，而不消耗整个基础系统。

*若您不喜欢 Systemd，可以尝试一下 Gentoo 发行版，它将 Systemd 作为初始化工具的一种选择，但并不强制用户使用 Systemd。*

---

via: <http://www.linuxvoice.com/linux-101-get-the-most-out-of-systemd/>

作者：[Mike Saunders](http://www.linuxvoice.com/author/mike/) 译者：[Ricky-Gong](https://github.com/Ricky-Gong) 校对：[wxy](https://github.com/wxy)

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


如何更新 ISPConfig 3 SSL 证书

Summary: 本教程描述了如何在 ISPConfig3控制面板中更新 SSL 证书。有两个可选的方法：  用 OpenSSL 创建一个新的 OpenSSL 证书和 CSR。 用 ISPConfig updater 更新 SSL 证书   我将从用手工的方法更新 SSL 证书开始。 1）用 OpenSSL 创建一个新的 ISPConfig 3 SSL 证书 用 root 用户登录你的服务器。在创建一个新的 SSL 证书之前，先备份现有的。SSL 证书是安全敏感的，因此我将它存储在 /root/ 目录下。 tar pcfz /root/ispconfig_ssl_backup.tar.gz /usr/local/ispconfig/interface/ssl chmod 600 /root/ispconfig_ssl_backup.tar.gz   现在创建

# 如何更新 ISPConfig 3 SSL 证书

本教程描述了如何在 [ISPConfig](http://www.ispconfig.org/) 3控制面板中更新 SSL 证书。有两个可选的方法：

* 用 OpenSSL 创建一个新的 OpenSSL 证书和 CSR。
* 用 ISPConfig updater 更新 SSL 证书

<img src="content_image/album_201601_15_063937wjrozr22i804u4qa.png" alt="" title="">

我将从用手工的方法更新 SSL 证书开始。

### 1）用 OpenSSL 创建一个新的 ISPConfig 3 SSL 证书

用 root 用户登录你的服务器。在创建一个新的 SSL 证书之前，先备份现有的。SSL 证书是安全敏感的，因此我将它存储在 /root/ 目录下。

```
tar pcfz /root/ispconfig_ssl_backup.tar.gz /usr/local/ispconfig/interface/ssl
chmod 600 /root/ispconfig_ssl_backup.tar.gz

```

>
> 现在创建一个新的 SSL 证书密钥，证书请求（CSR）和自签发证书。
>
>
>

```
cd /usr/local/ispconfig/interface/ssl
openssl genrsa -des3 -out ispserver.key 4096
openssl req -new -key ispserver.key -out ispserver.csr
openssl x509 -req -days 3650 -in ispserver.csr \
-signkey ispserver.key -out ispserver.crt
openssl rsa -in ispserver.key -out ispserver.key.insecure
mv ispserver.key ispserver.key.secure
mv ispserver.key.insecure ispserver.key

```

重启 apache 来加载新的 SSL 证书

```
service apache2 restart

```

### 2）用 ISPConfig 安装器来更新 SSL 证书

另一个获取新的 SSL 证书的替代方案是使用 ISPConfig 更新脚本。下载 ISPConfig 到 /tmp 目录下，解压包并运行脚本。

```
cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xvfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install
php -q update.php

```

更新脚本会在更新时询问下面的问题：

```
Create new ISPConfig SSL certificate (yes,no) [no]:

```

这里回答“yes”，SSL 证书创建对话框就会启动。

---

via: <http://www.faqforge.com/linux/how-to-renew-the-ispconfig-3-ssl-certificate/>

作者：[Till](http://www.faqforge.com/author/till/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


暴增 Emacs 生产力的十大最佳插件

Summary: 一年前的这个时候，我想要寻找将 Vim 打造成一个成熟的全功能的 IDE 的最好插件。有趣的是，那篇文章的很多评论提到了 Emacs 已经大部分有了这些内置插件，已经是一个很棒的 IDE 了。尽管我对 Emacs 的难以置信的多样化表示赞同，它依旧不是一个可以开箱即用的高级编辑器。还好，其庞大的插件库可以解决这个问题。但在过多的选择中，有时很难弄清该如何入手。因此，现在让我试着收集一个不可或缺的插件的简短列表，来提升你使用 Emacs 时的工作效率。 虽然我主要侧重于与编程相关的生产力提升，但是这些插件对所有人或不同用途都是有用的

emacs到底是一种怎样的体验？

小拇指酸痛的体验

用evil，体验vim和emacs结合的快感

好多年了，一直没狠下心来学习一下 Emacs。

一直想学，但是感觉还是太不vim了

用 use-package 安装他们

只用org-mode 其他都不需要

# 暴增 Emacs 生产力的十大最佳插件

一年前的这个时候，我想要寻找[将 Vim 打造成一个成熟的全功能的 IDE](http://xmodulo.com/turn-vim-full-fledged-ide.html) 的最好插件。有趣的是，那篇文章的很多评论提到了 Emacs 已经大部分有了这些内置插件，已经是一个很棒的 IDE 了。尽管我对 Emacs 的难以置信的多样化表示赞同，它依旧不是一个可以开箱即用的高级编辑器。还好，其庞大的插件库可以解决这个问题。但在过多的选择中，有时很难弄清该如何入手。因此，现在让我试着收集一个不可或缺的插件的简短列表，来提升你使用 Emacs 时的工作效率。 虽然我主要侧重于与编程相关的生产力提升，但是这些插件对所有人或不同用途都是有用的。

### 1. Ido-mode

Ido 或许是对新手最有用的一个插件，Ido 的意思是<ruby> 交互式工作 <rp>  （ </rp> <rt>  interactively do </rt> <rp>  ） </rp></ruby>。它取代了大部分的用花哨字符匹配菜单的枯燥提示。好比说，它用列出了当前目录所有文件的列表来取代了常规的打开文件提示符。输入一些字符，Ido 将尝试匹配最合适的文件。它通过可视化让你的操作变得更容易，这也是一个快速遍历所有文件都有相同前缀的文件夹的方法。

### 2. Smex

它不算最著名的一个、但却是一个替代 Ido-mode 的好选择：Smex 可以优雅的替代普通的`M-x`提示符，灵感大部分来自于 Ido-mode。它也给调用`M-x`后输入的命令带来了同样的交互搜索能力。它简单而有效，是一个为常用操作提升效率的最好方法。

### 3. Auto Complete

知道这个插件的存在之前，我在 Emacs 里面有一半的时间花在敲击 `M-/` 来补完单词上。现在，我有一个漂亮的弹出菜单可以为我做自动补全。无须多说，我们都需要它。

### 4. YASnippet

这是真正的程序员必备利器。总有一些代码片段会让我们觉得我们一辈子都在写它。对我来说，就是调试 PHP 时不断输入的 `var_dump(...);exit;`。经过一段时间一遍又一遍的输入`var_dump(...);exit;`，我觉得我可以预先把其做成录制好的、方便用到的代码片段。使用 YASnippets，可以很容易导入代码片段文件或者自己做个。之后，只要按下一个 tab 键，就可以将一个小的关键词扩展成一大段预先写好的代码，然后可以很方便地在里面修改。

### 5. Org-mode

免责声明，我最近才开始使用 Org-mode，但它已经深深的吸引了我。从我看过数以百计的文章来说，Org-mode 可以改变你的生活。它背后的想法很简单：它是一种用普通文本做简单备注的模式，可以很容易地在任务列表和各种数据中转来转去，并进行一些比如按优先级或到期日期的过滤，或设置一个重复日期。然而，虽然思路简单，但你可以做到很多，用各种方法用于各种用途。与其去看一个长长的介绍，我觉得你可以去读读[现有教程](http://orgmode.org/worg/org-tutorials/)，有很多视频可以看，自己去体验一下 Org-mode 是多么强大。

### 6. Helm

一些使用者喜欢它，但是其他人没有这么大的使用热情。我是后者的一部分。但在拥有这样一个庞大的追随者的情况下，是不能不提到它的。Helm 旨在完全变换你的 Emacs 使用体验。简单来说，Helm 是一个在 Emacs 中帮助你快速找到一个文件或命令的框架。根据你的输入，它将尝试使用词语自动完成来引导你将大脑的念头变为行动。起初感觉有点奇怪，但对一些人来说，Helm 本身就是一个信仰。虽然我不是 Helm 的粉丝，我欣赏 helm-occur 这一个伟大的工具可以在一个大文档搜索字符串并且在一个单独的缓冲区显示所有匹配结果，以便很容易在它们之间跳转。如果你正在寻找一个快速演示来了解 Helm 能做什么，我推荐[这篇文章](http://tuhdo.github.io/helm-intro.html)。

### 7. ace-jump-mode

这是另一个有一大群追随者的插件，我正在试图成为 ace-jump-mode 的粉丝。掌握这个插件，你会体验到超越鼠标感受。简单描述一下，通过你选择的快捷方式触发 ace-jump-mode 后，你会被提示输入字符。输入一个字符，所有以该字符开头的单词中的那个字符就会替换成一个唯一字符并被高亮。输入一个屏幕上的高亮字符，你的光标会直接跳转到高亮显示的那个词。我不得不承认，这让我使用它时有点反应不过来，但是，一旦你掌握它，它将显著提升你在一个文档里的移动速度。（LCTT 译注：用文字描述比较困难，如截图中，你输入的是一个“i”，然后屏幕中所有以“i”开头的单词中的那个“i”都被替换成了从 a 到 z 的字符，并高亮；你可以输入这些高亮的字符直接跳转到那个位置。）

### 8. find-file-in-project

如果你喜欢 Sublime text 以及它可以用非常方便的`Ctrl-p`模糊搜索来打开一个项目中的任何文件的功能，你将会喜欢上 find-file-in-project （简称 ffip）的。使用设置指定了您的版本控制的根文件夹后，您可以轻松地调出一个很酷的文本条，通过快速扫描和搜索你的代码，来根据你输入的名称找到匹配的文件。我喜欢把它绑定到键盘上的 F6 键。如果你不知道整个目录从上到下的复杂结构，这很简单，而且非常易用。

### 9. Flymake

对 IDE 的爱好者来说，我认为语法检查器是 IDE 最强大的特性之一，它非常适合初学者和方便了那些疲惫的程序员。感谢 Flymake，Emacs 用户也可以享受到了语法检查器。因为我工作中用 PHP 很多，Flymake 就不需要任何额外的配置。当我写代码的时候，它会自动检查我的代码和高亮任何一个包含问题的行。对于编译语言，Flymake 将寻找一个用于检查你的代码的 Makefile。真神奇。

### 10. electric-pair

最后，但并非最不重要，在我看来，electric-pair 是最简单但最强大的插件之一。它会自动关闭你输入的括号。它起初看起来并不是很有用，但相信我，在被寻找配对括号折磨几百次之后，你会很高兴有这么一个插件，可以确保你所有的表达式的括号都是一一对应的。

总结一下，Emacs 是一个奇妙的工具。这可不是一个令人惊讶的说法。试试这些插件，看着你的效率直线飙升吧。这个列表当然不是详尽的列表。如果你想贡献你的建议，请在评论中这样做。我自己一直在寻找新的插件来试着发现 Emacs 的新体验。

---

via: <http://xmodulo.com/best-plugins-to-increase-productivity-on-emacs.html>

作者：[Adrien Brochard](http://xmodulo.com/author/adrien) 译者：[zky001](https://github.com/zky001) 校对：[wxy](https://github.com/wxy)

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


Grub 2：拯救你的 bootloader

这个页面有问题，crhome 打开会导致高 CPU 占用率。

昨天根据此文指导实战。因WIN7升级WIN10导致原多系统GRUB1.99出错。

用的Debian 7 live 进行修复。遇到问题：

1、 sudo add-apt-repository ppa:yannubuntu/Boot Repair的命令出错，准确的说是 add-apt-repository不存在，我也白到不知道怎么添加。

2、grub2-install 无此命令。原系统自带的grub版本号是1.99，所以使用grub-install解决问题，包括grub-mkconfig。

来自河北保定的 Firefox 43.0|Windows Server 2003 用户

已经修复，是一个没必要的效果导致的。

去官网用deb包装，注意依赖。

有彻底的梳理了一遍啊！！感谢lz！！

grub> set root=(hd0,5)

    grub> linux /boot/vmlinuz-3.13.0-24-generic root=/dev/sda5

    grub> initrd /boot/initrd.img-3.13.0-24-generic

文章中的这个配置有问题，hd设备是0开始的，而sda则是1开始，所有此处应该改为sda6。

如果我说得不对请lz指正！！

sudo umount /mnt/{sys,proc,dev/pts,dev,}<br />
一行umount，用起来比较方便

# Grub 2：拯救你的 bootloader

**没有什么事情比 bootloader 坏掉更气人的了。充分发挥 Grub 2 的作用，让 bootloader 安分工作吧。**

为什么这么说？

* Grub 2 是最受欢迎的 bootloader ，几乎用在所有 Linux 发行版上。
* bootloader 是一个至关重要的软件，但是非常容易损坏。
* Grub 2 是兼具扩展性和灵活性的一款引导加载程序，提供了大量可定制选项。

Grub 2 是一款精彩的功能强大的软件。它不是 bootloader 界的一枝独秀，但却最受欢迎，几乎所有主要的桌面发行版都在使用它。 Grub 的工作有两个。首先，它用一个菜单展示计算机上所有已经安装的操作系统供你选择。其次，当你从启动菜单中选择了一个 Linux 操作系统， Grub 便加载这个 Linux 的内核。

你知道，如果使用 Linux ，你就离不开 bootloader 。然而它却是 Linux 发行版内部最鲜为人知的部分。在这篇文章里，我们将带你熟悉 Grub 2 一些著名的特性，强化你相关技能，使你在 bootloader 跑飞的时候能够自行处理。

Grub 2 最重要的部分是一堆文本文件和两个脚本文件。首先需要了解的是 `/etc/default/grub` 。这是一个文本文件，你可以在里面设置通用配置变量和 Grub 2 菜单（见下方 “常见用户设置” ）的其它特性。

Grub 2 另一个重要的部分是 `/etc/grub.d` 文件夹。定义每个菜单项的所有脚本都放置在这里。这些脚本的名称必须有两位的数字前缀。其目的是，在构建 Grub 2 菜单时定义脚本的执行顺序以及相应菜单项的顺序。文件 `00_header` 首先被读取，负责解析 `/etc/default/grub` 配置文件。然后是 Linux 内核的菜单项，位于 `10_linux` 文件中。这个脚本在默认的 `/boot` 分区为每个内核创建一个正规菜单项和一个恢复菜单项。

紧接着的是为第三方应用所用的脚本，如 `30_os-prober` 和 `40_custom` 。 **os-prober** 脚本为内核和其它分区里的操作系统创建菜单项。它能识别安装的 Linux、 Windows、 BSD 以及 Mac OS X 。 如果你的硬盘布局比较独特，使得 **os-prober** 无法找到已经安装的发行版，你可以在 `40_custom` 文件（见下方 “添加自定义菜单项”）中添加菜单项。

**Grub** 2 不需要你手动维护你的启动选项的配置文件：取而代之的是使用 `grub2-mkconfig` 命令产生 `/boot/grub/grub.cfg` 文件。这个功能会解析 `/etc/grub.d` 目录中的脚本以及 `/etc/default/grub` 设置文件来定义你的设置情况。

>
> ### 图形化的引导修复
>
>
> 多亏了 Boot Repair 应用，只需要点击按钮，Grub 2 许许多多的问题都能轻易解决。这个漂亮小巧的应用有一个直观的用户界面，可以扫描并识别多种硬盘布局和分区方案，还能发现并正确识别安装在其中的操作系统。这个应用可以处理传统计算机里的<ruby> 主引导记录 <rp>  （ </rp> <rt>  Master Boot Record </rt> <rp>  ） </rp></ruby> (MBR)，也可以处理新型 UEFI 计算机中的<ruby> GUID 分区表 <rp>  （ </rp> <rt>  GUID Partition Table </rt> <rp>  ） </rp></ruby>（GPT）。
>
>
> Boot Repair 最简单的使用方式是安装到 Live Ubuntu 会话中。在一个 bootloader 损坏的机器上启动 Ubuntu Live 发行版，先通过添加它的 PPA 版本库来安装 Boot Repair ，命令如下：
>
>
>
> ```
> sudo add-apt-repository ppa:yannubuntu/Boot Repair
>
> ```
>
> 然后刷新版本库列表：
>
>
>
> ```
> sudo apt-get update
>
> ```
>
> 安装应用，如下：
>
>
>
> ```
> sudo apt-get install -y Boot Repair
>
> ```
>
> 安装完毕后就启动应用。在显示它的界面（由一对按键组成）之前将会扫描你的硬盘。根据工具的指示，只需按下 <ruby> Recommended Repair <rp>  （ </rp> <rt>  推荐的修复 </rt> <rp>  ） </rp></ruby>按钮，即可修复大部分坏掉的 bootloader 。修复 bootloader 之后，这个工具会输出一个短小的 URL ，你应该把它记录下来。这个 URL 包含了硬盘详尽的信息：分区信息以及重要的 Grub 2 文件（如 `/etc/default/grub` 和 `/boot/grub/grub.cfg` ）的内容。如果工具不能解决 bootloader 的问题，可以把你这个 URL 共享在你的发行版的论坛上，让其他人可以分析你的硬盘布局以便给你建议。
>
>
>
>
>
> *Boot Repair 也可以让你定制 Grub 2 的选项。*
>
>
>

### Bootloader 急救

Grub 2 引导问题会让系统处于几种不同状态。屏幕（如你所想，本该显示 bootloader 菜单的地方）所展示的文本会指示出系统的当前状态。如果系统中止于 **grub>** 提示符，表明 Grub 2 模块已经被加载，但是找不到 **grub.cfg** 文件。当前是完全版的 Grub 2 命令行 shell，你可以通过多种方式解决此问题。如果你看到的是 **grub rescue>** 提示符，表明 bootloader 不能找到 Grub 2 模块或者找不到任何<ruby> 引导文件 <rp>  （ </rp> <rt>  boot files </rt> <rp>  ） </rp></ruby>。然而，如果你的屏幕只显示 ‘GRUB’ 一词，表明 bootloader 找不到通常位于<ruby> 主引导记录 <rp>  （ </rp> <rt>  Master Boot Record </rt> <rp>  ） </rp></ruby>里的最基本的信息。

你可以通过使用 live CD 或者在 Grub 2 shell 中修正此类错误。如果你够幸运， bootloader 出现了 **grub>** 提示符，你就能获得 Grub 2 shell 的支配权，来帮助你排错。

接下来几个命令工作在 **grub>** 和 **grub rescue>** 提示符下。 **set pager=1** 命令设置显示<ruby> 分页 <rp>  （ </rp> <rt>  pager </rt> <rp>  ） </rp></ruby>，防止文本在屏幕上一滚而过。你还可以使用 **ls** 命令列出 Grub 识别出的所有分区，如下：

```
grub> ls
(hd0) (hd0,msdos5) (hd0,msdos6) (hd1,msdos1)

```

如你所见，这个命令列出分区的同时一并列出了分区表方案（即 msdos）。

你还可以在每个分区上面使用 **ls** 来查找你的根文件系统：

```
grub> ls (hd0,5)/
lost+found/ var/ etc/ media/ bin/ initrd.gz
boot/ dev/ home/ selinux/ srv/ tmp/ vmlinuz

```

你可以不写上分区名的 **msdos** 部分。同样，如果你忘记了尾部的<ruby> 斜杠 <rp>  （ </rp> <rt>  trailing slash </rt> <rp>  ） </rp></ruby>只输入 `ls (hd0,5)` ，那你将获得分区的信息，比如文件系统类型、总体大小和最后修改时间。如果你有多个分区，可以使用 `cat` 读取 `/etc/issue` 文件中的内容，来确定发行版，格式如 `cat (hd0,5)/etc/issue` 。

假设你在 **(hd0,5)** 中找到根文件系统，请确保它包含 `/boot/grub` 目录，以及你想引导进入的内核镜像，如 **vmlinuz-3.13.0-24-generic** 。此时输入以下命令：

```
grub> set root=(hd0,5)
grub> linux /boot/vmlinuz-3.13.0-24-generic root=/dev/sda5
grub> initrd /boot/initrd.img-3.13.0-24-generic

```

第一个命令把 Grub 指向我们想引导进入的发行版所在的分区。接着第二个命令告知 Grub 内核镜像在分区中的位置，以及根文件系统的位置。最后一行设置<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  initial ramdisk </rt> <rp>  ） </rp></ruby>文件的位置。你可以使用 tab 补全功能补全内核名字和<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  initrd: initial ramdisk </rt> <rp>  ） </rp></ruby>的名字，节省时间和精力。

输入完毕，在下一个 **grub>** 提示符后输入 `boot` ， Grub 将会引导进入指定的操作系统。

如果你在 **grub rescue>** 提示符下，情况会有些许不同。因为 bootloader 未能够找到并加载任何必需的模块，你需要手动添加这些模块：

```
grub rescue> set root=(hd0,5)
grub rescue> insmod (hd0,5)/boot/grub/normal.mod
grub rescue> normal
grub> insmod linux

```

如上所示，跟之前一样，使用 `ls` 命令列出所有分区之后，使用 `set` 命令标记起来。然后添加 **normal** 模块，此模块激活时将会恢复到标准 **grub>** 模式。如果 linux 模块没加载，接下来的命令会进行添加。如果这个模块已经加载，你可以跟之前一样，把引导加载程序指向内核镜像和<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  initrd </rt> <rp>  ） </rp></ruby>文件，然后使用 `boot` 启动发行版，完美收官。

一旦成功启动发行版，别忘了为 Grub 重新产生新的配置文件，使用

```
grub-mkconfig -o /boot/grub/grub.cfg

```

命令。你还需要往 MBR 里安装一份 bootloader 的拷贝，使用

```
sudo grub2-install /dev/sda

```

命令。

*想要禁用 `/etc/grub.d` 目录下的脚本，你只需移除其可执行位，比如使用 `chmod -x /etc/grub.d/20_memtest86+` 就能将 ‘Memory Test’ 选项从菜单中移除。*

>
> ### Grub 2 和 UEFI
>
>
> 在支持 UEFI 的机器（最近几年上市的机器大部分都是）调试坏掉的 Grub 2 增加了另一复杂的层次。恢复安装在 UEFI 机器上的 **Grub 2** 的和安装在非 UEFI 机器上的并没多大区别，只是新的固件处理方式不一样，从而导致了很多种恢复结果。
>
>
> 对于基于 UEFI 的系统，不要在 MBR 上安装任何东西。相反，你要在<ruby> EFI 系统分区 <rp>  （ </rp> <rt>  EFI System Partition </rt> <rp>  ） </rp></ruby>（ ESP ）里安装 Linux EFI bootloader，并且借助工具把它设置为 EFI 的默认启动程序，这个工具对于 Linux 用户是 `efibootmgr` ，对于 window 用户则是 `bcdedit` 。
>
>
> 照目前情况看，在安装任何与 Windows 8 兼容的主流桌面 Linux 发行版前，应该正确安装好 Grub 2。然而，如果 bootloader 损坏，你可以使用 live 发行版修复机器。在启动 live 介质之时，请确保是以 UEFI 模式启动。计算机每个可移动驱动器的启动菜单将会有两个： 一个普通的和一个以 EFI 标记的。使用后者会用到 **/sys/firmware/efi/** 文件中的 EFI 变量。
>
>
> 在 live 环境中，挂载教程前面所提的安装挂掉系统的根文件系统。除此之外，还需要挂载 ESP 分区。假设分区是 **/dev/sda1** ，你可以如下所示挂载：
>
>
>
> ```
> sudo mount /dev/sda1 /mnt/boot/efi
>
> ```
>
> 接着在 chroot 到安装完毕的发行版前之前，使用 `modprobe efivars` 加载 **efivars** 模块。
>
>
> 在这里， Fedora 用户可以使用如下命令重新安装 bootloader
>
>
>
> ```
> yum reinstall grub2-efi shim
>
> ```
>
> 但在此之前，需要使用
>
>
>
> ```
> grub2-mkconfig -o /boot/grub2/grub.cfg
>
> ```
>
> 来产生新的配置文件。 Ubuntu 用户则改用以下命令
>
>
>
> ```
> apt-get install --reinstall grub-efi-amd64
>
> ```
>
> 一旦 bootloader 正确就位，退出 chroot ，卸载所有分区，重启到 Grub 2 菜单。
>
>
>

### 伙计，我的 Grub 哪去了？

Grub 2 最好的特性是可以随时重新安装。因此，当其它像 Windows 之类的系统用它们自己的 bootloader 替换后，导致 Grub 2 丢失，你可以使用 live 发行版，寥寥数步即可重装 Grub 。假设你在 `/dev/sda5` 安装了一个发行版，若要重装 Grub ，你只需首先使用以下命令为发行版创建一个挂载目录：

```
sudo mkdir -p /mnt/distro

```

然后挂载分区，如下：

```
mount /dev/sda5 /mnt/distro

```

接着就能重装 Grub 了，如下：

```
grub2-install --root-directory=/mnt/distro /dev/sda

```

这个命令会改写 `/dev/sda` 设备上的 MBR 信息，指向当前 Linux 系统，并重写一些 Grub 2 文件，如 **grubenv** 和 **device.map** 。

另一个问题常见于装有多个发行版的计算机上。当你安装了新的 Linux 发行版，它的 bootloader 应当要能找到所有已经安装的发行版。一旦不行，只要引导进入新安装的发行版，并运行

```
grub2-mkconfig

```

在运行这个命令之前，请确保启动菜单中缺失的发行版的 root 分区已经挂载。如果你想添加的发行版有单独的 `/root` 和 `/home` 分区，在运行 `grub2-mkconfig` 之前，只需挂载包含 `/root` 的分区。

虽然 Grub 2 能够找到大部分发行版，但是在 Ubuntu 中尝试添加安装的 Fedora 系统需要额外的一个步骤。如果你以默认设置安装了 Fedora ，则发行版的安装器已经创建了 LVM 分区。此时你需要使用发行版的包管理系统安装 **lvm2** 驱动，如下

```
sudo apt-get install lvm2

```

才能使得 Grub 2 的 `os-prober` 脚本能够找到并将 Fedora 添加进启动菜单。

>
> ### 常见用户设置
>
>
> Grub 2 有很多可配置变量。 这里有一些 `/etc/default/grub` 文件中你最可能会修改到的常见变量。 **GRUB\_DEFAULT** 变量指定默认的启动项，可以设置为数字值，比如 0 ，表示第一个菜单项，或者设置为 “saved” ，将指向上一次启动时选中的菜单项。 **GRUB\_TIMEOUT** 变量指定启动默认菜单项之前的停留时间。 **GRUB\_CMDLINE\_LINUX** 列出了要传递给所有 Linux 菜单项的内核命令行参数。
>
>
> 如果 **GRUB\_DISABLE\_RECOVERY** 变量设置为 **true** ，那么将不生成恢复模式菜单项。这些菜单项会以单用户模式启动发行版，这种模式下允许你利用命令行工具修复系统。 **GRUB\_GFXMODE** 变量同样有用，它指定了菜单上文本显示的分辨率，它可以设置为你的显卡所支持的任何数值。
>
>
>
>
>
> *Grub 2 有个命令行模式，通过在 bootloader 菜单上按 C 进入。*
>
>
>

### 彻底的修复

如果 `grub2-install` 命令不能正常运作，使得你无法引导进入 Linux ，你需要完整地重装以及重新配置 bootloader 。为此目的，需要用到强大的 **chroot** 功能将运行环境从 live CD 环境切换至我们想修复的 Linux 的安装位置。任何拥有 **chroot** 工具的 Linux live CD 都可以实现这个目的。不过需要确保 live 介质的系统架构和硬盘上系统的架构一致。因此当你希望 **chroot** 到 64 位系统，你必须使用 amd64 live 发行版。

启动进入 live 发行版之后，首先需要检查机器上的分区。使用 `fdisk -l` 列出磁盘上所有分区，记录你想修复的 Grub 2 系统所在的分区。

假设我们希望从安装在 `/dev/sda5` 中的发行版中恢复 bootloader 。启动终端使用如下命令挂载分区：

```
sudo mount /dev/sda5 /mnt

```

此时需要<ruby> 绑定 <rp>  （ </rp> <rt>  bind </rt> <rp>  ） </rp></ruby>Grub 2 bootloader 需要进入的目录，以便检测其它操作系统：

```
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /dev/pts /mnt/dev/pts
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys

```

此时可以离开 live 环境进入安装在 **/dev/sda5** 分区中的发行版了，通过 **chroot** ：

```
$ sudo chroot /mnt /bin/bash

```

现在可以安装、检测、以及升级 Grub 了，跟之前一样，使用

```
sudo grub2-install /dev/sda

```

命令来重装 bootloader 。因为 **grub2-install** 命令不能创建**grub.cfg** 文件，需要手动创建，如下

```
sudo grub-mkconfig -o /boot/grub/grub.cfg

```

这样应该就可以了。现在你就有了 Grub 2 的一份全新拷贝，罗列了机器上所有的操作系统和发行版。在重启电脑之前，你需要依次退出 chroot 系统，卸载所有分区，如下所示：

```
$ exit
$ sudo umount /mnt/sys
$ sudo umount /mnt/proc
$ sudo umount /mnt/dev/pts
$ sudo umount /mnt/dev
$ sudo umount /mnt

```

现在你可以安全地重启电脑了，而它应该会回退到 Grub 2 的控制之中，你已经修好了这个 bootloader。

>
> ### 添加自定义菜单项
>
>
> 如果希望往 bootloader 菜单里添加菜单项，你需要在 **40\_custom** 文件里添加一个<ruby> 启动段 <rp>  （ </rp> <rt>  boot stanza </rt> <rp>  ） </rp></ruby>。例如，你可以使用它展示一个菜单项来启动安装在可移动 USB 驱动里的 Linux 发行版。假设你的 USB 驱动器是 **sdb1** ，并且 vmlinuz 内核镜像和<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  initrd </rt> <rp>  ） </rp></ruby>都位于根 (/)目录下，在 **40\_custom** 文件中添加以下内容：
>
>
>
> ```
> menuentry “Linux on USB” {
>    set root=(hd1,1)
>    linux /vmlinuz root=/dev/sdb1 ro quiet splash
>    initrd /initrd.img
> }
>
> ```
>
> 相比使用设备和分区名，使用它们的 UUID 可以获得更精确结果，比如
>
>
>
> ```
> set root=UUID=54f22dd7-eabe
>
> ```
>
> 使用
>
>
>
> ```
> sudo blkid
>
> ```
>
> 来获得所有已连接的驱动器和分区的 UUID 。你还可以为你磁盘上没被 os-prober 脚本找到的发行版添加菜单项，只要你知道该发行版的安装位置以及其内核和<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  initrd </rt> <rp>  ） </rp></ruby>的位置即可。
>
>
>

---

via: <https://www.linuxvoice.com/grub-2-heal-your-bootloader/>

作者：[Mayank Sharma](https://www.linuxvoice.com/author/mayank/) 译者：[soooogreen](https://github.com/soooogreen) 校对：[wxy](https://github.com/wxy)

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