N1：下一代开源邮件客户端

Summary: 当我们谈论到Linux中的邮件客户端，通常 Thunderbird、Geary 和 Evolution 就会出现在我们的脑海。作为对这些大咖们的挑战，一款新的开源邮件客户端正在涌入市场。 设计和功能 N1是一个设计与功能并重的新一代开源邮件客户端。作为一个开源软件，N1目前支持 Linux 和 Mac OS X，Windows的版本还在开发中。 N1宣传它自己为可扩展的开源邮件客户端，因为它包含了 Javascript 插件框架，任何人都可以为它创建强大的新功能。可扩展是一个非常流行的功能，它帮助开源编辑器Atom变得流行。N1同样把重点放在了可扩展上面。 除了可扩展性，N1同样

请问如何在gnome online account或evolution中添加qq.com或live.com的exchange类型账户呢？我想同步日历。谢谢！

有谁试过没？发表一下评论？

只有deb的。。。

已经不需要邀请，直接下载，不过在linux下点Download只会下载DEB包

又是一个next generation

有其他链接可以到github源码包

原文说window版还在开发中，但是用windows打开链接已经可以下载exe了，是不是文章有点旧了？？？？

不用邀请就可以下DEB的包了，在github里也有其它版本的，这文章是不是很早以前的？

国内的一些邮件服务不太好添加进去，我拿QQ邮箱试过了。

成功添加sina邮箱，收发正常。但是新浪要进设置打开IMAP、SMTP等等的服务，你的QQ邮箱不会没开吧？

对着QQ提供的教程步骤开服务的，照着要求用了QQ的授权码当密码来登录，提交账号密码后各种连接超时，搞了老半天没响应。昨天晚上又不知怎么的，点开N1想再搞搞，突然它又自己连上了QQ的邮件服务器拉取了内容，也真是奇葩。。。。。

腾讯的邮箱的确不太行，应该是网的锅，我那边只能拉取发件箱的少数邮件，收件箱半个小时没下来

这个软件的feedback窗口有问题，在ubuntu下偶尔会出现关不掉的bug，其他用户也遇到过类似情况吗？我在他们的github上反馈了这个问题，如果有类似问题的用户欢迎来github上响应（反馈链接 https://github.com/nylas/N1/issues/668 ）。

80多M的邮箱客户端，也是醉了

# N1：下一代开源邮件客户端

当我们谈论到Linux中的邮件客户端，通常 Thunderbird、Geary 和 [Evolution](https://help.gnome.org/users/evolution/stable/) 就会出现在我们的脑海。作为对这些大咖们的挑战，一款新的开源邮件客户端正在涌入市场。

### 设计和功能

[N1](https://nylas.com/N1/)是一个设计与功能并重的新一代开源邮件客户端。作为一个开源软件，N1目前支持 Linux 和 Mac OS X，Windows的版本还在开发中。

N1宣传它自己为“可扩展的开源邮件客户端”，因为它包含了 Javascript 插件框架，任何人都可以为它创建强大的新功能。可扩展是一个非常流行的功能，它帮助[开源编辑器Atom](http://itsfoss.com/atom-stable-released/)变得流行。N1同样把重点放在了可扩展上面。

除了可扩展性，N1同样着重设计了程序的外观。下面N1的截图就是个很好的例子：

*Mac OS X上的N1客户端。图片来自：N1*

除了这个功能，N1兼容上百个邮件服务提供商，包括Gmail、Yahoo、iCloud、Microsoft Exchange等等，这个桌面应用提供了离线功能。

### 目前只能邀请使用

我不知道为什么每个人都选择了 OnePlus 的‘只能邀请使用’的市场策略。目前，N1桌面端只能被邀请才能下载。你可以用下面的链接请求一个邀请。N1团队会在几天内邮件给你下载链接。

* [请求N1邀请](https://invite.nylas.com/download)

### 感兴趣了么?

我并不是桌面邮件客户端的粉丝，但是 N1 的确引起了我的兴趣，让我想要试一试。你呢？

---

via: <http://itsfoss.com/n1-open-source-email-client/>

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

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


Summary: 在 Linux 世界里，对 systemd 的采用一直是激烈争论的主题，它的支持者和反对者之间的战火仍然在燃烧。到了今天，大部分主流 Linux 发行版都已经采用了 systemd 作为默认的初始化（init）系统。 正如其作者所说，作为一个 从未完成、从未完善、但一直追随技术进步 的系统，systemd 已经不只是一个初始化进程，它被设计为一个更广泛的系统以及服务管理平台，这个平台是一个包含了不断增长的核心系统进程、库和工具的生态系统。  systemd 的其中一部分是 systemd-networkd，它负责 systemd 生态中的网络配置。使用 systemd-networkd，你可以

systemd 目前都已经接管了哪些功能？

我们就等着 Systemd-OS 啦——简称 SOS

马

总觉得用nmcli命令比修改配置文件更可靠不容易出错，还是先坚持用NetworkManager吧。

7.0是一个飞跃，每天看一点、了解一点、学习一点，点滴积累。

# 如何在 Linux 上从 NetworkManager 切换为 systemd-network

在 Linux 世界里，对 [systemd](http://xmodulo.com/use-systemd-system-administration-debian.html) 的采用一直是激烈争论的主题，它的支持者和反对者之间的战火仍然在燃烧。到了今天，大部分主流 Linux 发行版都已经采用了 systemd 作为默认的<ruby> 初始化 <rp>  （ </rp> <rt>  init </rt> <rp>  ） </rp></ruby>系统。

正如其作者所说，作为一个 “从未完成、从未完善、但一直追随技术进步” 的系统，systemd 已经不只是一个初始化进程，它被设计为一个更广泛的系统以及服务管理平台，这个平台是一个包含了不断增长的核心系统进程、库和工具的生态系统。

**systemd** 的其中一部分是 **systemd-networkd**，它负责 systemd 生态中的网络配置。使用 systemd-networkd，你可以为网络设备配置基础的 DHCP/静态 IP 网络。它还可以配置虚拟网络功能，例如网桥、隧道和 VLAN。systemd-networkd 目前还不能直接支持无线网络，但你可以使用 wpa\_supplicant 服务配置无线适配器，然后把它和 **systemd-networkd** 联系起来。

在很多 Linux 发行版中，NetworkManager 仍然作为默认的网络配置管理器。和 NetworkManager 相比，**systemd-networkd** 仍处于积极的开发状态，还缺少一些功能。例如，它还不能像 NetworkManager 那样能让你的计算机在任何时候通过多种接口保持连接。它还没有为更高层面的脚本编程提供 ifup/ifdown 钩子函数。但是，systemd-networkd 和其它 systemd 组件（例如用于域名解析的 **resolved**、NTP 的**timesyncd**，用于命名的 udevd）结合的非常好。随着时间增长，**systemd-networkd**只会在 systemd 环境中扮演越来越重要的角色。

如果你对 **systemd-networkd** 的进步感到高兴，从 NetworkManager 切换到 systemd-networkd 是值得你考虑的一件事。如果你强烈反对 systemd，对 NetworkManager 或[基础网络服务](http://xmodulo.com/disable-network-manager-linux.html)感到很满意，那也很好。

但对于那些想尝试 systemd-networkd 的人，可以继续看下去，在这篇指南中学会在 Linux 中怎么从 NetworkManager 切换到 systemd-networkd。

### 需求

systemd 210 及其更高版本提供了 systemd-networkd。因此诸如 Debian 8 "Jessie" (systemd 215)、 Fedora 21 (systemd 217)、 Ubuntu 15.04 (systemd 219) 或更高版本的 Linux 发行版和 systemd-networkd 兼容。

对于其它发行版，在开始下一步之前先检查一下你的 systemd 版本。

```
$ systemctl --version

```

### 从 NetworkManager 切换到 Systemd-networkd

从 NetworkManager 切换到 systemd-networkd 其实非常简答（反过来也一样）。

首先，按照下面这样先停用 NetworkManager 服务，然后启用 systemd-networkd。

```
$ sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd

```

你还要启用 **systemd-resolved** 服务，systemd-networkd用它来进行域名解析。该服务还实现了一个缓存式 DNS 服务器。

```
$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved

```

当启动后，**systemd-resolved** 就会在 /run/systemd 目录下某个地方创建它自己的 resolv.conf。但是，把 DNS 解析信息存放在 /etc/resolv.conf 是更普遍的做法，很多应用程序也会依赖于 /etc/resolv.conf。因此为了兼容性，按照下面的方式创建一个到 /etc/resolv.conf 的符号链接。

```
$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

```

### 用 systemd-networkd 配置网络连接

要用 systemd-networkd 配置网络服务，你必须指定带.network 扩展名的配置信息文本文件。这些网络配置文件保存到 /etc/systemd/network 并从这里加载。当有多个文件时，systemd-networkd 会按照字母顺序一个个加载并处理。

首先创建 /etc/systemd/network 目录。

```
$ sudo mkdir /etc/systemd/network

```

#### DHCP 网络

首先来配置 DHCP 网络。对于此，先要创建下面的配置文件。文件名可以任意，但记住文件是按照字母顺序处理的。

```
$ sudo vi /etc/systemd/network/20-dhcp.network

```

---

```
[Match]
Name=enp3*

[Network]
DHCP=yes

```

正如你上面看到的，每个网络配置文件包括了一个或多个 “sections”，每个 “section”都用 [XXX] 开头。每个 section 包括了一个或多个键值对。`[Match]` 部分决定这个配置文件配置哪个（些）网络设备。例如，这个文件匹配所有名称以 ens3 开头的网络设备（例如 enp3s0、 enp3s1、 enp3s2 等等）对于匹配的接口，然后启用 [Network] 部分指定的 DHCP 网络配置。

### 静态 IP 网络

如果你想给网络设备分配一个静态 IP 地址，那就新建下面的配置文件。

```
$ sudo vi /etc/systemd/network/10-static-enp3s0.network

```

---

```
[Match]
Name=enp3s0

[Network]
Address=192.168.10.50/24
Gateway=192.168.10.1
DNS=8.8.8.8

```

正如你猜测的， enp3s0 接口地址会被指定为 192.168.10.50/24，默认网关是 192.168.10.1， DNS 服务器是 8.8.8.8。这里微妙的一点是，接口名 enp3s0 事实上也匹配了之前 DHCP 配置中定义的模式规则。但是，根据词汇顺序，文件 "10-static-enp3s0.network" 在 "20-dhcp.network" 之前被处理，对于 enp3s0 接口静态配置比 DHCP 配置有更高的优先级。

一旦你完成了创建配置文件，重启 systemd-networkd 服务或者重启机器。

```
$ sudo systemctl restart systemd-networkd

```

运行以下命令检查服务状态：

```
$ systemctl status systemd-networkd
$ systemctl status systemd-resolved

```

### 用 systemd-networkd 配置虚拟网络设备

**systemd-networkd** 同样允许你配置虚拟网络设备，例如网桥、VLAN、隧道、VXLAN、绑定等。你必须在用 .netdev 作为扩展名的文件中配置这些虚拟设备。

这里我展示了如何配置一个桥接接口。

#### Linux 网桥

如果你想创建一个 Linux 网桥(br0) 并把物理接口(eth1) 添加到网桥，你可以新建下面的配置。

```
$ sudo vi /etc/systemd/network/bridge-br0.netdev

```

---

```
[NetDev]
Name=br0
Kind=bridge

```

然后按照下面这样用 .network 文件配置网桥接口 br0 和从接口 eth1。

```
$ sudo vi /etc/systemd/network/bridge-br0-slave.network

```

---

```
[Match]
Name=eth1

[Network]
Bridge=br0

```

---

```
$ sudo vi /etc/systemd/network/bridge-br0.network

```

---

```
[Match]
Name=br0

[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8

```

最后，重启 systemd-networkd。

```
$ sudo systemctl restart systemd-networkd

```

你可以用 [brctl 工具](http://xmodulo.com/how-to-configure-linux-bridge-interface.html) 来验证是否创建好了网桥 br0。

### 总结

当 systemd 誓言成为 Linux 的系统管理器时，有类似 systemd-networkd 的东西来管理网络配置也就不足为奇。但是在现阶段，systemd-networkd 看起来更适合于网络配置相对稳定的服务器环境。对于桌面/笔记本环境，它们有多种临时有线/无线接口，NetworkManager 仍然是比较好的选择。

对于想进一步了解 systemd-networkd 的人，可以参考官方[man 手册](http://www.freedesktop.org/software/systemd/man/systemd.network.html)了解完整的支持列表和关键点。

---

via: <http://xmodulo.com/switch-from-networkmanager-to-systemd-networkd.html>

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

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


Fedora 24 考虑将 systemd 分成两个软件包

Summary: 来自 Redhat 的 Fedora 平台和程序经理 Jan Kurik 宣布了一个功能建议，这是给目前已经进入了开发周期的 Fedora 24 的第一份功能建议。 这些新功能建议之一是，在 Fedora 24 中将 systemd 包分割出两个子包：systemd-udev 和 systemd-container。不出所料，这让 Fedora 的开发宣告邮件列表炸了锅，要知道，这两个 systemd 子包都是可选的。 systemd-container 子包将包含所有用于启动和管理容器和虚拟机的工具，以帮助 Fedora 用户应用这些技术；而 systemd-udev 子包将包含 udev 守护进程（udevd）和各种硬件相关的工具。 这些子包都会包

这速度。。。。。

# Fedora 24 考虑将 systemd 分成两个软件包

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

来自 Redhat 的 Fedora 平台和程序经理 Jan Kurik 宣布了一个功能建议，这是给目前已经进入了开发周期的 Fedora 24 的第一份功能建议。

这些[新功能建议之一](https://lists.fedoraproject.org/archives/list/devel-announce%40lists.fedoraproject.org/thread/EOX5J7FUK6SQJK2OHZTDAN2K5ZM2L4LU/)是，在 Fedora 24 中将 systemd 包分割出两个子包：systemd-udev 和 systemd-container。不出所料，这让 Fedora 的开发宣告邮件列表炸了锅，要知道，这两个 systemd 子包都是可选的。

systemd-container 子包将包含所有用于启动和管理容器和虚拟机的工具，以帮助 Fedora 用户应用这些技术；而 systemd-udev 子包将包含 udev 守护进程（udevd）和各种硬件相关的工具。

### 这些子包都会包含什么？

看起来 Fedora 开发者们已经讨论过了哪些工具会包含在这些新的子包中。对于 systemd-container.rpm， 它应该包括 systemd-pull、 systemd-nspawn、 machinectl、 systemd-machined 和 systemd-importd。

而 systemd-udev.rpm 将包括硬件数据库、udev 规则，以及 udevadm 和system-udevd 工具。

要实现这些子包，Fedora 开发者需要将这些相关的依赖都加上。

此外，Anaconda 安装器也需要更新来使 systemd-udev 子包成为 Fedora 24 的默认安装包。无论如何，让我们拭目以待 Fedora 即将到来的更新。


超神们：15 位健在的世界级程序员！

Summary: 当开发人员说起世界顶级程序员时，他们的名字往往会被提及。 好像现在程序员有很多，其中不乏有许多优秀的程序员。但是哪些程序员更好呢？ 虽然这很难客观评价，不过在这个话题确实是开发者们津津乐道的。ITworld 深入程序员社区，避开四溅的争执口水，试图找出可能存在的所谓共识。事实证明，屈指可数的某些名字经常是讨论的焦点。  图片来源： tom_bullock CC BY 2.0 下面就让我们来看看这些世界顶级的程序员吧！ 玛格丽特汉密尔顿（Margaret Hamilton）  图片来源： NASA 成就： 阿波罗飞行控制软件背后的大脑 生平： 查尔斯斯塔克德雷

最可怕的是不从宏观考虑，比如吃了一个鸡蛋糕好吃，却不知道鸡蛋是什么

icanfigure [UC Browser 10.8|Android 4.4]

吐槽一下翻译，California Institute of Technology是指加州理工，不是什么“加利福尼亚技术研究所”。。。

谢谢！

崇拜一下

居然木有高斯林大神~

比尔盖茨 扎克伯格一些科技大佬的编程能力和他们差多少呢

# 超神们：15 位健在的世界级程序员！

当开发人员说起世界顶级程序员时，他们的名字往往会被提及。

好像现在程序员有很多，其中不乏有许多优秀的程序员。但是哪些程序员更好呢？

虽然这很难客观评价，不过在这个话题确实是开发者们津津乐道的。ITworld 深入程序员社区，避开四溅的争执口水，试图找出可能存在的所谓共识。事实证明，屈指可数的某些名字经常是讨论的焦点。

*图片来源： [tom\_bullock CC BY 2.0](https://www.flickr.com/photos/tombullock/15713223772)*

下面就让我们来看看这些世界顶级的程序员吧！

### <ruby> 玛格丽特·汉密尔顿 <rp>  （ </rp> <rt>  Margaret Hamilton </rt> <rp>  ） </rp></ruby>

*图片来源： [NASA](https://commons.wikimedia.org/wiki/File:Margaret_Hamilton_in_action.jpg)*

**成就： 阿波罗飞行控制软件背后的大脑**

生平： <ruby> 查尔斯·斯塔克·德雷珀实验室 <rp>  （ </rp> <rt>  Charles Stark Draper Laboratory </rt> <rp>  ） </rp></ruby>软件工程部的主任，以她为首的团队负责设计和打造 NASA 的阿波罗的舰载飞行控制器软件和<ruby> 空间实验室 <rp>  （ </rp> <rt>  Skylab </rt> <rp>  ） </rp></ruby>的任务。基于阿波罗这段的工作经历，她又后续开发了<ruby>   通用系统语言  <rp>  （ </rp> <rt>  Universal Systems Language </rt> <rp>  ） </rp></ruby>和<ruby>   开发先于事实  <rp>  （ </rp> <rt>  Development Before the Fact </rt> <rp>  ） </rp></ruby>的范例。开创了[异步软件、优先调度和超可靠的软件设计](http://www.nasa.gov/home/hqnews/2003/sep/HQ_03281_Hamilton_Honor.html)理念。被认为发明了“<ruby>   软件工程  <rp>  （ </rp> <rt>  software engineering </rt> <rp>  ） </rp></ruby>”一词。1986年获<ruby>   奥古斯塔·埃达·洛夫莱斯奖  <rp>  （ </rp> <rt>  Augusta Ada Lovelace Award </rt> <rp>  ） </rp></ruby>，2003年获<ruby>   NASA 杰出太空行动奖  <rp>  （ </rp> <rt>  Exceptional Space Act Award </rt> <rp>  ） </rp></ruby>。

评论：

>
> “汉密尔顿发明了测试，使美国计算机工程规范了很多” —— [ford\_beeblebrox](https://www.reddit.com/r/pics/comments/2oyd1y/margaret_hamilton_with_her_code_lead_software/cmrswof)
>
>
> “我认为在她之前（不敬地说，包括<ruby> 高德纳 <rp>  （ </rp> <rt>  Knuth </rt> <rp>  ） </rp></ruby>在内的）计算机编程是（另一种形式上留存的）数学分支。然而这个宇宙飞船的飞行控制系统明确地将编程带入了一个崭新的领域。” —— [Dan Allen](http://qr.ae/RFEZLk)
>
>
> “... 她引入了‘软件工程’这个术语 — 并作出了最好的示范。” —— [David Hamilton](http://qr.ae/RFEZUn)
>
>
> “真是个坏家伙” —— [Drukered](https://www.reddit.com/r/pics/comments/2oyd1y/margaret_hamilton_with_her_code_lead_software/cmrv9u9)
>
>
>

### <ruby> 唐纳德·克努斯 <rp>  （ </rp> <rt>  Donald Knuth </rt> <rp>  ） </rp></ruby>，即 高德纳

*图片来源： [vonguard CC BY-SA 2.0](https://www.flickr.com/photos/44451574@N00/5347112697)*

**成就： 《<ruby> 计算机程序设计艺术 <rp>  （ </rp> <rt>  The Art of Computer Programming，TAOCP </rt> <rp>  ） </rp></ruby>》 作者**

生平： 撰写了[编程理论的权威书籍](http://cs.stanford.edu/%7Euno/taocp.html)。发明了数字排版系统 Tex。1971年，[ACM（美国计算机协会）<ruby></ruby>](http://awards.acm.org/award_winners/knuth_1013846.cfm)[葛丽丝·穆雷·霍普奖](http://awards.acm.org/award_winners/knuth_1013846.cfm)（Grace Murray Hopper Award） 的首位获奖者。1974年获 ACM<ruby>   图灵奖  <rp>  （ </rp> <rt>  A. M. Turing </rt> <rp>  ） </rp></ruby>，1979年获<ruby>   美国国家科学奖章  <rp>  （ </rp> <rt>  National Medal of Science </rt> <rp>  ） </rp></ruby>，1995年获 IEEE <ruby>   约翰·冯·诺依曼奖章  <rp>  （ </rp> <rt>  John von Neumann Medal </rt> <rp>  ） </rp></ruby>。1998年入选<ruby> 计算机历史博物馆 <rp>  （ </rp> <rt>  Computer History Museum </rt> <rp>  ） </rp></ruby><ruby>   名人录  <rp>  （ </rp> <rt>  Hall of Fellows </rt> <rp>  ） </rp></ruby>。

评论：

>
> “... 写的<ruby> 《计算机编程艺术》 <rp>  （ </rp> <rt>  The Art of Computer Programming，TAOCP </rt> <rp>  ） </rp></ruby>可能是有史以来计算机编程方面最大的贡献。”—— [佚名](http://www.quora.com/Who-are-the-best-programmers-in-Silicon-Valley-and-why/answers/3063)
>
>
> “唐·克努斯的 TeX 是我所用过的计算机程序中唯一一个几乎没有 bug 的。真是让人印象深刻！”—— [Jaap Weel](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Jaap-Weel)
>
>
> “如果你要问我的话，我只能说太棒了！” —— [Mitch Rees-Jones](http://qr.ae/RFE94x)
>
>
>

### <ruby> 肯·汤普逊 <rp>  （ </rp> <rt>  Ken Thompson </rt> <rp>  ） </rp></ruby>

*图片来源： [Association for Computing Machinery](http://amturing.acm.org/photo/thompson_4588371.cfm)*

**成就： Unix 之父**

生平：与<ruby>   丹尼斯·里奇  <rp>  （ </rp> <rt>  Dennis Ritchie </rt> <rp>  ） </rp></ruby>共同创造了 Unix。创造了 [B 语言](https://www.bell-labs.com/usr/dmr/www/bintro.html)、[UTF-8 字符编码方案](http://doc.cat-v.org/bell_labs/utf-8_history)、[ed 文本编辑器](http://c2.com/cgi/wiki?EdIsTheStandardTextEditor)，同时也是 Go 语言的共同开发者。（和里奇）共同获得1983年的<ruby>   图灵奖  <rp>  （ </rp> <rt>  A.M. Turing Award </rt> <rp>  ） </rp></ruby>，1994年获<ruby>   IEEE 计算机先驱奖  <rp>  （ </rp> <rt>  IEEE Computer Pioneer Award </rt> <rp>  ） </rp></ruby>，1998年获颁<ruby>   美国国家科技奖章  <rp>  （ </rp> <rt>  National Medal of Technology </rt> <rp>  ） </rp></ruby>。在1997年入选<ruby> 计算机历史博物馆 <rp>  （ </rp> <rt>  Computer History Museum </rt> <rp>  ） </rp></ruby><ruby>   名人录  <rp>  （ </rp> <rt>  Hall of Fellows </rt> <rp>  ） </rp></ruby>。

评论：

>
> “... 可能是有史以来最能成事的程序员了。Unix 内核，Unix 工具，国际象棋程序世界冠军 Belle，Plan 9，Go 语言。” —— [Pete Prokopowicz](http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Pete-Prokopowicz-1)
>
>
> “肯所做出的贡献，据我所知无人能及，是如此的根本、实用、经得住时间的考验，时至今日仍在使用。” —— [Jan Jannink](http://qr.ae/RFEWBY)
>
>
>

### <ruby> 理查德·斯托曼 <rp>  （ </rp> <rt>  Richard Stallman </rt> <rp>  ） </rp></ruby>

*图片来源： [Jiel Beaumadier CC BY-SA 3.0](http://commons.wikimedia.org/wiki/File:Jielbeaumadier_richard_stallman_2010.jpg)*

**成就： Emacs 和 GCC 缔造者**

生平： 成立了<ruby>   GNU 工程  <rp>  （ </rp> <rt>  GNU Project </rt> <rp>  ） </rp></ruby>，并创造了它的许多核心工具，如 [Emacs、GCC、GDB](http://www.emacswiki.org/emacs/RichardStallman) 和 [GNU Make](https://www.gnu.org/gnu/thegnuproject.html)。还创办了<ruby>   自由软件基金会  <rp>  （ </rp> <rt>  Free Software Foundation </rt> <rp>  ） </rp></ruby>。1990年荣获 ACM 的<ruby>   葛丽丝·穆雷·霍普奖  <rp>  （ </rp> <rt>  Grace Murray Hopper Award </rt> <rp>  ） </rp></ruby>，1998年获<ruby>   EFF 先驱奖  <rp>  （ </rp> <rt>  EFF Pioneer Award </rt> <rp>  ） </rp></ruby>.

评论：

>
> “... 在 Symbolics 对阵 LMI 的战斗中，独自一人与一众 Lisp 黑客好手对码。” —— [Srinivasan Krishnan](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Greg-Naughton/comment/4146397)
>
>
> “通过他在编程上的精湛造诣与强大信念，开辟了一整套编程与计算机的亚文化。” —— [Dan Dunay](http://qr.ae/RFEaib)
>
>
> “我可以不赞同这位伟人的很多方面，不必盖棺论定，他不可否认都已经是一位伟大的程序员了。” —— [Marko Poutiainen](http://www.quora.com/Software-Engineering/Who-are-some-of-the-greatest-currently-active-software-architects-in-the-world/answer/Marko-Poutiainen)
>
>
> “试想 Linux 如果没有 GNU 工程的前期工作会怎么样。（多亏了）斯托曼的炸弹！” —— [John Burnette](http://qr.ae/RFEUqp)
>
>
>

### <ruby> 安德斯·海尔斯伯格 <rp>  （ </rp> <rt>  Anders Hejlsberg </rt> <rp>  ） </rp></ruby>

*图片来源： [D.Begley CC BY 2.0](https://www.flickr.com/photos/begley/2979906130)*

**成就： 创造了 Turbo Pascal**

生平： [Turbo Pascal 的原作者](http://www.taoyue.com/tutorials/pascal/history.html)，是最流行的 Pascal 编译器和第一个集成开发环境。而后，[领导了 Turbo Pascal 的继任者 Delphi](http://c2.com/cgi/wiki?AndersHejlsberg) 的构建。[C# 的主要设计师和架构师](http://www.microsoft.com/about/technicalrecognition/anders-hejlsberg.aspx)。2001年荣获<ruby>   Dr. Dobb 的杰出编程奖  <rp>  （ </rp> <rt>  Dr. Dobb's Excellence in Programming Award </rt> <rp>  ） </rp></ruby>。

评论：

>
> “他用汇编语言为当时两个主流的 PC 操作系统（DOS 和 CPM）编写了 [Pascal] 编译器。用它来编译、链接并运行仅需几秒钟而不是几分钟。” —— [Steve Wood](http://qr.ae/RFEZrv)
>
>
> “我佩服他 - 他创造了我最喜欢的开发工具，陪伴着我度过了三个关键的时期直至我成为一位专业的软件工程师。” —— [Stefan Kiryazov](http://www.quora.com/Software-Engineering/Who-are-some-of-the-greatest-currently-active-software-architects-in-the-world/answer/Stefan-Kiryazov)
>
>
>

### Doug Cutting

*图片来源： [vonguard CC BY-SA 2.0](https://www.flickr.com/photos/vonguard/4076389963/)*

**成就： 创造了 Lucene**

生平： [开发了 Lucene 搜索引擎以及 Web 爬虫 Nutch](http://www.wizards-of-os.org/archiv/sprecher/a_c/doug_cutting.html) 和用于大型数据集的分布式处理套件 [Hadoop](http://hadoop.apache.org/)。一位强有力的开源支持者（Lucene、Nutch 以及 Hadoop 都是开源的）。前<ruby>   Apache 软件基金  <rp>  （ </rp> <rt>  Apache Software Foundation </rt> <rp>  ） </rp></ruby>[的理事](https://www.linkedin.com/in/cutting)。

评论：

>
> “...他就是那个既写出了优秀搜索框架（lucene/solr），又为世界开启大数据之门（hadoop）的男人。” —— [Rajesh Rao](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Shalin-Shekhar-Mangar/comment/2293071)
>
>
> “他在 Lucene 和 Hadoop（及其它工程）的创造/工作中为世界创造了巨大的财富和就业...” —— [Amit Nithianandan](http://www.quora.com/Who-are-the-best-programmers-in-Silicon-Valley-and-why/answer/Amit-Nithianandan)
>
>
>

### Sanjay Ghemawat

*图片来源： [Association for Computing Machinery](http://awards.acm.org/award_winners/ghemawat_1482280.cfm)*

**成就： 谷歌核心架构师**

生平： [协助设计和实现了一些谷歌大型分布式系统的功能](http://research.google.com/pubs/SanjayGhemawat.html)，包括 MapReduce、BigTable、Spanner 和<ruby> 谷歌文件系统 <rp>  （ </rp> <rt>  Google File System </rt> <rp>  ） </rp></ruby>。[创造了 Unix 的 ical](http://www.quora.com/Google/Who-is-Sanjay-Ghemawat) 日历系统。2009年入选<ruby>   美国国家工程院  <rp>  （ </rp> <rt>  National Academy of Engineering </rt> <rp>  ） </rp></ruby>。2012年荣获<ruby>   ACM-Infosys 基金计算机科学奖  <rp>  （ </rp> <rt>  ACM-Infosys Foundation Award in the Computing Sciences </rt> <rp>  ） </rp></ruby>。

评论：

>
> “Jeff Dean的僚机。” —— [Ahmet Alp Balkan](http://www.quora.com/Google/Who-is-Sanjay-Ghemawat/answer/Ahmet-Alp-Balkan)
>
>
>

### Jeff Dean

*图片来源： [Google](http://research.google.com/people/jeff/index.html)*

**成就： 谷歌搜索索引背后的大脑**

生平：协助设计和实现了[许多谷歌大型分布式系统的功能](http://research.google.com/people/jeff/index.html)，包括网页爬虫，索引搜索，AdSense，MapReduce，BigTable 和 Spanner。2009年入选<ruby>   美国国家工程院  <rp>  （ </rp> <rt>  National Academy of Engineering </rt> <rp>  ） </rp></ruby>。2012年荣获ACM 的<ruby>   SIGOPS 马克·维瑟奖  <rp>  （ </rp> <rt>  SIGOPS Mark Weiser Award </rt> <rp>  ） </rp></ruby>及<ruby>   ACM-Infosys基金计算机科学奖  <rp>  （ </rp> <rt>  ACM-Infosys Foundation Award in the Computing Sciences </rt> <rp>  ） </rp></ruby>。

评论：

>
> “... 带来了在数据挖掘（GFS、MapReduce、BigTable）上的突破。” —— [Natu Lauchande](http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Natu-Lauchande)
>
>
> “... 设计、构建并部署 MapReduce 和 BigTable，和以及数不清的其它东西” —— [Erik Goldman](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Cosmin-Negruseri/comment/28399)
>
>
>

### <ruby> 林纳斯·托瓦兹 <rp>  （ </rp> <rt>  Linus Torvalds </rt> <rp>  ） </rp></ruby>

*图片来源： [Krd CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:LinuxCon_Europe_Linus_Torvalds_05.jpg)*

**成就： Linux缔造者**

生平：创造了 [Linux 内核](http://www.linuxfoundation.org/about/staff#torvalds)与[开源的版本控制系统 Git](http://git-scm.com/book/en/Getting-Started-A-Short-History-of-Git)。收获了许多奖项和荣誉，包括有1998年的<ruby>   EFF 先驱奖  <rp>  （ </rp> <rt>  EFF Pioneer Award </rt> <rp>  ） </rp></ruby>，2000年荣获<ruby> 英国电脑学会 <rp>  （ </rp> <rt>  British Computer Society </rt> <rp>  ） </rp></ruby>授予的[洛夫莱斯勋章](http://www.bcs.org/content/ConWebDoc/14769)（Lovelace Medal），2012年荣获<ruby>   千禧技术奖  <rp>  （ </rp> <rt>  Millenium Technology Prize </rt> <rp>  ） </rp></ruby>还有2014年<ruby> IEEE计算机学会 <rp>  （ </rp> <rt>  IEEE Computer Society </rt> <rp>  ） </rp></ruby>授予的<ruby>   计算机先驱奖  <rp>  （ </rp> <rt>  Computer Pioneer Award </rt> <rp>  ） </rp></ruby>。同样入选了2008年的<ruby> 计算机历史博物馆 <rp>  （ </rp> <rt>  Computer History Museum </rt> <rp>  ） </rp></ruby><ruby>   名人录  <rp>  （ </rp> <rt>  Hall of Fellows </rt> <rp>  ） </rp></ruby>与2012年的<ruby>   互联网名人堂  <rp>  （ </rp> <rt>  Internet Hall of Fame </rt> <rp>  ） </rp></ruby>。

评论：

>
> “他只用了几年的时间就写出了 Linux 内核，而 GNU Hurd（GNU 开发的内核）历经25年的开发却丝毫没有准备发布的意思。他的成就就是带来了希望。” —— [Erich Ficker](http://qr.ae/RFEeeo)
>
>
> “托沃兹可能是程序员的程序员。” —— [Dan Allen](http://qr.ae/RFEZLk)
>
>
> “他真的很棒。” —— [Alok Tripathy](http://www.quora.com/Software-Engineering/Who-are-some-of-the-greatest-currently-active-software-architects-in-the-world/answer/Alok-Tripathy-1)
>
>
>

### <ruby> 约翰·卡马克 <rp>  （ </rp> <rt>  John Carmack </rt> <rp>  ） </rp></ruby>

*图片来源： [QuakeCon CC BY 2.0](https://www.flickr.com/photos/quakecon/9434713998)*

**成就： 毁灭战士的缔造者**

生平： ID 社联合创始人，打造了<ruby> 德军总部3D <rp>  （ </rp> <rt>  Wolfenstein 3D </rt> <rp>  ） </rp></ruby>、<ruby> 毁灭战士 <rp>  （ </rp> <rt>  Doom </rt> <rp>  ） </rp></ruby>和<ruby> 雷神之锤 <rp>  （ </rp> <rt>  Quake </rt> <rp>  ） </rp></ruby>等所谓的即时 FPS 游戏。引领了<ruby>   切片适配刷新  <rp>  （ </rp> <rt>  adaptive tile refresh </rt> <rp>  ） </rp></ruby>，<ruby>   二叉空间分割  <rp>  （ </rp> <rt>  binary space partitioning </rt> <rp>  ） </rp></ruby>，<ruby> 表面缓存 <rp>  （ </rp> <rt>  surface caching </rt> <rp>  ） </rp></ruby>等开创性的计算机图像技术。2001年入选<ruby>   互动艺术与科学学会名人堂  <rp>  （ </rp> <rt>  Academy of Interactive Arts and Sciences Hall of Fame </rt> <rp>  ） </rp></ruby>，2007年和2008年荣获工程技术类<ruby>   艾美奖  <rp>  （ </rp> <rt>  Emmy awards </rt> <rp>  ） </rp></ruby>并于2010年由<ruby>   游戏开发者甄选奖  <rp>  （ </rp> <rt>  Game Developers Choice Awards </rt> <rp>  ） </rp></ruby>授予终生成就奖。

评论：

>
> “他在写第一个渲染引擎的时候不到20岁。这家伙这是个天才。我若有他四分之一的天赋便心满意足了。” —— [Alex Dolinsky](http://qr.ae/RFEEgr)
>
>
> “... <ruby> 德军总部3D <rp>  （ </rp> <rt>  Wolfenstein 3D </rt> <rp>  ） </rp></ruby>、<ruby> 毁灭战士 <rp>  （ </rp> <rt>  Doom </rt> <rp>  ） </rp></ruby>还有<ruby> 雷神之锤 <rp>  （ </rp> <rt>  Quake </rt> <rp>  ） </rp></ruby>在那时都是革命性的，影响了一代游戏设计师。” —— [dniblock](http://www.itworld.com/answers/topic/software/question/whos-best-living-programmer#comment-424562)
>
>
> “一个周末他几乎可以写出任何东西....” —— [Greg Naughton](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Greg-Naughton)
>
>
> “他是编程界的莫扎特... ” —— [Chris Morris](http://money.cnn.com/2003/08/21/commentary/game_over/column_gaming/)
>
>
>

### <ruby> 法布里斯·贝拉 <rp>  （ </rp> <rt>  Fabrice Bellard </rt> <rp>  ） </rp></ruby>

*图片来源： [Duff](http://dufoli.wordpress.com/2007/06/23/ammmmaaaazing-night/)*

**成就： 创造了 QEMU**

生平： 创造了[一系列耳熟能详的开源软件](http://bellard.org/)，其中包括硬件模拟和虚拟化的平台 QEMU，用于处理多媒体数据的 FFmpeg，<ruby> 微型C编译器 <rp>  （ </rp> <rt>  Tiny C Compiler </rt> <rp>  ） </rp></ruby>和 一个可执行文件压缩软件 LZEXE。2000年和2001年<ruby> C语言混乱代码大赛 <rp>  （ </rp> <rt>  Obfuscated C Code Contest </rt> <rp>  ） </rp></ruby>的[获胜者](http://www.ioccc.org/winners.html#B)并在2011年荣获<ruby>   Google-O'Reilly 开源奖  <rp>  （ </rp> <rt>  Google-O'Reilly Open Source Award </rt> <rp>  ） </rp></ruby>。[计算 Pi 最多位数](http://bellard.org/pi/pi2700e9/)的前世界纪录保持着。

评论：

>
> “我觉得法布里斯·贝拉做的每一件事都是那么显著而又震撼。” —— [raphinou](https://news.ycombinator.com/item?id=7850797)
>
>
> “法布里斯·贝拉是世界上最高产的程序员...” —— [Pavan Yara](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Erik-Frey/comment/1718701)
>
>
> “他就像软件工程界的<ruby> 尼古拉·特斯拉 <rp>  （ </rp> <rt>  Nikola Tesla </rt> <rp>  ） </rp></ruby>。” —— [Michael Valladolid](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Erik-Frey/comment/2454450)
>
>
> “自80年代以来，他一直高产出一系列的成功作品。” —— [Michael Biggins](http://qr.ae/RFEjhZ)
>
>
>

### Jon Skeet

*图片来源： [Craig Murphy CC BY 2.0](https://www.flickr.com/photos/craigmurphy/4325516497)*

**成就： Stack Overflow 的传说级贡献者**

生平： Google 工程师，<ruby>   深入解析C#  <rp>  （ </rp> <rt>  C# in Depth </rt> <rp>  ） </rp></ruby>的作者。保持着[有史以来在 Stack Overflow 上最高的声誉](http://stackexchange.com/leagues/1/alltime/stackoverflow)，平均每月解答390个问题。

评论：

>
> “他根本不需要调试器，只要他盯一下代码，错误之处自会原形毕露。” —— [Steven A. Lowe](http://meta.stackexchange.com/a/9156)
>
>
> “如果他的代码没有通过编译，那编译器应该道歉。” —— [Dan Dyer](http://meta.stackexchange.com/a/9138)
>
>
> “他根本不需要什么编程规范，他的代码就是编程规范。” —— [佚名](http://meta.stackexchange.com/a/9182)
>
>
>

### <ruby> 亚当·安捷罗 <rp>  （ </rp> <rt>  Adam D'Angelo </rt> <rp>  ） </rp></ruby>

*图片来源： [Philip Neustrom CC BY 2.0](https://www.flickr.com/photos/philipn/5326344032)*

**成就： Quora 的创办人之一**

生平： 还是 Facebook 工程师时，[为其搭建了 news feed 功能的基础](http://www.crunchbase.com/person/adam-d-angelo)。直至其离开并联合创始了 Quora，已经成为了 Facebook 的CTO和工程 VP。2001年以高中生的身份在<ruby> 美国计算机奥林匹克 <rp>  （ </rp> <rt>  USA Computing Olympiad </rt> <rp>  ） </rp></ruby>上[第八位完成比赛](http://www.exeter.edu/documents/Exeter_Bulletin/fall_01/oncampus.html)。2004年ACM<ruby> 国际大学生编程大赛 <rp>  （ </rp> <rt>  International Collegiate Programming Contest </rt> <rp>  ） </rp></ruby>[获得银牌的团队](http://icpc.baylor.edu/community/results-2004) -<ruby> 加州理工学院 <rp>  （ </rp> <rt>  California Institute of Technology </rt> <rp>  ） </rp></ruby>的成员。2005年入围 Topcoder 大学生<ruby>   算法编程挑战赛  <rp>  （ </rp> <rt>  Algorithm Coding Competition </rt> <rp>  ） </rp></ruby>。

评论：

>
> “一位程序设计全才。” —— [佚名](http://qr.ae/RFfOfe)
>
>
> "我做的每个好东西，他都已有了六个。" ——<ruby>   马克.扎克伯格  <rp>  （ </rp> <rt>  Mark Zuckerberg </rt> <rp>  ） </rp></ruby>
>
>
>

### Petr Mitrechev

*图片来源： [Facebook](https://www.facebook.com/hackercup/photos/a.329665040399024.91563.133954286636768/553381194694073/?type=1)*

**成就： 有史以来最具竞技能力的程序员之一**

生平： 在<ruby> 国际信息学奥林匹克 <rp>  （ </rp> <rt>  International Olympiad in Informatics </rt> <rp>  ） </rp></ruby>中[两次获得金牌](http://stats.ioinformatics.org/people/1849)（2000，2002）。在2006，[赢得 Google Code Jam](http://googlepress.blogspot.com/2006/10/google-announces-winner-of-global-code_27.html) 同时也是[TopCoder Open 算法大赛冠军](http://community.topcoder.com/tc?module=SimpleStats&c=coder_achievements&d1=statistics&d2=coderAchievements&cr=10574855)。也同样，两次赢得<ruby> Facebook黑客杯 <rp>  （ </rp> <rt>  Facebook Hacker Cup </rt> <rp>  ） </rp></ruby>（[2011](https://www.facebook.com/notes/facebook-hacker-cup/facebook-hacker-cup-finals/208549245827651)，[2013](https://www.facebook.com/hackercup/photos/a.329665040399024.91563.133954286636768/553381194694073/?type=1)）。写这篇文章的时候，[TopCoder 榜中排第二](http://community.topcoder.com/tc?module=AlgoRank) （即：Petr）、在 [Codeforces 榜同样排第二](http://codeforces.com/ratings)。

评论：

>
> “他是竞技程序员的偶像，即使在印度也是如此...” —— [Kavish Dwivedi](http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Venkateswaran-Vicky/comment/1960855)
>
>
>

### Gennady Korotkevich

*图片来源： [Ishandutta2007 CC BY-SA 3.0](http://commons.wikimedia.org/wiki/File:Gennady_Korot.jpg)*

**成就： 竞技编程小神童**

生平： <ruby> 国际信息学奥林匹克 <rp>  （ </rp> <rt>  International Olympiad in Informatics </rt> <rp>  ） </rp></ruby>中最小参赛者（11岁），[6次获得金牌](http://stats.ioinformatics.org/people/804) (2007-2012)。2013年 ACM 国际大学生编程大赛（International Collegiate Programming Contest）[获胜队伍](http://icpc.baylor.edu/regionals/finder/world-finals-2013/standings)成员及2014<ruby>   Facebook 黑客杯  <rp>  （ </rp> <rt>  Facebook Hacker Cup </rt> <rp>  ） </rp></ruby>获胜者。写这篇文章的时候，[Codeforces 榜排名第一](http://codeforces.com/ratings) （即：Tourist）、[TopCoder榜第一](http://community.topcoder.com/tc?module=AlgoRank)。

评论：

>
> “一个编程神童！” —— [Prateek Joshi](http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Prateek-Joshi)
>
>
> “Gennady 真是棒，也是为什么我在白俄罗斯拥有一个强大开发团队的例证。” —— [Chris Howard](http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Prateek-Joshi/comment/4720779)
>
>
> “Tourist 真是天才” —— [Nuka Shrinivas Rao](http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Prateek-Joshi/comment/4880549)
>
>
>

---

via: <http://www.itworld.com/article/2823547/enterprise-software/158256-superclass-14-of-the-world-s-best-living-programmers.html#slide1>

作者：[Phil Johnson](http://www.itworld.com/author/Phil-Johnson/) 译者：[martin2011qi](https://github.com/martin2011qi) 校对：[wxy](https://github.com/wxy)

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


试试咱们“Linux中国”网站文章的“打印”阅读模式

Summary: 这两天我们增加了一点小的体验功能，给网站文章提供了一个新的阅读模式：打印。 当大家使用电脑阅读文章时，往往看到一篇好的文章，想收藏起来，有的同学就会利用手边的打印机打印出来，或者制作成 PDF 文档。但是网页上除了主体内容之外还有侧边栏、菜单、页尾，甚至还有广告这实在太影响心情，处女座的不能忍。 作为具有用户体验洁癖的主页君，早已对此不满，只是一直懒癌发作当然给自己的理由是，太忙了 :O 终于，终于花了不多的时间，搞定了，早知道没这么麻烦不就早弄好了 好了，废话太多了，Follow Me： 在文章的这个地方，你看到了

这个功能不错！

非常赞的功能～

这个是很好的功能@！～

简直不能再赞

还缺一个关闭打印的按钮。

嗯，返回的按钮。谢谢~

非常赞的功能～界面清爽~

暂时只能用浏览器的返回了。

希望包含评论，以及按 ESC 返回普通页面。

很好支持~~~~~~~

按 esc 和弄个关闭按钮返回是个不错的建议，但是评论，似乎不合打印的初始想法？

非常非常棒的改进，好像你是第一个这么做的网站

OK，搞定，右侧顶部有关闭按钮，点击返回完整阅读页面，按下 esc 也可以返回。~

不是不是，不过希望对大家有帮助就好啦~

好人呀，终于不用再往ZIM里复制与粘贴了～

不错，非常干净

呃，火狐浏览器貌似自带了这个功能。。。。。

如果linux.cn有夜间模式就好了

这个。。。也不是不行。。。其实我之前就想过，根据一天的时间来自动调整背景色和文字颜色。

在我的电脑上，打印出来的效果没Edge的阅读模式打印出来的好，但是阅读模式带不上版权信息

差别在什么地方，我没用过 edge，没法体验，你给说说，我看看能不能改进下。

我不知道怎么描述，我等下截个图放网盘里给你看，但是Edge的阅读模式有时候进不去(-_-)

http://pan.baidu.com/s/1c0gCGFY<br />
这是PDF，现在进不去edge的阅读模式了，edge的阅读模式只有之前保存的一篇

感觉diaodiao的

你的意思是，它把背景色、外框都去掉了？

谢谢您的反馈！我现在修改了打印板式，网页显示时如果没有背景色和外框是比较难看的——但是打印时，会忽略背景色和外框，这样看起来还不错。您试试？

应该说只是把正文抓取出来而已，iReader是一个类似的chrome插件

现在看起来好太多了，但是还有一个问题，图片没法调大小，如果图片太大就会跑到下一页，上一页就会有一大片空白

嗯，我也发现这个问题了，暂时不知道该怎么解决。

给每个图片加一个调整按扭好像有点多余，也许只能由浏览器插件来解决了^_^

# 试试咱们“Linux中国”网站文章的“打印”阅读模式

这两天我们增加了一点小的体验功能，给网站文章提供了一个新的阅读模式：**打印**。

当大家使用电脑阅读文章时，往往看到一篇好的文章，想收藏起来，有的同学就会利用手边的打印机打印出来，或者制作成 PDF 文档。但是网页上除了主体内容之外还有侧边栏、菜单、页尾，甚至还有广告——这实在太影响心情，处女座的不能忍。

作为具有用户体验洁癖的主页君，早已对此不满，只是一直懒癌发作——当然给自己的理由是，太忙了 :O

终于，终于花了不多的时间，搞定了，早知道没这么麻烦不就早弄好了……

好了，废话太多了，Follow Me：

在文章的这个地方，你看到了，有个打印机的图标

（写到这里，突然恍然大悟，原来因为主页君刚刚买了一台电脑，没什么可打印的，才有动力做这个打印模式啊！）

点击这个图标，你就会看到干干净净的文章啦——没有广告！ 甚至连顶部菜单、右侧边栏、底部页尾都统统没有！好了，你可以打印了——要是想环保的话，就打印成 PDF 吧。

默认的内容呈现宽度是和原来的内容宽度一样的，当然，如果你有个宽幅面的打印机，那肯定不能让两侧留白这么多。嗯，贴心的主页君自然也不会无视。看这个位置：

点击它，“坐和放宽”，再点即可恢复。对于键盘党来说，肯定这个时候希望有快捷键，那么按下`TAB` 试试吧。

根据网友们的建议，又增加了一个关闭“打印”阅读模式的按钮：

点击右侧顶部这个按钮，即可关闭“打印”阅读模式，返回完整阅读模式。当然，你直接按下`ESC` 按钮也是可以的~谢谢大家的建议。

不过，微信上的朋友们可能不太爽——这没啥差别嘛。因为这主要是给桌面用户用的嘛——当然，万恶的页头页尾和广告，也是统统没有了。怎么样，用手机打印一个试试？

希望我们的点滴进步都能给您带来愉悦，谢谢您一直以来的支持！

马上访问“[Linux 中国](https://linux.cn/)”体验吧！


好奇 Linux？试试云端的 Linux 桌面

国内的朋友想要云端Linux桌面，可以直接来实验楼（shiyanlou.com），可以保存云端环境、支持SSH直连，相当于在云端有一台独享的Linux开发机

这个可以有，我当时用的时候还是不错，只是docker有点问题，不知道现在解决没有，帮你们支持下，我有个师兄还在实验楼做课程

没法直接注册，只能提交申请，然后等着对方审批

之前二个月还在说，能不能有云上的LINUX桌面，没想到这么快就有人提供服务了～

再说一句：有没有云上的妹子呢？

哈哈哈....是不是要二个月之后看结果！

# 好奇 Linux？试试云端的 Linux 桌面

Linux 在桌面操作系统市场上只占据了非常小的份额，从目前的调查结果来看，估计只有2%的市场份额；对比来看，丰富多变的 Windows 系统占据了接近90%的市场份额。对于 Linux 来说，要挑战 Windows 在桌面操作系统市场的垄断，需要有一个让用户学习不同的操作系统的简单方式。如果你相信传统的 Windows 用户会再买一台机器来使用 Linux，那你就太天真了。我们只能去试想用户重新分区，设置引导程序来使用双系统，或者跳过所有步骤回到一个最简单的方法。

我们实验过一系列让用户试操作 Linux 的无风险的使用方法，不涉及任何分区管理，包括 CD/DVD 光盘、USB 存储棒和桌面虚拟化软件等等。通过实验，我强烈推荐使用 VMware 的 VMware Player 或者 Oracle VirtualBox 虚拟机，对于桌面操作系统或者便携式电脑的用户，这是一种安装运行多操作系统的相对简单而且免费的的方法。每一台虚拟机和其他虚拟机相隔离，但是共享 CPU、内存、网络接口等等。虚拟机仍需要一定的资源来安装运行 Linux，也需要一台相当强劲的主机。但对于一个好奇心不大的人，这样做实在是太麻烦了。

要打破用户传统的使用观念是非常困难的。很多 Windows 用户可以尝试使用 Linux 提供的自由软件，但也有太多要学习的 Linux 系统知识。这会花掉他们相当一部分时间才能习惯 Linux 的工作方式。

当然了，对于一个第一次在 Linux 上操作的新手，有没有一个更高效的方法呢？答案是肯定的，接着往下看看云实验平台。

### LabxNow

LabxNow 提供了一个免费服务，方便广大用户通过浏览器来访问远程 Linux 桌面。开发者将其加强为一个用户个人远程实验室（用户可以在系统里运行、开发任何程序），用户可以在任何地方通过互联网登入远程实验室。

这项服务现在可以为个人用户提供2核处理器，4GB RAM和10GB的固态硬盘，运行在128G RAM的4 AMD 6272处理器上。

#### 配置参数:

* 系统镜像：基于 Ubuntu 14.04 的 Xface 4.10，RHEL 6.5，CentOS(Gnome桌面)，Oracle
* 硬件: CPU - 1核或者2核；内存: 512MB, 1GB, 2GB or 4GB
* 超快的网络数据传输
* 可以运行在所有流行的浏览器上
* 可以安装任意程序，可以运行任何程序 – 这是一个非常棒的方法，可以随意做实验学习你想学的任何知识，没有 一点风险
* 添加、删除、管理、制定虚拟机非常方便
* 支持虚拟机共享，远程桌面

你所需要的只是一台有稳定网络的设备。不用担心虚拟专用系统（VPS）、域名、或者硬件带来的高费用。LabxNow提供了一个在 Ubuntu、RHEL 和 CentOS 上实验的非常好的方法。它给 Windows 用户提供一个极好的环境，让他们探索美妙的 Linux 世界。说得深入一点，它可以让用户随时随地在里面工作，而没有了要在每台设备上安装 Linux 的压力。点击下面这个链接进入 [www.labxnow.org/labxweb/](https://www.labxnow.org/labxweb/)。

另外还有一些其它服务（大部分是收费服务）可以让用户使用 Linux，包括 Cloudsigma 环境的7天使用权和Icebergs.io （通过HTML5实现root权限）。但是现在，我推荐 LabxNow。

---

来自: <http://www.linuxlinks.com/article/20151003095334682/LinuxCloud.html>

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

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


Linux 有问必答：如何知道当前正在使用的 shell 是哪个？

Summary: 问题: 我经常在命令行中切换 shell。是否有一个快速简便的方法来找出我当前正在使用的 shell 呢？此外，我怎么能找到当前 shell 的版本？  找到你当前正在使用的 Shell 版本  有多种方式可以查看你目前在使用什么 shell，最简单的方法就是通过使用 shell 的特殊参数。 其一，一个名为 "$$" 的特殊参数 表示当前你正在运行的 shell 实例的 PID。此参数是只读的，不能被修改。所以，下面的命令也将显示你正在运行的 shell 的名字： $ ps -p $$ PID TTY TIME CMD 21666 pts/4 00:00:00 bash  上述命令可在所有可用的 shell 中工作。 如果你不

第一方法中的代码ps-p $$就为ps -p $$，ps与-p之间有空格

有的啊？难道你那边不显示？

你好，请问下这种黑色背景，浅蓝色边框，绿色竖线是用什么工具来做出来的？命令行的编辑工具

就是个 css 而已，可以自行查看 css 源码。

使用哪个shell都差不多, 基本上都兼容. linux使用systemd后, shell编程 基本上就不用了.

linux系统里面 python和perl功能最强大,是实现自动化的关键.

# Linux 有问必答：如何知道当前正在使用的 shell 是哪个？

>
> **问题**: 我经常在命令行中切换 shell。是否有一个快速简便的方法来找出我当前正在使用的 shell 呢？此外，我怎么能找到当前 shell 的版本？
>
>
>

### 找到你当前正在使用的 Shell 版本

有多种方式可以查看你目前在使用什么 shell，最简单的方法就是通过使用 shell 的特殊参数。

其一，[一个名为 "$$" 的特殊参数](http://ask.xmodulo.com/process-id-pid-shell-script.html) 表示当前你正在运行的 shell 实例的 PID。此参数是只读的，不能被修改。所以，下面的命令也将显示你正在运行的 shell 的名字：

```
$ ps -p $$

  PID TTY          TIME CMD
21666 pts/4    00:00:00 bash

```

上述命令可在所有可用的 shell 中工作。

如果你不使用 csh，找到当前使用的 shell 的另外一个办法是使用特殊参数 “$0” ，它表示当前正在运行的 shell 或 shell 脚本的名称。这是 Bash 的一个特殊参数，但也可用在其他 shell 中，如 sh、zsh、tcsh 或 dash。使用 echo 命令可以查看你目前正在使用的 shell 的名称。

```
$ echo $0

bash

```

不要被一个叫做 $SHELL 的单独的环境变量所迷惑，它被设置为你的默认 shell 的完整路径。因此，这个变量并不一定指向你当前使用的 shell。例如，即使你在终端中调用不同的 shell，$SHELL 也保持不变。

```
$ echo $SHELL

/bin/shell

```

因此，找出当前的shell，你应该使用 $$ 或 $0，但不是 $SHELL。

### 找出当前 Shell 的版本

一旦你知道你使用的是哪个 shell，你可能想知道此 shell 的版本。为此，在命令行中输入 shell 并在后面加上 “--version” 参数可以查看版本信息。例如：

**对于** bash **shell** :

```
$ bash --version

GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

```

**对于** zsh **shell**:

```
$ zsh --version

zsh 5.0.7 (x86_64-pc-linux-gnu)

```

**对于** tcsh **shell**: $ tcsh --version

```
tcsh 6.18.01 (Astron) 2012-02-14 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,nd,color,filec

```

对于某些 shell，你还可以使用 shell 特定的变量（例如，$BASH*VERSION 或 $ZSH*VERSION）。

```
$ echo $BASH_VERSION

4.3.8(1)-release

```

---

via: <http://ask.xmodulo.com/which-shell-am-i-using.html>

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

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


用浏览器管理 Docker

# 用浏览器管理 Docker

Docker 越来越流行了。在一个容器里面而不是虚拟机里运行一个完整的操作系统是一种非常棒的技术和想法。docker 已经通过节省工作时间来拯救了成千上万的系统管理员和开发人员。这是一个开源技术，提供一个平台来把应用程序当作容器来打包、分发、共享和运行，而不用关注主机上运行的操作系统是什么。它没有开发语言、框架或打包系统的限制，并且可以在任何时间、任何地点运行，从小型计算机到高端服务器都可以。

运行 docker 容器和管理它们可能会花费一点点努力和时间，所以现在有一款基于 web 的应用程序－DockerUI，可以让管理和运行容器变得很简单。DockerUI 是一个对那些不熟悉 Linux 命令行，但又很想运行容器化程序的人很有帮助的工具。DockerUI 是一个开源的基于 web 的应用程序，它最值得称道的是它华丽的设计和用来运行和管理 docker 的简洁的操作界面。

下面会介绍如何在 Linux 上安装配置 DockerUI。

### 1. 安装 docker

首先，我们需要安装 docker。我们得感谢 docker 的开发者，让我们可以简单的在主流 linux 发行版上安装 docker。为了安装 docker，我们得在对应的发行版上使用下面的命令。

#### Ubuntu/Fedora/CentOS/RHEL/Debian

docker 维护者已经写了一个非常棒的脚本，用它可以在 Ubuntu 15.04/14.10/14.04、 CentOS 6.x/7、 Fedora 22、 RHEL 7 和 Debian 8.x 这几个 linux 发行版上安装 docker。这个脚本可以识别出我们的机器上运行的 linux 的发行版本，然后将需要的源库添加到文件系统、并更新本地的安装源目录，最后安装 docker 及其依赖库。要使用这个脚本安装docker，我们需要在 root 用户或者 sudo 权限下运行如下的命令，

```
# curl -sSL https://get.docker.com/ | sh

```

#### OpenSuse/SUSE Linux 企业版

要在运行了 OpenSuse 13.1/13.2 或者 SUSE Linux Enterprise Server 12 的机器上安装 docker，我们只需要简单的执行zypper 命令。运行下面的命令就可以安装最新版本的docker：

```
# zypper in docker

```

#### ArchLinux

docker 在 ArchLinux 的官方源和社区维护的 AUR 库中可以找到。所以在 ArchLinux 上我们有两种方式来安装 docker。使用官方源安装，需要执行下面的 pacman 命令：

```
# pacman -S docker

```

如果要从社区源 AUR 安装 docker，需要执行下面的命令：

```
# yaourt -S docker-git

```

### 2. 启动

安装好 docker 之后，我们需要运行 docker 守护进程，然后才能运行并管理 docker 容器。我们需要使用下列命令来确认 docker 守护进程已经安装并运行了。

#### 在 SysVinit 上

```
# service docker start

```

#### 在Systemd 上

```
# systemctl start docker

```

### 3. 安装 DockerUI

安装 DockerUI 比安装 docker 要简单很多。我们仅仅需要从 docker 注册库上拉取 dockerui ，然后在容器里面运行。要完成这些，我们只需要简单的执行下面的命令：

```
# docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui

```

在上面的命令里，dockerui 使用的默认端口是9000，我们需要使用`-p` 命令映射默认端口。使用`-v` 标志我们可以指定docker 的 socket。如果主机使用了 SELinux 那么就得使用`--privileged` 标志。

执行完上面的命令后，我们要检查 DockerUI 容器是否运行了，或者使用下面的命令检查：

```
# docker ps

```

### 4. 拉取 docker 镜像

现在我们还不能直接使用 DockerUI 拉取镜像，所以我们需要在命令行下拉取 docker 镜像。要完成这些我们需要执行下面的命令。

```
# docker pull ubuntu

```

上面的命令将会从 docker 官方源 [Docker Hub](https://hub.docker.com/)拉取一个标志为 ubuntu 的镜像。类似的我们可以从 Hub 拉取需要的其它镜像。

### 4. 管理

启动了 DockerUI 容器之后，我们可以用它来执行启动、暂停、终止、删除以及 DockerUI 提供的其它操作 docker 容器的命令。

首先，我们需要在 web 浏览器里面打开 dockerui：在浏览器里面输入 http://ip-address:9000 或者 [http://mydomain.com:9000，具体要根据你的系统配置。默认情况下登录不需要认证，但是可以配置我们的](http://mydomain.com:9000%EF%BC%8C%E5%85%B7%E4%BD%93%E8%A6%81%E6%A0%B9%E6%8D%AE%E4%BD%A0%E7%9A%84%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E3%80%82%E9%BB%98%E8%AE%A4%E6%83%85%E5%86%B5%E4%B8%8B%E7%99%BB%E5%BD%95%E4%B8%8D%E9%9C%80%E8%A6%81%E8%AE%A4%E8%AF%81%EF%BC%8C%E4%BD%86%E6%98%AF%E5%8F%AF%E4%BB%A5%E9%85%8D%E7%BD%AE%E6%88%91%E4%BB%AC%E7%9A%84) web 服务器来要求登录认证。要启动一个容器，我们需要有包含我们要运行的程序的镜像。

#### 创建

创建容器我们需要在 Images 页面里，点击我们想创建的容器的镜像 id。然后点击 `Create` 按钮，接下来我们就会被要求输入创建容器所需要的属性。这些都完成之后，我们需要点击按钮`Create` 完成最终的创建。

#### 停止

要停止一个容器，我们只需要跳转到`Containers` 页面，然后选取要停止的容器。然后在 Action 的子菜单里面按下 Stop 就行了。

#### 暂停与恢复

要暂停一个容器，只需要简单的选取目标容器，然后点击 Pause 就行了。恢复一个容器只需要在 Actions 的子菜单里面点击 Unpause 就行了。

#### 删除

类似于我们上面完成的任务，杀掉或者删除一个容器或镜像也是很简单的。只需要检查、选择容器或镜像，然后点击 Kill 或者 Remove 就行了。

### 结论

DockerUI 使用了 docker 远程 API 提供了一个很棒的管理 docker 容器的 web 界面。它的开发者们完全使用 HTML 和 JS 设计、开发了这个应用。目前这个程序还处于开发中，并且还有大量的工作要完成，所以我们并不推荐将它应用在生产环境。它可以帮助用户简单的完成管理容器和镜像，而且只需要一点点工作。如果想要为 DockerUI 做贡献，可以访问它们的 [Github 仓库](https://github.com/crosbymichael/dockerui/)。如果有问题、建议、反馈，请写在下面的评论框，这样我们就可以修改或者更新我们的内容。谢谢。

---

via: <http://linoxide.com/linux-how-to/setup-dockerui-web-interface-docker/>

作者：[Arun Pyasi](http://linoxide.com/author/arunp/) 译者：[oska874](https://github.com/oska874) 校对：[wxy](https://github.com/wxy)

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


在 Ubuntu 15.10 上安装 Intel Graphics 安装器

Summary: Intel 最近发布了一个新版本的 Linux Graphics 安装器。在新版本中，将不支持 Ubuntu 15.04，而必须用 Ubuntu 15.10 Wily。  Linux 版 Intel Graphics 安装器可以让你很容易的为你的 Intel Graphics 硬件安装最新版的图形与视频驱动。它能保证你一直使用最新的增强与优化功能，并能够安装到 Intel Graphics Stack 中，来保证你在你的 Intel 图形硬件下，享受到最佳的用户体验。现在 Linux 版的 Intel Graphics 安装器支持最新版的 Ubuntu。   安装 1. 从这个链接页面中下载该安装器。当前支持 Ubuntu 15.10 的版本是1.2.1版。你可以在系统

成功了，非常感谢!

# 在 Ubuntu 15.10 上安装 Intel Graphics 安装器

Intel 最近发布了一个新版本的 Linux Graphics 安装器。在新版本中，将不支持 Ubuntu 15.04，而必须用 Ubuntu 15.10 Wily。

>
> Linux 版 Intel® Graphics 安装器可以让你很容易的为你的 Intel Graphics 硬件安装最新版的图形与视频驱动。它能保证你一直使用最新的增强与优化功能，并能够安装到 Intel Graphics Stack 中，来保证你在你的 Intel 图形硬件下，享受到最佳的用户体验。*现在 Linux 版的 Intel® Graphics 安装器支持最新版的 Ubuntu。*
>
>
>

### 安装

**1.** 从[这个链接页面](https://01.org/linuxgraphics/downloads)中下载该安装器。当前支持 Ubuntu 15.10 的版本是1.2.1版。你可以在**系统设置 -> 详细信息**中检查你的操作系统（32位或64位）的类型。

**2.** 一旦下载完成，到下载目录中点击 .deb 安装包，用 Ubuntu 软件中心打开它，然最后点击“安装”按钮。

**3.** 为了让系统信任 Intel Graphics 安装器，你需要通过下面的命令来为它添加密钥。

用快捷键`Ctrl+Alt+T`或者在 Unity Dash 中的“应用程序启动器”中打开终端。依次粘贴运行下面的命令。

```
wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | sudo apt-key add -

wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg-2 -O - | sudo apt-key add -

```

注意：在运行第一个命令的过程中，如果密钥下载完成后，光标停住不动并且一直闪烁的话，就像上面图片显示的那样，输入你的密码（输入时不会看到什么有变化）然后回车就行了。

最后通过 Unity Dash 或应用程序启动器打开 Intel Graphics 安装器。

---

via: <http://ubuntuhandbook.org/index.php/2015/11/install-intel-graphics-installer-in-ubuntu-15-10/>

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

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


Summary: NVIDIA 358.16  NVIDIA 358 系列的第一个稳定版本已经发布，并对 358.09 中（测试版）做了一些修正，以及一些小的改进。 NVIDIA 358 增加了一个新的 nvidia-modeset.ko 内核模块，可以配合 nvidia.ko 内核模块工作来调用 GPU 显示引擎。在以后发布版本中，nvidia-modeset.ko 内核驱动程序将被用于模式设置接口的基础，该接口由内核的直接渲染管理器（DRM）所提供。 新的驱动程序也有新的 GLX 协议扩展，以及在 OpenGL 驱动中分配大量内存的系统内存分配新机制。新的 GPU GeForce 805A 和 GeForce GTX 960A 都支持。NVIDIA 358.16 也支持 X

转A之后，直接用开源驱动，再也没有这些烦恼了……

学习学习

看看学习学习

nvidia的驱动不支持Wayland, 只有X驱动. linux未来是要用wayland取代X的. X的代码很老旧, 现在液晶显示, 那些老旧代码过时,导致显示速度. 或者X需要重新规划精简代码. 否则会被淘汰. nvidia这个华人公司显卡做的不错,但是拒绝驱动. 被linus sniffed! 三大显卡中只有intel开源驱动最好,但集成显卡性能很差.

试了，不行……装完之后系统卡死，自动注销后输密码无法进入桌面，只能卸载

so bad!!!!

# 如何在 Ubuntu 15.10，14.04 中安装 NVIDIA 358.16 驱动程序

[NVIDIA 358.16](http://www.nvidia.com/Download/driverResults.aspx/95921/en-us) —— NVIDIA 358 系列的第一个稳定版本已经发布，并对 358.09 中（测试版）做了一些修正，以及一些小的改进。

NVIDIA 358 增加了一个新的 **nvidia-modeset.ko** 内核模块，可以配合 nvidia.ko 内核模块工作来调用 GPU 显示引擎。在以后发布版本中，**nvidia-modeset.ko** 内核驱动程序将被用于模式设置接口的基础，该接口由内核的直接渲染管理器（DRM）所提供。

新的驱动程序也有新的 GLX 协议扩展，以及在 OpenGL 驱动中分配大量内存的系统内存分配新机制。新的 GPU **GeForce 805A** 和 **GeForce GTX 960A** 都支持。NVIDIA 358.16 也支持 X.Org 1.18 服务器和 OpenGL 4.3。

### 如何在 Ubuntu 中安装 NVIDIA 358.16 :

>
> **请不要在生产设备上安装，除非你知道自己在做什么以及如何才能恢复。**
>
>
>

对于官方的二进制文件，请到 [nvidia.com/object/unix.html](http://www.nvidia.com/Download/driverResults.aspx/95921/en-us) 查看。

对于那些喜欢 Ubuntu PPA 的，我建议你使用 [显卡驱动 PPA](http://www.nvidia.com/object/unix.html)。到目前为止，支持 Ubuntu 16.04, Ubuntu 15.10, Ubuntu 15.04, Ubuntu 14.04。

**1. 添加 PPA.**

通过按 `Ctrl+Alt+T` 快捷键来从 Unity 桌面打开终端。当打启动应用后，粘贴下面的命令并按回车键：

```
sudo add-apt-repository ppa:graphics-drivers/ppa

```

它会要求你输入密码。输入密码后，密码不会显示在屏幕上，按 Enter 继续。

**2. 刷新并安装新的驱动程序**

添加 PPA 后，逐一运行下面的命令刷新软件库并安装新的驱动程序：

```
sudo apt-get update

sudo apt-get install nvidia-358 nvidia-settings

```

### (如果需要的话，) 卸载:

开机从 GRUB 菜单进入恢复模式，进入根控制台。然后逐一运行下面的命令：

重新挂载文件系统为可写：

```
mount -o remount,rw /

```

删除所有的 nvidia 包：

```
apt-get purge nvidia*

```

最后返回菜单并重新启动：

```
reboot

```

要禁用/删除显卡驱动 PPA，点击系统设置下的**软件和更新**，然后导航到**其他软件**标签。

---

via: <http://ubuntuhandbook.org/index.php/2015/11/install-nvidia-358-16-driver-ubuntu-15-10/>

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

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


如何在 Linux 终端下创建新的文件系统/分区

Summary: 在 Linux 中创建分区或新的文件系统通常意味着一件事：安装 Gnome Parted 分区编辑器（GParted）。对于大多数 Linux 用户而言，这是唯一的办法。不过，你是否考虑过在终端创建这些分区和文件系统？当然可以！以下就是方法！ 使用 CFdisk 创建一个基本的 Linux 分区 以下是如何在命令行中创建一个基本的 Linux 分区的正确方案。要做的第一件事就是先打开你的终端。若你已打开，你需要找到你想要创建分区的磁盘。这可以使用一个简单的命令来找到。 lsblk   当你运行了 lsblk，你应该会看到当前系统上每个磁盘的详细列表。看看这个列表，然后

不是还有 parted 吗？

fdisk gdisk …

是的，很有意思

使用linux系统的人, 这个是最简单的啦.

不错

# 如何在 Linux 终端下创建新的文件系统/分区

在 Linux 中创建分区或新的文件系统通常意味着一件事：安装 Gnome Parted 分区编辑器（GParted）。对于大多数 Linux 用户而言，这是唯一的办法。不过，你是否考虑过在终端创建这些分区和文件系统？当然可以！以下就是方法！

### 使用 CFdisk 创建一个基本的 Linux 分区

以下是如何在命令行中创建一个基本的 Linux 分区的正确方案。要做的第一件事就是先打开你的终端。若你已打开，你需要找到你想要创建分区的磁盘。这可以使用一个简单的命令来找到。

```
lsblk

```

当你运行了 `lsblk`，你应该会看到当前系统上每个磁盘的详细列表。看看这个列表，然后找出你想要使用的磁盘。在本文中，我将使用 `sdb` 来进行演示。

在终端输入这个命令。它会显示一个功能强大的基于终端的分区编辑程序。

```
sudo cfdisk /dev/sdb

```

**注意**: 使用在 `lsblk` 命令输出的你想要使用的磁盘来替换 `sdb`。

当输入此命令后，你将进入分区编辑器中，然后访问你想改变的磁盘。

由于磁盘分区的不同，这取决于用户的需求，这部分的指南将在 **如何建立一个分离的 Linux home/root 分区布局**。

首先，需要创建根分区。这需要根据磁盘的字节数来进行分割。我测试的磁盘是 32 GB。

在 CFdisk 中使用键盘上的方向键选择需要分配的空间。你找到后，请使用箭头键选择 [ NEW ]，然后按 Enter 键。

该程序会要求你输入分区大小。一旦你指定好大小后，按 Enter 键。这将被称为根分区（或 /dev/sdb1）。

接下来该创建 home 分区（/dev/sdb2）了。你需要在 CFdisk 中再选择一些空闲分区。使用箭头选择 [ NEW ] 选项，然后按 Enter 键。输入你的 home 分区的大小，然后按 Enter 键来创建它。

最后，需要创建交换分区。像前两次一样，先找一些空闲分区，并使用箭头选择 [ NEW ] 选项。之后，算下你 Linux 想使用多大的交换分区。

**注意**: 交换分区通常和计算机的内存差不多大。

现在，创建了交换分区，该指定其类型。使用上下箭头来选择它。之后，使用左右箭头选择 [ TYPE ] 。找到 Linux swap 选项，然后按 Enter 键。

所有分区创建后。然后就是将其写入到磁盘。使用右箭头键，选择 [ WRITE ] 选项，然后按 Enter 键。这将直接将新创建的分布写入到磁盘中。

### 使用 mkfs 创建文件系统

有时候，你并不需要一个整个重新分区，你只想要创建一个文件系统而已。你可以在终端直接使用 `mkfs` 命令来实现。

首先，找出你要使用的磁盘。在终端输入 `lsblk` 找出来。它会打印出列表，之后只要找到你想创建文件系统的分区或盘符。

在这个例子中，我将使用第二个硬盘的 `/dev/sdb1` 作为第一个分区。可以对 `/dev/sdb` 使用 mkfs（这将会使用整个分区）。

要在一个特定的分区上创建新文件系统，只需输入

```
sudo mkfs.ext4 /dev/sdb1

```

在终端。应当指出的是，`mkfs.ext4` 可以换成任何你想要使用的的文件系统。

### 结论

虽然使用图形工具编辑文件系统和分区更容易，但终端可以说是更有效的。终端的加载速度更快，点击几个按钮即可。GParted 和其它工具一样，它也是一个完整的工具。我希望在本教程的帮助下，你会明白如何在终端中高效的编辑文件系统。

你是否更喜欢使用基于终端的方法在 Linux 上编辑分区？不管是不是，请在下面告诉我们。

---

via: <https://www.maketecheasier.com/create-file-systems-partitions-terminal-linux/>

作者：[Derrik Diener](https://www.maketecheasier.com/author/derrikdiener/) 译者：[strugglingyouth](https://github.com/strugglingyouth) 校对：[wxy](https://github.com/wxy)

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


UNIX 家族小史

Summary: 要记住，当一扇门在你面前关闭的时候，另一扇门就会打开。肯汤普森（Ken Thompson）和丹尼斯里奇（Dennis Richie）两个人就是这句名言很好的实例。他们俩是20世纪最优秀的信息技术专家之二，因为他们创造了最具影响力和创新性的软件之一： UNIX。  （题图来自：wikimedia.org，CC BY-SA 3.0） UNIX 系统诞生于贝尔实验室 UNIX 最开始的名字是 UNICS (UNiplexed Information and Computing Service)，它有一个大家庭，并不是从石头缝里蹦出来的。UNIX的祖父是 CTSS (Compatible Time Sharing System)，它的父亲是 Multics (MULTiplexed Inf

"并且使用了阻止商业发行的授权" ——描述不准确。

来自广东深圳的 IE Mobile 11.0|Windows Phone 8.1 用户

原文是“and under a license which prohibited commercial distribution” ，您觉得怎么翻译比较合适？

# UNIX 家族小史

要记住，当一扇门在你面前关闭的时候，另一扇门就会打开。<ruby>   肯·汤普森  <rp>  （ </rp> <rt>  Ken Thompson </rt> <rp>  ） </rp></ruby> 和<ruby>   丹尼斯·里奇  <rp>  （ </rp> <rt>  Dennis Richie </rt> <rp>  ） </rp></ruby>两个人就是这句名言很好的实例。他们俩是**20世纪**最优秀的信息技术专家之二，因为他们创造了最具影响力和创新性的软件之一： **UNIX**。

（题图来自：[wikimedia.org](https://commons.wikimedia.org/wiki/File:Actual_DEC_UNIX_License_Plate_DSC_0317.jpg)，CC BY-SA 3.0）

### UNIX 系统诞生于贝尔实验室

**UNIX** 最开始的名字是 **UNICS** (**UN**iplexed **I**nformation and **C**omputing **S**ervice)，它有一个大家庭，并不是从石头缝里蹦出来的。UNIX的祖父是 **CTSS** (**C**ompatible **T**ime **S**haring **S**ystem)，它的父亲是 **Multics** (**MULT**iplexed **I**nformation and **C**omputing **S**ervice)，这个系统能支持大量用户通过交互式<ruby> 分时 <rp>  （ </rp> <rt>  timesharing </rt> <rp>  ） </rp></ruby>的方式使用大型机。

UNIX 诞生于 **1969** 年，由**肯·汤普森**以及后来加入的**丹尼斯·里奇**共同完成。这两位优秀的研究员和科学家在一个**通用电器 GE**和**麻省理工学院**的合作项目里工作，项目目标是开发一个叫 Multics 的交互式分时系统。

Multics 的目标是整合分时技术以及当时其他先进技术，允许用户在远程终端通过电话（拨号）登录到主机，然后可以编辑文档，阅读电子邮件，运行计算器，等等。

在之后的五年里，AT&T 公司为 Multics 项目投入了数百万美元。他们购买了 GE-645 大型机，聚集了贝尔实验室的顶级研究人员，例如肯·汤普森、 Stuart Feldman、丹尼斯·里奇、<ruby> 道格拉斯·麦克罗伊 <rp>  （ </rp> <rt>  M. Douglas McIlroy </rt> <rp>  ） </rp></ruby>、 Joseph F. Ossanna 以及 Robert Morris。但是项目目标太过激进，进度严重滞后。最后，AT&T 高层决定放弃这个项目。

贝尔实验室的管理层决定停止这个让许多研究人员无比纠结的操作系统上的所有遗留工作。不过要感谢汤普森，里奇和一些其他研究员，他们把老板的命令丢到一边，并继续在实验室里满怀热心地忘我工作，最终孵化出前无古人后无来者的 UNIX。

UNIX 的第一声啼哭是在一台 PDP-7 微型机上，它是汤普森测试自己在操作系统设计上的点子的机器，也是汤普森和 里奇一起玩 Space and Travel 游戏的模拟器。

>
> “我们想要的不仅是一个优秀的编程环境，而是能围绕这个系统形成团体。按我们自己的经验，通过远程访问和分时主机实现的公共计算，本质上不只是用终端输入程序代替打孔机而已，而是鼓励密切沟通。”丹尼斯·里奇说。
>
>
>

UNIX 是第一个靠近理想的系统，在这里程序员可以坐在机器前自由摆弄程序，探索各种可能性并随手测试。在 UNIX 整个生命周期里，它吸引了大量因其他操作系统限制而投身过来的高手做出无私贡献，因此它的功能模型一直保持上升趋势。

UNIX 在 1970 年因为 PDP-11/20 获得了首次资金注入，之后正式更名为 UNIX 并支持在 PDP-11/20 上运行。UNIX 带来的第一次用于实际场景中是在 1971 年，贝尔实验室的专利部门配备来做文字处理。

### UNIX 上的 C 语言革命

丹尼斯·里奇在 1972 年发明了一种叫 “**C**” 的高级编程语言 ，之后他和肯·汤普森决定用 “C” 重写 UNIX 系统，来支持更好的移植性。他们在那一年里编写和调试了差不多 100,000 行代码。在迁移到 “C” 语言后，系统可移植性非常好，只需要修改一小部分机器相关的代码就可以将 UNIX 移植到其他计算机平台上。

UNIX 第一次公开露面是 1973 年丹尼斯·里奇和肯·汤普森在<ruby> 操作系统原理 <rp>  （ </rp> <rt>  Operating Systems Principles </rt> <rp>  ） </rp></ruby>上发表的一篇论文，然后 AT&T 发布了 UNIX 系统第 5 版，并授权给教育机构使用，之后在 1975 年第一次以 **$20.000** 的价格授权企业使用 UNIX 第 6 版。应用最广泛的是 1980 年发布的 UNIX 第 7 版，任何人都可以购买授权，只是授权条款非常严格。授权内容包括源代码，以及用 PDP-11 汇编语言写的及其相关内核。反正，各种版本 UNIX 系统完全由它的用户手册确定。

### UNIX 分支演化

（来自 wikipedia.org，CC BY-SA 3.0）

### AIX 系统

在 **1983** 年，**微软**计划开发 **Xenix** 作为 MS-DOS 的多用户版继任者，他们在那一年花了 $8,000 搭建了一台拥有 **512 KB** 内存以及 **10 MB**硬盘并运行 Xenix 的 Altos 586。而到 1984 年为止，全世界 UNIX System V 第二版的安装数量已经超过了 100,000 。在 1986 年发布了包含因特网域名服务的 4.3BSD，而且 **IBM** 宣布 **AIX 系统**的安装数已经超过 250,000。AIX 基于 Unix System V 开发，这套系统拥有 BSD 风格的根文件系统，是两者的结合。

AIX 第一次引入了 **日志文件系统 (JFS)** 以及集成LVM（<ruby> 逻辑卷管理器 <rp>  （ </rp> <rt>  Logical Volume Manager </rt> <rp>  ） </rp></ruby>）。IBM 在 1989 年将 AIX 移植到自己的 RS/6000 平台。2001 年发布的 5L 版是一个突破性的版本，提供了 Linux 友好性以及支持 Power4 服务器的逻辑分区。

在 2004 年发布的 AIX 5.3 引入了支持APV（<ruby> 高级电源虚拟化 <rp>  （ </rp> <rt>  Advanced Power Virtualization </rt> <rp>  ） </rp></ruby>）的虚拟化技术，支持对称多线程、微分区，以及共享处理器池。

在 2007 年，IBM 同时发布 AIX 6.1 和 Power6 架构，开始加强自己的虚拟化产品。他们还将高级电源虚拟化重新包装成 PowerVM。

这次改进包括被称为 WPARs 的负载分区形式，类似于 Solaris 的 zones/Containers，但是功能更强。

### HP-UX 系统

**HP-UX**（<ruby> 惠普 UNIX <rp>  （ </rp> <rt>  Hewlett-Packard’s UNIX </rt> <rp>  ） </rp></ruby>) 源于 System V 第 3 版。这套系统一开始只支持 PA-RISC HP 9000 平台。HP-UX 第 1 版发布于 1984 年。

HP-UX 第 9 版引入了 SAM，一个基于字符的图形用户界面 (GUI)，用户可以用来管理整个系统。在 1995 年发布的第 10 版，调整了系统文件分布以及目录结构，变得有点类似 AT&T SVR4。

第 11 版发布于 1997 年。这是 HP 第一个支持 64 位寻址的版本。不过在 2000 年重新发布成 11i，因为 HP 为特定的信息技术用途，引入了<ruby> 操作环境 <rp>  （ </rp> <rt>  operating environments </rt> <rp>  ） </rp></ruby>和<ruby> 分级应用 <rp>  （ </rp> <rt>  layered applications </rt> <rp>  ） </rp></ruby>的<ruby> 捆绑组 <rp>  （ </rp> <rt>  bundled groups </rt> <rp>  ） </rp></ruby>。

在 2001 年发布的 11.20 版宣称支持<ruby> 安腾 <rp>  （ </rp> <rt>  Itanium </rt> <rp>  ） </rp></ruby>系统。HP-UX 是第一个使用 ACLs（<ruby> 访问控制列表 <rp>  （ </rp> <rt>  Access Control Lists </rt> <rp>  ） </rp></ruby>）管理文件权限的 UNIX 系统，也是首先支持内建<ruby> 逻辑卷管理器 <rp>  （ </rp> <rt>  Logical Volume Manager </rt> <rp>  ） </rp></ruby>的系统之一。

如今，HP-UX 因为 HP 和 Veritas 的合作关系使用了 Veritas 作为主文件系统。

HP-UX 目前的最新版本是 11iv3, update 4。

### Solaris 系统

Sun 的 UNIX 版本是 **Solaris**，用来接替 1992 年创建的 **SunOS**。SunOS 一开始基于 BSD（<ruby> 伯克利软件发行版 <rp>  （ </rp> <rt>  Berkeley Software Distribution </rt> <rp>  ） </rp></ruby>）风格的 UNIX，但是 SunOS 5.0 版以及之后的版本都是基于重新包装为 Solaris 的 Unix System V 第 4 版。

SunOS 1.0 版于 1983 年发布，用于支持 Sun-1 和 Sun-2 平台。随后在 1985 年发布了 2.0 版。在 1987 年，Sun 和 AT&T 宣布合作一个项目以 SVR4 为基础将 System V 和 BSD 合并成一个版本。

Solaris 2.4 是 Sun 发布的第一个 Sparc/x86 版本。1994 年 11 月份发布的 SunOS 4.1.4 版是最后一个版本。Solaris 7 是首个 64 位 Ultra Sparc 版本，加入了对文件系统元数据记录的原生支持。

Solaris 9 发布于 2002 年，支持 Linux 特性以及 <ruby> Solaris 卷管理器 <rp>  （ </rp> <rt>  Solaris Volume Manager </rt> <rp>  ） </rp></ruby>。之后，2005 年发布了 Solaris 10，带来许多创新，比如支持 Solaris Containers，新的 ZFS 文件系统，以及<ruby> 逻辑域 <rp>  （ </rp> <rt>  Logical Domains </rt> <rp>  ） </rp></ruby>。

目前 Solaris 最新的版本是 第 10 版，最后的更新发布于 2008 年。 （LCTT 译注：据微信网友 @atoningfang涛 指出，[Solaris 11.3](https://en.wikipedia.org/wiki/Solaris_(operating_system)#Version_history) 才是当前最新版本，发布于 2015/8/26。）

### Linux

到了 1991 年，用来替代商业操作系统的<ruby> 自由 <rp>  （ </rp> <rt>  free </rt> <rp>  ） </rp></ruby>操作系统的需求日渐高涨。因此，**Linus Torvalds** 开始构建一个自由的操作系统，最终成为 **Linux**。Linux 最开始只有一些 “C” 文件，并且使用了阻止商业发行的授权。Linux 是一个类 UNIX 系统但又不尽相同。

2015 年发布了基于 GNU Public License （GPL）授权的 3.18 版。IBM 声称有超过 1800 万行开源代码开源给开发者。

如今 GNU Public License 是应用最广泛的自由软件授权方式。根据开源软件原则，这份授权允许个人和企业自由分发、运行、通过拷贝共享、学习，以及修改软件源码。

### UNIX vs. Linux：技术概要

* Linux 鼓励多样性，Linux 的开发人员来自各种背景，有更多不同经验和意见。
* Linux 比 UNIX 支持更多的平台和架构。
* UNIX 商业版本的开发人员针对特定目标平台以及用户设计他们的操作系统。
* **Linux 比 UNIX 有更好的安全性**，更少受病毒或恶意软件攻击。截止到现在，Linux 上大约有 60-100 种病毒，但是没有任何一种还在传播。另一方面，UNIX 上大约有 85-120 种病毒，但是其中有一些还在传播中。
* 由于 UNIX 命令、工具和元素很少改变，甚至很多接口和命令行参数在后续 UNIX 版本中一直沿用。
* 有些 Linux 开发项目以自愿为基础进行资助，比如 Debian。其他项目会维护一个和商业 Linux 的社区版，比如 SUSE 的 openSUSE 以及红帽的 Fedora。
* 传统 UNIX 是纵向扩展，而另一方面 Linux 是横向扩展。

---

via: <http://www.unixmen.com/brief-history-aix-hp-ux-solaris-bsd-linux/>

作者：[M.el Khamlichi](http://www.unixmen.com/author/pirat9/) 译者：[zpl1025](https://github.com/zpl1025) 校对：[Caroline](https://github.com/carolinewuyan)

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


每个 HTTP/2 连接会发送一条隐藏的秘密信息！

Summary: 如果你监听过 HTTP/2 连接的建立过程，你也许会注意到在每个连接建立时都会发送一条这样的报文。如下：  即以下文本： PRI * HTTP2.0 SM  如果将 HTTP2.0 以及换行从其中去掉，那么我们就得到了PRISM！这是什么？是斯诺登所揭露的 NSA 的棱镜计划！只要是 HTTP/2.0 连接，都会在一开头就发送这样的报文。 是你的 HTTP/2.0 连接被 NSA 监控了么？不是！这条消息代表了你的服务器真正支持了 HTTP/2.0，它是一个用于识别的魔法字符串。 它在 RFC7540Section 3.5中描述如下：  在 HTTP/2 中，每个端点都需要发送一个连接引语作为所用协议

哈哈

黑得漂亮！

# 每个 HTTP/2 连接会发送一条隐藏的秘密信息！

如果你监听过 HTTP/2 连接的建立过程，你也许会注意到在每个连接建立时都会发送一条这样的报文。如下：

即以下文本：

```
PRI * HTTP2.0

SM

```

如果将 HTTP2.0 以及换行从其中去掉，那么我们就得到了“**PRISM**”！——这是什么？是斯诺登所揭露的 NSA 的“棱镜计划”！只要是 HTTP/2.0 连接，都会在一开头就发送这样的报文。

是你的 HTTP/2.0 连接被 NSA 监控了么？不是！这条消息代表了你的服务器真正支持了 HTTP/2.0，它是一个用于识别的魔法字符串。

它在 [RFC7540](https://tools.ietf.org/html/rfc7540) [Section 3.5](https://tools.ietf.org/html/rfc7540#section-3.5) 中描述如下：

>
> 在 HTTP/2 中，每个端点都需要发送一个连接引语作为所用协议的最终确认，并用于建立 HTTP/2 连接的初始设置。客户端和服务器发送不同的连接引语。
>
>
> 客户端的连接引语以24个字节开始，以16进制表示如下：
>
>
>  **0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a**
>
>
> 即以下列字符串开始： “**PRI \*** **HTTP/2.0\r\n\r\nSM\r\n\r\n”**。
>
>
>

事实上，这个魔法字符串原本是“FOOBA”：在 2013/5/29 发布的 [draft-ietf-httpbis-http2-03](https://tools.ietf.org/html/draft-ietf-httpbis-http2-03#section-3.2) 中它还是这个样子：“**FOO \* HTTP/2.0\r\n\r\nBA\r\n\r\n**”。

而在同年6月份斯诺登事件沸沸扬扬之后，7/8发布的 [draft-ietf-httpbis-http2-04](https://tools.ietf.org/html/draft-ietf-httpbis-http2-04) 中就变成了“**PRI \* HTTP/2.0\r\n\r\nSM\r\n\r\n**”。

所以，你知道了吧？这个古怪的字符串是互联网工程任务组（IETF）对 NSA 的嘲讽。


Enlightenment E20 发布

Summary: E20 的开发已经告一段落了。在这 441 天期间，50 位以上的开发者提交了 1890 个补丁。报告了 25 个以上的Coverity 分析问题，解决了 165 个问题（根据提交信息得知）。bug 汇报之王 @ApB 共提交了 231 个问题，虽然只有其中 70% 得到了解决，但是依然为我们帮了大忙。 非常感谢每位做出贡献的人，无论是提交补丁、撰写文档、汇报问题还是简单地在 IRC 上提供反馈。  新版本亮点  对Wayland的完整支持 新的屏幕管理架构和对话框 新的声音混音器架构及部件 Elementary 替换了许多内部部件 改进了 FreeBSD 支持 Geolocation 模块  完整的更新

都到 20 了啊？印象中还是 E17 呢。

完全没有E17那时的惊艳感觉了

# Enlightenment E20 发布

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

E20 的开发已经告一段落了。在这 441 天期间，50 位以上的开发者提交了 1890 个补丁。报告了 25 个以上的 Coverity 分析问题，解决了 165 个问题（根据提交信息得知）。bug 汇报之王 [@ApB](https://phab.enlightenment.org/p/ApB/) 共提交了 231 个问题，虽然只有其中 70% 得到了解决，但是依然为我们帮了大忙。

非常感谢每位做出贡献的人，无论是提交补丁、撰写文档、汇报问题还是简单地在 IRC 上提供反馈。

### 新版本亮点

* 对 [Wayland](https://git.enlightenment.org/core/enlightenment.git/tree/README.wayland) 的完整支持
* 新的屏幕管理架构和对话框
* 新的声音混音器架构及部件
* Elementary 替换了许多内部部件
* 改进了 FreeBSD 支持
* Geolocation 模块

完整的更新日志 [在此](https://git.enlightenment.org/core/enlightenment.git/tree/NEWS?id=v0.20.0)。

### 下载

|  |  |
| --- | --- |
| **链接** | **SHA256** |
| [Enlightenment DR 0.20.0 GZIP](http://download.enlightenment.org/rel/apps/enlightenment/enlightenment-0.20.0.tar.gz) | 2e59533d5576e7c96a40af0885540aa0990b4a5a60b578cf990f6bc5daa365a9 |
| [Enlightenment DR 0.20.0 XZ](http://download.enlightenment.org/rel/apps/enlightenment/enlightenment-0.20.0.tar.xz) | bb5f257dc91f67f321c5960556e8c4029ce9a42aace3e3d4d880986d418d9157 |

### 构建和依赖

如果你已经安装了 EFL 和 Elementary，你也许应该在编译安装它们之前，删除它们的头文件和库文件，以避免出现编译冲突。请以下列顺序编译这些依赖：

1. [EFL](https://phab.enlightenment.org/diffusion/EFL) （[说明](https://git.enlightenment.org/core/efl.git/tree/README)）
2. [Elementary](https://phab.enlightenment.org/diffusion/ELM) （[说明](https://git.enlightenment.org/core/elementary.git/tree/README)）
3. [Emotion Generic Players](https://phab.enlightenment.org/diffusion/EGP) （[说明](https://git.enlightenment.org/core/emotion_generic_players.git/tree/README)）
4. [Evas Generic Loaders](https://phab.enlightenment.org/diffusion/EGL) （[说明](https://git.enlightenment.org/core/evas_generic_loaders.git/tree/README)）

**注意：** E20 依赖于 EFL **v1.15.2** 及更新版本来支持 X11 混合，如需要支持 Wayland 则需要1.16。


LNAV：基于 Ncurses 的日志文件阅读器

Summary: 日志文件导航器（Logfile Navigator，简称 lnav），是一个基于 curses 的，用于查看和分析日志文件的工具。和文本阅读器/编辑器相比， lnav 的好处是它充分利用了可以从日志文件中获取的语义信息，例如时间戳和日志等级。利用这些额外的语义信息， lnav 可以处理像这样的事情：来自不同文件的交错的信息；按照时间生成信息直方图；支持在文件中导航的快捷键。它希望使用这些功能可以使得用户可以快速有效地定位和解决问题。 lnav 功能 支持以下日志文件格式： Syslog、Apache 访问日志、strace、tcsh 历史以及常见的带时间戳的日志文件。

好东西，试试看。

@有道云笔记

# LNAV：基于 Ncurses 的日志文件阅读器

日志文件导航器（Logfile Navigator，简称 lnav），是一个基于 curses 的，用于查看和分析日志文件的工具。和文本阅读器/编辑器相比， lnav 的好处是它充分利用了可以从日志文件中获取的语义信息，例如时间戳和日志等级。利用这些额外的语义信息， lnav 可以处理像这样的事情：来自不同文件的交错的信息；按照时间生成信息直方图；支持在文件中导航的快捷键。它希望使用这些功能可以使得用户可以快速有效地定位和解决问题。

### lnav 功能

#### 支持以下日志文件格式：

Syslog、Apache 访问日志、strace、tcsh 历史以及常见的带时间戳的日志文件。读入文件的时候回自动检测文件格式。

#### 直方图视图：

以时间区划来显示日志信息数量。这对于大概了解在一长段时间内发生了什么非常有用。

#### 过滤器：

只显示那些匹配或不匹配一些正则表达式的行。对于移除大量你不感兴趣的日志行非常有用。

#### 即时操作：

在你输入到时候会同时完成检索；当添加了新日志行的时候会自动加载和搜索；加载行的时候会应用过滤器；另外，还会在你输入 SQL 查询的时候检查其正确性。

#### 自动显示后文：

日志文件视图会自动往下滚动到新添加到文件中的行。只需要向上滚动就可以锁定当前视图，然后向下滚动到底部恢复显示后文。

#### 按照日期顺序排序行：

从所有文件中加载的日志行会按照日期进行排序。使得你不需要手动从不同文件中收集日志信息。

#### 语法高亮：

错误和警告会用红色和黄色显示。高亮还可用于： SQL 关键字、XML 标签、Java 文件行号和括起来的字符串。

#### 导航：

有快捷键用于跳转到下一个或上一个错误或警告，按照指定的时间向后或向前翻页。

#### 用 SQL 查询日志：

每个日志文件行都相当于数据库中的一行，可以使用 SQL 进行查询。可以使用的列取决于查看的日志文件类型。

#### 命令和搜索历史：

会自动保存你之前输入的命令和搜素，因此你可以在会话之间使用它们。

#### 　压缩文件：

会实时自动检测和解压压缩的日志文件。

### 在 ubuntu 15.10 上安装 lnav

打开终端运行下面的命令

```
sudo apt-get install lnav

```

### 使用 lnav

如果你想使用 lnav 查看日志，你可以使用下面的命令，默认它会显示 syslogs

```
lnav

```

如果你想查看特定的日志，那么需要指定路径。如果你想看 CPU 日志，在你的终端里运行下面的命令

```
lnav /var/log/cups

```

---

via: <http://www.ubuntugeek.com/lnav-ncurses-based-log-file-viewer.html>

作者：[ruchi](http://www.ubuntugeek.com/author/ubuntufix) 译者：[ictlyh](http://mutouxiaogui.cn/blog/) 校对：[wxy](https://github.com/wxy)

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


如何在 Ubuntu 服务器中配置 AWStats

Summary: AWStats 是一个开源的网站分析报告工具，可以生成强大的网站、流媒体、FTP 或邮件服务器的访问统计图。此日志分析器以 CGI 或命令行方式进行工作，并在网页中以图表的形式尽可能的显示你日志中所有的信息。它可以部分读取信息文件，以便能够频繁并快速处理大量的日志文件。它支持绝大多数 Web 服务器日志文件格式，包括 Apache，IIS 等。 本文将帮助你在 Ubuntu 上安装配置 AWStats。 安装 AWStats 包 默认情况下，AWStats 的包可以在 Ubuntu 仓库中找到。 可以通过运行下面的命令来安装： sudo apt-get install awstats  接下来，你需要

# 如何在 Ubuntu 服务器中配置 AWStats

AWStats 是一个开源的网站分析报告工具，可以生成强大的网站、流媒体、FTP 或邮件服务器的访问统计图。此日志分析器以 CGI 或命令行方式进行工作，并在网页中以图表的形式尽可能的显示你日志中所有的信息。它可以“部分”读取信息文件，以便能够频繁并快速处理大量的日志文件。它支持绝大多数 Web 服务器日志文件格式，包括 Apache，IIS 等。

本文将帮助你在 Ubuntu 上安装配置 AWStats。

### 安装 AWStats 包

默认情况下，AWStats 的包可以在 Ubuntu 仓库中找到。

可以通过运行下面的命令来安装：

```
sudo apt-get install awstats

```

接下来，你需要启用 Apache 的 CGI 模块。

运行以下命令来启动 CGI：

```
sudo a2enmod cgi

```

现在，重新启动 Apache 以使改变生效。

```
sudo /etc/init.d/apache2 restart

```

### 配置 AWStats

你需要为你想要查看统计的每个域或网站创建一个配置文件。在这个例子中，我们将为 “test.com” 创建一个配置文件。

要完成此步，你可以通过复制 AWStats 的默认配置文件来配置你要统计的域。

```
sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.test.com.conf

```

现在，你需要在配置文件中做一些修改：

```
sudo nano /etc/awstats/awstats.test.com.conf

```

像下面这样修改一下:

```
# Change to Apache log file, by default it's /var/log/apache2/access.log
LogFile="/var/log/apache2/access.log"

# Change to the website domain name
SiteDomain="test.com"
HostAliases="www.test.com localhost 127.0.0.1"

# When this parameter is set to 1, AWStats adds a button on report page to allow to "update" statistics from a web browser
AllowToUpdateStatsFromBrowser=1

```

保存并关闭文件。

修改配置文件后，你需要用服务器的当前日志建立初步统计。你可以这样做：

```
sudo /usr/lib/cgi-bin/awstats.pl -config=test.com -update

```

输出会是这个样子:

### 为 Apache 配置 AWStats

接下来，你需要配置 Apache2 来显示统计数据。现在你需要将 “cgi-bin” 文件夹中的内容复制到 Apache 默认根目录下。默认它是在 “/usr/lib/cgi-bin”。

运行以下命令来完成此步:

```
sudo cp -r /usr/lib/cgi-bin /var/www/html/
sudo  chown www-data:www-data /var/www/html/cgi-bin/
sudo chmod -R 755 /var/www/html/cgi-bin/

```

### 测试 AWStats

现在，您可以通过访问 url “http://your-server-ip/cgi-bin/awstats.pl?config=test.com.” 来查看 AWStats 的页面。

它的页面像下面这样：

### 设置定时任务来更新日志

建议你创建一个定时任务，使用新创建的日志条目定期更新 AWStats 的数据库，然后统计会定期更新。这也将节省你的时间。

要做到这一点，你需要编辑 “/etc/crontab” 文件:

```
sudo nano /etc/crontab

```

添加下面那一行来让 AWStats 每十分钟更新一次。

```
*/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=test.com -update

```

保存并关闭文件。

### 结论

AWStats 是一个非常有用的工具，可以让你对网站的状况了如指掌，并能协助你分析网站。它非常容易安装和配置。如果你有任何疑问，请在下面发表评论。

---

via: <https://www.maketecheasier.com/set-up-awstats-ubuntu/>

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

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


基础：tar 命令使用介绍

Summary: Linux tar 命令是归档或分发文件时的强大武器。GNU tar 归档包可以包含多个文件和目录，还能保留其文件权限，它还支持多种压缩格式。Tar 表示 "Tape Archiver"，这种格式是 POSIX 标准。  Tar 文件格式 tar 压缩等级简介：  无压缩 没有压缩的文件用 .tar 结尾。 Gzip 压缩 Gzip 格式是 tar 使用最广泛的压缩格式，它能快速压缩和提取文件。用 gzip 压缩的文件通常用 .tar.gz 或 .tgz 结尾。这里有一些如何创建和解压 tar.gz 文件的例子。 Bzip2 压缩 和 Gzip 格式相比 Bzip2 提供了更好的压缩比。创建压缩文件也比较慢，通常采用 .tar.bz

这个文章质量不高

对于初学者还是有用的。

额，演示使用putty啊，没有使用Linux进行操作演示吗？

原文如此。。可能是作者习惯吧。

确实，很初级。。。

文章对初学者还是大有帮助的，谢谢作者啦！！

谢谢分享，对初学linux很有帮助！

学习了

# 基础：tar 命令使用介绍

Linux [tar](https://en.wikipedia.org/wiki/Tar_(computing)) 命令是归档或分发文件时的强大武器。GNU tar 归档包可以包含多个文件和目录，还能保留其文件权限，它还支持多种压缩格式。Tar 表示 "**T**ape **Ar**chiver"，这种格式是 POSIX 标准。

### Tar 文件格式

tar 压缩等级简介：

* **无压缩** 没有压缩的文件用 .tar 结尾。
* **Gzip 压缩** Gzip 格式是 tar 使用最广泛的压缩格式，它能快速压缩和提取文件。用 gzip 压缩的文件通常用 .tar.gz 或 .tgz 结尾。这里有一些如何[创建](http://www.faqforge.com/linux/create-tar-gz/)和[解压](http://www.faqforge.com/linux/extract-tar-gz/) tar.gz 文件的例子。
* **Bzip2 压缩** 和 Gzip 格式相比 Bzip2 提供了更好的压缩比。创建压缩文件也比较慢，通常采用 .tar.bz2 结尾。
* **Lzip(LAMA)压缩** Lizp 压缩结合了 Gzip 快速的优势，以及和 Bzip2 类似（甚至更好） 的压缩率。尽管有这些好处，这个格式并没有得到广泛使用。
* **Lzop 压缩** 这个压缩选项也许是 tar 最快的压缩格式，它的压缩率和 gzip 类似，但也没有广泛使用。

常见的格式是 tar.gz 和 tar.bz2。如果你想快速压缩，那么就是用 gzip。如果归档文件大小比较重要，就是用 tar.bz2。

### tar 命令用来干什么？

下面是一些使用 tar 命令的常见情形。

* 备份服务器或桌面系统
* 文档归档
* 软件分发

### 安装 tar

大部分 Linux 系统默认都安装了 tar。如果没有，这里有安装 tar 的命令。

#### CentOS

在 CentOS 中，以 root 用户在 shell 中执行下面的命令安装 tar。

```
yum install tar

```

#### Ubuntu

下面的命令会在 Ubuntu 上安装 tar。“sudo” 命令确保 apt 命令是以 root 权限运行的。

```
sudo apt-get install tar

```

#### Debian

下面的 apt 命令在 Debian 上安装 tar。

```
apt-get install tar

```

#### Windows

tar 命令在 Windows 也可以使用，你可以从 Gunwin 项目<http://gnuwin32.sourceforge.net/packages/gtar.htm>中下载它。

### 创建 tar.gz 文件

下面是在 shell 中运行 [tar 命令](http://www.faqforge.com/linux/tar-command/) 的一些例子。下面我会解释这些命令行选项。

```
tar pczf myarchive.tar.gz /home/till/mydocuments

```

这个命令会创建归档文件 myarchive.tar.gz，其中包括了路径 /home/till/mydocuments 中的文件和目录。**命令行选项解释**：

* **[p]** 这个选项表示 “preserve”，它指示 tar 在归档文件中保留文件属主和权限信息。
* **[c]** 表示创建。要创建文件时不能缺少这个选项。
* **[z]** z 选项启用 gzip 压缩。
* **[f]** file 选项告诉 tar 创建一个归档文件。如果没有这个选项 tar 会把输出发送到标准输出（ LCTT 译注：如果没有指定，标准输出默认是屏幕，显然你不会想在屏幕上显示一堆乱码，通常你可以用管道符号送到其它程序去）。

#### Tar 命令示例

**示例 1： 备份 /etc 目录**

创建 /etc 配置目录的一个备份。备份保存在 root 目录。

```
tar pczvf /root/etc.tar.gz /etc

```

要以 root 用户运行命令确保 /etc 中的所有文件都会被包含在备份中。这次，我在命令中添加了 [v] 选项。这个选项表示 verbose，它告诉 tar 显示所有被包含到归档文件中的文件名。

**示例 2： 备份你的 /home 目录**

创建你的 home 目录的备份。备份会被保存到 /backup 目录。

```
tar czf /backup/myuser.tar.gz /home/myuser

```

用你的用户名替换 myuser。这个命令中，我省略了 [p] 选项，也就不会保存权限。

**示例 3： 基于文件的 MySQL 数据库备份**

在大部分 Linux 发行版中，MySQL 数据库保存在 /var/lib/mysql。你可以使用下面的命令来查看：

```
ls /var/lib/mysql

```

用 tar 备份 MySQL 数据文件时为了保持数据一致性，首先停用数据库服务器。备份会被写到 /backup 目录。

1） 创建 backup 目录

```
mkdir /backup
chmod 600 /backup

```

2） 停止 MySQL，用 tar 进行备份并重新启动数据库。

```
service mysql stop
tar pczf /backup/mysql.tar.gz /var/lib/mysql
service mysql start
ls -lah /backup

```

### 提取 tar.gz 文件

提取 tar.gz 文件的命令是：

```
tar xzf myarchive.tar.gz

```

#### tar 命令选项解释

* **[x]** x 表示提取，提取 tar 文件时这个命令不可缺少。
* **[z]** z 选项告诉 tar 要解压的归档文件是 gzip 格式。
* **[f]** 该选项告诉 tar 从一个文件中读取归档内容，本例中是 myarchive.tar.gz。

上面的 tar 命令会安静地提取 tar.gz 文件，除非有错误信息。如果你想要看提取了哪些文件，那么添加 “v” 选项。

```
tar xzvf myarchive.tar.gz

```

**[v]** 选项表示 verbose，它会向你显示解压的文件名。

---

via: <https://www.howtoforge.com/tutorial/linux-tar-command/>

作者：[howtoforge](https://www.howtoforge.com/) 译者：[ictlyh](http://mutouxiaogui.cn/blog/) 校对：[wxy](https://github.com/wxy)

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


Summary: GIMP 图像编辑器 2.8.16 版本在其20岁生日时发布了。下面是如何安装或升级 GIMP 在 Ubuntu 16.04, Ubuntu 15.10, Ubuntu 14.04, Ubuntu 12.04 及其衍生版本中，如 Linux Mint 17.x/13, Elementary OS Freya。 GIMP 2.8.16 支持 OpenRaster 文件中的层组，修复了 PSD 中的层组支持以及各种用户界面改进，修复了 OSX 上的构建系统，以及更多新的变化。请阅读 官方声明。  如何安装或升级: 多亏了 Otto Meier，Ubuntu PPA 中最新的 GIMP 包可用于当前所有的 Ubuntu 版本和其衍生版。 1. 添加 GIMP PPA 从 Unity Dash 中打开终端，或通过 Ctrl

测试版~

文章中命令行的字体和颜色一直很喜欢，有无调教教程？

哈哈，不止一个人这样问了——其实 css 是公开的，大家看就可以拉~~欢迎抄袭~~

# 如何在 Ubuntu 16.04，15.10，14.04 中安装 GIMP 2.8.16

GIMP 图像编辑器 2.8.16 版本在其20岁生日时发布了。下面是如何安装或升级 GIMP 在 Ubuntu 16.04, Ubuntu 15.10, Ubuntu 14.04, Ubuntu 12.04 及其衍生版本中，如 Linux Mint 17.x/13, Elementary OS Freya。

GIMP 2.8.16 支持 OpenRaster 文件中的层组，修复了 PSD 中的层组支持以及各种用户界面改进，修复了 OSX 上的构建系统，以及更多新的变化。请阅读 [官方声明](http://www.gimp.org/news/2015/11/22/20-years-of-gimp-release-of-gimp-2816/)。

### 如何安装或升级:

多亏了 Otto Meier，[Ubuntu PPA](https://launchpad.net/%7Eotto-kesselgulasch/+archive/ubuntu/gimp) 中最新的 GIMP 包可用于当前所有的 Ubuntu 版本和其衍生版。

**1. 添加 GIMP PPA**

从 Unity Dash 中打开终端，或通过 Ctrl+Alt+T 快捷键打开。在它打开它后，粘贴下面的命令并回车：

```
sudo add-apt-repository ppa:otto-kesselgulasch/gimp

```

输入你的密码，密码不会在终端显示，然后回车继续。

**2. 安装或升级编辑器**

在添加了 PPA 后，启动 **Software Updater**(在 Mint 中是 Software Manager)。检查更新后，你将看到 GIMP 的更新列表。点击 “Install Now” 进行升级。

对于那些喜欢 Linux 命令的，按顺序执行下面的命令，刷新仓库的缓存然后安装 GIMP：

```
sudo apt-get update

sudo apt-get install gimp

```

**3. (可选的) 卸载**

如果你想卸载或降级 GIMP 图像编辑器。从软件中心直接删除它，或者按顺序运行下面的命令来将 PPA 清除并降级软件：

```
sudo apt-get install ppa-purge

sudo ppa-purge ppa:otto-kesselgulasch/gimp

```

就这样。玩的愉快！

---

via: <http://ubuntuhandbook.org/index.php/2015/11/how-to-install-gimp-2-8-16-in-ubuntu-16-04-15-10-14-04/>

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

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


PHP 7.0.0 正式版发布！

Summary: PHP 开发团队宣布，PHP 7.0.0 已经正式发布了！这标志着 PHP 正式进入崭新的 PHP 7 时代！ PHP 7.0.0 使用了新的Zend 引擎（Zend Engine），有几个重大改进和新的功能：  性能的极大提升：PHP 7 的性能接近上一个版本 PHP 5.6 的两倍 显著降低了其内存用量 支持 抽象格式树（Abstract Syntax Tree） 一致的64位支持 改进了异常（Exception）的层次结构 许多致命错误（fatal errors）转换为异常（Exceptions） 更安全的随机数生成器 去除老旧的、不支持的 SAPI 和扩展 新的空合并操作符 (??) 返回类型申明和标量类型申明 匿名类 零成本断言

终于发布了

我看到了正义联盟

Abstract Syntax Tree: 抽象语法书

树

哈哈，笔误——估计转载的那些也都跟着错了去了

发布也没办法啊，感觉现在主流的还是5.2的，升级率应该极低啊

赞一个

# PHP 7.0.0 正式版发布！

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

**PHP 开发团队宣布，PHP 7.0.0 已经正式发布了！**这标志着 PHP 正式进入崭新的 PHP 7 时代！

PHP 7.0.0 使用了新的 <ruby> Zend 引擎 <rp>  （ </rp> <rt>  Zend Engine </rt> <rp>  ） </rp></ruby>，有几个重大改进和新的功能：

* 性能的极大提升：PHP 7 的性能接近上一个版本 PHP 5.6 的两倍
* 显著降低了其内存用量
* 支持 <ruby> 抽象语法树 <rp>  （ </rp> <rt>  Abstract Syntax Tree </rt> <rp>  ） </rp></ruby>
* 一致的64位支持
* 改进了<ruby> 异常 <rp>  （ </rp> <rt>  Exception </rt> <rp>  ） </rp></ruby>的层次结构
* 许多<ruby> 致命错误 <rp>  （ </rp> <rt>  fatal errors </rt> <rp>  ） </rp></ruby>转换为<ruby> 异常 <rp>  （ </rp> <rt>  Exceptions </rt> <rp>  ） </rp></ruby>
* 更安全的随机数生成器
* 去除老旧的、不支持的 SAPI 和扩展
* 新的空合并操作符 (??)
* 返回类型申明和标量类型申明
* 匿名类
* 零成本断言

下载：

* 源代码请访问 [下载页](http://www.php.net/downloads.php)
* Windows 二进制可在 [windows.php.net/download/](http://windows.php.net/download/) 找到

完整的更新记录请参见 [ChangeLog](http://www.php.net/ChangeLog-7.php#7.0.0) 。

[迁移指南](http://php.net/manual/migration70.php) 已经放到了 PHP 手册当中，请关注新功能的细节和向后不兼容的变化。

由于要兼容最新的 OpenSSL 1.0.2e 发布，所以发布延误了，谢谢大家的耐心等待。

今天发布的不仅仅是 PHP 的下一代主版本，它也是我们这将近两年来的开发工作的成果。这是核心团队的殊胜成就，这与社区许多活跃成员令人难以置信的努力所分不开的。事实上，今天发布的不仅仅是一个新的版本，而是揭晓了一个潜力巨大的 PHP 新时代的到来。

这是 PHP 世界的伟大一天！

感谢所有的贡献者和支持者！

（题图来自： digitalocean.com）


Linux 中国11月热点文章回顾

Summary: 也许您太忙了，也许您已经被信息洪流冲刷的不能自已，所以为了节约您的时间，我们只推荐您看看上个月最热的五条文章。 从本月开始，我们每个月会总结回顾一下上个月的热点文章，希望您喜欢。  自由谈：为什么使用Linux  Linux 和 Windows 哪个好？这个问题就跟纠缠豆腐脑该加糖还是加盐一样没有意义。操作系统只是一个工具，适合你的就是最好的。Linux 传教士们，省省吧！自由即责任，世人多畏之。 不论到什么时候，Linux 用户都将是相对少数，这是人性决定的。如果真的理解 Linux 的哲学，那你应该明白，每一个人都可以问 我该用哪个，但

# Linux 中国11月热点文章回顾

也许您太忙了，也许您已经被信息洪流冲刷的不能自已，所以为了节约您的时间，我们只推荐您看看上个月最热的五条文章。

从本月开始，我们每个月会总结回顾一下上个月的热点文章，希望您喜欢。

### [自由谈：为什么使用 Linux](/article-6530-1.html)

>
> Linux 和 Windows 哪个好？这个问题就跟纠缠豆腐脑该加糖还是加盐一样没有意义。操作系统只是一个工具，适合你的就是最好的。Linux 传教士们，省省吧！“自由即责任，世人多畏之。” 不论到什么时候，Linux 用户都将是相对少数，这是人性决定的。如果真的理解 Linux 的哲学，那你应该明白，每一个人都可以问 “我该用哪个”，但任何人都不应管 “她/他该用哪个”。Windows 支持者们，不要再说 “Linux 我试过，太难用，跟 Windows 差距太大”。这很可能是你的真实感受，但明智的做法是装作从来没试过，不要宣扬。原因很简单：“**若无力驾驭，自由便是负担**。”
>
>
>

[](http://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=400231540&idx=1&sn=e2a5313afa4e7a51f2337cc15c1adee2#rd)

### [一起来说 Vim 语](/article-6610-1.html)

>
> 作为一款古老而具有持久生命力的编辑器，Vim 自有它的强大之处。很多人觉得 Vim 的学习曲线太陡峭了，为了能够把 Vim 用得风生水起，不得不记忆大量的命令。如果你是 Vim 新手，刚入门就开始面对着浩如烟海的命令逐条学习，我相信你一定会逐渐失去对它的兴趣。其实，**Vim 以一种近乎自然语言的方式帮助你完成文本的编辑工作**。只需要熟悉几条简单的语法，你就会坐在旋转座椅上前后打转，感慨美妙的生活又回来了。
>
>
>

[](http://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=400417833&idx=1&sn=1b993f325270b3f3ebff2894df0a73e6#rd)

### [阿里巴巴技术架构首次曝光](/article-6612-1.html)

>
> 近日，阿里云资深技术专家沈询向外**详细披露了阿里云企业级互联网架构**，正是这套被称为“双11背后男人”的架构体系，撑起了912亿的天量交易，这套系统也正被中国石化等大型企业视为互联网转型的基石。
>
>
>

[](http://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=400403306&idx=1&sn=b9b21836deaf637e71ae74377f16e4eb#rd)

### [超神们：15 位健在的世界级程序员！](/article-6633-1.html)

>
> **当开发人员说起世界顶级程序员时，他们的名字往往会被提及。**
>
>
> 好像现在程序员有很多，其中不乏有许多优秀的程序员。但是哪些程序员更好呢？
>
>
> 虽然这很难客观评价，不过在这个话题确实是开发者们津津乐道的。ITworld 深入程序员社区，避开四溅的争执口水，试图找出可能存在的所谓共识。事实证明，屈指可数的某些名字经常是讨论的焦点。
>
>
>

[](http://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=400454802&idx=1&sn=7f4c37f4186dd2a03cf6ad4c5cdcc8d8#rd)

### [我已经写了48年代码了，我感觉我还能写下去](/article-6577-1.html)

>
> 很多人会疑问是不是程序员最后只能转管理，是不是到了中年之后就应该放弃编程。看到这个回答后很受触动，尽力翻译出来，有不恰当的地方欢迎指出。
>
>
> 下个星期我就69了。**我从1967年开始编程。到现在已经48年了，从COBOL一直写到jQuery。**我已经忘掉的编程语言比很多程序员这辈子遇到的还多。我现在自己接一些项目，因为作为一个员工我完全是个工作狂，即使在我已经三十多岁的时候。我永远不会再去做一份每天工作8小时的传统编程工作。
>
>
>

 [](http://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=400328002&idx=1&sn=253deb5b3566fc4a62d249cc3edcbb90#rd)


如何在 Ubuntu 15.04 中安装 puppet

Summary: 大家好，本教程将学习如何在 ubuntu 15.04 上面安装 puppet，它可以用来管理你的服务器基础环境。puppet 是由 puppet 实验室（Puppet Labs）开发并维护的一款开源的配置管理软件，它能够帮我们自动化供给、配置和管理服务器的基础环境。不管我们管理的是几个服务器还是数以千计的计算机组成的业务报表体系，puppet 都能够使管理员从繁琐的手动配置调整中解放出来，腾出时间和精力去提系统的升整体效率。它能够确保所有自动化流程作业的一致性、可靠性以及稳定性。它让管理员和开发者更紧密的联系在一起，使开发者更容易产出付出设计良好、

# 如何在 Ubuntu 15.04 中安装 puppet

大家好，本教程将学习如何在 ubuntu 15.04 上面安装 puppet，它可以用来管理你的服务器基础环境。puppet 是由 <ruby> puppet 实验室 <rp>  （ </rp> <rt>  Puppet Labs </rt> <rp>  ） </rp></ruby>开发并维护的一款开源的配置管理软件，它能够帮我们自动化供给、配置和管理服务器的基础环境。不管我们管理的是几个服务器还是数以千计的计算机组成的业务报表体系，puppet 都能够使管理员从繁琐的手动配置调整中解放出来，腾出时间和精力去提系统的升整体效率。它能够确保所有自动化流程作业的一致性、可靠性以及稳定性。它让管理员和开发者更紧密的联系在一起，使开发者更容易产出付出设计良好、简洁清晰的代码。puppet 提供了配置管理和数据中心自动化的两个解决方案。这两个解决方案分别是 **puppet 开源版** 和 **puppet 企业版**。puppet 开源版以 Apache 2.0 许可证发布，它是一个非常灵活、可定制的解决方案，设置初衷是帮助管理员去完成那些重复性操作工作。pupprt 企业版是一个全平台复杂 IT 环境下的成熟解决方案，它除了拥有开源版本所有优势以外还有移动端 apps、只有商业版才有的加强支持，以及模块化和集成管理等。Puppet 使用 SSL 证书来认证主控服务器与代理节点之间的通信。

本教程将要介绍如何在运行 ubuntu 15.04 的主控服务器和代理节点上面安装开源版的 puppet。在这里，我们用一台服务器做<ruby> 主控服务器 <rp>  （ </rp> <rt>  master </rt> <rp>  ） </rp></ruby>，管理和控制剩余的当作 puppet <ruby> 代理节点 <rp>  （ </rp> <rt>  agent node </rt> <rp>  ） </rp></ruby>的服务器，这些代理节点将依据主控服务器来进行配置。在 ubuntu 15.04 只需要简单的几步就能安装配置好 puppet，用它来管理我们的服务器基础环境非常的方便。（LCTT 译注：puppet 采用 C/S 架构，所以必须有至少有一台作为服务器，其他作为客户端处理）

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

### 1.设置主机文件

在本教程里，我们将使用2台运行 ubuntu 15.04 “Vivid Vervet" 的主机，一台作为主控服务器，另一台作为 puppet 的代理节点。下面是我们将用到的服务器的基础信息。

* puupet 主控服务器 IP：44.55.88.6 ，主机名： puppetmaster
* puppet 代理节点 IP： 45.55.86.39 ，主机名： puppetnode

我们要在代理节点和服务器这两台机器的 hosts 文件里面都添加上相应的条目，使用 root 或是 sudo 访问权限来编辑 `/etc/hosts` 文件，命令如下：

```
# nano /etc/hosts

45.55.88.6 puppetmaster.example.com puppetmaster
45.55.86.39 puppetnode.example.com puppetnode

```

注意，puppet 主控服务器必使用 8140 端口来运行，所以请务必保证开启8140端口。

### 2. 用 NTP 更新时间

puppet 代理节点所使用系统时间必须要准确，这样可以避免代理证书出现问题。如果有时间差异，那么证书将过期失效，所以服务器与代理节点的系统时间必须互相同步。我们使用 NTP（<ruby> Network Time Protocol <rp>  （ </rp> <rt>  网络时间协议 </rt> <rp>  ） </rp></ruby>）来同步时间。**在服务器与代理节点上面分别**运行以下命令来同步时间。

```
# ntpdate pool.ntp.org

17 Jun 00:17:08 ntpdate[882]: adjust time server 66.175.209.17 offset -0.001938 sec

```

（LCTT 译注：显示类似的输出结果表示运行正常）

如果没有安装 ntp，请使用下面的命令更新你的软件仓库，安装并运行ntp服务

```
# apt-get update && sudo apt-get -y install ntp ; service ntp restart

```

### 3. 安装主控服务器软件

安装开源版本的 puppet 有很多的方法。在本教程中我们在 puppet 实验室官网下载一个名为 puppetlabs-release 的软件包的软件源，安装后它将为我们在软件源里面添加 puppetmaster-passenger。puppetmaster-passenger 包括带有 apache 的 puppet 主控服务器。我们开始下载这个软件包：

```
# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

--2015-06-17 00:19:26-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 192.155.89.90, 2600:3c03::f03c:91ff:fedb:6b1d
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ‘puppetlabs-release-trusty.deb’

puppetlabs-release-tr 100%[===========================>] 7.21K --.-KB/s in 0.06s

2015-06-17 00:19:26 (130 KB/s) - ‘puppetlabs-release-trusty.deb’ saved [7384/7384]

```

下载完成，我们来安装它：

```
# dpkg -i puppetlabs-release-trusty.deb

Selecting previously unselected package puppetlabs-release.
(Reading database ... 85899 files and directories currently installed.)
Preparing to unpack puppetlabs-release-trusty.deb ...
Unpacking puppetlabs-release (1.0-11) ...
Setting up puppetlabs-release (1.0-11) ...

```

使用 apt 包管理命令更新一下本地的软件源：

```
# apt-get update

```

现在我们就可以安装 puppetmaster-passenger 了

```
# apt-get install puppetmaster-passenger

```

**提示**: 在安装的时候可能会报错：

```
Warning: Setting templatedir is deprecated.see http://links.puppetlabs.com/env-settings-deprecations (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')

```

不过不用担心，忽略掉它就好，我们只需要在设置配置文件的时候把这一项禁用就行了。

如何来查看 puppet 主控服务器是否已经安装成功了呢？非常简单，只需要使用下面的命令查看它的版本就可以了。

```
# puppet --version

3.8.1

```

现在我们已经安装好了 puppet 主控服务器。因为我们使用的是配合 apache 的 passenger，由 apache 来控制 puppet 主控服务器，当 apache 运行时 puppet 主控服务器才运行。

在开始之前，我们需要通过停止 apache 服务来让 puppet 主控服务器停止运行。

```
# systemctl stop apache2

```

### 4. 使用 Apt 工具锁定主控服务器的版本

现在已经安装了 3.8.1 版的 puppet，我们锁定这个版本不让它随意升级，因为升级会造成配置文件混乱。 使用 apt 工具来锁定它，这里我们需要使用文本编辑器来创建一个新的文件 `/etc/apt/preferences.d/00-puppet.pref`：

```
# nano /etc/apt/preferences.d/00-puppet.pref

```

在新创建的文件里面添加以下内容：

```
# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.8*
Pin-Priority: 501

```

这样在以后的系统软件升级中， puppet 主控服务器将不会跟随系统软件一起升级。

### 5. 配置 Puppet 主控服务器

Puppet 主控服务器作为一个证书发行机构，需要生成它自己的证书，用于签署所有代理的证书的请求。首先我们要删除所有在该软件包安装过程中创建出来的 ssl 证书。本地默认的 puppet 证书放在 `/var/lib/puppet/ssl`。因此我们只需要使用 `rm` 命令来整个移除这些证书就可以了。

```
# rm -rf /var/lib/puppet/ssl

```

现在来配置该证书，在创建 puppet 主控服务器证书时，我们需要包括代理节点与主控服务器沟通所用的每个 DNS 名称。使用文本编辑器来修改服务器的配置文件 `puppet.conf`：

```
# nano /etc/puppet/puppet.conf

```

输出的结果像下面这样

```
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

```

在这我们需要注释掉 `templatedir` 这行使它失效。然后在文件的 `[main]` 小节的结尾添加下面的信息。

```
server = puppetmaster
environment = production
runinterval = 1h
strict_variables = true
certname = puppetmaster
dns_alt_names = puppetmaster, puppetmaster.example.com

```

还有很多你可能用的到的配置选项。 如果你有需要，在 Puppet 实验室有一份详细的描述文件供你阅读： [Main Config File (puppet.conf)](https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html)。

编辑完成后保存退出。

使用下面的命令来生成一个新的证书。

```
# puppet master --verbose --no-daemonize

Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): F6:2F:69:89:BA:A5:5E:FF:7F:94:15:6B:A7:C4:20:CE:23:C7:E3:C9:63:53:E0:F2:76:D7:2E:E0:BF:BD:A6:78
...
Notice: puppetmaster has a waiting certificate request
Notice: Signed certificate request for puppetmaster
Notice: Removing file Puppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/ca/requests/puppetmaster.pem'
Notice: Removing file Puppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/certificate_requests/puppetmaster.pem'
Notice: Starting Puppet master version 3.8.1
^CNotice: Caught INT; storing stop
Notice: Processing stop

```

至此，证书已经生成。一旦我们看到 `Notice: Starting Puppet master version 3.8.1`，就表明证书就已经制作好了。我们按下 `CTRL-C` 回到 shell 命令行。

查看新生成证书的信息，可以使用下面的命令。

```
# puppet cert list -all

+ "puppetmaster" (SHA256) 33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names: "DNS:puppetmaster", "DNS:puppetmaster.example.com")

```

### 6. 创建一个 Puppet 清单

默认的主<ruby> 清单 <rp>  （ </rp> <rt>  Manifest </rt> <rp>  ） </rp></ruby>是 `/etc/puppet/manifests/site.pp`。 这个主要清单文件包括了用于在代理节点执行的配置定义。现在我们来创建一个清单文件：

```
# nano /etc/puppet/manifests/site.pp

```

在刚打开的文件里面添加下面这几行：

```
# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}

# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}

# ensure apache2 service is running
service { 'apache2':
ensure => running,
}

```

以上这几行的意思是给代理节点部署 apache web 服务。

### 7. 运行 puppet 主控服务

已经准备好运行 puppet 主控服务器 了，那么开启 apache 服务来让它启动

```
# systemctl start apache2

```

我们 puppet 主控服务器已经运行，不过它还不能管理任何代理节点。现在我们给 puppet 主控服务器添加代理节点.

**提示**: 如果报错

```
Job for apache2.service failed. see "systemctl status apache2.service" and "journalctl -xe" for details.

```

肯定是 apache 服务器有一些问题，我们可以使用 root 或是 sudo 访问权限来运行 `apachectl start`查看它输出的日志。在本教程执行过程中, 我们发现一个 `/etc/apache2/sites-enabled/puppetmaster.conf` 的证书配置问题。修改其中的 `SSLCertificateFile /var/lib/puppet/ssl/certs/server.pem` 为 `SSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.pem`，然后注释掉后面这行 `SSLCertificateKeyFile` 。然后在命令行重新启动 apache。

### 8. 安装 Puppet 代理节点的软件包

我们已经准备好了 puppet 的服务器，现在需要一个可以管理的代理节点，我们将安装 puppet 代理软件到节点上去。这里我们要给每一个需要管理的节点安装代理软件，并且确保这些节点能够通过 DNS 查询到服务器主机。下面将 安装最新的代理软件到 节点 puppetnode.example.com 上。

在代理节点上使用下面的命令下载 puppet 实验室提供的软件包：

```
# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb\

--2015-06-17 00:54:42-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 192.155.89.90, 2600:3c03::f03c:91ff:fedb:6b1d
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ‘puppetlabs-release-trusty.deb’

puppetlabs-release-tr 100%[===========================>] 7.21K --.-KB/s in 0.04s

2015-06-17 00:54:42 (162 KB/s) - ‘puppetlabs-release-trusty.deb’ saved [7384/7384]

```

在 ubuntu 15.04 上我们使用 debian 包管理系统来安装它，命令如下：

```
# dpkg -i puppetlabs-release-trusty.deb

```

使用 apt 包管理命令更新一下本地的软件源：

```
# apt-get update

```

通过远程仓库安装：

```
# apt-get install puppet

```

Puppet 代理默认是不启动的。这里我们需要使用文本编辑器修改 `/etc/default/puppet` 文件，使它正常工作：

```
# nano /etc/default/puppet

```

更改 `START` 的值改成 "`yes`" 。

```
START=yes

```

最后保存并退出。

### 9. 使用 Apt 工具锁定代理软件的版本

和上面的步骤一样为防止随意升级造成的配置文件混乱，我们要使用 apt 工具来把它锁定。具体做法是使用文本编辑器创建一个文件 `/etc/apt/preferences.d/00-puppet.pref`：

```
# nano /etc/apt/preferences.d/00-puppet.pref

```

在新建的文件里面加入如下内容

```
# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.8*
Pin-Priority: 501

```

这样 puppet 就不会随着系统软件升级而随意升级了。

### 10. 配置 puppet 代理节点

我们需要编辑一下代理节点的 `puppet.conf` 文件，来使它运行。

```
# nano /etc/puppet/puppet.conf

```

它看起来和服务器的配置文件完全一样。同样注释掉 `templatedir`这行。不同的是在这里我们需要删除掉所有关于`[master]` 的部分。

假定主控服务器可以通过名字“puppet-master”访问，我们的客户端应该可以和它相互连接通信。如果不行的话，我们需要使用完整的主机域名 `puppetmaster.example.com`

```
[agent]
server = puppetmaster.example.com
certname = puppetnode.example.com

```

在文件的结尾增加上面3行，增加之后文件内容像下面这样：

```
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#templatedir=$confdir/templates

[agent]
server = puppetmaster.example.com
certname = puppetnode.example.com

```

最后保存并退出。

使用下面的命令来启动客户端软件：

```
# systemctl start puppet

```

如果一切顺利的话，我们不会看到命令行有任何输出。 第一次运行的时候，代理节点会生成一个 ssl 证书并且给服务器发送一个请求，经过签名确认后，两台机器就可以互相通信了。

**提示**： 如果这是你添加的第一个代理节点，建议你在添加其他节点前先给这个证书签名。一旦能够通过并正常运行，回过头来再添加其他代理节点。

### 11. 在主控服务器上对证书请求进行签名

第一次运行的时候，代理节点会生成一个 ssl 证书并且给服务器发送一个签名请求。在主控服务器给代理节点服务器证书签名之后，主服务器才能和代理服务器通信并且控制代理服务器。

在主控服务器上使用下面的命令来列出当前的证书请求：

```
# puppet cert list
"puppetnode.example.com" (SHA256) 31:A1:7E:23:6B:CD:7B:7D:83:98:33:8B:21:01:A6:C4:01:D5:53:3D:A0:0E:77:9A:77:AE:8F:05:4A:9A:50:B2

```

因为只设置了一台代理节点服务器，所以我们将只看到一个请求。看起来类似如上，代理节点的完整域名即其主机名。

注意有没有“+”号在前面，代表这个证书有没有被签名。

使用带有主机名的 `puppet cert sign`这个命令来签署这个签名请求，如下：

```
# puppet cert sign puppetnode.example.com
Notice: Signed certificate request for puppetnode.example.com
Notice: Removing file Puppet::SSL::CertificateRequest puppetnode.example.com at '/var/lib/puppet/ssl/ca/requests/puppetnode.example.com.pem'

```

主控服务器现在可以通讯和控制它签名过的代理节点了。

如果想签署所有的当前请求，可以使用 `-all` 选项，如下所示：

```
# puppet cert sign --all

```

### 12. 删除一个 Puppet 证书

如果我们想移除一个主机，或者想重建一个主机然后再添加它。下面的例子里我们将展示如何删除 puppet 主控服务器上面的一个证书。使用的命令如下：

```
# puppet cert clean hostname
Notice: Revoked certificate with serial 5
Notice: Removing file Puppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/ca/signed/puppetnode.example.com.pem'
Notice: Removing file Puppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/certs/puppetnode.example.com.pem'

```

如果我们想查看所有的签署和未签署的请求，使用下面这条命令：

```
# puppet cert list --all
+ "puppetmaster" (SHA256) 33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names: "DNS:puppetmaster", "DNS:puppetmaster.example.com")

```

### 13. 部署 Puppet 清单

当配置并完成 puppet 清单后，现在我们需要部署清单到代理节点服务器上。要应用并加载主 puppet 清单，我们可以在代理节点服务器上面使用下面的命令：

```
# puppet agent --test

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetnode.example.com
Info: Applying configuration version '1434563858'
Notice: /Stage[main]/Main/Exec[apt-update]/returns: executed successfully
Notice: Finished catalog run in 10.53 seconds

```

这里向我们展示了主清单如何立即影响到了一个单一的服务器。

如果我们打算运行的 puppet 清单与主清单没有什么关联，我们可以简单使用 `puppet apply` 带上相应的清单文件的路径即可。它仅将清单应用到我们运行该清单的代理节点上。

```
# puppet apply /etc/puppet/manifest/test.pp

```

### 14. 为特定节点配置清单

如果我们想部署一个清单到某个特定的节点，我们需要如下配置清单。

在主控服务器上面使用文本编辑器编辑 `/etc/puppet/manifest/site.pp`：

```
# nano /etc/puppet/manifest/site.pp

```

添加下面的内容进去

```
node 'puppetnode', 'puppetnode1' {
# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}

# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}

# ensure apache2 service is running
service { 'apache2':
ensure => running,
}
}

```

这里的配置显示我们将在名为 puppetnode 和 puppetnode1 的2个指定的节点上面安装 apache 服务。这里可以添加其他我们需要安装部署的具体节点进去。

### 15. 配置清单模块

模块对于组合任务是非常有用的，在 Puppet 社区有很多人贡献了自己的模块组件。

在主控服务器上, 我们将使用 `puppet module` 命令来安装 `puppetlabs-apache` 模块。

```
# puppet module install puppetlabs-apache

```

**警告**: 千万不要在一个已经部署 apache 环境的机器上面使用这个模块，否则它将清空你没有被 puppet 管理的 apache 配置。

现在用文本编辑器来修改 `site.pp` ：

```
# nano /etc/puppet/manifest/site.pp

```

添加下面的内容进去，在 puppetnode 上面安装 apache 服务。

```
node 'puppet-node' {
class { 'apache': } # use apache module
apache::vhost { 'example.com': # define vhost resource
port => '80',
docroot => '/var/www/html'
}
}

```

保存退出。然后重新运行该清单来为我们的代理节点部署 apache 配置。

### 总结

现在我们已经成功的在 ubuntu 15.04 上面部署并运行 puppet 来管理代理节点服务器的基础运行环境。我们学习了 puppet 是如何工作的，编写清单文件，节点与主机间使用 ssl 证书认证的认证过程。使用 puppet 开源软件配置管理工具在众多的代理节点上来控制、管理和配置重复性任务是非常容易的。如果你有任何的问题，建议，反馈，与我们取得联系，我们将第一时间完善更新，谢谢。

---

via: <http://linoxide.com/linux-how-to/install-puppet-ubuntu-15-04/>

作者：[Arun Pyasi](http://linoxide.com/author/arunp/) 译者：[ivo-wang](https://github.com/ivo-wang) 校对：[wxy](https://github.com/wxy)

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


Summary: 如果你是一个负责维护和确保 web 服务器安全的系统管理员，你需要花费最大的精力确保服务器中处理和通过的数据任何时候都受到保护。  RHCE 系列：第八部分 - 使用网络安全服务（NSS）为 Apache 通过 TLS 实现 HTTPS 为了在客户端和服务器之间提供更安全的连接，作为 HTTP 和 SSL（Secure Sockets Layer（安全套接层））或者最近称为 TLS（Transport Layer Security（传输层安全））的组合，产生了 HTTPS 协议。 由于一些严重的安全漏洞，SSL 已经被更健壮的 TLS 替代。由于这个原因，在这篇文章中我们会解析如何通过 TLS 实现你 web 服务

小编辛苦了！赞一个

# RHCE 系列（八）：在 Apache 上使用网络安全服务（NSS）实现 HTTPS

如果你是一个负责维护和确保 web 服务器安全的系统管理员，你需要花费最大的精力确保服务器中处理和通过的数据任何时候都受到保护。

*RHCE 系列：第八部分 - 使用网络安全服务（NSS）为 Apache 通过 TLS 实现 HTTPS*

为了在客户端和服务器之间提供更安全的连接，作为 HTTP 和 SSL（<ruby> Secure Sockets Layer <rp>  （ </rp> <rt>  安全套接层 </rt> <rp>  ） </rp></ruby>）或者最近称为 TLS（<ruby> Transport Layer Security <rp>  （ </rp> <rt>  传输层安全 </rt> <rp>  ） </rp></ruby>）的组合，产生了 HTTPS 协议。

由于一些严重的安全漏洞，SSL 已经被更健壮的 TLS 替代。由于这个原因，在这篇文章中我们会解析如何通过 TLS 实现你 web 服务器和客户端之间的安全连接。

这里假设你已经安装并配置好了 Apache web 服务器。如果还没有，在进入下一步之前请阅读下面站点中的文章。

* [在 RHEL/CentOS 7 上安装 LAMP（Linux，MySQL/MariaDB，Apache 和 PHP）](/article-5789-1.html)

### 安装 OpenSSL 和一些工具包

首先，确保正在运行 Apache 并且允许 http 和 https 通过防火墙：

```
# systemctl start http
# systemctl enable http
# firewall-cmd --permanent –-add-service=http
# firewall-cmd --permanent –-add-service=https

```

然后安装一些必需的软件包：

```
# yum update && yum install openssl mod_nss crypto-utils

```

**重要**：请注意如果你想使用 OpenSSL 库而不是 NSS（<ruby> Network Security Service <rp>  （ </rp> <rt>  网络安全服务 </rt> <rp>  ） </rp></ruby>）实现 TLS，你可以在上面的命令中用 mod\_ssl 替换 mod\_nss（使用哪一个取决于你，但在这篇文章中我们会使用 NSS，因为它更加安全，比如说，它支持最新的加密标准，比如 PKCS #11）。

如果你使用 mod\_nss，首先要卸载 mod\_ssl，反之如此。

```
# yum remove mod_ssl

```

### 配置 NSS（网络安全服务）

安装完 mod\_nss 之后，会创建默认的配置文件 `/etc/httpd/conf.d/nss.conf`。你应该确保所有 Listen 和 VirualHost 指令都指向 443 号端口（HTTPS 默认端口）：

nss.conf – 配置文件

---

```
Listen 443
VirtualHost _default_:443

```

然后重启 Apache 并检查是否加载了 mod\_nss 模块：

```
# apachectl restart
# httpd -M | grep nss

```

检查 Apache 是否加载 mod\_nss 模块

下一步，在 `/etc/httpd/conf.d/nss.conf` 配置文件中做以下更改：

1、 指定 NSS 数据库目录。你可以使用默认的目录或者新建一个。本文中我们使用默认的：

```
NSSCertificateDatabase /etc/httpd/alias

```

2、 通过保存密码到数据库目录中的 `/etc/httpd/nss-db-password.conf` 文件来避免每次系统启动时要手动输入密码：

```
NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

```

其中 `/etc/httpd/nss-db-password.conf` 只包含以下一行，其中 mypassword 是后面你为 NSS 数据库设置的密码：

```
internal:mypassword

```

另外，要设置该文件的权限和属主为 0640 和 root:apache：

```
# chmod 640 /etc/httpd/nss-db-password.conf
# chgrp apache /etc/httpd/nss-db-password.conf

```

3、 由于 POODLE SSLv3 漏洞，红帽建议停用 SSL 和 TLSv1.0 之前所有版本的 TLS（更多信息可以查看[这里](https://access.redhat.com/articles/1232123)）。

确保 NSSProtocol 指令的每个实例都类似下面一样（如果你没有托管其它虚拟主机，很可能只有一条）：

```
NSSProtocol TLSv1.0,TLSv1.1

```

4、 由于这是一个自签名证书，Apache 会拒绝重启，并不会识别为有效发行人。由于这个原因，对于这种特殊情况我们还需要添加：

```
NSSEnforceValidCerts off

```

5、 虽然并不是严格要求，为 NSS 数据库设置一个密码同样很重要：

```
# certutil -W -d /etc/httpd/alias

```

*为 NSS 数据库设置密码*

### 创建一个 Apache SSL 自签名证书

下一步，我们会创建一个自签名证书来让我们的客户机可以识别服务器（请注意这个方法对于生产环境并不是最好的选择；对于生产环境你应该考虑购买第三方可信证书机构验证的证书，例如 DigiCert）。

我们用 genkey 命令为 box1 创建有效期为 365 天的 NSS 兼容证书。完成这一步后：

```
# genkey --nss --days 365 box1

```

选择 Next：

*创建 Apache SSL 密钥*

你可以使用默认的密钥大小（2048），然后再次选择 Next：

*选择 Apache SSL 密钥大小*

等待系统生成随机比特：

*生成随机密钥比特*

为了加快速度，会提示你在控制台输入随机字符，正如下面的截图所示。请注意当没有从键盘接收到输入时进度条是如何停止的。然后，会让你选择：

1. 是否发送验证签名请求（CSR）到一个验证机构（CA）：选择 No，因为这是一个自签名证书。
2. 为证书输入信息。

最后，会提示你输入之前给 NSS 证书设置的密码：

```
# genkey --nss --days 365 box1

```

*Apache NSS 证书密码*

需要的话，你可以用以下命令列出现有的证书：

```
# certutil –L –d /etc/httpd/alias

```

*列出 Apache NSS 证书*

然后通过名字删除（如果你真的需要删除的，用你自己的证书名称替换 box1）：

```
# certutil -d /etc/httpd/alias -D -n "box1"

```

如果你需要继续进行的话，请继续阅读。

### 测试 Apache SSL HTTPS 连接

最后，是时候测试到我们服务器的安全连接了。当你用浏览器打开 https://<web 服务器 IP 或主机名>，你会看到著名的信息 “This connection is untrusted”：

*检查 Apache SSL 连接*

在上面的情况中，你可以点击<ruby> 添加例外 <rp>  （ </rp> <rt>  Add Exception </rt> <rp>  ） </rp></ruby> 然后<ruby> 确认安全例外 <rp>  （ </rp> <rt>  Confirm Security Exception </rt> <rp>  ） </rp></ruby> - 但先不要这么做。让我们首先来看看证书看它的信息是否和我们之前输入的相符（如截图所示）。

要做到这点，点击上面的<ruby> 视图 <rp>  （ </rp> <rt>  View... </rt> <rp>  ） </rp></ruby>-> <ruby> 详情 <rp>  （ </rp> <rt>  Details </rt> <rp>  ） </rp></ruby>选项卡，当你从列表中选择发行人你应该看到这个：

*确认 Apache SSL 证书详情*

现在你可以继续，确认例外（限于此次或永久），然后会通过 https 把你带到你 web 服务器的 DocumentRoot 目录，在这里你可以使用你浏览器自带的开发者工具检查连接详情：

在火狐浏览器中，你可以通过在屏幕中右击，然后从上下文菜单中选择<ruby> 检查元素 <rp>  （ </rp> <rt>  Inspect Element </rt> <rp>  ） </rp></ruby>启动开发者工具，尤其要看“<ruby> 网络 <rp>  （ </rp> <rt>  Network </rt> <rp>  ） </rp></ruby>”选项卡：

*检查 Apache HTTPS 连接*

请注意这和之前显示的在验证过程中输入的信息一致。还有一种方式通过使用命令行工具测试连接：

左图（测试 SSLv3）：

```
# openssl s_client -connect localhost:443 -ssl3

```

右图（测试 TLS）：

```
# openssl s_client -connect localhost:443 -tls1

```

*测试 Apache SSL 和 TLS 连接*

参考上面的截图了解更详细信息。

### 总结

我想你已经知道，使用 HTTPS 会增加会在你站点中输入个人信息的访客的信任（从用户名和密码到任何商业/银行账户信息）。

在那种情况下，你会希望获得由可信验证机构签名的证书，正如我们之前解释的（步骤和设置需要启用例外的证书的步骤相同，发送 CSR 到 CA 然后获得返回的签名证书）；否则，就像我们的例子中一样使用自签名证书即可。

要获取更多关于使用 NSS 的详情，可以参考关于 [mod-nss](https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html) 的在线帮助。如果你有任何疑问或评论，请告诉我们。

---

via: <http://www.tecmint.com/create-apache-https-self-signed-certificate-using-nss/>

作者：[Gabriel Cánepa](http://www.tecmint.com/author/gacanepa/) 译者：[ictlyh](http://www.mutouxiaogui.cn/blog/) 校对：[wxy](https://github.com/wxy)

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


Summary: 尽管现在有很多在线联系方式，电子邮件仍然是一个人传递信息给远在世界尽头或办公室里坐在我们旁边的另一个人的有效方式。 下面的图描述了电子邮件从发送者发出直到信息到达接收者收件箱的传递过程。  电子邮件如何工作 要实现这一切，背后发生了好多事情。为了使电子邮件信息从一个客户端应用程序（例如 Thunderbird、Outlook，或者 web 邮件服务，例如 Gmail 或 Yahoo 邮件）投递到一个邮件服务器，并从其投递到目标服务器并最终到目标接收人，每个服务器上都必须有 SMTP（简单邮件传输协议）服务。 这就是为什么我们要在这篇博文中介绍

# RHCE 系列（九）：如何使用无客户端配置 Postfix 邮件服务器（SMTP）

尽管现在有很多在线联系方式，电子邮件仍然是一个人传递信息给远在世界尽头或办公室里坐在我们旁边的另一个人的有效方式。

下面的图描述了电子邮件从发送者发出直到信息到达接收者收件箱的传递过程。

*电子邮件如何工作*

要实现这一切，背后发生了好多事情。为了使电子邮件信息从一个客户端应用程序（例如 [Thunderbird](http://www.tecmint.com/install-thunderbird-17-in-ubuntu-xubuntu-linux-mint/)、Outlook，或者 web 邮件服务，例如 Gmail 或 Yahoo 邮件）投递到一个邮件服务器，并从其投递到目标服务器并最终到目标接收人，每个服务器上都必须有 SMTP（简单邮件传输协议）服务。

这就是为什么我们要在这篇博文中介绍如何在 RHEL 7 中设置 SMTP 服务器，从本地用户发送的邮件（甚至发送到另外一个本地用户）被<ruby> 转发 <rp>  （ </rp> <rt>  forward </rt> <rp>  ） </rp></ruby>到一个中央邮件服务器以便于访问。

在这个考试的要求中这称为<ruby> 无客户端 <rp>  （ </rp> <rt>  null-client </rt> <rp>  ） </rp></ruby>安装。

在我们的测试环境中将包括一个<ruby> 起源 <rp>  （ </rp> <rt>  originating </rt> <rp>  ） </rp></ruby>邮件服务器和一个中央服务器或<ruby> 中继主机 <rp>  （ </rp> <rt>  relayhost </rt> <rp>  ） </rp></ruby>。

* 起源邮件服务器： （主机名: box1.mydomain.com / IP: 192.168.0.18）
* 中央邮件服务器： （主机名: mail.mydomain.com / IP: 192.168.0.20）

我们在两台机器中都会使用你熟知的 `/etc/hosts` 文件做名字解析：

```
192.168.0.18    box1.mydomain.com       box1
192.168.0.20    mail.mydomain.com       mail

```

### 安装 Postfix 和防火墙/SELinux 注意事项

首先，我们需要（在两台机器上）：

**1、 安装 Postfix：**

```
# yum update && yum install postfix

```

**2、 启动服务并启用开机自动启动：**

```
# systemctl start postfix
# systemctl enable postfix

```

**3、 允许邮件流量通过防火墙：**

```
# firewall-cmd --permanent --add-service=smtp
# firewall-cmd --add-service=smtp

```

*在防火墙中开通邮件服务器端口*

**4、 在 box1.mydomain.com 配置 Postfix**

Postfix 的主要配置文件是 `/etc/postfix/main.cf`。这个文件本身是一个很大的文本文件，因为其中包含了解释程序设置的用途的注释。

为了简洁，我们只显示了需要编辑的行（没错，在起源服务器中你需要保留 `mydestination` 为空；否则邮件会被存储到本地，而不是我们实际想要发往的中央邮件服务器）：

```
myhostname = box1.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination =
relayhost = 192.168.0.20

```

**5、 在 mail.mydomain.com 配置 Postfix**

```
myhostname = mail.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8

```

如果还没有设置，还要设置相关的 SELinux 布尔值永久为真：

```
# setsebool -P allow_postfix_local_write_mail_spool on

```

*设置 Postfix SELinux 权限*

上面的 SELinux 布尔值会允许中央服务器上的 Postfix 可以写入<ruby> 邮件池 <rp>  （ </rp> <rt>  mail spool </rt> <rp>  ） </rp></ruby>。

**6、 在两台机子上重启服务以使更改生效：**

```
# systemctl restart postfix

```

如果 Postfix 没有正确启动，你可以使用下面的命令进行错误处理。

```
# systemctl -l status postfix
# journalctl -xn
# postconf -n

```

### 测试 Postfix 邮件服务

要测试邮件服务器，你可以使用任何<ruby> 邮件用户代理 <rp>  （ </rp> <rt>  Mail User Agent，MUA </rt> <rp>  ） </rp></ruby>，例如 [mail 或 mutt](http://www.tecmint.com/send-mail-from-command-line-using-mutt-command/)。

由于我个人喜欢 mutt，我会在 box1 中使用它发送邮件给用户 tecmint，并把现有文件（mailbody.txt）作为信息内容：

```
# mutt -s "Part 9-RHCE series" tecmint@mydomain.com < mailbody.txt

```

*测试 Postfix 邮件服务器*

现在到中央邮件服务器（mail.mydomain.com）以 tecmint 用户登录，并检查是否收到了邮件：

```
# su – tecmint
# mail

```

*检查 Postfix 邮件服务器发送*

如果没有收到邮件，检查 root 用户的邮件池看看是否有警告或者错误提示。你也许需要使用 [nmap 命令](http://www.tecmint.com/nmap-command-examples/)确保两台服务器运行了 SMTP 服务，并在中央邮件服务器中打开了 25 号端口：

```
# nmap -PN 192.168.0.20

```

*Postfix 邮件服务器错误处理*

### 总结

像本文中展示的设置邮件服务器和中继主机是每个系统管理员必须拥有的重要技能，也代表了理解和安装更复杂情景的基础，例如一个邮件服务器托管有多个邮件账户（甚至成百上千）的域名。

（请注意这种类型的设置需要有 DNS 服务器，这不在本文的介绍范围），但你可以参照下面的文章设置 DNS 服务器：

* [在 CentOS/RHEL 07 上配置仅缓存的 DNS 服务器](http://www.tecmint.com/setup-dns-cache-server-in-centos-7/)

最后，我强烈建议你熟悉 Postfix 的配置文件（main.cf）和这个程序的帮助手册。如果有任何疑问，别犹豫，使用下面的评论框或者我们的论坛 Linuxsay.com 告诉我们吧，你会从世界各地的 Linux 高手中获得几乎是及时的帮助。

---

via: <http://www.tecmint.com/setup-postfix-mail-server-smtp-using-null-client-on-centos/>

作者：[Gabriel Cánepa](http://www.tecmint.com/author/gacanepa/) 译者：[ictlyh](https//www.mutouxiaogui.cn/blog/) 校对：[wxy](https://github.com/wxy)

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


Summary: 网络时间协议 - NTP - 是运行在传输层 123 号端口的 UDP 协议，它允许计算机通过网络同步准确时间。随着时间的流逝，计算机内部时间会出现漂移，这会导致时间不一致问题，尤其是对于服务器和客户端日志文件，或者你想要复制服务器的资源或数据库。  在 CentOS 和 RHEL 7 上安装 NTP 服务器 前置要求：  CentOS 7 安装过程 RHEL 安装过程  额外要求：  注册并启用 RHEL 7 更新订阅 在 CentOS/RHCE 7 上配置静态 IP 在 CentOS/RHEL 7 上停用并移除不需要的服务  这篇指南会告诉你如何在 CentOS/RHCE 7 上安装和配置 NTP 服务器，并使用 NTP

说句和文章无关的话，linux.cn的页面打印功能真是棒，超级好！！！

谢谢你喜欢~

# RHCE 系列（十）：在 RHEL/CentOS 7 中设置 NTP（网络时间协议）服务器

网络时间协议 - NTP - 是运行在传输层 123 号端口的 UDP 协议，它允许计算机通过网络同步准确时间。随着时间的流逝，计算机内部时间会出现漂移，这会导致时间不一致问题，尤其是对于服务器和客户端日志文件，或者你想要复制服务器的资源或数据库。

*在 CentOS 和 RHEL 7 上安装 NTP 服务器*

#### 前置要求：

* [CentOS 7 安装过程](http://www.tecmint.com/centos-7-installation/)
* [RHEL 安装过程](http://www.tecmint.com/redhat-enterprise-linux-7-installation/)

#### 额外要求：

* [注册并启用 RHEL 7 更新订阅](http://www.tecmint.com/enable-redhat-subscription-reposiories-and-updates-for-rhel-7/)
* [在 CentOS/RHCE 7 上配置静态 IP](http://www.tecmint.com/configure-network-interface-in-rhel-centos-7-0/)
* [在 CentOS/RHEL 7 上停用并移除不需要的服务](http://www.tecmint.com/remove-unwanted-services-in-centos-7/)

这篇指南会告诉你如何在 CentOS/RHCE 7 上安装和配置 NTP 服务器，并使用 <ruby> NTP 公共时间服务器池 <rp>  （ </rp> <rt>  NTP Public Pool Time Servers </rt> <rp>  ） </rp></ruby>列表中和你服务器地理位置最近的可用节点中同步时间。

#### 步骤一：安装和配置 NTP 守护进程

1、 官方 CentOS /RHEL 7 库默认提供 NTP 服务器安装包，可以通过使用下面的命令安装。

```
# yum install ntp

```

*安装 NTP 服务器*

2、 安装完服务器之后，首先到官方 <ruby>   NTP 公共时间服务器池  <rp>  （ </rp> <rt>  NTP Public Pool Time Servers </rt> <rp>  ） </rp></ruby>，选择你服务器物理位置所在的洲，然后搜索你的国家位置，然后会出现 NTP 服务器列表。

*NTP 服务器池*

3、 然后打开编辑 NTP 守护进程的主配置文件，注释掉来自 pool.ntp.org 项目的公共服务器默认列表，并用类似下面截图中提供给你所在国家的列表替换。（LCTT 译注：中国使用 0.cn.pool.ntp.org 等）

*配置 NTP 服务器*

4、 下一步，你需要允许来自你的网络的客户端和这台服务器同步时间。为了做到这点，添加下面一行到 NTP 配置文件，其中 **restrict** 语句控制允许哪些网络查询和同步时间 - 请根据需要替换网络 IP。

```
restrict 192.168.1.0 netmask 255.255.255.0 nomodify notrap

```

**nomodify notrap** 语句意味着不允许你的客户端配置服务器或者作为同步时间的节点。

5、 如果你需要用于错误处理的额外信息，以防你的 NTP 守护进程出现问题，添加一个 logfile 语句，用于记录所有 NTP 服务器问题到一个指定的日志文件。

```
logfile /var/log/ntp.log

```

*启用 NTP 日志*

6、 在你编辑完所有上面解释的配置并保存关闭 ntp.conf 文件后，你最终的配置看起来像下面的截图。

*NTP 服务器配置*

### 步骤二：添加防火墙规则并启动 NTP 守护进程

7、 NTP 服务使用 OSI 传输层（第四层）的 123 号 UDP 端口。它是为了避免可变延迟的影响所特别设计的。要在 RHEL/CentOS 7 中开放这个端口，可以对 Firewalld 服务使用下面的命令。

```
# firewall-cmd --add-service=ntp --permanent
# firewall-cmd --reload

```

*在 Firewall 中开放 NTP 端口*

8、 你在防火墙中开放了 123 号端口之后，启动 NTP 服务器并确保系统范围内可用。用下面的命令管理服务。

```
# systemctl start ntpd
# systemctl enable ntpd
# systemctl status ntpd

```

*启动 NTP 服务*

### 步骤三：验证服务器时间同步

9、 启动了 NTP 守护进程后，用几分钟等服务器和它的服务器池列表同步时间，然后运行下面的命令验证 NTP 节点同步状态和你的系统时间。

```
# ntpq -p
# date -R

```

*验证 NTP 时间同步*

10、 如果你想查询或者和你选择的服务器池同步，你可以使用 ntpdate 命令，后面跟服务器名或服务器地址，类似下面建议的命令行示例。

```
# ntpdate -q  0.ro.pool.ntp.org  1.ro.pool.ntp.org

```

*同步 NTP 时间*

### 步骤四：设置 Windows NTP 客户端

11、 如果你的 windows 机器不是域名控制器的一部分，你可以配置 Windows 和你的 NTP服务器同步时间。在任务栏右边 -> 时间 -> 更改日期和时间设置 -> 网络时间标签 -> 更改设置 -> 和一个网络时间服务器检查同步 -> 在 Server 空格输入服务器 IP 或 FQDN -> 马上更新 -> OK。

*和 NTP 同步 Windows 时间*

就是这些。在你的网络中配置一个本地 NTP 服务器能确保你所有的服务器和客户端有相同的时间设置，以防出现网络连接失败，并且它们彼此都相互同步。

---

via: <http://www.tecmint.com/install-ntp-server-in-centos/>

作者：[Matei Cezar](http://www.tecmint.com/author/cezarmatei/) 译者：[ictlyh](http://motouxiaogui.cn/blog) 校对：[wxy](https://github.com/wxy)

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