《道德经》之项目管理

Summary:
在开放性组织中的员工都是被激情、目标和参与感所激励，这个观点正是我认为项目管理者所应该关注的。
要解释这一切，我将从道德经上寻找依据。

看来国学终将被证实。

今天恰好看到一篇相似的。

https://tonghuix.io/2016/06/zhuangzi-philosophy-foss-community-governance/

原题是 《庄子哲学与开源社群治理》。

佟辉的~过两天转过来~

# 《道德经》之项目管理

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

《[道德经](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html)》，[被认为](https://en.wikipedia.org/wiki/Tao_Te_Ching)是由圣人[老子](http://plato.stanford.edu/entries/laozi/)于公元前六世纪时所编写，是现存最为广泛翻译的经文之一。从[宗教](https://en.wikipedia.org/wiki/Taoism)到[关于约会的有趣电影](http://www.imdb.com/title/tt0234853/)等方方面面，它都深深地影响着它们，作者们借用它来做隐喻，以解释各种各样的事情（甚至是[编程](http://www.mit.edu/%7Exela/tao.html)）。

在思考有关开放性组织的项目管理时，我的脑海中便立马浮现出上面的这段文字。

这听起来可能会有点奇怪。若要理解我的这种想法从何而来，你应该读读 **《开放性组织：点燃激情提升执行力》** 这本书，它是红帽公司总裁、首席执行官 Jim Whitehurst 所写的一本有关企业文化和新领导力范式的宣言。在这本书中，Jim（还有来自其他红帽人的一点帮助）解释了传统组织机构（一种 “自上而下” 的方式，来自高层的决策被传达到员工，而员工通过晋升和薪酬来激励）和开放性组织机构（一种 自下而上 的方式，领导专注于激励和鼓励，员工被充分授权以各尽其能）之间的差异。

在开放性组织中的员工都是被激情、目标和参与感所激励，这个观点正是我认为项目管理者所应该关注的。

要解释这一切，我将从**道德经**上寻找依据。

### 不要让工作职衔框住自身

>
> <ruby> 道，可道也， <rp>  （ </rp> <rt>  The tao that can be told </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 非恒道也。 <rp>  （ </rp> <rt>  is not the eternal Tao </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 名，可名也， <rp>  （ </rp> <rt>  The name that can be named </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 非恒名也。 <rp>  （ </rp> <rt>  is not the eternal Name. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> “无”，名天地之始； <rp>  （ </rp> <rt>  The unnameable is the eternally real. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> “有”，名万物之母。 <rp>  （ </rp> <rt>  Naming is the origin of all particular things. </rt> <rp>  ） </rp></ruby>
>
>
> [第一章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html)
>
>
>

项目管理到底是什么？作为一个项目管理者应该做些什么呢？

如您所想，项目管理者的一部分工作就是管理项目：收集需求、与项目相关人员沟通、设置项目优先级、安排任务、帮助团队解决困扰。许多机构都可以教你如何做好项目管理，并且这些技能你值得拥有。

然而，在开放性组织中，字面上的项目管理技能仅仅只是项目管理者需要做到的一小部分，这些组织需要更多其他的东西：即勇气。如果你擅长于管理项目（或者是真的擅长于任何工作），那么你就进入了舒适区。这时候就是需要鼓起勇气开始尝试冒险之时。

您有勇气跨出舒适区吗？向权威人士提出挑战性的问题，可能会引发对方的不快，但也可能会开启一个更好的方法，您有勇气这样做吗？有确定需要做的下一件事，然后真正去完成它的勇气吗？有主动去解决因为交流的鸿沟而遗留下来的问题的勇气吗？有去尝试各种事情的勇气吗？有失败的勇气吗？

道德经的开篇（上面引用的）就表明<ruby> 词语 <rp>  （ </rp> <rt>  words </rt> <rp>  ） </rp></ruby>、<ruby> 标签 <rp>  （ </rp> <rt>  labels </rt> <rp>  ） </rp></ruby>、<ruby> 名字 <rp>  （ </rp> <rt>  names </rt> <rp>  ） </rp></ruby>这些是有限制的，当然也包括工作职衔。在开放性组织中，项目经理不仅仅是执行管理项目所需的机械任务，而且要帮助团队完成组织的使命，尽管这已经被限定了。

### 联系起合适的人

>
> <ruby> 三十辐共一轂， <rp>  （ </rp> <rt>  We join spokes together in a wheel, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 当其无， <rp>  （ </rp> <rt>  but it is the center hole </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 有车之用。 <rp>  （ </rp> <rt>  that makes the wagon move. </rt> <rp>  ） </rp></ruby>
>
>
> [第十一章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#38)
>
>
>

当我过渡到项目管理的工作时，我必须学会的最为困难的一课是：并不是所有解决方案都是可完全地接受，甚至有的连预期都达不到。这对我来说是全新的一页。我**喜欢**全部都能解决。但作为项目管理者，我的角色更多的是与人沟通--使得那些确实有解决方案的人可以更高效地合作。

这并不是逃避责任或者不负责。这意味着可以很舒适的说，“我不知道，但我会给你找出答案”，然后就可迅速地结束这个循环。

想像一下马车的车轮，如果没有毂中的孔洞所提供的稳定性和方向，辐条便会失去支持，车轮也会散架。在一个开放性的组织中，项目管理者可以通过把合适的人凝聚在一起，培养正确的讨论话题来帮助团队保持持续向前的动力。

### 信任你的团队

>
> <ruby> 太上，不知有之； <rp>  （ </rp> <rt>  When the Master governs, the people are hardly aware that he exists. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 其次，亲而誉之； <rp>  （ </rp> <rt>  Next best is a leader who is loved. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 其次，畏之； <rp>  （ </rp> <rt>  Next, one who is feared. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 其次，侮之。 <rp>  （ </rp> <rt>  The worst is one who is despised. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 信不足焉， <rp>  （ </rp> <rt>  If you don't trust the people, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 有不信焉。 <rp>  （ </rp> <rt>  you make them untrustworthy. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 悠兮，其贵言。 <rp>  （ </rp> <rt>  The Master doesn't talk, he acts. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 功成事遂， <rp>  （ </rp> <rt>  When his work is done, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 百姓皆谓：“我自然”。 <rp>  （ </rp> <rt>  the people say, "Amazing: we did it, all by ourselves!" </rt> <rp>  ） </rp></ruby>
>
>
> [第十七章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#17)
>
>
>

[Rebecca Fernandez](https://opensource.com/users/rebecca) 曾经告诉我开放性组织的领导与其它组织的领导者最大的不同点在于，我们不是去取得别人的信任，而是信任别人。

开放性组织会雇佣那些非常聪明的，且对公司正在做的事情充满激情的人来做工作。为了能使他们能更好的工作，我们会提供其所需，并尊重他们的工作方式。

至于原因，我认为从道德经中摘出的上面一段就说的很清楚。

### 顺其自然

>
> <ruby> 上德无为而无以为； <rp>  （ </rp> <rt>  The Master does nothing yet he leaves nothing undone. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 下德为之而有以为。 <rp>  （ </rp> <rt>  The ordinary man is always doing things, yet many more are left to be done. </rt> <rp>  ） </rp></ruby>
>
>
> [第三十八章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#38)
>
>
>

你认识那类总是极其忙碌的人吗？认识那些因为有太多事情要做而看起来疲倦和压抑的人吗？

不要成为那样的人。

我知道说比做容易。帮助我没有成为那类人的最重要的东西是：我时刻记着*大家都很忙*这件事。我没有一个那样无聊的同事。

但总需要有人成为在狂风暴雨中仍保持镇定的人。总需要有人能够宽慰团队告诉他们一切都会好起来，我们将在现实和一天中工作时间有限的情况下，找到方法使得任务能够完成（因为事实就是这样的，而且我们必须这样）。

成为那样的人吧。

对于上面这段道德经所说的，我的理解是那些总是谈论他或她正在做什么的人实际上并**没有时间**去做他们谈论的事。如果相比于你周围的人，你能把你的工作做的毫不费劲，那就说明你的工作做对了。

### 做一名文化传教士

>
> <ruby> 上士闻道， <rp>  （ </rp> <rt>  When a superior man hears of the Tao, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 勤而行之； <rp>  （ </rp> <rt>  he immediately begins to embody it. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 中士闻道， <rp>  （ </rp> <rt>  When an average man hears of the Tao, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 若存若亡； <rp>  （ </rp> <rt>  he half believes it, half doubts it. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 下士闻道， <rp>  （ </rp> <rt>  When a foolish man hears of the Tao, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 大笑之。 <rp>  （ </rp> <rt>  he laughs out loud. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 不笑不足以為道。 <rp>  （ </rp> <rt>  If he didn't laugh,it wouldn't be the Tao. </rt> <rp>  ） </rp></ruby>
>
>
> [第四十一章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#41)
>
>
>

去年秋天，我和一群联邦雇员参加了一堂 MBA 的商业准则课程。当我开始介绍我们公司的文化、价值和伦理框架时，我得到的直接印象是：我的同学和教授都认为我就像一个天真可爱的小姑娘，做着许多关于公司应该如何运作的[甜美白日梦](https://opensource.com/open-organization/15/9/reflections-open-organization-starry-eyed-dreamer)。他们告诉我事情不可能是他们看起来的那样，他们还告诉我应该进一步考察。

所以我照做了。

然而我发现的是：事情**恰好**是他们看起来的那样。

在开放性组织，关于企业文化，人们应该随着企业的成长而时时维护那些文化，以使它随时精神焕发，充满斗志。我（和其它开源组织的成员）并不想过着如我同学们所描述的那样，“为生活而工作”。我需要有激情、有目标，需要明白自己的日常工作是如何对那些我所坚信的东西做贡献的。

作为一个项目管理者，你可能会认为在你的团队中，你的工作对培养你们公司的企业文化没有多少帮助。然而你的工作正是孕育文化本身。

### <ruby> Kaizen <rp>  （ </rp> <rt>  持续改善 </rt> <rp>  ） </rp></ruby>

>
> <ruby> 为学日益， <rp>  （ </rp> <rt>  In pursuit of knowledge,every day something is added. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 为道日损。 <rp>  （ </rp> <rt>  In the practice of the Tao,every day something is dropped. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 损之又损， <rp>  （ </rp> <rt>  Less and less do you need to force things, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 以至于无为。 <rp>  （ </rp> <rt>  until finally you arrive at non-action. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 无为而无不为。 <rp>  （ </rp> <rt>  When nothing is done,nothing is left undone. </rt> <rp>  ） </rp></ruby>
>
>
> [第四十八章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#48)
>
>
>

项目管理的常规领域都太过于专注最新、最强大的的工具，但对于应该使用哪种工具，这个问题的答案总是一致的：“最简单的”。

例如，我将任务列表放在桌面的一个文本文件中，因为它很单纯，不会受到不必要的干扰。您想介绍给团队的，无论是何种工具、流程和程序都应该是能提高效率，排除障碍的，而不是引入额外的复杂性。所以与其专注于工具，还不如专注于要使用这些工具来解决的**问题**。

作为一个项目经理，我最喜爱的部分是在敏捷世界中，我有自由抛弃那些没有成效的东西的权利。这与 [kaizen](https://www.kaizen.com/about-us/definition-of-kaizen.html) 的概念相关，或叫 “持续改进”。不要害怕尝试和失败。失败是我们在探索什么能够起作用，什么不能起作用的过程中所用的标签，这是提高的唯一方式。

最好的过程都不是一蹴而就的。作为项目管理者，你应该通过支持他们，而不是强迫他们去做某些事来帮助你的团队。

### 实践

>
> <ruby> 天下皆谓我“道”大， <rp>  （ </rp> <rt>  Some say that my teaching is nonsense. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 似不肖。 <rp>  （ </rp> <rt>  Others call it lofty but impractical. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 夫唯大， <rp>  （ </rp> <rt>  But to those who have looked inside themselves, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 故似不肖。 <rp>  （ </rp> <rt>  this nonsense makes perfect sense. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 若肖， <rp>  （ </rp> <rt>  And to those who put it into practice, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 久矣其细也夫！ <rp>  （ </rp> <rt>  this loftiness has roots that go deep. </rt> <rp>  ） </rp></ruby>
>
>
> [第六十七章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#67)
>
>
>

我相信开放性组织正在做的事。开放性组织在管理领域的工作几乎与他们提供的产品和服务一样重要。我们有机会以身作则，激发他人的激情和目的，创造激励和充分授权的工作环境。

我鼓励你们找到办法把这些想法融入到自己的项目和团队中，看看会发生什么。了解你们组织的使命，知晓你的项目是如何为这个使命做贡献的。鼓起勇气，尝试某些看起来没有多少成效的事，同时不要忘记和我们的社区分享你所学到的经验，这样我们就可以继续改进。

---

via: <https://opensource.com/open-organization/16/2/tao-project-management>

作者：[Allison Matlack](https://opensource.com/users/amatlack) 译者：[runningwater](https://github.com/runningwater) 校对：[FSSlc](https://github.com/FSSlc)

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


Summary:
Ubuntu 官方贴纸可以购买啦；
Tiny Core Linux 7.1 发布。

opensuse这回是官方滚挂了啊

哈哈哈，官方滚挂，这描述准确~

# 开源新闻速递：openSUSE Tumbleweed 迁移 GCC6 受阻，需要帮助

### 头条消息

openSUSE 的滚动发行版 Tumbleweed 正在将其默认编译器换成 GCC 6 ，但这需要海量的工作来重建所有的应用。而现在，Tumbleweed 的开发者遇到了困难，很多软件包都编译通不过，包括 Xen、GDB、Mozilla Firefox 浏览器和 Mozilla Thunderbird 邮件客户端等重要软件，开发者们[希望](https://lists.opensuse.org/opensuse-factory/2016-05/msg00356.html)社区可以帮助他们来解决编译问题。具体信息可以关注其[邮件列表](https://lists.opensuse.org/opensuse-factory/2016-05/date2.html)。

另外，大家还记得 openSUSE 上一个著名的版本号变化么，[从 13.2 一下跳到了 42.1](/article-4143-1.html) ，而其下一个版本，openSUSE Leap 42.2 [也进入了开发阶段](https://lists.opensuse.org/opensuse-factory/2016-05/msg00372.html)，准备公测了。预计 42.2 将在 11 月的第一个星期发布。

经过了漫长的等待，Ubuntu 的爱好者们终于可以为自己的笔记本或台式机购买 [Ubuntu 的官方贴纸](http://www.unixstickers.com/ubuntu)了。[Unixstickers.com](http://unixstickers.com/) 在 5 月 24 号宣布，在合作伙伴 Canonical 的赞助下，现在可以提供带有 Ubuntu LOGO 的贴纸了。当然现在只能提供贴纸，后续应该还会生产带有 Ubuntu 图标的 T 恤和杯子。

### 版本更迭

* 经过近一个月的开发，发布了两个 RC 版本之后，[Tiny Core Linux](http://www.tinycorelinux.net/) 7.1 [正式发布](http://forum.tinycorelinux.net/index.php/topic,19982.0.html)了。Tiny Core Linux 是一个十分小的 Linux 发行版，它分为三个版本： 仅提供命令行的 [Core](http://www.tinycorelinux.net/7.x/x86/release/Core-current.iso)（11Mb）、带有图形界面的 [TinyCore](http://www.tinycorelinux.net/7.x/x86/release/TinyCore-current.iso)（16Mb）以及安装盘 [CorePlus](http://www.tinycorelinux.net/7.x/x86/release/CorePlus-current.iso)（106Mb）。
* Linux 内核 3.12.60 LTS 发布，修复了 ARM 和 PowerPC 架构上的一些问题，更新了驱动。紧随这个版本发布的当天，Linux 内核 4.1.25 LTS 也进行了发布，升级了 OCFS2（OCFS2 是下一代的 ORACLE 集群文件系统） <ruby> 通用共享磁盘集群文件系统 <rp>  （ </rp> <rt>  general-purpose shared-disk cluster file system </rt> <rp>  ） </rp></ruby>。The Linux 内核 3.12.60 LTS 和 4.1.25 LTS 的源码都可以从网站 kernel.org 进行下载。4.1 系列内核的用户和 3.12 系列内核的用户可以进行更新了。
* Nvidia 为 UNIX 用户发行了 [361.45.11](http://www.nvidia.com/Download/driverResults.aspx/103306/en-us) 版本的图形驱动，支持 GNU/Linux、FreeBSD 和 Solaris 操作系统。
* Ubuntu MATE 的开发负责人 Martin Wimpress [宣布](https://plus.google.com/+MartinWimpress/posts/GLZyHpV7SbP)，Ubuntu MATE 16.10 操作系统开始开发了。其内置的应用“<ruby> 软件橱窗 <rp>  （ </rp> <rt>  Software Boutique </rt> <rp>  ） </rp></ruby>”和“<ruby> 欢迎 <rp>  （ </rp> <rt>  Welcome </rt> <rp>  ） </rp></ruby>”已经更新了，带来了一些新的功能。
* 最新发布的 GNOME 3.21.2 中的“<ruby> 软件 <rp>  （ </rp> <rt>  Software </rt> <rp>  ） </rp></ruby>”应用支持了 [Flatpack 软件包](https://wiki.gnome.org/Projects/SandboxedApps/Packages) （以前称之为 XDG-App bundles），这种软件包提供了沙盒化应用。


开源新闻速递：并没有什么用的 Chromium OS

Summary:
CentOS Linux 6.8 正式发布；
Google Chrome 进入 51 版本（51.0.2704.63）

因为有墙

# 开源新闻速递：并没有什么用的 Chromium OS

### 头条消息

我们都知道谷歌的 Chromebook 上运行的是 Chrome OS ，这是一个商业系统，不过它的源代码是公开的，所以，就像 Chromium 之于 Chrome 浏览器一样，Chrome OS 也有个名为 Chromium OS 的开源变体。Arne Exton 今天发布了他的定制版本 Chromium OS Exton Build 160525。除了 Exton 的这个定制版本之外，还有其它的 [ArnoldTheBats](http://chromium.arnoldthebat.co.uk/index.php?dir=special%2F) 变体，但是 Exton 说他的最快。

如果你觉得 Chromebook 比较贵的话（真的吗？），你可以下载 Chromium OS 来体验一下，[只需要写入一个 USB 棒跟着指导进行就可以了](http://www.exton.se/?p=818)。不过，最后，我觉得这些都没什么用，你懂的。

### 版本更迭

* 基于Red Hat 企业版 Linux 6.8 的 CentOS Linux 6.8 正式发布（[详情](/article-7390-1.html)）。
* Google Chrome [进入](http://googlechromereleases.blogspot.ro/2016/05/stable-channel-update_25.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+GoogleChromeReleases+(Google+Chrome+Releases)) 51 版本（51.0.2704.63），支持 GNU/Linux, Mac OS X, Windows 操作系统，这个版本修复了42个安全漏洞，当然也增加了一些比较让人兴奋的新特性。第一个就是实现了一个新的名为[凭据管理](http://blog.chromium.org/2016/04/chrome-51-beta-credential-management.html)的 API，增强了内置的密码管理器，网站可以直接与这个管理器进行交互，大大提升了网站登录体验。
* GhostBSD 的维护者 Eric Turgeon [宣布](http://ghostbsd.org/10.3-ALPHA2)，即将发行的基于 FreeBSD 10.3 的 GhostBSD 10.3 包含了几个新特性，其中包括对 ZFS (Z File System) 和 UFS (Unix File System) 文件系统的支持，以及重新设计的对 ZFS 加密的支持。
* Ubuntu MATE 16.10 将默认切换到 GTK3，该桌面环境将采用 Snap 软件包的形式，但是不会废弃以前的 .deb 包的支持。
* 紧随 Linux kernel 4.1.25 LTS发布之后，Linux kernel 3.18.34 LTS 又进行了新的发布，更新了一些驱动程序，改善了 ACPI, ATA, EDAC, GPU (大多针对 Intel i915), HV, iiO, InfiniBand, MD, 和 USB 驱动，以及其他的修复。
* 面向学生的发行版 [Birds Linux 8.0](http://birdslinux.altervista.org/en/) 发布，其搭载了 Linux 4.5 内核，以及 LibreOffice 5.1.2 办公套件，浏览器使用 Chrome 50 和 Tor Browser 5.5.5，还包括 VLC Media Player 2.2.2, GIMP 2.8.14-r1, Empathy 3.12.11, QCAD 3.14.3, 以及 DrJava 20140826-r5761。不过，目前 Birds Linux 8.0 只支持64位机。


Summary: 美国旧金山联邦法庭陪审团昨日做出了裁决，认定谷歌的 Android 操作系统使用 Java 进行开发并未侵犯甲骨文版权，因此驳回甲骨文索赔 90 亿美元的诉讼请求。此项裁决结束了谷歌与甲骨文长达六年的版权诉讼大战，而甲骨文表示将会就此上诉。

哈哈

法律是公正的

我就想知道这个oracle还能上诉，那美国法律到底能上诉多少次啊？

好像已经来回拉锯好几次了。。。

oracle收购sun说不定就是为了java，想大赚一笔的，可是自己太贪心了，搬石头砸了自己的脚。

嗯，不错。

你的名字！

# 谷歌取得巨大胜利，美联邦法庭裁定 Android 对 Java API 属于“合理使用”

>
> 美国旧金山联邦法庭陪审团昨日做出了裁决，认定谷歌的 Android 操作系统使用 Java 进行开发并未侵犯甲骨文版权，因此驳回了甲骨文索赔 90 亿美元的诉讼请求。此项裁决结束了谷歌与甲骨文长达六年的版权诉讼大战，而甲骨文表示将会就此上诉。
>
>
>

甲骨文控诉谷歌偷窃了它的 Java 编程语言来创造了 Android ，因此向谷歌索赔 90 亿美元。而旧金山联邦法庭在经过将近三周的审理后，十人陪审团又用了三天商议，最终做出了上述裁定，即：谷歌使用甲骨文 Java 开发平台开发 Android 受到了版权法“<ruby> 合理使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>”条款的保护。该裁定宣告了案件审判的结束，甲骨文没有获得所寻求的 90 亿美元赔偿金。

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

谷歌在邮件申明中说：“今天的裁决表明 Android 对 Java API 属于<ruby> 合理使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>，这代表着 Android 生态系统的胜利，也是 Java 编程社区和使用开放自由编程语言开发创新消费产品的软件开发者们的胜利！”

该裁决终止了这个持续六年、索赔多达数十亿美元的软件版权诉讼，但是这并不代表着事情的平息，因为甲骨文表示它还将上诉。

甲骨文法律总顾问 Dorian Daley 在邮件申明中说：“我们强烈相信谷歌通过非法复制核心的 Java 技术来开发 Android，从而借此进入到移动设备市场。甲骨文发起这场诉讼就是为了阻止谷歌的这一非法行为。我们确信有许多理由可以提出上诉。”但有关法律专家认为，推翻这一裁决将会很难。

甲骨文在 2010 年诉讼谷歌没有许可就在它的 Android 软件中使用了 Java 的一部分，2014年美国联邦法庭裁决甲骨文对这部分的 Java 拥有版权。而在本月的法庭审理中，谷歌辩称它对 Java 的使用符合版权法的“<ruby> 合理使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>”条款。

谷歌的证人们包括谷歌前首席执行官、现任谷歌母公司 Alphabet 执行董事长 Eric Schmidt。他们说服陪审团相信，谷歌使用 Java 去创新，而非简单地抄袭其代码。在加入谷歌之前， Eric Schmidt 曾为发明了 Java 语言的 Sun Microsystems 公司工作，参与研发和推销 Java。

Sun Microsystems 于上世纪 90 年代开发了 Java 语言，而谷歌在开发 Android 时曾经与 Sun Microsystems 谈判过使用 Java 的授权，但是最终并没有谈下去而是自由使用了那些 Java API。甲骨文 2010 年收购 Sun Microsystems 时， Eric Schmidt 正参与谷歌授权谈判。他称，根据他多年研发 Java 的经验来看，他认为谷歌无需通过谈判就应该被允许使用 Java API，Sun Microsystems 以开源和自由的方式推广它们，而非通过授权或出售方式。

2010年，在甲骨文收购了 Sun Microsystems 几个月之后，甲骨文就将谷歌告上法庭，称谷歌 Android 操作系统中有37个 API 侵犯了其编程语言 Java 的版权。甲骨文认为，谷歌只有获得许可才能使用 Java API 研发 Android 操作系统。而谷歌认为，他们使用这些 API 不受版权法的约束，美国联邦上诉法庭在 2014 年的裁定也适用于 API，为此无需支付版权费。

业界密切关注该案的审理，因为它可能改变软件该如何构建，通过“开源”，代码可以自由获取，还是这些代码必须得到授权。那些站在谷歌一边的人可能担心由此而来的寒蝉效应，但是这次谷歌的“合理使用”的成功或能减轻这种担忧。

在裁定公布后，甲骨文和 Alphabet 股价在盘后交易中变化不大。

via：[zdnet](http://www.zdnet.com/article/google-prevails-over-oracle-in-copyright-infringement-case/)，[UsaToday](http://www.usatoday.com/story/tech/news/2016/05/26/google-defeats-oracle-jury-decides-android-fair-use/84991628/)


开源新闻速递：甲骨文败诉 93 亿美元索赔

Summary:
Linux 4.7 中将支持 IBM POWER8 的内核实时补丁功能；
赛车游戏《F1 2015》发布 Linux 版本

# 开源新闻速递：甲骨文败诉 93 亿美元索赔

### 头条消息

首先一个大消息是，业界瞩目的谷歌和甲骨文的 Android 诉讼终于告一段落。就在昨天，旧金山联邦法庭陪审团裁定谷歌 Android 操作系统中对 Java API 的使用属于“<ruby> 公平使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>”，因此，无需赔偿甲骨文所主张的 90 亿美元赔偿——具体来说是 93 亿美金——这是有史以来最大的版权赔偿金额。对此裁定，虽然双方的股价都未有大的变化，但从网上的评论来看，都一边倒的站在谷歌这一边。

之前我们[报道](/article-7360-1.html)过，SUSE 已经在其企业版 Linux 中支持了内核实时补丁功能，而现在，一群 IBM 和 SUSE 的工程师们正在为 Linux 4.7 内核开发支持 POWER8 机器的内核实时补丁功能。POWER8 机器采用的是 64 位的小端 PPC64，在 Linux 4.6 内核，他们就已经为 PPC64le 开发了内核实时补丁的[部分实现](http://mpe.github.io/posts/2016/05/23/kernel-live-patching-for-ppc64le/)，不过完全的支持需要到 4.7 内核时才能完成。

Google 将会在安卓应用中加入生物识别、无密码校验技术。这将意味着，用户不在需要记忆密码了，手机的安全级别也将大大提高。届时，会根据用户的信用评分来解锁手机，信用评分会综合考虑各方面的因素，比如类型模式，位置，速度，声音模式，或者面部识别。

Canonical 的开发人员 Michael Hall 写了一篇[短文](https://plus.google.com/+MichaelHall119/posts/AmShAYoJYmN?iem=4&gpawv=1&hl=en-US)说将任何 Linux 应用打包成 snap 格式都很容易，建议社区将各种应用打包成这种开箱即用的 snap 格式。打包的方法可以参见[官方文档](https://developer.ubuntu.com/en/snappy/build-apps/)。

### 版本更迭

* 著名的 Linux 游戏发行版 SteamOS 发布了 2.80 测试版，在这个版本中最重要的更新是发布了 AMD GPU PRO 的驱动 16.30。由于 SteamOS 是基于 Debian 的，所以，使用 AMD GPU PRO 的Debian 用户也有福了。这个版本支持 Vulkan 和 VDPAU。当然，目前驱动还处于公测期间，有意尝鲜者可以[试试](http://repo.steampowered.com/steamos/pool/non-free/a/amdgpu-pro-installer/)，普通用户请等待正式版本出来，目前的正式版本是 16.20。

* 正在迈向 3.22 版本的 GNOME 刚刚发布了 3.21 的第二个里程碑版本 3.21.2，对 Wayland 进行了多处修复。作为核心组件的 GTK+ 也升级了相同版本，此外，很多为 GNOME 3.22 准备就绪的应用也纷纷进行了更新，比如 Polari IRC（Internet 中继聊天）客户端就[增加](https://mail.gnome.org/archives/gnome-announce-list/2016-May/msg00014.html)了一些新特性。
* Linux 和 SteamOS 版本的《古墓丽影 2013 重启》发布了 [1.1.1 补丁](http://steamcommunity.com/app/203160/discussions/0/357287304420332226/)。修复了一些问题，包括在使用 VPN 时不会再闪退，以及许多声音问题。
* 紧随 Feral Interactive 发布了《古墓丽影》1.1.1补丁之后，另一个令人欣喜的消息是，该公司还发布了赛车类游戏《[F1 2015](http://store.steampowered.com/app/286570/)》。不过要运行《F1 2015》的话对系统版本和内存、显卡等配置要求比较高。要求 SteamOS 2.0 或者 Ubuntu 16.04 LTS 或者更高的版本。内核至少是 Intel i3 或者 AMD FX-6300 CPU，不过最好是 Intel i7 4770 或者更高配置的处理器。

* DisplayLink 更新了其 DisplayLink USB 3.0 的 Linux 驱动，支持最新的 [Ubuntu](http://www.displaylink.com/downloads/ubuntu) 及 [Fedora](http://www.hadess.net/2016/05/blog-backlog-post-3-displaylink-based.html) 发行版。使用 USB 或无线显示器等支持 DisplayLink 技术的 Linux 用户可以升级了。
* Sabayon ARM [发布](http://www.sabayon.org/article/arm-meet-sabayon-sabayon-meet-arm)了支持[树莓派2和3](http://ftp.nluug.nl/os/Linux/distr/sabayonlinux/iso/monthly/Sabayon_Linux_16_armv7l_RPi_Base_8GB.img.xz)的版本。
* Debian 的 LTS 小组[宣布](https://lists.debian.org/debian-lts/2016/05/threads.html)，他们不再在 Debian 7 的扩展生命周期中支持 VLC 2.0.3、SoGo 1.3.16 和 MediaWiki 1.19.20。


Ubuntu 的 snap 软件包封装真的安全吗？

Summary: 据 Garret 说, “仅需要克服一点点困难，安装的任何 Snap 格式的软件包就完全能够将你所有的私有数据复制到任何地方”。

# Ubuntu 的 snap 软件包封装真的安全吗？

最近发布的 [Ubuntu 16.04 LTS 版本带来了一些新功能](http://itsfoss.com/features-ubuntu-1604/)，其中之一就是对 [ZFS 格式文件系统的支持](http://itsfoss.com/oracle-canonical-lawsuit/)。另一个值得广为讨论的特性就是 Snap 软件包格式。不过，据 [CoreOS](https://en.wikipedia.org/wiki/CoreOS) 的开发者之一所述，Snap 软件包并不像声称的那样安全。

### 什么是 Snap 软件包？

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

Snap 软件包的灵感来自容器。这种新的封装格式允许[开发人员为运行于 Ubuntu 长期支持版本 (LTS)之上的应用程序发布更新](https://insights.ubuntu.com/2016/04/13/snaps-for-classic-ubuntu/)。这就可以让用户虽然运行着稳定版本的操作系统，但却能够让应用程序保持最新的状态。之所以能够这样，是因为软件包本身就包含了程序运行的所有依赖。这可以防止依赖的软件更新后软件挂掉。

snap 软件包的另外一个优势是应用与系统的其它部分是隔离的。这意味着如果你改变了 snap 软件包的一些东西，它不会影响到系统的其它部分。这也可以防止其它的应用访问你的隐私信息，从而使骇客根据难以获取你的数据。

### 然而……

据 [Matthew Garrett](https://mjg59.dreamwidth.org/l) 的说法，Snap 软件包不能完全兑现上述承诺。Garret 作为 Linux 内核的开发人员和 CoreOS 的安全性方面的开发者，我想他一定知道自己在说些什么。

[据 Garret 说](https://mjg59.dreamwidth.org/42320.html), “仅需要克服一点点困难，安装的任何 Snap 格式的软件包就完全能够将你所有的私有数据复制到任何地方”。

[ZDnet](http://www.zdnet.com/article/linux-expert-matthew-garrett-ubuntu-16-04s-new-snap-format-is-a-security-risk/) 的报道：

>
> “为了证明自己的观点，他在 Snap 中构建了一个仅用于验证其原理的用于破坏的软件包，它首先会显示一个可爱的泰迪熊，然后将会记录 Firefox 的键盘按键事件，并且能够窃取 SSH 私钥。这个仅用于验证原理的软件包实际上注入的是一个无害的命令，但是却能够修改成一个窃取 SSH 密钥的 cURL 会话。”
>
>
>

### 但是稍等……

难道 Snap 真的有安全缺陷？事实上却不是！

Garret 自己也说，此问题仅出现在使用 X11 窗口系统上，而对于那些使用 Mir 的移动设备无效。所以这个缺陷是 X11 的而不是 Snap 的。

>
> X11 是如何信任应用程序的，这是一个众所周知的安全风险。Snap 并没有更改 X11 的信任模型。所以一个应用程序能够看到其它应用程序的行为并不是这种新的封装格式的缺点，而是 X11 的。
>
>
>

Garrett 实际上想表达的只是，当 Canonical 歌颂 Snap 和它的安全性时，Snap 应用程序并不是完全沙盒化的。和其他二进制文件一样，它们也存在风险。

请牢记 Ubuntu 16.04 当前还在使用 X11 而不是 Mir 的事实，从未知的源下载和安装 Snap 格式的软件包也许还是有风险的，然而其它不也是如此嘛？！

相关链接： [如何在 Ubuntu 16.04 中使用 Snap 软件包](http://itsfoss.com/use-snap-packages-ubuntu-16-04/)。期待您分享关于 Snap 格式及其安全性的观点。

---

via: <http://itsfoss.com/snap-package-securrity-issue/>

作者：[John Paul](http://itsfoss.com/author/john/) 译者：[dongfengweixiao](https://github.com/dongfengweixiao) 校对：[wxy](https://github.com/wxy)

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


Intel 展示了可在大屏幕显示 Linux 系统的低端 Android 手机

Summary: 在世界移动大会 MWC16 上 Intel 展示了称之为“大屏体验”的一款的 Android 智能手机，它在插入一个外部显示后运行了一个完整的 Linux 桌面。

这个好，移动商务本，上班拿手机插个鼠标键盘和显示器就搞定

就看app的质量如何了

跑个eclipse-pydev估计会死掉

来自广西南宁的 Internet Explorer 11.0|Windows 7 用户

# Intel 展示了可在大屏幕显示 Linux 系统的低端 Android 手机

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

在世界移动大会 **MWC16** 上 Intel 展示了称之为“大屏体验”的一款的 Android 智能手机，它在插入一个外部显示后运行了一个完整的 Linux 桌面。

这个概念大体上与微软在 Windows 10 手机中的 Continuum 相似，但是 Continuum 面向的是高端设备，Intel 的项目面向的是低端智能机和新兴市场。

在巴塞罗那的这场大会上展示的是拥有 Atom x3、2GB RAM 和 16GB 存储以及支持外部显示的的 SoFIA（Intel 架构的智能或功能手机）智能机原型。插上键盘、鼠标和显示，它就变成了一台桌面 Linux，并可以选择在大屏幕的一个窗口中显示 Android 桌面。

Intel 的拓荒小组（Path Finding Group）经理 Nir Metzer 告诉我们：“Android 基于 Linux 内核，因此我们运行在一个内核上，我们有一个 Android 栈和一个 Linux 栈，并且我们共享同一个环境，因此文件系统是相同的。电话是全功能的。”

Metzer 说：“我有一个多窗口环境。只要我插入显示器后就可以使用电子表格，我可以进行拖放操作，播放音频。在一个低端平台实现这一切是一个挑战。”

现在当连上外部显示器时设备的屏幕显示是空白的，但是 Metzer 说下个版本的 Atom X3 会支持双显示。

其使用的 Linux 版本是由 Intel 维护的。Metzer 说：“我们需要将 Linux 和 Android 保持一致。框架是预安装的，不是一个可以下载的应用。”

英特尔在移动世界大会上向手机制造商们推销这一想法，但却没有实际说希望购买该设备的消费者。Metzer 说：“芯片已经准备好了，已经为量产准备好了。明天就可以进入生产。但是这要看商业需求。”

---

via: <http://www.theregister.co.uk/2016/02/23/move_over_continuum_intel_shows_android_smartphone_powering_bigscreen_linux/>

作者：[Tim Anderson](http://www.theregister.co.uk/Author/2878) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


推荐五篇 OpenStack 的新指南

Summary: 我们很幸运，因为有许多资源让我们跟随着项目的脚步。除了官方文档外，我们还有许多来自第三方提供的培训和认证、个人分享，以及许多社区贡献的学习资源。

# 推荐五篇 OpenStack 的新指南

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

回顾这周的 OpenStack 峰会，我仍然回味着开源云生态系统的浩瀚无垠，有那么多需要了解的项目及概念才能获得成功。不过我们很幸运，因为有许多资源让我们跟随着项目的脚步。除了[官方文档](http://docs.openstack.org/)外，我们还有许多来自第三方提供的培训和认证、个人分享，以及许多社区贡献的学习资源。

为了让我们保持获得最新消息，每个月我们将会整合发布 OpenStack 社区的最新教程、指导和小贴士等。下面是我们过去几个月最棒的发布分享。

* 首先，如果你正在寻找一个靠谱实惠的 OpenStack 测试实验室， Intel NUC 是最值得考虑的平台。麻雀虽小，五脏俱全，通过指导文章，可以很轻松的按照教程在 NUC 上使用 [TripleO 部署 OpenStack](http://acksyn.org/posts/2016/03/tripleo-on-nucs/) ，并且还可以轻松避开一些常见的古怪问题。
* 当你已经运行的一段时间 OpenStack 后，你会发现在你的云系统上许多组件生成了大量日志。其中一些是可以安全删除的，而你需要一个管理这些日志的方案。参考在部署生产 9 个月后使用 Celiometer 管理日志的[一些思考](http://silverskysoft.com/open-stack-xwrpr/2016/03/long-term-openstack-usage-summary/)。
* 对于 OpenStack 基础设施项目的新手，想要提交补丁到 OpenStack 是相当困难的。入口在哪里，测试怎么做，我的提交步骤是怎么样的？可以通过 Arie Bregman 的这篇[博客文章](http://abregman.com/2016/03/05/openstack-infra-jenkins-jobs/)快速了解整个提交过程。
* 突发计算节点失效，不知道是硬件还是软件问题。不过好消息是 OpenStack 提供了一套非常简单的迁移计划可以让你迁移当机节点到别的主机。然而，迁移过程中使用的命令令许多人感到困惑。可以通过[这篇文章](http://www.danplanet.com/blog/2016/03/03/evacuate-in-nova-one-command-to-confuse-us-all/)来理解 migrate 和 evacuate 命令的不同。
* 网络功能虚拟化技术需要 OpenStack 之外的一些功能，而用户可能不熟悉它们。例如， SR-IOV 和 PCI 直通是最大限度地提高物理硬件性能的方式。可以学习[部署步骤](https://trickycloud.wordpress.com/2016/03/28/openstack-for-nfv-applications-sr-iov-and-pci-passthrough/)以使 OpenStack 的性能最大化。

这些文章基本涵盖了本月（译者注： 4 月）推送，如果你还需要更多文章，可以检索过去推送的 [OpenStack 文献](https://opensource.com/resources/openstack-tutorials)来获取更多资源。如果有你认为我们应该推荐的新教程，请在评论中告诉我们，谢谢。

---

via: <https://opensource.com/business/16/4/master-openstack-new-tutorials>

作者：[Jason Baker](https://opensource.com/users/jason-baker) 译者：[VicYu/Vic020](http://vicyu.net) 校对：[PurlingNayuki](https://github.com/PurlingNayuki)

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


Linux/Unix 桌面趣事：文字模式下的 ASCII 艺术与注释绘画

谢谢分享！很好玩！

# Linux/Unix 桌面趣事：文字模式下的 ASCII 艺术与注释绘画

boxes 命令不仅是一个文本过滤器，同时是一个很少人知道的有趣工具，它可以在输入的文本或者代码周围框上各种ASCII 艺术画。你可以用它快速创建邮件签名，或者在各种编程语言中留下评论块。这个命令可以在 vim 文本编辑器中使用，但是也可以在各种支持过滤器的文本编辑器中使用，同时也可以在命令行中单独使用。

### 任务: 安装 boxes

使用 [apt-get 命令](http://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html) 在 Debian / Ubuntu Linux 中安装 boxes：

```
$ sudo apt-get install boxes

```

输出示例：

```
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  boxes
0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 0 B/59.8 kB of archives.
After this operation, 205 kB of additional disk space will be used.
Selecting previously deselected package boxes.
(Reading database ... 224284 files and directories currently installed.)
Unpacking boxes (from .../boxes_1.0.1a-2.3_amd64.deb) ...
Processing triggers for man-db ...
Setting up boxes (1.0.1a-2.3) ...

```

RHEL / CentOS / Fedora Linux 用户, 使用 [yum 命令来安装](http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/) boxes，(请先[启用 EPEL 软件仓库](http://www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/))：

```
# yum install boxes

```

输出示例：

```
Loaded plugins: rhnplugin
Setting up Install Process
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
--> Running transaction check
---> Package boxes.x86_64 0:1.1-8.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================
 Package        Arch            Version               Repository     Size
==========================================================================
Installing:
 boxes          x86_64          1.1-8.el6             epel           64 k
Transaction Summary
==========================================================================
Install       1 Package(s)
Total download size: 64 k
Installed size: 151 k
Is this ok [y/N]: y
Downloading Packages:
boxes-1.1-8.el6.x86_64.rpm                         |  64 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : boxes-1.1-8.el6.x86_64                                 1/1
Installed:
  boxes.x86_64 0:1.1-8.el6
Complete!

```

FreeBSD 用户可以按如下使用：

```
cd /usr/ports/misc/boxes/ && make install clean

```

或者，使用 pkg\_add 命令来增加包：

```
# pkg_add -r boxes

```

### 在一些给定文本周围画出任何种类的包围框

输入下列命令：

```
echo "This is a test" | boxes

```

或者，指定要使用的图案的名字：

```
echo -e "\n\tVivek Gite\n\tvivek@nixcraft.com\n\twww.cyberciti.biz" | boxes -d dog

```

输出示例 :

\*图01: Unix / Linux: Boxes 命令来画出各式各样的图案 \*

#### 怎么样输出所有的图案

语法如下：

```
boxes option
pipe | boxes options
echo "text" | boxes -d foo
boxes -l

```

-d 选项用来设置要使用的图案的名字。语法如下：

```
echo "Text" | boxes -d design
pipe | boxes -d desig

```

-l 选项列出所有图案。它显示了在配置文件中的所有的框线设计图，同时也显示关于其创作者的信息。

```
boxes -l
boxes -l | more
boxes -l | less

```

输出示例：

```
43 Available Styles in "/etc/boxes/boxes-config":
-------------------------------------------------
ada-box (Neil Bird ):
    ---------------
    --           --
    --           --
    ---------------
ada-cmt (Neil Bird ):
    --
    -- regular Ada
    -- comments
    --
boy (Joan G. Stark ):
                    .-"""-.
                   / .===. \
                   \/ 6 6 \/
                   ( \___/ )
      _________ooo__\_____/______________
     /                                   \
    |   joan stark   spunk1111@juno.com   |
    |     VISIT MY ASCII ART GALLERY:     |
    | http://www.geocities.com/SoHo/7373/ |
     \_______________________ooo_________/  jgs
                    |  |  |
                    |_ | _|
                    |  |  |
                    |__|__|
                    /-'Y'-\
                   (__/ \__)
....
...
output truncated
..

```

### 在使用 vi/vim 文本编辑器时如何通过 boxes 过滤文本?

你可以在 vi 或 vim 中使用任何外部命令，比如在这个例子中，[插入当前日期和时间](http://www.cyberciti.biz/faq/vim-inserting-current-date-time-under-linux-unix-osx/)，输入：

```
!!date

```

或者

```
:r !date

```

你需要在 vim 中输入以上命令来读取 date 命令的输出，这将在当前行后面加入日期和时分秒：

```
Tue Jun 12 00:05:38 IST 2012

```

你可以用 boxes 命令做到同样的功能。如下创建一个作为示例的 shell 脚本或者c程序：

```
#!/bin/bash
Purpose: Backup mysql database to remote server.
Author: Vivek Gite
Last updated on: Tue Jun, 12 2012

```

现在输入如下（将光标移到第二行，也就是以“Purpose: ...”开头的行）

```
3!!boxes

```

瞧，你就会看到如下的输出 :

```
#!/bin/bash
/****************************************************/
/* Purpose: Backup mysql database to remote server. */
/* Author: Vivek Gite           */
/* Last updated on: Tue Jun, 12 2012                */
/****************************************************/

```

这个短片将会给你介绍boxes命令:

参见

* boxes 帮助手册

---

via: <http://www.cyberciti.biz/tips/unix-linux-draw-any-kind-of-boxes-around-text-editor.html>

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

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


开源新闻速递：BackBox Linux 4.6 发布

# 开源新闻速递：BackBox Linux 4.6 发布

### 头条消息

今天没有什么重要消息。

### 版本更迭

* 基于 Ubuntu Kernel 4.2 的 BackBox Linux 4.6 [发布](https://backbox.org/portal/blog/backbox-linux-46-released)，更新了一些黑客工具。比如 Metasploit，wxHexEditor，SE Toolkit，DirSearch Web 路径扫描工具等。另一个新特性是，将 Ruby 更新到了2.2，修复了一些小的问题。老用户可以使用下列命令进行更新：`sudo apt-get update && sudo apt-get dist-upgrade &&sudo apt-get install -f` 。新用户可以从此处进行[下载](http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Backbox-Linux-64079.shtml#download)。
<img src="content_image/album_201605_28_195241qc2qniqaq3nc3br3.jpg" alt="" title="">
* 基于 FreeBSD，专为防火墙和路由器功能定制的开源版本 pfSense 一周前发布了稳定版本 2.3.1 之后进行了首次更新，更新到 [2.3.1\_1 版本](https://blog.pfsense.org/?p=2068)，主要修复了Web GUI的安全问题，修复了另外的7个问题。Patrick Ungeheuer 发现了pfSense 存在的 Web GUI （图形用户接口)的安全问题，即 diag\_smart.php 和 diag\_routes.php 文件的命令注入漏洞。这个安全漏洞可以让低权限用户以 root 身份执行命令。pfSense 2.3.1\_1 就解决了这个问题。
* Ubuntu 16.04 LTS 发布庆功会将于7月26号举行，地点选在日本东京。
* 可以让你“衣锦夜行”的匿名 Linux 发行版 Tails 2.4 的第一个发行候选版本已经进行公开的 [beta 测试](https://tails.boum.org/news/test_2.4-rc1/index.en.html)了，最新版本将 Tor Browser 更新到了6.0，改善了非自动配置向导，实现了对 IPv4 协议分层发现路径 MTU 的支持，强化了防火墙和内核。
* Wine 1.9.11 发布测试版，对于 Direct3D 11 进行了多项改进，支持 DirectSound 混频。感兴趣的用户可以下载 Wine 1.9.11 的[源码](http://linux.softpedia.com/get/System/Emulators/Wine-148.shtml#download)自己编译。


猎头们怎么看开源

Summary: 与其说开源和大数据是一个行业，不如说他们是一个社区（community）。这也是为什么我现在特别想把我从开源中学到的东西分享给大家，特别是给那些刚刚踏入工作的新人。

# 猎头们怎么看开源

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

2012 年时候，我出席了一个开源社区的聚会，打那之后我就喜欢上了这个行业。

我做猎头很多年，现在我在 [Greythorn](http://www.greythorn.com/) 公司专门从事大数据方向招聘。我自己之前学习了几个月大数据，可是当我参加了 [OSCON](http://conferences.oreilly.com/oscon) 开源大会，才发现之前的学习多么低效率。OSCON 里聚集了非常多聪明的人，他们每个人都很愿意分享他们的心得。分享的原因不是他们想推销产品，纯粹是因为喜欢。

我很快意识到，与其说开源和大数据是一个行业，不如说他们是一个<ruby> 社区 <rp>  （ </rp> <rt>  community </rt> <rp>  ） </rp></ruby>。这也是为什么我现在特别想把我从开源中学到的东西分享给大家，特别是给那些刚刚踏入工作的新人。

### 为什么雇主喜欢开源<ruby> 贡献者 <rp>  （ </rp> <rt>  contributor </rt> <rp>  ） </rp></ruby>

我的许多客户跟我说过：一个人的技术虽然重要，但真心**喜欢**自己从事的工作更重要。如果你热爱自己的工作，即便老板不给加班工资你都忍不住想加班。

我的客户也经常问，“这个人没事儿的时候写代码吗？”“我能在哪儿找到他们的作品呢？”“他们有什么爱好呀？”这时候开源社区贡献者的优势就出来了，因为上面的问题就是给他们量身定做的。他们做的项目开源，这就是他们编码能力的例证。

### 为什么猎头在寻找开源贡献者

硬派科技行业猎头了解技术，知道自己在找一个什么样的人，这样的猎头也能正确的了解对象的技能。我发现，猎头们找到的最优秀的人才很多时候也在做开源，所以我们经常直接去开源社区寻找我们的目标。猎头们会告诉雇主，“我们找到的那个人喜欢和团队一起创造了不起的产品”，而这基本上是优秀雇主共同的要求。

所以说：如果你的项目目标是改变人类的未来，那当这些聪明人来到你的团队之后，他们自己就会爱上自己的工作。

### 开源贡献者如何得到更好的职业生涯呢

怎么让你的贡献更广为人知呢：把代码放到 Github 上；做开源项目；参加会议和研讨等等。做这些事情你会有意想不到的收获的。

可以尝试问一下自己：

* **你觉得所在的公司是否回馈开源社区这件事重要吗？**很多优秀的人才都强调这一点，回馈社区也会极大的提升他们对工作本身的满意度。
* **你在做产品是否基于开源软件？**基于开源软件的公司的文化氛围会与其他公司与众不同，这也是你选择职位时候需要考虑的问题。
* **你有没有特别想与之工作的人？**虽然你可以随时换项目，但如果团队里有你崇拜或者欣赏的人，那工作就棒极了。

假如你了解自己的人生追求，那么过滤掉那些不适合你的职位就简单多了；假如你有一个相熟的猎头，那找到相合的雇主和团队的机会就大多了。

虽然我自己不写代码，但我会把我从开源社区中学到的东西分享给大家。开源社区是由一大群聪明又乐于分享的人组成，我很开心我也是其中小小的一份子。

---

via: <https://opensource.com/business/16/5/open-source-recruiters-perspective>

作者：[Lindsey Thorne](https://opensource.com/users/lindsey-thorne) 译者：[eriwoon](https://github.com/eriwoon) 校对：[wxy](https://github.com/wxy)

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


又一次 Mindcraft 事件？关于 Linux 内核安全性的批评

Summary: Linux 内核开发很少吸引像华盛顿邮报这样主流媒体的关注，内核社区在安全方面进展的冗长功能列表就更少人看了。所以当这样一个专题发布到网上，就吸引了很多人的注意

有道理，自由軟件社區只要能夠共同意識到問題所在，就能夠做出驚人的成就

性能和安全真的不能兼得吗？

就像进地铁或车站，如果你不设安防检查工作员，人流进出就顺溜溜哒；<br />
如果每个入口都设置安防检查员，要检查每个旅客，你觉得还顺畅不？

主要还是钱的问题。

果然是 鱼和熊掌啊

# 又一次 Mindcraft 事件？关于 Linux 内核安全性的批评

Linux 内核开发很少吸引像华盛顿邮报这样主流媒体的关注，内核社区在安全方面进展的冗长功能列表就更少人看了。所以当[这样一个专题](https://lwn.net/Articles/663338/)发布到网上，就吸引了很多人的注意（LCTT 译注：华盛顿邮报发表了一篇很长的[专题文章](http://www.washingtonpost.com/sf/business/2015/11/05/net-of-insecurity-the-kernel-of-the-argument/)，批评 Linux “没有一个系统性的机制以在骇客之前发现和解决安全问题，或引入更新的防御技术”，“Linux 内核开发社区没有一个首席安全官”等等）。关于这篇文章有不同的反应，很多人认为这是对 Linux 直接的攻击。文章背后的动机很难知道，但是从历史经验来看，它也可以看作对我们早就该前进的方向的一次非常必要的推动。

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

回顾一件昏暗遥远过去的事件 - 确切地说是在 1999 年 4 月。一家叫 Mindcraft 的分析公司发布了一份[报告](http://www.mindcraft.com/whitepapers/nts4rhlinux.html)显示 Windows NT 在 Web 服务器开销方面完胜 Red Hat Linux 5.2 加 Apache。Linux 社区，包括当时还[很年轻的 LWN](https://static.lwn.net/1999/features/MindCraft1.0.php3)，对此反应很迅速而且强烈。这份报告是微软资助的 FUD 的一部分，用来消除那些全球垄断计划的新兴威胁。报告中所用的 Linux 系统有意配置成低性能，同时选择了当时 Linux 并不能很好支持的硬件，等等。

在大家稍微冷静一点后，尽管如此，事实很明显：Mindcraft 的人，不管什么动机，说的也有一定道理。当时 Linux 确实在性能方面存在一些已经被充分认识到的问题。然后社区做了最正确的事情：我们坐下来解决问题。比如，单独唤醒的调度器可以解决接受连接请求时的[惊群问题](https://en.wikipedia.org/wiki/Thundering_herd_problem)。其他很多小问题也都解决了。在差不多一年里，内核在这类开销方面的性能已经有了非常大的改善。

这份 Mindcraft 的报告，某种意义上来说，往 Linux 屁股上踢了很有必要的一脚，推动整个社区去处理一些当时被忽略的事情。

华盛顿邮报的文章明显以负面的看法看待 Linux 内核以及它的贡献者。它随意地混淆了内核问题和其他根本不是内核脆弱性引起的问题（比如，AshleyMadison.com 被黑）。不过供应商没什么兴趣为他们的客户提供安全补丁的事实，就像一头在房间里巨象一样明显。还有谣言说这篇文章后面的黑暗势力希望打击一下 Linux 的势头。这些也许都是真的，但是也不能掩盖一个简单的事实，就是文章说的确实是真的。

我们会合理地测试并解决问题。而这些问题，不管是不是安全相关，能很快得到修复，然后再通过稳定更新的机制将这些补丁发布给内核用户。比起外面很多应用程序（自由的和商业的），内核的支持工作做的非常好。但是指责我们解决问题的能力时却遗漏了关键的一点：解决安全问题终究来说是一个打鼹鼠游戏。总是会出来更多的鼹鼠，其中有一些在攻击者发现并利用后很长时间我们都还不知道（所以没法使劲打下去）。尽管 Linux 的商业支持已经非常努力地在将补丁传递给用户，这种问题还是会让我们的用户很受伤 - 只是这并不是故意的。

关键是只是解决问题并不够，一些关心安全性的开发者也已经开始尝试做些什么。我们必须认识到，缺陷永远都解决不完，所以要让缺陷更难被发现和利用。这意思就是限制访问内核信息，绝对不允许内核执行用户空间内存中的指令，让内核去侦测整形溢出，以及 [Kee Cook 在十月底内核峰会的讲话](https://lwn.net/Articles/662219/)中所提出的其他所有事情。其中许多技术被其他操作系统深刻理解并采用了；另外一些需要我们去创新。但是，如果我们想充分保护我们的用户免受攻击，这些改变是必须要做的。

为什么内核还没有引入这些技术？华盛顿邮报的文章坚定地指责开发社区，特别是 Linus Torvalds。内核社区的传统就是相对安全性更侧重于性能和功能，在需要牺牲性能来改善内核安全性时并不愿意折衷处理。这些指责一定程度上是对的；好的一面是，因为问题的范围变得清晰，态度看上去有所改善。Kee 的演讲都听进去了，而且很明显让开发者开始思考和讨论这些问题了。

而被忽略的一点是，并不仅仅是 Linus 在拒绝有用的安全补丁。而是就没有多少这种补丁在内核社区里流传。特别是，在这个领域工作的开发者就那么些人，而且从没有认真地尝试把自己的工作整合到上游。要合并任何大的侵入性补丁，需要和内核社区一起工作，为这些改动编写用例，将改动分割成方便审核的碎片，处理审核意见，等等。整个过程可能会有点无聊而且让人沮丧，但这却是内核维护的运作方式，而且很明显只有这样才能在长时间的开发中形成更有用更可维护的内核。

几乎没有人会走这个流程来将最新的安全技术引入内核。对于这类补丁可能收到的不利反应，有人觉得也许会导致“寒蝉效应”，但是这个说法并不充分：不管最初的反应有多麻烦，多年以来开发者已经合并了大量的改动。而少数安全开发者连试都没试过。

他们为什么不愿意尝试？一个比较明显的答案是，几乎没有人会因此拿到报酬。几乎所有引入内核的工作都由付费开发者完成，而且已经持续多年。公司能看到利润的领域在内核里都有大量的工作以及很好的进展。而公司觉得和它们没关系的领域就不会这样了。为实时 Linux 的开发找到赞助支持的困难就是很明显的例子。其他领域，比如文档，也在慢慢萧条。安全性很明显也属于这类领域。可能有很多原因导致 Linux 落后于防御式安全技术，但是其中最关键的一条是，靠 Linux 赚钱的公司没有重视这些技术的开发和应用。

有迹象显示局面已有所转变。越来越多的开发人员开始关注安全相关问题，尽管对他们工作的商业支持还仍然不够。对于安全相关的改变已经没有之前那样的下意识反应了。像[内核自我保护项目](https://lwn.net/Articles/663361/)这样，已经开始把现有的安全技术集成进入内核了。

我们还有很长的路要走，但是，如果能有一些支持以及正确的观念，短期内就能有很大的进展。内核社区在确定了自己的想法后可以做到很让人惊叹的事情。幸运的是，华盛顿邮报的文章将有助于提供形成这种想法的必要动力。以历史的角度看，我们很可能会把这次事件看作一个转折点，我们最终被倒逼着去完成之前很明确需要做的事情。Linux 不应该再继续讲述这个安全不合格的故事了。

---

via: <https://lwn.net/Articles/663474/>

作者：Jonathan Corbet 译者：[zpl1025](https://github.com/zpl1025) 校对：[wxy](https://github.com/wxy)

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


开源新闻速递：Chrome OS 的一个替代品 NetOS

Summary: Gentoo Linux “选择版” Live DVD 镜像发布

gentoo竟然默认是用KDE。

我觉得这个还是办不了的，但是在国内可以。<br />
毕竟墙高

只希望chromeos兼容安卓app

# 开源新闻速递：Chrome OS 的一个替代品 NetOS

### 头条消息

作为基于 Linux 内核的 Chrome OS 或 Chromium OS 的一个可能的替代品，Black Lab Software 即将[发行](http://www.pc-opensystems.com/2016/05/netos-enterprise-developer-preview-8-is.html)的 NetOS，使用了 Black Lab Linux OS 企业版中相同的技术。其第一个版本正在开发中。NetOS 的 80% 基于 Web，只有 20% 在本地，这样它的内核会更小，对文件和库的维护更少，大量的工作都由开发者在服务器端解决了。NetOS Enterprise Linux 8 基于Linux 4.2 内核，以及 Google Chrome 50，并且涵盖了其他的一些软件，比如 GIMP, Dropbox, Scribus, 和 Parole 媒体播放器，此外还有一些其他很棒的新特性。可以从网站[下载](http://www.pc-opensystems.com/2016/05/netos-enterprise-developer-preview-8-is.html) ISO 镜像抢先体验。

### 版本更迭

* 代号为“<ruby> 选择版 <rt>  Choice Edition </rt></ruby>”的 Gentoo Linux Live DVD 镜像[发布](https://wiki.gentoo.org/wiki/Project:RelEng/LiveDVD/20160514)，该版本使用了 GNU/Linux 最新的技术，比如基于 Linux 内核 4.5 、KDE Plasma 5.6 桌面环境、LibreOffice 5.1.2 办公套件、Mozilla Firefox 45.0.1 等。特别是对UEFI 机器以及 ZFS 的支持，是之前的版本所没有支持过的。可以从此处下载32位或者64位的[镜像](http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Gentoo-Linux-879.shtml#download)文件。

* 迈向 GNOME 3.22 的第二个快照版本 3.21.2 [发布](http://permalink.gmane.org/gmane.comp.gnome.devel.announce/465)。该版本并没有更新很多的核心组件或者应用，可能比较重要的改变是[对 Flatpak 软件包的支持](http://news.softpedia.com/news/gnome-software-package-manager-has-just-received-support-for-flatpak-packages-504397.shtml)。这只是 GNOME 3.22 的一个预览版本，不建议用户正式使用。GNOME 3.22 的发行版预计9月21号发布，敬请期待！


ALM：TypeScript / JavaScript 的下一代 IDE

Summary: TypeScript 是一种由微软开发的自由开源的编程语言。它是 JavaScript 的一个超集，而且实质上向这个语言添加了可选的静态类型和基于类的面向对象编程。

然后微软发布了vscode……

# ALM：TypeScript / JavaScript 的下一代 IDE

TypeScript 是一种由微软开发的自由开源的编程语言。它是 JavaScript 的一个超集，而且实质上向这个语言添加了可选的静态类型和基于类的面向对象编程等等。

如果你使用 TypeScript 开发项目，那么现在有个新的软件可以帮助到你。

[ALM](http://alm.tools/) 宣称它是“TypeScript 的下一代 IDE”，这款专为 TypeScript 设计的编辑器将会使得编程更快捷，JavaScript 开发者可以首先使用类似的 TypeScript 进行开发，然后再编译成浏览器所支持的 JavaScript 语言。

### ALM 安装很简单

要运行 ALM 这个开发工具，开发者只需要做两件事：一个可以工作的 Node.js 5 及其以上版本，一个 Google Chrome 浏览器。不支持 Firefox、 Vivaldi 和 Edge 等等其它浏览器。

然后只需要如下命令即可：

```
npm install alm -g
```

然后在终端运行 `alm` 即可。

要在 ALM 中打开文件，只需要切换到你的项目文件夹，然后运行 `alm .` 或 `alm -o .` 即可。第一个命令会在浏览器中打开一个可以访问你的项目的索引文件的 URL，然后就可以编辑了。第二个命令会自动在你的默认浏览器（chrome）中打开该 URL。

### 有许多非常酷的功能

ALM 的开发者 Basarat Ali Syed 给这个 IDE 中打包了很多功能，包括为 TypeScript 定制的格式高亮方案，支持选项卡、多面板、go-to 跳转功能、查找替换功能、实时文件格式化和实时项目格式化。

将来， ALM IDE 也会与内建的 AST 查看器、依赖查看器、命令搜索功能、光标历史、多监视器支持、错误面板、支持<ruby> 错误提示 <rp>  （ </rp> <rt>  errors on hover </rt> <rp>  ） </rp></ruby>、集成 Git、自动 TypeScript 构建和编译、实时预览 TypeScript 所输出的 JavaScript 。

你可以看看 Syed 放到文档站的动画 Gif：

你可以[在 GitHub 上找到该项目](https://github.com/alm-tools/alm)，别忘记了 star 它！


开源新闻速递：新版 KDE 分区管理器支持管理 LUKS 分区

Summary:
Parsix GNU/Linux 进行了安全更新；
Linux  4.7 内核发布了第一个 RC 版本

gparted被比下去了啊

# 开源新闻速递：新版 KDE 分区管理器支持管理 LUKS 分区

### 头条消息

专门为 KDE Plasma 5桌面环境设计的分区管理软件 KDE 分区管理器 2.2.0 [发布](https://stikonas.eu/wordpress/2016/05/27/kde-partition-manager-2-2-0/)，在这个版本中提供了大量的 LUKS 加密文件系统支持。它允许用户关闭或打开使用 LUKS 加密的卷，也支持加密文件系统重新划分大小，还可以移动关闭的 LUKS 加密卷、移除打开的 LUKS 卷、检查内部文件系统的错误等等。这是目前为止唯一一个支持 LUKS 加密文件系统调整的开源软件。

### 版本更迭

* 代号为“Atticus”的 Parsix GNU/Linux 8.5 和即将发行的代号为“Erik”的 Parsix GNU/Linux 8.10 最近都对核心组件的[安全问题](http://www.parsix.org/wiki/Security)进行了修复。包括 expat, libgd2, libndp, ImageMagick, libidn, jansson, IceDove, libarchive, QEMU, Wireshark, librsvg, WebSVN, libxstream-java, xerces-c, swift-plugin-s3, and atheme-services。还没有进行更新的“Atticus”用户可以进行更新了。
* Parsix GNU/Linux 的开发者发布了官方的 USB 镜像，允许用户使用 USB 闪存棒快速在自己机器上部署最新的 Parsix GNU/Linux 发行版，并且他们承诺很快就会提供对64位机器上 UEFI 的支持。与此同时，“Erik”的开发正在进行中，最近的构建版本采用 GNOME 3.20.1 桌面环境，鉴于 GNOME 3.20.2 已经出来了，我们期待看到采用最新 GNOME 桌面环境的发行版。

* 面向树莓派3和2的 Sabayon ARM 16.06 媒体中心版[发布](https://www.sabayon.org/article/special-release-sabayon-1606-arm)。与此同时，Sabayon ARM 16.06 的基础版镜像采用了最新的稳定版 Linux 4.4 内核。[点此下载](http://mirror.it.sabayon.org/iso/monthly/)媒体中心版和基础版镜像文件。

* Linux 4.6 内核已经发布两周了，Linus Torvalds 为我们[介绍](http://lkml.iu.edu/hypermail/linux/kernel/1605.3/02880.html)了下一个Linux内核分支 Linux 4.7 的开发周期。目前第一个发行候选版本已经可以从[官网](https://www.kernel.org/)进行下载了。这一版最显著的一个特性是对 VFS （<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  Virtual File System </rt> <rp>  ） </rp></ruby>）层的重大修改，它可能会影响所有 Linux 内核支持的文件系统。
* 在NetBSD 7.0发布7个月后，NetBSD 7.0.1 [发布](http://www.netbsd.org/releases/formal-7/NetBSD-7.0.1.html)，修复了核心组件的许多安全漏洞，改善了对 ODROID-C1 单板计算机的支持。
* MKVToolNix 9.2.0 [发布](https://www.bunkus.org/blog/2016/05/mkvtoolnix-v9-2-0-released/)，这一版没有重大特性的更改，尽管如此，还是建议用户进行更新。


Linux 给了我所有所需的工具

哈哈哈哈哈哈哈

腻害

支持！！支持！！支持！！

用于工作 用于成长

这是什么？散文？

看他网站，在菲律宾。这种质量的文章就不要发了吧？小编在干嘛？

小学生日记也发出来？

buy-telegram-members.com

What is the best shopping site for Telegram?

1 – A site that has online payment and a trust symbol

2 – A site that will immediately deliver your membership.

3 – A site that has strong support for solving your problems.

4 – A site with a positive poll is much more than a negative survey.

5 – Finally, compare prices to other sites to avoid additional costs.

# Linux 给了我所有所需的工具

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

[Linux](https://opensource.com/resources/what-is-linux) 就在我们身边。它以 Android 的形式[存在我们的手机中](http://www.howtogeek.com/189036/android-is-based-on-linux-but-what-does-that-mean/)，它[用在国际空间站中](http://www.extremetech.com/extreme/155392-international-space-station-switches-from-windows-to-linux-for-improved-reliability)，它[还是互联网的主要支柱](https://www.youtube.com/watch?v=JzsLkbwi1LA)，可是迄今为止很多人从未留意过它。对 Linux 的探索是一种很有成就感的尝试。很多人都在 Opensource.com [分享过他们与 Linux 的故事](https://opensource.com/tags/my-linux-story)。现在，轮到我了。

我依然记得我在 2008 年第一次探索 Linux 的时刻。协助我探索 Linux 的人是我的父亲，Socrates Ballais。他是菲律宾塔克洛班的一名经济学专家，也是一个技术狂热者。他教会了我许多计算机技术方面的知识，但只提倡我将 Linux 作为 Windows 崩溃后的备用操作系统。

### 从前的日子

在我们在家中购置电脑之前，我曾是一个 Windows 用户。我使用电脑玩游戏，制作文档，做那些小孩子都会用电脑做的事。我不知道什么是 Linux，更不知道它的用处。在那个时候，电脑在我心中的象征就是一个 Windows 的商标。

当我们买到第一台电脑时，我爸爸在上面安装了 Linux ([Ubuntu](http://ubuntu.com/) 8.04)。充满了好奇心的我，第一次引导进入了那个操作系统。我被它的用户界面震惊了。它非常漂亮，而且我发现它对用户很友好。在那之后的一段时间，我只会使用 Linux 它内置的几款游戏。我还是会在 Windows 中做我的家庭作业。

### 第一次安装

4 年后，我决定为家里的电脑重新安装 Windows。我同时毫不犹豫地安装了 Ubuntu。从那次开始，我（再次）爱上了 Linux。随着时间推移，我慢慢适应了 Ubuntu，还会无意地将它推荐给我的朋友。当我拿到我的第一台笔记本电脑时，我立刻在上面安装了它。

### 现在

如今，Linux 是我的默认操作系统。当我需要使用电脑做一些工作时，我会在 Linux 中完成。至于文档和幻灯片，我会通过 [Wine](https://www.winehq.org/) 来使用微软的 Office 办公软件。我会用 [Chrome 和 Firefox](https://www.google.com/chrome/browser/desktop/index.html) 来满足我的上网需要，会用 [Geary](https://wiki.gnome.org/Apps/Geary) 来收发邮件。你可以使用 Linux 来做很多很多事情。

我的大多数——并不是全部——编程工作都会在 Linux 中完成。像 [Visual Studio](https://www.visualstudio.com/en-us/visual-studio-homepage-vs.aspx) 和 [XCode](https://developer.apple.com/xcode/) 这样的基本集成开发环境 (IDE) 的缺乏教会我这个程序员如何变得灵活、如何去学习更多知识。现在，我只需要一个文本编辑器和一个编译器/解释器就可以开始编程。只有当 IDE 是我完成手头上的任务的最佳最佳工具时，我才会使用它。总而言之，Linux 给了我开发软件所需要的一切工具。

现在，我是一个名叫 [Creatomiv Studios](https://www.facebook.com/CreatomivStudios/) 的初创公司的联合创始人和首席技术官。我使用 Linux 来编写我们的最新产品 Basyang 的后端服务器代码。我还是一个业余摄影家，使用 [GIMP](https://www.gimp.org/) 和 [Darktable](http://www.darktable.org/) 来编辑、管理照片。至于团队沟通，我会使用 [Telegram](https://telegram.org/)。

### Linux 之美

很多人认为 Linux 只是为那些喜欢解决复杂问题或者在命令行中工作的人而生的操作系统。还有些人会认为它就是一个缺乏公司支持维护的垃圾。不过，我认为 Linux 是一个完美的操作系统，也是一个为创造而生的绝佳工具。所以我热爱 Linux，同时希望看到它继续成长。

---

via: <https://opensource.com/life/16/3/my-linux-story-sean-ballais>

作者：[Sean Francis N. Ballais](https://opensource.com/users/seanballais) 译者：[StdioA](https://github.com/StdioA) 校对：[wxy](https://github.com/wxy)


如何用开源经历为你的简历增加光彩

热爱开源，热爱生活！

# 如何用开源经历为你的简历增加光彩

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

在这篇文章中，我将会分享我的方法，让大家利用开源贡献在技术领域的求职中脱颖而出，成为强有力的候选者。

凡事预则立，不预则废。在你即将进入一个新的领域或者正准备熬夜修订你的简历之前，清楚地定义你正在寻找的工作的特征是值得的。你的简历是一部有说服力的作品，因此你必须了解你的观众，从而让它发挥出所有的潜力。看你简历的可能是任何需要你的技能并且能在预算之内聘用你的人。当编辑简历的时候，读一读你的简历上的内容，同时想象一下，以他们的角度怎么看待这份简历。你看起来像是一个“你”将会聘用的候选人吗？

我个人认为，对于目标职位的理想候选人所表现出来的关键特征，列出一张清单是很有帮助的。我结合了个人经验、阅读工作招聘信息、询问相同角色的同事等方面来收集这个清单。LinkedIn 和各种会议是寻求一些乐意提供这种建议的人的很好的地方。一些人喜欢谈论他们自己，那么通过邀请他们讲述他们自己的一些故事可以帮助你来拓展你的知识面，这样大家都会感觉很好。当你和其他人谈论他们的职业路线时，你不仅将会明白怎样去得到你想要从事的工作，而且还能知道你应该避免那些容易让你失去工作机会的特征或行为。

例如，对于一个不太资深的工作位置来说，关键特征列表可能如下所示：

### 技术方面：

* 拥有 CI (持续集成) 方面的经验，特别是 Jenkins
* 深厚的脚本编写背景，如 Python 和 Ruby
* 精通 Eclipse IDE
* 基本的 Git 和 Bash 知识

### 个人而言：

* 自我驱动的学习者
* 良好的交流和文档技巧
* 在团队开发方面富有经验（团队成员）
* 精通事件跟踪的工作流

### 尽管去申请职位

记住，你没有必要为了得到一份工作而去满足上面的工作描述列表中列出的每个标准。

工作细节（JD）描述了这个角色，让你一开始就知道你即将签约并为之工作几年的公司的全部信息，并且这份工作并不会让你觉得有什么挑战性，或者要求你去拓展你的技能。如果你对你无法满足清单上的技能列表而感到紧张，那么检查一下自己是否有来自其他方面的经历并能与之媲美的技能。例如，即使有些人从来没有使用过 [Jenkins](https://jenkins-ci.org/)，那他也可能从之前使用过 [Buildbot](http://buildbot.net/) 或者 [travis CI](https://travis-ci.org/) 的项目经验中明白持续集成测试的原则。

如果你正在申请一家大型公司，他们可能拥有一个专门的部门和一套完整的筛选过程来确保他们不会聘用任何不能胜任职位的候选人。也就是说，在你求职的过程中，你所能做的只是提交申请，而决定是否拒绝你是公司管理层的工作。不要过早地将工作拒之门外。

现在你已经知道了你的任务是什么，并且还知道你将需要让面试官印象深刻的技巧。下一步要做的取决于你已有的经验。

### 制造已经存在的事物之间的关联

列出一张你过去几年曾经参与过的所有项目。下面是一条快速得到这张清单的方法，跳转到你的 Github profile 中的**Repositories**标签页，并且过滤掉 fork 过来的项目。除此之外，检查下你的清单上是否有曾经处于领导地位的[Organizations](https://github.com/settings/organizations)。如果你已经有了一份简历，那么请确保你已经将你所有的经历都列在了上面。

考虑下任何一个你曾经作为一个潜在的领导经历并拥有过特权的 IRC 频道。检查下你的 Meetup 和Eventbrite 账号，并将你曾经组织过或者作为志愿者参与过的活动添加到你的清单上。浏览你前几年的日程并且标注所有志愿服务，或者有作为导师的经历，又或者参与过的公共演讲。

现在进入了比较艰难的环节了，将清单上列出的必备技能与个人经历列表上的内容一一对照，我喜欢给该工作所需要的每个特征用一个字母或者数字作为标记，然后在每一段你经历或参与过并表现出了某一特征的地方标记相同的符号。当你不太确定的时候，那就毫不犹豫地标记上它，尽管这样做更像是在吹嘘，但也好过显示出你的无能。

在我们写简历的时候常常被这样的情况所困扰，就是我们不愿冒着过分吹嘘自己的技能的风险。通常应该这样去想，“那些组织了聚会的人会表现出了更好的领导才能和计划技巧吗？”，而不是“当我组织了这个聚会的时候我是否展示出了这些技巧？”。

如果你已经充分了解了你在过去的一两年里的业余时间都是怎么度过的，而且你写了很多代码，那么你可能现在正面临着一个令人奇怪的问题，你已经拥有了太多的经验以至于一张纸的简历已经无法容纳下这些经验了。那么，如果那些列在你的清单上的经验，但无法证明你尝试去表现的任何技能的话，那么请扔掉它们吧。如果这份已经被缩短的简历清单上的内容仍然超过一张单页纸的容量的话，那么将你的经验按照一定的优先级排序，例如根据与所需技术的相关经历或丰富经验。

在这一方面，显而易见，如果你想要磨练一个独特的技能，那么你就需要一个不错的经历。考虑使用一个类似 [OpenHatch](http://openhatch.org/) 的问题聚合器，并用它来寻找一个通过使用你从没使用过的工具和技术来锻炼你的技能的开源项目。

### 让你的简历更加漂亮

一份简历是否美观取决于它的简洁度、清晰度和布局。每一段经历都应该通过足够的信息来展示给读者，并让他们立刻明白为什么你要将它包含进去，而且恰到好处。每种类型的信息都应该使用一致的文档格式来表示，一份含有斜体格式的日期或者右对齐的或者与整体风格不协调的部分绝对会让人分心。

使用工具来给你的简历排版会使之前设定的目标更加容易实现。我喜欢使用 [LaTeX](https://www.latex-project.org/)，因为它的宏系统能够使可视化一致性变得更加容易，并且大量的面试官都能一眼就认出它。你的工具的选择可能是 [LibreOffice](https://www.libreoffice.org/download/libreoffice-fresh/) 或者 HTML，这取决于你的技能和你希望怎样去发布你的简历。

记住一点，一份以电子方式提交的简历可以通过关键字被浏览到。因此，当你需要描述你的工作经历的时候使用和工作招聘告示一样的英文缩写对你的求职会有很大的帮助。为了让你的简历更加容易被面试官看到，首先就要放上最重要的信息。

程序员通常难以在为文档排版时量化平衡和布局。我最喜欢的修改和评估我的文档中的空格是否处于正确位置的技术，就是全屏显示我的 PDF 或者打印出来，然后在镜子里面查看它。如果你正在使用 LibreOffice Writer，保存一份你的简历的副本，然后将你的简历中的字体换成一种你看不懂的语言。这两种技术都强制将你从阅读的内容中脱离出来，让你以一种新的方式查看文档的整体布局。他们把你从一个“那句话措辞不当！”这样的批评转到了注意如“在这行上只有一个字，看起来挺逗”之类的事情。

最后，再次检查你的简历是否在它将要的展示的多媒体上看起来完全正确。如果你以网页的形式发布它，那么在不同屏幕大小的浏览器中测试它的效果。如果它是一份 PDF 文档，那么在你的手机或者你的朋友的电脑上打开它，并确保它所需要的字体都是可用的。

### 接下来的步骤

最后，不要让你辛苦做出来的简历内容浪费了，将它完整的复制到你的 LinkedIn 帐号上（完全使用招聘公告中的流行词），然后毫无疑问招聘人员就会找到你了。尽管他们描述的工作内容并不是恰好适合你，但是你可以利用他们的时间和兴趣来得到关于你的简历中有哪些地方好与不好的反馈信息。

---

via: <https://opensource.com/business/16/2/add-open-source-to-your-resume>

作者：[edunham](https://opensource.com/users/edunham) 译者：[kylepeng93](https://github.com/kylepeng93) 校对：[mudongliang](https://github.com/mudongliang)，[wxy](https://github.com/wxy)

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


开源新闻速递：LinuxCon Japan 2016 将在东京召开

Summary: Tor Browser 6.0 发布；

# 开源新闻速递：LinuxCon Japan 2016 将在东京召开

### 头条消息

[LinuxCon Japan 2016](http://events.linuxfoundation.org/events/linuxcon-japan) 和 [ContainerCon Japan 2016](http://events.linuxfoundation.org/events/containercon-japan) 即将在 [7 月 13 日 - 15 日](http://events.linuxfoundation.org/events/linuxcon-japan/program/schedule)于日本东京召开。Linus Torvalds 会出席。

期待已久的 Ubuntu 手机和平板设备上的 OTA-11 更新指日可待。这个版本中最期待功能可能是支持 Aethercast 技术的无线显示技术，也就是说，Ubuntu 手机/平板可以不用线缆连接到显示器即可使用桌面显示器了（这个功能目前只有魅族 PRO 5 支持）。其次，这个更新中会使用网络管理器 1.2，其 MAC 地址随机技术可以避免手机在 Wi-Fi 环境中被跟踪。另外，它的Web 浏览器改善了各个厂商设备上的 Google Hangouts 用户体验，还会降低了后台运行的选项卡的内存占用。

### 版本更迭

* 基于 [Firefox 45-ESR](https://www.mozilla.org/en-US/firefox/45.0/releasenotes/) 的 Tor Browser 6.0 发布，修复了一些安全问题，同时提供了对 HTML5 更好支持。值得一提的是，Tor Browser 6.0 告别了 SHA-1 证书，提供了更好的更新机制。现在可以下载使用咯。

* 基于 CentOS 7 Linux 的 Koozali SME Server 10 操作系统第一个 Alpha 版本[发布](https://lists.contribs.org/pipermail/updatesannounce/2016-May/000453.html)。SME Server 是为各种中小型企业设计的 GNU/Linux 发行版。
* Mesa 12.0.0 3D [宣布](https://lists.freedesktop.org/archives/mesa-announce/2016-May/000215.html)开始进行开发，第一个发行候选版本可以下载测试了。
* 基于 Ubuntu 16.04 LTS 的 ExTiX 16.3 LXQt [发布](http://www.extix.se/?p=161)，搭载了 Linux 4.6 内核，采用了轻量级的 LXQt 0.10.0 桌面环境，使用 Google Chrome 作为默认浏览器。


开源新闻速递：snap 软件包封装工具 Snapcraft 2.9 发布

Summary:
深度操作系统发布 15.2；
著名的开源、自由、跨平台的绘画软件 Krita 发布了 3.0

test

# 开源新闻速递：snap 软件包封装工具 Snapcraft 2.9 发布

### 头条消息

Canonical 为了推动其 snap 软件包格式，不但将其用在 Ubuntu 16.04 LTS 中，还对创建 snap 软件包的工具进行了更新，以期让更多的开发者将他们维护的软件包打包成 snap 格式。今天，Snapcraft [发布](https://launchpad.net/snapcraft/+milestone/2.9)了 2.9。这一版本提供了实验性的 YAML 属性 “confinement” 和 “epoch” 的支持。

可以使用下面命令来安装Snapcraft 2.9：

```
sudo apt update
sudo apt install snapcraft
sudo apt install snapcraft-examples
```

深度操作系统发布了 15.2 版本，它采用了全新的启动器展示方式和直观的搜索，增加安全启动支持，首次采用由深度内核小组进行优化编译的4.4 LTS内核，系统性能和资源占用均得到了显著提升；同时，本次版本预装广受欢迎的网易云音乐和更稳定的新版CrossOver 15。[更多详情](/article-7414-1.html)。

### 版本更迭

* 下一代分布式独立图形安装框架 Calamares 2.2.3 [发布](https://calamares.io/calamares-2.2.3-is-out/)。这一版本修复了几个 bug，增加了对 Qt 5 GUI 工具套件的支持，解决了 KPMcore 构建过程中的问题，改善了 unpackfs 模块的错误报告体验。 增加了对 locale.gen 文件的配置支持以及对不同基于 Debian 的 GNU/Linux操作系统上位置选择的支持。可以从网上进行[下载](https://github.com/calamares/calamares/releases/download/v2.2.3/calamares-2.2.3.tar.gz)了。

* 基于 Linux 的信息亭操作系统 Porteus Kiosk 4.0.0 Web Kiosk [发布](http://porteus-kiosk.org/news.html#160530)。这一版本搭载了 Linux 内核 4.4.11 LTS，基于 Mozilla Firefox 45.1.1 ESR 和 Google Chrome 50.0.2661.102 浏览器。Porteus Kiosk 4.0.0 不再对32位的 Chrome 浏览器继续支持， Tomasz Jokiel 说，“我们从现在起不再提供对32位机器的支持了”。Porteus Kiosk 4.0.0 的配置面板中加入了一个新的选项，允许用户自己选择一个拾音装置作为默认的麦克风，还有一个很棒的功能就是可以定时从一个给定的路径下载屏保幻灯片。

* 经过6个月的开发，著名的开源、自由、跨平台的绘画软件 Krita [发布](https://krita.org/item/krita-3-0-released/)了 3.0。完全移植了下一代的 Qt 5 技术，这个版本最显著的特性是对内置动画的支持，以及对大型画布和画刷的支持。目前已经可以从网上进行[下载](http://files.kde.org/krita/3/windows/krita-3.0-x64.zip)了。


Summary: 对于系统管理员来说，高效能的用户和文件管理技能是非常必要的。

如何参加（LFCS）认证？

同问！

PAM (Pluggable Authentication Modules)这段翻译在哪里啊

这段想必是原文刚刚增加的。。我们翻译、发布时都没有。不过确实关于 PAM 的介绍很少，这段值得翻译过来。

对于系统管理员来说，高效能的用户和文件管理技能是非常必要的。

# LFCS 系列第八讲：管理用户和用户组、文件权限和属性以及启用账户 sudo 访问权限

去年八月份，Linux 基金会发起了全新的 LFCS（<ruby> Linux 基金会认证系统管理员 <rp>  （ </rp> <rt>  Linux Foundation Certified Sysadmin </rt> <rp>  ） </rp></ruby>）认证，旨在让世界各地的人能够参与到中等水平的 Linux 系统的基本管理操作的认证考试中去，这项认证包括：维护正在运行的系统和服务的能力、全面监控和分析的能力以及何时向上游团队请求支持的决策能力。

*第八讲： Linux 基金会认证系统管理员*

请看以下视频，里边将描述 LFCS 认证程序。

本讲是系列教程的第八讲，在这一讲中，我们将引导你学习如何在 Linux 管理用户和用户组权限的设置，这些内容是 LFCS 认证的必备知识。

由于 Linux 是一个多用户的操作系统（允许多个用户通过不同主机或者终端访问一个独立系统），因此你需要知道如何才能有效地管理用户：如何添加、编辑、禁用和删除用户账户，并赋予他们足以完成自身任务的必要权限。

（LCTT 译注：本篇原文章节顺序有误，根据理解做了调整。）

### 添加用户账户

添加新用户账户，你需要以 root 运行以下两条命令中的任意一条：

```
# adduser [new_account]
# useradd [new_account]

```

当新用户账户添加到系统时，会自动执行以下操作：

1. 自动创建用户家目录（默认是 /home/username）。
2. 自动拷贝下列隐藏文件到新建用户的家目录，用来设置新用户会话的环境变量。

```
.bash_logout
.bash_profile
.bashrc

```
3. 自动创建邮件缓存目录 /var/spool/mail/username。
4. 自动创建与用户名相同的用户组。

#### 理解 /etc/passwd 中的内容

/etc/passwd 文件中存储了所有用户账户的信息，每个用户在里边都有一条对应的记录，其格式（每个字段用冒号隔开）如下：

```
[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]

```

* 字段 [username] 和 [Comment] 是不言自明的。
* 第二个字段中 x 表明通过用户名 username 登录系统是有密码保护的， 密码保存在 /etc/shadow 文件中。
* [UID] 和 [GID] 字段用整数表示，代表该用户的用户标识符和对应所在组的组标志符。
* 字段 [Home directory] 为 username 用户家目录的绝对路径。
* 字段 [Default shell] 指定用户登录系统时默认使用的 shell。

#### 理解 /etc/group 中的内容

/etc/group 文件存储所有用户组的信息。每行记录的格式如下：

```
[Group name]:[Group password]:[GID]:[Group members]

```

* [Group name] 为用户组名称。
* 字段 [Group password] 为 x 的话，则说明不使用用户组密码。
* [GID] 与 /etc/passwd 中保存的 GID 相同。
* [Group members] 用户组中的用户使用逗号隔开。

*添加用户账户*

#### 修改用户信息

添加用户账户之后，你可以使用 usermod 命令来修改用户信息中的部分字段，该命令基本语法如下：

```
# usermod [options] [username]

```

**设置账户的过期时间**

通过 –expiredate 标记后边接 年-月-日 格式的日期，如下：

```
# usermod --expiredate 2014-10-30 tecmint

```

**将用户添加到其他组**

使用 -aG 或者 –append –groups 选项，后边跟着用户组，如果有多个用户组，每个用户组之间使用逗号隔开。

```
# usermod --append --groups root,users tecmint

```

**改变用户家目录的默认位置**

使用 -d 或者 –home 选项，后边跟着新的家目录的绝对路径。

```
# usermod --home /tmp tecmint

```

**改变用户的默认 shell**

使用 –shell 选项，后边跟着新 shell 的路径。

```
# usermod --shell /bin/sh tecmint

```

下面，我们一次运行上述命令：

```
# usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

```

*usermod 命令例示*

扩展阅读

* [15 useradd Command Examples in Linux](http://www.tecmint.com/add-users-in-linux/)
* [15 usermod Command Examples in Linux](http://www.tecmint.com/usermod-command-examples/)

#### 锁定和解锁账户

对于已有用户账户，我们还可以：

**通过锁定密码来禁用账户**

使用 -L （大写 l）或者 –lock 选项来锁定用户密码。

```
# usermod --lock tecmint

```

**解锁用户密码**

使用 –u 或者 –unlock 选项来解锁我们之前锁定的账户。

```
# usermod --unlock tecmint

```

*锁定用户账户*

#### 删除用户账户

你可以通过 userdel --remove 命令来删除用户账户。这样会删除用户拥有的家目录和家目录下的所有文件，以及邮件缓存目录。

```
# userdel --remove [username]

```

#### 用户组管理

每次添加新用户，系统会为该用户创建同名的用户组，此时用户组里边只有新建的用户，其他用户可以随后添加进去。建立用户组的目的之一，就是为了通过对指定资源设置权限来完成对这些资源和文件进行访问控制。

比如，你有下列用户：

* user1 (主组 user1)
* user2 (主组 user2)
* user3 (主组 user3)

他们都需要对你系统里边某个位置的 common.txt 文件，或者 user1 用户刚刚创建的共享进行读写。你可能会运行下列命令：

```
# chmod 660 common.txt
或
# chmod u=rw,g=rw,o= common.txt [注意最后那个 = 号和文件名之间的空格]

```

然而，这样仅仅给文件所属的用户和用户组（本例为 user1）成员的提供了读写权限。你还需要将 user2 和 user3 添加到 user1 组，打这样做也将 user1 用户和用户组的其他文件的权限开放给了 user2 和 user3。

这时候，用户组就派上用场了，下面将演示怎么做。

**显示用户所属的用户组**

```
# groups tecmint
# id tecmint

```

**为需要对指定文件进行读写的多个用户建立用户组**

运行下列几条命令来完成：

```
# groupadd common_group # 添加新用户组
# chown :common_group common.txt # 将 common.txt 的用户组修改为 common_group
# usermod -aG common_group user1 # 添加用户 user1 到 common_group 用户组
# usermod -aG common_group user2 # 添加用户 user2 到 common_group 用户组
# usermod -aG common_group user3 # 添加用户 user3 到 common_group 用户组

```

#### 删除用户组

通过以下命令删除用户组：

```
# groupdel [group_name]

```

属于这个 group\_name 用户组的文件是不会被删除的，而仅仅是删除了用户组。

### Linux 文件权限

除了我们在 [LFCS 系列第三讲：归档/压缩文件及目录、设置文件属性和搜索文件](/article-7171-1.html) 中说到的基本的读取、写入和执行权限外，文件还有一些不常用却很重要的的权限设置，有时候把它当做“特殊权限”。

就像之前我们讨论的基本权限，这里同样使用八进制数字或者一个字母（象征性符号）表示该权限类型。

**理解 Setuid 位**

当为可执行文件设置 setuid 位之后，用户运行程序时会继承该程序属主的有效特权。由于这样做会引起安全风险，因此设置 setuid 权限的文件及程序必须尽量少。你会发现，当系统中有用户需要访问属于 root 用户的文件是所运行的程序就带有了 setuid 权限。

也就是说，用户不仅仅可以运行这个可执行文件，而且能以 root 权限来运行。比如，让我们来看看 /bin/passwd 的权限，这个可执行文件用于改变账户的密码，修改 /etc/shadow 文件。超级用户可以改变任意账户的密码，但是其他用户只能改变自己账户的密码。

*passwd 命令例示*

因此，所有用户都有权限运行 /bin/passwd，但只有 root 用户可以指定改变指定用户账户的密码。其他用户只能改变其自身的密码。

*修改用户密码*

```
# chmod o+u [filename]

```

以八进制形式来设置 setuid 位，在当前基本权限（或者想要设置的权限）前加上数字 4 就行了。

```
# chmod 4755 [filename]

```

**理解 Setgid 位**

设置 setgid 位之后，真实用户的有效 GID 变为属组的 GID。因此，任何用户都能以属组用户的权限来访问文件。另外，当目录置了 setgid 位之后，新建的文件将继承其所属目录的 GID，并且新建的子目录会继承父目录的 setgid 位。通过这个方法，你能够以一个指定的用户组身份来访问该目录里边的文件，而不必管文件属主的主属组。

```
# chmod g+s [filename]

```

以八进制形式来设置 setgid 位，在当前基本权限（或者想要设置的权限）前加上数字 2 就行了。

```
# chmod 2755 [filename]

```

**给目录设置 Setgid 位**

*给命令设置 setgid 位*

**理解<ruby> 黏连 <rp>  （ </rp> <rt>  Sticky </rt> <rp>  ） </rp></ruby>位**

文件设置了黏连位是没有意义，Linux 会忽略该位。如果设置到目录上，会防止其内的文件被删除或改名，除非你是该目录或文件的属主、或者是 root 用户。

```
# chmod o+t [directory]

```

以八进制形式来设置黏连位，在当前基本权限（或者想要设置的权限）前加上数字 1 就行了。

```
# chmod 1755 [directory]

```

若没有黏连位，任何有权限读写目录的用户都可删除和重命名其中的文件。因此，黏连位通常出现在像 /tmp 之类的目录，这些目录是所有人都具有写权限的。

*给目录设置黏连位*

### Linux 特殊文件属性

文件还有其他一些属性，用来做进一步的操作限制。比如，阻止对文件的重命名、移动、删除甚至是修改。可以通过使用 [chattr 命令](http://www.tecmint.com/chattr-command-examples/) 来设置，并可以使用 lsattr 工具来查看这些属性。设置如下：

```
# chattr +i file1
# chattr +a file2

```

运行这些命令之后，file1 成为不可变状态（即不可移动、重命名、修改或删除），而 file2 进入“仅追加”模式（仅在追加内容模式中打开）。

*通过 Chattr 命令来包含文件*

### 访问 root 账户并启用 sudo

访问 root 账户的方法之一，就是通过输入：

```
$ su

```

然后输入 root 账户密码。

倘若授权成功，你将以 root 身份登录，工作目录则是登录前所在的位置。如果是想要一登录就自动进入 root 用户的家目录，请运行：

```
$ su -

```

然后输入 root 账户密码。

*用户通过 su 切换*

执行上个步骤需要普通用户知道 root 账户的密码，这样会引起非常严重的安全问题。于是，系统管理员通常会配置 sudo 命令来让普通用户在严格控制的环境中以其他用户身份（通常是 root）来执行命令。所以，可以在严格控制用户的情况下，又允许他运行一条或多条特权命令。

* 扩展阅读：[Difference Between su and sudo User](http://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/)

普通用户通过他自己的用户密码来完成 sudo 授权。输入命令之后会出现输入密码（并不是超级用户密码）的提示，授权成功（只要赋予了用户运行该命令的权限）的话，指定的命令就会运行。

系统管理员必须编辑 /etc/sudoers 文件，才能为 sudo 赋予相应权限。通常建议使用 visudo 命令来编辑这个文件，而不是使用文本编辑器来打开它。

```
# visudo

```

这样会使用 vim（你可以按照 [LFCS 系列第二讲：如何安装和使用纯文本编辑器 vi/vim](/article-7165-1.html) 里边说的来编辑文件）来打开 /etc/sudoers 文件。

以下是需要设置的相关的行：

```
Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

```

来更加深入了解这些项：

```
Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

```

这一行指定 sudo 将要使用的目录，这样可以阻止使用某些用户指定的目录，那样的话可能会危及系统。

下一行是用来指定权限的：

```
root        ALL=(ALL) ALL

```

* 第一个 ALL 关键词表明这条规则适用于所有主机。
* 第二个 ALL 关键词表明第一个字段中所指定的用户能以任何用户身份的权限来运行相应命令。
* 第三个 ALL 关键词表明可以运行任何命令。

```
tecmint ALL=/bin/yum update
```

如果 = 号后边没有指定用户，sudo 则默认为 root 用户。本例中，tecmint 用户能以 root 身份运行 yum update 命令。

```
gacanepa    ALL=NOPASSWD:/bin/updatedb

```

NOPASSWD 关键词表明 gacanepa 用户不需要密码，可以直接运行 /bin/updatedb 命令。

```
%admin      ALL=(ALL) ALL

```

% 符号表示该行应用于 admin 用户组。其他部分的含义与对于用户的含义是一样的。本例表示 admin 用户组的成员可以通过任何主机连接来运行任何命令。

通过 sudo -l 命令可以查看，你的账户拥有什么样的权限。

*Sudo 访问规则*

### 总结

对于系统管理员来说，高效能的用户和文件管理技能是非常必要的。本文已经涵盖了这些内容，我们希望你将这些作为一个开始，然后慢慢进步。随时在下边发表评论或提问，我们会尽快回应的。

---

via: <http://www.tecmint.com/manage-users-and-groups-in-linux/>

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

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


开源新闻速递：Linux Lite 3.0 发布

Summary: 虚幻游戏引擎 Unreal Engine 4.12 发布，这一版本改动比较大。

我arch就是用的一个arc修改的mac-like主题，不过shell主题不是很喜欢，用的其他的

虚幻游戏引擎 Unreal Engine 4.12 发布，这一版本改动比较大。

# 开源新闻速递：Linux Lite 3.0 发布

### 头条消息

基于 Ubuntu 16.04 LTS 的 Linux Lite 经过了几个月的开发，[发布](https://www.linuxliteos.com/forums/release-announcements/linux-lite-3-0-final-released/)了 3.0 版本。重新打造的外观使用了 Arc GTK 主题。其创建者说：“和 2 系列不同，我们现在有了新的登录管理器、新的引导主题、Lite Software 全面改进、新的系统主题（Arc），并增加了一个共享硬件配置工具（Lite Info）。此外，还修正了许多在 Beta 版本中发现的问题，谢谢大家的反馈。”

进入了六月，这又是一个值得期待的月份， 很多开源软件都要发布其新的版本。比如 [Arch Linux](https://www.archlinux.org/) 就发布了其月度镜像 2016.06.01 版本，搭载了Linux 内核 4.5.4。可以从官网进行[下载](https://www.archlinux.org/download/)了；而另外一个滚动发行版 OpenSUSE Tumbleweed 的 [GCC 6 的迁移过程还在进行中](/article-7386-1.html)，好消息是 Linux 内核 4.6 会在本周末进入主仓库。

### 版本更迭

* Linux Kernel 4.4.12 、4.5.6 和 4.6.1 发布。
* QNAP，一家致力于提供关于存储管理、文件共享、监控以及虚拟化应用的 NAS 解决方案的台企，最近[宣称](https://www.qnap.com/i/uk/news/con_show.php?op=showone&cid=518)，要转向提供IoT (物联网)应用了。QNAP NAS 将会采用 snap 软件包格式发布其 NAS 解决方案，这样的好处就是开发者可以用同一种形式构建应用，这将会大大降低跨平台管理、迁移、重新开发的成本。
* 备受称赞的跨平台虚幻游戏引擎 Unreal Engine 4.12 [发布](https://www.unrealengine.com/blog/unreal-engine-4-12-released)，这一版本改动比较大，进行了数百项更新，修复了许多跨平台的bug，加入了许多的新特性，以及对许多新技术比如 Vulkan Mobile Renderer 的实现。Unreal Engine 4.12 引入了 Sequencer，一款实时、非线性的动画和电影工具，这个工具的功能强大，可以直播游戏记录，进行电影摄影，自动存储关键帧。值得一提的是，该版本首次对开源的虚拟现实游戏（OSVR）平台进行了支持。同事也加入了对最新版SDK的支持。目前可以从官网进行[下载](https://www.unrealengine.com/zh-CN/what-is-unreal-engine-4)了。

* Canonical 为 Ubuntu 14.04 LTS 用户[发布](http://www.ubuntu.com/usn/usn-2989-1/)了一封新的安全公告，列出了 Ubuntu 14.04 LTS 存在的一些漏洞，Ubuntu 14.04 LTS 的用户应立即进行更新。Ubuntu 14.04 LTS 将会继续支持到 2019 年。
* 紧跟着 Wine 1.9.11 之后，Wine Staging 1.9.11 也[发布](http://www.wine-staging.com/news/2016-05-19-release-1.9.11.html)了，现在可以玩 DOOM 2016 了。


开源新闻速递：可以在浏览器中运行 Kali Linux 了

Summary:
Ubuntu 16.10 将使用新的本地 DNS 解析服务；
Enlightenment 0.21.0 桌面环境即将到来。

Canonical 最近的新闻不少啊

caonical 不但是一个动作频频的公司，而且也善于宣传。

收藏，对 kali 有兴趣。<br />
另：作者竟然是棣琦妹纸～～

厉害啊

没错，棣琦现在是我们的新闻主编~

# 开源新闻速递：可以在浏览器中运行 Kali Linux 了

### 头条消息

想尝试一下渗透测试和安全验证的Linux操作系统的用户，现在可以在你的浏览器中运行 Kali Linux 脆弱性测试系统了。Kali Linux 是 BackTrack 的继任者。网络安全专家创建了一个名为 [KaliBrowser](http://jerrygamblin.com/2016/05/31/kalibrowser/) 的项目，它可以让你在浏览器中运行 Kali Linux，使用了 Kali Linux Docker 镜像、Openbox 窗口管理器和 NoVNC HTML5-based VNC 客户端等等技术。

目前 Kali Linux 的最新版本是 2016.1，官方还没有发布 Kali Linux 最新的 Docker 镜像。由于这是基于 Docker 镜像实现的，所以你首先得有个就绪的 Docker 环境，然后，用户可以在终端中运行下面命令进行安装：`sudo docker run -d -t -i -p 6080:6080 jgamblin/kalibrowser`。命令执行完成之后，只需要访问链接 `http://localhost:6080` 即可。

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

Canonical 的 Martin Pitt [宣布](https://lists.ubuntu.com/archives/ubuntu-devel/2016-May/039350.html)了一个重大消息，正在紧锣密鼓进行开发的 Ubuntu 16.10 中将使用新的本地 DNS 解析服务。由于 Ubuntu 16.10 将使用最新发布的 systemd 230，因此将基于 systemd 提供本地解析服务的 systemd-resolved 提供新的本地解析服务。这不仅更轻巧，而且可以利用 systemd-resolved 提供的各种新的网络特性，比如 systemd 230 中新提供的默认的 DNSSEC 。之前旧的本地 DNS 解析服务存在一些缺陷，比如当第一个 DNS 服务器无响应时，会延迟应答 1-10秒钟，从而使网络操作变得极慢。

### 版本更迭

* Enlightenment 0.21.0 桌面环境即将到来，它刚刚发布了最后一个 RC 版本。这一版本将会提供对 Wayland 更好的支持。Enlightenment 是一款 GNU/Linux 操作系统下自由、开源、轻量而优雅的窗口管理器和桌面环境。感兴趣的可以从官网[下载](https://www.enlightenment.org/news/e21_rc_release)。
* 虽然 Debian GNU/Linux 7 操作系统已经于今年4月进入了 LTS 支持期了，但是最近还是[新增](https://bits.debian.org/2016/06/wheezy-now-supporting-armel-and-armhf.html)了两个 ARM 架构 Armel (ARM EABI) 和 ARMhf (ARM hard-float) 指令集体系结构的[支持](https://bits.debian.org/2016/06/wheezy-now-supporting-armel-and-armhf.html)。官方对该系统的 LTS 支持截止到2018年5月31号。
* 继 Linux kernel 4.6.1, Linux kernel 4.5.6, 和 Linux kernel 4.4.12 LTS 更新之后，Linux kernel 3.14.71 LTS也进行了更新。这一版本修复了通过 NTLMSSP 协议进行CIFS匿名验证的漏洞，提供了对 Cinterion PH8 和 AHxx 无线以太网适配器的支持。
* Canonical 发布了一篇安全[通告](http://www.ubuntu.com/usn/usn-2990-1/)，对所有支持 ImageMagick 的 Ubuntu 操作系统进行了一项重要的安全更新。对一个月前 Nikolay Ermishkin 和 Stewie 发现的非常有名的 ImageTragick 攻击进行了缺陷修复。受影响的操作系统有 Ubuntu 16.04 LTS (Xenial Xerus), Ubuntu 15.10 (Wily Werewolf), Ubuntu 14.04 LTS (Trusty Tahr), 和 Ubuntu 12.04 LTS (Precise Pangolin)，这些操作系统的用户应该立即进行更新。
* Canonical [发布](http://www.zygoon.pl/2016/05/snapd-205-released-new-release-cadence.html)了用于支持 Snap 软件包的守护进程 snapd 2.0.5。Canonical 在极力推进其 Snap 软件包技术的发展，对 OpenGL 、PulseAudio 等部分进行了多处改进，看起来会有更多的游戏打包成 Snap 格式了。


开源新闻速递：NFS 安全值得关注

# 开源新闻速递：NFS 安全值得关注

### 今日关注

全世界有十分之一的 NFS（Network File System）服务配置有误，会暴露敏感文件。NFS 是一种描述程序怎么通过网络连接获取文件的计算机协议，主要是通过 111 和 2049 端口。该协议主要用于企业环境中，管理员可以允许本公司的员工通过 NFS 协议来获取数据中心的数据。对 NFS 服务的错误配置，比如使用 NFSv3 版本而不是最新的 NFSv4 版本，或者把服务公开到互联网上，都会带来灾难性的后果。通过一家美国安全公司的调查，有时候可以从安全防护很弱的服务器上获取到各种敏感数据，比如服务器的日志，服务器备份，各种网站的源码，还有服务镜像文件。这些易攻击的服务器主要分布在美国 (18,843 台服务器)、中国 (11,608)、法国 (10,744)、德国 (7,188) 和俄罗斯 (5,269)。要防止敏感数据泄露，最基本的需要先把版本更新到提供了基础验证的 NFSv4，或者如果技术上不允许进行一些更新的话，IT 管理员可以通过防火墙过滤访问。

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

### 一句话新闻

* 24岁大的罗马尼亚黑客 GhostShell 从110台配置错误的 MongoDB 服务器上截获了约三千六百万条数据，其中有三百六十万带有密码，今天他将这些数据放到网上供人公开下载，链接发布到了 pastebin。
* PCLinuxOS 64 MATE 2016.06 版本可以[下载](http://www.pclinuxos.com/forum/index.php/topic,137708.0.html)了。这一更新版本搭载了 MATE 1.14 桌面环境，以及 LibreOffice 5.1 办公套件。
* 开源、跨平台的电子书管理工具 Calibre 2.58 发布，改善了对最新的 Qt 5.x 技术的支持，这一版本的一个新特性是实现了一个可以忽略 HTML 标签的文本搜索工具，使得搜索更加便捷。
* 代号为“Sarah” 的 Linux Mint 18 开发接近完成了，下周就会发布 Beta 版本，敬请期待。


儿童编程语言进化史

呃…… 我以为现在儿童学python了，我小学时候是QBasic……

# 儿童编程语言进化史

随着奥巴马总统的全民学习计算机（#CSforall）的倡议以及人们对 STEM （<ruby> 科学 <rp>  （ </rp> <rt>  Science </rt> <rp>  ） </rp></ruby>、<ruby> 技术 <rp>  （ </rp> <rt>  Technology </rt> <rp>  ） </rp></ruby>、<ruby> 工程 <rp>  （ </rp> <rt>  Engineering </rt> <rp>  ） </rp></ruby>和<ruby> 数学 <rp>  （ </rp> <rt>  Mathematics </rt> <rp>  ） </rp></ruby>）的日益关注，表明我们到了需要建立儿童计算机教育的标准和最佳实践的时候了。业内一致认为，可视化编程是教授给孩子们计算机科学和计算思想的最好方式，这样可以摆脱艰涩的编程语法，让孩子们在很小的时候就可以灵活地掌握软件编程的精髓。

### 改进中的 Logo 语言

在过去的五十年，设计师们不断改进 Seymour Papert 创造的 Logo 编程语言（LCTT 译注：应该有同学见过那个“小乌龟”），出现了一大批界面稍有不同而核心思想相同的编程语言。当前的教学标准是基于<ruby> 模块 <rp>  （ </rp> <rt>  blocks </rt> <rp>  ） </rp></ruby>的编程方式，这要归功于 MIT 的 Scratch 编程语言的流行。在 [CSTA 的 K-12 计算机科学教学标准](https://csta.acm.org/Curriculum/sub/K12Standards.html)中，对于 K-5 年级，要求达到“使用基于模块的可视编程语言来构建和测试解决方案”的编程能力。

### 越来越年轻化

计算机科学教育的另外一个趋势是受众越来越年轻。研究表明，[才仅仅五岁的孩子](http://www.wired.com/2013/09/ap_code/)就能够掌握计算机编程的概念，所以这是必然的趋势。要教还不认识字的孩子们学习编程，就需要避免使用文字。最近像 Scratch Jr 和 Code.org 的第一阶段课程就在基于模块的编程语言中使用图标替代了文字。

### 机器人编程

看见你的代码出现在生活中是一件神奇的事情。早在本世纪初，乐高和 MIT 就合作了一个项目，将基于模块的编程带到了现实世界。学生们可以在计算机上写程序，然后将其下载到他们搭建的机器人里。早期的 RIS（<ruby> 机器人创造系统 <rt>  robotics invention system </rt></ruby>）看起来十分像 Scratch。

在<ruby> 乐高机器人 <rp>  （ </rp> <rt>  Lego Mindstorms </rt> <rp>  ） </rp></ruby> 2013 版The 2013 中虽然变得更加复杂，但是其大部分所做的事情同之前的版本一样。现在可以给模块增加输入参数，以指定距离、时间、输出等等。

Martin Exner 创建了一幅[简明的信息图](http://constructingkids.com/2013/05/15/vpl/)，概括了由 Logo 以及更近一些的 Scratch 衍生而来的这些编程语言。许多 Logo 语言的衍生语言都是围绕着特定场景的，比如创建游戏、制作 3D 故事情节环境、绘制图片、机器人编程，甚至可以控制虚拟鱼缸。这种方式吸引了许多不同的孩子们，但是许多孩子在学习编写一段程序仍然感觉有些困难。

### Logo 之上的编程思想

在现实生活中，计算机编程通常需要考虑各种类型的输入，并且同时还要动态处理各种逻辑判断。让我们举一个判断起床后要做什么的简单例子：如果是周六日，我们会去外面玩；如果是周一，我们需要穿上运动服；如果是周四，我们需要倒垃圾；而不是周末的日子，我们需要去上学。下面展示了用 Scratch 实现的逻辑。

除了这些基于模块的编程语言，还有一种新的语言采用了不同的方式来教孩子们编程。2015年，[Wonder Workshop](http://makewonder.com/) 设计一个名为 Wonder 的新编程语言，采用的是[基于流的编程](http://www.jpaulmorrison.com/fbp/fbp2.htm)界面。Wonder 可以让学生们将注意力放在一些预先定义好的功能单元（或语句）的连接上，来构建一个<ruby> 状态机 <rp>  （ </rp> <rt>  state machine </rt> <rp>  ） </rp></ruby>。在任何时刻，机器人都是一个单一的给定状态；它会做一些操作，给一些输入就会让它改为做不同的操作。

下图展示了如何使用基于流的方式来判断起床后的任务。

除了摆脱了线性编程范式，这种编程语言还提供了一种不同的计算思想，可以让学生们以一种容易掌握的方式来模拟响应现实中的变化。学生们可以更容易的把问题分解成小的部分，然后用这些部分来解决复杂的问题。学生们在解决问题时只需要一次关注一个问题。这个过程称之为分解，则既是计算机领域的基础知识，也是 Wonder 的设计目的。

在我们的每天的生活中有很多机器人和状态机的例子，而且它们变得越来越常见了。当你投入了正确组合的钱币之后，自动售货机就给你对应的食物。自动驾驶汽车会根据它周围的障碍物来决定该怎么移动。状态机也可以进一步对大量问题进行建模，包括语言解析、人工智能、通讯协议、游戏中的角色变化，甚至神经网络。

随着机器人应用的越来越广泛，教师们正在接受[培训](http://www.fastcompany.com/3056644/most-creative-people/as-schools-emphasize-computer-science-how-do-we-teach-teachers-to-code)，把基于模块的编程作为教授孩子们计算机科学的标准。随着它进入到越来越多的课堂，我们应该思考这是否是一个正确的方向？还有没有其他更好教授孩子们计算机编程的方法。


开源新闻速递：Linux AIO Ubuntu 16.04 发布

Summary:
Debian GNU/Linux 7 系列的最后一个维护版本 7.11 发布；
VirtualBox 5.1 中将不再依赖内核 DKMS。

关于VirtualBox 5.1的改进，是一个不错的消息！

# 开源新闻速递：Linux AIO Ubuntu 16.04 发布

### 今日关注

Linux AIO Ubuntu 16.04 发布，这是一个单独的 ISO 文件，但是里面包含了所有的 Ubuntu 16.04 LTS DVD 镜像：Ubuntu 16.04 LTS、Ubuntu MATE 16.04 LTS、Kubuntu 16.04 LTS、Xubuntu 16.04 LTS、Lubuntu 16.04 LTS 和 Ubuntu GNOME 16.04 LTS。有了 Linux AIO Ubuntu 16.04，只用一个 USB 棒或者 DVD 光盘就可以帮朋友或者客户安装上面所有的系统了，而不用安装一个系统换一个 USB 棒。

现在已经可以从官网进行[下载](http://linuxaio.net/)了。有三种镜像可供选择，32位，64位的，以及混合版。值得注意的是，由于网站对文件大小的限制，Linux AIO Ubuntu 16.04 镜像文件分成了两个卷宗，采用 7z 的压缩算法进行压缩。因此，要得到完整的镜像文件，需要下载这两部分文件，并提取出第一份文件，然后将镜像文件写入到不小于8GB的USB棒或者DVD光盘上。更多详情参见[官网](http://linuxaio.net/)。

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

### 新闻摘要

* 代号为 “Wheezy” 的 Debian GNU/Linux 7.11 [发布](https://www.debian.org/News/2016/2016060402)，作为第七系列的最后一次更新，目前已经可以进行下载了。同一天，代号为 "Jessie" 的 Debian 8.5 GNU/Linux 也[发布](https://www.debian.org/News/2016/20160604)了。
* Oracle [发布](https://blogs.oracle.com/virtualization/entry/oracle_vm_virtualbox_5_1)了 VirtualBox 5.1 的第一个 Beta 版本。在 VirtualBox 5.1 中安装的 Linux 系统将不再依赖 DKMS 进行Linux内核模块重建，因为这意味着在更新你的 Linux 的内核包时不需要重新编译 VirutualBox 模块。同时这个版本提供对 Python 3 提供了更好支持。
* 研究者在计算机芯片上开发出了硬件级别的后门，这样的后门就更不容易被发现了。这个后门是在芯片上千的组件中的一个类似的组件。正常的组件都是以0和1的状态进行工作，不过这个后门像晶体管，作为一个电容器工作，会存储接受到的每一条命令。该后门在运行恶意代码时会启动，随后就会关闭。


NodeOS：Node 爱好者的 Linux 发行版

Summary: 如果你之前不知道的话，NodeOS 是首个架构在 Linux 内核之上的由 Node.js 和 npm 驱动的操作系统。

我靠，.js 果然出系统了。

满是只有一行代码的包么？

哈哈哈哈~

# NodeOS：Node 爱好者的 Linux 发行版

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

[NodeOS](http://node-os.com/) 是一款基于 [Node.js](https://nodejs.org/en/) 的操作系统，自去年其首个[发布候选版](https://github.com/NodeOS/NodeOS/releases/tag/v1.0-RC1)之后正朝着它的1.0版本进发。

如果你之前不知道的话，NodeOS 是首个架构在 [Linux](http://itsfoss.com/tag/linux/) 内核之上的由 Node.js 和 [npm](https://www.npmjs.com/) 驱动的操作系统。[Jacob Groundwater](https://github.com/groundwater) 在2013年中期介绍了这个项目。该操作系统中用到的主要技术是：

* **Linux 内核**: 这个系统建造在 Linux 内核上
* **Node.js 运行时**: Node 作为主要的运行时环境
* **npm 包管理**: npm 作为包管理

NodeOS 源码托管在 [Github](https://github.com/nodeos/nodeos) 上，因此，任何感兴趣的人都可以轻松贡献或者报告 bug。用户可以从源码构建或者使用[预编译镜像](https://github.com/NodeOS/NodeOS/releases)。构建过程及快速起步指南可以在项目仓库中找到。

NodeOS 背后的思想是提供足够 npm 运行的环境，剩余的功能就可以让 npm 包管理来完成。因此，用户可以使用多达大约 250,000 个软件包，并且这个数目每天都还在增长。所有的都是开源的，你可以根据你的需要很容易地打补丁或者增加更多的包。

NodeOS 核心开发被分离成了不同的层面，基本的结构包含：

* **barebones** – 带有可以启动到 Node.js REPL 的 initramfs 的自定义内核
* **initramfs** – 用于挂载用户分区以及启动系统的 initram 文件系统
* **rootfs** – 存放 linux 内核及 initramfs 文件的只读分区
* **usersfs** – 多用户文件系统(如传统系统一样)

NodeOS 的目标是可以在任何平台上运行，包括： **实际的硬件（用户计算机或者 SoC）**、**云平台、虚拟机、PaaS 提供商，容器**（Docker 和 Vagga）等等。如今看来，它做得似乎不错。在3.3号，NodeOS 的成员 [Jesús Leganés Combarro](https://github.com/piranna) 在 Github上[宣布](https://github.com/NodeOS/NodeOS/issues/216)：

>
> **NodeOS 不再是一个玩具系统了**，它现在开始可以用在有实际需求的生产环境中了。
>
>
>

因此，如果你是 Node.js 的死忠或者乐于尝试新鲜事物，这或许值得你一试。在相关的文章中，你应该了解这些[Linux 发行版的具体用法](http://itsfoss.com/weird-ubuntu-based-linux-distributions/)

---

via: <http://itsfoss.com/nodeos-operating-system/>

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

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


NXP 发布了一块世界上最小的64位物联网 ARM 处理器

第二段末句“该处理器在德国纽伦堡的Embedded World 2016 上揭开了什么的面纱。”应该为“神秘的面纱”吧。

汗。。

# NXP 发布了一块世界上最小的64位物联网 ARM 处理器

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

[NXP 半导体](http://www.nxp.com/)发布了一块声称世界上最小的用于物联网(IoT)的低功耗64位ARM处理器。

这片小型的QorIQ LS1012A为电池供电、大小受限的应用提供了网络级的安全和性能加速。这包括了运行物联网应用，或者任何智能及可连接的设备。如果物联网能在2020达到1.7万亿美金的潜力（由IDC研究员估算市场得出），那么它将需要像NXP这样的处理器，该处理器在德国纽伦堡的Embedded World 2016 上揭开了神秘的面纱。

该芯片带有64位ARMv8芯片，拥有网络包加速及内置的安全。它占用9.6平方毫米的空间，并且大约消耗1瓦特的电力。潜在的应用包括下一代的物联网网关、可携带娱乐平台、高性能可携带存储应用、移动硬盘、相机的移动存储、平板及其他可充电的设备。

除此之外，LS1012A是第一款为最新兴起的基于对象的存储方案设计的处理器，基于对象存储通过智能硬盘直接连接到以太网数据中心。处理器必须足够小才能直接集成在硬盘的集成电路上。

NXP的高级副总裁及数字网络部的经理Tareq Bustami说：“突破性组合了低功耗、占用空间小及网络级性能的NXP LS1012处理器是消费者、物联网相关应用的理想选择。独有地将这些能力结合到一起解放了物联网设计者及开发者，使得他们可以在这个高增长的市场中设计并创造更多创新产品。”

NXP说这是唯一一个1瓦特功耗、64位的、并将这些高速外设综合到一个芯片中的处理器，这意味着更低的系统级功耗。归功于创新性的封装，该处理器可以运用在低成本的电路板中。

NXP的LS1012A可以在2016年4月开始发货，并且现在可以订货。NXP在全球35个国家拥有超过4,5000名员工。

---

via: <http://venturebeat.com/2016/02/21/nxp-unveils-a-small-and-tiny-64-bit-arm-processor-for-the-internet-of-things/>

作者：[DEAN TAKAHASHI](http://venturebeat.com/author/dean-takahashi/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


七步开始你的 Linux 系统管理员生涯

# 七步开始你的 Linux 系统管理员生涯

Linux 现在是个大热门。每个人都在寻求 Linux 才能。招聘人员对有 Linux 经验的人求贤若渴，还有无数的职位虚位以待。但是如果你是 Linux 新手，又想要赶上这波热潮，该从何开始下手呢？

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

### 1、安装 Linux

这应该是不言而喻的，但学习 Linux 的第一关键就是安装 Linux。LFS101x 和 LFS201 课程都包含第一次安装和配置 Linux 的详细内容。

### 2、 完成 LFS101x 课程

如果你是完完全全的 Linux 新手，最佳的起点是我们的免费 Linux 课程 [LFS101x Introduction to Linux](https://www.edx.org/course/introduction-linux-linuxfoundationx-lfs101x-2)。这个在线课程放在 edX.org，探索 Linux 系统管理员和终端用户常用的各种工具和技能以及日常的 Linux 工作环境。该课程是为有一定经验，但较少或没有接触过 Linux 的电脑用户设计的，不论他们是在个人还是企业环境中工作。这个课程会从图形界面和命令行两个方面教会你有用的 Linux 知识，让你能够了解主流的 Linux 发行版。

### 3、 看看 LFS201 课程

在你完成 LFS101x 之后，你就可以开始挑战 Linux 中更加复杂的任务了，这是成为一名专业的系统管理员所必须的。为了掌握这些技能，你应该看看 [LFS201 Essentials of Linux System Administration](http://training.linuxfoundation.org/linux-courses/system-administration-training/essentials-of-system-administration) 这个课程。该课程对每个话题进行了深度的解释和介绍，还有大量的练习和实验，帮助你获得相关主题实际的上手经验。

如果你更愿意有个教练，或者你的雇主想将你培养成 Linux 系统管理员的话，你可能会对 LFS220 Linux System Administration 感兴趣。这个课程有 LFS201 中所有的主题，但是它是由专家专人教授的，帮助你进行实验以及解答你在课程主题中的问题。

### 4、 练习！

熟能生巧，和对任何乐器或运动适用一样，这对 Linux 来说也一样适用。在你安装 Linux 之后，经常使用它。一遍遍地练习关键任务，直到你不需要参考材料也能轻而易举地完成。练习命令行的输入输出以及图形界面。这些练习能够保证你掌握成为成功的 Linux 系统管理员所必需的知识和技能。

### 5、 获得认证

在你完成 LFS201 或 LFS220 并且充分练习之后，你现在已经准备好获得系统管理员的认证了。你需要这个证书，因为你需要向雇主证明你拥有一名专业 Linux 系统管理员必需的技能。

现在有一些不同的 Linux 证书，它们每个都有其独到之处。但是，它们里大部分不是在特定发行版（如红帽）上认证，就是纯粹的知识测试，没有演示 Linux 的实际技能。<ruby> Linux 基金会认证系统管理员 <rp>  （ </rp> <rt>  Linux Foundation Certified System Administrator </rt> <rp>  ） </rp></ruby>证书对想要一个灵活的，有意义的初级证书的人来说是个不错的选择。

### 6、 参与进来

如果你所在的地方有本地 <ruby> Linux 用户组 <rp>  （ </rp> <rt>  Linux Users Group </rt> <rp>  ） </rp></ruby>（LUG）的话，这时候你可以考虑加入他们。这些组织通常由各种年龄和经验水平的人组成，所以不管你的 Linux 经验水平如何，你都能找到和你类似技能水平的人互助，或是更高水平的 Linux 用户来解答你的问题以及介绍有用的资源。要想知道你附近有没有 LUG，上 meet.com 看看，或是附近的大学，又或是上网搜索一下。

还有不少在线社区可以在你学习 Linux 的时候帮助你。这些站点和社区向 Linux 新手和有经验的管理员都能够提供帮助和支持：

* [Linux Admin subreddit](https://www.reddit.com/r/linuxadmin)
* [Linux.com](http://www.linux.com/)
* [training.linuxfoundation.org](http://training.linuxfoundation.org/)
* <http://community.ubuntu.com/help-information/>
* <https://forums.opensuse.org/forum.php>
* <http://wiki.centos.org/Documentation>

### 7、 学会热爱文档

最后但同样重要的是，如果你困在 Linux 的某些地方，别忘了 Linux 包含的文档。使用命令 man（manual，手册），info 和 help，你从系统内就可以找到 Linux 几乎所有方面的信息。这些内置资源的用处再夸大也不为过，你会发现你在生涯中始终会用到，所以你可能最好早点掌握使用它们。

想要了解更多开始你 Linux IT 生涯的信息？查看我们免费的电子书“[开始你 Linux IT 生涯的简短指南](http://training.linuxfoundation.org/sysadmin-it-career-guide)”。

---

via: <http://www.linux.com/news/featured-blogs/191-linux-training/834644-7-steps-to-start-your-linux-sysadmin-career>

作者：<linux.com> 译者：[alim0x](https://github.com/alim0x) 校对：[wxy](https://github.com/wxy)

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


开源新闻速递：Linux 4.7 内核发布了第二个 RC 版本

Summary: 被很多 Linux 发行版都作为默认桌面主题的 Arc GTK 主题发布了相配合的图标主题  Arc Icon

# 开源新闻速递：Linux 4.7 内核发布了第二个 RC 版本

### 今天关注

Linux 4.7 内核[发布](http://lkml.iu.edu/hypermail/linux/kernel/1606.0/03592.html)了第二个 RC 版本。

被很多 Linux 发行版都作为默认桌面主题的 [Arc GTK 主题](https://github.com/horst3180/arc-theme)发布了相配合的图标主题 [Arc Icon](https://github.com/horst3180/arc-icon-theme)，不过目前该图标主题还不够完整，缺少很多图标。不过该图标主题是依赖于非常流行 Moka 图标主题，所以如果你已经安装了 Moka 图标主题，那么缺失的图标会以 Moka 图标替代，否则就要默认的 GTK 图标替代。

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

### 新闻摘要

* [DebEX](http://debex.exton.net/) KDE Live DVD 160604 发布，它是基于 Debian GNU/Linux 8.4 开发的。
* 另外一个同样基于 Debian 的发行版 [Q4OS](http://q4os.org/) 发布了 [1.4.11](http://q4os.org/blog.html#news160606)。
* Qt 5.7.0 [发布](http://blog.qt.io/blog/2016/06/03/qt-5-7-0-release-candidate-available/)了 RC 版本，正式版本会在几周后发布。
* Docker [发布](https://github.com/docker/docker/releases/tag/v1.11.2)了 1.11 的第二个维护版本。
* Debian 发布了 Chromium 51 的多个[重要安全补丁](https://lists.debian.org/debian-security-announce/2016/msg00171.html)，请用户尽快升级。


混合云计算的 9 大关键趋势

Summary: 自从几年前云计算的概念受到IT界的关注以来，公有云、私有云和混合云这三种云计算方式都有了可观的演进。其中混合云计算方式是最热门的云计算方式，在接受调查的公司中，有88%的公司将混合云计算摆在至关重要的地位。

# 混合云计算的 9 大关键趋势

自从几年前云计算的概念受到IT界的关注以来，公有云、私有云和混合云这三种云计算方式都有了可观的演进。其中混合云计算方式是最热门的云计算方式，在接受调查的公司中，有[88%的公司](https://www.greenhousedata.com/blog/hybrid-continues-to-be-most-popular-cloud-option-adoption-accelerating)将混合云计算摆在至关重要的地位。

混合云计算的疾速演进意味着一两年前的传统观念已经过时了。为此，我们询问了几个行业分析师，混合云在2016年的走势将会如何，我们得到了几个比较有意思的答案。

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

### **2016年可能是我们将混合云投入使用的一年**

混合云从本质上来说依赖于私有云，这对企业来说是比较难实现的。事实上，亚马逊，谷歌和微软的公有云已经进行了大量的投资，并且起步也比较早。私有云拖了混合云发展和使用的后腿。

私有云没有得到这么多的投资，这是有私有云的性质决定的。私有云意味着维护和投资你自己的数据中心。而许多公有云提供商正在推动企业减少或者消除他们的数据中心。

然而，得益于 OpenStack 的发展和微软的 Azure Stack ，这两者基本上就是封装在一个盒子里的私有云，我们将会看到私有云慢慢追上公有云的发展步伐。支持混合云的工具、基础设施和架构也变得更加健壮。

### **容器，微服务和 unikernels 将会促进混合云的发展**

分析师预言，到2016年底，这些原生云技术会或多或少成为主流的。这些云技术正在快速成熟，将会成为虚拟机的一个替代品，而虚拟机需要更多的资源。

更重要的是，他们既能工作在在线场景，也能工作在离线场景。容器化和编排允许快速的扩大规模，进行公有云和私有云之间的服务迁移，使你能够更容易移动你的服务。

### **数据和相关性占据核心舞台**

所有的云计算方式都处在发展模式。这使得云计算变成了一个技术类的故事。咨询公司 [Avoa](http://avoa.com/2016/01/01/2016-is-the-year-of-data-and-relevance/)称，随着云趋于成熟，数据和相关性变得越来越重要。起初，云计算和大数据都是关于怎么得到尽可能多的数据，然后他们担心如何处理这海量的数据。

2016年，相关组织将会继续锤炼如何进行数据收集和使用的相关技术。在必须处理的技术和文化方面仍然有待提高。但是2016年应该重新将关注点放在从各个方面考虑的数据重要性上，发现最相关的信息，而不只是数据的数量。

### **云服务将超越按需工作负载**

AWS(Amazon Web Services) 起初是提供给程序员或者是开发人员能够快速启动虚拟机、做一些工作然后离线的一个地方。本质上是按需使用，要花费更多的钱才能让这些服务持续运行、全天候工作。

然而，IT 公司正开始作为服务代理，为内部用户提供各种 IT 服务。可以是内部 IT 服务，公有云基础架构提供商，平台服务和软件服务。

他们将越来越多的认识到像云管理平台这样的工具的价值。云管理平台可以提供针对不同服务的基于策略的一致性管理。他们也将看到像提高可移植性的容器等技术的价值。然而，云服务代理，在不同云之间快速移动工作负载从而进行价格套利或者类似的原因，仍然是行不通的。

### **服务提供商转变成了云服务提供商**

到目前为止，购买云服务成了直销模式。AWS EC2 服务的使用者通常变成了购买者，要么通过官方认证渠道，要么通过影子 IT。但是随着云服务越来越全面，提供的服务菜单越来越复杂，越来越多的人转向了经销商，服务提供商转变成了他们 IT 服务的购买者。

2nd Watch (2nd Watch 是为企业提供云管理的 AWS 的首选合作伙伴)最近的一项调查发现，在美国将近85%的 IT 高管愿意支付一个小的溢价从渠道商那里购买公有云服务，如果购买过程变得不再那么复杂。根据调查，这85%的高管有五分之四的愿意支付额外的15%或者更多。三分之一的受访高管表示，这些有助于他们购买、使用和管理公有云服务。

### **物联网和云对于2016年的意义好比移动和云对2012年的意义**

物联网获得了广泛的关注，更重要的是，物联网已经从测试场景进行了实际应用。云的分布式特性使得云成为了物联网非常重要的一部分，对于工业物联网，与后端系统交互的机械和重型设备，混合云将会成为最自然的驱动者，连接，数据采集和处理将会发生在混合云环境中，这得益于私有云在安全和隐私方面的好处。

### **NIST 对云的定义开始瓦解**

2011年，美国国家标准与技术研究院发布了“ [NIST 对于云计算的定义](http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf)”（PDF），这个定义成为了私有云、公有云、混合云和 aaS 模板的标准定义。

然而随着时间的推移，定义开始改变。IaaS 变得更加复杂，开始支持 OpenStack，[Swift](https://wiki.openstack.org/wiki/Swift) 对象存储和神经网络这样的项目。PaaS 似乎正在消退，因为 PaaS 和传统的中间件开发几乎无异。SaaS，只是通过浏览器进行访问的应用，也正在失去发展动力，因为许多 app 和服务提供了许多云接口，你可以通过各种手段调用接口，不仅仅通过浏览器。

### **分析变得更加重要**

对于混合云计算来说，分析将会成为一个巨大的增长机遇，云计算具有规模大、灵活性高的优势，使得云计算非常适合需要海量数据的分析工作。对于某些分析方式，比如高度敏感的数据，私有云仍然是主导地位，但是私有云也是混合云的一部分。因此，无论如何，混合云计算胜出。

### **安全仍然是一个非常紧迫的问题**

随着混合云计算在2016年的发展，以及对物联网和容器等新技术的引进，这同时也增加了更多的脆弱可攻破的地方，从而导致数据泄露。先增加使用新技术的趋势，然后再去考虑安全性，这种问题经常发生，同时还有缺少经验的工程师不去考虑系统的安全问题，总有一天你会尝到灾难的后果的。

当一项新技术出来，管理规范总是落后于安全问题产生后，然后我们才考虑去保护技术。容器就是一个很鲜明的例子。你可以从 Docker 下载各种示例容器，但是你知道你下载的东西来自哪里么？在人们在对容器内容不知情的情况下下载并运行了容器之后，Docker 不得不重新加上安全验证。

像 Path 和 Snapchat 这样的移动技术在智能手机市场火起来之后也出现了重大的安全问题。一项新技术被恶意利用无可避免。所以安全研究人员需要通过各种手段来保证新技术的安全性，很有可能在部署之后才会发现安全问题。

---

via: <http://www.datamation.com/cloud-computing/9-key-trends-in-hybrid-cloud-computing.html>

作者：[Andy Patrizio](http://www.datamation.com/author/Andy-Patrizio-90720.html) 译者：[棣琦](https://github.com/sonofelice) 校对：[wxy](https://github.com/wxy)

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


开源新闻速递：OpenSUSE 的 OBS 可用于构建大多数发行版的软件包

Summary:
Debian GNU/Linux 9 创意桌面征集启动；
Firefox 47 发布。

很久没用 OBS 了。

# 开源新闻速递：OpenSUSE 的 OBS 可用于构建大多数发行版的软件包

### 今日关注

OpenSUSE 的 Open Build Service （OBS）2.7 [发布](https://lists.opensuse.org/opensuse-announce/2016-06/msg00000.html)。它类似于 Canonical 的 Launchpad ，应用开发者可以创建软件库并自动推送更新给用户；也类似于 PPA ，但是它可以用于多个 Linux 发行版。

“最新的 OBS 已经部署到我们的<ruby> 引用服务器 <rp>  （ </rp> <rt>  reference server </rt> <rp>  ） </rp></ruby>上了。” OpenSUSE 的 Henne Vogelsang 说，“所有开源开发者都可以使用引用服务器 [http://build.opensuse.org](http://build.opensuse.org/) 来为各种流行的发行版构建软件包，包括 openSUSE、Debian、Fedora、Ubuntu、 Arch、Red Hat Enterprise Linux 和 SUSE Linux Enterprise。”

这个版本主要实现了三个新特性。

* 自动对软件仓库的移动和 GNU/Linux 操作系统发布更新进行跟踪；
* 对 Git 的集成，允许应用开发者进行持续构建；
* 实验性的 KIWI 导入功能，开发者可以从 SUSE Studio 服务导入 ISO 镜像。

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

### 新闻摘要

* 代号为 “Stretch” 的 Debian GNU/Linux 9 创意桌面征集启动。截止日期为今年9月5号。详情见[官网](https://wiki.debian.org/DebianDesktop/Artwork/Stretch)。
* Firefox 47 发布，这一版本提供了对<ruby> 同步标签 <rp>  （ </rp> <rt>  Synced Tabs </rt> <rp>  ） </rp></ruby>的支持，对用户代理字符串的自定义支持，以及一个新的性能监控页面（about:performance）。用户可以进行下载体验了。
* 基于 Ubuntu 的 [ChaletOS](https://sourceforge.net/projects/chaletos/) 16.04.1 现在可以进行[下载](https://sourceforge.net/projects/chaletos/)了。ChaletOS 提供了一个类似 Windows 系统的桌面，风格类似 Windows 7 和 Vista 系统，当然可以添加一些图标让系统看上去更像 Windows 10 。
* 预计今年九月发布的 GNOME 3.22 桌面环境最新动态：GNOME 控制中心应用的图标由以前的标准图标替换成了现在具有象征意义的图标；并对控制面板进行了分组。


如何启用 Apache 的 PHP-FPM 多实例

Summary: 在本文中，我将要讨论的是，在 CentOS 7 服务器上，于 Nginx 和 Apache 之上安装 PHP-FPM，以及如何来通过 CPanel 管理这些安装好的多个 PHP-FPM 实例。

# 如何启用 Apache 的 PHP-FPM 多实例

PHP-FPM 作为 FastCGI 进程管理器而广为熟知，它是 PHP FastCGI 实现的改进，带有更为有用的功能，用于处理高负载的服务器和网站。下面列出其中一些功能：

### 新功能

* 拥有具有优雅（graceful）启动/停止选项的高级进程管理能力。
* 可以通过不同的用户身份/组身份来以监听多个端口以及使用多个PHP配置。
* 错误日志记录。
* 支持上传加速。
* 特别用于在处理一些耗时任务时结束请求和清空所有数据的功能。
* 同时支持动态和静态的子进程重生。
* 支持IP地址限制。

在本文中，我将要讨论的是，在运行 CPanel 11.52 及 EA3 （EasyApache）的 CentOS 7 服务器上，于 Nginx 和 Apache 之上安装 PHP-FPM，以及如何来通过 CPanel 管理这些安装好的多个 PHP-FPM 实例。

在我们开始安装前， 先看看安装的先决条件。

### 先决条件

1. 启用 Mod*proxy*fcgi 模块
2. 启用 MPM\_Event

由于我们要将 PHP-FPM 安装到一台 EA3 服务器，我们需要运行 EasyApache 来编译 Apache 以启用这些模块。

你们可以参考我以前写的，关于如何在 Apache 服务器上安装 Nginx 作为反向代理的文档来了解 Nginx 的安装。

这里，我将再次简述那些安装步骤。具体细节，你可以参考我之前写的**（如何在 CentOS 7/CPanel 服务器上配置 Nginx 反向代理）**一文。

* 步骤 1：安装 Epel 仓库
* 步骤 2：安装 nDeploy RPM 仓库，这是此次安装中最为**重要**的步骤。
* 步骤 3：使用 yum 从 nDeploy 仓库安装 nDeploy 和 Nginx 插件。
* 步骤 4：启用/配置 Nginx 为反向代理。

完成这些步骤后，下面为服务器中所有可用 PHP 版本安装 PHP-FPM 包，EA3 使用 remi 仓库来安装这些包。你可以运行这个 nDeploy 脚本来下载所有的包。

```
root@server1 [~]# /opt/nDeploy/scripts/easy_php_setup.sh
Loaded plugins: fastestmirror, tsflags, universal-hooks
EA4 | 2.9 kB 00:00:00
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 9.7 kB 00:00:00
epel | 4.3 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo | 460 kB 00:00:00
(2/2): epel/x86_64/primary_db

```

运行该脚本将为 PHP 54，PHP 55，PHP 56 和 PHP 70 安装所有这些 FPM 包。

```
Installed Packages
php54-php-fpm.x86_64 5.4.45-3.el7.remi @remi
php55-php-fpm.x86_64 5.5.31-1.el7.remi @remi
php56-php-fpm.x86_64 5.6.17-1.el7.remi @remi
php70-php-fpm.x86_64 7.0.2-1.el7.remi @remi

```

在以上安装完成后，你需要为 Apache 启用 PHP-FPM SAPI。你可以运行下面这个脚本来启用 PHP-FPM 实例。

```
root@server1 [~]# /opt/nDeploy/scripts/apache_php-fpm_setup.sh enable
mod_proxy_fcgi.c
Please choose one default PHP version from the list below
PHP70
PHP56
PHP54
PHP55
Provide the exact desired version string here and press ENTER: PHP54
ConfGen:: lxblogger
ConfGen:: blogr
ConfGen:: saheetha
ConfGen:: satest
which: no cagefsctl in (/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin)
info [rebuildhttpdconf] Missing owner for domain server1.centos7-test.com, force lookup to root
Built /usr/local/apache/conf/httpd.conf OK
Waiting for “httpd” to restart gracefully …waiting for “httpd” to initialize ……
…finished.

```

它会问你需要运行哪个 PHP 版本作为服务器默认版本，你可以输入那些细节内容，然后继续配置并为现存的域名生成虚拟主机文件。

我选择了 PHP 54 作为我服务器上的默认 PHP-FPM 版本。

虽然服务器配置了 PHP-FPM 54，但是我们可以通过 CPanel 为各个独立的域名修改 PHP-FPM 实例。

下面我将通过一些截图来为你们说明一下，怎样通过 CPanel 为各个独立域修改 PHP-FPM 实例。

安装了 Nginx 插件后，你的域名的 CPanel 就会有一个 Nginx Webstack 图标，你可以点击该图标来配置你的 Web 服务器。我已经登录进了我其中的一个 CPanel 来配置相应的 Web 服务器。

请看这些截图。

现在，你可以根据需要为选中的主域配置 web 服务器（这里，我已经选择了主域 saheetha.com）。我已经继续通过自动化配置选项来进行了，因为我不需要添加任何手动设置。

当 Nginx 配置完后，你可以在这里为你的域名选择 PHP-FPM 实例。

就像你在截图中所看到的，我服务器上的默认 PHP-FPM 是**PHP 54**，而我正要将我的域名的 PHP-FPM 实例单独修改成 **PHP 55**。当你为你的域修改 PHP-FPM 后，你可以通过访问 **phpinfo** 页面来确认。

谢谢你们参考本文，我相信这篇文章会给你提供不少信息和帮助。我会为你们推荐关于这个内容的有价值的评论 :)。

---

via: <http://linoxide.com/linux-how-to/enable-multiple-php-fpm-instances-nginx-apache/>

作者：[Saheetha Shameer](http://linoxide.com/author/saheethas/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


通过 Docker 化一个博客网站来开启我们的 Docker 之旅

Summary: 这篇文章包含 Docker 的基本概念，以及如何通过创建一个定制的 Dockerfile 来 Docker 化（Dockerize）一个应用。

应该是翻译的吧，本地用的话，还缺少一步，时间问题<br />
ENV TZ "Asia/Shanghai"

这句有点问题："我们通过-p 8080:80语法将主机80端口映射到容器内部的80端口。"

谢谢！

# 通过 Docker 化一个博客网站来开启我们的 Docker 之旅

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

>
> 这篇文章包含 Docker 的基本概念，以及如何通过创建一个定制的 Dockerfile 来 <ruby> Docker 化 <rp>  （ </rp> <rt>  Dockerize </rt> <rp>  ） </rp></ruby>一个应用。
>
>
>

Docker 是一个过去两年来从某个 idea 中孕育而生的有趣技术，公司组织们用它在世界上每个角落来部署应用。在今天的文章中，我将讲述如何通过“<ruby> Docker 化 <rp>  （ </rp> <rt>  Dockerize </rt> <rp>  ） </rp></ruby>”一个现有的应用，来开始我们的 Docker 之旅。这里提到的应用指的就是这个博客！

### 什么是 Docker？

当我们开始学习 Docker 基本概念时，让我们先去搞清楚什么是 Docker 以及它为什么这么流行。Docker 是一个操作系统容器管理工具，它通过将应用打包在操作系统容器中，来方便我们管理和部署应用。

#### 容器 vs. 虚拟机

容器和虚拟机并不完全相似，它是另外一种提供**操作系统虚拟化**的方式。它和标准的虚拟机还是有所不同。

标准的虚拟机一般会包括一个完整的操作系统、操作系统软件包、最后还有一至两个应用。这都得益于为虚拟机提供硬件虚拟化的管理程序。这样一来，一个单一的服务器就可以将许多独立的操作系统作为虚拟客户机运行了。

容器和虚拟机很相似，它们都支持在单一的服务器上运行多个操作环境，只是，在容器中，这些环境并不是一个个完整的操作系统。容器一般只包含必要的操作系统软件包和一些应用。它们通常不会包含一个完整的操作系统或者硬件的虚拟化。这也意味着容器比传统的虚拟机开销更少。

容器和虚拟机常被误认为是两种对立的技术。虚拟机采用一个物理服务器来提供全功能的操作环境，该环境会和其余虚拟机一起共享这些物理资源。容器一般用来隔离一个单一主机上运行的应用进程，以保证隔离后的进程之间不能相互影响。事实上，容器和 **BSD Jails** 以及 `chroot` 进程的相似度，超过了和完整虚拟机的相似度。

#### Docker 在容器之上提供了什么

Docker 本身不是一个容器运行环境，事实上，只是一个与具体实现无关的容器技术，Docker 正在努力支持 [Solaris Zones](https://blog.docker.com/2015/08/docker-oracle-solaris-zones/) 和 [BSD Jails](https://wiki.freebsd.org/Docker)。Docker 提供了一种管理、打包和部署容器的方式。虽然一定程度上，虚拟机多多少少拥有这些类似的功能，但虚拟机并没有完整拥有绝大多数的容器功能，即使拥有，这些功能用起来都并没有 Docker 来的方便或那么完整。

现在，我们应该知道 Docker 是什么了，然后，我们将从安装 Docker，并部署一个公开的预构建好的容器开始，学习 Docker 是如何工作的。

### 从安装开始

默认情况下，Docker 并不会自动被安装在您的计算机中，所以，第一步就是安装 Docker 软件包；我们的教学机器系统是 Ubuntu 14.0.4，所以，我们将使用 Apt 软件包管理器，来执行安装操作。

```
# apt-get install docker.io
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  aufs-tools cgroup-lite git git-man liberror-perl
Suggested packages:
  btrfs-tools debootstrap lxc rinse git-daemon-run git-daemon-sysvinit git-doc
  git-el git-email git-gui gitk gitweb git-arch git-bzr git-cvs git-mediawiki
  git-svn
The following NEW packages will be installed:
  aufs-tools cgroup-lite docker.io git git-man liberror-perl
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 7,553 kB of archives.
After this operation, 46.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

```

为了检查当前是否有容器运行，我们可以执行`docker`命令，加上`ps`选项

```
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

```

`docker`命令中的`ps`功能类似于 Linux 的`ps`命令。它将显示可找到的 Docker 容器及其状态。由于我们并没有启动任何 Docker 容器，所以命令没有显示任何正在运行的容器。

### 部署一个预构建好的 nginx Docker 容器

我比较喜欢的 Docker 特性之一就是 Docker 部署预先构建好的容器的方式，就像`yum`和`apt-get`部署包一样。为了更好地解释，我们来部署一个运行着 nginx web 服务器的预构建容器。我们可以继续使用`docker`命令，这次选择`run`选项。

```
# docker run -d nginx
Unable to find image 'nginx' locally
Pulling repository nginx
5c82215b03d1: Download complete
e2a4fb18da48: Download complete
58016a5acc80: Download complete
657abfa43d82: Download complete
dcb2fe003d16: Download complete
c79a417d7c6f: Download complete
abb90243122c: Download complete
d6137c9e2964: Download complete
85e566ddc7ef: Download complete
69f100eb42b5: Download complete
cd720b803060: Download complete
7cc81e9a118a: Download complete

```

`docker`命令的`run`选项，用来通知 Docker 去寻找一个指定的 Docker 镜像，然后启动运行着该镜像的容器。默认情况下，Docker 容器运行在前台，这意味着当你运行`docker run`命令的时候，你的 shell 会被绑定到容器的控制台以及运行在容器中的进程。为了能在后台运行该 Docker 容器，我们使用了`-d` (**detach**)标志。

再次运行`docker ps`命令，可以看到 nginx 容器正在运行。

```
# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
f6d31ab01fc9        nginx:latest        nginx -g 'daemon off   4 seconds ago       Up 3 seconds        443/tcp, 80/tcp     desperate_lalande

```

从上面的输出信息中，我们可以看到正在运行的名为`desperate_lalande`的容器，它是由`nginx:latest image`（LCTT 译注： nginx 最新版本的镜像）构建而来得。

#### Docker 镜像

镜像是 Docker 的核心特征之一，类似于虚拟机镜像。和虚拟机镜像一样，Docker 镜像是一个被保存并打包的容器。当然，Docker 不只是创建镜像，它还可以通过 Docker 仓库发布这些镜像，Docker 仓库和软件包仓库的概念差不多，它让 Docker 能够模仿`yum`部署软件包的方式来部署镜像。为了更好地理解这是怎么工作的，我们来回顾`docker run`执行后的输出。

```
# docker run -d nginx
Unable to find image 'nginx' locally

```

我们可以看到第一条信息是，Docker 不能在本地找到名叫 nginx 的镜像。这是因为当我们执行`docker run`命令时，告诉 Docker 运行一个基于 nginx 镜像的容器。既然 Docker 要启动一个基于特定镜像的容器，那么 Docker 首先需要找到那个指定镜像。在检查远程仓库之前，Docker 首先检查本地是否存在指定名称的本地镜像。

因为系统是崭新的，不存在 nginx 镜像，Docker 将选择从 Docker 仓库下载之。

```
Pulling repository nginx
5c82215b03d1: Download complete
e2a4fb18da48: Download complete
58016a5acc80: Download complete
657abfa43d82: Download complete
dcb2fe003d16: Download complete
c79a417d7c6f: Download complete
abb90243122c: Download complete
d6137c9e2964: Download complete
85e566ddc7ef: Download complete
69f100eb42b5: Download complete
cd720b803060: Download complete
7cc81e9a118a: Download complete

```

这就是第二部分输出信息显示给我们的内容。默认情况下，Docker 会使用 [Docker Hub](https://hub.docker.com/) 仓库，该仓库由 Docker 公司维护。

和 Github 一样，在 Docker Hub 创建公共仓库是免费的，私人仓库就需要缴纳费用了。当然，部署你自己的 Docker 仓库也是可以的，事实上只需要简单地运行`docker run registry`命令就行了。但在这篇文章中，我们的重点将不是讲解如何部署一个定制的注册服务。

#### 关闭并移除容器

在我们继续构建定制容器之前，我们先清理一下 Docker 环境，我们将关闭先前的容器，并移除它。

我们利用`docker`命令和`run`选项运行一个容器，所以，为了停止同一个容器，我们简单地在执行`docker`命令时，使用`kill`选项，并指定容器名。

```
# docker kill desperate_lalande
desperate_lalande

```

当我们再次执行`docker ps`，就不再有容器运行了

```
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

```

但是，此时，我们这是停止了容器；虽然它不再运行，但仍然存在。默认情况下，`docker ps`只会显示正在运行的容器，如果我们附加`-a` (all) 标识，它会显示所有运行和未运行的容器。

```
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                           PORTS               NAMES
f6d31ab01fc9        5c82215b03d1        nginx -g 'daemon off   4 weeks ago         Exited (-1) About a minute ago                       desperate_lalande

```

为了能完整地移除容器，我们在用`docker`命令时，附加`rm`选项。

```
# docker rm desperate_lalande
desperate_lalande

```

虽然容器被移除了；但是我们仍拥有可用的**nginx**镜像（LCTT 译注：镜像缓存）。如果我们重新运行`docker run -d nginx`，Docker 就无需再次拉取 nginx 镜像即可启动容器。这是因为我们本地系统中已经保存了一个副本。

为了列出系统中所有的本地镜像，我们运行`docker`命令，附加`images`选项。

```
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nginx               latest              9fab4090484a        5 days ago          132.8 MB

```

### 构建我们自己的镜像

截至目前，我们已经使用了一些基础的 Docker 命令来启动、停止和移除一个预构建好的普通镜像。为了“Docker 化（Dockerize）”这篇博客，我们需要构建我们自己的镜像，也就是创建一个 **Dockerfile**。

在大多数虚拟机环境中，如果你想创建一个机器镜像，首先，你需要建立一个新的虚拟机、安装操作系统、安装应用，最后将其转换为一个模板或者镜像。但在 Docker 中，所有这些步骤都可以通过 Dockerfile 实现全自动。Dockerfile 是向 Docker 提供构建指令去构建定制镜像的方式。在这一章节，我们将编写能用来部署这个博客的定制 Dockerfile。

#### 理解应用

我们开始构建 Dockerfile 之前，第一步要搞明白，我们需要哪些东西来部署这个博客。

这个博客本质上是由一个静态站点生成器生成的静态 HTML 页面，这个生成器是我编写的，名为 **hamerkop**。这个生成器很简单，它所做的就是生成该博客站点。所有的代码和源文件都被我放在了一个公共的 [Github 仓库](https://github.com/madflojo/blog)。为了部署这篇博客，我们要先从 Github 仓库把这些内容拉取下来，然后安装 **Python** 和一些 **Python** 模块，最后执行`hamerkop`应用。我们还需要安装 **nginx**，来运行生成后的内容。

截止目前，这些还是一个简单的 Dockerfile，但它却给我们展示了相当多的 [Dockerfile 语法]((https://docs.docker.com/v1.8/reference/builder/))。我们需要克隆 Github 仓库，然后使用你最喜欢的编辑器编写 Dockerfile，我选择`vi`。

```
# git clone https://github.com/madflojo/blog.git
Cloning into 'blog'...
remote: Counting objects: 622, done.
remote: Total 622 (delta 0), reused 0 (delta 0), pack-reused 622
Receiving objects: 100% (622/622), 14.80 MiB | 1.06 MiB/s, done.
Resolving deltas: 100% (242/242), done.
Checking connectivity... done.
# cd blog/
# vi Dockerfile

```

#### FROM - 继承一个 Docker 镜像

第一条 Dockerfile 指令是`FROM`指令。这将指定一个现存的镜像作为我们的基础镜像。这也从根本上给我们提供了继承其他 Docker 镜像的途径。在本例中，我们还是从刚刚我们使用的 **nginx** 开始，如果我们想从头开始，我们可以通过指定`ubuntu:latest`来使用 **Ubuntu** Docker 镜像。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

```

除了`FROM`指令，我还使用了`MAINTAINER`，它用来显示 Dockerfile 的作者。

Docker 支持使用`#`作为注释，我将经常使用该语法，来解释 Dockerfile 的部分内容。

#### 运行一次测试构建

因为我们继承了 **nginx** Docker镜像，我们现在的 Dockerfile 也就包括了用来构建 **nginx** 镜像的 [Dockerfile](https://github.com/nginxinc/docker-nginx/blob/08eeb0e3f0a5ee40cbc2bc01f0004c2aa5b78c15/Dockerfile) 中所有指令。这意味着，此时我们可以从该 Dockerfile 中构建出一个 Docker 镜像，然后以该镜像运行一个容器。虽然，最终的镜像和 **nginx** 镜像本质上是一样的，但是我们这次是通过构建 Dockerfile 的形式，然后我们将讲解 Docker 构建镜像的过程。

想要从 Dockerfile 构建镜像，我们只需要在运行 `docker` 命令的时候，加上 `build` 选项。

```
# docker build -t blog /root/blog
Sending build context to Docker daemon  23.6 MB
Sending build context to Docker daemon
Step 0 : FROM nginx:latest
 ---> 9fab4090484a
Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com>
 ---> Running in c97f36450343
 ---> 60a44f78d194
Removing intermediate container c97f36450343
Successfully built 60a44f78d194

```

上面的例子，我们使用了`-t` (**tag**)标识给镜像添加“blog”的标签。实质上我们就是在给镜像命名，如果我们不指定标签，就只能通过 Docker 分配的 **Image ID** 来访问镜像了。本例中，从 Docker 构建成功的信息可以看出，**Image ID**值为 `60a44f78d194`。

除了`-t`标识外，我还指定了目录`/root/blog`。该目录被称作“构建目录”，它将包含 Dockerfile，以及其它需要构建该容器的文件。

现在我们构建成功了，下面我们开始定制该镜像。

#### 使用 RUN 来执行 apt-get

用来生成 HTML 页面的静态站点生成器是用 **Python** 语言编写的，所以，在 Dockerfile 中需要做的第一件定制任务是安装 Python。我们将使用 Apt 软件包管理器来安装 Python 软件包，这意味着在 Dockerfile 中我们要指定运行`apt-get update`和`apt-get install python-dev`；为了完成这一点，我们可以使用`RUN`指令。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

## Install python and pip
RUN apt-get update
RUN apt-get install -y python-dev python-pip

```

如上所示，我们只是简单地告知 Docker 构建镜像的时候，要去执行指定的`apt-get`命令。比较有趣的是，这些命令只会在该容器的上下文中执行。这意味着，即使在容器中安装了`python-dev`和`python-pip`，但主机本身并没有安装这些。说的更简单点，`pip`命令将只在容器中执行，出了容器，`pip`命令不存在。

还有一点比较重要的是，Docker 构建过程中不接受用户输入。这说明任何被`RUN`指令执行的命令必须在没有用户输入的时候完成。由于很多应用在安装的过程中需要用户的输入信息，所以这增加了一点难度。不过我们例子中，`RUN`命令执行的命令都不需要用户输入。

#### 安装 Python 模块

**Python** 安装完毕后，我们现在需要安装 Python 模块。如果在 Docker 外做这些事，我们通常使用`pip`命令，然后参考我的博客 Git 仓库中名叫`requirements.txt`的文件。在之前的步骤中，我们已经使用`git`命令成功地将 Github 仓库“克隆”到了`/root/blog`目录；这个目录碰巧也是我们创建`Dockerfile`的目录。这很重要，因为这意味着 Docker 在构建过程中可以访问这个 Git 仓库中的内容。

当我们执行构建后，Docker 将构建的上下文环境设置为指定的“构建目录”。这意味着目录中的所有文件都可以在构建过程中被使用，目录之外的文件（构建环境之外）是不能访问的。

为了能安装所需的 Python 模块，我们需要将`requirements.txt`从构建目录拷贝到容器中。我们可以在`Dockerfile`中使用`COPY`指令完成这一需求。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

## Install python and pip
RUN apt-get update
RUN apt-get install -y python-dev python-pip

## Create a directory for required files
RUN mkdir -p /build/

## Add requirements file and run pip
COPY requirements.txt /build/
RUN pip install -r /build/requirements.txt

```

在`Dockerfile`中，我们增加了3条指令。第一条指令使用`RUN`在容器中创建了`/build/`目录。该目录用来拷贝生成静态 HTML 页面所需的一切应用文件。第二条指令是`COPY`指令，它将`requirements.txt`从“构建目录”(`/root/blog`)拷贝到容器中的`/build/`目录。第三条使用`RUN`指令来执行`pip`命令；安装`requirements.txt`文件中指定的所有模块。

当构建定制镜像时，`COPY`是条重要的指令。如果在 Dockerfile 中不指定拷贝文件，Docker 镜像将不会包含requirements.txt 这个文件。在 Docker 容器中，所有东西都是隔离的，除非在 Dockerfile 中指定执行，否则容器中不会包括所需的依赖。

#### 重新运行构建

现在，我们让 Docker 执行了一些定制任务，现在我们尝试另一次 blog 镜像的构建。

```
# docker build -t blog /root/blog
Sending build context to Docker daemon 19.52 MB
Sending build context to Docker daemon
Step 0 : FROM nginx:latest
 ---> 9fab4090484a
Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com>
 ---> Using cache
 ---> 8e0f1899d1eb
Step 2 : RUN apt-get update
 ---> Using cache
 ---> 78b36ef1a1a2
Step 3 : RUN apt-get install -y python-dev python-pip
 ---> Using cache
 ---> ef4f9382658a
Step 4 : RUN mkdir -p /build/
 ---> Running in bde05cf1e8fe
 ---> f4b66e09fa61
Removing intermediate container bde05cf1e8fe
Step 5 : COPY requirements.txt /build/
 ---> cef11c3fb97c
Removing intermediate container 9aa8ff43f4b0
Step 6 : RUN pip install -r /build/requirements.txt
 ---> Running in c50b15ddd8b1
Downloading/unpacking jinja2 (from -r /build/requirements.txt (line 1))
Downloading/unpacking PyYaml (from -r /build/requirements.txt (line 2))
<truncated to reduce noise>
Successfully installed jinja2 PyYaml mistune markdown MarkupSafe
Cleaning up...
 ---> abab55c20962
Removing intermediate container c50b15ddd8b1
Successfully built abab55c20962

```

上述输出所示，我们可以看到构建成功了，我们还可以看到另外一个有趣的信息`---> Using cache`。这条信息告诉我们，Docker 在构建该镜像时使用了它的构建缓存。

#### Docker 构建缓存

当 Docker 构建镜像时，它不仅仅构建一个单独的镜像；事实上，在构建过程中，它会构建许多镜像。从上面的输出信息可以看出，在每一“步”执行后，Docker 都在创建新的镜像。

```
 Step 5 : COPY requirements.txt /build/
  ---> cef11c3fb97c

```

上面片段的最后一行可以看出，Docker 在告诉我们它在创建一个新镜像，因为它打印了**Image ID** : `cef11c3fb97c`。这种方式有用之处在于，Docker能在随后构建这个 **blog** 镜像时将这些镜像作为缓存使用。这很有用处，因为这样， Docker 就能加速同一个容器中新构建任务的构建流程。从上面的例子中，我们可以看出，Docker 没有重新安装`python-dev`和`python-pip`包，Docker 则使用了缓存镜像。但是由于 Docker 并没有找到执行`mkdir`命令的构建缓存，随后的步骤就被一一执行了。

Docker 构建缓存一定程度上是福音，但有时也是噩梦。这是因为决定使用缓存或者重新运行指令的因素很少。比如，如果`requirements.txt`文件发生了修改，Docker 会在构建时检测到该变化，然后 Docker 会重新执行该执行那个点往后的所有指令。这得益于 Docker 能查看`requirements.txt`的文件内容。但是，`apt-get`命令的执行就是另一回事了。如果提供 Python 软件包的 **Apt** 仓库包含了一个更新的 python-pip 包；Docker 不会检测到这个变化，转而去使用构建缓存。这会导致之前旧版本的包将被安装。虽然对`python-pip`来说，这不是主要的问题，但对使用了存在某个致命攻击缺陷的软件包缓存来说，这是个大问题。

出于这个原因，抛弃 Docker 缓存，定期地重新构建镜像是有好处的。这时，当我们执行 Docker 构建时，我简单地指定`--no-cache=True`即可。

### 部署博客的剩余部分

Python 软件包和模块安装后，接下来我们将拷贝需要用到的应用文件，然后运行`hamerkop`应用。我们只需要使用更多的`COPY` 和 `RUN`指令就可完成。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

## Install python and pip
RUN apt-get update
RUN apt-get install -y python-dev python-pip

## Create a directory for required files
RUN mkdir -p /build/

## Add requirements file and run pip
COPY requirements.txt /build/
RUN pip install -r /build/requirements.txt

## Add blog code nd required files
COPY static /build/static
COPY templates /build/templates
COPY hamerkop /build/
COPY config.yml /build/
COPY articles /build/articles

## Run Generator
RUN /build/hamerkop -c /build/config.yml

```

现在我们已经写出了剩余的构建指令，我们再次运行另一次构建，并确保镜像构建成功。

```
# docker build -t blog /root/blog/
Sending build context to Docker daemon 19.52 MB
Sending build context to Docker daemon
Step 0 : FROM nginx:latest
 ---> 9fab4090484a
Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com>
 ---> Using cache
 ---> 8e0f1899d1eb
Step 2 : RUN apt-get update
 ---> Using cache
 ---> 78b36ef1a1a2
Step 3 : RUN apt-get install -y python-dev python-pip
 ---> Using cache
 ---> ef4f9382658a
Step 4 : RUN mkdir -p /build/
 ---> Using cache
 ---> f4b66e09fa61
Step 5 : COPY requirements.txt /build/
 ---> Using cache
 ---> cef11c3fb97c
Step 6 : RUN pip install -r /build/requirements.txt
 ---> Using cache
 ---> abab55c20962
Step 7 : COPY static /build/static
 ---> 15cb91531038
Removing intermediate container d478b42b7906
Step 8 : COPY templates /build/templates
 ---> ecded5d1a52e
Removing intermediate container ac2390607e9f
Step 9 : COPY hamerkop /build/
 ---> 59efd1ca1771
Removing intermediate container b5fbf7e817b7
Step 10 : COPY config.yml /build/
 ---> bfa3db6c05b7
Removing intermediate container 1aebef300933
Step 11 : COPY articles /build/articles
 ---> 6b61cc9dde27
Removing intermediate container be78d0eb1213
Step 12 : RUN /build/hamerkop -c /build/config.yml
 ---> Running in fbc0b5e574c5
Successfully created file /usr/share/nginx/html//2011/06/25/checking-the-number-of-lwp-threads-in-linux
Successfully created file /usr/share/nginx/html//2011/06/checking-the-number-of-lwp-threads-in-linux
<truncated to reduce noise>
Successfully created file /usr/share/nginx/html//archive.html
Successfully created file /usr/share/nginx/html//sitemap.xml
 ---> 3b25263113e1
Removing intermediate container fbc0b5e574c5
Successfully built 3b25263113e1

```

#### 运行定制的容器

成功的一次构建后，我们现在就可以通过运行`docker`命令和`run`选项来运行我们定制的容器，和之前我们启动 nginx 容器一样。

```
# docker run -d -p 80:80 --name=blog blog
5f6c7a2217dcdc0da8af05225c4d1294e3e6bb28a41ea898a1c63fb821989ba1

```

我们这次又使用了`-d` (**detach**)标识来让Docker在后台运行。但是，我们也可以看到两个新标识。第一个新标识是`--name`，这用来给容器指定一个用户名称。之前的例子，我们没有指定名称，因为 Docker 随机帮我们生成了一个。第二个新标识是`-p`，这个标识允许用户从主机映射一个端口到容器中的一个端口。

之前我们使用的基础 **nginx** 镜像分配了80端口给 HTTP 服务。默认情况下，容器内的端口通道并没有绑定到主机系统。为了让外部系统能访问容器内部端口，我们必须使用`-p`标识将主机端口映射到容器内部端口。上面的命令，我们通过`-p 80:80`语法将主机80端口映射到容器内部的80端口。

经过上面的命令，我们的容器看起来成功启动了，我们可以通过执行`docker ps`核实。

```
# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                         NAMES
d264c7ef92bd        blog:latest         nginx -g 'daemon off   3 seconds ago       Up 3 seconds        443/tcp, 0.0.0.0:80->80/tcp   blog

```

### 总结

截止目前，我们拥有了一个运行中的定制 Docker 容器。虽然在这篇文章中，我们只接触了一些 Dockerfile 指令用法，但是我们还是要学习所有的指令。我们可以检查 [Docker's reference page](https://docs.docker.com/v1.8/reference/builder/) 来获取所有的 Dockerfile 指令用法，那里对指令的用法说明得很详细。

另一个比较好的资源是 [Dockerfile Best Practices page](https://docs.docker.com/engine/articles/dockerfile_best-practices/)，它有许多构建定制 Dockerfile 的最佳练习。有些技巧非常有用，比如战略性地组织好 Dockerfile 中的命令。上面的例子中，我们将`articles`目录的`COPY`指令作为 Dockerfile 中最后的`COPY`指令。这是因为`articles`目录会经常变动。所以，将那些经常变化的指令尽可能地放在最后面的位置，来最优化那些可以被缓存的步骤。

通过这篇文章，我们涉及了如何运行一个预构建的容器，以及如何构建，然后部署定制容器。虽然关于 Docker 你还有许多需要继续学习的地方，但我想这篇文章给了你如何继续开始的好建议。当然，如果你认为还有一些需要继续补充的内容，在下面评论即可。

---

via: <http://bencane.com/2015/12/01/getting-started-with-docker-by-dockerizing-this-blog/>

作者：Benjamin Cane 译者：[su-kaiyao](https://github.com/su-kaiyao) 校对：[wxy](https://github.com/wxy)

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