菜鸟教程：全面学习 pwd 命令

Summary: 对于那些使用Linux命令行的人来说，pwd命令是非常有用的，它告诉你你现在在那个目录，从根目录(/)如何到达。特别是对于或许会在目录的切换间容易糊涂的Linux新手而言，pwd 可以拯救他们。   什么是pwd? pwd 代表的是Print Working Directory（打印当前目录）。如它的名字那样，pwd会打印出当前工作目录，或简单的来说就是当前用户所位于的目录。它会打印出以根目录 (/)为起点的完整目录名（绝对目录）。这条命令是一条shell内建命令，并且在大多数shell中都可以使用，如bash、Bourne shell，ksh、zsh等等。 pwd的基本语法: # pwd   pwd的

mark

Repost

@取神马名字啊啊啊 linux坑深似海[哈哈]

菜鸟学习一记。

//@LR机器学习计算机视觉: 转发微博

Repost

介绍的好详细

@我的印象笔记

详细的让人生厌。。。

详细的太多了。我就知道pwd ,不知道还有—L，-P ，--version等参数。

PS1和后面的部分完全是画蛇添足

对于那些使用Linux命令行的人来说，‘**pwd**‘命令是非常有用的，它告诉你你现在在那个目录，从根目录(**/**)如何到达。特别是对于或许会在目录的切换间容易糊涂的Linux新手而言，‘**pwd**‘ 可以拯救他们。

![15 pwd Command Examples](/data/attachment/album/201412/02/150914ah9h6mai6ta9ymin.png)

### 什么是pwd?

‘**pwd**‘ 代表的是‘**Print Working Directory**’（打印当前目录）。如它的名字那样，‘**pwd**’会打印出当前工作目录，或简单的来说就是当前用户所位于的目录。它会打印出以根目录 (**/**)为起点的完整目录名（绝对目录）。这条命令是一条shell内建命令，并且在大多数shell中都可以使用，如bash、Bourne shell，ksh、zsh等等。

#### pwd的基本语法:

```
# pwd [OPTION]

```

#### pwd的选项

 |  **选项** |  **描述** |
|  -L (即逻辑路径logical ) |  使用环境中的路径，即使包含了符号链接 |
|  -P (即物理路径physical) |  避免所有的符号链接 |
|  –help  |  显示帮助并退出 |
|  –version |  输出版本信息并退出 |

如果同时使用了‘**-L**‘和‘**-P**‘，‘**-L**‘会有更高的优先级。如果没有指定参数，pwd会避开所有的软链接，也就是说会使用‘**-P**‘参数。

pwd的退出状态:

 | 0 | 成功 |
| 非零值 | 失败 |

本篇的目的是采用例子让你对‘**pwd**‘有更深入的领悟。

**1.** 打印当前工作目录.

```
avi@tecmint:~$ /bin/pwd
/home/avi

```

![Print Working Directory](/data/attachment/album/201412/02/150919xifvyfb70cfbcf2k.gif)

*打印工作目录*

**2.** 为文件夹创建一个符号链接（比如说在home目录下创建一个**htm**链接指向**/var/www/html**）。进入新创建的目录并打印出含有以及不含符号链接的目录。

在home目录下创建一个htm链接指向/var/www/html，并进入。

```
avi@tecmint:~$ ln -s /var/www/html/ htm
avi@tecmint:~$ cd htm

```

![Create Symbolic Link](/data/attachment/album/201412/02/150920ej12f09r1729q5br.gif)

*创建符号链接*

**3.** 从当前环境中打印目录即使它含有符号链接。

```
avi@tecmint:~$ /bin/pwd -L
/home/avi/htm

```

![Print Current Working Directory](/data/attachment/album/201412/02/150921tqd7aa5ad1qlz3ah.gif)

*打印工作目录*

**4.** 解析符号链接并打印出物理目录。

```
avi@tecmint:~$ /bin/pwd -P
/var/www/html

```

![Print Physical Working Directory](/data/attachment/album/201412/02/150923bg6b7gxqs2xww63g.gif)

*打印物理工作目录*

**5.** 查看一下“**pwd**”和“**pwd -P**”的输出是否一致，也就是说，如果没有跟上选项，“**pwd**”时候会自动采用**-P**选项。

```
avi@tecmint:~$ /bin/pwd
/var/www/html

```

![Check pwd Output](/data/attachment/album/201412/02/150925w6prnxfgrzplr4iz.gif)

*检查pwd输出*

**结论：** 上面例子4和5的输出很明显（结果相同），当你“**pwd**”后面不带参数时，pwd会使用“**-P**”选项。

**6.** 打印pwd命令的版本。

```
avi@tecmint:~$ /bin/pwd --version

pwd (GNU coreutils) 8.23
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jim Meyering.

```

![Check pwd Version](/data/attachment/album/201412/02/150926x6dx6m6vumx82ydk.gif)

*检查pwd命令版本*

**注意：** ‘pwd’ 通常不带选项运行，且没有任何参数

**重要：** 你可能注意到我们刚才运行的都是 “**/bin/pwd**” 而不是 “**pwd**”。

这有什么区别呢？直接使用“**pwd**”意味着使用shell内置的pwd。你的shell可能有不同版本的pwd。具体请参考手册。当你使用的是**/bin/pwd**时，我们调用的是二进制版本的命令。虽然二进制的版本有更多的选项，但是它们两者都能打印当前的目录。

**7.** 打印所有含有可执行pwd的路径

```
avi@tecmint:~$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

```

![Print Executable Locations](/data/attachment/album/201412/02/150928rrx2hjv5kqzaxh5a.gif)

*打印可执行文件路径*

**8.** 存储“**pwd**”命令的值到变量中（比如说：**a** ），并从中打印变量的值（对于观察shell脚本很重要）。

```
avi@tecmint:~$ a=$(pwd)
avi@tecmint:~$ echo "Current working directory is : $a"
Current working directory is : /home/avi

```

![Store Pwd Value in Variable](/data/attachment/album/201412/02/150930lliwalb6lwqu8ya0.gif)

*存储pwd的值到变量中*

下面的例子中也可以用**printf**来替代。

**9.** 将工作路径切换到其他地方（比如说 **/home**），并在命令行中显示。通过执行命令（比如说 ‘**ls**‘）来验证一切**OK**。

```
avi@tecmint:~$ cd /home
avi@tecmint:~$ PS1='$pwd> '     [注意例子中的单引号]
> ls

```

![Change Current Working Directory](/data/attachment/album/201412/02/150932f333b8vini1muw68.gif)

*改变当前工作路径*

**10.** 设置多行显示 （就像下面这样），

```
/home
123#Hello#!

```

接着执行命令（比如说 **ls**）来检验一切**OK**。

```
avi@tecmint:~$ PS1='
> $PWD
$ 123#Hello#!
$ '

/home
123#Hello#!

```

![Set Multi Commandline Prompt](/data/attachment/album/201412/02/150934nvigaccczbnhzg5h.gif)

*设置多行显示*

**11.** 一下子检查当前工作路径以及先前的工作路径。

```
avi@tecmint:~$ echo “$PWD $OLDPWD”
/home /home/avi

```

![Check Present Previous Working Directory](/data/attachment/album/201412/02/150935nea9aceqaq93eq22.gif)

*检查当前工作路径*

**12.** pwd文件的绝对路径（以**/**开始）。

```
/bin/pwd

```

**13.** pwd源文件文件的绝对路径（以**/**开始）。

```
/usr/include/pwd.h

```

**13.** pwd手册的绝对路径（以**/**开始）。

```
/usr/share/man/man1/pwd.1.gz

```

**15.** 写一个shell脚本分析home目录下的一个目录（比如**tecmint**）。如果当前目录是**tecmint**就输出“**Well! You are in tecmint directory**”接着输出“**Good Bye**”，不然就在**tecmint**下面创建一个目录并提示你cd进入它。

让我们首先创建一个‘tecmint’目录，在下面创建一个名为‘pwd.sh’的脚本文件。

```
avi@tecmint:~$ mkdir tecmint
avi@tecmint:~$ cd tecmint
avi@tecmint:~$ nano pwd.sh

```

接下来在pwd.sh中加入下面的脚本。

```
#!/bin/bash

x="$(pwd)"
if [ "$x" == "/home/$USER/tecmint" ]
then
     {
      echo "Well you are in tecmint directory"
      echo "Good Bye"
     }
else
     {
      mkdir /home/$USER/tecmint
      echo "Created Directory tecmint you may now cd to it"
     }
fi

```

给予执行权限并运行。

```
avi@tecmint:~$ chmod 755 pwd.sh
avi@tecmint:~$ ./pwd.sh
Well you are in tecmint directory
Good Bye

```

#### 总结

**pwd**是一个最简单且会广泛用到的命令。掌握好pwd是使用Linux终端的基础。就是这些了。我很快会再带来另外有趣的文章，请不要走开继续关注我们。

---

via: <http://www.tecmint.com/pwd-command-examples/>

作者：[Avishek Kumar](http://www.tecmint.com/author/avishek/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


是什么造就了一个优秀的程序员？

值得一看。

Guido van Rossum: 遗传性大脑结构差异。 Linus Tovalds: 品味。

优秀程序员必备的五个重要

是什么造就了一个优秀的程序员？首先问问你自己吧，这会是个有趣的问题。它让你反思自己的软件开发技术。这个问题也适合问问你的同事们。它可以带来一些关于如何协同工作的有趣讨论。下面是我认为成为一个优秀程序员必备的五个重要技能。

![](/data/attachment/album/201412/03/110535gfygkybyr6xig0k5.jpg)

### 1. 分解问题

编程是为了解决问题，但在你开始写代码前，需要明白如何解决问题。优秀程序员的一项技能是把大的问题逐层分解成一个个更小的部分，直到每一部分都可以很容易解决。但找到解决问题的方式往往并没有那么简单。优秀程序员能找到方法去建立问题模型，这种方法使得输出结果的程序容易解释、实现和测试。

我写过的某些最复杂的程序在局部上都是难懂的，因为代码实现并不能很好地匹配这个问题，也就导致了编写的代码难以理解。当问题很好地建模的时候，我赞同伯尼·科赛尔所说的话（取自著名的[程序员在工作](http://www.amazon.com/review/R2OV0TG7MJGXGL)中的访谈记录）：

>
> “……很少有本质上很难的程序。如果你盯着某一块代码，它看起来确实很难；如果你无法理解这段代码应该产生什么结果，这基本上就是暗示它很难被理解了。在这个时候，你不应该卷起袖子，尝试修复代码；你需要只是往回一步，再仔细考虑清楚。当你已经深思熟虑后，你会发现问题变得很简单”。
>
>
>

### 2. 场景分析

优秀开发者能考虑到如何使程序适合多种不同的场景。这项能力既适用于处理程序本身的逻辑，又适用于处理可能会发生的外部和内部事件。为了考虑逻辑上的不同思路，他们问自己这样的问题：如果这个参数为空会发生什么？如果所有条件都为假呢？这个方法在线程上是安全的吗？为了发现软件需要处理的各种类型的事件，他们问自己这样的问题：如果队列占满了会怎样？如果请求收不到响应会怎样？如果在这台服务器重启的同时另外一台服务器也重启了会怎样？

优秀程序员问他们自己：如何发现程序的缺陷？换句话说，他们有能力像测试人员一样思考。相反，缺少经验的程序员通常只考虑正确的路径——在一切都按照预期进行时正常的控制流（当然这也是程序在大部分时候的情况）。当然，异常不可避免要发生，所以需要程序能处理这些情况。

### 3. 命名

编程由大量的命名对象组成：类、方法和变量。当编码完成得很好时，程序也具备了自我描述的能力，也就是说通过阅读源代码可以清楚地明白程序中函数的含义。自描述代码的一个好处就是很自然地产生许多更短的命名方法，而不是少数更长的方法，因为你有更多空间去放置有意义的名字（还有[其它原因](http://henrikwarne.com/2013/08/31/7-ways-more-methods-can-improve-your-program/)解释为什么短小方法更好）。

想出好的名字比它听起来更困难一些。我喜欢这段引用（来自菲尔·卡尔顿）：“在计算机科学领域只有两件困难的事情：缓存失效和命名对象。”命名在一定程度上很困难是因为你需要清楚地明白每一个名字究竟要代表什么。有时候命名不是一下子就清晰明了，只有随着软件开发进展才会慢慢显现。因此，重命名和命名一样重要。

命名对象也包含提出要用的概念和这些概念该如何称呼。通过深思熟虑，清楚命名所使用的惯用概念（在程序中和与程序员、非程序员讨论时使用），这使得编写程序变得更加容易。

### 4. 一致性

也许编程中最大的挑战是管理复杂性。保持一致性是处理复杂性的一种方法。它通过允许我们看到对象命名、使用和处理所采用的模式和推理来降低了某些复杂性。有了一致性，我们就无需用脑去记住异常和随机变量。取而代之，我们可以更关注[程序本身的复杂性，而不是偶然产生的复杂性](http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf)。

保持一致性从整体看来是很重要的。它应用在变量名字和分组、方法命名、模块划分、目录结构、GUI、错误处理、日志输出和文档等很多方面。比如，如果某些变量是的相关，并一起出现（在声明、方法调用或数据库中的列），而且总是以相同的顺序使用它们。那么当其中一个消失或者整体被打乱时，你就会很容易发现。对于一个操作，如果在一个地方叫delete，就不要在另一个地方叫remove：务必使用相同的名字。史蒂夫·麦克奈尔在[代码大全](http://www.amazon.com/review/R269BBARXH1V6R/)中对于使用相反命名有相同的建议。比如，begin和end是相反的，就如同start和stop一样。当使用相反对时不要混用不同对的名字（比如使用begin和stop）。

当修改一段程序时可能会引入非一致性。粗心大意的程序员不会注意到他们添加的代码是否和已有的代码保持一致。优秀程序员会严苛地确保在这些看似很小的细节上都要做到精益求精。他们知道保持一致性对于在软件开发的整个过程中处理复杂性是多么的重要。

### 5. 学习能力

作为一名软件开发者，你需要持续学习。在为软件添加一项新功能前，你必须明白为什么要这么做。在给一个已有程序添加代码前，你通常必须知道已有代码在做什么，以便合适地嵌入新功能。你还需要学习相关系统，以便正确地与它们交互。因此，快速学习的能力使你成为一名更加高效的开发者。

而且，因为软件工程领域的开发速度是如此的快速，所以新的编程语言、工具、技术和框架需要学习层出不穷。这是好还是坏，就看你怎么看。佛瑞德·布鲁克斯把学习能力列为[技能的快乐之一](http://henrikwarne.com/2012/06/02/why-i-love-coding/)，对此我深表赞同。学习新事物本身就是令人心满意足的，它也意味着开发者的生活从不无聊。

### 总结

上面所有的技能都是通用的——它们中没有一项是针对某种语言、某个框架或某种技术。如果你拥有它们，你就能快速学习一门新的语言或工具，在新的环境下写出优秀的软件。而且，因为它们在本质上是通用的，所以不会在若干年以后过时。

是什么造就了一个优秀的程序员？以上便是我的观点。你认为造就一个优秀程序员的因素有哪些？在评论里告诉我吧。

---

via: <http://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/>

作者：[Henrik Warne](http://henrikwarne.com/about/) 译者：[KayGuoWhu](https://github.com/KayGuoWhu) 校对：[Caroline](https://github.com/carolinewuyan)

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


当微软离去时

Summary: 开源.Net，这与Linux无关它与SaaS相关，也和一位并不偏执和狂热的90后CEO相关，SoylentNews博主hairyfeet道，纳德拉很明智，而且意识到了编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持越多的平台使用该语言，它就会越好。 如果自由和开源软件迷们在过去的那些日子里感到有些许困惑的话，这也许是可以理解的，即便是头昏、头痛以及头晕也算是常见的。 你或许会问，这又是什么新的病症？ 好吧，Linux女孩很高兴告诉你，它不是什么病症。不过，然而它并不意味着它很容易治愈。 原因无他，而是微软开源.Net并让它可以在Linux

编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持

[爱你][爱你][爱你]

当windows爱上linux～[爱你][爱你]

电脑在这么卡 我就把你刷成linux

拭目以待吧

流氓突然做起来慈善

![](/data/attachment/album/201412/03/212928qycaozuundoaw4cy.jpg)

**开源.Net，“这与Linux无关——它与SaaS相关，也和一位并不偏执和狂热的90后CEO相关，”SoylentNews博主hairyfeet道，“纳德拉很明智，而且意识到了编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持……越多的平台使用该语言，它就会越好。”**

如果自由和开源软件迷们在过去的那些日子里感到有些许困惑的话，这也许是可以理解的，即便是头昏、头痛以及头晕也算是常见的。

你或许会问，这又是什么新的病症？

好吧，Linux女孩很高兴告诉你，它不是什么病症。不过，然而它并不意味着它很容易治愈。

原因无他，而是微软开源.Net并让它可以在Linux或Mac OS上运行的消息。

是的，你没听错：史蒂夫·鲍尔默曾经可能[称Linux为“癌症”](http://www.linuxinsider.com/perl/story/35697.html)，但今天雷蒙德（微软总部，代称微软）有个新发现，曾经不被包容的，但是却转头[“爱”上了Linux](http://linux.cn/article-4056-1.html)!

它让微软看起来很奇怪——它也驱使FOSS迷们聚拢到博客圈的破败的Broken Windows Lounge，而去的人的数量更是空前的。

一杯龙舌兰可以让你不再头疼么？这是现在众多探究的问题之一。

### ‘繁荣的机遇’

“这是个重大的消息，虽然有点过时了，”克里斯·特拉弗斯，一位[博主](http://ledgersmbdev.blogspot.com/)，他为[LedgerSMB](http://www.ledgersmb.org/)项目工作，告诉Linux女孩。

![](/data/attachment/album/201412/03/212930qu2x78okch6vrh2c.jpg)

“我们生活的世界中，即使没有大的商业公司支持，新的开源编程语言也很兴旺，而闭源的编程语言仅能在大的商业公司的帮助下得到支持，”特拉弗斯说，“例如，Bing闭源杀死了REBOL 2.x。”

“这项运动很明显酝酿已久——一家像微软这样庞大的公司不会有‘突然开源’这种复杂的东西——而我想，在某种程度上，微软一定看到了Sun开源OpenJDK时的一些前兆了。”他暗示道。

同时，“这也为诸如C#和F#这样的语言提供了比当前市场更为兴盛的机会，”特拉弗斯说。

### ‘我仍然不相信你’

“我首先想说，‘谢谢你，微软！’”[Linux Rants](http://linuxrants.com/)博主麦克·斯通开篇说，“我们真的很欣赏你开源.Net并推动它跨平台，这是迈向正确方向的一步！”

“然而，我仍然不相信你。”他补充道。

“我很喜欢微软在考虑开源，但是我没有见到它向GPL迈进，”斯通告诉Linux女孩，“这让我想到了这么个可能性，微软提供了多个平台的软件供你使用，但却会把开发者和它捆绑起来。”

此外，微软不会作出任何保证，保证.Net常年开源，他指出。

“这意味着微软可以退出，并让开发出来的应用程序成为跨平台的Windows专有软件，”他警告道，“我不会相信微软的承诺，我会翘首期盼微软他们的突然而必然的背叛。”

### ‘留心不怀好意的礼物’

该运动明显带有失望的气息，Google+博主阿里桑德罗·埃伯索尔暗示道。

“他们来得太晚了，”埃伯索尔说，“Java已经先下手为强了，当.Net还是Windows/Microsoft专有产品时，Java已经遍布四处了。试着让人采用，希望好运吧。”

此外，“如果它打上GPL烙印来保护代码创建者的话我才会相信它，”他补充道，“一个脆弱的MIT许可证任何时候都是逆天而行的。”

无论如何，“在该公司产生的对FLOSS社区的全部的敌意下，他们会过河拆桥，”埃伯索尔总结道，“底线是：送礼的希腊人也很可畏——仔细留心希腊人不怀好意的礼物……”

### ‘就像猫爱上老鼠’

微软爱上Linux“就像猫爱上老鼠，”博主[罗伯特·伯格森](http://mrpogson.com/)打趣道，“当然，他们会玩玩\*/Linux，但是他们不是我们的朋友。”

所发生的事情是，FOSS和LInux社区已经击溃了“MS自从和IBM达成提供OS的交易后放置在竞争道路入口上的所有障碍，”伯格森说，“MS肯定是在绝望地试着和‘敌人’‘做朋友’，因为它们的位置被侵占了。”

“一切都会好的，”他补充道，“MS仍然可以通过愚蠢地花大量的金钱来制造麻烦，或者他们可以进行常规商业运作并在价格/性能上开展竞争。那不是‘爱’——那是接受现实。”

### 适应或者灭亡

对于微软而言，问题在于“开源开发包对于开发者而言开始变得足够好用了，”参团顾问和[Slashdot](http://slashdot.org/)博主格哈德·麦克。

“在我的最后一份职业中，大多数的程序员想要Eclipse，而不是Visual Studio，即使客户端软件是Windows专用的。用Windows做测试的开发者们迁移到Linux的数量在缓慢增长。”麦克回忆道。

“很要有人想被固定在一个平台中，因此单一平台的语言的份额会越来越少，”他补充道，“微软现在必须在适应与灭亡中作出选择。”

### 这里没有温暖的毛球

驱动此项运动的策略也在于“各种云大量地在Linux上部署，即便在微软自己的Azure云，Linux也被大量部署，”Google+博主凯文·奥布莱恩暗示道。

“纳德拉清楚地指出，他正将微软向云方向推进，因为他几乎不得不如此，以期继续将游戏玩下去。”奥布莱恩坚信。

那就是说，不管怎样，“我都不期待微软变得可爱又善意——他们将做所有他们认为能获得最佳公司利益的事情。”他说。

事实上，“根本没Linux什么事——它只和SaaS相关，也和一位并不偏执和狂热的90后CEO相关，”SoylentNews博主hairyfeet告诉Linux女孩。

“纳德拉很明智，而且意识到了编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持，”hairyfeet解释道，“考虑到这一点，越多的平台使用该语言，它就会越好，因为那会增加该语言的价值，并且为你的服务带来更多客户。”

### 帝国的没落

总得来说，一切都很明了，那就是“微软帝国正在摇摇欲坠，”Google+博主贡萨洛·维拉斯科 C说。

“我不知道，或者不关心他们为什么会说谎，说他们热爱Linux，”他补充道，“我只希望GNU/Linux社区变得比现今更聪明些（咳，Systemd，咳咳），拒绝微软.Net和其它产生影响的东西。GNU/Linux必须只用FLOSS工具。”

---

via: <http://www.linuxinsider.com/story/When-Microsoft-Went-A-Courting-81374.html>

作者：[Katherine Noyes](http://twitter.com/noyesk) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


如何在 Linux 系统中创建一个云端加密文件系统

Summary: Amazon S3 和 Google Cloud Storage 之类的商业云存储服务以能承受的价格提供了高可用性、可扩展、无限容量的对象存储服务。为了加速这些云产品的广泛采用，这些提供商为他们的产品通过明确的 API 和 SDK 培养了一个良好的开发者生态系统。而基于云的文件系统便是这些活跃的开发者社区中的典型产品，已经有了好几个开源的实现。 S3QL 便是最流行的开源云端文件系统之一。它是一个基于 FUSE 的文件系统，提供了好几个商业或开源的云存储后端，比如 Amazon S3、Google Cloud Storage、Rackspace CloudFiles，还有 OpenStack。作为一个功能完

好文章

Repost

[Amazon S3](http://aws.amazon.com/s3) 和 [Google Cloud Storage](http://code.google.com/apis/storage/) 之类的商业云存储服务以能承受的价格提供了高可用性、可扩展、无限容量的对象存储服务。为了加速这些云产品的广泛采用，这些提供商为他们的产品通过明确的 API 和 SDK 培养了一个良好的开发者生态系统。而基于云的文件系统便是这些活跃的开发者社区中的典型产品，已经有了好几个开源的实现。

[S3QL](https://bitbucket.org/nikratio/s3ql/) 便是最流行的开源云端文件系统之一。它是一个基于 FUSE 的文件系统，提供了好几个商业或开源的云存储后端，比如 Amazon S3、Google Cloud Storage、Rackspace CloudFiles，还有 OpenStack。作为一个功能完整的文件系统，S3QL 拥有不少强大的功能：最大 2T 的文件大小、压缩、UNIX 属性、加密、基于写入时复制的快照、不可变树、重复数据删除，以及软、硬链接支持等等。写入 S3QL 文件系统任何数据都将首先被本地压缩、加密，之后才会传输到云后端。当你试图从 S3QL 文件系统中取出内容的时候，如果它们不在本地缓存中，相应的对象会从云端下载回来，然后再即时地解密、解压缩。

![](/data/attachment/album/201412/03/214908zv11ioidj8ikxzxa.png)

需要明确的是，S3QL 的确也有它的限制。比如，你不能把同一个 S3FS 文件系统在几个不同的电脑上同时挂载，只能有一台电脑同时访问它。另外，ACL（访问控制列表）也并没有被支持。

在这篇教程中，我将会描述“如何基于 Amazon S3 用 S3QL 配置一个加密文件系统”。作为一个使用范例，我还会说明如何在挂载的 S3QL 文件系统上运行 rsync 备份工具。

### 准备工作

本教程首先需要你创建一个 [Amazon AWS 帐号](http://aws.amazon.com/)（注册是免费的，但是需要一张有效的信用卡）。

然后 [创建一个 AWS access key](http://aws.amazon.com/)（access key ID 和 secret access key），S3QL 使用这些信息来访问你的 AWS 帐号。

之后通过 AWS 管理面板访问 AWS S3，并为 S3QL 创建一个新的空 bucket。

![](/data/attachment/album/201412/03/214915cgrbcl4ji0x04jgs.jpg)

为最佳性能考虑，请选择一个地理上距离你最近的区域。

![](/data/attachment/album/201412/03/214917bfgjyjd87zzrprgt.jpg)

### 在 Linux 上安装 S3QL

在大多数 Linux 发行版中都有预先编译好的 S3QL 软件包。

#### 对于 Debian、Ubuntu 或 Linux Mint：

```
$ sudo apt-get install s3ql

```

#### 对于 Fedora：

```
$ sudo yum install s3ql

```

对于 Arch Linux，使用 [AUR](https://aur.archlinux.org/packages/s3ql/)。

### 首次配置 S3QL

在 ~/.s3ql 目录中创建 autoinfo2 文件，它是 S3QL 的一个默认的配置文件。这个文件里的信息包括必须的 AWS access key，S3 bucket 名，以及加密口令。这个加密口令将被用来加密一个随机生成的主密钥，而主密钥将被用来实际地加密 S3QL 文件系统数据。

```
$ mkdir ~/.s3ql
$ vi ~/.s3ql/authinfo2

```

---

```
[s3]
storage-url: s3://[bucket-name]
backend-login: [your-access-key-id]
backend-password: [your-secret-access-key]
fs-passphrase: [your-encryption-passphrase]

```

指定的 AWS S3 bucket 需要预先通过 AWS 管理面板来创建。

为了安全起见，让 authinfo2 文件仅对你可访问。

```
$ chmod 600 ~/.s3ql/authinfo2

```

### 创建 S3QL 文件系统

现在你已经准备好可以在 AWS S3 上创建一个 S3QL 文件系统了。

使用 mkfs.s3ql 工具来创建一个新的 S3QL 文件系统。这个命令中的 bucket 名应该与 authinfo2 文件中所指定的相符。使用“--ssl”参数将强制使用 SSL 连接到后端存储服务器。默认情况下，mkfs.s3ql 命令会在 S3QL 文件系统中启用压缩和加密。

```
$ mkfs.s3ql s3://[bucket-name] --ssl

```

你会被要求输入一个加密口令。请输入你在 ~/.s3ql/autoinfo2 中通过“fs-passphrase”指定的那个口令。

如果一个新文件系统被成功创建，你将会看到这样的输出：

![](/data/attachment/album/201412/03/214924tcexnjy1efyzy8cx.jpg)

### 挂载 S3QL 文件系统

当你创建了一个 S3QL 文件系统之后，下一步便是要挂载它。

首先创建一个本地的挂载点，然后使用 mount.s3ql 命令来挂载 S3QL 文件系统。

```
$ mkdir ~/mnt_s3ql
$ mount.s3ql s3://[bucket-name] ~/mnt_s3ql

```

挂载一个 S3QL 文件系统不需要特权用户，只要确定你对该挂载点有写权限即可。

视情况，你可以使用“--compress”参数来指定一个压缩算法（如 lzma、bzip2、zlib）。在不指定的情况下，lzma 将被默认使用。注意如果你指定了一个自定义的压缩算法，它将只会应用到新创建的数据对象上，并不会影响已经存在的数据对象。

```
$ mount.s3ql --compress bzip2 s3://[bucket-name] ~/mnt_s3ql

```

因为性能原因，S3QL 文件系统维护了一份本地文件缓存，里面包括了最近访问的（部分或全部的）文件。你可以通过“--cachesize”和“--max-cache-entries”选项来自定义文件缓存的大小。

如果想要除你以外的用户访问一个已挂载的 S3QL 文件系统，请使用“--allow-other”选项。

如果你想通过 NFS 导出已挂载的 S3QL 文件系统到其他机器，请使用“--nfs”选项。

运行 mount.s3ql 之后，检查 S3QL 文件系统是否被成功挂载了：

```
$ df ~/mnt_s3ql
$ mount | grep s3ql

```

![](/data/attachment/album/201412/03/214927nqqfjj82u6jqqv3z.jpg)

### 卸载 S3QL 文件系统

想要安全地卸载一个（可能含有未提交数据的）S3QL 文件系统，请使用 umount.s3ql 命令。它将会等待所有数据（包括本地文件系统缓存中的部分）成功传输到后端服务器。取决于等待写的数据的多少，这个过程可能需要一些时间。

```
$ umount.s3ql ~/mnt_s3ql

```

### 查看 S3QL 文件系统统计信息及修复 S3QL 文件系统

若要查看 S3QL 文件系统统计信息，你可以使用 s3qlstat 命令，它将会显示诸如总的数据、元数据大小、重复文件删除率和压缩率等信息。

```
$ s3qlstat ~/mnt_s3ql

```

![](/data/attachment/album/201412/03/214929zyu08ukyme4r2x80.jpg)

你可以使用 fsck.s3ql 命令来检查和修复 S3QL 文件系统。与 fsck 命令类似，待检查的文件系统必须首先被卸载。

```
$ fsck.s3ql s3://[bucket-name]

```

### S3QL 使用案例：Rsync 备份

让我用一个流行的使用案例来结束这篇教程：本地文件系统备份。为此，我推荐使用 rsync 增量备份工具，特别是因为 S3QL 提供了一个 rsync 的封装脚本（/usr/lib/s3ql/pcp.py）。这个脚本允许你使用多个 rsync 进程递归地复制目录树到 S3QL 目标。

```
$ /usr/lib/s3ql/pcp.py -h

```

![](/data/attachment/album/201412/03/214932jvr7ye1z7a6ee272.jpg)

下面这个命令将会使用 4 个并发的 rsync 连接来备份 ~/Documents 里的所有内容到一个 S3QL 文件系统。

```
 $ /usr/lib/s3ql/pcp.py -a --quiet --processes=4 ~/Documents ~/mnt_s3ql

```

这些文件将首先被复制到本地文件缓存中，然后在后台再逐步地同步到后端服务器。

若想了解与 S3QL 有关的更多信息，如自动挂载、快照、不可变树，我强烈推荐阅读 [官方用户指南](http://www.rath.org/s3ql-docs/)。欢迎告诉我你对 S3QL 怎么看，以及你对任何其他工具的使用经验。

---

via: <http://xmodulo.com/2014/09/create-cloud-based-encrypted-file-system-linux.html>

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

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


怎么样称得上是Linux下优秀的命令行计算器

Summary: 每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，GNU bc（basic calculator的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。 在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的b

用Python当计算器用好了。

不会写python 只会用python 解释器下做加减法的捂脸飘过[拍砖][互相拍砖]

python足矣

irb//@Murakumo叢雲: 转发微博

irb //@人家要变成奶酪了:irb//@Murakumo叢雲: 转发微博

@我的印象笔记

我是用perl//@西安气象爱好者:用Python当计算器用好了。

sympy巨爽//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

我说一个笑话，现在还有人用perl[哈哈] 是不是很黑？//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

一直用python//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

看来bc好强大，以前还用PHP，MySQL呢，得h改行了。 //@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

烧死perl→_→//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

bc确实不错，可惜以前不会玩

@有道云笔记收藏

对我来说，bc就足够应付了。

我直接用Matlab，M语言算不算？

我一般用scheme //@西瓜大丸子汤:bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了

Linux中国:【怎么样称得上是Linux下优秀的命令行计算器 | 每个现代的......】

python大法好//@Linux中国: 好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

很不错哦，以前就关注到了bc，当时一个很困惑的地方就在于，默认情况下，计算结果的小数位数为０，而我一时也找不到在哪里调，简单翻了下man手册，写的太啰嗦咯，木有耐心的我就木有看完，现在可好咯，原来只要简单的使用一下scale=xx就可以咯．很不错．一个很有用的命令行计算工具．个人感觉比python用起来简单多咯，而且用起来更像计算器的感觉嘛

作为命令行控，这个得转//@西瓜大丸子汤: bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了

用ruby也行啊~//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

不错不错，很强大

当然用js，任何平台浏览器F12就有输入框，全世界最方便的输入方式 //@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用pe

一般都用python//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

我才不会告你你们我的计算机叫Macaulay2呢[哈哈]//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，[GNU bc](http://www.gnu.org/software/bc/)（“basic calculator”的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。

在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的bc演化成POSIX bc，最后变成了今天的GNU bc。

![](/data/attachment/album/201412/03/221657wgwogjauy1g1am44.jpg)

### GNU bc的特性

现在的GNU bc是早期bc经过若干次改进和功能增强的结果。目前它被所有的主流GNU/Linux发行版所收纳。GNU bc支持高精度数字和多种数值类型（例如二进制、十进制、十六进制）的输入输出。

如果你对C语言很熟悉的话，你会发现bc使用了和C语言一样或相似的算术操作符。所支持的操作符包括算术运算符（+, -, \*, /, %, ++, --）、比较运算符（<, >, ==, !=, <=, >=）、逻辑运算符（!, &&, ||）、位运算符（&, |,  , ~, <<, >>）和复合赋值运算符（+=, -=, \*=, /=, %=, &=, |=,  =, &&=, ||=, <<=, >>=）。bc内置了很多有用的函数，像是平方根、正弦、余弦、反正弦、自然对数、指数等。

### 如何使用GNU bc

作为一个基于命令行的计算器，GNU bc的使用没有限制。在本文中，我会向大家介绍bc命令的几个常用的特性。如果你想要更加详细的指导，你可以查阅[官方指南](https://www.gnu.org/software/bc/manual/bc.html)。

如果你没有一个预先写好的bc脚本，那么你可以在交互模式下运行bc。在这种模式下，你输入的以回车结束的任何声明或者表达式会被立刻计算出结果。你需要输入以下命令来进入bc的交互界面。如果想退出bc，你可以输入'quit'并且按回车。

```
$ bc

```

![](/data/attachment/album/201412/03/221710bkifrp2p0mmnmhrs.jpg)

本文下面展示的例子请在bc交互界面中输入。

### 输入表达式

如果想要计算一个算术表达式，我们可以在闪烁的光标处输入该表达式，然后按回车确认。你也可以将该结果存储到一个变量中，然后在其他表达式中使用该变量。

![](/data/attachment/album/201412/03/221713rqbdofpb29lozfvp.png)

在一个bc的交互界面中，保存着没有个数限制的命令历史记录。使用上方向键来查看之前输入的命令。如果你想限制历史记录保存的命令数量，你可以将一个名为history的特殊变量设置成你希望的数值。该变量默认为-1，也就是“历史记录数量没有限制”。

### 输入输出进制切换

经常会发生的是，你输入一个表达式并且想使用二进制或者十六进制来显示结果。bc允许你在输入输出数字的进制间转换。输入和输出的数系基分别存储在ibase和obase变量中，默认值为10，有效的数值是2到16（或者环境变量BC*BASE*MAX的值）。你只需要更改ibase和obase的值就可以在不同进制之间转换了。下面是一个求两个十六进制/二进制数和的例子：

![](/data/attachment/album/201412/03/221715a1nvytqr3nn6zpjj.jpg)

需要注意的是，我有意地将obase=16放到了ibase=16前面，**反过来则是不可以的**。这个是因为如果我先输入ibase=16，那么随后输入的obase=16中的16会被认为是16进制的数字，也就是十进制的22。当然这个不是我们所期望的。

### 调整精度

在bc中，数字的精度存储在一个名为scale的特殊变量中。该变量表示小数点后数字的个数。scale默认为0，意味着所有的数字和结果以整数形式储存。你可以通过改变scale这个特殊变量的值，来调整数值的精度。

```
scale=4

```

![](/data/attachment/album/201412/03/221719az43ij11o84gbgbg.jpg)

### 使用内置函数

除了简单的算术操作符，GNU bc还通过外部的数学函数库来提供许多高级的数学函数。你可以在命令行界面使用“-l”选项来打开bc。

这里描述了一些内置的函数。

N的二次方根：

```
 sqrt(N)

```

X的正弦（X是弧度）：

```
s(X)

```

X的余弦（X是弧度）：

```
c(X)

```

X的反正弦（返回值是弧度）：

```
a(X)

```

X的自然对数：

```
l(X)

```

X的指数对数：

```
e(X)

```

### 当做语言来用

作为一个计算语言，GNU bc支持简单的声明（变量赋值、中断、返回等）、复合语句（if、while、for loop等）和自定义函数。在这里我不会涉及到这些特性的细节，不过你可以通过[官方指南](https://www.gnu.org/software/bc/manual/bc.html)来学习如何使用这些特性。下面是一个简单的函数示例：

```
define dummy(x){
return(x * x);
}
dummy(9)
81
dummy(4)
16

```

### 在非交互界面下使用GNU bc

到目前为止，我们一直在交互界面下使用bc。不过更加流行的使用bc的方法是在没有交互界面的脚本中运行bc。这种情况下，你可以使用echo命令并且借助管道来向bc发送输入内容。例如：

```
$ echo "40*5" | bc
$ echo "scale=4; 10/3" | bc
$ echo "obase=16; ibase=2; 11101101101100010" | bc

```

![](/data/attachment/album/201412/03/221721hj8r96ixx6orbi78.jpg)

总结一下，GNU bc是一款强大并且通用的基于命令行的计算器应用，它绝对不会让你失望。它预装在所有的现代Linux发行版中，bc可以让你不用离开命令行就可以进行高效的数学计算。所以，GNU bc一定会是你的最爱。

---

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

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

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


在Linux中的使用 ss 命令检查套接字/网络连接

Summary: ss是iproute2包的一部分（控制TCP/IP网络和流量的工具）。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装（通常称之为net-tools）。ss工具用于导出套接字统计，它可以显示与netstat类似的信息，且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息，所以会更快。ss的操作和netstat很像，所以这让它可以很容易就可以取代netstat。  使用和常见选项 ss和netstat很像，默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出：  -n - 不要尝试解析服务名。 -

怎么弄的和JJ怪一样//@相公12345:转发微博

转发一下子

@我的印象笔记

@ztech

ss是iproute2包的一部分（控制TCP/IP网络和流量的工具）。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装（通常称之为“net-tools”）。ss工具用于导出套接字统计，它可以显示与netstat类似的信息，且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息，所以会更快。ss的操作和netstat很像，所以这让它可以很容易就可以取代netstat。

![](/data/attachment/album/201412/04/101117urtkkosocuo2aqj4.png)

### 使用和常见选项

ss和netstat很像，默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出：

* **-n** - 不要尝试解析服务名。
* **-r** - 尝试解析数字的地址/端口。
* **-a** - 显示所有套接字。
* **-l** - 显示监听套接字。
* **-p** - 显示使用该套接字的进程。
* **-s** - 打印统计数据
* **-t** - 只显示TCP套接字。
* **-u** - 只显示UDP套接字。
* **-d** - 只显示DCCP套接字
* **-w** - 只显示RAW套接字。
* **-x** - 只显示Unix域套接字
* **-f FAMILY** - 显示FAMILY套接字的类型。目前支持下面这些族：unix、inet、inet6、link、netlink。
* **-A QUERY** - 指定要列出的套接字列表，通过逗号分隔。可以识别下面的标识符：all、inet、tcp、udp、raw、unix、packet、netlink、unix*dgram、unix*stream、packet*raw、packet*dgram。
* **-o STATUS** - 列出指定状态的套接字

### ss 命令示例

**1.** 显示所有的的TCP端口和使用它们的进程：

```
# ss -tnap

```

![ss tnap](/data/attachment/album/201412/04/101128kpz2o1m7e8nyyykz.jpg)

**2.** 你可以使用-4 标志来显示IPv4链接，-6标志来显示IPv6链接，比如：

```
# ss -tnap6

```

![ss tnap6](/data/attachment/album/201412/04/101137p4lhp4w0zrgf4trm.jpg)

**3.** 跟上面的行为一样，你只需用u代替t就会显示所有开放的UDP端口。

```
# ss -unap

```

![ss unap](/data/attachment/album/201412/04/101139kopnjvnzs4qcznc4.jpg)

**4.** 你可以使用-s标志来打印各种有用的统计数据：

```
# ss -s

```

![ss stats](/data/attachment/album/201412/04/101141p6dhqt7ttp5676ne.jpg)

**5.** 你可以使用-o标志来检查所有不同状态下的链接，比如显示所有已经建立的连接。

```
# ss -tn -o state established -p

```

![ss est](/data/attachment/album/201412/04/101143pu18hu7yxur0qm7q.jpg)

---

via: <http://linoxide.com/linux-command/ss-sockets-network-connection/>

作者：[Adrian Dinu](http://linoxide.com/author/adriand/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


Linux 有问必答：在Linux上如何将文本文件转换成PDF格式

Summary: 提问： 我想要将一个纯文本文件转换成PDF文档。在Linux命令行下是否有一个简单的方法将文本文件转换成PDF文件？ 答：当你有一大堆文本文件要维护的时候，把它们转换成PDF文档会好一些。比如，PDF更适合打印，因为PDF文档有预定义布局。除此之外，还可以减少文档被意外修改的风险。

涨姿势

opensuse是不是用的人比较少？里面没有讲到它。诶

1.不支持中文<br />
2.不支持word

来自 - 北京北京师范大学 的 Chrome/Linux 用户

直接pandoc不就搞定了，各种转

马克

好工具

get√[馋嘴]

明天试试可不可以把doc转换成pdf

其实用a2ps把文件弄成ps，再用ps2pdf也一样！

正版Word里有把文件保存为PDF格式的功能！

怎么会乱码呢？

>
> **提问**： 我想要将一个纯文本文件转换成PDF文档。在Linux命令行下是否有一个简单的方法将文本文件转换成PDF文件？
>
>
>

![](/data/attachment/album/201412/04/213944vnp7iipw0i8n6jin.png)

当你有一大堆文本文件要维护的时候，把它们转换成PDF文档会好一些。比如，PDF更适合打印，因为PDF文档有预定义布局。除此之外，还可以减少文档被意外修改的风险。

要将文本文件转换成PDF格式，你要按照下面的两步。

### 准备工作

首先你要安装两个需要的包。

在 Debian、Ubuntu 或者 Linux Mint上：

```
$ sudo apt-get install enscript ghostscript

```

在 Fedora、CentOS/RHEL上：

```
$ sudo yum install enscript ghostscript

```

在 Arch Linux上：

```
$ sudo pacman -S enscript ghostscript

```

### 将文本文件转换成PDF格式

准备工作完成之后，按照下面的两步从文本文件生成一个PDF文件

首先，使用enscript命令行工具将文本文件转换成postscript格式。

```
$ enscript -p output.ps input.txt

```

最后将postscript格式文件转换成PDF文件。

```
$ ps2pdf output.ps output.pdf

```

---

via: <http://ask.xmodulo.com/convert-text-to-pdf-linux.html>

译者：[geekpi](https://github.com/geekpi) 校对：[Caroline](https://github.com/carolinewuyan)

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


如何让树莓派默认启动进入图形界面

Summary:
我买树莓派已经有一段时间了，但是实话说我几乎还没有用它做过什么事情。自从我的Dell超级本送到Dell服务中心后（已经有数星期了），我再次开始使用树莓派作为替代。

我之前已经写过一篇在Ubuntu中如何在SD卡上安装Raspbian系统。我也重装了一次树莓派。第一次启动的时候我漏掉了一件事情就是设置图形界面。这样当我再次启动树莓派的时候，我直接进入了命令行。我该接下来如何运行Respbian图形界面呢？

树莓派能poe供电么？

@IM-哈哈毅很没用

@我的印象笔记

无爱了

有KDE吗？

回复@凡人自有烦人事:然后呢

图形界面下，打开个网页也要等半天，CPU100%啊

![](/data/attachment/album/201412/04/180711w33nl98zxhlfb9tt.jpg)

我买树莓派已经有一段时间了，但是实话说我几乎还没有用它做过什么事情。自从我的Dell超级本送到Dell服务中心后（已经有数星期了），我再次开始使用树莓派作为替代。

我之前已经写过一篇[在Ubuntu中如何在SD卡上安装Raspbian系统](http://itsfoss.com/tutorial-how-to-install-raspberry-pi-os-raspbian-wheezy/)。我也重装了一次树莓派。第一次启动的时候我漏掉了一件事情就是设置图形界面。这样当我再次启动树莓派的时候，我直接进入了命令行。我该接下来如何运行Respbian图形界面呢？

### 设置Raspbian图形启动

当你第一次安装Raspbian系统时，确实有一些选项需要你来配置，由于匆忙，我没有注意到这些，只是快速完成屏幕上的选项。如果你遇到了和我一样的情况，最终只是进入到了Raspbian操作系统的命令行界面，不要失望，因为设置树莓派以图形界面启动很容易。让我们看看该如何操作。

### 第一步:

当你在命令行时，以默认的用户名和密码登录（如果你没有修改过）。Raspbian的默认用户是pi，默认密码应该是raspberry。

#### 第二步:

当你登录后，运行下面的命令：

```
sudo raspi-config

```

这条命令会打开树莓派的配置，就像我们第一次启动看到的那样。

#### 第三步:

在这个配置界面下， 寻找**Enable Boot to Desktop/Scratch**这个选项。用箭头、tab和/或者回车键的组合来选中它（我忘记使用的是哪些了）。

[![](/08feeaed840a5e0a3105aa90ad66c5b22e53fa74/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475702e6a7067)](https://camo.githubusercontent.com/08feeaed840a5e0a3105aa90ad66c5b22e53fa74/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475702e6a7067)

#### 第四步:

下一屏中，选择 **Desktop Login as user ‘Pi’ at the graphical desktop.**

[![](/693560632b9980e6bb51c8d1d51a46332a6e5c6f/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475705f312e6a7067)](https://camo.githubusercontent.com/693560632b9980e6bb51c8d1d51a46332a6e5c6f/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475705f312e6a7067)

#### 第五步:

接下来你会被要求重启。

[![](/8b06681a02fd1935ecddc009250b536fb172b10d/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475705f322e6a7067)](https://camo.githubusercontent.com/8b06681a02fd1935ecddc009250b536fb172b10d/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475705f322e6a7067)

下次启动后，你会登录到LXDE桌面环境。接下来你就可以享受树莓派的图形界面了。

[![](/75e996d8394b067582d0a8a31c8ea194ffdc8e2f/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f726173706269616e2d77656c636f6d652d73637265656e2d6775692e6a706567)](https://camo.githubusercontent.com/75e996d8394b067582d0a8a31c8ea194ffdc8e2f/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f726173706269616e2d77656c636f6d652d73637265656e2d6775692e6a706567)

我希望这个教程能够帮助设置你的树莓派默认启动进入图形界面。欢迎在评论区留下你的问题和建议。

---

via: <http://itsfoss.com/raspberry-pi-gui-boot/>

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

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


如何创建和使用Python CGI脚本

Summary: 你是否想使用Python语言创建一个网页，或者处理用户从web表单输入的数据？这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候，CGI脚本就会被web服务器启用。CGI脚本调用执行完毕后，它的输出结果就会被web服务器用来创建显示给用户的网页。  配置Apache web服务器，让其能运行CGI脚本 在这个教程里，我们假设Apache web服务器已经安装好，并已运行。这篇教程使用的Apache web服务器(版本2.2.15，用于CentOS发行版6.5)运行在本地主机(127.0.0.1

@mark

嘛

好强大

你是否想使用Python语言创建一个网页，或者处理用户从web表单输入的数据？这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候，CGI脚本就会被web服务器启用。CGI脚本调用执行完毕后，它的输出结果就会被web服务器用来创建显示给用户的网页。

![](/data/attachment/album/201412/04/232938y1l1ttm7mmmjjmmk.png)

### 配置Apache web服务器，让其能运行CGI脚本

在这个教程里，我们假设Apache web服务器已经安装好，并已运行。这篇教程使用的Apache web服务器(版本2.2.15，用于CentOS发行版6.5)运行在本地主机(127.0.0.1)，并且监听80端口，如下面的Apache指令指定一样：

```
ServerName 127.0.0.1:80
Listen 80

```

下面举例中的HTML文件存放在web服务器上的/var/www/html目录下，并通过DocumentRoot指令指定(指定网页文件所在目录)：

```
DocumentRoot "/var/www/html"

```

现在尝试请求URL：http://localhost/page1.html

这将返回web服务器中下面文件的内容：

```
/var/www/html/page1.html

```

为了启用CGI脚本，我们必须指定CGI脚本在web服务器上的位置，需要用到ScriptAlias指令：

```
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

```

以上指令表明CGI脚本保存在web服务器的/var/www/cgi-bin目录，请求URL里包含/cgi-bin/的将会搜索这个目录下的CGI脚本。

我们必须还要明确CGI脚本在/var/www/cgi-bin目录下有执行权限，还要指定CGI脚本的文件扩展名。使用下面的指令：

```
<Directory "/var/www/cgi-bin">
    Options +ExecCGI
    AddHandler cgi-script .py
</Directory>

```

下面访问URL：http://localhost/cgi-bin/myscript-1.py

这将会调用web服务器中下面所示脚本：

```
/var/www/cgi-bin/myscript-1.py

```

### 创建一个CGI脚本

在创建一个Python CGI脚本之前，你需要确认你已经安装了Python(这通常是默认安装的，但是安装版本可能会有所不同)。本篇教程使用的脚本是使用Python版本2.6.6编写的。你可以通过下面任意一命令(-V和--version参数将显示所安装Python的版本号)检查Python的版本。

```
$ python -V
$ python --version

```

如果你的Python CGI脚本要用来处理用户输入的数据(从一个web输入表单)，那么你将需要导入Python cgi模块。这个模块可以处理用户通过web输入表单输入的数据。你可以在你的脚本中通过下面的语句导入该脚本：

```
import cgi

```

你也必须修改Python CGI脚本的执行权限，以防止web服务器不能调用。可以通过下面的命令增加执行权限：

```
# chmod o+x myscript-1.py

```

### Python CGI例子

涉及到Python CGI脚本的两个方案将会在下面讲述：

* 使用Python脚本创建一个网页
* 读取并显示用户输入的数据，并且在网页上显示结果

注意：Python cgi模块在方案2中是必需的，因为这涉及到用户从web表单输入数据。

### 例子1 ：使用Python脚本创建一个网页

对于这个方案，我们将通过创建包含一个单一提交按钮的网页/var/www/html/page1.html开始。

```
<html>
<h1>Test Page 1</h1>
<form name="input" action="/cgi-bin/myscript-1.py" method="get">
<input type="submit" value="Submit">
</form>
</html>

```

当"提交"按钮被点击，/var/www/cgi-bin/myscript-1.py脚本将被调用(通过action参数指定)。通过设置方法参数为"get"来指定一个"GET"请求，服务器将会返回指定的网页。/var/www/html/page1.html在浏览器中的显示情况如下：

![](/data/attachment/album/201412/04/232941b1d4dd2d6axx6u54.jpg)

/var/www/cgi-bin/myscript-1.py的内容如下：

```
#!/usr/bin/python
print "Content-Type: text/html"
print ""
print "<html>"
print "<h2>CGI Script Output</h2>"
print "<p>This page was generated by a Python CGI script.</p>"
print "</html>"

```

第一行声明表示这是使用 /usr/bin/python命令运行的Python脚本。"Content-Type: text/html"打印语句是必需的，这是为了让web服务器知道接受自CGI脚本的输出类型。其余的语句用来输出HTML格式的其余网页内容。

当"Submit"按钮点击，下面的网页将返回：

![](/data/attachment/album/201412/04/232943rn7iiws4g8z8pp78.jpg)

这个例子的要点是你可以决定哪些信息可以被CGI脚本返回。这可能包括日志文件的内容，当前登陆用户的列表，或者今天的日期。在你处理时拥有所有python库的可能性是无穷无尽的。

### 例子2：读取并显示用户输入的数据，并将结果显示在网页上

对于这个方案，我们将通过创建一个含有三个输入域和一个提交按钮的网页/var/www/html/page2.html开始。

```
<html>
<h1>Test Page 2</h1>
<form name="input" action="/cgi-bin/myscript-2.py" method="get">
First Name: <input type="text" name="firstName"><br>
Last Name: <input type="text" name="lastName"><br>
Position: <input type="text" name="position"><br>
<input type="submit" value="Submit">
</form>
</html>

```

当"Submit"按钮点击，/var/www/cgi-bin/myscript-2.py脚本将被执行(通过action参数指定)。/var/www//html/page2.html显示在web浏览器中的图片如下所示(注意，三个输入域已经被填写好了)：

![](/data/attachment/album/201412/04/232945rje944yen44u84m1.jpg)

/var/www/cgi-bin/myscript-2.py的内容如下：

```
#!/usr/bin/python
import cgi
form = cgi.FieldStorage()
print "Content-Type: text/html"
print ""
print "<html>"
print "<h2>CGI Script Output</h2>"
print "<p>"
print "The user entered data are:<br>"
print "<b>First Name:</b> " + form["firstName"].value + "<br>"
print "<b>Last Name:</b> " + form["lastName"].value + "<br>"
print "<b>Position:</b> " + form["position"].value + "<br>"
print "</p>"
print "</html>"

```

正如前面提到，import cgi语句用来确保能够处理用户通过web输入表单输入的数据。web输入表单被封装在一个表单对象中，叫做cgi.FieldStorage对象。一旦开始输出，"Content-Type: text/html"是必需的，因为web服务器需要知道接受自CGI脚本的输出格式。用户输入的数据在包含form["firstName"].value，form["lastName"].value，和 form["position"].value的语句中可以得到。那些中括号中的名称和**/var/www/html/page2.html**文本输入域中定义的名称参数一致。

当网页上的"Submit"按钮被点击，下面的网页将被返回。

![](/data/attachment/album/201412/04/232946w442bc70r7ebczwz.jpg)

这个例子的要点就是你可以很容易地读取并显示用户在web表单上输入的数据。除了以字符串的方式处理数据，你也可以用Python将用户输入的数据转化为可用于数值计算的数字。

### 结论

本教程演示了如何使用Python CGI脚本创建网页并处理用户在网页表单输入的数据。查阅更多关于Apache CGI脚本的信息，点击[这里](http://httpd.apache.org/docs/2.2/howto/cgi.html)。查阅更多关于Python cgi模块的信息，点击[这里](https://docs.python.org/2/library/cgi.html#module-cgi)。

---

via: <http://xmodulo.com/create-use-python-cgi-scripts.html>

作者：[Joshua Reed](http://xmodulo.com/author/joshua) 译者：[su-kaiyao](https://github.com/su-kaiyao) 校对：[wxy](https://github.com/wxy)

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


使用 GnuPG 加密签名来验证下载文件的可靠性和完整性

Summary: 当你从网上下载一个文件后（比如：安装程序、ISO镜像或者一个压缩包），文件可能在不同的情况下发生了损坏，比如：由于线路传输错误、中断的下载、存储硬件错误、文件系统错误等等。除了这些错误，文件还可能在下载前或者下载中的攻击而被有意地篡改了。比如，一个攻破证书颁发机构的攻击者可以实施一个MITM攻击（中间人攻击），欺骗你从HTTPS网站上下载隐藏恶意软件的文件。 要保护你自己免受这些问题的困扰，建议你去验证从网上下载的文件的可靠性和完整性。特别是你下载了一个非常敏感的文件的时候）（比如：操作系统镜像、二进制应用

感谢


CentOS Linux 7 发布滚动构建版

Summary: CentOS上周五宣布，CentOS Linux 的滚动构建版正式发布！这次发布包括了用于安装介质的CentOS Linux 7 的 ISO和通用的云镜像两种版本。 CentOS Linux 滚动构建版包括了从初始发布时到快照发布之间推送到 mirror.centos.org的所有更新。这些更新包括了 CentOS Linux 的安全更新、错误修复、功能增强以及常规更新。使用这个版本安装的机器将包括之前所有已经发布的更新，和使用 yum 更新的没有什么不同。所有的 rpm/yum 库仍旧存储在 mirror.centos.org上，位置和内容都没有变化。 我们将在每个月底前发布一个滚动更新版本。每个发布版本的

印象中sl也有滚动更新的版本

Repost

【CentOS Linux 7 发布滚动构建版 】

求 iso downloading url

7变动不少

出现类似心脏流血、破壳漏洞和狮子狗等重大安全漏洞时尽快提供解决方案不是打补丁吗，没有必要把系统重装一遍吧

1、你可以用滚动更新版本的 ISO来离线更新；2、新安装的会尽快得到更新的补丁，而不用安装完之后再更新。

不懂什么是滚动构建版

就像debian那样，debian7、debian7.1、debian7.2、debian7.3、debian7.4、debian7.5、debian7.6、debian7.7……

centos 7来了

root 密码多少

木有，需要你安装时设置啊。

CentOS上周五宣布，CentOS Linux 的滚动构建版正式发布！这次发布包括了用于安装介质的CentOS Linux 7 的 ISO和通用的云镜像两种版本。

CentOS Linux 滚动构建版包括了从初始发布时到快照发布之间推送到 [mirror.centos.org](http://mirror.centos.org) 的所有更新。这些更新包括了 CentOS Linux 的安全更新、错误修复、功能增强以及常规更新。使用这个版本安装的机器将包括之前所有已经发布的更新，和使用 yum 更新的没有什么不同。所有的 rpm/yum 库仍旧存储在 [mirror.centos.org](http://mirror.centos.org) 上，位置和内容都没有变化。

我们将在每个月底前发布一个滚动更新版本。每个发布版本的名字都包括一个时间戳和用于区分所包括内容的构建标记。如 20141129\_02 的文件名表示它包括了发布在 [mirror.centos.org](http://mirror.centos.org) 上的截止到 2014年11月29日在内的所有内容，而且是滚动周期中的第二次构建。所有的构建版本都会公开发布到 [buildlogs.centos.org/](http://buildlogs.centos.org/) 上，但是只有通过了 QA 和测试的才会标记为“发布”，并放到 [buildlogs.centos.org/rolling/](http://buildlogs.centos.org/rolling/) 下。我们也会在需要时（用于开发和测试）在不同的时间点上构建临时构建版本，这些临时构建版本不会当成通用发布版本，但是仍然可以公开得到。

因为需要测试这些镜像，所以这些版本的发布时间总是和它们的时间戳（及内容截止时间）有点延迟。我们希望尽可能的自动化这个过程来缩短这个时间差，但是终究还需要一点时间。

每个滚动周期，我们都希望能以滚动方式增加更多的内容。在紧接着的下一个周期（2014/12）我们会发布 CentOS Linux 7 的 Live 镜像的滚动构建版本，然后是 CentOS Linux 6的。

现在我们没有计划在这个滚动发行周期中包括 CentOS 5。

为了便于统一和交流，发布的介质将以其所包括的内容时间为标识，而不是以发布的时间为准。比如这次在12月发布的是2014/11月底的滚动构建版本。

其它的镜像，如容器及厂商特定的镜像，将和主 CentOS Linux 介质的滚动周期同步开始，不过如果需要的话，也许会迭代的更快。特别兴趣小组（Special Interest Groups - <http://wiki.centos.org/SpecialInterestGroup>
）也希望让他们的介质和安装器的发布尽量与滚动时间线同步。

最后，我要强调的是，**滚动发行版可以在出现类似心脏流血、破壳漏洞和狮子狗等重大安全漏洞时尽快提供解决方案**。

![](/data/attachment/album/201407/09/104559risei9g95hrarm1e.png)

---

### CentOS Linux 发行版安装介质:

文件： CentOS-7-x86\_64-DVD-20141129\_02.iso
Sha256校验： 85a46c62b5bfc701678bef7854bb73af4ccfb840dfcbfb2f9b2189e08fe9438c

文件： CentOS-7-x86\_64-Everything-20141129\_02.iso
Sha256校验： f9fdd8b12c9529a1e3bf7628ebee964b2aeb9fd66540de7b369e0fde6f7a4236

文件： CentOS-7-x86\_64-Minimal-20141129\_02.iso
Sha256校验：e1338d13178f1c66c17386b7ced0b1459c677ff9a1cf095ac4db377234cc03fa

以下符号链接总是指向最新的滚动发行版本：

<http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-DVD.iso>
- -> CentOS-7-x86\_64-DVD-20141129\_02.iso

<http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-Everything.iso>
- -> CentOS-7-x86\_64-Everything-20141129\_02.iso

<http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-Minimal.iso>- -> CentOS-7-x86\_64-Minimal-20141129\_02.iso

每次测试通过并发布后，这些符号链接都会指向到最新的滚动发行版本。

### 云和实例镜像：

CentOS Linux 7 通用云镜像包括了 Extras/ 库中的云初始化部分。这个镜像有多种格式及不同的内容。云镜像发布在： <http://cloud.centos.org/centos/7/images/>

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2
描述：这是一个基准镜像。
大小： 944 MB
Sha256校验： 7710ffdd497cf00fc72c22a3fa7cc7adb3424d3542521ca8fbe19eba9ded403f

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2c
描述：和上面的镜像内容一样，但是通过qemu qcow2 内部压缩设置运行，适合于开发和测试，它的 I/O 性能较低，所以不适合在产品环境中使用。
大小： 399MB
Sha256校验：db42e4fb9565e75f0acbe6b54a5b8822f3f1e9783fb1a553e1552c72ceaff8df

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2.xz
描述：这是一个标准的 qcow2 文件，通过 xz 压缩工具运行，适合于产品环境中使用。
大小： 266MB
Sha256校验：9b0b38c48a24164c15c33625972b87835501b6994c3ee894f6b79ce40e7d5e54

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.raw
描述： 这是一个原始格式的文件，没有使用 qcow2 镜像格式。它可以用“qemu-img convert”转换成其它的格式。
大小： 8GB.
Sha256校验：2e643310bdb3cda775905408dbfe378a5eed04e91db193165178afc5ed5492b8

以下符号链接总是指向最新的滚动发行版本：

<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2
<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2c>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2c
<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2.xz
<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.raw>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.raw

每次测试通过并发布后，这些符号链接都会指向到最新的滚动发行版本。

更多的信息请加入我们的 centos-devel 邮件列表（ <http://lists.centos.org/> ）。


Ubuntu 14.10 ‘乌托邦的独角兽’官方 T 恤开始发售

Summary: Ubuntu 14.10 发布以来，很少能见到随同发布的带有官方吉祥物的 T 恤。不过今天 Canonical 商店终于上架了这件粉丝喜欢的商品。 现在有两种T恤，一种是dusk blue（男士版本）或者hot pink（女士版本），但是审美与设计的形式是相同的。每种T恤印有由Canonical定制设计的折纸型的乌托邦的独角兽。每件衬衫的背面是Ubuntu的标识以及含有Utopic Unicorn 14.10文字，从前到后帮你推广系统-我喜欢！  男士的尺寸有从S到XXL， 女士的尺寸有8-10与14-16，每件T恤在英国的价格是11，美国的价格是$17.45，欧洲的价格是$17.45。这个价格较往年高一点

顺带问问，穿上这件T是不是就能控制浮游炮了→_→

啥时候linuxcn或lctt也出个tshirt[嘻嘻]

→_→想买Arch的//@但丁不淡定: 顺带问问，穿上这件T是不是就能控制浮游炮了→_→

**Ubuntu 14.10 发布以来，很少能见到随同发布的带有官方吉祥物的 T 恤。不过今天 Canonical 商店终于上架了这件粉丝喜欢的商品。**

现在有两种T恤，一种是‘dusk blue’（男士版本）或者‘hot pink’（女士版本），但是审美与设计的形式是相同的。每种T恤印有由Canonical定制设计的折纸型的‘乌托邦的独角兽’。每件衬衫的背面是Ubuntu的标识以及含有“Utopic Unicorn 14.10”文字，从前到后帮你推广系统-我喜欢！

![](/data/attachment/album/201412/07/224849r8vow8lg944w099v.jpg)

男士的尺寸有从S到XXL， 女士的尺寸有8-10与14-16，每件T恤在英国的价格是£11，美国的价格是$17.45，欧洲的价格是$17.45。这个价格较往年高一点，与以往一样这是不包括运费和包装费用的价格。

![ubuntu-tshirt-runner](/data/attachment/album/201412/07/224850ul66ewz9sjjjms69.jpg)

* [购买男士的 Ubuntu 14.10 T恤](http://shop.canonical.com/product_info.php?products_id=1153)
* [购买女士的 Ubuntu 14.10 T恤](http://shop.canonical.com/product_info.php?products_id=1159)

吉祥物 T 恤已经成为自Ubuntu 8.04 Hardy Heron后每个Ubuntu版本发布的传统，虽然它一般在系统发布前发布。

如果你不是特定版本的粉丝，你会发现可以购买的老版本吉祥物商品的数量有限且降价出售。如果你想在你的衬衫上印一条蝾螈，推广穿山甲或者塔尔羊，可以在[出售页面](http://shop.canonical.com/index.php?cPath=29)看看。

---

via: <http://www.omgubuntu.co.uk/2014/12/last-ubuntu-14-10-unicorn-t-shirts-now-available>

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

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


如何在 Linux 中使用屏幕键盘

Summary: 屏幕键盘可以作为实体键盘输入的替代方案。在某些时候，屏幕键盘显得非常需要。 比如， 你的键盘刚好坏了；你的机器太多，没有足够的键盘；你的机器没有多余的接口来连接键盘；你是个残疾人，打字有困难；或者你正在组建基于触摸屏的信息服务站。 屏幕键盘也可以作为一种防范实体键盘记录器的保护手段，键盘记录器会悄悄记录按键来获取密码等敏感信息。一些网上银行页面实际上会强制你使用屏幕键盘来增强交易的安全性。 在 linux 中有几个可用的开源键盘软件， 比如 GOK (Gnome 的屏幕键盘)，kvkbd，onboard，Florence。 我会在这个教程中

长知识

屏幕键盘可以作为实体键盘输入的替代方案。在某些时候，屏幕键盘显得非常需要。 比如， 你的键盘刚好坏了；你的机器太多，没有足够的键盘；你的机器没有多余的接口来连接键盘；你是个残疾人，打字有困难；或者你正在组建基于触摸屏的信息服务站。

屏幕键盘也可以作为一种防范实体键盘记录器的保护手段，键盘记录器会悄悄记录按键来获取密码等敏感信息。一些网上银行页面实际上会强制你使用屏幕键盘来增强交易的安全性。

在 linux 中有几个可用的开源键盘软件， 比如 [GOK (Gnome 的屏幕键盘)](https://developer.gnome.org/gok/)，[kvkbd](http://homepage3.nifty.com/tsato/xvkbd/)，[onboard](https://launchpad.net/onboard)，[Florence](http://florence.sourceforge.net/)。

我会在这个教程中集中讲解 Florence， 告诉你**如何用 Florence 设置一个屏幕键盘**。 Florence 有着布局方案灵活、输入法多样、自动隐藏等特性。作为教程的一部分，我也将会示范**如何只使用鼠标来操作 Ubuntu 桌面**。

### 在 Linux 中安装 Florence 屏幕键盘

幸运的是，Florence 存在于大多数 Linux 发行版的基础仓库中。

在 Debian，Ubuntu 或者 Linux Mint 中：

```
$ sudo apt-get install florence

```

在 Fedora，CentOS 或者 RHEL (CentOS/RHEL 需要[EPEL 仓库](http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html)) 中：

```
$ sudo yum install florence

```

在 Mandriva 或者 Mageia 中：

```
$ sudo urpmi florence

```

对于 Archlinux 用户，Florence 存在于 [AUR](https://aur.archlinux.org/packages/florence/) 中。

### 配置和加载屏幕键盘

当你安装好 Florence 之后，你只需要简单的输入以下命令就能加载屏幕键盘：

```
$ florence

```

默认情况下，屏幕键盘总是在其他窗口的顶部，让你能够在任意活动的窗口上进行输入。

在键盘的左侧点击工具按键来改变 Florence 的默认配置。

![](/data/attachment/album/201412/07/231138pap88g8of8de0gda.jpg)

在 Florence 的 "样式 (style)" 菜单中，你能够自定义键盘样式，启用/取消声音效果。

![](/data/attachment/album/201412/07/231142l1fuoa1ol7r4x6z5.png)

在“窗口 (window)”菜单中，你能够调整键盘背景透明度、按键不透明度，以及控制键盘比例、工具栏、尺寸和总是置顶等特性。如果你的桌面分辨率不是非常高，透明度调整就显得非常有用，因为屏幕键盘会挡住其他窗口。在这个例子中，我切换到透明键盘，并且设置不透明度为 50%。

![](/data/attachment/album/201412/07/231145gqyun9qu0kdgq07u.jpg)

在“行为 (behaviour)”菜单中，你能够改变输入方法。Florence 支持几种不同的输入法: 鼠标 (mouse)、触摸屏 (touch screen)、计时器 (timer) 和漫步 (ramble)。鼠标输入是默认输入法。最后的两种输入法不需要按鼠标键。 计时器输入通过将指针滞留在按键上一定时间来触发按键。漫步输入的原理跟**计时器**输入差不多，但是经过训练和灵巧使用，能够比**计时器**输入更加迅速。

![](/data/attachment/album/201412/07/231146dz0zu3pwhhx70bh1.png)

在“布局 (layout)”菜单中，你能够改变键盘布局。比如，你能够扩展键盘布局来增加导航键，数字键和功能键。

![](/data/attachment/album/201412/07/231148ldvdcezcedvhbhdc.jpg)

### 只使用鼠标来操作 Ubuntu 桌面

我将示范如何将 Florence 集成到 Ubuntu 桌面中，然后我们不需要实体键盘就能够进入桌面。这个教程使用 LightDM (Ubuntu 的默认显示管理器) 来进入 Ubuntu，其他桌面环境也能设置类似的环境。

初始设置时需要实体键盘，但是一旦设置完成，你只需要一个鼠标，而不是键盘。

当你启动 Ubuntu 桌面时，启动程序最后会停在显示管理器 (或者登录管理器) 的欢迎界面。在这个界面上你需要输入你的登录信息。默认的情况下，Ubuntu 桌面会使用 LightDM 显示管理器和 Unity 欢迎界面。如果没有实体键盘， 你就不能在登录界面输入用户名和密码。

为了能够在登录界面加载屏幕键盘，安装配备了屏幕键盘支持的 GTK+ 欢迎界面。

```
 $ sudo apt-get install lightdm-gtk-greeter

```

然后用编辑器打开欢迎界面配置文件 (/etc/lightdm/lightdm-gtk-greeter.conf)，指定 Florence 作为屏幕键盘来使用。如果你愿意，你也能够使用 Ubuntu 的默认屏幕键盘 onboard 来代替 Florence。

```
 $ sudo vi /etc/lightdm/lightdm-gtk-greeter.conf

```

---

```
[greeter]
keyboard=florence --no-gnome --focus &

```

![](/data/attachment/album/201412/07/231151hj51joo15taqz157.jpg)

重启 Ubuntu 桌面，然后看看你是否能够在登录界面使用屏幕键盘。

启动之后当你看到 GTK+ 欢迎界面时, 点击右上角的人形符号。你会看到“使用屏幕键盘 (On Screen Keyboard)”菜单选项，如下：

![](/data/attachment/album/201412/07/231153d5oizz6o53czddsa.jpg)

点击这个选项，屏幕键盘就会在登录界面弹出。现在你应该能够用屏幕键盘来登录了。

![](/data/attachment/album/201412/07/231155kfp4xe22o35rpapr.jpg)

对于 GDM2/GDM3 用户怎么在 GDM2/GDM3 界面上使用屏幕键盘，Florence 官方网页提供了 [文档 (documentation)](http://florence.sourceforge.net/english/how-to.html)。

Ubuntu 桌面完全无键盘化的最后一步是让屏幕键盘在登录后自动启动，这样我们在登录后能够不使用实体键盘就操作桌面，为了做到这一点，创建以下桌面文件：

```
$ mkdir -p ~/.config/autostart
$ vi ~/.config/autostart/florence.desktop

```

---

```
[Desktop Entry]
Type=Application
Name=Virtual Keyboard
Comment=Auto-start virtual keyboard
Exec=florence --no-gnome

```

这样可以让你在登录到桌面的时候就看到屏幕键盘。

![](/data/attachment/album/201412/07/231157o1jubu3bv2ksjiu7.jpg)

希望这个教程对你有用。与你所看到的一样，Florence 是非常强大的屏幕键盘，可以用于不同目的。请和我分享你使用屏幕键盘的经验。

---

via: <http://xmodulo.com/2014/08/onscreen-virtual-keyboard-linux.html>

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

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


Linux有问必答：如何修复“ImportError: No module named scapy.all”

Summary: 问题：当我运行一个Python应用程序时，出现了这个提示消息ImportError: No module named scapy.all。我怎样才能修复这个导入错误呢？  Scapy是一个用Python写的灵活的数据包生成及嗅探程序。使用Scapy，你可以完成创建任意数据包并发送到网络上、从网络上或转储文件中读取数据包、转换数据包等工作。使用Scapy的通用包处理能力，你可以很容易地完成像SYN扫描、TCP路由跟踪以及OS指纹检测之类的工作。你也可以通过Import，将Scapy整合到其它工具中。 该导入错误表明：你还没有在你的Linux系统上安装Scapy。下面介绍安装方法。  安装Scapy到

>
> **问题**：当我运行一个Python应用程序时，出现了这个提示消息“ImportError: No module named scapy.all”。我怎样才能修复这个导入错误呢？
>
>
>

[Scapy](http://www.secdev.org/projects/scapy/)是一个用Python写的灵活的数据包生成及嗅探程序。使用Scapy，你可以完成创建任意数据包并发送到网络上、从网络上或转储文件中读取数据包、转换数据包等工作。使用Scapy的通用包处理能力，你可以很容易地完成像SYN扫描、TCP路由跟踪以及OS指纹检测之类的工作。你也可以通过Import，将Scapy整合到其它工具中。

该导入错误表明：你还没有在你的Linux系统上安装Scapy。下面介绍安装方法。

![](/data/attachment/album/201412/07/233958sxy473667c4krmz8.png)

### 安装Scapy到Debian, Ubuntu或Linux Mint

```
 $ sudo apt-get install python-scapy

```

### 安装Scapy到Fedora或CentOS/RHEL

在CentOS/RHEL上，你首先需要[启用EPEL仓库](http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html)。

```
 $ sudo yum install scapy

```

### 源码安装Scapy

如果你的Linux版本没有提供Scapy包，或者你想要试试最新的Scapy，你可以手工使用源码包安装。

下载[最新版的Scapy](http://scapy.net/)，然后按照以下步骤安装。

```
$ unzip scapy-latest.zip
$ cd scapy-2.*
$ sudo python setup.py install

```

---

via: <http://ask.xmodulo.com/importerror-no-module-named-scapy-all.html>

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

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


如何在 Linux 上用 SQL 语句来查询 Apache 日志

Summary: Linux 有一个显著的特点，在正常情况下，你可以通过日志分析系统日志来了解你的系统中发生了什么，或正在发生什么。的确，系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源。我们将在这篇文章中着重讲解 Apache HTTP web server 生成的 Apache access 日志。 这次，我们会通过另类的途径来分析 Apache access 日志，我们使用的工具是 asql。asql 是一个开源的工具，它能够允许使用者使用 SQL 语句来查询日志，从而通过更加友好的格式展现相同的信息。  Apache 日志背景知识 Apache 有两种日志：  Access log：存放在路径 /v

[哈哈][哈哈][哈哈]

不错

Linux 有一个显著的特点，在正常情况下，你可以通过日志分析系统日志来了解你的系统中发生了什么，或正在发生什么。的确，系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源。我们将在这篇文章中着重讲解 Apache HTTP web server 生成的 Apache access 日志。

这次，我们会通过另类的途径来分析 Apache access 日志，我们使用的工具是 [asql](http://www.steve.org.uk/Software/asql/)。asql 是一个开源的工具，它能够允许使用者使用 SQL 语句来查询日志，从而通过更加友好的格式展现相同的信息。

![](/data/attachment/album/201412/08/234125qboar2br0o4rtbz1.jpg)

### Apache 日志背景知识

Apache 有两种日志：

* **Access log**：存放在路径 /var/log/apache2/access.log (Debian) 或者 /var/log/httpd/access\_log (Red Hat)。Access Log 记录所有 Apache web server 执行的请求。
* **Error log**：存放在路径 /var/log/apache2/error.log (Debian) 或者 /var/log/httpd/error\_log (Red Hat)。Error log 记录所有 Apache web server 报告的错误以及错误的情况。Error 情况包括（不限于）403（Forbidden，通常在请求被拒绝访问时被报告），404（Not found，在请求资源不存在时被报告）。

虽然管理员可以通过配置 Apache 的配置文件来自定义 Apache access log 的详细程度，不过在这篇文章中，我们会使用默认的配置，如下：

```
远程 IP - 请求时间 - 请求类型 - 响应代码 - 请求的 URL - 远程的浏览器信息 (也许包含操作系统信息)

```

因此一个典型的 Apache 日志条目就是下面这个样子：

```
192.168.0.101 - - [22/Aug/2014:12:03:36 -0300] "GET /icons/unknown.gif HTTP/1.1" 200 519 "http://192.168.0.10/test/projects/read_json/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0"

```

但是 Apache error log 又是怎么样的呢？因为 error log 条目主要记录 access log 中特殊的请求（你可以自定义），所以你可以通过 access log 来获得关于错误情况的更多信息（example 5 有更多细节）。

此外要提前说明的， access log 是系统级别的日志文件。要分析虚拟主机的日志文件，你需要检查它们相应的配置文件（例如： 在 /etc/apache2/sites-available/[virtual host name] 里（Debian））。

### 在 Linux 上安装 asql

asql 由 Perl 编写，而且需求以下两个 Perl 模块：SQLite 的 DBI 驱动以及 GNU readline。

### 在 Debian, Ubuntu 以及其衍生发行版上安装 asql

使用基于 Debian 发行版上的 aptitude，asql 以及其依赖会被自动安装。

```
# aptitude install asql

```

### 在 Fedora，CentOS，RHEL 上安装 asql

在 CentOS 或 RHEL 上，你需要启用 [EPEL repository](http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html)，然后运行以下代码。在 Fedora 中，直接运行以下代码：

```
# sudo yum install perl-DBD-SQLite perl-Term-Readline-Gnu
# wget http://www.steve.org.uk/Software/asql/asql-1.7.tar.gz
# tar xvfvz asql-1.7.tar.gz
# cd asql
# make install

```

### asql 是如何工作的？

从上面代码中的依赖中你就可以看出来，asql 转换未结构化的明文 Apache 日志为结构化的 SQLite 数据库信息。生成的 SQLite 数据库可以接受正常的 SQL 查询语句。数据库可以通过当前以及之前的日志文件生成，其中也包括压缩转换过的日志文件，类似 access.log.X.gz 或者 access\_log.old。

首先，从命令行启动 asql：

```
# asql

```

你会进入 asql 内置的 shell 交互界面。

![](/data/attachment/album/201412/08/234127co3gidxseyewyush.png)

输入 help 列表可执行的命令：

![](/data/attachment/album/201412/08/234129gfkiazyna4kvno3o.png)

首先在 asql 中加载所有的 access 日志：

```
asql > load <apache-access-logs 的路径>

```

比如在 Debian 下：

```
asql > load /var/log/apache2/access.*

```

在 CentOS/RHEL 下：

```
asql > load /var/log/httpd/access_log*

```

当 asql 完成对 access 日志的加载后，我们就可以开始数据库查询了。注意一下，加载后生成的数据库是 "temporary" （临时）的，意思就是数据库会在你退出 asql 的时候被清除。如果你想要保留数据库，你必须先将其保存为一个文件。我们会在后面介绍如何这么做（参考 example 3 和 4）。

![](/data/attachment/album/201412/08/234130juerl3ejdsw4drl3.png)

生成的数据库有一个名为 logs 的表。输入下面的命令列出 logs 表中提供的域：

![](/data/attachment/album/201412/08/234133fbnssbqib6blgll8.png)

一个名为 .asql 的隐藏文件，保存于用户的 home 目录下，记录用户在 asql shell 中输入的命令历史。因此你可以使用方向键浏览命令历史，按下 ENTER 来重复执行之前的命令。

### asql 上的示例 SQL 查询

下面是几个使用 asql 针对 Apache 日志文件运行 SQL 查询的示例：

**Example 1**：列出在 2014 年 10 月中请求的来源 / 时间以及 HTTP 状态码。

```
SELECT source, date, status FROM logs WHERE date >= '2014-10-01T00:00:00' ORDER BY source;

```

![](/data/attachment/album/201412/08/234135xx3ey0z0kltylxte.jpg)

**Example 2**：从小到大显示单个客户端处理的请求大小（bytes）。

```
SELECT source, SUM(size), AS NUMBER FROM logs GROUP BY source ORDER BY Number DESC;

```

![](/data/attachment/album/201412/08/234137sg0kgynzynv4nat4.jpg)

**Example 3**：在当前目录中保存数据库为 [filename]。

```
save [filename]

```

![](/data/attachment/album/201412/08/234138zctgev5p2pvpdp77.png)

这样做可以避免使用 load 命令对日志的语法分析所占用的处理时间。

**Example 4**：在重新进入 asql 后载入数据库。

```
restore [filename]

```

![](/data/attachment/album/201412/08/234140frnlylbb24vbee11.png)

**Example 5**：返回 access 日志中记录的 error 情况。在这个例子中，我们将显示所有返回 HTTP 状态码为 403（access forbidden）的请求。

```
SELECT source, date, status, request FROM logs WHERE status='403' ORDER BY date

```

![](/data/attachment/album/201412/08/234143qrub0cbqnc5fnqo0.jpg)

这个例子想要表现的是：虽然 asql 只分析 access 日志，我们还是可以通过使用请求的状态域来显示有 error 情况的请求。

### 小结：

我们体验了 asql 如何帮助我们分析 Apache 日志文件，并将结果通过友好的格式输出。虽然你也可以通过使用命令行的工具（例如 cat 与 grep，uniq，sort，wc 等等之间的管道）来实现类似功能，与此比较起来 asql 展示了它如同瑞士军刀一般的强大功能，使我们在自己的需求下能够通过标准 SQL 查询语句来过滤日志。

希望这篇教程能帮助到你们。

请不要拘束地将评论文章，分享文章，提出疑问。

---

via: <http://xmodulo.com/sql-queries-apache-log-files-linux.html>

作者：[Gabriel Cánepa](http://xmodulo.com/author/gabriel) 译者：[ThomazL](https://github.com/ThomazL) 校对：[wxy](https://github.com/wxy)

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


同行代码审查（Peer Code Review）实战经验

Summary: 我有时候会听到我们的团队成员这样议论： "项目的Code review 只是浪费时间。" "我没有时间做Code review。" "我的发布时间延迟了，因为我的同事还没有完成我代码的Code review。" "你相信我的同事居然要求我对我的代码做修改吗？请跟他们说代码中的一些联系会被打断如果在我原来代码的基础之上做修改的话。" (LCTT 译注：Code Review中文可以翻译成代码审查,一般由开发待review的代码的成员以外的团队成员来进行这样的工作。由于是专业术语，没有将Code review用中文代替。)  为什么要做Code review？ 每个专业软件开发者都有一个重要的

觉得Peer Code Review在这里译成同行代码审议是不是更好？

+1//@爱开源魅影: 觉得Peer Code Review在这里译成同行代码审议是不是更好？

@我的印象笔记

我有时候会听到我们的团队成员这样议论：

"项目的Code review 只是浪费时间。"

"我没有时间做Code review。"

"我的发布时间延迟了，因为我的同事还没有完成我代码的Code review。"

"你相信我的同事居然要求我对我的代码做修改吗？请跟他们说代码中的一些联系会被打断——如果在我原来代码的基础之上做修改的话。"

(LCTT 译注：Code Review中文可以翻译成代码审查,一般由开发待review的代码的成员以外的团队成员来进行这样的工作。由于是专业术语，没有将Code review用中文代替。)

![](/data/attachment/album/201412/09/001536y3ri8ov2jpgi82i0.jpg)

### 为什么要做Code review？

每个专业软件开发者都有一个重要的目标：持续的提高他们的工作质量。即使你团队中都是一些优秀的程序员，但是你依然不能将你自己与一个有能力的自由职业者区分开来，除非你从团队的角度来工作。Code review是团队工作的一个重要的方面。尤其是：

代码复查者(reviewer)能从他们的角度来发现问题并且提出更好的解决方案。

确保至少你团队的另一个其他成员熟悉你的代码，通过给新员工看有经验的开发者的代码能够某种程度上提高他们的水平。

公开reviewer和被复查者的想法和经验能够促进团队间的知识的分享。

能够鼓励开发者将他们的工作进行的更彻底，因为他们知道他们的代码将被其他的人阅读。

### 在review的过程中的注意点

但是，由于Code review的时间有限，上面所说的目标未必能全部达到。就算只是想要打一个补丁，都要确保意图是正确的。如果只是将变量名改成骆驼拼写法(camelCase)，那不算是code review。在开发过程中进行结对编程是有益处的，它能够使两个人得到公平的锻炼。你能够在code review上花许多时间，并且仍然能够比在结对编程中使用更少的时间。

我的感受是，在项目开发的过程中，25%的时间应该花费在code review上。也就是说，如果开发者用两天的时间来开发一个东西，那么复查者应该使用至少四个小时来审查。

当然，只要你的review结果准确的话，具体花了多少时间就显得不是那么的重要。重要的是，你能够理解你看的那些代码。这里的理解并不是指你看懂了这些代码书写的语法，而是你要知道这段代码在整个庞大的应用程序、组件或者库中起着什么样的作用。如果你不理解每一行代码的作用，那么换句话说，你的code review就是没有价值的。这就是为什么好的code review不能很快完成的原因。需要时间来探讨各种各样的代码路径，让它们触发一个特定的函数，来确保第三方的API得到了正确的使用(包括一些边缘测试)。

为了查阅你所审查的代码的缺陷或者是其他问题，你应该确保：

* 所有必要的测试都已经被包含进去。
* 合理的设计文档已经被编写。

再熟练的开发者也不是每次都会记得在他们对代码改动的时候把测试程序和文档更新上去。来自reviewer的一个提醒能够使得测试用例和开发文档不会一直忘了更新。

### 避免code review负担太大

如果你的团队没有强制性的code review，当你的code review记录停留在无法管理的节点上时会很危险。如果你已经两周没有进行code review了，你可以花几天的时间来跟上项目的进度。这意味着你自己的开发工作会被阻断，当你想要处理之前遗留下来的code review的时候。这也会使得你很难再确保code review的质量，因为合理的code review需要长期认真的努力，最终会很难持续几天都保持这样的状态。

由于这个原因，开发者应当每天都完成他们的review任务。一种好办法就是将code review作为你每天的第一件事。在你开始自己的开发工作之前完成所有的code review工作，能够使你从头到尾都集中注意力。有些人可能更喜欢在午休前或午休后或者在傍晚下班前做review。无论你在哪个时间做，都要将code review看作你的工作之一并且不能分心，你要避免：

* 没有足够的时间来处理你的review任务。
* 由于你的code review工作没有做完导致版本的推迟发布。
* 提交不再相关的review，由于代码在你review期间已经改动太大。
* 因为你要在最后一分钟完成他们，以至于review质量太差。

### 书写易于review的代码

有时候review没有按时完成并不都是因为reviewer。如果我的同事使用一周时间在一个大工程中添加了一些乱七八糟的代码，且他们提交的补丁实在是太难以阅读。在一段代码中有太多的东西要浏览。这样会让人难以理解它的作用，自然会拖慢review的进度。

为什么将你的工作划分成一些易于管理的片段很重要有很多原因。我们使用scrum方法论(一种软件开发过程方法)，因此对我们来说一个合理的单元就是一个story。通过努力将我们的工作使用story组织起来，并且只是将review提交到我们正在工作的story上，这样，我们写的代码就会更加易于review。你们也可以使用其他的软件开发方法，但是目的是一样的。

书写易于review的代码还有其他先决条件。如果要做一些复杂的架构决策，应该让reviewer事先知道并参与讨论。这会让他们之后review你们的代码更加容易，因为他们知道你们正在试图实现什么功能并且知道你们打算如何来实现。这也避免了开发者需要在reviewer提了一个不同的或者更好的解决方案后大片的重写代码。

项目需要应当在设计文档中详细的描述。这对于一个项目新成员想要快速上手并且理解现有的代码来说非常重要。这从长远角度对于一个reviewer来说也非常有好处。单元测试也有助于reviewer知道一些组件是怎么使用的。

如果你在你的补丁中包含的第三方的代码，记得单独的提交它。当jQuery的9000行代码被插入到了项目代码的中间，毫无疑问会造成难以阅读。

创建易读的review代码的另一个非常重要的措施是添加相应的注释代码。这就要求你事先自己做一下review并且在一些你认为会帮助reviewer进行review的地方加上相应的注释。我发现加上注释相对于你来说往往只需要很短的时间(通常是几分钟)，但是对于review来说会节约很多的时间。当然，代码注释还有其他相似的好处，应该在合理的地方使用，但往往对code review来说更重要。事实上，有研究表明，开发者在重读并注释他们代码的过程中，通常会发现很多问题。

### 代码大范围重构的情况

有时候，有必要重构一段代码使其能够作用于多个其他组件。若是一个大型的应用要这样做，会花费几天甚至是更多的时间，结果是生成一个诺大的补丁包。在这种情况下，进行一个标准的code review可能是不切实际的。

最好的方法是增量重构你的代码。找出合理范围内的一部分改变，以此为基础来重构。一旦修改和review完成，进入第二个增量。以此类推，直到整个重构完成。这种方法可能不是在所有的情况下都可行，但是尽管如此，也能避免在重构时出现大量的单片补丁。开发者使用这种方式重构可能会花去更多的时间，但这也使得代码质量更高并且之后的review会更简单。

如果实在是没有条件去通过增量方式重构代码(有人可能会说之前的代码书写并组织的是多么的好)，一种解决方案是在重构时进行结对编程来代替code review。

### 解决团队成员之间的纠纷

你的团队中都是一些有能力的专家，在一些案例中，完全有可能因为对一个具体编码问题的意见的不同而产生争论。作为一个开发者，应该保持一个开发的头脑并且时刻准备着妥协，当你的reviewer更想要另一种解决方法时。不要对你的代码持有专有的态度，也不要自己持有审查的意见。因为有人会觉得你应该将一些重复的代码写入一个能够复用的函数中去，这并不意味着这是你的问题。

作为一个reviewer，要灵活。在提出修改建议之前，考虑你的建议是否真的更好或者只是无关紧要。如果你把力气和注意力花在那些原来的代码会明确需要改进的地方会更加成功。你应该说"它或许值得考虑..."或者"一些人建议..."而不是”我的宠物都能写一个比这个更加有效的排序方法"。

如果你真的决定不了，那就询问另一个你及你所审查的人都尊敬的开发者来听一下你意见并给出建议。

---

via: <http://blog.salsitasoft.com/practical-lessons-in-peer-code-review/>

作者：Matt 译者：[john](https://github.com/johnhoow) 校对：[wxy](https://github.com/wxy)

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


如何在Linux上构建 RAID 10阵列

mk

@有道云笔记收藏

RAID 10阵列（又名RAID 1+0 或先镜像后分区）通过结合RAID 0 （读写操作在多个磁盘上同时并行执行）和RAID 1（数据被完全相同地写入到两个或更多的磁盘）两者的特点实现高性能和高容错性的磁盘I/O。

这篇文章会指导你如何使用五块相同的8GB磁盘来组成一个软件RAID 10阵列。因为组成一个RAID 10阵列至少需要4块磁盘（比如，两个镜像各有一对分区组合），而且需要添加一块额外的备用磁盘以防某块主要的磁盘出错。本文也会分享一些工具，在稍后用来分析RAID阵列的性能。

注意RAID 10的优缺点和其它分区方法（在不同大小的磁盘和文件系统上）的内容不在本文讨论范围内。

![](/data/attachment/album/201412/10/002555opmd7d77x3x7mdvk.png)

### Raid 10 阵列如何工作？

如果你需要实现一种支持I/O密集操作（比如数据库、电子邮件或web服务器）的存储解决方案，RAID 10就是你需要的。来看看为什么这么说，请看下图。

![](/data/attachment/album/201412/10/002559hh5a5fufu642xr59.png)

上图中的文件由A、B、C、D、E和F六种块组成，每一个RAID 1镜像对（如镜像1和2）在两个磁盘上复制相同的块。在这样的配置下，写操作性能会因为每个块需要写入两次而下降，每个磁盘各一次；而读操作与从单块磁盘中读取相比并未发生改变。不过这种配置的好处是除非一个镜像中有超过一块的磁盘故障，否则都能保持冗余以维持正常的磁盘I/O操作。

RAID 0的分区通过将数据划分到不同的块，然后执行同时将块A写入镜像1、将块B写入镜像2（以此类推）的并行操作以提高整体的读写性能。在另一方面，没有任何一个镜像包含构成主存的数据片的全部信息。这就意味着如果其中一个镜像故障，那么整个RAID 0组件将无法正常工作，数据将遭受不可恢复的损失。

### 建立RAID 10阵列

有两种建立RAID 10阵列的可行方案：复杂法（一步完成）和嵌套法（先创建两个或更多的RAID 1阵列，然后使用它们组成RAID 0）。本文会讲述复杂法创建RAID 10阵列的过程，因为这种方法能够使用偶数或奇数个磁盘去创建阵列，而且能以单个RAID设备的形式被管理，而嵌套法则恰恰相反（只允许偶数个磁盘，必须以嵌套设备的形式被管理，即分开管理RAID 1和RAID 0）。

假设你的机器已经安装mdadm，并运行着相应的守护进程，细节参见[这篇文章](http://xmodulo.com/create-software-raid1-array-mdadm-linux.html)。也假设每个磁盘上已经划分出一个主分区sd[bcdef]1 （LCTT 译注：共计五块磁盘，这里是从sdb - sdf）。使用命令：

```
ls -l /dev | grep sd[bcdef]

```

查看到的输出应该如下所示：

![](/data/attachment/album/201412/10/002602nf2zgee50prddzpp.jpg)

然后使用下面的命令创建一个RAID 10阵列（LCTT 译注：使用了四块磁盘 bcde 创建）：

```
 # mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]1 --spare-devices=1 /dev/sdf1

```

![](/data/attachment/album/201412/10/002604q22dde2222lhsoe2.jpg)

当阵列创建完毕后（最多花费几分钟），执行命令

```
# mdadm --detail /dev/md0

```

的输出应如下所示：

![](/data/attachment/album/201412/10/002606mqfa1cf5r5hfyy2r.png)

在更进一步之前需要注意以下事项。

1. **Used Dev Space**表示阵列所使用的每一块磁盘的容量。
2. **Array Size**表示阵列的整体大小。RAID 10阵列的大小通过(N\*C)/M计算，其中N是活跃磁盘的数目，C是每个活跃磁盘的容量，M是每一个镜像中磁盘的数目。在本文的情形下，这个值等于（4\*8GiB）/2 = 16GiB。
3. **Layout**是整个数据布局的详细信息。可能的布局数值如下所示。

---

* **n**(默认选项)：代表就近（near）拷贝。一个数据块的多个拷贝在不同磁盘里有相同的偏移量。这种布局提供和RAID 0阵列相似的读写性能。

![](/data/attachment/album/201412/10/002608meanweg2s0itmh20.png)

* **o**代表偏移量（offset）拷贝。块并不是在条带里面复制的，而是整个条带一起复制，但是循环会打乱，所以同一个分区中复制的块会出现在不同的磁盘。因此，一个块的后续拷贝会出现在下一个磁盘中，一个块接着一个块。为了在RAID 10阵列中使用这种布局，在创建阵列的命令中添加--layout=o2选项。

![](/data/attachment/album/201412/10/002610fd9ls0uc6w9r1s4d.png)

* **f**代表远端（far）拷贝（多个拷贝在不同的磁盘中具有不同的偏移量）。这种布局提供更好的读性能但带来更差的写性能。因此，对于读远远多于写的系统来说是最好的选择。为了在RAID 10阵列中使用这种布局，在创建阵列的命令中添加--layout=f2。

![](/data/attachment/album/201412/10/002612xpsihw4hbrh6syzb.png)

跟在布局选项**n**、**f**和**o**后面的数字代表所需的每一个数据块的副本数目。默认值是2，但可以是2到阵列中磁盘数目之间的某个值。提供足够的副本数目可以最小化单个磁盘上的I/O影响。

1. **Chunk Size**，参考[Linux RAID wiki](https://raid.wiki.kernel.org/)的说明，是写入磁盘的最小数据单元。最佳的chunk大小取决于I/O操作的速率和相关的文件大小。对于大量的写操作，通过设置相对较大的chunk可以得到更低的开销，但对于主要存储小文件的阵列来说更小的chunk性能更好。为了给RAID 10指定一个chunk大小，在创建阵列的命令中添加**--chunk=desired*chunk*size**。

不幸的是，并没有设置一个大小就能适合全局的策略来提高性能，但可以参考下面的一些方案。

* 文件系统：就整体而言，[XFS](http://ask.xmodulo.com/create-mount-xfs-file-system-linux.html)据说是最好的，当然EXT4也是不错的选择。
* 最佳布局：远端布局能提高读性能，但会降低写性能。
* 副本数目：更多的副本能最小化I/O影响，但更多的磁盘需要更大的花费。
* 硬件：在相同的环境下，SSD比传统（机械旋转）磁盘更能带来出性能提升

### 使用DD进行RAID性能测试

下面的基准测试用于检测RAID 10阵列（/dev/md0）的性能。

#### 1. 写操作

往磁盘中写入大小为256MB的单个文件：

```
# dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync

```

写入1000次512字节：

```
# dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync

```

使用dsync标记，dd可以绕过文件系统缓存，在RAID阵列上执行同步写。这个选项用于减少RAID性能测试中缓存的影响。

#### 2. 读操作

从阵列中拷贝256KiB\*15000（3.9 GB）大小内容到/dev/null:

```
 # dd if=/dev/md0 of=/dev/null bs=256K count=15000

```

### 使用Iozone进行RAID性能测试

[Iozone](http://www.iozone.org/)是一款文件系统基准测试工具，用来测试各种磁盘I/O操作，包括随机读写、顺序读写和重读重写。它支持将结果导出为微软的Excel或LibreOffice的Calc文件。

#### 在CentOS/RHEL 7上安装Iozone

先保证[Repoforge](http://xmodulo.com/how-to-set-up-rpmforge-repoforge-repository-on-centos.html)可用，然后输入：

```
# yum install iozone

```

#### 在Debian 7上安装Iozone

```
# aptitude install iozone3

```

下面的iozone命令会在RAID-10阵列中执行所有测试：

```
# iozone -Ra /dev/md0 -b /tmp/md0.xls

```

* **-R**：往标准输出生成兼容Excel的报告
* **-a**：以全自动模式运行所有的测试，并测试各种记录/文件大小。记录大小范围：4K-16M，文件大小范围：64K-512M。
* **-b /tmp/md0.xls**: 把测试结果存储到一个指定的文件中

希望这篇文章对你有所帮助，如果想到任何想法或建议可能会提升RAID 10的性能，请讲出来。

---

via: <http://xmodulo.com/setup-raid10-linux.html>

作者：[Gabriel Cánepa](http://xmodulo.com/author/gabriel) 译者：[KayGuoWhu](https://github.com/KayGuoWhu) 校对：[wxy](https://github.com/wxy)

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


Nathive——libre软件图像编辑器

造轮子

wow试试呗

看了这个logo就没有兴趣了。

看看这货的toolbox就知道long way to go.

感觉还不错……

@我的印象笔记

//@LR机器学习计算机视觉: //@jelly_fly:转发微博

没有用过

翻译君你还好吗。。

Nathive是一个libre软件图像编辑器，类似于 Adobe Photoshop、Corel Photo-Paint 或 GIMP，但是侧重于适用性和逻辑性，并为每个用户提供平滑的学习曲线。该项目在 GNOME 桌面环境中运行，并欢迎每个人参与到合作中，分享代码、翻译或想法等方面。

该项目尚处于测试阶段，所以它还是个未完成的工作，还不适用于终端用户。直到现在，开发始终专注于积淀应用的核心功能和创建便捷的开发工具。所以，目前我们将致力于创建新的插件，因为很明显在这方面还很缺乏。

其目的是在不放弃最初的可用性的情况下，逐步将该软件打造成一个专业的图像编辑器。Nathive由基于GTK+的Python脚本写成的，它设计为简洁、轻量，而且易于安装和使用。

### 在 ubuntu 上安装Nathive

你需要从[这里](http://www.nathive.org/download)下载.deb包，然后双击来安装。

### 屏幕截图

![](/data/attachment/album/201412/11/205525fb5dh0gh66mgdf5i.png)

![](/data/attachment/album/201412/11/205528qwsvj4zyvz2j3aey.png)

![](/data/attachment/album/201412/11/205533jej58mwf6jrr6ldj.png)

---

via: <http://www.ubuntugeek.com/nathive-a-libre-software-image-editor.html>

作者：[ruchi](http://www.ubuntugeek.com/author/ubuntufix) 译者：[GOLinux](https://github.com/GOLinux) 校对：[Caroline](https://github.com/carolinewuyan)

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


Linux有问必答——如何在Linux命令行中剪裁图像

Summary: 问题：我想要去除图像文件中的白色空白，有没有什么便捷的方法能在Linux命令行中对图像文件进行剪裁？答：当涉及到在Linux中转换或编辑图像文件时，ImageMagick毫无疑问是最为熟知的一体化软件之一。它包含了一整套命令行工具，用以显示、转换，或复制超过200中类型的光栅或矢量图像文件，所有这一切都在命令行下完成。ImageMagick可以用于多样化的图像编辑工作，如转换文件格式，添加特殊效果，添加文本，以及改变图像（调整大小、旋转、翻转、剪裁）。

screenshot全屏  -a部分

>
> **问题**：我想要去除图像文件中的白色空白，有没有什么便捷的方法能在Linux命令行中对图像文件进行剪裁？
>
>
>

当涉及到在Linux中转换或编辑图像文件时，ImageMagick毫无疑问是最为熟知的一体化软件之一。它包含了一整套命令行工具，用以显示、转换，或复制超过200中类型的光栅或矢量图像文件，所有这一切都在命令行下完成。ImageMagick可以用于多样化的图像编辑工作，如转换文件格式，添加特殊效果，添加文本，以及改变图像（调整大小、旋转、翻转、剪裁）。

![](/data/attachment/album/201412/12/110556rgxej4y8q6f74x8k.png)

如果你想要剪裁映像以去除空白，你可以使用ImageMagick自带的两个命令行工具。如果你还没有安装ImageMagick，请参照[本指南](http://ask.xmodulo.com/install-imagemagick-linux.html)来安装。

在本教程中，让我们来剪裁以下PNG图像。我们想要去除图像右边和底部的边缘，以便让图标居中。

[![](/9d177b6255fca3bf0b6f92ab1c6e52f211127e24/68747470733a2f2f6661726d382e737461746963666c69636b722e636f6d2f373536322f31353638383234323331395f656431396163613361325f7a2e6a7067)](https://camo.githubusercontent.com/9d177b6255fca3bf0b6f92ab1c6e52f211127e24/68747470733a2f2f6661726d382e737461746963666c69636b722e636f6d2f373536322f31353638383234323331395f656431396163613361325f7a2e6a7067)

首先，鉴定图像文件的尺寸（宽度和高度）。你可以使用identity命令来完成。

```
 $ identify chart.png

```

---

```
chart.png PNG 1500x1000 1500x1000+0+0 8-bit DirectClass 31.7KB 0.000u 0:00.000

```

就像上面显示的那样，输入的图像是1500x1000px。

接下来，确定图像剪裁要做的两件事：（1）剪裁图像开始的位置（2）剪裁矩形区域的大小。

在本实例中，让我们假定图像剪裁从左上角开始，更精确点是在x=20px和y=10px，那样的话，剪裁后的图像尺寸为1200x700px。

用于剪裁图像的工具是convert。使用“-crop”选项后，convert命令会在输入图像中剪裁出一个矩形区域。

```
 $ convert chart.png -crop 1200x700+20+10 chart-cropped.png

```

指定输入图像为chart.png，convert命令会将剪裁后的图像存储为chart-cropped.png。

[![](/f158419548fe0ad4ef5dc1cb8c72882cc9fadde9/68747470733a2f2f6661726d382e737461746963666c69636b722e636f6d2f373532372f31353837323237313436315f343031323736653037325f7a2e6a7067)](https://camo.githubusercontent.com/f158419548fe0ad4ef5dc1cb8c72882cc9fadde9/68747470733a2f2f6661726d382e737461746963666c69636b722e636f6d2f373532372f31353837323237313436315f343031323736653037325f7a2e6a7067)

---

via: <http://ask.xmodulo.com/crop-image-command-line-linux.html>

译者：[GOLinux](https://github.com/GOLinux) 校对：[Caroline](https://github.com/carolinewuyan)

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


使用条块化I/O管理多个LVM磁盘（第五部分）

Summary: 在本文中，我们将了解逻辑卷是如何通过条块化I/O来写入数据到磁盘的。逻辑卷管理的酷炫特性之一，就是它能通过条块化I/O跨多个磁盘写入数据。  LVM条块化是什么？ LVM条块化是LVM功能之一，该技术会跨多个磁盘写入数据，而不是对单一物理卷持续写入。  使用条块化I/O管理LVM磁盘 条块化特性  它会改善磁盘性能。 避免对单一磁盘的不断的大量写入。 使用对多个磁盘的条块化写入，可以减少磁盘填满的几率。  在逻辑卷管理中，如果我们需要创建一个逻辑卷，扩展的卷会完全映射到卷组和物理卷。在此种情形中，如果其中一个PV（物理卷）被填满

@我的印象笔记

作为多硬盘用户，码。

在本文中，我们将了解逻辑卷是如何通过条块化I/O来写入数据到磁盘的。逻辑卷管理的酷炫特性之一，就是它能通过条块化I/O跨多个磁盘写入数据。

![](/data/attachment/album/201412/15/161740rxmkog9vxthmfpvp.jpg)

### LVM条块化是什么？

**LVM条块化**是LVM功能之一，该技术会跨多个磁盘写入数据，而不是对单一物理卷持续写入。

![Manage LVM Disks Using Striping I/O](/data/attachment/album/201412/15/161745rnhcb8ye3c8wywxl.jpeg)

*使用条块化I/O管理LVM磁盘*

#### 条块化特性

* 它会改善磁盘性能。
* 避免对单一磁盘的不断的大量写入。
* 使用对多个磁盘的条块化写入，可以减少磁盘填满的几率。

在逻辑卷管理中，如果我们需要创建一个逻辑卷，扩展的卷会完全映射到卷组和物理卷。在此种情形中，如果其中一个**PV**（物理卷）被填满，我们需要从其它物理卷中添加更多扩展。这样，添加更多扩展到PV中后，我们可以指定逻辑卷使用特定的物理卷写入I/O。

假设我们有**四个磁盘**驱动器，分别指向了四个物理卷，如果各个物理卷总计可以达到**100 I/O**，我们卷组就可以获得**400 I/O**。

如果我们不使用**条块化方法**，文件系统将横跨基础物理卷写入。例如，写入一些数据到物理卷达到100 I/O，这些数据只会写入到第一个PV（**sdb1**）。如果我们在写入时使用条块化选项创建逻辑卷，它会分割100 I/O分别写入到四个驱动器中，这就是说每个驱动器中都会接收到25 I/O。

这会在循环过程中完成。如果这些逻辑卷其中任何一个需要扩展，在这种情形下，我们不能添加1个或2个PV，必须添加所有4个pv来扩展逻辑卷大小。这是条块化特性的缺点之一，从中我们可以知道，在创建逻辑卷时，我们需要为所有逻辑卷分配相同的条块大小。

逻辑卷管理有着这些特性，它使我们能够同时在多个pv中条块化数据。如果你对逻辑卷熟悉，你可以去设置逻辑卷条块化。反之，你则必须了解逻辑卷管理的基础知识了，请阅读更基础的文章来了解逻辑卷管理。

#### 我的服务器设置

这里，我使用**CentOS6.5**用作练习。下面这些步骤也适用于RHEL、Oracle Linux以及大多数发行版。

```
操作系统：    CentOS 6.5
IP地址：     192.168.0.222
主机名：        tecmint.storage.com

```

### 条块化I/O的逻辑卷管理

出于演示目的，我已经准备了4个硬盘驱动器，每个驱动器1GB大小。让我用下面的‘**fdisk**’命令来列给你看看吧。

```
# fdisk -l | grep sd

```

![List Hard Drives](/data/attachment/album/201412/15/161746uqy6y6qqam6rlaen.png)

*列出硬盘驱动器*

现在，我们必须为这4个硬盘驱动器**sdb**，**sdc**，**sdd**和**sde**创建分区，我们将用‘**fdisk**’命令来完成该工作。要创建分区，请遵从本文**[第一部分](http://linux.cn/article-3965-1.html)**中**步骤#4**的说明，并在创建分区时确保你已将类型修改为**LVM（8e）**。

```
# pvcreate /dev/sd[b-e]1 -v

```

![Create Physical Volumes in LVM](/data/attachment/album/201412/15/161748wisvmzmspm2rvrii.png)

*在LVM中创建物理卷*

PV创建完成后，你可以使用‘**pvs**’命令将它们列出来。

```
# pvs

```

![Verify Physical Volumes](/data/attachment/album/201412/15/161749j0npmjqzvn12vplw.png)

*验证物理卷*

现在，我们需要使用这4个物理卷来定义卷组。这里，我定义了一个物理扩展大小（PE）为**16MB**，名为**vg\_strip**的卷组。

```
# vgcreate -s 16M vg_strip /dev/sd[b-e]1 -v

```

上面命令中选项的说明：

* **[b-e]1** – 定义硬盘驱动器名称，如sdb1，sdc1，sdd1，sde1。
* **-s** – 定义物理扩展大小。
* **-v** – 详情。

接下来，验证新创建的卷组：

```
# vgs vg_strip

```

![Verify Volume Group](/data/attachment/album/201412/15/161750f8ov2s4i52bb5vsz.png)

*验证卷组*

要获取VG更详细的信息，可以在**vgdisplay**命令中使用‘-v’选项，它将给出**vg\_strip**卷组中所使用的全部物理卷的详细情况。

```
# vgdisplay vg_strip -v

```

![Volume Group Information](/data/attachment/album/201412/15/161752pp5b62gfvb6z6p85.png)

*卷组信息*

回到我们的话题，现在在创建逻辑卷时，我们需要定义条块化值，就是数据需要如何使用条块化方法来写入到我们的逻辑卷中。

这里，我创建了一个名为**lv\_tecmint-strp1**，大小为**900MB**的逻辑卷，它需要放到**vg\_strip**卷组中。我定义了4个条块，就是说数据在写入到我的逻辑卷时，需要条块化分散到4个PV中。

```
# lvcreate -L 900M -n lv_tecmint_strp1 -i4 vg_strip

```

* **-L** –逻辑卷大小
* **-n** –逻辑卷名称
* **-i** –条块化

![Create Logical Volumes](/data/attachment/album/201412/15/161754brn6irraqhqpijrr.png)

*创建逻辑卷*

在上面的图片中，我们可以看到条块尺寸的默认大小为**64 KB**，如果我们需要自定义条块值，我们可以使用**-I**（大写I）。要确认逻辑卷已经是否已经创建，请使用以下命令。

```
# lvdisplay vg_strip/lv_tecmint_strp1

```

![Confirm Logical Volumes](/data/attachment/album/201412/15/161755kfrnxczcql66ncrn.png)

*确认逻辑卷*

现在，接下来的问题是，我们怎样才能知道条块被写入到了4个驱动器。这里，我们可以使用‘**lvdisplay**’和**-m**（显示逻辑卷映射）命令来验证。

```
# lvdisplay vg_strip/lv_tecmint_strp1 -m

```

![Check Logical Volumes](/data/attachment/album/201412/15/161758pziip7i5ixxz5day.png)

*检查逻辑卷*

要创建自定义的条块尺寸，我们需要用我们自定义的条块大小**256KB**来创建一个**1GB**大小的逻辑卷。现在，我打算将条块分布到3个PV上。这里，我们可以定义我们想要哪些pv条块化。

```
# lvcreate -L 1G -i3 -I 256 -n lv_tecmint_strp2 vg_strip /dev/sdb1 /dev/sdc1 /dev/sdd1

```

![Define Stripe Size](/data/attachment/album/201412/15/161800hmkwk9850ym0v9vy.png)

*定义条块大小*

接下来，检查条块大小和条块化的卷。

```
# lvdisplay vg_strip/lv_tecmint_strp2 -m

```

![Check Stripe Size](/data/attachment/album/201412/15/161802yfebdtyfqeqfoiaj.png)

*检查条块大小*

是时候使用设备映射了，我们使用‘**dmsetup**’命令来完成这项工作。它是一个低级别的逻辑卷管理工具，它用于管理使用了设备映射驱动的逻辑设备。

```
# dmsetup deps /dev/vg_strip/lv_tecmint_strp[1-2]

```

![Device Mapper](/data/attachment/album/201412/15/161803anbdt5n5qnltdlcc.png)

*设备映射*

这里，我们可以看到strp1依赖于4个驱动器，strp2依赖于3个设备。

希望你已经明白，我们怎样能让逻辑卷条块化来写入数据。对于此项设置，必须掌握逻辑卷管理基础知识。

在我的下一篇文章中，我将给大家展示怎样在逻辑卷管理中迁移数据。到那时，请静候更新。同时，别忘了对本文提出有价值的建议。

---

via: <http://www.tecmint.com/manage-multiple-lvm-disks-using-striping-io/>

作者：[Babin Lonston](http://www.tecmint.com/author/babinlonston/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


Linux 3.18 新内核带来了什么新东西？

Summary: 新的一月意味着新的稳定版Linux内核的发布，前一段时间，Linus Torvalds宣布Linux 3.18 很快就会发布了。 Torvalds在Linux内核邮件列表中解释到，由于在3.17中还存在几个令一小部分用户烦心的问题，但是绝不可以在一些人积极解决老问题时其他人无所事事。 Linux 3.18中有什么新的？ Linux 3.18内核主要致力于硬件支持、电源效率、bug修复和可靠性。 如往常一样，这些内容跨度很大，容易让人迷惑 。比如：加密层多重缓冲操作 - 到气冲感知， 就像对雷蛇游戏手柄的支持。 下面我们收集了这个版本的重要的改变。这远远不是所有的，只是选取了

关注一下btrfs的变化

此前一直以为更新内核会让系统越来越好用，后来发现新内核越来越大，原来是增加驱动支持…<br />
我又没换电脑，没高级的硬件压根用不到。唉，要调试好内核与自己的笔记本还是需要内功啊-_-||

对于 LINUX，“除非必要，勿加实体”这个原则也是适用的。

![](/data/attachment/album/201412/15/162855zgg34g4f60wxwmw6.jpg)

新的一月意味着新的稳定版Linux内核的发布，前一段时间，Linus Torvalds[宣布Linux 3.18 很快就会发布了](https://lkml.org/lkml/2014/12/7/202)。

Torvalds在Linux内核邮件列表中解释到，由于在3.17中还存在几个令一小部分用户烦心的问题，但是‘**绝不可以在一些人积极解决老问题时其他人无所事事。**’

### Linux 3.18中有什么新的？

Linux 3.18内核主要致力于硬件支持、电源效率、bug修复和可靠性。

如往常一样，这些内容跨度很大，容易让人迷惑 。比如：加密层多重缓冲操作 - 到气冲感知， 就像对雷蛇游戏手柄的支持。

下面我们收集了这个版本的重要的改变。这远远不是所有的，只是选取了一些更相关的内容。

* Nouveau (开源的 Nvidia GPU 驱动) 现在支持基础 DisplayPort 音频
* 对雷蛇游戏手柄的支持，用在Xbox 360上
* Xilinx USB2 外设
* 对Microchip AR1021 i2c、PenMount 6000 touch的触摸屏支持
* 音频编码: Cirrus Logic CS35L32、 Everest ES8328 和 Freescale ES8328
* 音频支持: 通用飞思卡尔声卡, Analog Devices SSM4567音频放大器
* 几个文件系统提升, 包括 Btrfs 和 F2FS
* 现在支持了DCTCP拥塞控制算法
* JIT 编译64位 eBPF程序
* “Tinification” 帮助开发人员编译更精简更小的内核

#### 在Ubuntu上安装 Linux 3.18

虽然声称是稳定版并带来了大量的更新，但不要马上急着升级你的系统。除非你擅长处理监控异常，CPU过热、和其他各种系统报出的异常。

如果你坚持更新，你可以在kernel.org网站上找到源码包。

* [下载Linux内核源码包](https://www.kernel.org/pub/linux/kernel/v3.x/)

这里有一个由Canonical维护的最新Linux内核归档。尽管你可能在其他地方看到过，但是，请注意，这不是针对终端用户的。没有任何保证与支持，你自己承担风险。

* [访问Ubuntu内核主线归档](http://kernel.ubuntu.com/%7Ekernel-ppa/mainline/?C=N;O=D)

---

via: <http://www.omgubuntu.co.uk/2014/12/linux-kernel-3-18-released-whats-new>

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

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


Linux Journal杂志2014读者选择奖揭晓

Summary: 又到了Linux Journal杂志刊发2014读者选择奖的时候了！鉴于去年的形式好评如潮，因此我们仍沿续旧年格式，让你的意见再次得到回响。虽然有些地方我们会稍加评论，不过基本上还是以报道结果为主。以下敬请欣赏本年度读者选择奖名单！ 我们希望读者选择奖一年好似一年。如果你对新分类有任何建议，或者有任何评价与反馈，都可以通过以下方式联系我们：http://www.linuxjournal.com/contact 如欲了解完整获奖名单，请查阅本杂志2014年12月刊。 最佳Linux发行版  虽然本年度基于Debian/Ubuntu的发行版获得最多票数，但最佳Linux发行版分类有点

[酷]

向为开源做贡献的人致敬！

不错！

又到了Linux Journal杂志刊发2014读者选择奖的时候了！鉴于去年的形式好评如潮，因此我们仍沿续旧年格式，让你的意见再次得到回响。虽然有些地方我们会稍加评论，不过基本上还是以报道结果为主。以下敬请欣赏本年度读者选择奖名单！

我们希望读者选择奖一年好似一年。如果你对新分类有任何建议，或者有任何评价与反馈，都可以通过以下方式联系我们：<http://www.linuxjournal.com/contact>

如欲了解完整获奖名单，请查阅本杂志2014年12月刊。

### 最佳Linux发行版

![](/data/attachment/album/201412/16/235437v8mp03pm4u4i4o3p.jpg)

虽然本年度基于Debian/Ubuntu的发行版获得最多票数，但“最佳Linux发行版”分类有点类似于“最好吃的比萨”--就算得票垫底，但它仍算是比萨呀！选择Linux不会错的，而投票之五花八门，恰恰呈现出开源世界里的选择多样性。

* Ubuntu 16.5%
* Debian 16.4%
* Linux Mint 11%
* Arch Linux 8.5%
* Fedora 8.3%
* CentOS 6%
* openSUSE 5.3%
* Kubuntu 4.1%
* Gentoo 2.9%
* Slackware 2.7%
* Xubuntu 2.5%
* 其它 2.3%
* Red Hat Enterprise Linux 1.6%
* NixOS 1.4%
* elementary OS 1.3%
* Lubuntu 1.2%
* CrunchBang 1%
* Mageia .7%
* LXLE .4%
* Tails .4%
* Android-x86 .3%
* Bodhi Linux .3%
* Chakra .3%
* Kali Linux .3%
* PCLinuxOS .3%
* SolydK .3%
* Mandriva .1%
* Oracle Linux .1%

### 最佳Linux移动系统

安卓在移动领域是如此的举足轻重，所以我们决定让安卓的各种版本独立参与投票。因此，尽管以下系统本质上属于安卓，但我们仍沿用其名而不改称安卓，因为这样更加一目了然。

* Stock Android 37.1%
* Sailfish OS 27.6%
* CyanogenMod 20.2%
* 其它 3%
* Ubuntu Phone 3%
* Amazon Fire OS 1.5%
* Ubuntu for Android 1.4%
* Replicant .8%
* Tizen .8%

### 最佳Linux智能手机厂商

![](/data/attachment/album/201412/16/235438j7kurrqjxk2i82t5.jpg)

* Samsung 29%
* Jolla 26.7%
* Nexus 16.5%
* 其它 7.1%\*
* HTC 7%
* LG 5.3%
* Sony 3.7%
* Nokia 1.8%
* Huawei 1.4%
* GeeksPhone 1%
* Amazon .6%

\*在"其它"当中，摩托罗拉获得最多提名，其次是一加。

### 最佳Linux平板

![](/data/attachment/album/201412/16/235439gmf392c9ls2tlm36.jpg)

* Google Nexus 7 35.3%
* Google Nexus 10 14.8%
* Samsung Galaxy Tab 14%
* Samsung Galaxy Note 9.8%
* ASUS Transformer Pad 8.4%
* 其它 6.4%
* Kindle Fire HD 4.7%
* ASUS MeMO Pad 2%
* Dell Venue 1.6%
* Acer Iconia One 1.4%
* Samsung Galaxy Note Edge .9%
* Ekoore Python S3 .7%

### 最佳基于Linux的其它配件（不含智能手机或平板）

我们是一群树莓派粉，如假包换！不过说真的，这怎么能怪我们呢？树莓派又出了新款B+，让原本就美妙绝伦的树莓派愈发的标致可人。并非我有未卜先知之功，但我对明年的冠军早就心中有数了。

* Raspberry Pi 71.4%
* BeagleBone Black 8.1%
* 其它 4.3%\*
* Lego Mindstorms Ev3 3.7%
* Moto 360 3.4%
* Cubieboard 1.7%
* Parrot A.R Drone 1.7%
* Samsung Gear S 1.4%
* Yamaha Motif XF8 1.1%
* Nvidia Jetson-K1 Development System .8%
* Cloudsto EVO Ubuntu Linux Mini PC .5%
* VoCore Open Hardware Computer .5%
* LG G Watch .4%
* RaZberry .4%
* VolksPC .4%
* IFC6410 Pico-ITX Board .2%
* JetBox 5300 .1%

\*在“其它”当中，提名最多是Odroid与CuBox。

### 最佳笔记本厂商

![](/data/attachment/album/201412/16/235440lmtjmjxitmvvui99.jpg)

本分类原本用于评价哪个厂商对Linux最花心思，不过谢天谢地，如今大多数笔记本运行起Linux来还是相当不错的。因此无需我们将重点放在“嗯，这台能运行Linux”这种问题上面，而可以切切实实地看到精华之作。把眼光放长远些。

* Lenovo 32%
* ASUS 19.3%
* Dell 18.5%
* System76 10.6%
* 其它 7.9%\*
* Acer 4.5%
* ThinkPenguin 1.9%
* LinuxCertified 1.8%
* ZaReason 1.6%
* EmperorLinux 1.5%
* CyberPower .3%
* Eurocom .1%

\*在“其它”当中，提名最多的（依次）是运行Linux的苹果、惠普、东芝以及三星。

### 最佳内容管理系统

![](/data/attachment/album/201412/16/235441wpl0cc4eb05wzibz.jpg)

* WordPress 34.7%
* Drupal 25.3%
* Joomla! 11.1%
* MediaWiki 10.5%
* 其它 10%\*
* Alfresco 4.3%
* WebGUI 1.3%
* ikiwiki 1.1%
* eZ publish .7%
* Wolf CMS .4%
* Elgg .3%
* Blosxom .2%

\*在“其它”当中，提名最多的（依次）是DokuWiki, Plone, Django 以及 Typo3。

### 最佳对Linux友好的虚拟主机公司

![](/data/attachment/album/201412/16/235442mqnewvf4kjvf7jc1.jpg)

提到虚拟主机，这年头要找到不对Linux友好的公司那是相当之难。事实上，要找到一家提供Windows的主机服务商才是一种挑战。这一类别的冠军（“其它”）就显而易见的说明了这一问题，或许设一个“最差虚拟主机”分类更加有用！

* 其它 22.8%\*
* Amazon 22.5%
* Rackspace 13.1%
* Linode 10.4%
* GoDaddy.com 6.5%
* OVH 5.6%
* DreamHost 5.4%
* 1&1 4.8%
* LAMP Host 2.9%
* Hurricane Electric 2.6%
* Liquid Web .6%
* RimuHosting .6%
* Host Media .5%
* Savvis .5%
* Blacknight Solutions .4%
* Netfirms .4%
* Prgmr .4%

\*在“其它”当中，提名最多的（依次）是Digital Ocean （压倒性优势）, Hetzner, BlueHost 以及 WebFaction。

### 最佳浏览器

![](/data/attachment/album/201412/16/235443phhophuan447pp0p.jpg)

Firefox显著优势拨得今年的头筹。即使以Chrome加Chromium计算，Firefox仍位居榜首。我们曾经担心，Firefox死忠会悄然流失，不过还好，Firefox依然宝马未老，仍是一款快速、可行以及兼容度极佳的浏览器。

* Firefox 53.8%
* Chrome 26.9%
* Chromium 8.1%
* Iceweasel 4%
* Opera 3%
* 其它 2%
* SeaMonkey .8%
* rekonq .5%
* dwb .4%
* QupZill .4%
* Dillo .2%

### 最佳电邮客户端

![](/data/attachment/album/201412/16/235445fhbmsm1m39zcs03u.jpg)

如果我没有亲身了解到身边有多少铁杆极客粉的话，我也许会指责Kyle Rankin投票有作弊嫌疑。他的最爱--Mutt电邮客户端并未登顶，但是对于一个没有图形界面的程序来说，获得第三名也算是个比较骄人的成绩了。

* Mozilla Thunderbird 44.4%
* Gmail 24.7%
* Mutt 6.8%
* Evolution 5.5%
* KMail 5.3%
* 其它 3.2%
* Claws Mail 2.2%
* Zimbra 2%
* Alpine 1.8%
* Geary 1.7%
* SeaMonkey 1%
* Opera Mail .9%
* Sylpheed .4%

### 最佳音频编辑工具

![](/data/attachment/album/201412/16/235446ejocvvije6iv4eve.jpg)

* Audacity 69.1%
* FFmpeg 10.8%
* VLC 9.7%
* Ardour 4.9%
* 其它 1.9%
* SoX 1.3%
* Mixxx 1.1%
* LMMS .7%
* Format Junkie .5%

### 最佳音频播放器

![](/data/attachment/album/201412/16/235447sqakqs8a8q5qqu67.jpg)

VLC登上视频播放器分类的榜首（见下文）应该是毫无悬念的，但让人大跌眼镜的是，它居然在音频播放器分类中也有不俗的成绩。或许它可以考虑成为一站式媒体播放器。不管怎样，我们都乐见其取得好成绩。

* VLC 25.2%
* Amarok 15.3%
* Rhythmbox 10.4%
* Clementine 8.6%
* MPlayer 6.1%
* Spotify 5.9%
* Audacious 5.5%
* Banshee 4.6%
* 其它 4%\*
* XBMC 3.1%
* foobar2000 3%
* Xmms 2.4%
* DeaDBeeF 1.2%
* MOC .9%
* cmus .8%
* Ncmpcpp .8%
* Guayadeque .6%
* Mixxx .4%
* MPC-HC .4%
* Subsonic .4%
* Nightingale .3%
* Decibel Audio Player .2%

\*在"其它"当中，Quod Libet获得最多提名。

### 最佳视频播放器

![](/data/attachment/album/201412/16/235448gejpzkwnf9r7tk9a.jpg)

* VLC 64.7%
* MPlayer 14.5%
* XBMC 6.4%
* Totem 2.7%
* 其它 2.7%\*
* Plex 2%
* Kaffeine 1.9%
* mpv 1.6%
* MythTV 1.6%
* Amarok 1.4%
* Xmms .3%
* Daum Potplayer .2%
* Clementine .1%

\*在“其它”当中，提名最多是SMPlayer。

### 最佳视频编辑器

![](/data/attachment/album/201412/16/235449heyt440goe1qsitq.jpg)

再次证明了我们的读者群深具极客色彩。我们未指定“非线性编辑器”，因此就转码技术而言，VLC在视频编辑类别中勉强获胜。干得好，VLC，干得好！

* VLC 17.5%
* Kdenlive 16.4%
* Blender 15.1%
* Avidemux 13.2%
* OpenShot 13.2%
* Cinelerra 7.5%
* PiTiVi 4.9%
* LightWorks 4.8%
* 其它 4.7%
* LiVES 1.4%
* Shotcut .6%
* Jahshaka .4%
* Flowblade .4%

### 最佳云存储

![](/data/attachment/album/201412/16/235450kbdatggpdlpatztb.jpg)

* Dropbox 30.5%
* ownCloud 23.6%
* Google Drive 16%
* rsync 8.3%
* 其它 7.5%\*
* Amazon S3 6.6%
* SpiderOak 4.4%
* Box 1.8%
* Copy 1%
* AjaXplorer .3%

Dropbox在这一领域曾经独步天下，几无对手，虽然这次仍为头魁，但优势已经不那么明显了。Dropbox的方便与稳定无可否认，但是将你的宝贵数据托管在ownCloud上，可管可控，也让ownCloud登上第二名的宝座。

\*在“其它”当中，提名最多是 Younited 与 MEGA。当然很多人可能会说“非万不得已时不会选择云存储/我的文件都是存在本地”。

### 最佳Linux游戏

![](/data/attachment/album/201412/16/235452u8nve2285xhr8dh5.jpg)

我很少玩游戏，所以每年我都特期待这一类别排名，希望可以从中找到最受欢迎的游戏，以供闲暇之需。看到NetHack排名这么靠前，我倒觉得挺开心的，尤其是在联想到竞争对手后更是心满意足。徘徊在让我们这些老派的龙与地下城玩家痴迷的随机通道确实有点意思。

* Civilization 5 26.5%
* 其它 23.5%\*
* Team Fortress 2 8.7%
* NetHack 8.4%
* X-Plane 10 7.1%
* Dota 6.1%
* Bastion 5.4%
* Scorched 3D 3.7%
* Destiny 3.6%
* Ultima IV 1.9%
* FreeCol 1.8%
* Kpat 1.4%
* FreeOrion 1.1%
* Ryzom .9%

\*在“其它”当中，提名最多的（依次）是Minecraft, 0 A.D., Frozen Bubble, Battle for Wesnoth, Portal 以及 Counter Strike。

### 最佳虚拟方案

我认为与Vagrant的关系大大带动了Oracle旗下VirtualBox的普及。当然，Vagrant也与其它虚拟平台合作，但自从其与VirtualBox无缝结合后，我认为对VirtualBox是极大提升。虚拟化实现系统是如此的高效与可靠，从裸机开始重构系统的方案几近历史。

![](/data/attachment/album/201412/16/235454qqt66sdn96eyvlny.jpg)

* Oracle VM VirtualBox 33.4%
* VMware 22.3%
* KVM 21.1%
* XEN 5.7%
* QEMU 5.3%
* OpenStack 4.9%
* 其它 4.2%\*
* OpenVZ 1.7%
* Linux-VServer 1.3%
* Symantec Workspace Virtualization .1%

\*在“其它”当中，提名最多的依次是Docker, ProxMox 与 LXC。

### 最佳监控应用

![](/data/attachment/album/201412/16/235455jm3kkmhskm88kmks.png)

* Nagios 27.1%
* Wireshark 20.7%
* htop 12.3%
* Zabbix 10.5%
* 其它 8.6%\*
* Zenoss 6.2%
* Munin 3.4%
* PC Monitor 2.8%
* New Relic 1.9%
* Opsview 1.2%
* SaltStack 1%
* NTM (Network Traffic Monitor) .7%
* xosview .7%
* Manage Engine .5%
* FlowViewer .3%
* Circonus .2%
* SysPeek .2%

\*在“其它”当中，提名最多是Icinga 与 OpenNMS。

### 最佳开发运维配置管理工具

![](/data/attachment/album/201412/16/235456ummcnfvrr6qrw7m2.jpg)

Git能拿到本类别第一名倒是蛮有趣的，虽然针对配置文件使用标准版本控制工具当然无可厚非，但我总觉得它应该配合Chef或Puppet一起使用。至少开发运维（DevOps）让我们这些执拗的老派系统管理员象对待代码一样处理配置文件。版本控制真令人难以置信，这一点似乎绝大多数读者均无异议。

* Git 39.4%
* Puppet 17.2%
* Ansible 8.9%
* cron jobs 8.8%
* Subversion 7.6%
* Chef 5%
* SaltStack 5.4%
* 其它 4.6%\*
* CFEngine 3%

\*在“其它”当中，提名最多是 NixOps。

### 最佳编程语言

![](/data/attachment/album/201412/16/235457wy41rp07fzz4qqfk.jpg)

* Python 30.2%
* C++ 17.8%
* C 16.7%
* Perl 7.1%
* Java 6.9%
* 其它 4.6%
* Ruby 4.3%
* Go 2.4%
* JavaScript 2.4%
* QML 2.2%
* Fortran 1.4%
* Haskell 1.4%
* Lisp 1.2%
* Erlang .6%
* Rust .6%
* D .4%
* Hack .1%

\*在“其它”当中，提名最多的依次是Scala, PHP 以及 Clojure。

### 最佳脚本语言

![](/data/attachment/album/201412/16/235458yo4tt4fzuyevoaq4.jpg)

Python强悍无比，无论在脚本及编程分类都有大量拥趸。对于象我这样懂Bash以及一点PHP皮毛的人来说，很明显在我一头扎进开发过程中，我需要重点突破。敢说空格无用？我--空格来也！

* Python 37.1%
* Bash/Shell scripts 27%
* Perl 11.8%
* PHP 8.4%
* JavaScript 6.7%
* Ruby 4.9%
* 其它 2.1%
* Lua 2%

### 最佳Linux/开源新产品/新项目

![](/data/attachment/album/201412/16/235459covbhmoo7sss5o0d.jpg)

Docker无疑是大赢家，当之无愧--游戏规则改变者嘛。 Jolla/Sailfish也小受欢迎，真是令人欣慰。我们爱安卓，不过多个选择不正是我们作为开源鼓手所提倡的一个重要方面吗。

* Docker 28%
* Jolla and Sailfish OS 19%
* LibreOffice 7%
* ownCloud 5%
* Steam 5%
* Zenoss Control Center 5%
* Raspberry Pi 4%
* Git 4%
* Apache Cordova/OpenOffice/Spark/Tika 3%
* Ansible 2%
* Elementary OS 2%
* OpenStack 2%
* Zabbix 2%
* CoreOS 2%
* Firefox OS 2%
* KDE Connect 1%
* NixOS and NixOps 1%
* Open Media Vault 1%

### 你用Linux做过的最酷的事情

![](/data/attachment/album/201412/16/235502wgk762gm2nxmgp6x.png)

这是读者选择奖里我最钟爱的新分类。想象一下你参加某次Linux会议，期间询问人们他们用Linux做过的最酷的事情。这里所做的与之大同小异！这里我们仅列出部分我们比较喜欢的，如欲了解完整列表，请访问：<http://www.linuxjournal.com/rc2014/coolest>。

注：最常见的答案是：“使用它”；“挽救数据/照片/导致Windows 机器罢工的任何东西”；“说服朋友/家人/业务转向使用Linux”；“学习”；“讲授”；“获得工作”；“家庭自动化”；“构建家庭媒体服务器”。下表是我们选出的并非最常见的答案，而是一些比较具体与有个性的答案。

* 在上世纪90年代中期建立procmail垃圾邮件预过滤规则。
* 450-节点计算集群。
* 7.1 通道前置放大器（集成Mopidy音乐播放器）。
* Linux机器人 （参加Eurobot年度比赛）。
* 无意间打印到错误的大陆。
* 视频同步时增加音频通道。
* 使用自已编写的代码分析NASA卫星数据。
* 远程逗着猫玩。
* 通过声音以及移动应用自动控制家里整个灯光设置。
* 窗台植物自动浇水系统。
* 浴室收音机。
* 配制啤酒。
* 创建了一个运行在国际空间站的应用。
* 为某大型收费高速公路系统建立一套实时收费系统。
* 自己装配智能手机。
* 使用树莓派建立基于网络的家庭报警系统。
* 树莓派集群破解加密的办公文档。
* 控制我的Parrot无人机。
* 控制186台风力涡轮机的通信。
* 在Linux下使用Stellarium控制我的米德望远镜。
* 用一台十几年的老笔记本转换卡带式家庭视频的格式。
* 在靠近北极地区创建网状网络。
* 使用无线数据发射器创建海洋环境下的传感器浮标。
* 发现新行星。
* 修复位于美国丹佛的jabber服务器， 而我当时却身在约丹安曼一家酒店大堂。
* 得到一张Linus亲笔签名的Red Hat 5.0 CD。
* 入侵我的咖啡机，在咖啡做好后给我一条消息。
* 给我女儿介绍乐高机器人EV3。
* 监控酒窖温度与湿度，过热或过温时开门。
* 用树莓派代替温泉浴缸上的控制器。
* 使用脚本连接四天每隔15秒开关一次同事的CD托盘。
* 使用LFS系统为一家全国性石油公司迁移ACH自动转帐系统。
* 身在其它城市冲我家里的马桶。
* 远程控制鸡舍门。
* 使用树莓派为16个站点部署基于网络的洒水器控制器（并控制水池与庭院灯光）。
* 链接SSH通道通过三级跳连接家与工作（因网络设置方面的限制）。
* 建立一套系统，监控可再生能源的安装部分：两套固定的太阳能电池阵，一套两轴太阳跟踪太阳能电池阵，以及一台风力涡轮机。生产以及天气数据实时显示在网络站点。
* 还是在“猫”时代，我用电脑每天早上叫醒我女朋友去上班。
* 使用一个Wii摇控器，通过蓝牙将我的笔记本作为红外摄像机，侦测我女儿的旋转木马的运动，以及控制视频游戏。

---

via: <http://www.linuxjournal.com/rc2014>

作者：[Shawn Powers](http://www.linuxjournal.com/users/shawn-powers) 译者：[yupmoon](https://github.com/yupmoon) 校对：[wxy](https://github.com/wxy)

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


在 Linux 上使用 eCryptFS 加密文件和目录

Summary: 作为罪犯，你需要为自己的身份保密；而作为中情局成员，你同样也需要为自己的身份保密。但是，你却不是他们其中的任何一员，你只是不想其他人查探到你的金融数据、家庭照片、尚未出版的手稿，或者记录着你能发家致富的最初想法的私密笔记。 我时常听到有人告诉我我只是个微不足道的人，没人会查探我或者我没有什么东西要隐藏的。好吧，告诉你我的想法，即便我没有什么要隐藏的，或者我也可以公开我带着狗的孩子的照片，那我也有权利不这么去做，也有权利来保护我的隐私。 加密类型 我们主要有两种加密文件和目录的方法。一种是文件系统级

有用

作为罪犯，你需要为自己的身份保密；而作为中情局成员，你同样也需要为自己的身份保密。但是，你却不是他们其中的任何一员，你只是不想其他人查探到你的金融数据、家庭照片、尚未出版的手稿，或者记录着你能发家致富的最初想法的私密笔记。

我时常听到有人告诉我“我只是个微不足道的人，没人会查探我”或者“我没有什么东西要隐藏的。”好吧，告诉你我的想法，即便我没有什么要隐藏的，或者我也可以公开我带着狗的孩子的照片，那我也有权利不这么去做，也有权利来保护我的隐私。

### 加密类型

我们主要有两种加密文件和目录的方法。一种是文件系统级别的加密，在这种加密中，你可以选择性地加密某些文件或者目录（如，/home/alice）。对我而言，这是个十分不错的方法，你不需要为了启用或者测试加密而把所有一切重新安装一遍。然而，文件系统级别的加密也有一些缺点。例如，许多现代应用程序会缓存（部分）文件你硬盘中未加密的部分中，比如交换分区、/tmp和/var文件夹，而这会导致隐私泄漏。

另外一种方式，就是所谓的全盘加密，这意味着整个磁盘都会被加密（可能除了主引导记录外）。全盘加密工作在物理磁盘级别，写入到磁盘的每个比特都会被加密，而从磁盘中读取的任何东西都会在运行中解密。这会阻止任何潜在的对未加密数据的未经授权的访问，并且确保整个文件系统中的所有东西都被加密，包括交换分区或任何临时缓存数据。

### 可用的加密工具

在Linux中要实施加密，有几个可供选择的工具。在本教程中，我打算介绍其中一个：**eCryptFS**，一个用户空间文件系统加密工具。下面提供了一个Linux上可用的加密工具摘要供您参考。

#### 文件系统级别加密

* [EncFS](http://www.arg0.net/encfs)：尝试加密的最简单方式之一。EncFS工作在基于FUSE的伪文件系统上，所以你只需要创建一个加密文件夹并将它挂载到某个文件夹就可以工作了。
* [eCryptFS](http://ecryptfs.org/)：一个POSIX兼容的加密文件系统，eCryptFS工作方式和EncFS相同，所以你必须挂载它。

#### 磁盘级别加密

* [Loop-AES](http://sourceforge.net/projects/loop-aes/)：最古老的磁盘加密方法。它真的很快，并且适用于旧系统（如，2.0内核分支）。
* [DMCrypt](https://code.google.com/p/cryptsetup/wiki/DMCrypt)：最常见的磁盘加密方案，支持现代Linux内核。
* [CipherShed](https://ciphershed.org/)：已停止的TrueCrypt磁盘加密程序的一个开源分支。

### eCryptFS基础

![](/data/attachment/album/201412/17/233109jxxkxchvjw6xjkxv.jpg)

eCrypFS是一个基于FUSE的用户空间加密文件系统，在Linux内核2.6.19及更高版本中可用（作为encryptfs模块）。eCryptFS加密的伪文件系统是挂载到当前文件系统顶部的。它可以很好地工作在EXT文件系统家族和其它文件系统如JFS、XFS、ReiserFS、Btrfs，甚至是NFS/CIFS共享文件系统上。Ubuntu使用eCryptFS作为加密其家目录的默认方法，ChromeOS也是。在eCryptFS底层，默认使用的是AES算法，但是它也支持其它算法，如blowfish、des3、cast5、cast6。如果你是通过手工创建eCryptFS设置，你可以选择其中一种算法。

就像我所的，Ubuntu让我们在安装过程中选择是否加密/home目录。好吧，这是使用eCryptFS的最简单的一种方法。

![](/data/attachment/album/201412/17/233112o5f4tgs0dd0gssfw.jpg)

Ubuntu提供了一个用户友好的工具集，通过eCryptFS可以让我们的生活更轻松，但是在Ubuntu安装过程中启用eCryptFS只创建了一个指定的预配置的设置。所以，如果默认的设置不适合你的需求，你需要进行手工设置。在本教程中，我将介绍**如何在主流Linux发行版上手工设置eCryptFS**。

### eCryptFS的安装

Debian，Ubuntu或其衍生版：

```
$ sudo apt-get install ecryptfs-utils

```

注意，如果你在Ubuntu安装过程中选择加密家目录，eCryptFS应该已经安装了。

CentOS, RHEL or Fedora：

```
# yum install ecryptfs-utils

```

Arch Linux：

```
$ sudo pacman -S ecryptfs-utils

```

在安装完包后，加载eCryptFS内核模块当然会是一个很好的实践：

```
$ sudo modprobe ecryptfs

```

### 配置eCryptFS

现在，让我们开始加密一些目录，运行eCryptFS配置工具：

```
$ ecryptfs-setup-private

```

![](/data/attachment/album/201412/17/233115x58aefpp1s8bs54e.jpg)

它会要求你输入登录密码和挂载密码。登录密码和你常规登录的密码一样，而挂载密码用于派生一个文件加密主密钥。这里留空可以生成一个（复杂的），这样会更安全。登出然后重新登录。

你会注意到，eCryptFS默认在你的家目录中创建了两个目录：Private和.Private。~/.Private目录包含有加密的数据，而你可以在~/Private目录中访问到相应的解密后的数据。在你登录时，~/.Private目录会自动解密并映射到~/Private目录，因此你可以访问它。当你登出时，~/Private目录会自动卸载，而~/Private目录中的内容会加密回到~/.Private目录。

eCryptFS怎么会知道你拥有~/.Private目录，并自动将其解密到~/Private目录而不需要我们输入密码呢？这就是eCryptFS的PAM模块捣的鬼，它为我们提供了这项便利服务。

如果你不想让~/Private目录在登录时自动挂载，只需要在运行ecryptfs-setup-private工具时添加“--noautomount”选项。同样，如果你不想要~/Private目录在登出后自动卸载，也可以自动“--noautoumount”选项。但是，那样后，你需要自己手工挂载或卸载~/Private目录：

```
$ ecryptfs-mount-private ~/.Private ~/Private
$ ecryptfs-umount-private ~/Private

```

你可以来验证一下.Private文件夹是否被挂载，运行：

```
$ mount

```

![](/data/attachment/album/201412/17/233117mh48dpvhbkv4vwtz.jpg)

现在，我们可以开始把任何敏感文件放进~/Private文件夹里头了，它们会在我们登出时自动被加密并锁在~/.Private文件内。

所有这一切看起来是那么得神奇。这主要是ecryptfs-setup-private工具让一切设置变得简单。如果你想要深究一点，对eCryptFS指定的方面进行设置，那么请转到[官方文档](http://ecryptfs.org/documentation.html)。

### 结尾

综上所述，如果你十分关注你的隐私，最好是将基于eCryptFS文件系统级别的加密和全盘加密相结合。切记，只进行文件加密并不能保证你的隐私不受侵犯。

---

via: <http://xmodulo.com/encrypt-files-directories-ecryptfs-linux.html>

作者：[Christopher Valerio](http://xmodulo.com/author/valerio) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


安卓编年史（5）：Android 0.9 Beta——嘿，这看起来很眼熟！

Summary: 安卓 0.9 第一次给我们展现了闹钟和计算器应用程序。

码

安卓 0.9 第一次给我们展现了闹钟和计算器应用程序。

![](/data/attachment/album/201611/27/201317cnz2b2hhwtmnfdmh.jpg)

![闹钟主屏幕，设置一个闹钟，计算器，以及计算器高级功能。](/data/attachment/album/201412/17/234155euzfgf5vkrke4kos.png)

*闹钟主屏幕，设置一个闹钟，计算器，以及计算器高级功能 [Ron Amadeo供图]*

安卓 0.9 第一次给我们展现了闹钟和计算器应用程序。闹钟应用的特征是有个扁平的模拟时钟，下方是一排设置的闹钟的滚动列表。不同于其它种类的开关，闹钟使用一个复选框来设置。闹钟可以设置为每周特定几天重复，以及它还有一整个列表的可选的、独特的闹钟铃声。

计算器是一个全黑色的应用，带有有光泽的圆形按钮。通过菜单，可以打开带有高级功能的附加面板。再次强调，一致性不是谷歌的强项所在。按键中的 Pi 键按下的高亮是红色的——在安卓 0.9 的其它地方，按键按下的高亮通常是橙色的。实际上，计算器中用到的所有东西是仅用于计算器的百分百定制设计。

![打开菜单的谷歌地图和新路线界面。](/data/attachment/album/201412/17/234156gmfmfhscg0gm22hg.png)

*打开菜单的谷歌地图和新路线界面 [Ron Amadeo供图]*

谷歌地图在安卓 0.9 中真正能够运行——客户端能够连接到谷歌地图服务器并下载地图块。（给予我们地图图像——要记住谷歌地图是个基于云的应用。连最老旧的版本也会下载更为现代的地图块，所以忽略实际的地图块的样子吧。）地图的菜单获得了和浏览器菜单相同的全灰设计待遇，缩放控件也和浏览器的相同。最重要的“我的位置”按钮最终来到了安卓 0.9，这意味着该版本的地图支持 GPS 定位。

路线界面得到了改进。奇怪的聊天气泡附加不对齐的按钮已经被去除，换为更具交互性的书签图标，切换地点按钮移动到了左边，“go”按钮的现在被标记为“获取<ruby> 路线 <rp>  （ </rp> <rt>  Route </rt> <rp>  ） </rp></ruby>”。

![谷歌地图图层选择，搜索历史，新加入的街景视图。](/data/attachment/album/201412/17/234157tl57ye07lfxy43e4.png)

*谷歌地图图层选择，搜索历史，新加入的街景视图 [Ron Amadeo供图]*

“<ruby> 图层 <rp>  （ </rp> <rt>  Layers </rt> <rp>  ） </rp></ruby>”被重命名为“<ruby> 地图模式 <rp>  （ </rp> <rt>  Map Mode </rt> <rp>  ） </rp></ruby>”并且变成一个单选列表。一次只能选择一个地图类型——举个例子，你在卫星地图视图下不能查看交通状况。埋藏在菜单中的还有被匆忙放到一起的搜索记录界面。搜索历史看起来只是个概念验证，带着巨大的，模糊的搜索图标填充的搜索项被放置于半透明的背景之上。

街景曾经是个单独的应用（尽管它从没提供给公众），但在 0.9 中它被作为一个地图模式内置于谷歌地图之中。你可以拖拽小<ruby> 街景小人 <rp>  （ </rp> <rt>  Pegman </rt> <rp>  ） </rp></ruby>到地图上，它会显示一个弹出气泡来展示街景的快照。点击快照会启动那个位置的街景。这时，街景除了可滚动的 360 度影像之外不会显示任何东西——在显示界面上根本就没有用户界面（UI）。

![我们第一次见到谷歌地图搜索界面。这些截图展示了搜索栏，搜索结果列表，显示在地图上的搜索结果，以及一个商业页面。 ](/data/attachment/album/201412/17/234158kiqidezz9azjm9dg.png)

*我们第一次见到谷歌地图搜索界面。这些截图展示了搜索栏，搜索结果列表，显示在地图上的搜索结果，以及一个商业页面 [Ron Amadeo供图]*

安卓 0.9 同样第一次给我们展示了信息应用，称为<ruby> “信息” <rp>  （ </rp> <rt>  Messaging </rt> <rp>  ） </rp></ruby>。就像一些早期的安卓设计，信息并不确定它应该是一个暗色系应用还是亮色系应用。第一眼可以看到的屏幕是信息列表，一个极力避免空白的质朴黑色界面，看起来像是建立在设置界面的设计之上。但点击“新信息”或已存在的会话后，你会被带到一个白色以及蓝色的文本信息的滚动列表这里。这两个相连的界面真是没法再更不一样一点了。

![信息应用的会话窗口，附件窗口，会话列表，以及设置。](/data/attachment/album/201412/17/234200shek3heegheg0h92.png)

*信息应用的会话窗口，附件窗口，会话列表，以及设置 [Ron Amadeo供图]*

信息支持一定范围的附件：你可以附上图片，声音，或者一个幻灯片到你的信息之中。图片和声音可以实时录制或是从手机存储中拉取。另一个奇怪的UI选择是对于附件菜单中的每一项，安卓基本都已经有现成的图标可用，但信息却全部使用了另外定制的设计。

信息是最先带有自己设置界面的应用之一。用户可以请求已读以及送达报告以及设置下载偏好。

![幻灯片制作器。右边图片显示了菜单选项。](/data/attachment/album/201412/17/234201lq1a8al1aovdc3kk.png)

*幻灯片制作器。右边图片显示了菜单选项 [Ron Amadeo供图]*

附件选项中的“幻灯片”选项实际上是以一个全功能的幻灯片制作器的形式到来的。你可以添加图片，选择幻灯顺序，添加音乐，修改每张幻灯片的显示时间，以及添加文字。这已经复杂到足够给它一个自己的应用图标了，但令人惊奇的是它被隐藏在信息应用的菜单之中。在纵向模式下这是为数不多的完全无法使用的安卓应用之一——唯一的看图片方式以及控制是在横向显示之中。奇怪的是，纵向模式它仍然能够旋转，但显示输出变得一团糟。

![音乐播放器的主导航页面，歌曲列表，专辑列表，以及“正在播放”界面。](/data/attachment/album/201412/17/234202y00b0se0kzeneqjv.png)

*音乐播放器的主导航页面，歌曲列表，专辑列表，以及“正在播放”界面 [Ron Amadeo供图]*

安卓 0.9 第一次将音乐应用带进了安卓。首屏基本上只是几个将你带到各个功能视图的巨大的，矮胖的导航按钮。在应用底部是一个“正在播放”栏，仅仅包含了音轨名、艺术家，以及一个播放/暂停按钮。歌曲列表仅仅有个最简的无修饰界面，仅仅显示了歌曲名，艺术家，专辑以及时长。艺术家专辑是这个应用中唯一有希望看到色彩的地方。它在专辑视图里显示为一个小快照，在正在播放界面显示为巨大的，四分之一屏的图片。

正如安卓在这个时期的系统绝大多数部分，音乐应用的界面可能没什么值得看的，但功能已经基本齐全。正在播放界面有一个让你拖动歌曲的播放列表按钮，随机播放，重复播放，搜索，以及选择背景声音按钮。

![“相册”的所有相册视图，单个相册视图，以及单张图片视图。](/data/attachment/album/201412/17/234204e1zfgfucadpfyag4.png)

*“相册”的所有相册视图，单个相册视图，以及单张图片视图 [Ron Amadeo供图]*

相册被简单地称为“图片”。初始视图显示你的所有相册。两个默认的相册是“相机”和巨大的合集相册，叫做“全部图片”。每个相册的快照由 2x2 的图片组成，每张图片有个白色的粗边框。

单个相册视图的样子大概是你所希望的：一个可滚动的图片方阵。你不能在单个图片大小的范围内向左右滑动来移动图片，而是应该轻点图片来移动图片。相册同样没有双指捏合缩放，你只能使用按钮来缩放图片。

![图片编缉！这些截图显示了一个打开的菜单，“更多”菜单，截取，以及设置。](/data/attachment/album/201412/17/234204h7zdkzoeerxoy7uy.png)

*图片编缉！这些截图显示了一个打开的菜单，“更多”菜单，截取，以及设置 [Ron Amadeo供图]*

“图片”看起来十分简单，直到你点击菜单按钮并突然看到无数的选项。图片可以截取，旋转，删除，或设置壁纸或联系人图标。就像浏览器一样，所有的这一切通过一个笨拙的二级菜单系统完成。但是，我们为何又将看起来完全不同的菜单练联系到一起？

安卓 0.9 在安卓的第一个商业发行版本公布前仅仅两个月的时候诞生。这些时间只够应用开发者们确认他们的应用能够工作——以及让谷歌在第一个重大发布之前做一些测试和bug修复。

---

![](/data/attachment/album/201412/17/234205efda72azhgx3t1eg.jpg)

[Ron Amadeo](http://arstechnica.com/author/ronamadeo) / Ron是Ars Technica的评论编缉，专注于安卓系统和谷歌产品。他总是在追寻新鲜事物，还喜欢拆解事物看看它们到底是怎么运作的。[@RonAmadeo](https://twitter.com/RonAmadeo)

---

via: <http://arstechnica.com/gadgets/2014/06/building-android-a-40000-word-history-of-googles-mobile-os/5/>

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

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


为什么公司需要参与更多开源软件的编写？

Summary: 闭门造车是产生不了创新的。   据华尔街日报称，有消息表明，Zulily正在开发更多的内部软件，但实际上根本不是。多年前Eric Raymond写道，全世界95%的软件写来用的，而不是售卖。原因很多，但是其中有一个比较突出：正如Zulily的CIO Luke Friang所说，几乎没有一个软件解决方案能跟上我们的步伐。 20年前是这样，现在也是这样。 但是有一点是不同的，这也正是华尔街日报完全忽略的地方。而这也正是历史上开发的内部软件始终保持着专有的原因了，因为它是一个公司的核心竞争力。然而今天，越来越多的公司意识到另一面：开源内部软件将会比

看你从哪个角度看了//@黄勇刚: 三流软件给非IT人用，二流软件支撑三流软件开发，一流软件支撑二流软件开发。。。IT人也是照这个序列部署。顶级掠食者是非IT人接触不到的，他们分配调度所有智力活动，包括cpu上和人脑中的智力活动。

>
> 闭门造车是产生不了创新的。
>
>
>

![](/data/attachment/album/201412/18/000818z1nxy177ncnky8t1.jpg)

[据华尔街日报称](http://blogs.wsj.com/cio/2014/08/08/zulily-calls-in-house-software-a-differentiator-for-competitive-advantage/)，有消息表明，Zulily正在开发更多的内部软件，但实际上根本不是。多年前[Eric Raymond写道](http://oreilly.com/catalog/cathbazpaper/chapter/ch05.html)，全世界95%的软件写来用的，而不是售卖。原因很多，但是其中有一个比较突出：正如Zulily的CIO Luke Friang所说，几乎没有一个[非定制]软件解决方案能跟上我们的步伐。

20年前是这样，现在也是这样。

但是有一点是不同的，这也正是华尔街日报完全忽略的地方。而这也正是历史上开发的内部软件始终保持着专有的原因了，因为它是一个公司的核心竞争力。然而今天，越来越多的公司意识到另一面：开源内部软件将会比保持专有获益更多。

这也就是为什么你的公司需要为开源项目做出更多的贡献。记住是更多。

### 不寻常的那些年

我们刚刚经历了一个很不一样的20年，那时很多软件的开发都是为了内部的使用，大多数人的精力都放在由SAP和微软这样的厂商建立的应用广泛的企业级解决方案。

不管怎么说，这都是一个理论。

在实践中，买方花费很少的钱购买license，然后至少付出5倍以上的代价来使软件符合他们的需求。比如说，一个公司可能在一个ERP系统上花费 100,000美元，但是他们还得继续花费500,000来维持软件正常运行。

开源软件甚至是应用程序正式发展起来的原因之一是很多公司可以免费获得一些功能性的产品（或者是以一个相对便宜的费用获得产品）， 然后定制为他们所需要的。不管怎样，定制是有必要的，而且开源的根本是使成本更低，或许，这样的定制或许能产生更好的结果。

同时，开发者尽量的减少同类之间的相似之处。作为Redmonk分析师，[Stephen O'Grady认为](http://redmonk.com/sogrady/2010/01/12/roll-your-own/#ixzz3ATBuZsef):

>
> 从最近几年看，主流技术产业都有意避开专业化。运行在定制操作系统上的虚拟设备，已经彻底败给了RHEL和Windowns这些通用的操作系统。 最快20年，任何程序的数据保存都意味着一件事：一个关联的数据库，如果你要做的是企业级应用开发，那么你首先要接触的是Java，等等。
>
>
>

然而，开源的道路上，一些公司也发现，有些销售商不能很好地描述他们所想要的，即便是很好理解的产品类别，如像内容管理系统，他们需要 知道的是产品亮点，而不希望是一个模子刻出来的。

所以顾客没了，他们中有一部分转变成了供应商。

### 自己动手，丰衣足食

这也是常有的事，[O'Grady指出了](http://redmonk.com/sogrady/2010/01/12/roll-your-own/)这一点。2010年，O'Grady发现了一个有趣的现象：“软件提供商正面对着一个强有力的市场竞争者：他们的顾客。”

回想一下今天的高科技，大多数都是开源的，几乎所有的项目一开始都是某些公司的内部项目，或者仅仅是有些开发者的爱好，Linux，Git，Hadoop，Cassandra，MongDB，Android，等等。没有一个项目起初是为了售卖而产生的。

相反，这些项目通常是由一些公司维护，他们使用开源的资源来构建软件并[完善软件](http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar)，这主要是一些Web公司。不像以前银行，医院和一些组织开发的软件只供内部使用，他们开源源码。

虽然，[有些公司避免定制软件](http://www.abajournal.com/magazine/article/roll_your_own_software_hidden_dangers_on_the_road_less_traveled/)，因为他们不想自己维护它，开源(稍微)减轻了这些发展中公司来维护一个项目的压力。从而为项目发起人均摊项目的开发成本，Yahoo，建立了 Hadoop，但是现在最大的贡献者是Cloudera和Hortonworks。Facebook 建立了 Cassandra，但是现在主要是靠DataStax在维护。等等。

### 现在就走出来吧！

今天，真正的软件创新并不是闭门造车能造出来的，即便是可以，它也不会在那儿，开源项目颠覆了几十年的软件开发传统。

这不仅仅是一个人的一点点力量。

最好的开源项目都[发展得很快](http://readwrite.com/2013/12/12/open-source-innovation)，但是这并不意味着别人在乎你的开源代码。[开放你的源码有显著的优缺点](http://readwrite.com/2014/07/07/open-source-software-pros-cons)，其中一个很重要的优点是很多伟大的开发者都希望为开源做出贡献：如果你也想找一个伟大的开发者跟你一起，你需要给他们一个开放的源代码来让他们工作。（[Netflix](http://techblog.netflix.com/2012/07/open-source-at-netflix-by-ruslan.html)说）

但是，我们没有理由站在一边看，现在正是时候参与开源社区了，而不是把“社区”妖魔化。是的，开源最大的参与者正是你们和你们的公司。 赶紧开始吧。

主要图片来自于Shutterstock. (注：Shutterstock是美国的一家摄影图片网站。)

---

via: <http://readwrite.com/2014/08/16/open-source-software-business-zulily-erp-wall-street-journal>

作者：[Matt Asay](http://readwrite.com/author/matt-asay) 译者：[barney-ro](https://github.com/barney-ro) 校对：[wxy](https://github.com/wxy)

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


如何从Ubuntu的声音菜单中移除音乐播放器

Summary: 自从2010年首次出现，Ubuntu 的声音菜单已经被证明是Unity 桌面上的最流行的独有特性之一。 把音乐播放器与音量控制程序集成到一个标准的界面里是一种看起来很聪明的做法，这样就不用到处找声音相关的各种程序。人们不禁要问，为什么其它操作系统没有效仿这种做法！ 臃肿 尽管它看起来很方便，但是这个小应用当前存在一个问题：很多播放器都堆在一起，像一个组合音响一样。也许你用得着，但是你安装的所有的媒体播放器都挤在这里，这会让人看着很累赘和反感。 我将要打赌，当你读到这里时，一定发现上面的截图看起来很熟悉！不要担心，dco

[加油啊]

这不就是混音器嘛。

转发微博.

码。

主要是有时候会包含多个播放器——如果你同时安装了几个的话。

![](/data/attachment/album/201412/18/003433g52wl0016rwrfswf.jpg)

**自从2010年首次出现，Ubuntu 的声音菜单已经被证明是Unity 桌面上的最流行的独有特性之一。**

把音乐播放器与音量控制程序集成到一个标准的界面里是一种看起来很聪明的做法，这样就不用到处找声音相关的各种程序。人们不禁要问，为什么其它操作系统没有效仿这种做法！

#### 臃肿

尽管它看起来很方便，但是这个小应用当前存在一个问题：很多播放器都堆在一起，像一个组合音响一样。也许你用得着，但是你安装的所有的媒体播放器都挤在这里，这会让人看着很累赘和反感。

我将要打赌，当你读到这里时，一定发现上面的截图看起来很熟悉！不要担心，**dconf-editor**可以解决它。

### 从Ubuntu 声音菜单中移除播放器

#### 第一部分: 基础知识

最快速和最简单地从声音菜单中移除播放器的方法就是卸载相关的应用程序。但这是极端的方式，我的意思是指你也许想要保留应用程序，但是不需要它集成到菜单里面。

只删除播放器但是保留我们需要的应用程序，我们用到一个看起来令人惊讶的工具叫“dconf-editor”。

你可能已经安装了，如果没有安装的话，那么你从Ubuntu软件中心找出。

* [在Ubuntu中点击安装Dconf-Editor](apt://dconf-editor)

一旦安装完毕，找到Unity Dash并打开。打开的时候不要惊慌；你没有到2002年，它确实是这种古老的样子。

使用右侧菜单栏，你需要从导航到 com > canonical > indicator > sound.下面的面板将会出现。

![](/data/attachment/album/201412/18/003435qlhg4flxjlcglgcl.jpg)

双击“interested-media-players”旁的闭括号，并删除你希望从声音菜单里移除掉的播放器，但需要保留方括号中，且不要删除任何需要保留的逗号或者单引号。

举个例子，我移除掉这些

‘**rhythmbox.desktop**’, ‘**pithos.desktop**’, ‘**clementine.desktop**’,

这样就好留了一行如下：

```
['tomahawk.desktop']

```

现在，当我再打开声音菜单时，我只看到Tomahawk:

![](/data/attachment/album/201412/18/003436ro8fwcql22m19acm.jpg)

#### 第二部分：黑名单

等等！还不能关闭dconf-editor。尽管上面的步骤看起来把事情处理得干净利落，但是一些播放器在打开时会立即重新加载到声音菜单。为了避免重复这个过程，将它们添加到**blacklisted-media-player**中。

记得每个在括号里的播放器都用逗号分隔多个条目。他们也必须在方括号内，所以在退出之前请务必仔细检查。

最终结果如下：

![](/data/attachment/album/201412/18/003438m45d6nvv86iqvxqi.jpg)

---

via: <http://www.omgubuntu.co.uk/2014/11/remove-players-ubuntu-sound-menu>

作者：[Joey-Elijah Sneddon](https://plus.google.com/117485690627814051450/?rel=author) 译者：[disylee](https://github.com/%E8%AF%91%E8%80%85ID) 校对：[wxy](https://github.com/wxy)

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