如何在 Vim 中进行文本选择操作和使用标志

好帅，好酷的样子。

基于图形界面的文本或源代码编辑器，提供了一些诸如文本选择的功能。我是想说，可能大多数人不觉得这是一个功能。不过像 Vim 这种基于命令行的编辑器就不是这样。当你仅使用键盘操作 Vim 的时候，就需要学习特定的命令来选择你想要的文本。在这个教程中，我们将详细讨论文本选择这一功能以及 Vim 中的标志功能。

![](/data/attachment/album/201704/04/055942njnmcte0ktbqctfk.png)

在此之前需要说明的是，本教程中所提到的例子、命令和指令都是在 Ubuntu 16.04 的环境下测试的。Vim 的版本是 7.4。

### Vim 的文本选择功能

我们假设你已经具备了 Vim 编辑器的基本知识（如果没有，可以先阅读[这篇文章](/article-8143-1.html)）。你应该知道，`d` 命令能够剪切/删除一行内容。如果你想要剪切 3 行的话，可以重复命令 3 次。不过，如果需要剪切 15 行呢？重复 `d` 命令 15 次是个实用的解决方法吗？

显然不是。这种情况下的最佳方法是，选中你想要剪切/删除的行，再运行 `d` 命令。举个例子：

假如我想要剪切/删除下面截图中 INTRODUCTION 小节的第一段：

[![Text edited in VIM](/data/attachment/album/201704/04/055957cb4cbbaefvfuxhru.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-example.png)

那么我的做法是：将光标放在第一行的开始，（确保退出了 Insert 模式）按下 `V`（即 `Shift+v`）命令。这时 Vim 会开启视图模式，并选中第一行。

[![Select a line with VIM](/data/attachment/album/201704/04/055957s9b1i1s6tihiixsh.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-initiated.png)

现在，我可以使用方向键“下”，来选中整个段落。

[![Select multiple lines with Vim](/data/attachment/album/201704/04/060000ltuahzmgueguakew.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-working.png)

这就是我们想要的，对吧！现在只需按 `d` 键，就可以剪切/删除选中的段落了。当然，除了剪切/删除，你可以对选中的文本做任何操作。

这给我们带来了另一个重要的问题：当我们不需要删除整行的时候，该怎么做呢？也就是说，我们刚才讨论的解决方法，仅适用于想要对整行做操作的情况。那么如果我们只想删除段落的前三句话呢？

其实也有相应的命令 - 只需用小写 `v` 来代替大写 `V` 即可。在下面的例子中，我使用 `v` 来选中段落的前三句话：

[![Select the first three sentences in Vim](/data/attachment/album/201704/04/060003neegyi8z5t25quo0.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-partial-lines.png)

有时候，你需要处理的数据由单独的列组成，你的需求可能是选择特定的一列。考虑下面的截图：

[![Columns in Vom](/data/attachment/album/201704/04/060004bb2rl28l87fbebf4.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-columns.png)

假设我们只需选择文本的第二列，即国家的名字。这种情况下，你可以将光标放在这一列的第一个字母上，按 `Ctrl+v` 一次。然后，按方向键“下”，选中每个国家名字的第一个字母：

[![Select the first char of a column](/data/attachment/album/201704/04/060006ggrr3to0aoomsvzr.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-column-1.png)

然后按方向键“右”，选中这一列。

[![Select a whole column in Vim](/data/attachment/album/201704/04/060008nbdb55bloca5jwed.png)](https://www.howtoforge.com/images/how-to-use-markers-and-perform-text-selection-in-vim/big/vim-select-column-2.png)

**小窍门**：如果你之前选中了某个文本块，现在想重新选中那个文本块，只需在命令模式下按 `gv` 即可。

### 使用标志

有时候，你在处理一个很大的文件（例如源代码文件或者一个 shell 脚本），可能想要切换到一个特定的位置，然后再回到刚才所在的行。如果这两行的位置不远，或者你并不常做这类操作，那么这不是什么问题。

但是，如果你需要频繁地在当前位置和一些较远的行之间切换，那么最好的方法就是使用标志。你只需标记当前的位置，然后就能够通过标志名，从文件的任意位置回到当前的位置。

在 Vim 中，我们使用 `m` 命令紧跟一个字母来标记一行（字母表示标志名，可用小写的 `a` - `z`）。例如 `ma`。然后你可以使用命令 `'a` （包括左侧的单引号）回到标志为 `a` 的行。

**小窍门**：你可以使用“单引号” `'` 来跳转到标志行的第一个字符，或使用“反引号” ``` 来跳转到标志行的特定列。

Vim 的标志功能还有很多其他的用法。例如，你可以先标记一行，然后将光标移到其他行，运行下面的命令：

```
d'[标志名]

```

来删除当前位置和标志行之间的所有内容。

在 Vim 官方文档中，有一个重要的内容：

>
> 每个文件有一些由小写字母（`a`-`z`）定义的标志。此外，还存在一些由大写字母（`A`-`Z`）定义的全局标志，它们定义了一个特定文件的某个位置。例如，你可能在同时编辑十个文件，每个文件都可以有标志 `a`，但是只有一个文件能够有标志 `A`。
>
>
>

我们已经讨论了使用小写字母作为 Vim 标志的基本用法，以及它们的便捷之处。下面的这段摘录讲解的足够清晰：

>
> 由于种种局限性，大写字母标志可能乍一看不如小写字母标志好用，但它可以用作一种快速的文件书签。例如，打开 `.vimrc` 文件，按下 `mV`，然后退出。下次再想要编辑 `.vimrc` 文件的时候，按下 `'V` 就能够打开它。
>
>
>

最后，我们使用 `delmarks` 命令来删除标志。例如：

```
:delmarks a

```

这一命令将从文件中删除一个标志。当然，你也可以删除标志所在的行，这样标志将被自动删除。你可以在 [Vim 文档](http://vim.wikia.com/wiki/Using_marks) 中找到关于标志的更多信息。

### 总结

当你开始使用 Vim 作为首选编辑器的时候，类似于这篇教程中提到的功能将会是非常有用的工具，能够节省大量的时间。你得承认，这里介绍的文本选择和标志功能几乎不怎么需要学习，所需要的只是一点练习。

---

via: <https://www.howtoforge.com/tutorial/how-to-use-markers-and-perform-text-selection-in-vim/>

作者：[Himanshu Arora](https://www.howtoforge.com/tutorial/how-to-use-markers-and-perform-text-selection-in-vim/) 译者：[Cathon](https://github.com/Cathon) 校对：[wxy](https://github.com/wxy)

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


使用极简的 Min 浏览器消除 web 噪音

看完我对帖子中的系统感兴趣，不知是？

同感。。。。

从界面看最像是 Xfce，其次是名为 Budgie 的 DE。不过个人更倾向是 Xfce。

感觉桌面nice

![](/data/attachment/album/201704/04/061704nyq5qmcpc1511mqs.png)

[Min](https://github.com/minbrowser/min/releases/) 是一款精简设计的 web 浏览器，功能简便，响应迅速。

在软件设计中，“简单”并不意味着功能低级、有待改进。你如果喜欢花哨工具比较少的文本编辑器和笔记程序，那么在 Min 浏览器中会有同样舒适的感觉。

我经常在台式机和笔记本电脑上使用 Google Chrome、Chromium 和 Firefox。我研究了它们的很多附加功能，所以我在长期的研究和工作中可以享用它们的特色服务。

然而，有时我希望有个快速、整洁的替代品来上网。随着多个项目的进行，我需要一个可以很快打开一大批选项卡甚至是独立窗口的强大浏览器。

我试过其他浏览器但很少能令我满意。替代品通常有一套独特的花哨的附件和功能，它们会让我开小差。

Min 浏览器就不这样。它是一个易于使用，并在 GitHub 开源的 web 浏览器，不会使我分心。

![Min browser ](/data/attachment/album/201704/04/061735wcyb1heworpszzvx.jpg)

*Min 浏览器是精简的浏览器，提供了简单的功能以及快速的响应。只是不要指望马上能上手。*

### 它做些什么

Min 浏览器提供了 Debian Linux、Windows 和 Mac 机器的版本。它不能与功能众多的主流跨平台 web 浏览器竞争。

但它不必竞争，它很有名的原因应该是补充而不是取代那些主流浏览器。

其中一个主要原因是其内置的广告拦截功能。开箱即用的 Min 浏览器不需要配置或寻找兼容的第三方应用程序来拦截广告。

在 Edit/Preferences 菜单中，你可以通过三个选项来设置阻止的内容。它很容易修改屏蔽策略来满足你的喜好。阻止跟踪器和广告选项使用 EasyList 和 EasyPrivacy。 如果没有其他原因，请保持此选项选中。

你还可以阻止脚本和图像。这样做可以最大限度地提高网站加载速度，并能有效防御恶意代码。

### 按你的方式搜索

如果你在搜索上花费大量时间，你会喜欢 Min 处理搜索的方式。这是一个顶级的功能。

可以直接在浏览器的网址栏中使用搜索功能。Min 使用搜索引擎 DuckDuckGo 和维基百科的内容进行搜索。你可以直接在 web 地址栏中输入要搜索的东西。

这种方法很节省时间，因为你不必先进入搜索引擎窗口。 还有一个好处是可以搜索你的书签。

在 Edit/Preferences 菜单中，可以选择默认的搜索引擎。该列表包括 DuckDuckGo、Google、Bing、Yahoo、Baidu、Wikipedia 和 Yandex。

尝试将 DuckDuckGo 作为默认搜索引擎。 Min 默认使用这个引擎，但你也能更换。

![Min browser search function ](/data/attachment/album/201704/04/061735fspyj4j14vfnibpv.jpg)

*Min 浏览器的搜索功能是 URL 栏的一部分。Min 会使用搜索引擎 DuckDuckGo 和维基百科的内容。你可以直接在 web 地址栏中输入要搜索的东西。*

搜索栏会非常快速地显示问题的答案。它会使用 DuckDuckGo 的信息，包括维基百科条目、计算器和其它的内容。

它能快速提供片段、答案和网络建议。它有点像不是基于 Goolge 环境的替代品。

### 导航辅助

Min 允许你使用模糊搜索快速跳转到任何网站。它能立即向你提出建议。

我喜欢在当前标签旁边打开标签的方式。你不必设置此选项。它在默认情况下没有其他选择，但这也有道理。

![Min browser Tasks](/data/attachment/album/201704/04/061736mmaye79n8nzlol89.jpg)

*Min 的一个很酷的功能是将标签整理到任务栏中，这样你随时都可以搜索。*

不点击标签，过一会儿它就会消失。这使你可以专注于当前的任务，而不会分心。

Min 不需要附加工具来控制多个标签。浏览器会显示标签列表，并允许你将它们分组。

### 保持专注

Min 在“视图”菜单中有一个可选的“聚焦模式”。启用后，除了你打开的选项卡外，它会隐藏其它所有选项卡。 你必须返回到菜单，关闭“聚焦模式”，才能打开新选项卡。

任务功能还可以帮助你保持专注。你可以在 File 菜单或使用 `Ctrl+Shift+N` 创建任务。如果要打开新选项卡，可以在 File 菜单中选择该选项，或使用 `Control+T`。

按照你的风格打开新任务。我喜欢按组来管理和显示标签，这组标签与工作项目或研究的某些部分相关。我可以在任何时间重新打开整个列表，从而轻松快速的方式找到我的浏览记录。

另一个好用的功能是可以在选项卡区域找到段落对齐按钮。单击它启用阅读模式。此模式会保存文章以供将来参考，并删除页面上的一切，以便你可以专注于阅读任务。

### 并不完美

Min 浏览器并不是强大的，功能丰富的完美替代品。它有一些明显的缺点，开发人员花了很多时间也没有修正。

例如，它缺乏一个支持论坛和详细用户指南的开发人员网站。可能部分原因是它的官网在 GitHub，而不是一个独立的开发人员网站。尽管如此，对新用户而言这是一个缺点。

没有网站支持，用户被迫在 GitHub 上寻找自述文件和各种目录列表。你也可以在 Min 浏览器的帮助菜单中访问它们 - 但这没有太多帮助。

一个例子是当你启动浏览器时，屏幕会显示欢迎界面。它会显示两个按钮，一个人是 “Start Browsing”，另一个是 “Take a Tour.”。但是没有一个按钮可以使用。

但是，你可以通过单击 Min 窗口顶部的菜单栏开始浏览。但是，还没有解决缺少概览办法。

### 底线

Min 并不是一个功能完善、丰富的 web 浏览器。你在功能完善的主流浏览器中所用的插件和其它许多功能都不是 Min 的设计目标。然而，Min 在快速响应和免打扰方面很有用。

我越使用 Min 浏览器，我越觉得它高效 - 但是当你第一次使用它时要小心。

Min 并不复杂，也不难操作 - 它只是有点古怪。你必须要体验一下才能明白它如何使用。

### 想要提建议么？

可以使用下方的读者评论功能说出你的想法！

---

作者简介：

Jack M. Germain 从苹果 II 和 PC 的早期起就一直在写关于计算机技术。他仍然有他原来的 IBM PC-Jr 和一些其他遗留的 DOS 和 Windows 机器。他为 Linux 桌面的开源世界留下过共享软件。他运行几个版本的 Windows 和 Linux 操作系统，还通常不能决定是否用他的平板电脑、上网本或 Android 智能手机，还是用他的台式机或笔记本电脑。你可以在 Google+ 上与他联系。

---

via: <http://www.linuxinsider.com/story/84212.html?rss=1>

作者：[Jack M. Germain](http://www.linuxinsider.com/story/84212.html?rss=1#searchbyline) 译者：[geekpi](https://github.com/geekpi) 校对：[GitFuture](https://github.com/GitFuture)

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


用 Apache Calcite 构建强大的实时流式应用

Summary: Calcite 是一个数据框架，它允许你创建自定义数据库功能。

111 垃圾

111 垃圾

111 垃圾

111 垃圾

Calcite 是一个数据框架，它允许你创建自定义数据库功能。

![Calcite](/data/attachment/album/201704/04/063524fq4v4dvrqn4vmrsj.jpg "Calcite ")

Calcite 是一个数据框架，它允许你创建自定义数据库功能，微软开发者 Atri Sharma 在 Apache 2016 年 11 月 14-16 日在西班牙塞维利亚举行的 Big Data Europe 中对此进行了讲演。

[Apache Calcite](https://calcite.apache.org/) 数据管理框架包含了典型的数据库管理系统的许多部分，但省略了如数据的存储和处理数据的算法等其他部分。 Microsoft 的 Azure Data Lake 的软件工程师 Atri Sharma 在西班牙塞维利亚的 [Apache：Big Data](http://events.linuxfoundation.org/events/apache-big-data-europe) 会议上的演讲中讨论了使用 [Apache Calcite](https://calcite.apache.org/) 的高级查询规划能力。我们与 Sharma 讨论了解有关 Calcite 的更多信息，以及现有程序如何利用其功能。

**Linux.com：**你能提供一些关于 Apache Calcite 的背景吗？ 它有什么作用？

Atri Sharma：Calcite 是一个框架，它是许多数据库内核的基础。Calcite 允许你构建自定义的数据库功能来使用 Calcite 所需的资源。例如，Hive 使用 Calcite 进行基于成本的查询优化、Drill 和 Kylin 使用 Calcite 进行 SQL 解析和优化、Apex 使用 Calcite 进行流式 SQL。

**Linux.com：**有哪些是使得 Apache Calcite 与其他框架不同的特性？

Atri：Calcite 是独一无二的，它允许你建立自己的数据平台。 Calcite 不直接管理你的数据，而是允许你使用 Calcite 的库来定义你自己的组件。 例如，它允许使用 Calcite 中可用的 Planner 定义你的自定义查询优化器，而不是提供通用查询优化器。

**Linux.com：**Apache Calcite 本身不会存储或处理数据。 它如何影响程序开发？

Atri：Calcite 是数据库内核中的依赖项。它针对的是希望扩展其功能，而无需从头开始编写大量功能的的数据管理平台。

**Linux.com：**谁应该使用它？ 你能举几个例子吗？\*\*

Atri：任何旨在扩展其功能的数据管理平台都应使用 Calcite。 我们是你下一个高性能数据库的基础！

具体来说，我认为最大的例子是 Hive 使用 Calcite 用于查询优化、Flink 解析和流 SQL 处理。 Hive 和 Flink 是成熟的数据管理引擎，并将 Calcite 用于相当专业的用途。这是对 Calcite 应用进一步加强数据管理平台核心的一个好的案例研究。

**Linux.com：**你有哪些期待的新功能？

Atri：流式 SQL 增强是令我非常兴奋的事情。这些功能令人兴奋，因为它们将使 Calcite 的用户能够更快地开发实时流式应用程序，并且这些程序的强大和功能将是多方面的。流式应用程序是新的事实，并且在流式 SQL 中具有查询优化的优点对于大部分人将是非常有用的。此外，关于暂存表的讨论还在进行，所以请继续关注！

---

via: <https://www.linux.com/news/build-strong-real-time-streaming-apps-apache-calcite>

作者：[AMBER ANKERHOLZ](https://www.linux.com/users/aankerholz) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


漫画赏析：Linux 版 SQL Server

Summary: 在那个 Apache 进程高高兴兴的走出去之后，下一位却被要求创建 Linux 版的 SQL Server，这简直让人气的跳起来！

这个也太黑 SQL Server 了，本来数据库就有尽可能利用系统所有资源的设置，MySQL 默认的配置里就有这么个选项。还有限制软件对系统资源的使用，其核心是调用 cgroup 功能，Docker 也只是对其的封装，所以不要把 Docker 说的太神。

呵呵，漫画表达的核心思想就两个：

1.linux sql server 很烂

2.docker 很好很强大

我觉得漫画作者是站着说话不腰疼，一款数据库软件无论是性能如何，要写出一个原生的，不容易。Docker 现在不也在和 systemd 互撕吗？想自己成为 init。P.S. systemd-nspawn 建立的容器还是挺好用的。

这翻译。。。run for your life应该翻译成“你快逃命啊”而不是“为生活而奔波”吧。。。。（强迫症奇怪的关注点

SQL Server、Oracle默认配置，我只见过Oracle将服务器搞死（内存消耗导致，而且工作站还不到10个）

从甲骨文在 github 上托管的 Oracle for Docker 项目看，甲骨文目前对于 Oracle 数据库运行在 Linux 容器只提供有限支持。

谢谢指点！邀请您也来参与我们 LCTT/ LCCT 的翻译啊~~ https://github.com/LCTT/comic

谢谢指正。

高级黑。。。

哈哈，是不是可以理解为docker的软文？^_^

数据库优化的核心就是要榨干所有硬件性能，我们在存储过程优化中，对0.05%的性能优化都不能放过，反而封装到docker里面，我只能发出一连串的hahahahah了。

sqlserver还是老老实实的在windows下面耍吧

无脑黑！<br />
生成环境的服务器上，一个linux只是支撑一个主要server运行，而且本来就是高负载的数据库为什么要放倒docker里面？！多一层概念就多一层性能损耗，每一个性能损耗积少成多都是可以转化成效益的！

同意，毕竟一个是爷爷，一个是孙子

会不会是电脑的配置不够啊，更换一些硬件，可能结果会好些。

### Linux 版 SQL Server （一）

![sql-server-on-linux](/data/attachment/album/201704/05/091930x5e55tkb6t4ft552.png)

在 Linux 内核之中，大家正在静静的等待进程的创建。每个创建的进程会被分配一个进程 ID （PID）。

在那个 Apache 进程高高兴兴的走出去之后，下一位却被要求创建 [Linux 版的 SQL Server](/article-7967-1.html)，这简直让人气的跳起来！

这个愤怒的进程宣称，“我将占用所有的 CPU 和内存！”面对其它面面相觑的进程们，内核无奈的宣布，“伙计们，我们打烊了……”

与其用 Linux 版 SQL Server，[何不用 MySQL / MariaDB 呢？](/article-8073-1.html) 大家使用过 Linux 版 SQL Server 吗？体验如何？欢迎评论。

### Linux 版 SQL Server （二）

![](/data/attachment/album/201704/05/212828jat0psf0xeodotn6.png)

Clark，嗯，就是那个贪婪的 Linux 版的 SQL Server，它要把 Linux 服务器撑破了，内核已经陷入崩溃了，急切需要重启。

等等，似乎我们找到了一个好办法，把 Clark 关到盒子里面去。

看起来不错哦，果然鲸鱼的大肚子能装啊——内核长吁一口气。

---

via:

* <https://turnoff.us/geek/sql-server-on-linux/>
* <https://turnoff.us/geek/sql-server-on-linux-2/>

作者：[Daniel Stori](https://turnoff.us/about/) 译者：[GHLandy](https://github.com/GHLandy) 校对&点评：[wxy](https://github.com/wxy)

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


深入点评联想 Yoga 900 笔记本安装 Arch Linux 系统

Summary: 在 联想 Yoga 2 笔记本电脑 上使用了 3 年多的 Arch Linux 系统后，我决定换个新的 Yoga 900 笔记本电脑来安装 Arch Linux 系统

挺不错的文章

“Gnome 2 和 Windows 10 系统中的有些非常有用的功能也消失了”把 Gnome 2 和 Windwows 10 一起合适吗？后者比 Gnome 3 都晚。

Windows 10 的软件包管理是 PowerShell 下的 OneGet。应用商店和 Linux 的包管理不是一回事。

官方只支持 Ubuntu 的原因是，云上很多 IaaS 上用 Ubuntu 系统的很多，而且这个功能目前也不是给普通用户用的。

我就觉得12寸屏幕加上全触摸屏幕再装上Gnu/Linux更好一点点！！！

就是瞎折腾

看起来像一个穷酸的程序员。。

不错，值得一读@！～

linux还是适合当服务器,windows才是桌面,我觉得linux还是安安静静的当服务器好

很可惜 linux 本来就不是所有人<br />
都可驾驭得了的..

*注意：这篇文章比较长，有一万多字，而且还有很多非常有意思的链接，因此，你最好还是先给自己准备点喝的吧，然后再花时间来阅读。*

在 [联想 Yoga 2 笔记本电脑](http://keithcu.com/wordpress/?p=3270) 上使用了 3 年多的 Arch Linux 系统后，我决定换个新的 Yoga 900 笔记本电脑来安装 Arch Linux 系统：

![](/data/attachment/album/201704/06/093315y7dzogjv805o571x.jpg)

*联想 Yoga 900 笔记本电脑在[亚马逊网站上的特价](https://www.amazon.com/Lenovo-13-3-inch-Multitouch-Convertible-Platinum/dp/B01NA6ANNK/) 为 925 美元 —— 8GB 内存， 256 GB 固态硬盘， 3200×1800 的分辨率，处理器为 Skylake 3.2GHz ， Iris Graphics 显卡。*

同等配置的戴尔笔记本电脑 [XPS 13](http://configure.us.dell.com/dellstore/config.aspx?oc=cax13w10ph5122&model_id=xps-13-9360-laptop&c=us&l=en&s=bsd&cs=04) 搭载新一代 Inter 处理器，售价 1650 美元。 Yoga 910 为当前最新款，价格为 1300 美元。但是，我压根就不会考虑这一款，因为它的键盘设计得太狗屎了。很多评论都从其外观颜色及材质方面大作文章，但是我偏偏从它的键盘设计上来挑刺。

### 键盘

Yoga 2 Pro 和 Yoga 900 这两款笔记本电脑从外观上看没啥区别。它的键盘设计跟曾经光鲜亮丽的 IBM Thinkpad 的键盘比起来可真是差远了，但是这还不算是最狗屎的键盘，好歹我还用了三年多的 Yoga 2 ，而且早已经习惯了。不幸的是，新款 Yoga 910 的键盘设计更是糟糕透了。

![](/data/attachment/album/201704/06/093317w28umr4z91ubium1.png)

*Yoga 2 和 Yoga 900 的键盘布局*

![](/data/attachment/album/201704/06/093318f9smaaa8s1a882f8.png)

*Yoga 910 的键盘*

Yoga 910 键盘的问题是它的 右-shift 按键位置不合理，你不挪动手根本就按不到那个键。这个键的位置非常特殊，可以说是跟我上 9 年级打字课时所用的 IBM 打字机键盘到目前为止用过的所有键盘都不一样。我宁愿看到这个失误出现在华硕或是戴尔公司的电脑上，而不是来自于曾经让一代代美国人学习和工作并且创造了打印机传奇历史的 IBM 公司。（LCTT 译注：联想的 Yoga 还和 IBM 有什么关系么？）

Yoga 团队每一年都会更改键盘布局。想象一下，如果 IBM 公司在 20 世纪的时候也不断改变他们的打印机键盘布局，而且还吹嘘这是为了提高"[工作效率]"[4](http://blog.lenovo.com/en/blog/why-you-should-give-in-to-the-new-thinkpad-keyboard)。那么这个公司可能早就倒闭了!

我基本上还能习惯 Yoga 910 的向上/向下翻页键跟方向键整合到一起，其它的一些改变也无大碍，但是 shift 键就是设计上的一个败笔，我太讨厌因为某些东西而改变自己的使用习惯了。

其实，联想笔记本电脑在键盘的设计上还有很多地方需要改进，比如说，让音量增加键与应用程序关闭键不要靠得太近。尽管目前已经有一个降低亮度的开关了，他们也可以重新考虑设计一个更简单的方式来快速关闭显示器。他们还应该设计一个重叠式的数字小键盘。难道联想的工程师觉得只有在商务工作中才会使用到数字小键盘吗？

Yoga 910 的键盘布局改变得太多了，也许再也回不到曾经的老式键盘了。我希望 Yoga 的键盘不要再随便改了。我更愿意拥有一个比电脑更高效 10 倍的键盘。

我在联想官网的评论中看到有些用户由于对 Yoga 910 的键使用不习惯的原因而申请退货。我觉得联想公司应该制定这样一条规定：如果某个工程师想更改键盘布局，他们必须给出一个**非常充分**的理由，如果这种设计给用户在使用方面造成了巨大的不便，那么将以剁其一根手指的代价来让他也体会下这种痛苦。如果真有这样一条规则，那么将会大大减少那些毫无意义的更改键盘的行为。 Yoga 910 笔记本电脑可以说是联想公司呕心沥血之杰作了，但是其输入系统却是一大败笔。

### 总体评价

Yoga 2 对于我的任何操作，其反应速度都非常快。它的固态硬盘也非常给力，但是用在 Arch Linux 系统下就有些大材小用了。那些只使用 Windows 系统的用户就不会体会到他们的系统有多么的庞大臃肿：

[![](/data/attachment/album/201704/05/091930x5e55tkb6t4ft552.png)](/article-8376-1.html)

在 90 年代时期，由于处理器的性能每隔 18 个月翻一倍，并且软件的大小也经常成倍的增长，因此，一款新的电脑每隔几年就会发布出来。现在早已发生了翻天覆地的变化。新款的 Yoga 900 笔记本电脑在运行性能测试的过程中，速度比我的 Yoga 2 还要快 30% 。 Yoga 900 的 CPU 主频为 3.2 GHz ，老款的 Yoga 2 主频为 2.6 GHz ，因此， Yoga 900 最大的亮点是更快的 CPU 处理频率。

Haswell 处理器架构发布于 2013 年，而 Skylake 处理器架构在 2015 年才发布，因此，经过两年的发展，处理器性能有了很大的改善。新一代的处理器最大的改进是采用 14 纳米工艺制造技术来代替原先的 22 纳米工艺技术，这意味着新款笔记本电脑散热更小，电池使用时间更长。我的老款的 Yoga 2 笔记本在中等亮度的情况下，电池使用时长只有 3 个半小时左右，但是新款 Yoga 900 的电池使用时长高达 7 小时。

Yoga 2 的转轴已经开始松动和裂开了，我也没有一个好的办法来拧紧，只能从网上找新的配件来更换或者发给联想售后进行维修了。

![](/data/attachment/album/201704/06/093319vo3fhiiiq5q2qcbq.png)

Yoga 的转轴用于将笔记本电脑放平，甚至是将电脑合起来作为平板电脑使用，但是我觉得这样用起来很笨重，所以也就不想去自找麻烦。这么多年来，只要它在日常工作中能够正常打开和合拢，我就已经很高兴了。

Yoga 900 坚固的表链式铰链应该更耐用：

![](/data/attachment/album/201704/06/093319n8dnslkyznsq220q.jpg)

有一个很明显的小毛病就是如果你摇晃笔记本电脑时，其格格作响的声音会让你误以为是内部的零部件损坏了，你自然会担心电子器件短路的危险！然而，这只不过是 800 多片钢片构成的仿表带铰链发出的声音。

Yoga 2 总的来说是一款设计精良的产品，但是如果我将显示器展平，然后单手拖住的时候，它会有一点向下弯曲，而且有时候键盘背光灯也会熄灭。两款 Yoga 笔记本电脑都很轻薄，但是 Yoga 900 看起来更坚固耐用一些。

### 触摸板

Yoga 2 最严重的问题出现在触摸板上。这不是硬件导致的，而是驱动程序自身的问题，由于触摸板驱动程序本身没人在维护，因此存在一些缺陷。很遗憾， Synaptics 公司本来可以很轻易地安排一个工程师来维护这几千行的代码，但是联想重新写了另外一个版本的驱动程序，但是还没有开源发布出来，以便可以包括到系统内核中。

因此，为了让触摸板设备和其它输入设备的管理和使用更加方便简捷，建立了一个叫做 [Libinput](https://www.freedesktop.org/wiki/Software/libinput/) 的新软件库。 Libinput 最好的一点就是，维护人员会修复各种缺陷。还有一个很实用的功能就是如果你左指尖触摸鼠标单击区域，它现在会通过你的右指尖记录指针移动轨迹。但是，让人难以接受的事情是， Synaptics 的这个基本的功能在 Linux 系统中很多年前就无法使用了。

触摸板设备一直运行正常，但是它不再像以前那样发出敲击声了。实际上这也不是什么问题，但是这会让我担心我在触摸板上的操作是否正确。老款的 Thinkpad 笔记本电脑有好几个左右按键，因此，如果其中一个损坏了，你可以使用另外一个，但是 Yoga 笔记本只有一个鼠标左右按键，如果损坏了就只能插入鼠标来代替使用了。（联想还巴不得你的电脑赶紧坏了好换新的。）

### 内核支持

当年我购买 Haswell 处理器的笔记本电脑时，硬件都是最新的，因此，我折腾了好几个月才把 Linux 驱动程序相关的问题解决了。而现在我使用的新一代的 Skylake 处理器的笔记本电脑，在[处理器发布 8 个多月后](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=762ce4458974534a2407cc924db05840c89105df)，其内核崩溃的问题才被修复了。以前老款笔记本电脑的 [电源管理](https://mjg59.dreamwidth.org/41713.html) 一直运行不正常，但是从新款笔记本电脑使用来看，以前的问题大都不存在了，而且有了很大的改善。如果用户不进行任何操作，这个笔记本电脑会自动进入到低功耗的 C6 - C10 状态。（这个功能是由 Linux 系统中的 **powertop 省电工具** 进行控制的。）

电源管理这个功能非常重要，它不仅会影响到电池的使用寿命，而且由于[电解迁移](https://en.wikipedia.org/wiki/Electromigration)的原因，那些微小电路会逐渐耗尽。英特尔公司甚至发出公告：”电池使用的长期可靠性是无法保障的，除非所有程序都运行在低功耗的空闲状态。“通过让程序运行在低功耗模式下，以使用更小的电路，从而让电池使用寿命更长。

现在 Haswell 处理器架构对 Linux 系统的支持性已经非常好了，但是之前的很长一段时间，它的支持性都很差。刚开始那一年，我提出了很多 Haswell 处理器相关的问题，但是现在可以看出这两款处理器在对 Linux 系统的支持上都有了很大的改善。

### 联想笔记本的 BIOS 不兼容 Linux 系统

在 Yoga 900 电脑上安装 Arch Linux 系统之前，我得在 Windows 系统中再刷一个新的 BIOS 。实际上，我的电脑中得有 2 个 BIOS。最新版本的 Yoga 900 BIOS [不包括](http://support.lenovo.com/us/en/products/Laptops-and-netbooks/Yoga-Series/yoga-900-13isk2/80UE/downloads/DS112754)我需要的必备修补程序，所以在挠头了一会之后，我恍然大悟，然后我 [安装](http://support.lenovo.com/us/en/products/laptops-and-netbooks/yoga-series/yoga-900-13isk2/downloads/ds119354)了一个单独的“仅 Linux 系统”的 BIOS 更新，这样我的联想电脑就不再支持 Windows 系统了：“你不[可怜](https://linux.slashdot.org/comments.pl?sid=9861381&cid=53241071)下我吗？”

那些经常关注 Linux 系统的用户就很清楚， Yoga 900 和其它最新款的联想笔记本电脑无法安装 Linux 系统，因为它甚至不能[检测到硬盘](https://www.reddit.com/r/linux/comments/54gtpc/letter_to_the_federal_trade_commission_regarding/)。联想最初回复其笔记本电脑已不再支持 Linux 系统了，因为它使用的是[新型的 RAID 控制器模式](http://venturebeat.com/2016/09/21/lenovo-confirms-that-linux-wont-work-on-yoga-900-and-900s-laptops/) 。然而，实现 RAID 机制就意味着更多的磁盘，而笔记本电脑实际上只有一个硬盘，并且也没有多余的空间来安装另外一块磁盘了。

下面是联想给出的[官方解释](http://venturebeat.com/2016/09/21/lenovo-confirms-that-linux-wont-work-on-yoga-900-and-900s-laptops/)：

>
> “为了更好地支持 Yoga 系列产品以及行业领先的 360 度铰链转轴设计技术的发展，我们采用了一种存储控制器模式，很遗憾，这种模式不支持 Linux 系统，不能够安装 Linux 系统。”
>
>
>

我觉得很搞笑，为了转轴而采用特殊的存储控制器！这就好比一个汽车制造公司宣称由于新型的广播设备，他们必须改变汽车的轮胎一样。

这引发了巨大的争议，感谢 Reddit 网站的 [BaronHK](https://www.reddit.com/user/baronhk/) 的努力，他为媒体提供了大量的信息，并联系了伊利诺斯州检查院。搜索 "[联想 Yoga 的 Linux 兼容性](https://duckduckgo.com/?q=lenovo+yoga+linux+compatibility&t=hs&ia=web)" 出现 300,000 条结果。联想或许会因为销售不允许用户安装自己的操作系统的“通用”PC 而触犯法律。对于我来说，为电脑设置默认的操作系统是毫无意义的。

技术高手们也被卷入到这场“战争”中进来，他们最终发现通过设置 UEFI ，这款笔记本也能够支持 AHCI 控制器模式，只是默认被禁用了。简单来说，联想故意取消对 Linux 系统的支持没啥好处。因为大家都已经明白事实真相了，如果这件事闹到法庭上，联想也只能自取其辱。

幸运的是，这些新闻引起了他们的关注，并且他们最终更新了 BIOS 。这篇文章就是在运行着 Linux 系统的 Yoga 900 笔记本电脑上写的，因此，我们应该庆祝下这个伟大的胜利。大家都希望联想从中受到教训，但是我并不看好。他们本来就应该为你的电脑提供一个选择操作系统的机会。他们应该在用户之前就发现了这个缺陷了。我将等待一周左右的时间才能拿到定制化的电脑。他们应该把分区设置好，并且让用户定制很多东西，安装最新版的软件，而不是使用一个需要很多更新的老镜像文件。

一些钟爱联想电脑的用户认为这是 Linux 系统自己的问题，是 Linux 系统本身就不支持最新的 RAID 驱动模式导致的问题。然而， AHCI 控制器模式本来是一个非常流行的标准，而由于英特尔公司为这种新的 RAID 硬件写的代码“[太糟糕](https://www.spinics.net/lists/linux-ide/msg53370.html)”而被 Linux 系统内核开发团队拒绝了。该团队要求英特尔公司提供这种硬件的详细设计说明，但是他们一直没有给出任何答复。

### 散热

当 CPU 占用很高时， Yoga 2 笔记本会变得很烫。有一次我把笔记本放到毯子上编译 LibreOffice 软件时就把底部的塑料壳烧焦了，这实在是太丑陋了，这让我看上去像是一个很穷酸的程序员。我试着用铁刷子和松脂油来擦除烧焦的部分，但是也没什么鸟用。

![](/data/attachment/album/201704/06/093320cdzuw1ubbb0bu9de.jpg)

新款的笔记本电脑使用金属外壳，不容易褪色，并且 Skylake 处理器架构比 Haswell 的要强劲得多。把散热口设计了跟转轴融合在一起，这是一个非常明智及巧妙的做法，如果散热口在下方则可能被堵塞住。

用了很多年的 Yoga 2 ，我觉得最烦人的一件事就是它的风扇里累积了厚厚的尘埃，运行时听上去就像是沙子摩擦的声音！这些尘埃分布得很广，使用时产生的声音也大，让人容易分心。我把笔记本电脑拆开来清除里面的尘埃，但是风扇的叶片是隐藏的，无法进行清除。我只能把整个风扇替换掉了。在 Yoga2 上完成简单的工作，比如文字处理和浏览器上网时，风扇不会旋转，但是当它旋转时，如果不带耳机会感到很烦人。

Yoga 900 的风扇叶片密度很高，而且运行的很平稳，也不会让人分心。 Yoga 900 的风扇好像一直都在旋转，但是速度非常慢，而且声音很小也很安静。我家里电冰箱和空气净化器的声音都要比它大得多，除了笔记本电脑在高负载的情况下声音有点大，不过那也不影响我工作。

### 显示器

Yoga 2 的显示屏很大气，但是也同样存在大家所熟知的问题，比如屏幕上的黄色看上去更像是橙色。然而，整体画质看起来还算细腻，其它颜色方面也不错。 Yoga 900 的屏幕已经修复了那个黄颜色的问题。它不是一个真正的 4K 屏，实际上仅有 3200×1800 的分辨率，但是从 15.6 寸的显示屏上看，它的像素要比真正的 4K 屏要细腻得多，所以显示效果超级锐利。有些人说这屏幕分辨率是假的，因为它使用了“[RG/BW Pentile 矩阵](http://i.imgur.com/8pYBfcU.png)”，但是对我来说，高分辨率的图片看起来就很棒，何况文本。

当年我购买 Yoga 2 笔记本电脑时，由于其使用的是当时最新的 Haswell 处理器架构，所以我遇到了各种英特尔显卡显示异常的问题，这些问题过了几个月后才被解决。之后，我还发现了一个会导致 Linux 系统崩溃的内存泄漏问题，并且这个缺陷好多年都没被处理。

我在 VLC 播放器中使用 shift + 箭头键快进视频时，遇到了好几次内存耗尽的问题。系统也没显示 VLC 播放器占用了多少的内存，但是电脑内存却耗尽了。很明显这是内核导致的内存泄漏问题。我创建了一个 swap 文件作为虚拟内存使用，以减少内存耗尽的时间，但是有好几次我没注意时，这个文件又被占满了。几年后，这个问题逐渐消失了，而且现在 Linux 系统也运行得很稳定。

大家都认为英特尔公司为 Linux 系统开发的驱动程序是最好的，但是他们更像是微软内部的一个秘密的臭鼬工厂项目。英特尔公司的驱动程序开发人员都很专业，就是人员不够多。在发布硬件之前，他们都竭力让驱动程序做得更完美。 英特尔公司生产的 [113 款处理器](http://ark.intel.com/products/codename/37572/Skylake) 都是基于 Skylake 处理器架构的，只是在特性上有细微的区别。听起来你会觉得有很多类型的处理器，但是在 [Haswell 处理器](http://ark.intel.com/products/codename/42174/Haswell#@All) 时期，英特尔公司生产了 256 款芯片。10 年前我听一个英特尔公司的员工说过，相对于 Windows 来说，他们仅投入了 1% 到 Linux 系统上，从现在的情形来看，确实是那样的。

在我使用 Yoga 2 的过程中唯一遇到的性能问题是无法正常播放 4K 视频，屏幕经常出现卡顿，或是出现每秒才播放 5 帧的现象：

![](/data/attachment/album/201704/06/093321kh66we0phjgz7edp.jpg)

Yoga 2 甚至是在播放 1920×1080 分辨率的视频时有时候也显得很吃力，看样子它最多只能以 60fps 的速度来播放视频。出现这样的情况也可能是因为我一直在运行着其它的应用程序，比如 Firefox 浏览器和 LibreOffice 办公软件。

Skylake 处理器主要用于在 60fps 的速度下使用 H.264 、 VP9 以及其它编解码方式来播放 4K 视频。实际上这款处理器中有很多硬件专门用于加速[多媒体特性](http://www.anandtech.com/show/9562/intels-skylake-gpu-analyzing-the-media-capabilities)。我尝试使用 **ffmpeg 软件** 来处理 H264 格式的硬件编码，我发现即使只使用一个 CPU 的情况下，其处理速度也比原来的处理器快 4 倍。这种性能太棒了。不爽的是，在设置的过程中有点麻烦，因为你必须使用很多命令行参数：

```
-threads 1 -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format='nv12|vaapi,hwupload'

```

我尝试找到一种方法让 **ffmpeg 软件** 保存这些命令，这样我就不用每次都手动输入这么多参数了，但是最后发现根本行不通。而且无论怎样，在整个过程中也不能自动传递这些参数。我还发现在使用这个硬件的的过程中不能缩放视频尺寸，它会忽略该操作，因此，我很少会用这个工具。如果 **ffmpeg 软件** 可以实现这一点就完美了。由于很多用户都不了解，或者是不想太麻烦，所以还有很多未使用的硬件资源。这个软件有很多跟 Linux 系统和 Windows 系统相关的应用接口，如果要进行视频编码和解码，将会是[一件麻烦事](https://trac.ffmpeg.org/wiki/HWAccelIntro)。

Skylake 处理器架构在播放 4K 视频方面表现得更出色，但是有时候它也会出现卡顿现象，然后瞬间降到 10fps 的播放速度。我想起其中一部分卡顿现象就是在播放《X 战警》的过程中。我尝试在 Wayland 下播放 4K 视频时却很流畅，这让我非常满意。很高兴看到 OpenGL 给予的大力支持。在硬件方面， 英特尔公司 2014 年以来支持的最新版本是 4.5 。

我的 Yoga 900 （-13ISK2）笔记本电脑实际上是一个升级版，使用比 520 [更快](http://www.game-debate.com/gpu/index.php?gid=3295&gid2=3285&compare=iris-graphics-540-mobile-vs-intel-hd-graphics-520-mobile) 的 Iris 540 图像协同处理器，而且它的流处理器多达 24 个。然而，它只能用来玩 SuperTuxKart 游戏，而且还得将游戏显示效果设置为中等，分辨率调整为 1600×900 ，速度为 20fps ，我也不想在这里吹什么牛。说真的，这款游戏比前几年改善了很多，而且游戏界面也漂亮得多。

![](/data/attachment/album/201704/06/093323iszlmu0ugu0j7hez.png)

英特尔公司在中国有一个团队致力于[使](https://www.freedesktop.org/wiki/Software/Beignet/) 该显卡支持 OpenCL。但是，我从未看到 Blender 的任何用户使用它，因此我怀疑这个团队是不是作摆设用的。英特尔公司已经很长时间都没有支持 OpenCL 了，那些使用 Blender 软件处理重要工作的用户早已换成 Nvidia 或者 AMD 显卡，即使英特尔公司后来重新写了代码，大家也没太多的兴趣做测试。

有一件事让我感到非常意外，我在另外一台机器上做光线追踪测试时发现，一个四核的处理器比使用循环引擎的 NVidia 960M 的处理器要快得多。很明显，在处理那个任务时， 640 CUDA 多核心处理器也比不上 4 个英特尔公司的 CPU 。更高级的英特尔处理器有 2000 多个核心，性能更强悍。

### HiDPI 高分辨率支持

最近这三年来， Linux 系统在高分辨率屏幕方面已经做得越来越好了，但是仍然有很长的路要走。还好目前的 Gnome 版本对 HiDPI 的支持也算完美。如果你把火狐浏览器的 **layout.css.devPixelsPerPx** 这个参数值设置为 2 ，其显示效果更美观。然而这个 13.3 寸的屏幕分辨率还是显得略小了些，我还安装了一个无斜视加强版（No-Squint Plus）插件，这让屏幕在 120 度范围内看起来更方便。

很高兴地看到 LibreOffice 办公软件的界面在当前设置的屏幕下变得更加美观，因为我安装了 2014 年 4 月份发布的[一些补丁](http://keithcu.com/wordpress/?p=3444)，而且这些功能还一直在不断的完善中。最大的问题是 LibreOffice 软件界面的工具图标重叠起来了。有很多主题都包括 SVG 图标，但是这些图标不会跟产品一起发布出来。跟 PNG 类型的图标相比， SVG 图标加载更慢，而且还要缓存才行。[Tomaž Vajngerl 在这方面投入很多的精力](https://cgit.freedesktop.org/libreoffice/core/log/?qt=grep&q=hidpi)，但是还未发布出来。尽管这样， LibreOffice 比那些没有易识别图标的 Linux 系统应用程序要漂亮得多。

应用程序在高分辨率屏幕中的检测与应用方面正在不断的完善，但是还有其它一些很流行的程序，比如 Gimp ，Audacity 和 Inkscape 仍然不能使用高分辨率屏幕。我为 Gimp 软件安装了一个很强大的定制化主题，但是所有的图标都变得大不一样，尽管这些图标已经显示得够大了，但是也很难识别出来。

Linux 系统占有了 1.5% 的市场份额，遗憾的是这些问题并没有得到更多的重视。虽然很多应用软件逐步使用 GTK 3 来开发它们的图形界面，但是比如说 Audacity 这款音频处理软件好像是已经[终止](http://wiki.audacityteam.org/wiki/Linux_Issues#Hi-DPI)开发了。在我的第一篇评论中我发现，那些提供长期支持的应用程序仍然有很多地方需要改进，但是 3 年多过去了，即使是那些很出名的软件也没做到位。

### SSD 固态硬盘

由于我平时对系统做了各种各样的优化，尤其是对火狐浏览器做的优化，因此我的老款电脑的硬盘仍然可以正常工作。还记得我的 **/tmp** 目录被我自动设置为 RAM 设备，因此，我经常把文件默认下载到那里。有时候我要把一个 500 MB 的视频剪辑成 20 MB 的小视频，或者是转换成另外的格式，因此我在 /tmp 目录下做这些工作节约了大量的写入操作。这样做需要更多的工作量，也可能没必要，但是在 RAM 存储中运行速度更快。

在这三年里，我几乎对每个硬盘的存储单元做了 25 次写入，这意味着这块硬盘可以使用 350 年左右。绝大部分的写操作都用于 Arch Linux 系统的更新。我每个月都会构建新的 LibreOffice 软件，每周都会更新“稳定”版系统内核。实时把系统升级到最新棒真的让人很爽，但是与 Debian 的稳定版系统相比起来，这将会进行 100 多次写入操作。然而，能够让每一个系统组件都升级到最新版，这也是值得的。

新的三星硬盘诊断工具无法检测出每个硬盘存储单元的写次数。事实上，我也不能确定这个硬盘的存储单元类型是什么以及在处理任务的过程中写了多少次。我相信从“已用百分比“这个数据可以看到硬盘的使用时长，但是也许这只跟空闲的存储单元有关。我没有找到任何相关文档，因此我只能猜测到大致跟下面的数据差不多了：

| **型号：** | **SAMSUNG MZVLV256HCHP-000L2** |
| --- | --- |
| **固件版本(0x06)：** | **3 Slots** |
| **可用空间：** | **100%** |
| **可用的空闲阈值：** | **10%** |
| **已用百分比：** | **0%** |
| **读取的数据单元：** | **198,997 [101 GB]** |
| **写入的数据单元：** | **305,302 [156 GB]** |
| **主机读命令：** | **3,480,816** |
| **主机写命令：** | **10,176,457** |
| **错误日志条目：** | **5** |

### 损坏的左 Ctrl 键

在使用了几个小时之后，我发现一个问题，如果我按键盘左上角时，左 Ctrl 键会弹起来：

![](/data/attachment/album/201704/06/093325mh1wcucum4w1l5hc.png)

*损坏的 Yoga 900 按键：注意跟右侧对比下，你会发现左侧少了个小圆柱体形状的东西：*

Yoga 900 键盘布局跟 Yoga 2 Pro 版一致，但是内部结构不同。 Yoga 2 Pro 版的键盘不能单独移除和替换按键，而且你也没有办法撬起任何按键，除非那个按键被你彻底搞坏了。 Yoga 900 的按键跟老款的 Thinpad 笔记本一样的：每个按键都是分开的，你可以单独取下来进行更换。

然而，还有一个小毛病，每个键轴有 4 个小圆筒状的凹槽部件，如果不小心丢失了一个，那么该按键就只有三个接触点了，如果你不敲击到按键的中间位置，那么这个按键的键帽将会逐渐脱落下来。

我把这个问题反馈给联想。尽管这些按键还能使用，也可以替换成新的，但是他们只替换整个键盘，不会寄送任何零散部件。他们建议我把笔记本电脑寄给联想售后中心进行维修，或者是送到极客小组服务中心。我知道寄到联想售后的话至少要 2 周的时间，因此我咨询了当地的商店，看他们是否有 Yoga 笔记本的键盘配件。他们告诉我，他们不维修电脑，只负责把它寄到亚特兰大。那里曾经有很多地方可以维修 IBM 的各种笔记本电脑，而且也有各种配件，但是现在已经是不可能的了。

我用了好几个小时后才注意到了这个问题，我确信那是生产笔记本电脑过程中的疏忽导致的。这是一块非常小的塑料块，在装配的过程中就早已变形或损坏了。

尽管这个电脑还在保修期，可以免费进行维修，我可不想为这些小事情耽搁太多时间，因此我在网上找到一个叫做 laptopkey.com 的网站，然后订购了一个换键和支架。真是太诡异了，竟然有三种类型的支架！我花了好一会才搞明白我的电脑适合哪一种类型，因为这三种类型太难区分了：

![](/data/attachment/album/201704/06/093326trklkaka26izlp4l.jpg)

因此我预定了这个配件，但是还得花费至少一个星期的时间才到收到。这真是太让我抓狂了，因为我每次使用复制粘贴、视频跳跃或者是在编辑器里按单词移动及其它相关操作时，只能使用右 Ctrl 键。我觉得我可以把右边的 Ctrl 键更换到左边来，但是我从未这么弄过。

因此，我尝试跟着网上找到的视频步骤把这个键弄下来：我先用指甲扣起左上角到一定高度。然后用同样的方式操作右上角，但是另外一个小塑料片被折断了，因此我弄坏了两个键轴。如果不损坏这些非常细小的塑料夹片，根本不可能把按键撬下来。这种类型的键盘只不过是理论上可以进行更换吧。

因此，我决定采用笨办法，使用强力胶。我情愿让这个该死的按键就这样固定死了，我暂时没有一个紧急的方法来替换它们。这真是太折腾了，因为我只需要大概直径 1mm 的胶水：如果弄太多的胶水可能会让情况变得更糟糕。

我维修小型遥控飞机的经验在维修电脑上也非常有帮助，我修好它了，而且左边的 Ctrl 键也固定好了。右边的那个 Ctrl 键还处于分离状态，但是我几乎用不到。我的心情又好起来了，真是柳暗花明又一村啊，但是懂得如何维修电脑也是个非常重要的技能。

### Antergos 与 Arch Linux 系统对比

在我使用了 3 年多的 Arch Linux 系统之后，我再也没兴趣去尝试其它操作系统了。虽然英特尔公司更新驱动程序的步伐有些落后，但是无论怎样，在日常工作中使用 Arch Linux 系统还是挺让人愉快的，而且每一个星期都有所进步。实时更新任何程序真的让人很爽。我经常使用比 Ubuntu 系统发布时间还要新的软件包。虽然 Ubuntu 用户可以在自定义的 PPA 中找到更新的软件包，但是这种软件包都没有经过任何测试或修复，因此用户在使用过程中会遇到各种各样的问题。

也有用户抱怨 Ubuntu 系统升级时会导致机器自动重启或者强制用户重新安装软件，因此，即使安装的过程很快，之后却需要很长的时间来维护。我每次听到有人抱怨 Arch 系统的安装过程时，最终的原因总是归结为他们自己操作不当或是类似 btrfs 文件系统损坏的问题。

我曾经想尝试安装 [Antergos 系统](https://antergos.com/)，那是一款基于 Arch Linux 并搭载了桌面环境的 Linux 发行版。然而，安装过程中的设置界面在显示器上看不清楚，而且最小化安装后也识别不到触摸板，那是由于我仅有一个有可用空间的老式 1 GB U 盘了。因此，我决定还是重新安装原来的 Arch Linux 系统。还好 Yoga 笔记本仍然支持传统的 BIOS 启动方式，这样我就不用再去折腾 [UEFI](https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface) 了。

很遗憾我没能试用 Antergos 系统，因为我觉得对于那些技术水平一般的用户或是想快速入门 Arch Linux 系统的用户来说， Antergos 算是一个非常强大的 Linux 发行版了。 Arch 在维基上有丰富的文档新资料教你如何完美地使用这个 Linux 系统。我喜欢优化，比如每周定时对固态硬盘做优化、[用户配置文件-同步-进程](https://wiki.archlinux.org/index.php/Profile-sync-daemon)脚本、对安卓系统的支持以及在视频播放中使用硬件加速等等。在 Linux 系统中有很多大家都需要去折腾的功能特性，只需要输入几行命令就可以搞定了。

Manjaro 也是一款非常流行的基于 Arch Linux 并搭载了桌面环境的 Linux 发行版，但是用了 3 年多的 Arch Linux 系统后，我更信任 Arch 的封包人会解决组件之间的问题。我在 Reddit 网站看到一些评论，有用户反映说 Manjaro 系统升级后就崩溃了。

我对 Arch Linux 系统唯一不爽的一点就是它丑陋而看不懂的引导加载界面。还好我只需要使用老电脑中的 **grub.cfg** 配置文件来替换掉就可以了。

### 安装 Arch Linux 系统

起初我只想简单地把硬盘从老的笔记本电脑移植到新的笔记本电脑上，这样我就不用安装任何东西了，但是拆开电脑后，我发现 M.2 接口的固态硬盘形状很特殊。本来我也可以使用一个低级块复制方法来完成移植，但是这一次是一个很好的回顾安装过程的机会，所以我决定从头再来一遍。 3 年多的时间里，我安装了很多没用的应用程序，即使有些被我卸载了，系统中还存在很多的遗留文件。

由于 Arch 900 笔记本电脑已经发布出来一段时间了，其硬件也不是最新的，所以安装 Arch Linux 系统的过程进行得很顺利。我仍然需要使用 **rfkill 工具来开启无线上网** 功能，除此之外，系统都正常运行了。显然， Linux 系统下还不能正确读取该型号的 rfkill 信息。幸运的是在启动 rfkill 工具时， **systemd** 会自动恢复 rfkill 的数据。

### 内核故障列表

有一件事让我非常惊讶， Linux 操作系统的缺陷列表太混乱了。我知道有很多的用户参与其中，其变化频率也很高，但是，最糟糕的事情却是系统缺陷报告依然如故。我搞不懂为什么有些系统缺陷已经存在好多年了，但是却丝毫没有修复的迹象。

我在上次的评论中打过一个很好的比方。假设航空公司花了一两年的时间才把你丢失的行李找回来了。还你会信任那家公司吗？实际上，如果你还有几千个已知的系统缺陷和上百次系统性能回退，那么你发布新的发行版有什么意义呢？如果波音公司的每一架飞机都有 1% 的坠机概率，那他们会这么多年都置之不理吗？

也许 Linux 系统基金会应该雇佣一些专职的工程师来修复那些看似被遗忘的系统缺陷问题。有很多人从事 Linux 系统工作，大家都清楚该系统有很多历史缺陷未修复——通常情况下，这些问题都是由普通用户自己处理的。我觉得目前的 Linux 系统就不要发布任何更新了，先花几个月的时间去修复那些系统缺陷，直到缺陷数量小于 50 个时，再发布新版本，这样的系统内核会更稳定。现在还有 [4672 个](http://bit.ly/LinuxBugs)系统缺陷问题未解决，这才是一个非常好的改变发行版主版本号的理由。

有些东西跟每周发布一个新的稳定版本是相悖的，但是这种方式还持续了这么多年了，而且他们每次都发布一些重要补丁，因此他们也算是做了一些非常有意义的工作。内核的开发速度很快，也变得越来越好，因此早已超出我吐槽的范围了，但是我还是觉得他们应该尝试换个思路。

至少，系统缺陷问题应该在规定的时间内处理。如果超出指定时间，这个系统缺陷应该提交给到维护者并逐渐发送给 Linus 本人。如果某个领域内存在很多的历史缺陷也没人去修复，那么 Linus 应该公开并严厉批评相关组织机构。他们更应该像波音公司那样去思考解决问题。

### 联想公司

很多 Linux 用户都痛击联想公司对定制化的笔记本缺少支持，好在他们创造了性价比较高的硬件。正如我多年前写的一样，很明显，联想公司在发布 Yoga 2 之前就没人安装过 Linux 系统来进行测试， Yoga 900 笔记本也是如此，因为这是根本不可能的事情。

我觉得他们公司的每个员工都应该安装双系统。这在设置上并不难，用户也更希望他们这样做。联想有 60000 多员工。至少他们应该在公司内部成立一个 Yoga 团队，然后招一些人来着手处理 **Linux 系统** 问题。Windows 系统在很多方面比 Linux 系统更难用。Windows 系统虽然能够运行更多的应用程序，但是我觉得也许他们一半的用户还是更乐于使用合理配置的 Linux 系统吧。

尽管现在联想对 Linux 系统很不屑，他们制造的麻烦比软件方面还多。在很多型号的笔记本电脑中， RAM 芯片被焊接固定了。他们只允许白名单设备和预授权的卡可以安装到联想笔记本电脑中。 Yoga 笔记本也没有独立显卡，而且联想公司本来也不支持更新主板上的卡。我想有人会把这些矛头指向联想公司的 CEO 。

### 总结

Yoga 900 笔记本电脑的售价确实让人激动不已，而且相对于前一款 Yoga 2 来说，其改进方面也是有目共睹的。相近配置的苹果 Macbook Pro 笔记本电脑价格为 1500 美元，但是像素却比 Yoga 900 少了 40% 。

Windows 系统从 Linux 系统中汲取了很多特性，但是 Windows 系统一直没有一个包管理器来对那些非常有趣的且免费的预编译软件组件提供本地支持。因为 ffmpeg 工具使用很多的[依赖包](https://ffmpeg.zeranoe.com/builds/)，所以在 Windows 系统中安装 \**ffmpeg \** 工具就是一件很头疼的事，

微软建立了 Windows 应用商店，这有点类似 Linux 系统中的软件仓库，但是它不会处理软件包之间的依赖性，而且也不允许用户设置个人软件仓库。微软还开发了一个新的包管理器，叫做 [NuGet](https://www.nuget.org/)，但是它主要用于 .Net 语言开发的软件。也包括 ffmpeg 工具的安装包，但是没有与该代码相关的任何依赖包，因此即使安装完成后也没啥用。

去年 3 月份，[微软公司宣布](https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/) Windows 系统支持运行 Ubuntu 的命令行及应用程序，这的确是一个革命性的转折点。（[他们本应该先支持 Debian 系统](http://keithcu.com/wordpress/?page_id=558)。)甚至还有[热议](https://github.com/Microsoft/BashOnWindows/issues/992)声称 Windows 系统将会支持更多的 Linux 发行版，这真是太让人激动了。

至少对于我来说，我不需要使用任何 Windows 的应用程序，也不需要浪费额外的时间去维护了。在 Windows 系统中修复问题时，你可以到很多不同的地方查询解决问题的方法。 Linux 系统有很多的地方要进行配置，但是总的来说，这已经很简单了。

我有个朋友为了更新驱动程序，需要在 Windows 下安装第三方软件，因为更新这种操作需要从微软网站以及其它更多的网站来抓取代码。 Windows 系统已经比前几年做得更好了，有更多的游戏和桌面应用程序，但是它仍然是一个封闭式老系统。

我发现 Gnome 经典桌面给人一种简洁性的体验。我希望它不是使用很繁杂的[流行 Javascript 脚本](http://notes.ericjiang.com/posts/751)语言编写的，他们还要重新建立一个关于定制化主题和颜色主题的社区。 Gnome 2 和 Windows 10 系统中的有些非常有用的功能也消失了，而且也没有老版本的稳定。 2011 年发布的 Gnome 3.0 完全就是走回头路，但是 6 年后的 Gnome 3.22 终于再续辉煌。

Gnome 经典桌面环境是最优秀的图形化界面之一，[很多优秀的特性](https://wiki.archlinux.org/index.php/Desktop_environment)都变得越来越好了。已安装完成 Arch Linux 系统的 Yoga 900 笔记本电脑现在都运行正常了，我期待着 Linux 系统对 HiDPI 模式和其它方面的改进！我迫不及待地想深入学习 LibreOffice 办公软件里的语法检查特性。

---

via: <http://keithcu.com/wordpress/?p=3739>

作者：[keithccurtis](http://twitter.com/keithccurtis) 译者：[rusking](https://github.com/rusking) 校对：[wxy](https://github.com/wxy)

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


如何挑选你的第一门编程语言

Summary: 关键是你打算做什么。为什么你要学习编程？你的回答很大程度上影响你的决定。

不提java吗

看完简例,我居然明白了参数的工作逻辑,以前只知道区别,现在理解了逻辑,果然是灵感一瞬间啊

神奇的一点通 ~~

由俭入奢易，由奢入俭难。

Node.js做后台性能还是太差了

来自江苏南京的 Internet Explorer 11.0|Windows 7 用户

题目与内容差别太大。<br />
估计作者是搞网页开发的，介绍了python和java script。而其它方面的比如数据分析R，文本处理（正则式表达）perl，科学计算Fortran，matlab，一些面向对象开发的语言等等都没有介绍。试问，如何让读者通过阅读来了解选择语言？

我的启蒙语言是C，，现在高二了。。还在啃c++

我觉得，对于没学过微机原理的人而言，第一语言应该是C，对于学过的，第一语言应该是ASM好吧

对于没有至少学过C的人而言，想要理解计算机内部的工作方式，太难了。

第二语言，现在说来绝对是python了

关键是你打算做什么。为什么你要学习编程？你的回答很大程度上影响你的决定。

想学编程的原因有很多，你也许是想要做一个程序，又或者你只是想投身于这个行业，所以，在选择你的第一门编程语言之前，问问你自己：你想要在哪里运行程序？你想要程序来完成什么工作？

![](/data/attachment/album/201704/06/162637h3c1l3c1zqx17h3z.jpg)

你学习编程的原因将会决定你的第一门编程语言的选择。

在这篇文章里，我会交替使用<ruby> “编码” <rp>  （ </rp> <rt>  code </rt> <rp>  ） </rp></ruby>、<ruby> “编程” <rp>  （ </rp> <rt>  program </rt> <rp>  ） </rp></ruby>、<ruby> “开发” <rp>  （ </rp> <rt>  develop </rt> <rp>  ） </rp></ruby> 等动词，<ruby> “代码” <rp>  （ </rp> <rt>  code </rt> <rp>  ） </rp></ruby>、<ruby> “程序” <rp>  （ </rp> <rt>  program </rt> <rp>  ） </rp></ruby>、<ruby> “应用程序” <rp>  （ </rp> <rt>  application </rt> <rp>  ） </rp></ruby>、<ruby> “应用” <rp>  （ </rp> <rt>  app </rt> <rp>  ） </rp></ruby>等名词。这是考虑到了你可能听过的语言用法。

### 了解你的设备

在你编程语言的选择上，你的程序将运行在何处是个决定性因素。

桌面应用是运行在台式机或者笔记本电脑上的传统软件程序。这样你编写的代码在同一时间内只能在一台电脑上运行。移动应用，也就是我们所熟知的“app”，运行在使用 IOS 、Android 或者其他操作系统的移动设备上。网页应用是功能像应用的网页。

按互联网的 客户-服务器（C/S）架构分，网页开发者经常被分为两类：

* 前端开发，就是编写运行在浏览器里面的代码。这是个面对用户的部分，或者说是程序的前脸。有时候被称为“客户端编程”，因为浏览器是网站的客户-服务器架构的客户端部分。浏览器会运行在你本地的电脑或者设备上。
* 后台开发，也就是大家所熟知的“服务器端开发”，编写的代码运行在你无法实际接触的服务器上。

### 创造什么

编程是一门广泛的学科，能应用在不同的领域。常见的应用有：

* 数据科学
* 网页开发
* 游戏开发，以及
* 不同类型的工作自动化

现在我们已经讨论了为什么你要编程，你要程序运行在哪里，让我们看一下两门对于新手来说不错的编程语言吧。

### Python

[Python](https://www.python.org/about/) 是对于第一次编程的人来说是最为流行的编程语言之一，而且这不是巧合。Python 是一门通用的编程语言。这意味着它能应用在广泛的编程任务上。几乎**没有**你不能用 Python 完成的工作。这一点使得很多新手能在实际中应用这门编程语言。另外， Python 有两个重要的设计特征，使得其对于新手更友好：清晰、类似于英语的[语法](https://en.wikipedia.org/wiki/Python_syntax_and_semantics)，和强调代码的[可读性](https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Indentation)。

从本质上讲，一门编程语言的语法就是你所输入的能让这编程语言执行的内容。这包括单词，特殊字符（例如 `;`、`$`、`%` 或者 `{}`），空格或者以上任意的组合。Python 尽可能地使用英语，不像其他编程语言那样经常使用标点符号或者特殊的字符。所以，Python 阅读起来更自然、更像是人类语言。这一点帮助新的编程人员可以聚焦于解决问题，而能花费更少的时间纠结于语言自身的特性上。

清晰语法的同时注重于可读性。在编写代码的时候，你所创造的代码的逻辑“块”，就是一些为了相关联目标而共同工作的代码。在许多编程语言里，这些块用特殊字符所标记（或限定）。它们或许被 `{}` 或者其他字符所包住。块分割字符和你写代码的能力，这两者不管怎么结合起来都会降低可读性。让我们来看一个例子。

这有个被称为 `fun` 的简短函数。它要求输入一个数字，`x` 就是它的输入。如果 `x` 等于 `0`，它将会运行另一个被称为`no_fun` 的函数（这函数做了些很无趣的事情）。新函数不需要输入。反之，简短函数将会运行一个使用输入 `x` 的名为 `big_fun` 的函数。

这个函数用 [C 语言](https://en.wikipedia.org/wiki/C_(programming_language) 将会是这样写的：

```
void fun(int x)
{
    if (x == 0) {
        no_fun();
    } else {
        big_fun(x);
    }
}

```

或者，像是这样：

```
void fun(int x) { if (x == 0) {no_fun(); } else {big_fun(x); }}

```

功能上两者等价，而且都能运行。`{}` 和 `;` 告诉我们哪里是代码块的不同部分。然而，第一个对于人们来说*明显*更容易阅读。相比之下完成相同功能的 Python 是这样的：

```
def fun(x):
    if x == 0:
        no_fun()
    else:
        big_fun(x)

```

在这里，只有一个选择。如果代码不是这样排列的，它将无法工作。如果你编写了可以工作的代码，你就有了可阅读的代码。同样也留意一下两者在语法上的差异。不同的是 `def` ，在 Python 代码中这个词是英语单词，大家都很熟悉这单词的含义（LCTT 译注：def 是 definition 的缩写，定义的意思）。在 C 语言的例子中 `void` 和 `int` 就没有那么直观。

Python 也有个优秀的生态系统。这有两层意思，第一，你有一个使用该语言的庞大、活跃的社区，当你需要帮助指导的时候，你能向他们求助。第二，它有大量早已存在的库，库是指完成特定功能的代码集合。从高级数学运算、图形到计算机视觉，甚至是你能想象到的任何事情。

Python 作为你第一门编程语言有两个缺点。第一是它有时候安装起来很复杂，特别是在运行着 Windows 的电脑上。（如果你有一台 Mac 或者 Linux 的电脑，Python 默认已经安装好了。）虽然这问题不是不能克服，而且情况总在改善，但是这对于一些人来说还是个阻碍。第二个缺点是，对于那些明确想要建设网站的人来讲，虽然有很多用 Python 写的项目（例如 [Django](https://www.djangoproject.com/) 和[Flask](http://flask.pocoo.org/) ），但是编写运行在浏览器上的 Python 代码却没有什么好的选择。它主要是后台或者服务器端语言。

### JavaScript

如果你知道你学习编程的主要原因是建设网站的话，[JavaScript](https://en.wikipedia.org/wiki/JavaScript) 或许是你的最佳选择。 JavaScript 是关于网页的编程语言。除了是网页的默认编程语言之外， JavaScript 作为初学的语言有几点优点。

第一，无须安装任何东西。你可以打开文本编辑器（例如 Windows 上的记事本，但不是一个文字处理软件，例如 Microsoft Word）然后开始输入 JavaScript 。代码将在你的浏览器中运行。最顶尖的浏览器内置了JavaScript 引擎，所以你的代码将可以运行在几乎所有的电脑和很多的移动设备上。事实上，能马上在浏览器中运行代码为编程人员提供了一个非常*快*的反馈，这对于新手来说是很好的。你能尝试一些事情然后很快地看到结果。

开始 JavaScript 是作为前端语言的，不过一个名为 [Node.js](https://nodejs.org/en/) 的环境能让你编写运行在浏览器或者服务器上的代码。现在 JavaScript 能当作前端或者后台语言使用。这增加了它的使用人数。JavaScript 也有大量能提供除核心功能外的额外功能的包，这使得它能当作一门通用语言来使用。JavaScript 不只是网页开发语言，就像 Python 那样，它也有个充满生气的、活跃的生态系统。

尽管有这些优点，但是 JavaScript 对于新手来说并非十全十美。[JavaScript 的语法](https://en.wikipedia.org/wiki/JavaScript_syntax#Basics)并不像 Python 那样清晰，也不怎么像英语。更像是之前例子里提到的 C 语言。它并不是把可读性当作主要的设计特性。

### 做出选择

选 Python 或者 JavaScript 作为入门语言都没有问题。关键是你打算做什么。为什么你要学习编程？你的回答很大程度上影响你的决定。如果你是想为开源做贡献，你将会找到*大量*用这两门语言编写的项目。另外，许多主要不是用 JavaScript 写的项目仍使用 JavaScript 用作前端组件。当你做决定时，别忘了你本地的社区。你有在使用其中一门语言的朋友或者同事吗？对于一个新手来说，有实时的帮助是非常重要的。

祝好运，开心编程。

---

作者简介：

Kojo Idrissa - 我是一个新晋的软件开发者（1 年），从会计和大学教学转型而来。自从有开源软件以来，我就是它的一个粉丝。但是在我之前的事业中并不需要做很多的编程工作。技术上，我专注于 Python ，自动化测试和学习 Django 。我希望我能尽快地学更多的 JavaScript 。话题上，我专注于帮助刚开始学习编程或想参与为开源项目做贡献的人们。我也关注在技术领域的包容文化。

---

via: <https://opensource.com/article/17/1/choosing-your-first-programming-language>

作者：[Kojo Idrissa](https://opensource.com/users/transitionkojo) 译者：[ypingcn](https://github.com/ypingcn) 校对：[bestony](https://github.com/bestony)

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


如何在 Linux 中列出通过 RPM 或者 DEB 包安装的文件

Summary: 这篇文章可以帮你轻松地找到重要的软件包文件，如配置文件、帮助文档等。

这篇文章可以帮你轻松地找到重要的软件包文件，如配置文件、帮助文档等。

你是否想要了解安装包中各个文件在 Linux 系统中安装（位于）的位置？我们将在本文介绍如何列出文件的来源，或存在于某个特定包或者一组软件包中的文件。

![](/data/attachment/album/201704/06/173309sivrffaee4fzeftx.jpg)

这篇文章可以帮你轻松地找到重要的软件包文件，如配置文件、帮助文档等。我们来看看找出文件在哪个包中或者从哪个包中安装的几个方法：

### 如何列出 Linux 中全部已安装软件包的文件

你可以使用 [repoquery 命令](http://www.tecmint.com/list-installed-packages-in-rhel-centos-fedora/)，它是 [yum-utils](http://www.tecmint.com/linux-yum-package-management-with-yum-utils/) 的一部分，用来列出给定的软件包在 CentOS/RHEL 系统上安装的文件。

要安装并使用 yum-utils，运行下面的命令：

```
# yum update
# yum install yum-utils

```

现在你可以列出一个已安装包的文件了，比如 httpd 服务器 （注意包名是大小写敏感的）。`--installed` 表示已经安装的包，`-l` 列出所有的文件：

```
# repoquery --installed -l httpd
# dnf repoquery --installed -l httpd  [On Fedora 22+ versions]

```

![Repoquery List Installed Files of Httpd](/data/attachment/album/201704/06/173428atfgtgtlmgggtmcs.png)

*repoquery 列出 httpd 安装的文件*

重要：在 Fedora 22 以上的版本中，`repoquery` 命令在基于 RPM 的发行版中已经与 [dnf 包管理器](http://www.tecmint.com/dnf-commands-for-fedora-rpm-package-management/)整合，可以用上面的方法列出安装的文件。

除此之外，你也可以使用下面的 [rpm 命令](http://www.tecmint.com/20-practical-examples-of-rpm-commands-in-linux/)列出 .rpm 包中或已经安装的 .rpm 包的文件，下面的 `-q` 和 `-l` 表示列出其后跟着的包中的文件：

```
# rpm -ql httpd

```

![RPM Query Package for Installed Files](/data/attachment/album/201704/06/173428x32dyrr2d3tdcd22.png)

*rpm 查询已安装程序的安装包*

另外一个有用的建议是使用 `-p` 在安装之前列出 `.rpm` 中的文件。

```
# rpm -qlp telnet-server-1.2-137.1.i586.rpm

```

在 Debian/Ubuntu 发行版中，你可以使用 [dpkg 命令](http://www.tecmint.com/dpkg-command-examples/)带上 `-L` 标志在 Debian 系统或其衍生版本中列出给定 .deb 包的安装的文件。

在这个例子中，我们会列出 apache2 Web 服务器安装的文件：

```
$ dpkg -L apache2

```

![dpkg List Installed Packages](/data/attachment/album/201704/06/173428kbje6ku412kuq522.png)

*dpkg 列出安装的包*

不要忘记查看其它有关在 Linux 中软件包管理的文章。

1. [20 个有用的 yum 包管理命令](http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/)
2. [20 个有用的 rpm 包管理命令](http://www.tecmint.com/20-practical-examples-of-rpm-commands-in-linux/)
3. [15 个 Ubuntu 中有用的 apt 包管理命令](http://www.tecmint.com/apt-advanced-package-command-examples-in-ubuntu/)
4. [15 个 Ubuntu 中有用的 dpkg命令](http://www.tecmint.com/dpkg-command-examples/)
5. [5 个最佳的对 Linux 新手的包管理器](http://www.tecmint.com/linux-package-managers/)

就是这样了！在本文中，我们向你展示了如何在 Linux 中列出/找到给定的软件包或软件包组安装的所有文件。在下面的评论栏中分享你的想法。

---

作者简介：

Aaron Kili 是 Linux 和 F.O.S.S 的爱好者，目前任 TecMint 的作者，志向是一名 Linux 系统管理员、web 开发者。他喜欢用电脑工作，并热衷于分享知识。

---

via: <http://www.tecmint.com/list-files-installed-from-rpm-deb-package-in-linux/>

作者：[Aaron Kili](http://www.tecmint.com/author/aaronkili/) 译者：[geekpi](https://github.com/geekpi) 校对：[ezio](https://github.com/oska874)

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


连接到 Linux 服务器时首先要运行的 5 个命令

Summary: 这些命令对于有经验的软件工程师来说都非常熟悉，但我意识到对于一个刚开始接触 Linux 系统的初学者来说却并非如此。这也是我为什么决定分享当我连上 Linux 服务器首先要运行的前 5 个命令的原因。

netstat 属于源自 BSD 的 net-tools 包的命令，该包还包括ifconfig， 现在已经是默认不安装了。这两者替代命令是来自于 iproute2 包的 ss 和 ip。

![当我连接到 Linux 服务器时运行的前 5 个命令](/data/attachment/album/201704/07/101733rn6fmut6yu5mympp.jpg "当我连接到 Linux 服务器时运行的前 5 个命令")

作为一个系统管理员/SRE 工作 5 年后，我知道当我连接到一台 Linux 服务器时我首先应该做什么。这里有一系列关于服务器你必须了解的信息，以便你可以（在大部分时间里）更好的调试该服务器。

### 连上 Linux 服务器的第一分钟

这些命令对于有经验的软件工程师来说都非常熟悉，但我意识到对于一个刚开始接触 Linux 系统的初学者来说，例如我在 [Holberton 学校](https://www.holbertonschool.com/)任教的学生，却并非如此。这也是我为什么决定分享当我连上 Linux 服务器首先要运行的前 5 个命令的原因。

```
w
history
top
df
netstat

```

这 5 个命令在任何一个 Linux 发行版中都有，因此不需要额外的安装步骤你就可以直接使用它们。

### w:

```
[ubuntu@ip-172-31-48-251 ~]$ w
23:40:25 up 273 days, 20:52,  2 users,  load average: 0.33, 0.14, 0.12
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu pts/0    104-7-14-91.ligh 23:39    0.00s  0.02s  0.00s w
root pts/1    104-7-14-91.ligh 23:40    5.00s  0.01s  0.03s sshd: root [priv]
[ubuntu@ip-172-31-48-251 ~]$

```

这里列出了很多有用的信息。首先，你可以看到服务器运行时间 [uptime](http://whatis.techtarget.com/definition/uptime-and-downtime)，也就是服务器持续运行的时间。然后你可以看到有哪些用户连接到了服务器，当你要确认你没有影响你同事工作的时候这非常有用。最后 [load average](http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages) 能很好的向你展示服务器的健康状态。

### history

```
[ubuntu@ip-172-31-48-251 ~]$ history
   1  cd /var/app/current/log/
   2  ls -al
   3  tail -n 3000 production.log
   4  service apache2 status
   5  cat ../../app/services/discourse_service.rb

```

`history` 能告诉你当前连接的用户之前运行了什么命令。你可以看到很多关于这台机器之前在执行什么类型的任务、可能出现了什么错误、可以从哪里开始调试工作等信息。

### top

```
top - 23:47:54 up 273 days, 21:00,  2 users,  load average: 0.02, 0.07, 0.10
Tasks:  79 total,   2 running,  77 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.3%st
Mem:   3842624k total,  3128036k used,   714588k free,   148860k buffers
Swap:        0k total,        0k used,        0k free,  1052320k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
21095 root      20   0  513m  21m 4980 S  1.0  0.6   1237:05 python
1380 healthd   20   0  669m  36m 5712 S  0.3  1.0 265:43.82 ruby
19703 dd-agent  20   0  142m  25m 4912 S  0.3  0.7  11:32.32 python
   1 root      20   0 19596 1628 1284 S  0.0  0.0   0:10.64 init
   2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
   3 root      20   0     0    0    0 S  0.0  0.0  27:31.42 ksoftirqd/0
   4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0
   5 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0H
   7 root      20   0     0    0    0 S  0.0  0.0  42:51.60 rcu_sched
   8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcu_bh

```

你想知道的下一个信息：服务器当前在执行什么工作。使用 `top` 命令你可以看到所有正在执行的进程，然后可以按照 CPU、内存使用进行排序，并找到占用资源的进程。

### df

```
[ubuntu@ip-172-31-48-251 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  4.5G  3.3G  58% /
devtmpfs        1.9G   12K  1.9G   1% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm

```

你服务器正常工作需要的下一个重要资源就是磁盘空间。磁盘空间消耗完是非常典型的问题。

### netstat

```
[ubuntu@ip-172-31-48-251 ec2-user]# netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 *:http                      *:*                         LISTEN      1637/nginx
tcp        0      0 *:ssh                       *:*                         LISTEN      1209/sshd
tcp        0      0 localhost:smtp              *:*                         LISTEN      1241/sendmail
tcp        0      0 localhost:17123             *:*                         LISTEN      19703/python
tcp        0      0 localhost:22221             *:*                         LISTEN      1380/puma 2.11.1 (t
tcp        0      0 *:4242                      *:*                         LISTEN      18904/jsvc.exec
tcp        0      0 *:ssh                       *:*                         LISTEN      1209/sshd

```

计算机已成为我们世界的重要一部分，因为它们有通过网络进行相互交流的能力。知道你的服务器正在监听什么端口、IP地址是什么、以及哪些进程在使用它们，这对于你来说都非常重要。

显然这个列表会随着你的目的和你已有的信息而变化。例如，当你需要调试性能的时候，[Netflix 就有一个自定义的列表](http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html)。你有任何不在我 Top 5 中的有用命令吗？在评论部分和我们一起分享吧！

---

via: <https://www.linux.com/blog/first-5-commands-when-i-connect-linux-server>

作者：[SYLVAIN KALACHE](https://www.linux.com/users/sylvainkalache) 译者：[ictlyh](https://github.com/ictlyh) 校对：[wxy](https://github.com/wxy)

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


用 Winetricks 配置 WINE

Summary: 如果 winecfg （WINE 的配置工具）是一把螺丝刀，那么 winetricks 就是一个钻床。它们各有特长，但是 winetricks 真的是一个强大的多的工具。实际上，它甚至可以启动 winecfg。

污染环境！！！

？？不太懂？是这个软件不好用？

啥意思

我太喜欢这个网站了，好多技术干活文章，文案排版格式我也喜欢，评论交流也不需要注册，希望站长继续做下去，不要推行注册制，给站长加油打气，给大家带来更多好文，加油挺你！

### 简介

如果 `winecfg` （WINE 的配置工具）是一把螺丝刀，那么 `winetricks` 就是一个钻床。它们各有特长，但是 `winetricks` 真的是一个强大的多的工具。实际上，它甚至可以启动 `winecfg`。

![](/data/attachment/album/201704/07/103823l3xyzddr6z463y67.jpg)

`winecfg` 让你可以改变 WINE 本身的设置，而 `winetricks` 则可以让你改造实际的 Windows 层，它可以让你安装 Windows 重要的系统组件，比如 .dll　文件和系统字体，还可以允许你修改 Windows 注册表的信息。它还有任务管理器、卸载工具和文件浏览器。

尽管 `winetricks` 可以做以上这些工作，但是大部分时间我们用到的功能也就是管理 `dll` 文件和　Windows　组件。

### 安装

和 `winecfg` 不同，`winetricks` 不是集成在 WINE 中的。这样也没什么问题，由于它实际上只是个脚本文件，你可以在各种发行版上很轻松地下载和使用它。现在，许多发行版把 `winetricks` 打包。只要你喜欢，你也可以下载打包后的版本。不过，有些包可能会比较老旧，所以本指南将使用脚本，毕竟脚本通用且更新及时。默认情况下，它的图形界面有些丑，所以你要是想个性化界面，最好通过你的发行版的包管理器安装一个 `zenity`。

现在假定你想在你的 `/home` 目录下配置 `winetricks`。　`cd` 到此，然后 `wget` 这个脚本。

```
$ cd ~

$ wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks

```

然后，给这个脚本可执行权限。

```
$ chmod+x winetricks

```

`winetricks` 可以通过命令行运行，在行末指定要安装的东西。但是大部分情况下，你都不知道 .dll 文件或者是你想安装字体确切的名字，那么，这时候最好利用图形界面程序。启动这个程序和其他程序没什么不同，就是在末尾什么都别输入就行了。

```
$ ~/winetricks

```

![winetricks-main](/data/attachment/album/201704/07/103900h58jnnedd8la5akd.png)

当窗口第一次打开时候，将会给你一个有 <ruby> “查看帮助” <rt>  View help </rt></ruby> 和 <ruby> “安装应用” <rt>  Install an application </rt></ruby> 选项的菜单。一般情况下，我们选择 <ruby> “选择默认的 wineprefix” <rt>  Select the default wineprefix </rt></ruby>，这将是你主要使用的选项。其他的也能用，但是不推荐使用。接下来，单击 “OK”，你就会进入到 WINE prefix 的配置菜单，你可以在这完成所有你要使用 `winetricks` 完成的事情。

![The winetricks prefix menu](/data/attachment/album/201704/07/103902ek7ifcua6zva9xrr.png)

### 字体

![The winetricks font menu](/data/attachment/album/201704/07/103904kuk5u5r3os31ur1j.png)

字体一直很重要，一些应用程序没有字体就没法正常的加载。`winetricks` 可以轻松地安装许多常用 Windows 字体．在配置菜单中，选中 <ruby> “安装字体” <rt>  Install a font </rt></ruby>　单选按钮，然后点击 “OK”　即可。

然后你就会得到一列字体清单，它们都有着相对应的复选框。你很难确切知道你到底需要什么字体，所以一般按每个应用决定使用什么字体，我们可以先安装一款插件 `corefonts`，它包含了大多数 Windows 系统中应用程序所设定的字体。安装它也十分简单，所以可以试试。

要安装 `corefonts` ，请选择相应的复选框，然后点击 “OK”，你就会看到和在 Windows 下差不多的提示，字体就会被安装了。完成了这个插件的安装，你就会回到先前的菜单界面。接下来就是安装你需要的别的插件，步骤相同。

### .dll 文件和组件

![The winetricks dll menu](/data/attachment/album/201704/07/103906ypmekyp79l9ypkl6.png)

`winetricks` 安装 Windows 下的 .dll 文件和别的组件也十分简单。如果你需要安装的话，在菜单页选择 <ruby> “安装 Windows DLL 或组件” <rt>  Install a Windows DLL or component </rt></ruby>，然后点击 “OK”。

窗口就会进入到另一个菜单界面，其中包含可用的 dll 和其他 Windows 组件。在相应的复选框进行选择，点击 “OK”。脚本就会下载你选择的组件，接着通过 Windows 一般的安装进程进行安装。像 Windows 机器上安装那样跟着提示往下走。可能会有报错信息。很多时候，Windows　安装程序会报错，但是你接着会收到来自 `winetricks` 窗口的消息，说明它正在绕过此问题。这很正常。由于组件之间的相互依赖关系，你可能会也可能不会看到成功安装的信息。只要确保安装完成时候，菜单页中你的选项仍旧处于被选中状态就行了。

### 注册表

![WINE regedit](/data/attachment/album/201704/07/103908kp22w8ozwaozwi8p.png)

你不需要常常编辑注册表中 WINE 对应的值，但是对于有些程序确实需要。技术层面来讲，`winetricks` 不向用户提供注册表编辑器，但是要访问编辑器也很容易。在菜单页选中<ruby> “运行注册表编辑” <rt>  Run regedit </rt></ruby>，点击 “OK”，你就可以打开一个简单的注册表编辑器。事实上，写入注册表的值有点超出本篇引导文章的范围了，但是我还要多说一句，如果你已经知道你在干什么，增加一个注册表条目不是很难。注册表有点像电子表格，你可以将正确的值填入右面的格子中。这个说的有点过于简单，但是就是这样的。你可以在以下地址精准地找到你需要在 WINE Appdp 所要填入或编辑的东西。 [https://appdb.winehq.org。](https://appdb.winehq.org%E3%80%82)

### 结束语

很明显 `winetricks` 还有许多许多强大的功能，但是本篇指南的目的只是给你一点基础知识，以使用这个强大的工具，使你的程序通过 WINE 运行。WINE Appdb 对每个程序都有相应的设置，将来会越来越丰富。

---

via: <https://linuxconfig.org/configuring-wine-with-winetricks>

作者：Nick Congleton 译者：[Taylor1024](https://github.com/Taylor1024) 校对：[jasminepeng](https://github.com/jasminepeng)

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


JavaScript 即未来：介绍 14 个 JavaScript 的框架和库

node/vue

>
> JavaScript 即未来趋势所在。
>
>
>

Javascript 得到了众多的技术领导者的拥护和支持，其中一位就是 WordPress 的作者 Matt Mullenweg , 他表示 [WordPress 开发者](http://wesbos.com/learn-javascript/) 应该学习 JavaScript , 这也清晰地向 WordPress 社区传达了 JavaScript 在未来的重要性。 同时，这一观点也被普遍接受。向着更先进的技术靠拢与过渡也同时保证了 WordPress 在未来的挑战中不会落于人后。

JavaScript 同时也是众多站在开源立场的技术中的佼佼者。与现在所流行的观点相反，JavaScript 不是一个工程，而是一个由其核心团队共同制定和维护的开放标准。[ECMAScript](http://stackoverflow.com/questions/5520245/is-javascript-an-open-source-project) , 这是另一个和 JavaScript 相关的名字, 它虽然不是开源的，但它也有一个开放的标准。

![](/data/attachment/album/201704/07/210545tje316vixser13gi.jpg)

当你在浏览 GitHub 的时候你就可以发现 JavaScript 在当今有多么流行了。而且就[仓库的数量](https://github.com/blog/2047-language-trends-on-github) 而言，JavaScript 绝对位于所有的编程语言当中最顶尖的那一层次。 同时，在 Livecoding.tv 上你也能看出 JavaScript 有多么突出，这里的用户发布的关于 JavaScript 的视频的数量比其他的话题多得多。在写这篇文章的时候（2016 年底），Livecoding.tv 上已经有 [45,919 个 用户原创的 JavaScript 视频教程](https://www.livecoding.tv/learn/javascript/) 。

### 热门的开源 JavaScript 框架和库

回归到主题， 庞大的社区是 JavaScript 的一个得天独厚的优势，同时这也推动了 JavaScript 的蓬勃发展。这里有数以百千计的成熟的 JavaScript 框架和库供开发者使用，同时这些最优秀的框架和库都是开源的。对当前的 JavaScript 开发者来说，能够使用这些优秀的框架和库来进行快速开发已经是必须技能了。当今的市场需要快速开发，但是，重复造轮子是没有必要的。不论你是一个 JavaScript 新手还是一个资深的 JavaScript 开发者，使用框架和库都能极大提高你的工作效率。

好了，让我们开始吧！

#### 1. Angular.js

[Angular.js](https://opensource.com/article/16/11/www.angularjs.org) 是目前最热门的 JavaScript 框架之一。它用于开发者构建复杂的 web 应用。Angular.js 背后的思想是它的单页应用 model。同时它 也支持 MVC 架构。在 Angular.js 中 ，开发者可以在前端中使用 JavaScript 代码，并从字面上扩展 HTML 词汇。

Angular.js 自 2009 年出现以来已经有了很大的改进。Angular 1 当前的稳定版本是 1.5.8/1.2.30 。你也可以试一试 Angular 2 ，相对于 Angular 1 来说它有了重大的改进，但这个新版本仍未在全球范围内被普遍使用。

在 Angular.js 中，数据绑定是完成工作的一个重要概念。在用户与接口的交互中，当交互完成，view 就会自动更新，随即新值与 model 交互以确保一切都是同步的。底层的逻辑在 model 中执行完成后，DOM 也会随即更新。

#### 2. Backbone.js

复杂 web 应用并不适用于所有场景。一些较简单的 web 应用框架例如 [Backbone.js](https://opensource.com/article/16/11/www.backbone.js) 就非常适合学习 web app 开发。Backbone.js 是一个简单的框架，可以快速方便地构建简单的 web 应用。和 Angular.js 一样，Backbone.js 也支持 MVC 。Backbone.js 还有一些其它关键特性如路由，RESTful API 支持，适当的状态管理等等。你甚至还可以用 Backbone.js 来构建单页应用。

当前的稳定版本是 1.3.3，可以在 [GitHub](https://github.com/jashkenas/backbone/) 中找到。

#### 3. D3.js

[D3.js](https://opensource.com/article/16/11/www.d3js.org) 是一个优秀的 JavaScript 库，它允许开发者创建具有数据处理功能的富 web 页面。D3.js 使用 SVG、HTML 和 CSS 来实现这一切功能。使用 D3.js ，你可以更轻松地将数据绑定到 DOM 及启用数据驱动事件。使用 D3.js ，你还可以创建高质量的数据驱动的 web 页面来提供一个更易于理解的视觉效果来呈现数据。查看示例 ： [LCF 符号哈密顿图](http://christophermanning.org/projects/building-cubic-hamiltonian-graphs-from-lcf-notation) ，由 D3.js 强力驱动。

#### 4. React.js

[React.js](https://facebook.github.io/react/) 是一个使用起来很有趣的 JavaScript 框架。和其它的 JavaScript 框架不同，React.js 志在构建一个高可扩展的前端用户界面。React.js 出现于 2013 年，它采用了 BSD 开源协议。它因其能够开发复杂且漂亮的用户界面所带来的优势而迅速发展壮大。

React.js 背后的核心思想是虚拟 DOM 。虚拟 DOM 在客户端和服务端之间扮演着一个中间人的角色并带来了显著的性能提升。虚拟 DOM 的改变和服务器端 DOM 一样，只需要更新所需的元素，相对于传统的 UI 渲染来说极大提升了渲染速度。

你还可以使用 Recat 来实现 meterial 风格的设计，使你能够开发具有无与伦比的性能的 web 应用。

#### 5. jQuery

[jQuery](http://jquery.com/) 是一个非常流行的 JavaScript 库，它拥有众多特性例如事件处理、动画等。当你在做一个 web 项目的时候，你不会想要把时间浪费在为一些简单的功能写代码上。jQuery 为减少你的工作量提供了一些易于使用的 API 。这些 API 在所有的常见的浏览器中都能够使用。使用 jQuery, 你可以无缝地控制 DOM 以及 Ajax 这样在近几年来拥有大量需求的任务。使用 jQuery，开发者不必担心一些低级的交互，同时可以使他们的 web 应用的开发更加容易与迅速。

jQuery 同时便于分离 HTML 和 JavaScript 代码，使开发者能够编写简洁而跨浏览器兼容的代码。并且使用 jQuery 创建的 web 应用在将来也易于改善和扩展。

#### 6. Ember.js

[Ember.js](http://emberjs.com/) 是一个 Angular.js 和 React.js 的功能混合体。当你在浏览社区的时候你能明显地感受到 Ember.js 的热门程度。Ember.js 的新特性也不断地在添加。它在数据同步方面与 Angular.js 很像。 双向的数据交换可以确保应用的快速性和可扩展性。同时，它还能够帮助开发者创建一些前端元素。

和 React.js 的相似之处在于，Ember.js 提供了同样的服务器端虚拟 DOM 以确保高性能和高可扩展。同时， Ember.js 提倡简化代码，提供了丰富的 API。Ember.js 还有非常优秀的社区。

#### 7. Polymer.js

如果你曾想过创建你自己的 HTML5 元素，那么你可以使用 [Polymer.js](https://www.polymer-project.org/1.0/) 来做这些事。 Polymer 主要集中于通过给 web 开发者提供创建自己的标签的功能来提供扩展功能。例如，你可以创建一个和 HTML5 中的 <video> 类似的具有自己的功能的 <my\_video> 元素。

Polymer 在 2013 年被 Google 引入并以 [三句版 BSD](https://en.wikipedia.org/wiki/BSD_licenses#3-clause) 协议发布。

#### 8. Three.js

[Three.js](https://threejs.org/) 又是另一个 JavaScript 库，主要用于 3D 效果开发。如果你在做游戏开发的动画效果，那么你可以利用 Three.js 的优势。Three.js 在底层中使用 WebGL 使 Three.js 可以轻松地被用于在屏幕上渲染 3D 物体。举一个比较知名的使用 Three.js 的例子就是 HexGLA，这是一个未来派赛车游戏。

#### 9. PhantomJS

使用 JavaScript 工作就意味着和不同的浏览器打交道，同时，当提及浏览器的时候，就不得不讨论资源管理。在 [PhantomJS](https://phantomjs.org/) 中，由于有 Headless WebKit 的支持，所以你可以随时监测你的 web 应用。Headless WebKit 是 Chrome 和 Safari 使用的渲染引擎中的一部分。

这整个过程是自动化的，你所需要做的只是使用这个 API 来构建你的 web 应用。

#### 10. BabylonJS

[BabylonJS](http://www.babylonjs.com/) 与 Three.js 不相伯仲， 提供了创建平滑而强大的 3D web 应用的 JavaScript API。它是开源的，且基于 JavaScript 和 WebGL 。创建一个简单的 3D 物体，比如一个球体是非常简单的，你只需要写短短几行代码。通过这个库提供的 [文档](https://doc.babylonjs.com/)，你可以很好地掌握它的内容。 同时 BabylonJS 的主页上也提供了一些优秀的 demo 来当作参考。在其官网上你可以找到这些 Demo。

#### 11. Boba.js

Web 应用总是有一个共通的需求，那就是分析。如果你还在苦于将数据的分析与统计插入到 JavaScript 的 web 应用中，那么你可以试一下 [Boba.js](http://boba.space150.com/)。Boba.js 可以帮助你将分析的数据插入到你的 web 应用中并且支持旧的 ga.js 。你甚至可以把数据指标和 Boba.js 集成在一起，只需要依赖 jQuery 即可。

#### 12. Underscore.js

[Underscore.js](http://underscorejs.org/) 解决了 “当我面对一个空白 HTML 页面并希望即刻开始工作，我需要什么” 这个问题。当你刚开始一个项目，你可能会感到失落或者重复一系列你在之前项目中常做的步骤。 为了简化开启一个项目的过程和给你起个头，Underscore.js 这个 JavaScript 库给你提供了一系列的方法。例如，你可以使用你在之前项目中常用的 Backbone.js 中的 suspender 或者 jQuery 的一些方法。

一些实用的帮助例如 “filter” 和 “invoke the map” 可以给你起个好头，以助于你尽可能快的投入到工作中。 Underscore.js 同时还自带了一个套件来简化你的测试工作。

#### 13. Meteor.js

[Meteor.js](https://www.meteor.com/) 是一个快速构建 JavaScript 应用的框架。它是开源的且它能够用于构建桌面应用、移动应用和 web 应用。Meteor.js 是一个全栈的框架同时允许多平台的端到端开发。 你可以使用 Meteor.js 来实现前端和后端功能，同时它也能密切监视应用的性能。Meteor.js 的社区非常庞大，所以它会有不断的新特性更新或者是 bug 修复。Meteor.js 也是模块化的，同时它能配合一些其它的优秀的 API 使用。

#### 14. Knockout.js

[Knockout.js](http://knockoutjs.com/) 在这些库中可能是最被低估的一个。它是一个基于 MIT 开源协议的开源 JavaScript 框架。作者是 [Steve Sanderson](http://blog.stevensanderson.com/)。它基于 MVVM 模式。

#### 值得注意的是: Node.js

[Node.js](https://nodejs.org/en/) 是一个强有力的 JavaScript 运行时环境。它可以被用于使用真实世界数据来构建快速且可扩展的应用。它既不是一个框架也不是一个库，而是一个基于 Google Chrome 的 V8 引擎的运行时环境。你可以用 Node.js 来创建多元化的 JavaScript 应用，包括单页应用、即时 web 应用等等。从技术层面上来讲，由于它的事件驱动式架构，所以 Node.js 支持异步 I/O 。这种做法使得它成为开发高可扩展应用的一个极好的解决方案的选择。查看 [Node.js](https://www.livecoding.tv/learn/node-js/)在 livecoding.tv 上的视频。

### 总结

JavaScript 是 web 开发中的通用语言。它之所以快速发展不仅仅是因为它所提供的内容，更多的是因为它的庞大的开源社区的支持。以上提到的框架和库对任何一个 JavaScript 开发者来说都是必须知道的。它们都提供了一些途径来探索 JavaScript 和前端开发。上面提及的大部分框架和库频繁地在 Livecoding.tv 上出现，其大部分来自对 JavaScript 及其相关技术感兴趣的软件工程师。

---

via: <https://opensource.com/article/16/11/15-javascript-frameworks-libraries>

作者：[Dr. Michael J. Garbade](https://opensource.com/users/drmjg) 译者：[chenxinlong](https://github.com/chenxinlong) 校对：[wxy](https://github.com/wxy)

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


Samba 系列（六）：使用 Rsync 命令同步两个 Samba4 AD DC 之间的 SysVol 目录

Summary: 这篇文章讲的是在两个 Samba4 活动目录域控制器之间，通过一些强大的 Linux 工具来完成 SysVol 的复制操作，比如 Rsync 数据同步工具，Cron 任务调度进程和 SSH 协议。

哎······用linux做DC，组策略能修改吗？

![](/data/attachment/album/201704/08/102924a87i7t2do373z77f.jpg)

这篇文章讲的是在两个 **Samba4 活动目录域控制器**之间，通过一些强大的 Linux 工具来完成 SysVol 的复制操作，比如 [Rsync 数据同步工具](http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/)，[Cron 任务调度进程](http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/)和 [SSH 协议](http://www.tecmint.com/5-best-practices-to-secure-and-protect-ssh-server/)。

### 需求：

1、[在 Ubuntu 系统上使用 Samba4 来创建活动目录架构](/article-8065-1.html)

2、[在 Linux 命令行下管理 Samba4 AD 架构](/article-8070-1.html)

3、[使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构](/article-8097-1.html)

4、[在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略](/article-8258-1.html)

5、[将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式](/article-8358-1.html)

### 第一步：配置 DC 服务器时间同步

1、在两个域控制器之间复制 **sysvol** 目录的内容之前，你得保证这两个服务器时间设置准确且一致。

如果这两个服务器的时间延迟大于 5 分钟，并且时钟也不同步，你将会遇到 AD 账号和域复制的各种问题。

为了解决多个域控制器之间时间漂移的问题，你需要在服务器上执行如下命令来[安装和配置 NTP 服务](http://www.tecmint.com/install-and-configure-ntp-server-client-in-debian/)。

```
# apt-get install ntp

```

2、在 NTP 服务安装完成之后，打开主配置文件，把默认的 pool 值注释（在每行 pool 参数前添加 # ），并且添加新的 pool 值，指向已安装了 **NTP** 服务端的主 **Samba4 AD DC FQDN**，如下所示。

```
# nano /etc/ntp.conf

```

把下面几行添加到 `ntp.conf` 配置文件。

```
pool 0.ubuntu.pool.ntp.org iburst
#pool 1.ubuntu.pool.ntp.org iburst
#pool 2.ubuntu.pool.ntp.org iburst
#pool 3.ubuntu.pool.ntp.org iburst
pool adc1.tecmint.lan
# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

```

![Configure NTP for Samba4](/data/attachment/album/201704/08/103221g0z6aph1v4x7wm0m.png)

*Samba4 配置 NTP 服务*

3、先不要关闭该文件，在文件末尾添加如下内容，这是为了让其它客户端能够查询并[与这个 NTP 服务器同步时间](http://www.tecmint.com/how-to-synchronize-time-with-ntp-server-in-ubuntu-linux-mint-xubuntu-debian/)，并发出 NTP 签署请求，以防主 DC 离线：

```
restrict source notrap nomodify noquery mssntp
ntpsigndsocket /var/lib/samba/ntp_signd/

```

4、最后，关闭并保存该配置文件，然后重启 NTP 服务以应用更改。等待几分钟后时间同步完成，执行 `ntpq` 命令打印出 **adc1** 时间同步情况。

```
# systemctl restart ntp
# ntpq -p

```

![Synchronize NTP Time with Samba4 AD](/data/attachment/album/201704/08/103221fuebr7rrtgbnsmve.png)

*与 Samba4 AD 同步 NTP 时间*

### 第二步：通过 Rsync 命令来复制第一个 DC 服务器上的 SysVol 目录

默认情况下，**Samba4 AD DC** 不会通过 **DFS-R**（<ruby> 分布式文件系统复制 <rt>  Distributed File System Replication </rt></ruby>）或者 **FRS**（<ruby> 文件复制服务 <rt>  File Replication Service </rt></ruby>）来复制 SysVol 目录。

这意味着只有在第一个域控制器联机时，<ruby> <strong>  组策略对象 </strong> <rt>  Group Policy objects </rt></ruby>才可用。否则组策略设置和登录脚本不会应用到已加入域的 Windosws 机器上。

为了克服这个障碍，以及基本实现 SysVol 目录复制的目的，我们通过执行一个[基于 SSH 的身份认证](http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/)并使用 SSH 加密通道的[Linux 同步命令](http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/)来从第一个域控制器安全地传输 **GPO** 对象到第二个域控制器。

这种方式能够确保 **GPO** 对象在域控制器之间的一致性，但是也有一个很大的缺点。它只能进行单向同步，因为在同步 GPO 目录的时候， **rsync** 命令会从源 DC 服务器传输所有的更改到目标 DC 服务器，

源 DC 服务器上不存在的组策略对象也会从目标 DC 服务器上删除，为了限制并避免任何冲突，所有的 GPO 编辑操作只能在第一个 DC 服务器上执行。

5、要进行 **SysVol** 复制，先到[第一个 AD DC 服务器上生成 SSH 密钥](http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/)，然后使用下面的命令把该密钥传输到第二个 DC 服务器。

在生成密钥的过程中不要设置密码，以便在无用户干预的情况下进行传输。

```
# ssh-keygen -t RSA
# ssh-copy-id root@adc2
# ssh adc2
# exit

```

![Generate SSH Key on Samba4 DC](/data/attachment/album/201704/08/103222syu0h29525bw5259.png)

*在 Samba4 DC 服务器上生成 SSH 密钥*

6、 当你确认 root 用户可以从第一个 **DC** 服务器以免密码方式登录到第二个 **DC** 服务器时，执行下面的 `rsync` 命令，加上 `--dry-run` 参数来模拟 SysVol 复制过程。注意把对应的参数值替换成你自己的数据。

```
# rsync --dry-run -XAavz --chmod=775 --delete-after  --progress --stats  /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/

```

7、如果模拟复制过程正常，那么再次执行去掉 `--dry-run` 参数的 `rsync` 命令，来真实的在域控制器之间复制 GPO 对象。

```
# rsync -XAavz --chmod=775 --delete-after  --progress --stats  /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/

```

![Samba4 AD DC SysVol Replication](/data/attachment/album/201704/08/103223jvshyuhxsybdxa8n.png)

*Samba4 AD DC SysVol 复制*

8、在 SysVol 复制完成之后，登录到目标域控制器，然后执行下面的命令来列出其中一个 GPO 对象目录的内容。

从第一个 DC 服务器上执行这个命令时，列出的 GPO 对象也要相同。

```
# ls -alh /var/lib/samba/sysvol/your_domain/Policiers/

```

![Verify Samba4 DC SysVol Replication](/data/attachment/album/201704/08/103224mz6m7c69u8kzu78x.png)

*验证 Samba4 DC SysVol 复制结果是否正常*

9、为了自动完成**组策略**复制的过程（通过网络传输 sysvol 目录），你可以使用 root 账号设置一个任务来执行同步命令，如下所示，设置为每隔 5 分钟执行一次该命令。

```
# crontab -e

```

添加一条每隔 5 分钟运行的同步命令，并把执行结果以及错误信息输出到日志文件 `/var/log/sysvol-replication.log` 。如果执行命令异常，你可以查看该文件来定位问题。

```
*/5 * * * * rsync -XAavz --chmod=775 --delete-after  --progress --stats  /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/ > /var/log/sysvol-replication.log 2>&1

```

10、如果以后 **SysVol ACL** 权限有问题，你可以通过下面的命令来检测和修复这些异常。

```
# samba-tool ntacl sysvolcheck
# samba-tool ntacl sysvolreset

```

![Fix SysVol ACL Permissions](/data/attachment/album/201704/08/103224e0qzixgqqim3xaik.png)

*修复 SysVol ACL 权限问题*

11、如果第一个 **Samba4 AD DC** 的 **FSMO** 角色，即“PDC 模拟器”不可用，你可以强制 **Microsoft Windows** 系统上的**组策略管理控制台**只连接到第二个域控制器，通过选择更改域控制器选项和手动选择目标机器，如下图所示。

![Change Samba4 Domain Controller](/data/attachment/album/201704/08/103225tb99bfkdcjjrfijk.png)

*更改 Samba4 域控制器*

![Select Samba4 Domain Controller](/data/attachment/album/201704/08/103225c4wu3uxz0cux11ux.png)

*选择 Samba4 域控制器*

当你从**组策略管理控制台**连接到第二个 **DC** 服务器时，你应该避免对**组策略**做任何更改。否则，当第一个 **DC** 服务器恢复正常后， **rsync 命令**将会删除在第二个 DC 服务器上所做的更改。

---

作者简介：

Matei Cezar -- 我是一个电脑迷，开源软件和 Linux 系统爱好者，有超过 4 年的 Linux 桌面、服务器版本系统和 bash 编程经验。

---

via: <http://www.tecmint.com/samba4-ad-dc-sysvol-replication/>

作者：[Matei Cezar](http://www.tecmint.com/author/cezarmatei/) 译者：[rusking](https://github.com/rusking) 校对：[jasminepeng](https://github.com/jasminepeng)

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


Linux 命令行工具使用小贴士及技巧（三）

Summary: CDPATH 环境变量时一把双刃剑，如果没有掌握完善的知识和随意使用，可能会令你陷入困境，并花费你大量宝贵时间去解决问题。当然，这不代表你不应该去试一下；只需要了解一下所有的可用选项，如果你得出结论，使用 CDPATH 会带来很大的帮助，就继续使用它吧。

在这个系列的[第一部分](/article-8335-1.html)，我们详细地讨论了 `cd -` 命令，在[第二部分](/article-8371-1.html)，我们深入探究了 `pushd` 和 `popd` 两个命令，以及它们使用的场景。

![](/data/attachment/album/201704/08/201121taqbqb0o42xiboix.jpg)

继续对命令行的讨论，在这篇教程中，我们将会通过简单易懂的实例来讨论 `CDPATH` 这个环境变量。我们也会讨论关于此变量的一些进阶细节。

*在这之前，先声明一下此教程中的所有实例都已经在 Ubuntu 14.04 和 4.3.11(1) 版本的 Bash 下测试过。*

### 环境变量 CDPATH

即使你的命令行所有操作都在特定的目录下 - 例如你的主目录，然而在你切换目录时也不得不提供绝对路径。比如，考虑我现在的情况，就是在 `/home/himanshu/Downloads` 目录下：

```
$ pwd
/home/himanshu/Downloads

```

现在要求切换至 `/home/himanshu/Desktop` 目录，我一般会这样做：

```
cd /home/himanshu/Desktop/

```

或者

```
cd ~/Desktop/

```

或者

```
cd ../Desktop/

```

能不能只是运行以下命令就能简单地实现呢：

```
cd Desktop

```

是的，这完全有可能。这就是环境变量 `CDPATH` 出现的时候了。你可使用这个变量来为 `cd` 命令定义基础目录。

如果你尝试打印它的值，你会看见这个环境变量默认是空值的：

```
$ echo $CDPATH

```

现在 ，考虑到上面提到的场景，我们使用这个环境变量，将 `/home/himanshu` 作为 `cd` 命令的基础目录来使用。

最简单的做法这样：

```
export CDPATH=/home/himanshu

```

现在，我能做到之前所不能做到的事了 - 当前工作目录在 `/home/himanshu/Downloads` 目录里时，成功地运行了 `cd Desktop` 命令。

```
$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$

```

这表明了我可以使用 `cd` 命令来到达 `/home/himanshu` 下的任意一个目录，而不需要在 `cd` 命令中显式地指定 `/home/himanshu` 或者 `~`，又或者是 `../` (或者多个 `../`)。

### 要点

现在你应该知道了怎样利用环境变量 `CDPATH` 在 `/home/himanshu/Downloads` 和 `/home/himanshu/Desktop` 之间轻松切换。现在，考虑以下这种情况， 在 `/home/himanshu/Desktop` 目录里包含一个名字叫做 `Downloads` 的子目录，这是将要切换到的目录。

但突然你会意识到 `cd Downloads` 会切换到 `/home/himanshu/Downloads`。所以，为了确保这不会发生，你可以这样做：

```
cd ./Downloads

```

虽然上述命令本身没有问题，但你还是需要耗费点额外的精力（虽然很小），尤其是每次这种情况发生时你都不得不这样做。所以，有一个更加优雅的解决方案来处理，就是以如下方式来设定 `CDPATH` 环境变量。

```
export CDPATH=".:/home/himanshu"

```

它的意思是告诉 `cd` 命令先在当前的工作目录查找该目录，然后再尝试搜寻 `/home/himanshu` 目录。当然， `cd` 命令是否以这样的方式运行，完全取决于你的偏好和要求 - 讨论这一点的目的是为了让你知道这种情况可能会发生。

就如你现在所知道的，一旦环境变量 `CDPATH` 被设置，它的值 - 或者它所包含的路径集合 - 就是系统中 `cd` 命令搜索目录的地方 ( 当然除了使用绝对路径的场景 )。所以，完全取决于你来确保该命令行为的一致性。

继续说，如果一个 bash 脚本以相对路径使用 `cd` 命令，最好还是先清除或者重置环境变量 `CDPATH`，除非你觉得遇上不可预测的麻烦也无所谓。还有一个可选的方法，比起在终端使用 `export` 命令来设置 `CDPATH`，你可以在测试完当前的 shell 是交互式还是非交互式之后，再在你的 `.bashrc` 文件里设置环境变量，这样可以确保你对环境变量的改动只对交互式 shell 生效。

环境变量中，路径出现的顺序同样也是很重要。举个例子，如果当前目录是在 `/home/himanshu` 目录之前列出来，`cd` 命令就会先搜索当前的工作目录然后才会搜索 `/home/himanshu` 目录。然而，如果该值为 `/home/himanshu:.`，搜索就首先从 `/home/himanshu` 开始，然后到当前目录。不用说，这会影响 `cd` 命令的行为，并且不注意路径的顺序可能会导致一些麻烦。

要牢记在心的是，环境变量 `CDPATH`，就像其名字表达的，只对 `cd` 命令有作用。意味着在 `/home/himanshu/Downloads` 目录里面时，你能运行 `cd Desktop` 命令来切换到 `/home/himanshu/Desktop` 目录，但你不能使用 `ls`。以下是一个例子:

```
$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$

```

然而，这还是有简单的变通处理的。例如，我们可以用以下不怎么费力的方式来达到目的:

```
$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~

```

不过，不是每种情况就能变通处理的。

另一个重点是：就像你可能已经观察到的，每次你使用 `CDPATH` 环境变量集来运行 `cd` 命令时，该命令都会在输出里显示你切换到的目录的完整路径。不用说，不是所有人都想在每次运行 `cd` 命令时看到这些信息。

为了确保该输出被制止，你可以使用以下命令：

```
alias cd='>/dev/null cd'

```

如果 `cd` 命令运行成功，上述命令不会输出任何东西，如果失败，则允许产生错误信息。

最后，假如你遇到设置 `CDPATH` 环境变量后，不能使用 shell 的 tab 自动补全功能的问题，可以尝试安装并启用 bash 自动补全（bash-completion）。更多请参考 [这里](http://bash-completion.alioth.debian.org/)。

### 总结

`CDPATH` 环境变量时一把双刃剑，如果没有掌握完善的知识和随意使用，可能会令你陷入困境，并花费你大量宝贵时间去解决问题。当然，这不代表你不应该去试一下；只需要了解一下所有的可用选项，如果你得出结论，使用 `CDPATH` 会带来很大的帮助，就继续使用它吧。

你已经能够熟练地使用 `CDPATH` 了吗？你有更多的贴士要分享？请在评论区里发表一下你的想法吧。

（高清版题图：<http://anguerde.com/TTF-222621-archlinux.html> ）

---

via: <https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/>

作者：[Ansh](https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/) 译者：[HaitaoBio](https://github.com/HaitaoBio) 校对：[jasminepeng](https://github.com/jasminepeng)

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


如何安装 Debian 的非 systemd 复刻版本 Devuan Linux

Summary: Devuan Linux 是 Debian 最新的复刻版本，是基于 Debian 的一个被设计为完全去除了 systemd 的版本。

2017 年初……这都四月了啊

[Devuan Linux](https://devuan.org/) 是 Debian 最新的复刻版本，是基于 Debian 的一个被设计为完全去除了 systemd 的版本。

Devuan 宣布于 2014 年底，并经过了一段活跃的开发。最新的发行版本是 beta2，发行代号为： Jessie （没错，和当前 Debian 的稳定版同名）。

当前稳定版的最后发行据说会在 2017 年初。如果想了解关于该项目的更多信息，请访问社区官网：<https://devuan.org/> 。

![](/data/attachment/album/201704/09/090655z3lmzmf4qvb2ll66.jpg)

本文将阐述 Devuan 当前发行版的安装。在 Debian 上可用的大多数软件包在 Devuan 上也是可用的，这有利于用户从 Debian 到 Devuan 的无缝过渡，他们应该更喜欢自由选择自己的初始化系统。

### 系统要求

Devuan 和 Debian 类似，对系统的要求非常低。最大的决定性因素是，用户希望使用什么样的桌面环境。这篇指南假设用户将使用一个“俗气的”桌面环境，建议至少满足下面所示的最低系统要求：

1. 至少 15GB 的硬盘空间；强烈鼓励有更大空间
2. 至少 2GB 的内存空间；鼓励更多
3. 支持 USB 或 CD/DVD 启动
4. 网络连接；安装过程中将会从网上下载文件

### Devuan Linux 安装

正如所有的指南一样，这篇指南假设你有一个 USB 驱动器，可作为安装媒介。注意，USB 驱动器应该有大约 4GB 或 8 GB 大，**并且需要删除所有数据**。

作者在使用太大的 USB 驱动器遇到过问题，不过你的也许可以工作。无论如何，在接下来的一些步骤中，**将导致 USB 驱动上的数据全部丢失**。

在开始准备安装之前，请先备份 USB 驱动器上的所有数据。这个可启动的 Linux USB 启动器要在另一个 Linux 系统上创建。

1、首先，从 <https://devuan.org/> 获取最新发行版的 Devuan 安装镜像，或者，你也可以在 Linux 终端上输入下面的命令来获取安装镜像：

```
$ cd ~/Downloads
$ wget -c https://files.devuan.org/devuan_jessie_beta/devuan_jessie_1.0.0-beta2_amd64_CD.iso

```

2、上面的命令将会把安装镜像文件下载到用户的 `Downloads` 目录。下一步是把安装镜像写入 USB 驱动器中，从而启动安装程序。

为了写入镜像，需要使用一个在 Linux 中叫做 `dd` 的工具。首先，需要使用 [lsblk 命令](http://www.tecmint.com/find-usb-device-name-in-linux/)来定位硬盘名字：

```
$ lsblk

```

![Find Device Name in Linux](/data/attachment/album/201704/09/090703zy4ww0lgkwj7sguw.png)

*找到 Linux 中的设备名字*

USB 驱动器的名字为 `／dev/sdc`，现在，可以使用 `dd` 工具把 Devuan 镜像写入驱动器中：

```
$ sudo dd if=~/Downloads/devuan_jessie_1.0.0-beta2_amd64_CD.iso of=/dev/sdc

```

重点：上面的命令需要有 root 权限，你可以使用 `sudo` 或者以 root 用户登录来运行命令。同时，这个命令将会删除 USB 驱动器上的所有数据，所以请确保备份了需要的数据。

3、当镜像写入 USB 驱动器以后，把 USB 驱动器插入要安装 Devuan 的电脑上，然后从 USB 驱动器启动电脑。

从 USB 驱动器成功启动以后，将会出现下面所示的屏幕，你需要在 “Install” 和 “Graphical Install” 这两个选项间选择一个继续安装进程。

在这篇指南中，我将使用 “Graphical Install” 方式。

![Devuan Graphic Installation](/data/attachment/album/201704/09/090704gqtieq3d1tdf41yy.png)

*Devuan Graphic 安装*

4、当安装程序启动到“本地化”菜单以后，将会提示用户选择键盘布局和语言。只需选择你想要的选项，然后继续安装。

![Devuan Language Selection](/data/attachment/album/201704/09/090704v35tt3cw8iwcaqa7.png)

*Devuan 语言选择*

![Devuan Location Selection](/data/attachment/album/201704/09/090705f8trq8jmgmg08mtj.png)

*Devuan 地区选择*

![Devuan Keyboard Configuration](/data/attachment/album/201704/09/090705q42089tlm7bnnllb.png)

*Devuan 键盘配置*

5、下一步是向安装程序提供主机名和该机器所属的域名。

需要填写一个唯一的主机名，但如果电脑不属于任何域，那么域名可以不填。

![Set Devuan Linux Hostname](/data/attachment/album/201704/09/090706wf00lqxshczqjrs1.png)

*设置 Devuan Linux 的主机名*

![Set Devuan Linux Domain Name](/data/attachment/album/201704/09/090706b58koor3o55wepoo.png)

*设置 Devuan Linux 的域名*

6、填好主机名和域名信息以后，需要提供一个 root 用户密码。

请务必记住这个密码，因为当你在这台 Devuan 机器上执行管理任务时需要提供这个密码。默认情况下， Devuan 不会安装 sudo 包，所以当安装完成以后，管理用户就是 root 用户。

![Setup Devuan Linux Root User](/data/attachment/album/201704/09/090707aq6l26n4vk4j55kj.png)

*设置 Devuan Linux Root 用户*

7、下一步需要做的事情是创建一个非 root 用户。在任何可能的情况下，避免以 root 用户使用系统总是更好的。此时，安装程序将会提示你创建一个非 root 用户。

![Setup Devuan Linux User Account](/data/attachment/album/201704/09/090707kalnvxhn4y4a1au1.png)

*创建 Devuan Linux 用户账户*

8、一旦输入 root 用户密码，提示非 root 用户已经创建好以后，安装程序将会请求[通过 NTP 设置时钟](http://www.tecmint.com/install-and-configure-ntp-server-client-in-debian/)。

这时需要再次连接网络，大多数系统都需要这样。

![Devuan Linux Timezone Setup](/data/attachment/album/201704/09/090707ivl9dhn3dgvdqvdc.png)

*设置 Devuan Linux 的时区*

9、下一步需要做的是系统分区。对于绝大多数用户来说，选择“Guided – use entire disk”就够了。然而，如果需要进行高级分区，就需要进行分区。

![Devuan Linux Partitioning](/data/attachment/album/201704/09/090708la5aw345zfslaqd3.png)

*Devuan Linux 分区*

在上面点击 “continue” 以后，请确认分区更改，从而把分区信息写入硬盘。

10、分区完成以后，安装程序为 Devuan 安装一些基础文件。这个过程将会花费几分钟时间，直到系统开始配置网络镜像（软件库）才会停下来。当提示使用网络镜像时，通常点击 “yes”。

![Devuan Linux Configure Package Manager](/data/attachment/album/201704/09/090708cxhn5997755f7tt5.png)

*Devuan Linux 配置包管理器*

点击 “yes” 以后将会给用户呈现一系列以国家分类的网络镜像。通常最好选择地理位置上离你的机器最近的镜像。

![Devuan Linux Mirror Selection](/data/attachment/album/201704/09/090709hu69vuzociivduuy.png)

*Devuan Linux 镜像选择*

![Devuan Linux Mirrors](/data/attachment/album/201704/09/090709plvffak0t4ayutkt.png)

*Devuan Linux 镜像*

11、下一步是设置 Debian 传统的 “popularity contest”，它能够追踪已下载包的使用统计。

在安装过程中，可以在管理员首选项中启用或禁用该功能。

![Configure Devuan Linux Popularity Contest](/data/attachment/album/201704/09/090710ca10o2auokupoh6e.png)

*配置 Devuan Linux 的 Popularity Contest*

12、在简单浏览仓库和一些包的更新以后，安装程序会给用户展示一系列软件包，安装这些包可以提供一个桌面环境、SSH 访问和其它系统工具。

Devuan 会列举出一些主流桌面环境，但应该指出的是，并不是所有的桌面在 Devuan 上均可用。作者在 Devuan 上成功使用过 Xfce 、LXDE 和 Mate（未来的文章将会探究如何从源代码安装这些桌面环境）。

如果想要安装别的桌面环境，不要勾选 “Devuan Desktop Environment” 复选框。

![Devuan Linux Software Selection](/data/attachment/album/201704/09/090710or14vzwpzzz99f3v.png)

*Devuan Linux 软件选择*

根据在上面的安装屏幕中选择的项目数，可能需要几分钟的时间来下载和安装软件。

当所有的软件都安装好以后，安装程序将会提示用户选择 grub 的安装位置。典型情况是选择安装在 `/dev/sda` 目录下。

![Devuan Linux Grub Install](/data/attachment/album/201704/09/090711hv39wgxz2vw43gpd.png)

*Devuan Linux 安装 grub 引导程序*

![Devuan Linux Grub Install Disk](/data/attachment/album/201704/09/090711kg6xkqtjaxses3sk.png)

*Devuan Linux Grub 程序的安装硬盘*

13、当 GRUB 程序成功安装到引导驱动器以后，安装程序将会提示用户安装已经完成，请重启系统。

![Devuan Linux Installation Completes](/data/attachment/album/201704/09/090711cn9h8yjfzfrkrkjp.png)

*Devuan Linux 安装完成*

14、如果安装顺利完成了，那么系统要么启动到选择桌面环境，或者如果没有选择桌面环境的话，会启动到一个基于文本的控制台。

![Devuan Linux Console](/data/attachment/album/201704/09/090712sklkf98lfu89599i.png)

Devuan Linux 控制台。

这篇文章总结了最新版本的 Devuan Linux 的安装。在这个系列的下一篇文章将会阐述[如何从源代码为 Devuan Linux 安装 Enlightenment 桌面环境](http://www.tecmint.com/install-enlightenment-on-devuan-linux/)。如果你有任何问题或疑问，请记得让我们知道。

---

作者简介：

作者是 Ball 州立大学的计算机系讲师，目前教授计算机系的所有 Linux 课程，同时也教授 Cisco 网络课程。他是 Debian 以及其他 Debian 的衍生版比如 Mint、Ubuntu 和 Kali 的狂热用户。他拥有信息学和通信科学的硕士学位，同时获得了 Cisco、EC 理事会和 Linux 基金会的行业认证。

---

via: <http://www.tecmint.com/installation-of-devuan-linux/>

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

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


微软 Office 在线版变得更好 - 在 Linux 上亦然

实在不明白，为什么他们不用永中OFFICE.

web版就不分什么windows、linux了啊，这标题感觉莫名其妙

直接wps不就好了

唯一能百分百保证兼容性的方法是用wine或crossover安装MS office。

web版如果不是365会员可能用的会不爽吧

个人使用不错，企业级使用涉及信息安全问题。

对于 Linux 用户，影响 Linux 使用体验的主要因素之一便是缺少微软 Office 套装。如果你非得靠 Office 谋生，而它被绝大多数人使用，你可能不能承受使用开源产品的代价。理解矛盾之所在了吗？

的确, LibreOffice 是一个 [很棒的](http://www.ocsmag.com/2015/02/16/libreoffice-4-4-review-finally-it-rocks/) 自由程序，但如果你的客户、顾客或老板需要 Word 和 Excel 文件呢？ 你确定能 [承担任何](http://www.ocsmag.com/2014/03/14/libreoffice-vs-microsoft-office-part-deux/) 将这些文件从 ODT 或别的格式转换到 DOCX 之类时的失误、错误或小问题吗， 反之亦然。这是一系列难办的问题。 不幸的是，在技术在层面上对大多数人而言，Linux 超出了能力范围。当然，这不是绝对。

![](/data/attachment/album/201704/09/220546qq1yssc2akyi1cdt.jpg)

### 加入微软 Office 在线， 加入 Linux

众所周知，微软拥有自己的 Office 云服务多年。通过任何现代浏览器都可以使用使得它很棒且具有意义，并且这意味着在 Linux 上也能使用！我前阵子刚测试了这个[方法](http://www.dedoimedo.com/computers/office-online-linux.html)并且它表现出色。我能够轻松使用这个产品，以原本的格式保存文件，或是转换为我的 ODF 格式，这真的很棒。

我决定再次使用这个套装看看它在过去几年的进步以及是否依旧对 Linux 友好。我使用 [Fedora 25](http://www.dedoimedo.com/computers/fedora-25-gnome.html) 作为例子。我同时也去测试了 [SoftMaker Office 2016](http://www.ocsmag.com/2017/01/18/softmaker-office-2016-your-alternative-to-libreoffice/)。 听起来有趣，也确实如此。

### 第一印象

我得说，我感到很高兴。Office 不需要任何特别的插件。没有 Silverlight 或 Flash 之类的东西。 单纯而大量的 HTML 和 Javascript 。 同时，交互界面反应极其迅速。唯一我不喜欢的就是 Word 文档的灰色背景，它让人很快感到疲劳。除了这个，整个套装工作流畅，没有延迟、行为古怪之处及意料之外的错误。接下来让我们放慢脚步。

这个套装需要你用在线账户或者手机号登录——不必是 Live 或 Hotmail 邮箱。任何邮箱都可以。如果你有微软 [手机](http://www.dedoimedo.com/computers/microsoft-lumia-640.html), 那么你可以用相同的账户并且可以同步你的数据。账户也会免费分配 5GB OneDrive 的储存空间。这很有条理，不是优秀或令人超级兴奋而是非常得当。

![微软 Office, 欢迎页面](/data/attachment/album/201704/09/220605z3qob9rzi2p2aipp.jpg)

你可以使用各种各样的程序，包括必需的三件套 - Word、Excel 和 Powerpoint，并且其它的东西也可使用，包括一些新奇事物。文档会自动保存，但你也可以下载副本并转换成其它格式，比如 PDF 和 ODF。

对我来说这简直完美。分享一个自己的小故事。我用 LibreOffice 写一本 [奇幻类的](http://www.thelostwordsbooks.com/)书，之后当我需要将它们送去出版社编辑或者校对，我需要把它们转换成 DOCX 格式。唉，这需要微软 office。从我的 [Linux 问题解决大全](http://www.dedoimedo.com/computers/linux-problem-solving-book.html)得知，我得一开始就使用 Word，因为有一堆工作要与我的编辑合作完成，而他们使用专有软件。没有任何情面可讲，只有出于对冷酷的金钱和商业的考量。错误是不容许接受的。

![Word, 新文档](/data/attachment/album/201704/09/220606u92kb5x6r22ingvn.png)

使用 Office 在线版能给很多偶尔需要使用的人以自由空间。偶尔使用 Word、Excel 等，不需要购买整个完整的套装。如果你表面上是 LibreOffice 的忠实粉丝，你也可以暗地里“加入微软 Office 负心者俱乐部”而不必感到愧疚。有人传给你一个 Word 或 PPT 文件，你可以上传然后在线操作它们，然后转换成所需要的。这样的话你就可以在线生成你的工作，发送给那些严格要求的人，同时自己留一个 ODF 格式的备份，有需要的话就用 LibreOffice 操作。虽然这种方法的灵活性很是实用，但这不应该成为你的主要手段。对于 Linux 用户，这给予了很多他们平时所没有的自由，毕竟即使你想用微软 Office 也不好安装。

![另存为,转换选项](/data/attachment/album/201704/09/220606eghbt7wishwfiiwo.jpg)

### 特性、选项、工具

我开始琢磨一个文档——考虑到这其中各种细枝末节。写点文本，用一种或三种风格，链接某些文本，嵌入图片，加上脚注，评论自己的文章甚至作为一个多重人格的极客巧妙地回复自己的评论。

除了灰色背景——我们得学会很好地完成一项无趣工作，即便是像臭鼬工厂那样的工作方式，因为浏览器里没有选项调整背景颜色——其实也还好啦。

Skype 甚至也整合到了其中，你可以边沟通边协作，或者在协作中倾听。其色调相当一致。鼠标右键可以选择一些快捷操作，包括链接、评论和翻译。不过需要改进的地方还有不少，它并没有给我想要的，翻译有差错。

![Skype active](/data/attachment/album/201704/09/220607gd2f15o21mdssadg.jpg)

![右键选项](/data/attachment/album/201704/09/220607pnonp2woczcon644.png)

![右键选项，更多](/data/attachment/album/201704/09/220607rt4148on8df5dbbj.jpg)

![翻译，不准确](/data/attachment/album/201704/09/220607veniez9e33f09f7f.png)

你也可以加入图片——包括默认嵌入的必应搜索可以基于它们的许可证和分发权来筛选图片。这很棒，特别是当你想要创作文档而又想避免版权纷争时。

![图片，在线搜索](/data/attachment/album/201704/09/220608tgd41aaadb62jqaf.jpg)

### 关于追踪多说几句

说老实话，很实用。这个产品基于在线使用使得默认情况下可以跟踪更改和编辑，所以你就有了基本的版本控制功能。不过如果直接关闭而不保存的话，阶段性的编辑会遗失。

![评论](/data/attachment/album/201704/09/220608h4r3ummrmuu3unzg.jpg)

![编译活动日志](/data/attachment/album/201704/09/220609h5fxxxe78svxffxj.png)

看到一个错误——如果你试着在 Linux 上（本地）编辑 Word 或 Excel 文件，会被提示你很调皮，因为这明显是个不支持的操作。

![编辑错误](/data/attachment/album/201704/09/220609fx4w6flel4264jo5.jpg)

### Excel

实际工作流程不止使用 Word。我也使用 Excel，众所周知，它包含了很多整齐有效的模板之类的。好用而且在更新单元格和公式时没有任何延迟，它涵盖了你所需要的大多数功能。

![Excel，有趣的模板](/data/attachment/album/201704/09/220609quc2x7mf727lpmj0.jpg)

![空白电子表格](/data/attachment/album/201704/09/220610xs6a86noaaaauk08.jpg)

![Excel，预算模板](/data/attachment/album/201704/09/220610qq196osdve9nvnq9.jpg)

### OneDrive

在这里你可以新建文件夹和文件、移动文件、给你的朋友（如果你需要的话）和同事们分享文件。5 GB 免费，当然，收费增容。总的来说，做的不错。在更新和展示内容上会花费一定时间。打开了的文档不能被删除，这可能看起来像一个漏洞，但从计算机角度来看是完美的体验。

![OneDrive](/data/attachment/album/201704/09/220610z68xs8j608szskss.jpg)

### 帮助

如果你感到疑惑——比如被人工智能戏耍，可以向微软的云智囊团寻求帮助。 虽然这种方式不那么直接，但至少好用，结果往往也能令人满意。

![能做什么, 交互式的帮助](/data/attachment/album/201704/09/220610o1z77ruo1ou7ovot.png)

### 问题

在我三个小时的摸索中，我只遇到了两个小问题。一是文件编辑的时候浏览器会有警告（黄色三角），提醒我在 HTTPS 会话中加载了不安全的元素。二是创建 Excel 文件失败，只出现过一次。

![文件创建失败](/data/attachment/album/201704/09/220611zhvhhm4rmb9jgzz1.jpg)

### 结论

微软 Office 在线版是一个优秀的产品，与我两年前测试相比较，它变得更好了。外观出色，表现良好，使用期间错误很少，完美兼容，甚至对于 Linux 用户，使之具有个人意义和商业价值。我不能说它是自 VHS （Video Home System，家用录像系统）出现以来最好的东西，但一定是很棒的，它架起了 Linux 用户与微软 Office 之间的桥梁，解决了 Linux 用户长期以来的问题，方便且很好的支持 ODF 。

现在我们来让事情变得更有趣些，如果你喜欢云概念的事物，那你可能对 [Open365](http://www.ocsmag.com/2016/08/17/open365/) 感兴趣，这是一个基于 LibreOfiice 的办公软件，加上额外的邮件客户端和图像处理软件，还有 20 GB 的免费存储空间。最重要的是，你可以用浏览器同时完成这一切，只需要多开几个窗口。

回到微软，如果你是 Linux 用户，如今可能确实需要微软 Office 产品。在线 Office 套装无疑是更方便的使用方法——或者至少不需要更改操作系统。它免费、优雅、透明度高。值得一提的是，你可以把思维游戏放在一边，享受你的云端生活。

干杯~

---

作者简介：

我的名字是 Igor Ljubuncic. 38 岁左右，已婚未育。现在是一家云技术公司的首席工程师，这是一个新的领域。到 2015 年初之前，我作为团队中的一名系统工程师就职于世界上最大的信息技术公司之一，开发新的 Linux 解决方案、完善内核、研究 linux。在这之前，我是创新设计团队的技术指导，致力于高性能计算环境的创新解决方案。还有一些像系统专家、系统程序员之类的新奇的名字。这些全是我的爱好，直到 2008 年，变成了工作，还有什么能比这更令人满意呢？

从 2004 到 2008，我作为物理学家在医学影像行业谋生。我专攻解决问题和发展算法，后来大量使用 Matlab 处理信号和图像。另外我考了很多工程计算方法的认证，包括 MEDIC Six Sigma Green Belt，实验设计和数据化工程。

我也开始写书，包括奇幻类和 Linux 上的技术性工作。彼此交融。

---

via: <http://www.dedoimedo.com/computers/office-online-linux-better.html>

作者：[Igor Ljubuncic](http://www.dedoimedo.com/faq.html) 译者：[XYenChi](https://github.com/XYenChi) 校对：[wxy](https://github.com/wxy)

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


5 个开源 RSS 订阅阅读器

Summary: RSS 长存！我们最后一次是在 2013 年回顾了开源 RSS 阅读器选择，现在是更新的时候了。这里是我关于 2017 年开源 RSS 订阅阅读器的一些最佳选择，每个在使用上稍微不同。

有基于终端的吗?

我记得有

然而，现在提供RSS服务的网站越来越少了。

rss还是用浏览器插件比如freedly的插件

canto

![RSS feed](/data/attachment/album/201704/10/171818atbcofk4bbvgcqz4.png "RSS feed")

### 你平时使用 RSS 阅读器么？

四年前当 Google Reader 宣布停止的时候，许多“技术专家”声称 RSS 订阅将会结束。

对于某些人而言，社交媒体和其他聚合工具满足了 RSS、Atom 以及其它格式的阅读器的需求。但是老技术绝对不会因为新技术而死，特别是如果新技术不能完全覆盖旧技术的所有使用情况时。技术的目标受众可能会有所改变，人们使用这个技术的工具也可能会改变。

但是，RSS 并不比像 email、JavaScript、SQL 数据库、命令行或者十几年前告诉我的其它时日无多的技术消失的更快。（黑胶专辑的销售额去年刚刚达到了其 [25 年的顶峰](https://www.theguardian.com/music/2017/jan/03/record-sales-vinyl-hits-25-year-high-and-outstrips-streaming)，这不是个奇迹么？）只要看看在线 Feed 阅读器网站 Feedly 的成功，就能了解 RSS 阅读器仍然有市场。

事实是，RSS 和相关的 Feed 格式比任何广泛使用的尝试替换它的东西还要多才多艺。作为一名阅读消费者，对于我来说没有比它更简单的方法了，我可以阅读大量的出版信息，并且是用我选择的客户端格式化的，我可以确认看到发布的每一条内容，同时不会显示我已经阅读过的文章。而作为发布者，这是一种比我使用过的大多数发布软件都简单的格式，开箱即用，它可以让我的信息递交给更多的人，并且可以很容易地分发多种不同类型的文档格式。

所以 RSS 没有死。RSS 长存！我们最后一次是在 2013 年回顾了[开源 RSS 阅读器](https://opensource.com/life/13/6/open-source-rss)选择，现在是更新的时候了。这里是我关于 2017 年开源 RSS 订阅阅读器的一些最佳选择，每个在使用上稍微不同。

### Miniflux

![Screenshot](/data/attachment/album/201704/10/171821p6wx0qi3ih9qeher.png)

[Miniflux](https://miniflux.net/) 是一个极度简约的基于 Web 的 RSS 阅读器，但不要将其特意的轻设计与开发人员的懒惰混淆。它目的是构建一个简单而有效的设计。Miniflux 的思想似乎是将程序弱化，以便让读者可以专注于内容，在大量臃肿的 web 程序中我们会特别欣赏这一点。

但轻便并不意味着缺乏功能。其响应式设计在任何设备上看起来都很好，并可以使用主题、API 接口、多语言、固定书签等等。

Miniflux 的 [源代码](https://github.com/miniflux/miniflux)以 [GPLv3 Affero](https://github.com/miniflux/miniflux/blob/master/LICENSE) 许可证在 GitHub 中发布。如果你不想自行托管，则可以支付每年 15 美元的托管计划。

### RSSOwl

![RSSOwl Screenshot](/data/attachment/album/201704/10/171824hot2p6e27m7288ou.png)

[RSSOwl](http://www.rssowl.org/) 是一个跨平台的桌面 Feed 阅读器。它用 Java 编写，在风格和感觉上它像很多流行的桌面邮件客户端。它具有强大的过滤和搜索功能、可定制的通知，以及用于排序 Feed 的标签。 如果你习惯使用 Thunderbird 或其他桌面阅读器进行电子邮件发送，那么在 RSSOwl 中你会感到宾至如归。

可以在 GitHub 中找到 [Eclipse Public 许可证](https://github.com/rssowl/RSSOwl/blob/master/LICENSE)下发布的 [RSSOwl](https://github.com/rssowl/RSSOwl) 的源代码。

### Tickr

![](/data/attachment/album/201704/10/171827yh8oiad11re43od1.jpg)

[Tickr](https://www.open-tickr.net/) 在这个系列中有点不同。它是一个 Linux 桌面客户端，但它不是传统的浏览-阅读形式。相反，它会将你的 Feed 标题如滚动新闻那样在桌面横栏上滚动显示。对于想要从各种来源获得最新消息的新闻界来说，这是一个不错的选择。点击标题将在你选择的浏览器中打开它。它不像这个列表中的其他程序那样是专门的阅读客户端，但是如果比起阅读每篇文章，你对阅读标题更感兴趣，这是一个很好的选择。

Tickr 的源代码和二进制文件以 GPL 许可证的形式在这个[网站](https://www.open-tickr.net/download.php)上可以找到。

### Tiny Tiny RSS

![](/data/attachment/album/201704/10/171840ueyh5yos8chnhbyt.png)

如果缺少了 [Tiny Tiny RSS](https://tt-rss.org/gitlab/fox/tt-rss/wikis/home)，那么很难称之为这是一个现代化的 RSS 阅读器列表。它是最受欢迎的自主托管的基于 Web 的阅读器，它功能丰富：支持OPML 导入和导出、键盘快捷键、共享功能、主题界面、插件支持、过滤功能等等。

Tiny Tiny RSS 还有官方的 [Android客户端](https://tt-rss.org/gitlab/fox/tt-rss-android)，让你可以随时随地阅读。

Tiny Tiny RSS 的 [Web](https://tt-rss.org/gitlab/fox/tt-rss/tree/master) 版本和 [Android](https://tt-rss.org/gitlab/fox/tt-rss-android/tree/master) 源代码以 [GPLv3 许可](https://tt-rss.org/gitlab/fox/tt-rss-android/blob/master/COPYING) 在 GitLab 上发布。

### Winds

![](/data/attachment/album/201704/10/171257nbgnog2mq3txabqa.jpg)

[Winds](https://winds.getstream.io/) 是一个建立在 React 之上的看起来很现代化的自托管的 web 订阅阅读器。它利用称为 Stream 的机器学习个性化 API，帮助你根据当前的兴趣找到可能感兴趣的更多内容。这有一个在线显示版本，因此你可以在下载之前先[尝试](https://winds.getstream.io/app/getting-started)。这是一个只有几个月的新项目，也许评估它是否能取代我日常的 Feed 阅读器还太早，但这当然是一个我感兴趣关注的项目。

Winds 的[源代码](https://github.com/GetStream/Winds) 以 [MIT](https://github.com/GetStream/Winds/blob/master/LICENSE.md) 许可证在 GitHub 上发布。

---

这些当然不是仅有的选择。RSS 是一个相对易于解析、文档格式良好的格式，因此有许许多多因为不同的需求而建立的各种 Feed 阅读器。这有一个很长的自托管的开源 Feed 阅读器[列表](https://github.com/Kickball/awesome-selfhosted#feed-readers)，除了我们列出的之外你还可能会考虑使用它们。我们希望你能在下面的评论栏与我们分享你最喜欢的 RSS 阅读器。

你使用 RSS 阅读器么？你知道 Linux 中国一直就支持 RSS 阅读么？不知道的朋友，下面是我们的 RSS 地址，欢迎体验：

* 全文 RSS ： <https://linux.cn/rss.xml>
* 摘要 RSS ： <https://linux.cn/rss-digest.xml>
* 分类栏目 RSS
	+ 技术学习：<https://linux.cn/rss-tech.xml>
	+ 新闻快讯：<https://linux.cn/rss-news.xml>
	+ 观点热议：<https://linux.cn/rss-talk.xml>
	+ 软件分享：<https://linux.cn/rss-share.xml>

什么？你直接点击链接在浏览器打开了，感觉不会用？——虽然我们专门为 RSS 在浏览器中打开做了美化，但是你该用 RSS 阅读器来读啊，对，就是这篇文章介绍的这些，要不试试？

（题图来自：[Rob McDonald](https://www.flickr.com/photos/evokeartdesign/6002000807) on Flickr，由 Opensource.com 修改. [CC BY-SA 2.0](https://creativecommons.org/licenses/by/2.0/).）

---

作者简介：

Jason Baker - Jason 热衷于使用技术使世界更加开放，从软件开发到阳光政府行动。Linux 桌面爱好者、地图/地理空间爱好者、树莓派工匠、数据分析和可视化极客、偶尔的码农、云本土主义者。在 Twitter 上关注他 @jehb。

---

via: <https://opensource.com/article/17/3/rss-feed-readers>

作者：[Jason Baker](https://opensource.com/users/jason-baker) 译者：[geekpi](https://github.com/geekpi) 校对：[jasminepeng](https://github.com/jasminepeng)

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


如何在 CentOS、RHEL 和 Fedora 上安装 DHCP 服务

DHCP（Dynamic Host Configuration Protocol）是一个网络协议，它使得服务器能从预定义的 IP 池中为网络中的客户端节点自动分配 IP 地址并提供其它相关的网络配置参数。

这意味着每次客户端节点启动（连接到网络）的时候，它都会获得一个和从不改变的“静态” IP 地址相反的“动态” IP 地址。DHCP 服务器给 DHCP 客户端分配 IP 地址称为“租约”，租约时间随客户端需要的连接时间或 DHCP 的配置而异。

在这篇指南中，我们会介绍如何在 CentOS/RHEL 和 Fedora 发行版中安装和配置 DHCP 服务。

![](/data/attachment/album/201704/10/210212fa0vyfoadmrbtkto.jpg)

### 设置测试环境

本次安装中我们使用如下的测试环境：

* DHCP 服务器 - CentOS 7
* DHCP 客户端 - Fedora 25 和 Ubuntu 16.04

### DHCP 如何工作？

在进入下一步之前，让我们首先了解一下 DHCP 的工作流程：

* 当已连接到网络的客户端计算机（配置为使用 DHCP）启动时，它会发送一个 `DHCPDISCOVER` 消息到 DHCP 服务器。
* 当 DHCP 服务器接收到 `DHCPDISCOVER` 请求消息时，它会回复一个 `DHCPOFFER` 消息。
* 客户端收到 `DHCPOFFER` 消息后，它再发送给服务器一个 `DHCPREQUEST` 消息，表示客户端已准备好获取 `DHCPOFFER` 消息中提供的网络配置。
* 最后，DHCP 服务器收到客户端的 `DHCPREQUEST` 消息，并回复 `DHCPACK` 消息，表示允许客户端使用分配给它的 IP 地址。

### 第一步：在 CentOS 上安装 DHCP 服务

1、安装 DHCP 服务非常简单，只需要运行下面的命令即可。

```
$ yum -y install dhcp

```

重要：假如系统中有多个网卡，但你想只在其中一个网卡上启用 DHCP 服务，可以按照下面的步骤在该网卡上启用 DHCP 服务。

2、 打开文件 `/etc/sysconfig/dhcpd`，将指定网卡的名称添加到 `DHCPDARGS` 列表，假如网卡名称为 `eth0`，则添加：

```
DHCPDARGS=eth0

```

保存文件并退出 。

### 第二步：在 CentOS 上配置 DHCP 服务

3、 对于初学者来说，配置 DHCP 服务的第一步是创建 `dhcpd.conf` 配置文件，DHCP 主要配置文件一般是 `/etc/dhcp/dhcpd.conf`（默认情况下该文件为空），该文件保存了发送给客户端的所有网络信息。

但是，有一个样例配置文件 `/usr/share/doc/dhcp*/dhcpd.conf.sample`，这是配置 DHCP 服务的良好开始。

DHCP 配置文件中定义了两种类型的语句：

* 参数 - 说明如何执行任务、是否执行任务、或者给 DHCP 客户端发送什么网络配置选项。
* 声明 - 指定网络拓扑、定义客户端、提供客户端地址、或将一组参数应用于一组声明。

因此，首先复制示例配置文件为主配置文件：

```
$ cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

```

4、 然后，打开主配置文件并定义你的 DHCP 服务选项：

```
$ vi /etc/dhcp/dhcpd.conf

```

首先在文件开头设置以下应用于全部子网的全局参数（注意要使用你实际场景中的值）：

```
option domain-name "tecmint.lan";
option domain-name-servers ns1.tecmint.lan, ns2.tecmint.lan;
default-lease-time 3600;
max-lease-time 7200;
authoritative;

```

5、 然后，定义一个子网；在这个事例中，我们会为 `192.168.56.0/24` 局域网配置 DHCP（注意使用你实际场景中的值）：

```
subnet 192.168.56.0 netmask 255.255.255.0 {
option routers                  192.168.56.1;
option subnet-mask              255.255.255.0;
option domain-search            "tecmint.lan";
option domain-name-servers      192.168.56.1;
range   192.168.56.10   192.168.56.100;
range   192.168.56.120  192.168.56.200;
}

```

### 第三步：为 DHCP 客户端分配静态 IP

只需要在 `/etc/dhcp/dhcpd.conf` 文件中定义下面的部分，其中你必须显式指定它的 MAC 地址和打算分配的 IP，你就可以为网络中指定的客户端计算机分配一个静态 IP 地址：

```
host ubuntu-node {
hardware  ethernet 00:f0:m4:6y:89:0g;
fixed-address 192.168.56.105;
}
host fedora-node {
hardware  ethernet 00:4g:8h:13:8h:3a;
fixed-address 192.168.56.110;
}

```

保存文件并关闭。

注意：你可以使用下面的命令找到 Linux 的 MAC 地址。

```
$ ifconfig -a eth0 | grep HWaddr

```

6、 现在，使用下面的命令启动 DHCP 服务，并使在下次系统启动时自动启动：

```
---------- On CentOS/RHEL 7 ----------
$ systemctl start dhcpd
$ systemctl enable dhcpd
---------- On CentOS/RHEL 6 ----------
$ service dhcpd start
$ chkconfig dhcpd on

```

7、 另外，别忘了使用下面的命令允许 DHCP 服务通过防火墙（DHCPD 守护进程通过 UDP 监听67号端口）：

```
---------- On CentOS/RHEL 7 ----------
$ firewall-cmd --add-service=dhcp --permanent
$ firewall-cmd --reload
---------- On CentOS/RHEL 6 ----------
$ iptables -A INPUT -p tcp -m state --state NEW --dport 67 -j ACCEPT
$ service iptables save

```

### 第四步：配置 DHCP 客户端

8、 现在，你可以为网络中的客户端配置自动从 DHCP 服务器中获取 IP 地址。登录到客户端机器并按照下面的方式修改以太网接口的配置文件（注意网卡的名称和编号）：

```
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

```

添加下面的选项：

```
DEVICE=eth0
BOOTPROTO=dhcp
TYPE=Ethernet
ONBOOT=yes

```

保存文件并退出。

9、 你也可以在桌面服务器中按照下面的截图（Ubuntu 16.04桌面版）通过 GUI 设置 `Method` 为 `Automatic (DHCP)`。

![Set DHCP in Client Network](/data/attachment/album/201704/10/210218s5wt0qwhjqhjw598.png)

*在客户端网络中设置 DHCP*

10、 按照下面的命令重启网络服务（你也可以通过重启系统）：

```
---------- On CentOS/RHEL 7 ----------
$ systemctl restart network
---------- On CentOS/RHEL 6 ----------
$ service network restart

```

到了这里，如果所有设置都是正确的，你的客户端就应该能自动从 DHCP 服务器中获取 IP 地址。

你也可以阅读：

1. [如何在 Debian Linux 中安装和配置 Multihomed ISC DHCP 服务](http://www.tecmint.com/install-and-configure-multihomed-isc-dhcp-server-on-debian-linux/)
2. [配置网络的 10 个有用的 “IP” 命令](http://www.tecmint.com/ip-command-examples/)

在这篇文章中我们为你展示了如何在 RHEL/CentOS 中安装 DHCP 服务。在下面的评论框中给我们反馈吧。在接下来的文章中，我们还会为你展示如何在 Debian/Ubuntu 中安装 DHCP 服务。和 TecMint 保持联系。

---

作者简介：

Aaron Kili 是一个 Linux 和 F.O.S.S 的爱好者，即将推出的 Linux SysAdmin 网络开发人员，目前也是 TecMint 的内容创作者，他喜欢和电脑一起工作，并且坚信共享知识。

---

via: <http://www.tecmint.com/install-dhcp-server-in-centos-rhel-fedora/>

作者：[Aaron Kili](http://www.tecmint.com/author/aaronkili/) 译者：[ictlyh](https://github.com/ictlyh) 校对：[wxy](https://github.com/wxy)

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


bmon：Linux 下一个强大的网络带宽监视和调试工具

Summary: bmon 是类 Unix 系统中一个基于文本，简单但非常强大的 网络监视和调试工具，它能抓取网络相关统计信息并把它们以用户友好的格式展现出来。它是一个可靠高效的带宽监视和网速估测工具。

bmon 是类 Unix 系统中一个基于文本，简单但非常强大的 [网络监视和调试工具](/article-5435-1-rel.html)，它能抓取网络相关统计信息并把它们以用户友好的格式展现出来。它是一个可靠高效的带宽监视和网速估测工具。

它能使用各种输入模块读取输入，并以各种输出模式显示输出，包括交互式文本用户界面和用于脚本编写的可编程文本输出。

![](/data/attachment/album/201704/11/085007w2bsis5ppqbq34u5.jpg)

**推荐阅读：** [一大波你可能不知道的 Linux 网络工具](/article-5435-1.html)

### 在 Linux 上安装 bmon 带宽监视工具

几乎所有 Linux 发行版的默认仓库中都有 bmon 软件包，可以从默认包管理器中轻松安装，但可用的版本可能比较旧。

```
$ sudo yum install bmon      [On RHEL/CentOS/Fedora]
$ sudo dnf install bmon      [On Fedora 22+]
$ sudo apt-get install bmon  [On Debian/Ubuntu/Mint]

```

另外，你也可以从 <https://pkgs.org/download/bmon> 获取对应你 Linux 发行版的 `.rpm` 和 `.deb` 软件包。

如果你想要最新版本（例如版本 4.0）的 bmon，你需要通过下面的命令从源码构建。

**在 CentOS、RHEL 和 Fedora 中**

```
$ git clone https://github.com/tgraf/bmon.git
$ cd bmon
$ sudo yum install make libconfuse-devel libnl3-devel libnl-route3-devel ncurses-devel
$ sudo ./autogen.sh
$ sudo./configure
$ sudo make
$ sudo make install

```

**在 Debian、Ubuntu 和 Linux Mint 中**

```
$ git clone https://github.com/tgraf/bmon.git
$ cd bmon
$ sudo apt-get install build-essential make libconfuse-dev libnl-3-dev libnl-route-3-dev libncurses-dev pkg-config dh-autoreconf
$ sudo ./autogen.sh
$ sudo ./configure
$ sudo make
$ sudo make install

```

### 如何在 Linux 中使用 bmon 带宽监视工具

通过以下命令运行它（初学者说明：RX 表示每秒接收数据，TX 表示每秒发送数据）：

```
$ bmon

```

![bmon - Linux 带宽监视](/data/attachment/album/201704/11/085016jylmypmkkzqz6yyq.gif)

按 `d` 键可以查看更详细的带宽使用情况的图形化统计信息，参考下面的截图。

![bmon - Detailed Bandwidth Statistics](/data/attachment/album/201704/11/085016mg9nnfqoofjfye9k.gif)

按 `Shift + ?` 可以查看快速指南。再次按 `Shift + ?` 可以退出（指南）界面。

![bmon - 快速指南](/data/attachment/album/201704/11/085016ounbhapno0d6jvmd.png)

*bmon – 快速指南*

通过 `Up` 和 `Down` 箭头键可以查看特定网卡的统计信息。但是，要监视一个特定的网卡，你也可以像下面这样作为命令行参数指定。

**推荐阅读：** [监控 Linux 性能的 13 个工具](http://www.tecmint.com/linux-performance-monitoring-tools/)

选项 `-p` 指定了要显示的网卡，在下面的例子中，我们会监视网卡 `enp1s0`：

```
$ bmon -p enp1s0

```

![bmon - 监控以太网带宽](/data/attachment/album/201704/11/085017hzx63gm2ixmxtwlm.png)

*bmon – 监控以太网带宽*

要查看每秒位数而不是每秒字节数，可以像下面这样使用 `-b` 选项：

```
$ bmon -bp enp1s0

```

我们也可以像下面这样按秒指定刷新间隔时间：

```
$ bmon -r 5 -p enp1s0

```

### 如何使用 bmon 的输入模块

bmon 有很多能提供网卡统计数据的输入模块，其中包括：

1. netlink - 使用 Netlink 协议从内核中收集网卡和流量控制统计信息。这是默认的输入模块。
2. proc - 从 `/proc/net/dev` 文件读取网卡统计信息。它被认为是传统界面，且提供了向后兼容性。它是 Netlink 接口不可用时的备用模块。
3. dummy - 这是用于调试和测试的可编程输入模块。
4. null - 停用数据收集。

要查看关于某个模块的其余信息，可以像下面这样使用 `help` 选项调用它：

```
$ bmon -i netlink:help

```

下面的命令将启用 proc 输入模块运行 bmon：

```
$ bmon -i proc -p enp1s0

```

### 如何使用 bmon 输出模块

bmon 也使用输出模块显示或者导出上面输入模块收集的统计数据，输出模块包括：

1. curses - 这是一个交互式的文本用户界面，它提供实时的网上估计以及每个属性的图形化表示。这是默认的输出模块。
2. ascii - 这是用于用户查看的简单可编程文本输出。它能显示网卡列表、详细计数以及图形到控制台。当 curses 库不可用时这是默认的备选输出模块。
3. format - 这是完全脚本化的输出模式，供其它程序使用 - 意味着我们可以在后面的脚本和程序中使用它的输出值进行分析。
4. null - 停用输出。

像下面这样通过 `help` 选项获取更多的模块信息。

```
$ bmon -o curses:help

```

下面的命令会用 ascii 输出模式运行 bmon：

```
$ bmon -p enp1s0 -o ascii

```

![bmon - Ascii 输出模式](/data/attachment/album/201704/11/085017df7p2gyuy32yfg8x.png)

*bmon – Ascii 输出模式*

我们也可以用 format 输出模式，然后在脚本或者其它程序中使用获取的值：

```
$ bmon -p enp1s0 -o format

```

![bmon - Format 输出模式](/data/attachment/album/201704/11/085018fxeo2hgsigissgt2.png)

*bmon – Format 输出模式*

想要其它的使用信息、选项和事例，可以阅读 bmon 的 man 手册：

```
$ man bmon

```

访问 bmon 的 Github 仓库：<https://github.com/tgraf/bmon>。

就是这些，在不同场景下尝试 bmon 的多个功能吧，别忘了在下面的评论部分和我们分享你的想法。

---

作者简介：

Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者、Linux 系统管理员、网络开发人员，现在也是 TecMint 的内容创作者，他喜欢和电脑一起工作，坚信共享知识。

---

via: <http://www.tecmint.com/bmon-network-bandwidth-monitoring-debugging-linux/>

作者：[Aaron Kili](http://www.tecmint.com/author/aaronkili/) 译者：[ictlyh](https://github.com/ictlyh) 校对：[wxy](https://github.com/wxy)

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


Linux 命令行工具使用小贴士及技巧（四）

我为 cd .. 创建的别名是仿照 MS-DOS，少输一个空格。

alias cd..='cd ..'

此外还有

alias cls='printf "\033c"'

用于清屏，比 clear 少输两个字母，且实现方式类似 MS-DOS 的 cls。

alias gzip='gzip --keep'

压缩/解压文件后，保留输入文件

很赞！

不错不错！

Ctrl+L

直接cd,就是转到home目录，为啥还要多敲两个字母呢？

至于上级目录，看到别人是用

alias .. = 'cd ../'

alias ... = 'cd ../../'

也同样比bk2,3来的方便

到目前为止，在该系列指南中，我们已经讨论了 [cd -](/article-8335-1.html) 和 [pushd/popd 命令](/article-8371-1.html)的基本使用方法和相关细节，以及 [CDPATH 环境变量](/article-8387-1.html)。在这第四期、也是最后一期文章中，我们会讨论别名的概念以及你可以如何使用它们使你的命令行导航更加轻松和平稳。

![](/data/attachment/album/201704/11/091317jjjj0fs3017hz14s.jpg)

一如往常，在进入该指南的核心之前，值得指出本文中的所有命令以及展示的例子都在 Ubuntu 14.04LTS 中进行了测试。我们使用的命令行 shell 是 bash（4.3.11 版本）。

### Linux 中的命令行别名

按照外行人的定义，别名可以被认为是一个复杂命令或者一组命令（包括它们的参数和选项）的简称或缩写。所以基本上，使用别名，你可以为那些不那么容易书写/记忆的命令创建易于记忆的名称。

例如，下面的命令为 `cd ~` 命令创建别名 `home`：

```
alias home="cd ~"

```

这意味着现在在你的系统中无论何地，无论何时你想要回到你的主目录时，你可以很快地输入 `home` 然后按回车键实现。

关于 `alias` 命令，man 手册是这么描述的：

>
> alias 工具可以创建或者重定义别名定义，或者把现有别名定义输出到标准输出。别名定义提供了输入一个命令时应该被替换的字符串值
>
>
> 一个别名定义会影响当前 shell 的执行环境以及当前 shell 的所有子 shell 的执行环境。按照 IEEE Std 1003.1-2001 规定，别名定义不应该影响当前 shell 的父进程以及任何 shell 调用的程序环境。
>
>
>

那么，别名到底如何帮助命令行导航呢？这是一个简单的例子：

假设你正在 `/home/himanshu/projects/howtoforge` 目录工作，它包括很多子目录以及子子目录。例如下面就是一个完整的目录分支：

```
/home/himanshu/projects/howtoforge/command-line/navigation/tips-tricks/part4/final

```

现在想象你在 `final` 目录，然后你想回到 `tips-tricks` 目录，然后再从那里，回到 `howtoforge` 目录。你会怎么做呢？

是的，一般情况下，你会运行下面的一组命令：

```
cd ../..

cd ../../..

```

虽然这种方法并没有错误，但它绝对不方便，尤其是当你在一个很长的路径中想往回走例如说 5 个目录时。那么，有什么解决办法吗？答案就是：别名。

你可以做的是，为每个 `cd ..` 命令创建容易记忆（和书写）的别名。例如：

```
alias bk1="cd .."
alias bk2="cd ../.."
alias bk3="cd ../../.."
alias bk4="cd ../../../.."
alias bk5="cd ../../../../.."

```

现在无论你什么时候想从当前工作目录往回走，例如说 5 个目录，你只需要运行下面的命令：

```
bk5

```

现在这不是很简单吗？

### 相关细节

尽管当前我们在 shell 中用于定义别名的技术（通过使用 alias 命令）实现了效果，别名只存在于当前终端会话。很有可能你会希望你定义的别名能保存下来，使得此后你可以在任何新启动的命令行窗口/标签页中使用它们。

为此，你需要在 `~/.bash_aliases` 文件中定义你的别名，你的 `~/.bashrc` 文件默认会加载该文件（如果你使用更早版本的 Ubuntu，我没有验证过是否有效）。

下面是我的 `.bashrc` 文件中关于 `.bash_aliases` 文件的部分：

```
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
      . ~/.bash_aliases
fi

```

一旦你把别名定义添加到你的 `.bash_aliases` 文件，该别名在任何新终端中都可用。但是，在任何其它你定义别名时已经启动的终端中，你还不能使用它们 - 解决办法是在这些终端中重新加载 `.bashrc`。下面就是你需要执行的具体命令：

```
source ~/.bashrc

```

如果你觉得这要做的也太多了（是的，我期待你有更懒惰的办法），那么这里有一个快捷方式来做到这一切：

```
"alias [the-alias]" >> ~/.bash_aliases && source ~/.bash_aliases

```

毫无疑问，你需要用实际的命令替换 `[the-alias]`。例如：

```
"alias bk5='cd ../../../../..'" >> ~/.bash_aliases && source ~/.bash_aliases

```

接下来，假设你已经创建了一些别名，并时不时使用它们有一段时间了。突然有一天，你发现它们其中的一个并不像期望的那样。因此你觉得需要查看被赋予该别名的真正命令。你会怎么做呢？

当然，你可以打开你的 `.bash_aliases` 文件在那里看看，但这种方式可能有点费时，尤其是当文件中包括很多别名的时候。因此，如果你正在查找一种更简单的方式，这就有一个：你需要做的只是运行 `alias` 命令并把别名名称作为参数。

这里有个例子：

```
$ alias bk6
alias bk6='cd ../../../../../..'

```

你可以看到，上面提到的命令显示了被赋值给别名 `bk6` 的实际命令。这里还有另一种办法：使用 `type` 命令。下面是一个例子：

```
$ type bk6
bk6 is aliased to `cd ../../../../../..'

```

`type` 命令产生了一个易于人类理解的输出。

另一个值得分享的是你可以将别名用于常见的输入错误。例如：

```
alias mroe='more'

```

*最后，还值得注意的是并非每个人都喜欢使用别名。他们中的大部分人认为一旦你习惯了你为了简便而定义的别名，当你在其它相同而不存在别名（而且不允许你创建）的系统中工作时就会变得非常困难。更多（也是更准确的）为什么一些专家不推荐使用别名的原因，你到[这里](http://unix.stackexchange.com/questions/66934/why-is-aliasing-over-standard-commands-not-recommended)查看。*

### 总结

就像我们之前文章讨论过的 `CDPATH` 环境变量，别名也是一把应该谨慎使用的双刃剑。尽管如此也别太丧气，因为每个东西都有它自己的好处和劣势。遇到类似别名的概念时，更多的练习和完备的知识才是重点。

那么这就是该系列指南的最后章节。希望你喜欢它并能从中学到新的东西/概念。如果你有任何疑问或者问题，请在下面的评论框中和我们（以及其他人）分享。

---

via: <https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/>

作者：[Ansh](https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/) 译者：[ictlyh](https://github.com/ictlyh) 校对：[wxy](https://github.com/wxy)

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


什么是 Linux VPS 托管？

我觉得翻译的不太行啊

![what is linux vps hosting](/data/attachment/album/201704/11/113626i1t0fzvav6fl0l86.jpg)

如果你有一个吞吐量很大的网站，或者至少，预期网站吞吐量很大，那么你可以考虑使用 Linux VPS 托管 。如果你想对网站托管的服务器上安装的东西有更多控制，那么 Linux VPS 托管就是最好的选择之一。这里我会回答一些频繁被提及的关于 Linux VPS 托管的问题。

### Linux VPS 意味着什么？

基本上， **Linux VPS 就是一个运行在 Linux 系统上的<ruby> 虚拟专属服务器 <rp>  （ </rp> <rt>  virtual private server </rt> <rp>  ） </rp></ruby>**。虚拟专属服务器是一个在物理服务器上的虚拟服务主机。运行在物理主机的内存里的服务器就称之为虚拟服务器。物理主机可以轮流运行很多其他的虚拟专属服务器。

### 我必须和其他用户共享服务器吗？

一般是这样的。但这并不意味着下载时间变长或者服务器性能降低。每个虚拟服务器可以运行它自己的操作系统，这些系统之间可以相互独立的进行管理。一个虚拟专属服务器有它自己的操作系统、数据、应用程序；它们都与物理主机和其他虚拟服务器中的操作系统、应用程序、数据相互分离。

尽管必须和其他虚拟专属服务器共享物理主机，但是你却可以不需花费大价钱就可以得到一个昂贵专用服务器的诸多好处。

### Linux VPS 托管的优势是什么？

使用 Linux VPS 托管服务会有很多的优势，包括容易使用、安全性增加以及在更低的总体成本上提高可靠性。然而，对于大多数网站管理者、程序员、设计者和开发者来说，使用 Linux VPS 托管服务的最大的优势是它的灵活性。每个虚拟专属服务器都和它所在的操作环境相互隔离，这意味着你可以容易且安全的安装一个你喜欢或者需要的操作系统 — 本例中是 Linux — 任何想要做的时候，你还可以很容易的卸载或者安装软件及应用程序。

你也可以更改你的 VPS 环境以适应你的性能需求，同样也可以提高你的网站用户或访客的体验。灵活性会是你超越对手的主要优势。

记住，一些 Linux VPS 提供商可能不会给你对你的 Linux VPS 完全的 root 访问权限。这样你的功能就会受到限制。要确定你得到的是 拥有 root 权限的 Linux VPS ，这样你就可以做任何你想做的修改。

### 任何人都可以使用 Linux VPS 托管吗？

当然，即使你运行一个专门的个人兴趣博客，你也可以从 Linux VPS 托管中受益。如果你为公司搭建、开发一个网站，你也会获益匪浅。基本上，如果你想使你的网站更健壮并且增加它的网络吞吐量，那么 Linux VPS 就是为你而生。

在定制和开发中需要很大的灵活性的个人和企业，特别是那些正在寻找不使用专用服务器就能得到高性能和服务的人们，绝对应该选择 Linux VPS，因为专用服务器会消耗大量的网站运营成本。

### 不会使用 Linux 也可以使用 Linux VPS 吗？

当然，如果 Linux VPS 由你管理，你的 VPS 提供商会为你管理整个服务器。更有可能，他们将会为你安装、配置一切你想要运行在 Linux VPS 上的服务。

对于新手来说，另一个简化 Linux VPS 使用的方式是得到一个带有 cPanel、DirectAdmin 或者任何 其他托管控制面板的 VPS。如果你使用控制面板，就可以通过一个图形界面管理你的服务器，尤其对于新手，它是很容易使用的。虽然使用命令行管理 Linux VPS 很有趣，而且那样做可以学到很多。

### Linux VPS 和专用服务器有什么不同？

如前所述，一个虚拟专属服务器仅仅是在物理主机上的一个虚拟分区。物理服务器被分为多个虚拟服务器，这些虚拟服务器用户可以分担降低成本和开销。这就是 Linux VPS 相比一个 专用服务器 更加便宜的原因，专用服务器的字面意思就是指只有一个用户专用。想要知道关于更多不同点的细节，可以查看 [物理服务器（专用）与 虚拟服务器(VPS) 比较](https://www.rosehosting.com/blog/physical-server-vs-virtual-server-all-you-need-to-know/)。

除了比专用服务器有更好的成本效益，Linux 虚拟专属服务器经常运行在比专用服务器的性能更强大的主机上，因此其性能和容量常常比专用服务器更大。

### 我可以把网站从共享托管环境迁移到到 Linux VPS 上吗？

如果你当前使用<ruby> 共享托管服务 <rp>  （ </rp> <rt>  shared hosting </rt> <rp>  ） </rp></ruby>，你可以很容易的迁移到 Linux VPS 上。一种做法就是 [**您自己做**](https://www.rosehosting.com/blog/from-shared-to-vps-hosting/)，但是迁移过程有点复杂，不建议新手使用。最好的方法是找到一个提供 免费网站迁移 的主机，然后让他们帮你完成迁移。你还可以从一个带有控制面板的共享主机迁移到一个不带有控制面板的 Linux VPS 。

### 更多问题？

欢迎随时在下面留下评论。

PS. 如果你喜欢这个专栏，请把它分享给你的彭友，或者你也可以在下面的评论区写下你的答复。谢谢。

---

via: <https://www.rosehosting.com/blog/what-is-linux-vps-hosting/>

作者：[https://www.rosehosting.com](https://www.rosehosting.com/blog/what-is-linux-vps-hosting/)  译者：[vim-kakali](https://github.com/vim-kakali) 校对：[jasminepeng](https://github.com/jasminepeng)

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


NMAP 常用扫描简介（二）

Summary: 之前我们介绍过两种扫描类型 PING 扫描 和 UDP 扫描，这篇文章将介绍最后剩下的两种常用扫描类型：TCP SYN 扫描和 TCP Connect() 扫描。

在我们之前的 [NMAP 安装](https://www.linuxforum.com/threads/nmap-installation.3431/)一文中，列出了 10 种不同的 ZeNMAP 扫描模式，大多数的模式使用了不同的参数。各种不同参数代表执行不同的扫描模式。之前我们[介绍过](/article-8346-1.html)两种扫描类型 PING 扫描 和 UDP 扫描，这篇文章将介绍最后剩下的两种常用扫描类型。

### 四种通用扫描类型

下面列出了最常用的四种扫描类型：

1. PING 扫描（`-sP`）
2. TCP SYN 扫描（`-sS`）
3. TCP Connect() 扫描（`-sT`）
4. UDP 扫描（`-sU`）

当我们利用 NMAP 来执行扫描的时候，这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么，并且需要知道这些命令是怎么做的。在这篇文章中将介绍两种 TCP 扫描 — TCP SYN 扫描和 TCP Connect() 扫描。

![](/data/attachment/album/201704/12/102525i17nn5ddkq11nysz.jpg)

### TCP SYN 扫描 （-sS）

TCP SYN 扫描是默认的 NMAP 扫描方式。为了运行 TCP SYN 扫描，你需要有 Root 权限。

TCP SYN 扫描的目的是找到被扫描系统上的已开启端口。使用 NMAP 扫描可以扫描在防火墙另一侧的系统。当扫描通过防火墙时，扫描时间会延长，因为数据包会变慢。

TCP SYN 扫描的工作方式是启动一个“三次握手”。正如在另一篇文章中所述，“三次握手”发生在两个系统之间。首先，源系统发送一个包到目标系统，这是一个同步（SYN）请求。然后，目标系统将通过同步/应答（SYN/ACK）响应。接下来，源系统将通过应答（ACK）来响应，从而建立起一个通信连接，然后，可以在两个系统之间传输数据。

TCP SYN 扫描通过执行下面的步骤来进行工作：

1. 源系统向目标系统发送一个同步请求，该请求中包含一个端口号。
2. 如果添加在上一步中的所请求的端口号是开启的，那么目标系统将通过同步/应答（SYN/ACK）来响应源系统。
3. 源系统通过重置（RST）来响应目标系统，从而断开连接。
4. 目标系统可以通过重置/应答（RST/ACK）来响应源系统。

这种连接已经开始建立，所以这被认为是半开放连接。因为连接状态是由 NMAP 来管理的，所以你需要有 Root 权限。

如果被扫描的端口是关闭的，那么将执行下面的步骤：

1. 源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。
2. 目标系统通过重置（RST）响应源系统，因为该端口是关闭的。

如果目标系统处于防火墙之后，那么 ICMP 传输或响应会被防火墙禁止，此时，会执行下面的步骤：

1. 源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。
2. 没有任何响应，因为请求被防火墙过滤了。

在这种情况下，端口可能是被过滤、或者可能打开、或者可能没打开。防火墙可以设置禁止指定端口所有包的传出。防火墙可以禁止所有传入某个指定端口的包，因此目标系统不会接收到请求。

**注：**无响应可能发生在一个启用了防火墙的系统上。即使在本地网络，你也可能会发现被过滤的端口。

我将向 图片１那样执行对单一系统（10.0.0.2）的 TCP SYN 扫描。使用命令 `sudo nmap -sS <IP 地址>` 来执行扫描。`<IP 地址>`可以改为一个单一 IP 地址，像图片１那样，也可以使用一组 IP 地址。

![Figure 01.jpg](/data/attachment/album/201704/12/102535gew30pai7fl9xzff.jpg)

*图片１*

你可以看到它表明 997 个被过滤端口没有显示在下面。NMAP 找到两个开启的端口：139 和 445 。

**注：**请记住，NMAP 只会扫描绝大多数熟知的 1000 多个端口。以后，我们会介绍可以扫描所有端口或者指定端口的其它扫描。

该扫描会被 WireShark 俘获，正如图片２所展示的那样。在这儿，你可以看到对目标系统的初始地址解析协议（ARP）请求。在 ARP 请求下面的是一长列到达目标系统端口的 TCP 请求。第 4 行是到达 `http-alt` 端口（8080）。源系统的端口号为 47128 。正如图片３ 展示的，许多 SYN 请求只有在做出响应以后才会发送。

![Figure 2.jpg](/data/attachment/album/201704/12/102538enfkt1762a289f98.jpg)

*图片２*

![Figure 3.jpg](/data/attachment/album/201704/12/102541v38443chtmhccgp0.jpg)

*图片３*

在图片３的第 50 行和第 51 行，你可以看到，重置（RST）包被发送给了目标系统。第 53 行和第 55 行显示目标系统的 RST/ACK（重置/应答）。第 50 行是针对 ‘microsoft-ds’ 端口（445），第 51 行是针对 ‘netbios-ssn’ 端口（135），我们可以看到，这两个端口都是打开的。（LCTT 译注：在 50 行和 51 行之前，目标系统发回了 SYN/ACK 响应，表示端口打开。）除了这些端口，没有其他 ACK（应答）是来自目标系统的。每一个请求均可发送超过 1000 次。

正如图片４所展示的，目标系统是 Windows 系统，我关闭了系统防火墙，然后再次执行扫描。现在，我们看到了 997 个已关闭端口不是 997 个被过滤端口。目标系统上的 135 端口之前被防火墙禁止了，现在也是开启的。

![Figure 04.jpg](/data/attachment/album/201704/12/102543naj1zdmudw5oo1wd.jpg)

*图片４*

### TCP Connect() 扫描 （-sT）

尽管 TCP SYN 扫描需要 Root 权限，但 TCP Connect() 扫描并不需要。在这种扫描中会执行一个完整的“三次握手”。因为不需要 Root 权限，所以在无法获取 Root 权限的网络上，这种扫描非常有用。

TCP Connect() 扫描的工作方式也是执行“三次握手”。正如上面描述过的，“三次握手”发生在两个系统之间。源系统发送一个同步（SYN）请求到目标系统。然后，目标系统将通过同步／应答（SYN/ACK）来响应。最后，源系统通过应答（ACK）来响应，从而建立起连接，然后便可在两个系统之间传输数据。

TCP Connect 扫描通过执行下面的步骤来工作：

1. 源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。
2. 如果上一步所请求的端口是开启的，那么目标系统将通过同步/应答（SYN/ACK）来响应源系统。
3. 源系统通过应答（ACK）来响应目标系统从而完成会话创建。
4. 然后，源系统向目标系统发送一个重置（RST）包来关闭会话。
5. 目标系统可以通过同步/应答（SYN/ACK）来响应源系统。

若步骤 2 执行了，那么源系统就知道在步骤 1 中的指定端口是开启的。

如果端口是关闭的，那么会发生和 TCP SYN 扫描相同的事。在步骤 2 中，目标系统将会通过一个重置（RST）包来响应源系统。

可以使用命令 `nmap -sT <IP 地址>` 来执行扫描。`<IP 地址>`可以改为一个单一 IP 地址，像图片５那样，或者使用一组 IP 地址。

TCP Connect() 扫描的结果可以在图片５中看到。在这儿，你可以看到，有两个已开启端口：139 和 445，这和 TCP SYN 扫描的发现一样。端口 80 是关闭的。剩下没有显示的端口是被过滤了的。

![Figure 05.jpg](/data/attachment/album/201704/12/102545vq5fjldgl9798t25.jpg)

*图片５*

让我们关闭防火墙以后再重新扫描一次，扫描结果展示在图片６中。

![Figure 06.jpg](/data/attachment/album/201704/12/102547v0acvivs003cuzin.jpg)

*图片６*

关闭防火墙以后，我们可以看到，更多的端口被发现了。就和 TCP SYN 扫描一样，关闭防火墙以后，发现 139 端口和 445 端口是开启的。我们还发现，端口 2869 也是开启的。也发现有 996 个端口是关闭的。现在，端口 80 是 996 个已关闭端口的一部分 — 不再被防火墙过滤。

在一些情况下， TCP Connect() 扫描可以在一个更短的时间内完成。和 TCP SYN 扫描相比，TCP Connect() 扫描也可以找到更多的已开启端口

---

via: <https://www.linuxforum.com/threads/nmap-common-scans-part-two.3879/>

作者：[Jarret](https://www.linuxforum.com/members/jarret.268/) 译者：[ucasFL](https://github.com/ucasFL) 校对：[wxy](https://github.com/wxy)

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