通过安装扩展让 KDE Plasma 5 桌面看起来感觉就像 Windows 10 桌面

用Linux为什么就非要仿win10呢？很是不懂你们年轻人

这么丑。。

来自广东广州广东工贸职业技术学院的 Firefox 50.0|GNU/Linux 用户

风格没统一，看起来就是变扭。<br />
不要只为模仿。我觉得有自己的特色不是很好吗

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

KDE这点不好，看起来总不协调，不统一

KDE Plasma 5 风格还是很统一的，默认有亮色和暗色主题，并且对 GTK 程序风格的支持也很好。反倒是 Xfce 的风格不是很统一。

都用Linux了为什么还要仿win10啊

。

。

。

。

。

。

。

。

要仿也是仿mac啊

萝卜白菜各有所爱

萝卜白菜各有所爱

Linux的宗旨是什么？自由<br />
那么我高兴把系统弄成Win10的样子，就弄成Win10；我高兴把系统弄成Mac的样子，就弄成Mac的样子；我高兴把系统弄成什么样子是我的自由。这才是自由啊！

自由软件不是自由

KDE本身就挺好看的

没觉得win10界面有多好看。。

KDE本身就挺好看的。没必要搞成windows的式样。

![kde-plasma-to-windows-10](/data/attachment/album/201611/20/111647cq6ka42vkdcaiaa4.jpg)

通过一些步骤，我将告诉你如何把 KDE Plasma 5 桌面变成 Windows 10 桌面。

除了菜单， KDE Plasma 桌面的许多地方已经和 Win 10 桌面非常像了。因此，只需要一点点改动就可以使二者看起来几乎是一样。

### 开始菜单

让 KDE Plasma 桌面看起来像 Win 10 桌面的首要以及可能最有标志性的环节是实现 Win 10 的 ‘开始’ 菜单。

通过安装 [Zren's Tiled Menu](https://github.com/Zren/plasma-applets/tree/master/tiledmenu)，这很容易实现。

#### 安装

1、 在 KDE Plasma 桌面上单击右键 -><ruby> 解锁窗口部件 <rp>  （ </rp> <rt>  Unlock Widgets </rt> <rp>  ） </rp></ruby>

2、 在 KDE Plasma 桌面上单击右键 -> <ruby> 增添窗口部件 <rp>  （ </rp> <rt>  Add Widgets </rt> <rp>  ） </rp></ruby>

3、 获取新窗口部件 -> <ruby> 下载新的 Plasma 窗口部件 <rp>  （ </rp> <rt>  Download New Plasma Widgets </rt> <rp>  ） </rp></ruby>

4、 搜索“Tiled Menu” -> <ruby> 安装 <rp>  （ </rp> <rt>  Install </rt> <rp>  ） </rp></ruby>

#### 激活

1、 在你当前的菜单按钮上单击右键 -> <ruby> 替代…… <rp>  （ </rp> <rt>  Alternatives… </rt> <rp>  ） </rp></ruby>

2、 选择 "TIled Mune" ->点击<ruby> 切换 <rp>  （ </rp> <rt>  Switch </rt> <rp>  ） </rp></ruby>

![](/data/attachment/album/201611/20/111829kpjnw3pz3rduqdsy.jpg)

*KDE Tiled 菜单扩展*

### 主题

弄好菜单以后，下一个你可能需要的就是主题。幸运的是， [K10ne](https://store.kde.org/p/1153465/) 提供了一个 WIn 10 主题体验。

#### 安装：

1、 从 Plasma 桌面菜单打开“<ruby> 系统设置 <rp>  （ </rp> <rt>  System Settings </rt> <rp>  ） </rp></ruby>” -> <ruby> 工作空间主题 <rp>  （ </rp> <rt>  Workspace Theme </rt> <rp>  ） </rp></ruby>

2、 从侧边栏选择“<ruby> 桌面主题 <rp>  （ </rp> <rt>  Desktop Theme </rt> <rp>  ） </rp></ruby>” -> <ruby> 获取新主题 <rp>  （ </rp> <rt>  Get new Theme </rt> <rp>  ） </rp></ruby>

3、 搜索“K10ne” -> <ruby> 安装 <rp>  （ </rp> <rt>  Install </rt> <rp>  ） </rp></ruby>

#### 激活

1、 从 Plasma 桌面菜单选择“<ruby> 系统设置 <rp>  （ </rp> <rt>  System Settings </rt> <rp>  ） </rp></ruby>” -> <ruby> 工作空间主题 <rp>  （ </rp> <rt>  Workspace Theme </rt> <rp>  ） </rp></ruby>

2、 从侧边栏选择“<ruby> 桌面主题 <rp>  （ </rp> <rt>  Desktop Theme </rt> <rp>  ） </rp></ruby>” -> “K10ne”

3、 <ruby> 应用 <rp>  （ </rp> <rt>  Apply </rt> <rp>  ） </rp></ruby>

### 任务栏

最后，为了有一个更加完整的体验，你可能也想拥有一个更加 Win 10 风格的任务栏，

这次，你需要的安装包，叫做“Icons-only Task Manager”， 在大多数 Linux 发行版中，通常会默认安装。如果没有安装，需要通过你的系统的合适通道来获取它。

#### 激活

1、在 Plasma 桌面上单击右键 -> <ruby> 打开窗口部件 <rp>  （ </rp> <rt>  Unlock Widgets </rt> <rp>  ） </rp></ruby>

2、在 Plasma 桌面上单击右键 -> <ruby> 增添部件 <rp>  （ </rp> <rt>  Add Widgets </rt> <rp>  ） </rp></ruby>

3、把“Icons-only Task Manager”拖放到你的桌面面板的合适位置。

---

via: <https://iwf1.com/make-kde-plasma-5-desktop-look-feel-like-windows-10-using-these-extensions/>

作者：[Liron](https://iwf1.com/tag/linux) 译者：[ucasFL](https://github.com/ucasFL) 校对：[wxy](https://github.com/wxy)

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


Ubuntu 14.04/16.04 与 Windows 10 周年版 Ubuntu Bash 性能对比

如果能在WIN10上用所有UB的软件，可真是件天大的好事~

该文章分页了，所以rss没有全文输出。阅读器里看不到下文，很是遗憾。

可以通过 w3m 加载其打印链接(就是带有 ?pr 字样的 QueryString)。这样可以实现全文显示。当然只是图片显示稍微有些麻烦。

所有 UB 的软件，这种说法可能不是很恰当，应该是面向 Ubuntu 打包的软件。

文章分页……<br />
时代已经过去了

分页的原因是，这个文章图片太多，有时候会严重影响阅读速度，否则不会特例。

很多用户不肯尝试linux是因为其应用少，比如该死的QQ，win本来就慢，再把linux作为子系统，我认为这纯是微软的阴谋。因此，如果linux能完全使用win应用的话，那win就离死不远了，呵呵

最新的我不知道，我只知道几个月前用WSL发送socket消息时好时坏，这玩意别当真了

那么要不要来一打win10玩玩呢

测试其实说明了Windows的磁盘读写速度较Ubuntu慢，可能是Windows磁盘读写中校验方法的不同造成的，在保证安全的基础上还有改进的空间；另外在内存读写上Windows则较Ubuntu有更快的速度，可能在于Windows的系统内核比Ubuntu更为精炼，未来从X子系统过渡到wayland后可能会得到进一步的提升。

为此装了win10玩了下，只能说只能玩玩。。。想拿这个做事还是省省吧，效率太低了，各种卡逼

然而我只用XP

嚯

我想转载到我的csdn博客，会标明转载，请问可以吗

当然可以，标明原文、译文地址、作者、译者即可。

![](/data/attachment/album/201611/20/143753p2fxxffoloax72ar.png)

今年初，当 Microsoft 和 Canonical 发布 [Windows 10 Bash 和 Ubuntu 用户空间](http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-User-Space-On-Win10)，我尝试做了一些初步性能测试 [Ubuntu on Windows 10 对比 原生 Ubuntu](http://www.phoronix.com/scan.php?page=article&item=windows-10-lxcore&num=1)，这次我发布更多的，关于原生纯净的 Ubuntu 和基于 Windows 10 的基准对比。

![Windows 的 Linux 子系统](/data/attachment/album/201611/20/143929q6ttej7enjjzs1rw.jpeg)

Windows 的 Linux 子系统测试完成了所有测试，并随着 Windows 10周年更新放出。 默认的 Ubuntu 用户空间还是 Ubuntu 14.04，但是已经可以升级到 16.04。所以测试首先在 14.04 测试，完成后将系统升级升级到 16.04 版本并重复所有测试。完成所有基于 Windows 的 Ubuntu 子系统测试后，我在同样的系统上干净地安装了 Ubuntu 14.04.5 和 Ubuntu 16.04 LTS 来做性能对比。

![Ubuntu](/data/attachment/album/201611/20/144254dmzmwrjwyiumw965.jpeg)

配置为 Intel i5 6600K Skylake，16G 内存和 256G 东芝 ssd，测试过程中每个操作系统都采用其原生默认配置和软件包。

![](/data/attachment/album/201611/20/144334jhyi3z4uvh4ypmi2.jpg)

*http://openbenchmarking.org/embed.php?i=1608096-LO-BASHWINDO87&sha=09989b3&p=2*

这次 Ubuntu/Bash on Windows 和原生 Ubuntu 对比测试，采用开源软件 [Phoronix 测试套件](http://www.phoronix-test-suite.com/)，完全自动化并可重复测试。

![SQLite 嵌入式数据库基准测试](/data/attachment/album/201611/20/144514filhiz4ihgjrsvjj.jpg)

首先是 SQLite 嵌入式数据库基准测试。这方面开箱即用的 Ubuntu/Bash on Windows 性能是相当的慢，但是如果将环境从 14.04 升级到 16.04 LTS，性能会快很多。然而，对于繁重磁盘操作的任务，原生 Ubuntu Linux 几乎比 Windows 的子系统 Linux 快了近 2 倍。

![编译测试：编译](/data/attachment/album/201611/20/144744s3hh3hbidhlc5dqu.jpg)

![编译测试：初始创建](/data/attachment/album/201611/20/144826tgl9g99ige4ggk8d.jpg)

编译测试作为额外的繁重磁盘操作测试显示，定制的 Windows 子系统真的成倍的限制了 Ubuntu 性能。

接下来，是一些使用 Stream 的基本的系统内存速度测试：

![Stream：复制](/data/attachment/album/201611/20/144949jgyjzui445x35cek.jpg)

![Stream：缩放](/data/attachment/album/201611/20/145005qni74edeeabmqb8b.jpg)

![Stream：添加](/data/attachment/album/201611/20/145023z3gtedtbqenjyqn3.jpg)

奇怪的是，这些 Stream 内存的基准测试显示 Ubuntu on Windows 的性能比原生的 Ubuntu 好！这个现象同时发生在基于同样的 Windows 却环境不同的 14.04 和 16.04 LTS 上。

接下来，是一些繁重 CPU 操作测试。

![Dolfyn 科学测试](/data/attachment/album/201611/20/145132pzgkprcsz3wctyey.jpg)

通过 Dolfyn 科学测试，Ubuntu On Windows 和原生 Ubuntu 之间的性能其实是相当接近的。 对于 Ubuntu 16.04，由于较新的 GCC 编译器性能衰减，两个平台上的性能都较慢。

![Fhourstones 测试](/data/attachment/album/201611/20/145152kjuzdeiiey9i9dzu.jpg)

![John The Ripper 测试](/data/attachment/album/201611/20/145208e6qp77mvfsvmigkj.jpg)

透过 Fhourstones 测试和 John The Ripper 测试表明，通过在 Windows 的 Linux 子系统运行的 Ubuntu 的性能可以非常接近裸机 Ubuntu Linux 性能！

![x264 测试：H264视频编码](/data/attachment/album/201611/20/145326q5m7cbkum1gg8euk.jpg)

类似于 Stream 测试，x264 结果是另一个奇怪的情况，其中最好的性能实际上是使用 Linux 子系统的 Ubuntu On Windows！

![Linux 内核编译时间](/data/attachment/album/201611/20/145343xdqh8dhq8qqa8lzq.jpg)

![PHP 编译时间](/data/attachment/album/201611/20/145400r8ox44gi3ibggw33.jpg)

计时编译基准测试非常利于裸机 Ubuntu Linux。这是应该是由于大型程序编译需要大量读写磁盘，在先前测试已经发现了，这是基于 Windows 的 Linux 子系统缓慢的一大领域。

![Crafty](/data/attachment/album/201611/20/145521w5zm5czjc60sg9dj.jpg)

![FLAC 音频编码](/data/attachment/album/201611/20/145544j2bjmsb6pmvmv0pr.jpg)

![OpenSSL](/data/attachment/album/201611/20/145601ew3pahzbb8j9ess8.jpg)

许多其他的通用开源基准测试表明，严格的针对 CPU 的测试，Windows 子系统的 Ubuntu 的性能是很接近的，甚至是与原生安装在实际硬件中的 Ubuntu Linux 相等。

最新的 Windows 的 Linux 子系统，测试结果实际上相当令人印象深刻。让人沮丧的仅仅只是持续缓慢的磁盘/文件系统性能，但是对于受 CPU 限制的工作负载，结果是非常引人注目的。还有很罕见的情况， x264 和 Stream 测试，Ubuntu On Windows 上的性能看起来明显优于运行在实际硬件上 的Ubuntu Linux。

总的来说，体验是十分愉快的，并且在 Ubuntu/Bash on Windows 也没有遇到任何其他的 bug。如果你有还兴趣了解更多关于 Windows 和 Linux 的基准测试，欢迎留言讨论。

---

via: <https://www.phoronix.com/scan.php?page=article&item=windows10-anv-wsl&num=1>

作者：[Michael Larabel](http://www.michaellarabel.com/) 译者：[VicYu/Vic020](http://vicyu.net) 校对：[wxy](https://github.com/wxy)

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


如何在 Linux 中恢复一个删除了的文件

從其他地方看來的

# 如果要恢復文件, 可以在通過

lsof

# 獲得刪除文件信息後, 進入到

# 該進程的

/proc/PID/fd

# 然後用

cp src dst

# 或

cat src > dst

# 進行恢復.

这是一个方法。

这个软件用来恢复图片，其它的文件类型行吗？

我是在.bashrc里面添加

alias rm='mv -f --target-directory=/home/levin/.local/share/Trash/files/

删除时就是把文件移动到了目标文件夹 目标文件夹是我的文件管理器的垃圾桶的目标位置。

不错！

可以使用 gvfs-trash 来代替rm, 可以在 ~/.bashrc 文件里添加如下语句:

alias rm="gvfs-trash"

要恢复删除的文件，可以使用 restore-trash 命令, 该工具在 Ubuntu 中默认没有安装，可以执行下面的命令安装:

$ sudo apt-get install trash-cli

你曾经是否遇到这样的事？当你发现的时候，你已经通过删除键，或者在命令行中使用 `rm` 命令，错误的删除了一个不该删除的文件。

在第一种情况下，你可以到垃圾箱，[搜索那个文件](http://www.tecmint.com/linux-find-command-to-search-multiple-filenames-extensions/)，然后把它复原到原始位置。但是第二种情况又该怎么办呢？你可能知道，Linux 命令行不会把删除的文件转移到任何位置，而是直接把它们移除了，biu~，它们就不复存在了。

在这篇文章里，将分享一个很有用的技巧来避免此事发生。同时，也会分享一个工具，不小心删除了某些不该删除的文件时，也许用得上。

![](/data/attachment/album/201611/21/173028cuiyslcgwtttcffp.png)

### 把删除创建为 `rm -i` 的别名

当 `-i` 选项配合 `rm` 命令（也包括其他[文件处理命令比如 cp 或者 mv](http://www.tecmint.com/progress-monitor-check-progress-of-linux-commands/)）使用时，在删除文件前会出现一个提示。

这同样也可以运用到当[复制，移动或重命名一个文件](http://www.tecmint.com/rename-multiple-files-in-linux/)，当所在位置已经存在一个和目标文件同名的文件时。

这个提示会给你第二次机会来考虑是否真的要删除该文件 - 如果你在这个提示上选择确定，那么文件就被删除了。这种情况下，很抱歉，这个技巧并不能防止你的粗心大意。

为了 `rm -i` 别名替代 `rm` ，这样做：

```
alias rm='rm -i'

```

运行 `alias` 命令可以确定 `rm` 现在已经被别名了：

![增加 rm 别名的命令](/data/attachment/album/201611/21/173116rtvjzm9781fdtt1b.png)

*为 rm 增加别名*

然而，这只能在当前用户的当前 shell 上有效。为了永久改变，你必须像下面展示的这样把它保存到　`~/.bashrc`　中（一些版本的　Linux 系统可能是　`~/.profile`）。

![在 Linux 中永久增添别名](/data/attachment/album/201611/21/173116ov411vtdfs7m4a4u.png)

*在 Linux 中永久增添别名*

为了让 `~/.bashrc`（或 `~/.profile`）中所做的改变立即生效，从当前 shell 中运行文件：

```
. ~/.bashrc

```

![在 Linux 中激活别名](/data/attachment/album/201611/21/173117md1voc8siyedojzz.png)

*在 Linux 中激活别名*

### 取证工具－Foremost

但愿你对于你的文件足够小心，当你要从外部磁盘或 USB 设备中恢复丢失的文件时，你只需使用这个工具即可。

然而，当你意识到你意外的删除了系统中的一个文件并感到恐慌时－不用担心。让我们来看一看 `foremost`，一个用来处理这种状况的取证工具。

要在 CentOS/RHEL 7　中安装　Foremost，需要首先启用 Repoforge：

```
# rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# yum install foremost

```

然而在 Debian 及其衍生系统中，需这样做：

```
# aptitude install foremost

```

安装完成后，我们做一个简单的测试吧。首先删除 `/boot/images` 目录下一个名为 `nosdos.jpg` 的图像文件：

```
# cd images
# rm nosdos.jpg

```

要恢复这个文件，如下所示使用 `foremost`（要先确认所在分区 - 本例中， `/boot` 位于 `/dev/sda1` 分区中）。

```
# foremost -t jpg -i /dev/sda1 -o /home/gacanepa/rescued

```

其中，`/home/gacanepa/rescued` 是另外一个磁盘中的目录 － 请记住，把文件恢复到被删除文件所在的磁盘中不是一个明智的做法。

如果在恢复过程中，占用了被删除文件之前所在的磁盘分区，就可能无法恢复文件。另外，进行文件恢复操作前不要做任何其他操作。

当 `foremost` 执行完成以后，恢复的文件（如果可以恢复）将能够在目录 ·/home/gacanepa/rescue/jpg` 中找到。

### 总结

在这篇文章中，我们阐述了如何避免意外删除一个不该删除的文件，以及万一这类事情发生，如何恢复文件。还要警告一下， `foremost` 可能运行很长时间，时间长短取决于分区的大小。

如果您有什么问题或想法，和往常一样，不要犹豫，告诉我们。可以给我们留言。

---

via: <http://www.tecmint.com/recover-deleted-file-in-linux/>

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

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


如何使用 Apache 控制命令检查它的模块是否已经启用或加载

值得学习

谢谢分享

本篇中，我们会简要地讨论 Apache 服务器前端以及如何列出或查看已经启用的 Apache 模块。

![](/data/attachment/album/201611/21/181649vvviv9ctcu9vwfi9.jpg)

Apache 基于模块化的理念而构建，这样就可以让 web 管理员添加不同的模块来扩展主要的功能及[增强性能](http://www.tecmint.com/apache-performance-tuning/)。

常见的 Apache 模块有：

1. mod\_ssl – 提供了 [HTTPS 功能](http://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/)。
2. mod\_rewrite – 可以用正则表达式匹配 url 样式，并且使用 [.htaccess 技巧](http://www.tecmint.com/apache-htaccess-tricks/)来进行透明转发，或者提供 HTTP 状态码回应。
3. mod\_security – 用于[保护 Apache 免于暴力破解或者 DDoS 攻击](http://www.tecmint.com/protect-apache-using-mod_security-and-mod_evasive-on-rhel-centos-fedora/)。
4. mod\_status - 用于[监测 Apache 的负载及页面统计](http://www.tecmint.com/monitor-apache-web-server-load-and-page-statistics/)。

在 Linux 中 `apachectl` 或者 `apache2ctl`用于控制 Apache 服务器，是 Apache 的前端。

你可以用下面的命令显示 `apache2ctl` 的使用信息：

```
$ apache2ctl help
或者
$ apachectl help

```

```
Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
                       [-C "directive"] [-c "directive"]
                       [-k start|restart|graceful|graceful-stop|stop]
                       [-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
  -D name            : define a name for use in  directives
  -d directory       : specify an alternate initial ServerRoot
  -f file            : specify an alternate ServerConfigFile
  -C "directive"     : process directive before reading config files
  -c "directive"     : process directive after reading config files
  -e level           : show startup errors of level (see LogLevel)
  -E file            : log startup errors to file
  -v                 : show version number
  -V                 : show compile settings
  -h                 : list available command line options (this page)
  -l                 : list compiled in modules
  -L                 : list available configuration directives
  -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
  -S                 : a synonym for -t -D DUMP_VHOSTS
  -t -D DUMP_MODULES : show all loaded modules
  -M                 : a synonym for -t -D DUMP_MODULES
  -t                 : run syntax check for config files

```

`apache2ctl` 可以工作在两种模式下，SysV init 模式和直通模式。在 SysV init 模式下，`apache2ctl` 用如下的简单的单命令形式：

```
$ apachectl command
或者
$ apache2ctl command

```

比如要启动并检查它的状态，运行这两个命令。如果你是普通用户，使用 [sudo 命令](http://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/)来以 root 用户权限来运行：

```
$ sudo apache2ctl start
$ sudo apache2ctl status

```

```
tecmint@TecMint ~ $ sudo apache2ctl start
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1\. Set the 'ServerName' directive globally to suppress this message
httpd (pid 1456) already running
tecmint@TecMint ~ $ sudo apache2ctl status
Apache Server Status for localhost (via 127.0.0.1)

Server Version: Apache/2.4.18 (Ubuntu)
Server MPM: prefork
Server Built: 2016-07-14T12:32:26

-------------------------------------------------------------------------------

Current Time: Tuesday, 15-Nov-2016 11:47:28 IST
Restart Time: Tuesday, 15-Nov-2016 10:21:46 IST
Parent Server Config. Generation: 2
Parent Server MPM Generation: 1
Server uptime: 1 hour 25 minutes 41 seconds
Server load: 0.97 0.94 0.77
Total accesses: 2 - Total Traffic: 3 kB
CPU Usage: u0 s0 cu0 cs0
.000389 requests/sec - 0 B/second - 1536 B/request
1 requests currently being processed, 4 idle workers

__W__...........................................................
................................................................
......................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

```

当在直通模式下，`apache2ctl` 可以用下面的语法带上所有 Apache 的参数：

```
$ apachectl [apache-argument]
$ apache2ctl [apache-argument]

```

可以用下面的命令列出所有的 Apache 参数：

```
$ apache2 help    [在基于Debian的系统中]
$ httpd help      [在RHEL的系统中]

```

### 检查启用的 Apache 模块

因此，为了检测你的 Apache 服务器启动了哪些模块，在你的发行版中运行适当的命令，`-t -D DUMP_MODULES` 是一个用于显示所有启用的模块的 Apache 参数：

```
---------------  在基于 Debian 的系统中 ---------------
$ apache2ctl -t -D DUMP_MODULES
或者
$ apache2ctl -M

```

```
---------------  在 RHEL 的系统中 ---------------
$ apachectl -t -D DUMP_MODULES
或者
$ httpd -M
$ apache2ctl -M

```

```
[root@tecmint httpd]# apachectl -M
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_file_module (shared)
 authn_alias_module (shared)
 authn_anon_module (shared)
 authn_dbm_module (shared)
 authn_default_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 authz_owner_module (shared)
 authz_groupfile_module (shared)
 authz_dbm_module (shared)
 authz_default_module (shared)
 ldap_module (shared)
 authnz_ldap_module (shared)
 include_module (shared)
....

```

就是这样！在这篇简单的教程中，我们解释了如何使用 Apache 前端工具来列出启动的 Apache 模块。记住你可以在下面的反馈表中给我们留下你的问题或者留言。

---

via: <http://www.tecmint.com/check-apache-modules-enabled>

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

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


完整指南：在 Linux 上使用 Calibre 创建电子书

如果你使用googleplay图书而某些epub上传后被报告无法处理，可以用calibre重新制作一个epub再上传

![](/data/attachment/album/201611/22/103516fd7ueynac3dgguyc.jpg)

摘要：这份初学者指南是告诉你如何在 Linux 上用 Calibre 工具快速创建一本电子书。

自从亚马逊在多年前开始销售电子书，电子书已经有了质的飞跃发展并且变得越来越流行。好消息是电子书非常容易使用自由开源的工具来被创建。

在这个教程中，我会告诉你如何在 Linux 上创建一本电子书。

### 在 Linux 上创建一本电子书

要创建一本电子书，你可能需要两个软件：一个文本处理器（当然，我使用的是 [LibreOffice](https://www.libreoffice.org/)）和 Calibre 。[Calibre](http://calibre-ebook.com/) 是一个非常优秀的电子书阅读器，也是一个电子书库的程序。你可以使用它来[在 Linux 上打开 ePub 文件](https://itsfoss.com/open-epub-books-ubuntu-linux/)或者管理你收集的电子书。（LCTT 译注：LibreOffice 是 Linux 上用来处理文本的软件，类似于 Windows 的 Office 软件)

除了这些软件之外，你还需要准备一个电子书封面（1410×2250）和你的原稿。

### 第一步

首先，你需要用你的文本处理器程序打开你的原稿。 Calibre 可以自动的为你创建一个书籍目录。要使用到这个功能，你需要在你的原稿中设置每一章的标题样式为 “Heading 1”，在 LibreOffice 中要做到这个只需要高亮标题并且在段落样式下拉框中选择“Heading 1”即可。

![](/data/attachment/album/201611/22/103645w3vm0kvuuy323yna.png)

如果你想要有子章节，并且希望他们也被加入到目录中，只需要设置这些子章节的标题为 Heading 2。

做完这些之后，保存你的文档为 HTML 格式文件。

### 第二步

在 Calibre 程序里面，点击“<ruby> 添加书籍 <rp>  （ </rp> <rt>  Add books </rt> <rp>  ） </rp></ruby>”按钮。在对话框出现后，你可以打开你刚刚存储的 HTML 格式文件，将它加入到 Calibre 中。

![](/data/attachment/album/201611/22/103708ybpz1oezecr1zbul.png)

### 第三步

一旦这个 HTML 文件加入到 Calibre 库中，选择这个新文件并且点击“<ruby> 编辑元数据 <rp>  （ </rp> <rt>  Edit Metadata </rt> <rp>  ） </rp></ruby>”按钮。在这里，你可以添加下面的这些信息：<ruby> 标题 <rp>  （ </rp> <rt>  Title </rt> <rp>  ） </rp></ruby>、 <ruby> 作者 <rp>  （ </rp> <rt>  Author </rt> <rp>  ） </rp></ruby>、<ruby> 封面图片 <rp>  （ </rp> <rt>  cover image </rt> <rp>  ） </rp></ruby>、 <ruby> 描述 <rp>  （ </rp> <rt>  description </rt> <rp>  ） </rp></ruby>和其它的一些信息。当你填完之后，点击“Ok”。

![](/data/attachment/album/201611/22/103813aas2l9igy9yga4sk.png)

### 第四步

现在点击“<ruby> 转换书籍 <rp>  （ </rp> <rt>  Covert books </rt> <rp>  ） </rp></ruby>”按钮。

在新的窗口中，这里会有一些可选项，但是你不会需要使用它们。

![](/data/attachment/album/201611/22/103838su0xy0mv0qy6q0ym.png)

在新窗口的右上部选择框中，选择 epub 文件格式。Calibre 也有创建 mobi 文件格式的其它选项，但是我发现创建那些文件之后经常出现我意料之外的事情。

![](/data/attachment/album/201611/22/103902vc6qoprtyhylfmy8.png)

### 第五步

在左边新的对话框中，点击“<ruby> 外观 <rp>  （ </rp> <rt>  Look & Feel </rt> <rp>  ） </rp></ruby>”。然后勾选中“<ruby> 移除段落间空白 <rp>  （ </rp> <rt>  Remove spacing between paragraphs </rt> <rp>  ） </rp></ruby>”。

![](/data/attachment/album/201611/22/103930l22unnbswnd92d18.png)

接下来，我们会创建一个内容目录。如果不打算在你的书中使用目录，你可以跳过这个步骤。选中“<ruby> 内容目录 <rp>  （ </rp> <rt>  Table of Contents </rt> <rp>  ） </rp></ruby>” 标签。接下来，点击“<ruby> 一级目录 <rp>  （ </rp> <rt>  Level 1 TOC (XPath expression) </rt> <rp>  ） </rp></ruby>”右边的魔术棒图标。

![](/data/attachment/album/201611/22/104001my4ww3wi4br3y753.png)

在这个新的窗口中，在“<ruby> 匹配 HTML 标签 <rp>  （ </rp> <rt>  Match HTML tags with tag name </rt> <rp>  ） </rp></ruby>”下的下拉菜单中选择“h1”。点击“OK” 来关闭这个窗口。如果你有子章节，在“<ruby> 二级目录 <rp>  （ </rp> <rt>  （Level 2 TOC XPath expression） </rt> <rp>  ） </rp></ruby>”下选择“h2”。

![](/data/attachment/album/201611/22/104258yj9qh89xsmr9cjpm.png)

在我们开始生成电子书前，选择输出 EPUB 文件。在这个新的页面，选择“<ruby> 插入目录 <rp>  （ </rp> <rt>  Insert inline Table of Contents </rt> <rp>  ） </rp></ruby>”选项。

![](/data/attachment/album/201611/22/104321pyztzzv8vch8h5rv.png)

现在你需要做的是点击“OK”来开始生成电子书。除非你的是一个大文件，否则生成电子书的过程一般都完成的很快。

到此为止，你就已经创建一本电子书了。

对一些特别的用户比如他们知道如何写 CSS 样式文件（LCTT 译注：CSS 文件可以用来美化 HTML 页面)，Calibre 给了这类用户一个选项来为文章增加 CSS 样式。只需要回到“<ruby> 外观 <rp>  （ </rp> <rt>  Look & Feel </rt> <rp>  ） </rp></ruby>”部分，选择“<ruby> 风格 <rp>  （ </rp> <rt>  styling </rt> <rp>  ） </rp></ruby>”标签选项。但如果你想创建一个 mobi 格式的文件，因为一些原因，它是不能接受 CSS 样式文件的。

![](/data/attachment/album/201611/22/104350njodog6ohqzojkkj.png)

好了，是不是感到非常容易？我希望这个教程可以帮助你在 Linux 上创建电子书。

---

via: <https://itsfoss.com/create-ebook-calibre-linux/>

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

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


现在 Linux 运行在 99.6% 的 TOP500 超级计算机上

Summary: Linux 之外，仅有的两台运行非 Linux 的超级计算机来自中国的两台 Unix。

强！看巨硬还得瑟不？

在速度前十的超级计算机中，美国占据了 5 台，日本和中国各有 4 台，瑞士有 1 台。想说的是日本和中国一共有4台吧

在速度前十的超级计算机中，美国占据了 5 台，日本和中国各有 4 台，瑞士有 1 台。

搞不明白

我想说的是 w3m 对于 AJAX 支持有问题，至少默认参数下是。

晕，发错地方了。

这个要看从什么角度看，如果把云服务器视为超级计算机的话，那 Microsoft Azure 排名肯定靠前。

抱歉是我们翻译笔误·~

Linux可扩展性很强，用在超算上很合适！

ee

巨硬不在乎，它拥有绝大多数的普通PC的用户足够了~~  能赚钱才是硬道理

然而我只用XP

用超算运行windows完全是浪费资源吧

云服务器和超级计算机是两个概念吧。

![](/data/attachment/album/201611/22/210051cxf47xmpb3qhzxfh.jpg)

*简介：虽然 Linux 在桌面操作系统只有 2% 的市场占有率，但是对于超级计算机来说，Linux 用 99% 的市场占有率轻松地获取了统治地位。*

**Linux 运行在超过 99% 的 TOP500 超级计算机上**，这并不会让人感到惊讶。2015 年我们报道过[“Linux 正运行在超过 97% 的 TOP500 超级计算机上”](https://itsfoss.com/linux-runs-97-percent-worlds-top-500-supercomputers/)，今年 Linux 表现得更好。

这些信息是由独立组织 [Top500](https://twitter.com/share?text=%23Linux+now+runs+on+more+than+99%25+of+top+500+%23supercomputers+in+the+world&via=itsfoss&related=itsfoss&url=https://itsfoss.com/linux-99-percent-top-500-supercomputers/) 收集的，每两年他们会公布已知的最快的 500 台超级计算机的细节。你可以[打开这个网站，用以下条件筛选所需要的信息](https://www.top500.org/statistics/sublist/)：国家、使用的操作系统类型、所有者等。别担心，我将会从这份表格中筛选整理出今年几个有趣的事实。

### Linux 运行在 500 台超级计算机中的 498 台

如果要将上面的百分比细化到具体数量的话，500 台超级计算机中的 498 台运行着 Linux。剩余的两台超级计算机运行着基于 Unix 的操作系统。直到去年，还有一台超级计算机上在运行 Windows，今年的列表中没有出现 Windows 的身影。或许，这些超级计算机没一台能运行 Windows 10（一语双关）。

总结一下今年表单上 TOP500 超级计算机所运行操作系统情况：

* Linux: 498
* Unix: 2
* Windows: 0

还有一份总结，它清晰展现了每年 Linux 在 TOP500 超级计算机的份额的变化情况。

* 2012 年: 94%
* [2013](https://itsfoss.com/95-percent-worlds-top-500-supercomputers-run-linux/) 年: 95%
* [2014](https://itsfoss.com/97-percent-worlds-top-500-supercomputers-run-linux/) 年: 97%
* [2015](https://itsfoss.com/linux-runs-97-percent-worlds-top-500-supercomputers/) 年: 97.2%
* 2016 年: 99.6%
* 2017 年: ???

另外，最快的前380台超级计算机运行着 Linux，包括在中国的那台最快的超级计算机。排名第 386 和第 387 的超级计算机运行着 Unix，它们同样来自中国。（←\_←）

### 其他关于最快的超级计算机的有趣数据

![](/data/attachment/album/201611/22/210101fo7t8osfc7gt8t6n.png)

除去 Linux，我在表单中还找到了几个有趣的数据想跟你分享。

* 全球最快的超级计算机是[神威太湖之光](https://en.wikipedia.org/wiki/Sunway_TaihuLight). 它位于中国的[国家超级计算无锡中心](https://www.top500.org/site/50623)。它有着 93PFlops 的速度。
* 全球第二快的超级计算机是中国的[天河二号](https://en.wikipedia.org/wiki/Tianhe-2)，第三的位置则属于美国的 Titan。
* 在速度前十的超级计算机中，美国占据了 5 台，日本和中国各有 2 台，瑞士有 1 台。
* 美国和中国都各有 171 台超级计算机进入了 TOP500 的榜单中。
* 日本有 27 台，法国有 20 台，印度、俄罗斯和沙特阿拉伯各有 5 台进入了榜单中。

有趣的事实，不是吗？你能点击[这里](https://www.top500.org/statistics/sublist/)筛选出属于自己的榜单来获得更多信息。现在我很开心来宣传 Linux 运行在 99% 的 TOP500 超级计算机上，期待下一年能有 100% 的更好成绩。

当你在阅读这篇文章时，请在社交平台上分享这篇文章，这是 Linux 的一个成就，我们引以为豪~ :P

---

via: <https://itsfoss.com/linux-99-percent-top-500-supercomputers>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/)  译者：[ypingcn](https://github.com/ypingcn) 校对：[jasminepeng](https://github.com/jasminepeng)

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


谁需要 GUI？—— Linux 终端生存之道

Summary: 我最近尝试完全在 Linux shell 中生存30天。下边提到的就是我最喜欢用的 shell 应用，可以用来处理大部分的常用电脑功能（网页浏览、文字处理等）。这些显然有些不足，因为纯文本操作实在是有些艰难。

文章不错。<br />
这个网站为什么不增加一个邮件订阅的功能呢？

不t知道对中文的支持性如何？

极具逼格的mplayer ascii art竟然没有提到呢。

装B

GUI+shell可以很好的配合使用, 有必要这么装B吗

好好地图形界面不用，非得用一个shell。就好像有个别墅，你非得说在茅草屋就可以生存。

非要跟自己过不去吗？

不觉得这种装逼方式有点幼稚了吗

装逼赞一个

我想说的是 w3m 对于 AJAX 支持有问题，至少默认参数下是。

linux终端装逼之道

哈哈哈哈，那个确实够 B 格

邮件订阅我们之前在 QQ 邮件里面提供过——不过他们的邮件订阅功能太监了。<br />
至于说创建一个邮件列表服务器，并发送，主要是订阅者寥寥，所以就仅提供了 RSS。当然，微信和微博也是有的。

可不可以在终端里看电影??[(*^__^*) 嘻嘻……]

当然可以。

主要问题是终端不支持多语言环境

这个作者挺酷的，赞一个

个人喜欢就好。。。

一看作者就不是大中国的，不然肯定会提怎么在终端里输入中文

这个问题很致命

无聊，能简单的时候就不要复杂。要不是工作需要，他妈的我才懒得各种命令行。这很吊，这是傻逼。

之前在QQ邮箱订阅中心可以看全文呢，后来某一天之后就不推送了，也不知道是哪方的问题，大侠你知道麽。

QQ 邮箱订阅这个功能他们好几年就没人管了。然后终于有一天，开始不更新了，慢慢的，所有的订阅都不更新了，哎，我们有10W 订阅啊。

现在只有一少部分能收到更新了。<br />
觉得邮箱订阅方式比较方便，虽然感觉用户少。

为什么不是 Emacs？有了 Emacs 这些就都可以干了，闲暇时还可以用 Stockfish 引擎下几盘西洋棋。

何苦为难自己

来自湖北武汉的 Chrome Mobile 40.0|Android 5.1 用户

emacs将一个好好的文本编辑器搞成了IDE，已经是邪道了。

EMACS哈哈哈，“厨房水槽”

>
> 完全在 Linux 终端中生存并不容易，但这绝对是可行的。
>
>
>

![](/data/attachment/album/201611/22/213533n9v999esvagf9vsu.jpg)

### 处理常见功能的最佳 Linux shell 应用

你是否曾想像过完完全全在 Linux 终端里生存？没有图形桌面，没有现代的 GUI 软件，只有文本 —— 在 Linux shell 中，除了文本还是文本。这可能并不容易，但这是绝对可行的。[我最近尝试完全在 Linux shell 中生存30天](http://www.networkworld.com/article/3083268/linux/30-days-in-a-terminal-day-0-the-adventure-begins.html)。下边提到的就是我最喜欢用的 shell 应用，可以用来处理大部分的常用电脑功能（网页浏览、文字处理等）。这些显然有些不足，因为纯文本操作实在是有些艰难。

### 在 Linux 终端里发邮件

![](/data/attachment/album/201611/22/213557xupqxezpzgdfexbb.png)

要在终端里发邮件，选择有很多。很多人会推荐 mutt 和 notmuch，这两个软件都功能强大并且表现非凡，但是我却更喜欢 alpine。为何？不仅是因为它的高效性，还因为如果你习惯了像 Thunderbird 之类的 GUI 邮件客户端，你会发现 alpine 的界面与它们非常相似。

### 在 Linux 终端里浏览网页

![](/data/attachment/album/201611/22/213720owoaa7ocyn7wb8aa.jpg)

我有一个词要告诉你：[w3m](https://en.wikipedia.org/wiki/W3m)。好吧，我承认这并不是一个真实的词。但 w3m 的确是我在 Linux 终端的 web 浏览器选择。它能够很好的呈现网页，并且它也足够强大，可以用来在像 Google+ 之类的网站上发布消息（尽管方法并不有趣）。 Lynx 可能是基于文本的 Web 浏览器的事实标准，但 w3m 还是我的最爱。

### 在 Linux 终端里编辑文本

![](/data/attachment/album/201611/22/213747qf6fihan7jmw6bhm.jpg)

对于编辑简单的文本文件，有一个应用是我最的最爱。不！不！不是 emacs，同样，也绝对不是 vim。对于编辑文本文件或者简要记下笔记，我喜欢使用 nano。对！就是 nano。它非常简单，易于学习并且使用方便。当然还有更多的软件具有更多功能，但 nano 的使用是最令人愉快的。

### 在 Linux 终端里处理文字

![](/data/attachment/album/201611/22/213813pmzqrhnmrmoutnqm.jpg)

在一个只有文本的 shell 之中，“文本编辑器” 和 “文字处理程序” 实在没有什么大的区别。但是像我这样需要大量写作的，有一个专门用于长期写作的软件是非常必要的。而我最爱的就是 wordgrinder。它由足够的工具让我愉快工作——一个菜单驱动的界面（使用快捷键控制）并且支持 OpenDocument、HTML 或其他等多种文件格式。

### 在 Linux 终端里听音乐

![](/data/attachment/album/201611/22/213839sh9yzdc99awhcd9y.jpg)

当谈到在 shell 中播放音乐（比如 mp3，ogg 等），有一个软件绝对是卫冕之王：[cmus](https://en.wikipedia.org/wiki/Cmus)。它支持所有你想得到的文件格式。它的使用超级简单，运行速度超级快，并且只使用系统少量的资源。如此清洁，如此流畅。这才是一个好的音乐播放器的样子。

### 在 Linux 终端里发送即时消息

![](/data/attachment/album/201611/22/213903lswpfsp92v9solhf.jpg)

当我在想如果可以在终端里发送即时消息会是什么样子的时候，我的思绪瞬间爆发了。你可能知道 Pidgin——一个支持多种协议的 IM 客户端，它也有一个终端版，叫做“[finch](https://developer.pidgin.im/wiki/Using%20Finch)”，你可以使用它来同时链接多个网络、同时和几个人聊天。而且，它的界面也和 Pidgin 极为相似。多么令人惊叹啊！想要使用 Google 环聊（Google Hangouts）就试试 [hangups](https://github.com/tdryer/hangups)。它有一个非常漂亮的分页式界面，并且效果非常好。认真来说，除了一些可能需要的 emoji 表情和嵌入式图片外，在终端里发送即时消息真的是一个很好的体验。

### 在 Linux 终端里发布推文

![](/data/attachment/album/201611/22/214027szjhcx4xn4c64fwc.jpg)

这不是开玩笑！由于 [rainbowstream](http://www.rainbowstream.org/) 的存在，我们已经可以在终端里发布推文了。尽管我时不时遇到一些 bug，但整体上，它工作得很好。虽然没有网页版 Twitter 或官方移动客户端那么好用，但这是一个终端版的 Twitter，来试一试吧。尽管它的功能还未完善，但是用起来还是很酷，不是吗？

### 在 Linux 终端里看 Reddit 新闻

![](/data/attachment/album/201611/22/214113vtvkqsausktuu0v5.jpg)

不管如何，在命令行中享受 Reddit 新闻时间真的感觉很棒。使用 rtv 真是一个相当愉快的体验。不管是阅读、评论，还是投票表决，它都可以。其体验和在网页版有一定相似。

### 在 Linux 终端里管理进程

![](/data/attachment/album/201611/22/214138xntitwnvewrriair.jpg)

可以使用 [htop](http://hisham.hm/htop/)。与 top 相似，但更好用、更美观。有时候，我打开 htop 之后就让它一直运行。没有原因，就是喜欢！从某方面说，它就像将音乐可视化——当然，这里显示的是 RAM 和 CPU 的使用情况。

### 在 Linux 终端里管理文件

![](/data/attachment/album/201611/22/214203vjp9acqgqbcujggg.png)

在一个纯文本终端里并不意味着你不能享受生活之美好。比方说一个出色的文件浏览和管理器。这方面，[Midnight Commander](https://en.wikipedia.org/wiki/Midnight_Commander) 是很好用的。

### 在 Linux 终端里管理终端窗口

![](/data/attachment/album/201611/22/214235y7ee099gwe97ieiy.png)

如果要在终端里工作很长时间，就需要一个多窗口终端了。它是这样一个软件 —— 可以将用户终端会话分割成一个自定义网格，从而可以同时使用和查看多个终端应用。对于 shell，它相当于一个平铺式窗口管理器。我最喜欢用的是 [tmux](https://tmux.github.io/)。不过 [GNU Screen](https://en.wikipedia.org/wiki/GNU_Screen) 也很好用。学习怎么使用它们可能要花点时间，但一旦会用，就会很方便。

### 在 Linux 终端里进行讲稿演示

![](/data/attachment/album/201611/22/214305wuzgpguxnanggwdd.jpg)

这类软件有 LibreOffice、Google slides、gasp 或者 PowerPoint。我在讲稿演示软件花费很多时间，很高兴有一个终端版的软件。它称做“[文本演示程序（tpp）](http://www.ngolde.de/tpp.html)”。很显然，没有图片，只是一个使用简单标记语言将放在一起的幻灯片展示出来的简单程序。它不可能让你在其中插入猫的图片，但可以让你在终端里进行完整的演示。

---

via: <http://www.networkworld.com/article/3091139/linux/who-needs-a-gui-how-to-live-in-a-linux-terminal.html#slide1>

作者：[Bryan Lunduke](http://www.networkworld.com/author/Bryan-Lunduke/) 译者：[GHLandy](https://github.com/GHLandy) 校对：[jasminepeng](https://github.com/jasminepeng)

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


何时 NGINX 将取代 Apache？

看Sun

iis 为什么会走到今天这个地步呢

卡

选择闭源的结果。

所以今天巨硬开始拥抱开源了。

测试了下。

![](/data/attachment/album/201611/23/215347p65d2ldjeb64d036.jpg)

>
> NGINX 和 Apache 两者都是主流的开源 web 服务器，但是据 NGINX 的首席执行官 Gus Robertson 所言，他们有不同的使用场景。此外还有微软，其 web 服务器 IIS 在活跃网站的份额在 20 年间首次跌破 10%。
>
>
>

![活跃网站的 web 服务器市场份额](/data/attachment/album/201611/23/215359soovdv6e3mm5omll.png)

*Apache 是最受欢迎的 web 服务器，不过 NGINX 正逐渐增长，而微软的 IIS 几十年来首次跌破 10%。*

[NGINX](https://www.nginx.com/) 已经成为第二大 web 服务器。它在很久以前就已经超越了[微软 IIS](https://www.iis.net/)，并且一直在老大 [Apache](https://httpd.apache.org/) 的身后穷追不舍。但是，NGINX 的首席执行官Gus Roberston 在接受采访时表示，Apache 和 NGINX 的用户群体不一样。

“我认为 Apache 是很好的 web 服务器。NGINX 和它的使用场景不同，”Robertson 说。“我们没有把 Apache 当成竞争对手。我们的用户使用 NGINX 来取代硬件负载均衡器和构建微服务，这两个都不是 Apache 的长处。”

事实上，Robertson 发现许多用户同时使用了这两种开源的 web 服务。“用户会在 Apache 的上层使用 NGINX 来实现负载均衡。我们的架构差异很大，我们可以提供更好的并发 web 服务。”他还表示 NGINX 在云环境中表现更优秀。

他总结说，“我们是唯一一个仍然在持续增长的 web 服务器，其它的 web 服务器都在慢慢缩小份额。”

这不太准确。根据 [Netcraft 十月份的网络服务器调查](https://news.netcraft.com/archives/2016/10/21/october-2016-web-server-survey.html)，Apache 当月的活跃网站增加得最多，获得了 180 万个新站点，而 NGINX 增加了 40 万个新站点，排在第二位。

这些增长，加上微软损失的 120 万个活跃站点，导致微软的活跃网站份额下降到 9.27%，这是他们第一次跌破 10%。Apache 的市场份额提高了 0.19%，并继续领跑市场，现在坐拥 46.3% 的活跃站点。尽管如此，多年来 Apache 一直在缓慢下降，而 NGINX 现在上升到了 19%。

NGINX 的开发者正在努力创造他们的核心开放（open-core ）的商业 web 服务器 —— [NGINX Plus](https://www.nginx.com/products/)，通过不断的改进使其变得更有竞争力。NGINX Plus 最新的版本是 [NGINX Plus 11 版（R11）](https://www.nginx.com/blog/nginx-plus-r11-released/)，该服务器易于扩展和自定义，并支持更广泛的部署。

这次最大的补充是 [动态模块](https://www.nginx.com/blog/nginx-plus-r11-released/?utm_source=nginx-plus-r11-released&utm_medium=blog#r11-dynamic-modules) 的二进制兼容性。也就是说为 [开源 NGINX 软件](https://www.nginx.com/products/download-oss/) 编译的动态模块也可以加载到 NGINX Plus。

这意味着你可以利用大量的[第三方 NGINX 模块](https://www.nginx.com/resources/wiki/modules/index.html?utm_source=nginx-plus-r11-released&utm_medium=blog) 来扩展 NGINX Plus 的功能，借鉴一系列开源和商业化生产的模块。开发者可以基于支持 NGINX Plus 的内核创建自定义扩展、附加组件和新产品。

NGINX Plus R11 还增强了其它功能：

* [提升 TCP/UDP 负载均衡](https://www.nginx.com/blog/nginx-plus-r11-released/?utm_source=nginx-plus-r11-released&utm_medium=blog#r11-tcp-udp-lb) —— 新功能包括 SSL 服务器路由、新的日志功能、附加变量以及改进的代理协议支持。这些新功能增强了调试功能，使你能够支持更广泛的企业应用。
* [更好的 IP 定位](https://www.nginx.com/blog/nginx-plus-r11-released/?utm_source=nginx-plus-r11-released&utm_medium=blog#r11-geoip2) —— 第三方的 GeoIP2 模块现在已经通过认证，并提供给 NGINX Plus 用户。这个新版本提供比原来的 GeoIP 模块更精准和丰富的位置信息。
* [增强的 nginScript 模块](https://www.nginx.com/blog/nginx-plus-r11-released/?utm_source=nginx-plus-r11-released&utm_medium=blog#r11-nginScript) —— nginScript 是基于 JavaScript 的 NGINX Plus 的下一代配置语言。新功能可以让你在流（TCP/UDP）模块中即时修改请求和响应数据。

最终结果？NGINX 准备继续与 Apache 竞争顶级 web 服务器的宝座。至于微软的 IIS？它将逐渐淡出市场。

---

via: <http://www.zdnet.com/article/when-to-use-nginx-instead-of-apache/>

作者：[Steven J. Vaughan-Nichols](http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/) 译者：[OneNewLife](https://github.com/OneNewLife) 校对：[jasminepeng](https://github.com/jasminepeng)

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


aria2 （命令行下载器）实例

Summary: aria2 是一个自由、开源、轻量级多协议和多源的命令行下载工具。它支持 HTTP/HTTPS、FTP、SFTP、 BitTorrent 和 Metalink 协议。

好东西

zhangzonghui@zhangzonghui-F83VD:~$ sudo dpkg -i /home/zhangzonghui/下载/deepin-boot-maker_1.1.3-1_i386.deb

正在选中未选择的软件包 deepin-boot-maker:i386。

(正在读取数据库 ... 系统当前共安装有 235665 个文件和目录。)

正准备解包 .../deepin-boot-maker_1.1.3-1_i386.deb  ...

正在解包 deepin-boot-maker:i386 (1.1.3-1) ...

dpkg: 依赖关系问题使得 deepin-boot-maker:i386 的配置工作不能继续：

 deepin-boot-maker:i386 依赖于 p7zip-full.

 deepin-boot-maker:i386 依赖于 mtools.

 deepin-boot-maker:i386 依赖于 syslinux.

 deepin-boot-maker:i386 依赖于 syslinux-common.

dpkg: 处理软件包 deepin-boot-maker:i386 (--install)时出错：

 依赖关系问题 - 仍未被配置

正在处理用于 bamfdaemon (0.5.3~bzr0+16.04.20160824-0ubuntu1) 的触发器 ...

Rebuilding /usr/share/applications/bamf-2.index...

正在处理用于 gnome-menus (3.13.3-6ubuntu3.1) 的触发器 ...

正在处理用于 desktop-file-utils (0.22-1ubuntu5+elementary2~ubuntu0.4.1) 的触发器 ...

正在处理用于 mime-support (3.59ubuntu1) 的触发器 ...

在处理时有错误发生：

 deepin-boot-maker:i386

zhen  mo  jie  jue

不错。

根据深度官方的文档，需要你下载源码，自己编译。

但是 aria2c 貌似没有 wget 的 --https-only 选项，用这个下载软件包虽然速度快，我担心会被降级 http，所以宁愿慢些，也用 wget 下载。

好东西，等回家下两个种子试试，留下一个邪恶的表情。

[aria2](https://aria2.github.io/) 是一个自由、开源、轻量级多协议和多源的命令行下载工具。它支持 HTTP/HTTPS、FTP、SFTP、 BitTorrent 和 Metalink 协议。aria2 可以通过内建的 JSON-RPC 和 XML-RPC 接口来操纵。aria2 下载文件的时候，自动验证数据块。它可以通过多个来源或者多个协议下载一个文件，并且会尝试利用你的最大下载带宽。默认情况下，所有的 Linux 发行版都包括 aria2，所以我们可以从官方库中很容易的安装。一些 GUI 下载管理器例如 [uget](http://www.2daygeek.com/install-uget-download-manager-on-ubuntu-centos-debian-fedora-mint-rhel-opensuse/) 使用 aria2 作为插件来提高下载速度。

![](/data/attachment/album/201611/23/222806ck6kn26h2j96ck96.jpg)

### Aria2 特性

* 支持 HTTP/HTTPS GET
* 支持 HTTP 代理
* 支持 HTTP BASIC 认证
* 支持 HTTP 代理认证
* 支持 FTP （主动、被动模式）
* 通过 HTTP 代理的 FTP（GET 命令行或者隧道）
* 分段下载
* 支持 Cookie
* 可以作为守护进程运行。
* 支持使用 fast 扩展的 BitTorrent 协议
* 支持在多文件 torrent 中选择文件
* 支持 Metalink 3.0 版本（HTTP/FTP/BitTorrent）
* 限制下载、上传速度

### 1) Linux 下安装 aria2

我们可以很容易的在所有的 Linux 发行版上安装 aria2 命令行下载器，例如 Debian、 Ubuntu、 Mint、 RHEL、 CentOS、 Fedora、 suse、 openSUSE、 Arch Linux、 Manjaro、 Mageia 等等……只需要输入下面的命令安装即可。对于 CentOS、 RHEL 系统，我们需要开启 [uget](http://www.2daygeek.com/aria2-command-line-download-utility-tool/) 或者 [RPMForge](http://www.2daygeek.com/aria2-command-line-download-utility-tool/) 库的支持。

```
[对于 Debian、 Ubuntu 和 Mint]
$ sudo apt-get install aria2

[对于 CentOS、 RHEL、 Fedora 21 和更早些的操作系统]
# yum install aria2

[Fedora 22 和 之后的系统]
# dnf install aria2

[对于 suse 和 openSUSE]
# zypper install wget

[Mageia]
# urpmi aria2

[对于 Arch Linux]
$ sudo pacman -S aria2

```

### 2) 下载单个文件

下面的命令将会从指定的 URL 中下载一个文件，并且保存在当前目录，在下载文件的过程中，我们可以看到文件的（日期、时间、下载速度和下载进度）。

```
# aria2c https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
[#986c80 19MiB/21MiB(90%) CN:1 DL:3.0MiB]
03/22 09:49:13 [NOTICE] Download complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
986c80|OK  |   3.0MiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(OK):download completed.

```

### 3) 使用不同的名字保存文件

在初始化下载的时候，我们可以使用 `-o`（小写）选项在保存文件的时候使用不同的名字。这儿我们将要使用 owncloud.zip 文件名来保存文件。

```
# aria2c -o owncloud.zip https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
[#d31304 16MiB/21MiB(74%) CN:1 DL:6.2MiB]
03/22 09:51:02 [NOTICE] Download complete: /opt/owncloud.zip

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
d31304|OK  |   7.3MiB/s|/opt/owncloud.zip

Status Legend:
(OK):download completed.

```

### 4) 下载速度限制

默认情况下，aria2 会利用全部带宽来下载文件，在文件下载完成之前，我们在服务器就什么也做不了（这将会影响其他服务访问带宽）。所以在下载大文件时最好使用 `–max-download-limit` 选项来避免进一步的问题。

```
# aria2c --max-download-limit=500k https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
[#7f9fbf 21MiB/21MiB(99%) CN:1 DL:466KiB]
03/22 09:54:51 [NOTICE] Download complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
7f9fbf|OK  |   462KiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(OK):download completed.

```

### 5) 下载多个文件

下面的命令将会从指定位置下载超过一个的文件并保存到当前目录，在下载文件的过程中，我们可以看到文件的（日期、时间、下载速度和下载进度）。

```
# aria2c -Z https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2 ftp://ftp.gnu.org/gnu/wget/wget-1.17.tar.gz
[DL:1.7MiB][#53533c 272KiB/21MiB(1%)][#b52bb1 768KiB/3.6MiB(20%)]
03/22 10:25:54 [NOTICE] Download complete: /opt/wget-1.17.tar.gz
[#53533c 18MiB/21MiB(86%) CN:1 DL:3.2MiB]
03/22 10:25:59 [NOTICE] Download complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
b52bb1|OK  |   2.8MiB/s|/opt/wget-1.17.tar.gz
53533c|OK  |   3.4MiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(OK):download completed.

```

### 6) 续传未完成的下载

当你遇到一些网络连接问题或者系统问题的时候，并将要下载一个大文件（例如： ISO 镜像文件），我建议你使用 `-c` 选项，它可以帮助我们从该状态续传未完成的下载，并且像往常一样完成。不然的话，当你再次下载，它将会初始化新的下载，并保存成一个不同的文件名（自动的在文件名后面添加 `.1` ）。注意：如果出现了任何中断，aria2 使用 `.aria2` 后缀保存（未完成的）文件。

```
# aria2c -c https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
[#db0b08 8.2MiB/21MiB(38%) CN:1 DL:3.1MiB ETA:4s]^C
03/22 10:09:26 [NOTICE] Shutdown sequence commencing... Press Ctrl-C again for emergency shutdown.

03/22 10:09:26 [NOTICE] Download GID#db0b08bf55d5908d not complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
db0b08|INPR|   3.3MiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(INPR):download in-progress.

如果重新启动传输，aria2 将会恢复下载。

# aria2c -c https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
[#873d08 21MiB/21MiB(98%) CN:1 DL:2.7MiB]
03/22 10:09:57 [NOTICE] Download complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
873d08|OK  |   1.9MiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(OK):download completed.

```

### 7) 从文件获取输入

就像 wget 可以从一个文件获取输入的 URL 列表来下载一样。我们需要创建一个文件，将每一个 URL 存储在单独的行中。ara2 命令行可以添加 `-i` 选项来执行此操作。

```
# aria2c -i test-aria2.txt
[DL:3.9MiB][#b97984 192KiB/21MiB(0%)][#673c8e 2.5MiB/3.6MiB(69%)]
03/22 10:14:22 [NOTICE] Download complete: /opt/wget-1.17.tar.gz
[#b97984 19MiB/21MiB(90%) CN:1 DL:2.5MiB]
03/22 10:14:30 [NOTICE] Download complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
673c8e|OK  |   4.3MiB/s|/opt/wget-1.17.tar.gz
b97984|OK  |   2.5MiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(OK):download completed.

```

### 8) 每个主机使用两个连接来下载

默认情况，每次下载连接到一台服务器的最大数目，对于一条主机只能建立一条。我们可以通过 aria2 命令行添加 `-x2`（`2` 表示两个连接）来创建到每台主机的多个连接，以加快下载速度。

```
# aria2c -x2 https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
[#ddd4cd 18MiB/21MiB(83%) CN:1 DL:5.0MiB]
03/22 10:16:27 [NOTICE] Download complete: /opt/owncloud-9.0.0.tar.bz2

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
ddd4cd|OK  |   5.5MiB/s|/opt/owncloud-9.0.0.tar.bz2

Status Legend:
(OK):download completed.

```

### 9) 下载 BitTorrent 种子文件

我们可以使用 aria2 命令行直接下载一个 BitTorrent 种子文件：

```
# aria2c https://torcache.net/torrent/C86F4E743253E0EBF3090CCFFCC9B56FA38451A3.torrent?title=[kat.cr]irudhi.suttru.2015.official.teaser.full.hd.1080p.pathi.team.sr
[#388321 0B/0B CN:1 DL:0B]
03/22 20:06:14 [NOTICE] Download complete: /opt/[kat.cr]irudhi.suttru.2015.official.teaser.full.hd.1080p.pathi.team.sr.torrent

03/22 20:06:14 [ERROR] Exception caught
Exception: [BtPostDownloadHandler.cc:98] errorCode=25 Could not parse BitTorrent metainfo

Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
388321|OK  |    11MiB/s|/opt/[kat.cr]irudhi.suttru.2015.official.teaser.full.hd.1080p.pathi.team.sr.torrent

Status Legend:
(OK):download completed.

```

### 10) 下载 BitTorrent 磁力链接

使用 aria2 我们也可以通过 BitTorrent 磁力链接直接下载一个种子文件：

```
# aria2c 'magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C'

```

### 11) 下载 BitTorrent Metalink 种子

我们也可以通过 aria2 命令行直接下载一个 Metalink 文件。

```
# aria2c https://curl.haxx.se/metalink.cgi?curl=tar.bz2

```

### 12) 从密码保护的网站下载一个文件

或者，我们也可以从一个密码保护网站下载一个文件。下面的命令行将会从一个密码保护网站中下载文件。

```
# aria2c --http-user=xxx --http-password=xxx https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2

# aria2c --ftp-user=xxx --ftp-password=xxx ftp://ftp.gnu.org/gnu/wget/wget-1.17.tar.gz

```

### 13) 阅读更多关于 aria2

如果你希望了解了解更多选项 —— 它们同时适用于 wget，可以输入下面的命令行在你自己的终端获取详细信息：

```
# man aria2c
or
# aria2c --help

```

谢谢欣赏 …）

---

via: <http://www.2daygeek.com/aria2-command-line-download-utility-tool/>

作者：[MAGESH MARUTHAMUTHU](http://www.2daygeek.com/author/magesh/) 译者：[yangmingming](https://github.com/yangmingming) 校对：[wxy](https://github.com/wxy)

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


Xfce 桌面新增‘免打扰’模式以及单一应用通知设置的新特性

Summary: Xfce　的开发者们正忙于把 Xfce 的应用和部件转移到 GTK3 上，在这个过程中，他们也增加了一些新的特性。

坐等 Xfce 迁移完成。

Xfce　的开发者们正忙于把 Xfce 的应用和部件[转移](https://wiki.xfce.org/releng/4.14/roadmap)到 GTK3 上，在这个过程中，他们也增加了一些新的特性。

![](/data/attachment/album/201611/23/224500d1ailnrra1wwwiae.png)

**“免打扰”**，一个常被要求增加的特性，[最近](http://simon.shimmerproject.org/2016/11/09/xfce4-notifyd-0-3-4-released-do-not-disturb-and-per-application-settings/)已登陆到了 xfce-notifyd 0.3.4 (Xfce 通知进程)上。

更近一步地，最新的 xfce-notifyd 包括了一个可以在单一应用基础上开启或关闭通知的选项。

当一个应用发出一个通知以后，这个应用就被加入到到了通知设置的列表里。从通知列表里，你可以控制哪些应用能够显示通知。

”免打扰“模式和应用特定的通知设置均可在“设置” > “通知” 中找到：

![](/data/attachment/album/201611/23/224137iah600bbiqthb00w.png)

现在为止，还没有方法可以访问由于启用”免打扰“模式而错过的消息。然而，可以预期将来会发布**通知记录/维持的特性。**

最后， xfce-notifyd 0.3.4 的**另一个特性**是**选择在主监视器显示通知**（直到现在，通知都是显示在当前监视器）。这个特性目前在图形设置界面里是没有的，必须使用 `Xfconf`（设置编辑）在 xfce-notifyd 下增添一个叫做 `/primary-monitor`（没有引号）的布尔属性，并设置为 `True` 来启用该特性:

![](/data/attachment/album/201611/23/224147b94j8xoru33tlir8.png)

**xfce4-notifyd 0.3.4 目前在 PPA 上还没有，但是不久它可能被增添到 [Xfce GTK3 PPA](https://launchpad.net/%7Exubuntu-dev/+archive/ubuntu/xfce4-gtk3)中。**

**如果你想直接从源代码编译，从[这儿](http://archive.xfce.org/src/apps/xfce4-notifyd/0.3/)下载。**

---

via: <http://www.webupd8.org/2016/11/xfce-gets-do-not-disturb-mode-and-per.html>

作者：[Andrew](http://www.webupd8.org/p/about.html) 译者：[ucasFL](https://github.com/ucasFL) 校对：[wxy](https://github.com/wxy)

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


如何按最后修改时间对 ls 命令的输出进行排序

通俗易懂，赞一个。

时间排序还是挺实用的！！！

Linux 用户常常做的一个事情是，是在命令行[列出目录内容](http://www.tecmint.com/file-and-directory-management-in-linux/)。

我们已经知道，[ls](http://www.tecmint.com/15-basic-ls-command-examples-in-linux/) 和 [dir](http://www.tecmint.com/linux-dir-command-usage-with-examples/) 是两个可用在列出目录内容的 Linux 命令，前者是更受欢迎的，在大多数情况下，是用户的首选。

我们列出目录内容时，可以按照不同的标准进行排序，例如文件名、修改时间、添加时间、版本或者文件大小。可以通过指定一个特别的参数来使用这些文件的属性进行排序。

![](/data/attachment/album/201611/24/215201jz4zu8u3lzi909ul.jpg)

在这个简洁的 [ls 命令指导](http://www.tecmint.com/tag/linux-ls-command/)中，我们将看看如何通过上次修改时间（日期和时分秒）[排序 ls 命令的输出结果](http://www.tecmint.com/sort-command-linux/) 。

让我们由执行一些基本的 [ls 命令](http://www.tecmint.com/15-basic-ls-command-examples-in-linux/)开始。

### Linux 基本 ls 命令

1、 不带任何参数运行 ls 命令将列出当前工作目录的内容。

```
$ ls

```

![List Content of Working Directory](/data/attachment/album/201611/24/215422rn4111nn244qgqhe.png)

*列出工作目录的内容*

2、要列出任何目录的内容，例如 /etc 目录使用如下命令：

```
$ ls /etc

```

![List Contents of Directory](/data/attachment/album/201611/24/215423d331acrr1jwro7wc.png)

*列出工作目录 /etc 的内容*

3、一个目录总是包含一些隐藏的文件（至少有两个），因此，要展示目录中的所有文件，使用`-a`或`-all`标志：

```
$ ls  -a

```

![List Hidden Files in Directory](/data/attachment/album/201611/24/215426kmzkkgk5qgkvo1y9.png)

*列出工作目录的隐藏文件*

4、你还可以打印输出的每一个文件的详细信息，例如文件权限、链接数、所有者名称和组所有者、文件大小、最后修改的时间和文件/目录名称。

这是由`-l`选项来设置，这意味着一个如下面的屏幕截图般的长长的列表格式。

```
$ ls -l

```

![Long List Directory Contents](/data/attachment/album/201611/24/215428y7zgobw2tygkfye2.png)

*长列表目录内容*

### 基于日期和基于时刻排序文件

5、要在目录中列出文件并[对最后修改日期和时间进行排序](http://www.tecmint.com/find-and-sort-files-modification-date-and-time-in-linux/)，在下面的命令中使用`-t`选项：

```
$ ls -lt

```

![Sort ls Output by Date and Time](/data/attachment/album/201611/24/215429ann4oe56mnprcct2.png)

*按日期和时间排序ls输出内容*

6、如果你想要一个基于日期和时间的逆向排序文件，你可以使用`-r`选项来工作，像这样：

```
$ ls -ltr

```

![Sort ls Output Reverse by Date and Time](/data/attachment/album/201611/24/215431f1epyfedyfmy1349.png)

*按日期和时间排序的逆向输出*

我们将在这里结束，但是，[ls 命令](http://www.tecmint.com/tag/linux-ls-command/)还有更多的使用信息和选项，因此，应该特别注意它或看看其它指南，比如《[每一个用户应该知道 ls 的命令技巧](http://www.tecmint.com/linux-ls-command-tricks/)》或《[使用排序命令](http://www.tecmint.com/linux-sort-command-examples/)》。

最后但并非最不重要的，你可以通过以下反馈部分联系我们。

---

via: <http://www.tecmint.com/sort-ls-output-by-last-modified-date-and-time>

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

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


在 Linux 上使用 Glyphr 设计自己的字体

标题“在 Linux 上使用 Glyphr 设计自己的字体”是否比“Linux上的字体设计软件Glyphr”好？

感觉对设计师的作用更大些！

LibreOffice 提供了丰富的字体，并且用户可以自由选择和下载增加自己的字体。然而，就算是你想创造自己的字体，也可以非常容易地使用 Glyphr 来做到。Glyphr 是一个新开源的矢量字体设计器，通过直观而易用的图形界面和丰富的功能集可以完成字体设计的方方面面。虽然这个应用还在早期开发阶段，但是已经十分棒了。下面将会有一个简短的快速入门教你如何使用 Glyphr 创建字体并加入到 LibreOffice。

![](/data/attachment/album/201611/24/232624h95ausssals7ls7j.jpg)

首先，从[官方 Git 库](https://github.com/glyphr-studio/Glyphr-Studio-Desktop)下载 Glyphr。它提供 32 位和 64 位版本的二进制格式。完成下载后，进入下载文件夹， 解压文件，进入解压后的文件夹，右键点击 Glyphr Studio，选择“Run”。

![](/data/attachment/album/201611/24/231800x07917cemtfb9sk9.jpg)

启动应用后会给你三个选项。一个是从头创建一个新的字体集；第二个是读取已经存在的项目，可以是 Glyphr Studio 项目文件，也可以是其他 OpenType 字体（otf）或 TrueType 字体（ttf），甚至是 SVG 字体。第三个是读取已有的两个示例之一，然后可以在示例上修改创建。我将会选择第一个选项，并教你一些简单的设计概念。

![](/data/attachment/album/201611/24/233237w9ysrr89vu5hvrig.jpg)

完成进入编辑界面后, 你可以从屏幕左边的面板中选择字母，然后在右边的绘制区域设计。我选择 A 字母的图标开始编辑它。

![](/data/attachment/album/201611/24/232714syudpdg629uhk9pp.jpg)

要在绘图板上设计一些东西，我们可以从该板的左上角选择矩形、椭圆形或者路径等同处的“形状”工具，也可以使用该工具的第二行的第一项的路径编辑工具。使用任意工具，开始在板上放<ruby> 路径点 <rp>  （ </rp> <rt>  path point </rt> <rp>  ） </rp></ruby>来创建形状。添加的点数越多，接下来步骤的形状选项就越多。

![](/data/attachment/album/201611/24/232839d7lrzm12hprjbhle.jpg)

将点移动到不同位置可以获得不同的路径，可以使用路径编辑工具右边的路径编辑，点击形状会出现可编辑点。然后可以把这些点拖到你喜欢的任意位置。

![](/data/attachment/album/201611/24/232957a1ul9fuwxlb5uyku.jpg)

最后，形状编辑工具可以让你选择形状并将其拖动到其它位置、更改其尺寸以及旋转。

![](/data/attachment/album/201611/24/233036km0i2jrj02od1ej0.jpg)

其它有用的设计动作集还有左侧面板提供的复制-粘贴、翻转-旋转操作。来看个例子，假设我现在正在创作 B 字母， 我要把已经创建好的上部分镜像到下半部分，保持设计的高度一致性。

![](/data/attachment/album/201611/24/233303tjissisii77v1pon.jpg)

现在，为了达到这个目的，选择形状编辑工具，选中欲镜像的部分，点击复制操作，然后在其上点击图形，拖放粘帖的形状到你需要的位置，根据你的需要进行水平翻转或者垂直翻转。

![](/data/attachment/album/201611/24/233412y1fzll1z7fetq1hw.jpg)![](/data/attachment/album/201611/24/233413mv2sspjcj3s7m6yk.jpg)

这款应用在太多地方可以讲述。如果有兴趣深入，可以深入了解数字化编辑、弯曲和引导等等，

然而，字体并不是仅仅是单个字体的设计，还需要学习字体设计的其他方面。通过应用左上角菜单栏上的“导航”还可以设置特殊字符对之间的字间距、增加连字符、部件、和设置常规字体设置等。

![](/data/attachment/album/201611/24/233507n4sj7asd1s9op14m.jpg)

最棒的是你可以使用“测试驱动”来使用你的新字体，帮助你判断字体设计如何、间距对不对、尽量来优化你的字体。

![](/data/attachment/album/201611/24/233540sg83msg19gg2t121.jpg)

完成设计和优化后，我们还可以导出 ttf 和 svg 格式的字体。

![](/data/attachment/album/201611/24/233625py20jr26g0ja2zhy.jpg)

要将新的字体加入到系统中，打开字体浏览器并点击“安装”按钮。如果它不工作，可以在主目录下创建一个新的文件夹叫做`.fonts`，并将字体复制进去。也可以使用 root 用户打开文件管理器，进入 `/usr/share/fonts/opentype`， 创建一个新的文件夹并粘贴字体文件到里面。然后打开终端，输入命令重建字体缓存：`sudo fc-cache -f -v`。

在 LibreOffice 中已经可以看见新的字体咯，同样也可以使用你系统中的其它文本应用程序如 Gedit 来测试新字体。

![](/data/attachment/album/201611/24/233704a61gfw4yffow1zy8.jpg)

---

via: <https://www.howtoforge.com/tutorial/how-to-design-and-add-your-own-font-on-linux-with-glyphr/>

作者：[Bill Toulas](https://twitter.com/howtoforgecom) 译者：[VicYu/Vic020](http://vicyu.net) 校对：[wxy](https://github.com/wxy)

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


全新 Kali Linux 系统安装指南

如果能用这些工具，为什么要看安装指南呢<br />
如果不会为什么要装这个系统呢。。

小白表示安装完了再一点一点的学习，，起码系统在手，学习的那种feel就上去了。。。就像我为了hold住自己上高三之前（还有6个月）把linux学会，现在我的笔记本里只有一个redhat linux 7.3，不得不强迫自己去接受  『然而穿山甲说了什么。。。』  楼主这个帖子可能就是给正在观望的小白看的。

啥也不说，，先插个眼

来条温馨提示，，用dd工具的时候老实的在一边等着，，千万别看没动静就去搞事情。。。不说了，我还得再买个u盘

因为要用

如果不安装这个系统永远学习不到，如果不看安装指南永远不会装，如果你带脑子就不会有这种问题。。。

Kali Linux 系统可以说是在[安全测试方面最好](http://www.tecmint.com/best-security-centric-linux-distributions-of-2016/)的开箱即用的 Linux 发行版。Kali 下的很多工具软件都可以安装在大多数的 Linux 发行版中，Offensive Security 团队在 Kali 系统的开发过程中投入大量的时间精力来完善这个用于渗透测试和安全审计的 Linux 发行版。

Kali Linux 是基于 Debian 的面向安全的发行版本。该系统由于预安装了上百个知名的安全工具软件而出名。

![](/data/attachment/album/201611/26/123435r1gtoh9gee6z9qad.jpg)

Kali 甚至在信息安全领域还有一个含金量较高的认证叫做“<ruby> Kali 渗透测试 <rp>  （ </rp> <rt>  Pentesting with Kali </rt> <rp>  ） </rp></ruby>”认证。该认证的申请者必须在艰难的 24 小时内成功入侵多台计算机，然后另外 24 小时内完成渗透测试报告并发送给 Offensive Security 的安全人员进行评审。成功通过考试的人将会获得 OSCP 认证证书。

本安装指南及以后的文章主要是为了帮助个人熟悉 Kali Linux 系统和其中一些工具软件的使用。

**请谨慎使用 Kali 下的工具，因为其中一些工具如果使用不当将会导致计算机系统损坏。请在合法的途径下使用所有 Kali 系列文章中所包含的信息。**

### 系统要求

Kali 系统对硬件有一些最基本的要求及建议。根据用户使用目的，你可以使有更高的配置。这篇文章中假设读者想要把 kali 安装为电脑上唯一的操作系统。

1. 至少 10GB 的磁盘空间；强烈建议分配更多的存储空间。
2. 至少 512MB 的内存；希望有更多的内存，尤其是在图形界面下。
3. 支持 USB 或 CD/DVD 启动方式。
4. Kali Linux 系统 ISO 镜像下载地址 <https://www.kali.org/downloads/>。

### 使用 dd 命令创建 USB 启动工具

该文章假设可使用 USB 设备来引导安装系统。注意尽可能的使用 4GB 或者 8GB 的 USB 设备，并且其上的所有数据将会被删除。

本文作者在使用更大容量的 USB 设备在安装的过程中遇到了问题，但是别的人应该还是可以的。不管怎么说，下面的安装步骤将会清除 USB 设备内的数据。

在开始之前请务必备份所有数据。用于安装 Kali Linux 系统的 USB 启动设备将在另外一台机器上创建完成。

第一步是获取 Kali Linux 系统 ISO 镜像文件。本指南将使用最新版的包含 Enlightenment 桌面环境的 Kali Linux 系统进行安装。

在终端下输入如下命令来获取这个版本的 ISO 镜像文件。

```
$ cd ~/Downloads
$ wget -c http://cdimage.kali.org/kali-2016.2/kali-linux-e17-2016.2-amd64.iso

```

上面两个命令将会把 Kali Linux 的 ISO 镜像文件下载到当前用户的 Downloads 目录。

下一步是把 ISO 镜像写入到 USB 设备中来启动安装程序。我们可以使用 Linux 系统中的 `dd` 命令来完成该操作。首先，该 USB 设备要在 `lsblk` 命令下可找到。

```
$ lsblk

```

![Find Out USB Device Name in Linux](/data/attachment/album/201611/26/123446f91xacx7qzzrd5dr.png)

*在 Linux 系统中确认 USB 设备名*

确定 USB 设备的名字为 `/dev/sdc`，可以使用 dd 工具将 Kali 系统镜像写入到 USB 设备中。

```
$ sudo dd if=~/Downloads/kali-linux-e17-2016.2-amd64.iso of=/dev/sdc

```

**注意：**以上命令需要 root 权限，因此使用 `sudo` 命令或使用 root 账号登录来执行该命令。这个命令会删除 USB 设备中的所有数据。确保已备份所需的数据。

一旦 ISO 镜像文件完全复制到 USB 设备，接下来可进行 Kali Linux 系统的安装。

### 安装 Kali Linux 系统

1、 首先，把 USB 设备插入到要安装 Kali 操作系统的电脑上，然后从 USB 设备引导系统启动。只要成功地从 USB 设备启动系统，你将会看到下面的图形界面，选择“Install”或者“Graphical Install”选项。

本指南将使用“Graphical Install”方式进行安装。

![Kali Linux Boot Menu](/data/attachment/album/201611/26/123447n6urwtb33rfzdwjz.png)

*Kali Linux 启动菜单*

2、 下面几个界面将会询问用户选择区域设置信息，比如语言、国家，以及键盘布局。

选择完成之后，系统将会提示用户输入主机名和域名信息。输入合适的环境信息后，点击继续安装。

![Set Hostname for Kali Linux](/data/attachment/album/201611/26/123447ao2m9m4qce668kec.png)

*设置 Kali Linux 系统的主机名*

![Set Domain for Kali Linux](/data/attachment/album/201611/26/123447zxzzccgh3ghk8ixi.png)

*设置 Kali Linux 系统的域名*

3、 主机名和域名设置完成后，需要设置 root 用户的密码。请勿忘记该密码。

![Set Root User Password for Kali Linux](/data/attachment/album/201611/26/123448p71uz77nexqquh7q.png)

*设置 Kali Linux 系统用户密码*

4、 密码设置完成之后，安装步骤会提示用户选择时区然后停留在硬盘分区界面。

如果 Kali Linux 是这个电脑上的唯一操作系统，最简单的选项就是使用“Guided – Use Entire Disk”，然后选择你需要安装 Kali 的存储设备。

![Select Kali Linux Installation Type](/data/attachment/album/201611/26/123448tv2o7d3bbogwhchc.png)

*选择 Kali Linux 系统安装类型*

![](/data/attachment/album/201611/26/123449vxrgrex0tr4k1ege.png)

*选择 Kali Linux 安装磁盘*

5、 下一步将提示用户在存储设备上进行分区。大多数情况下，我们可以把整个系统安装在一个分区内。

![Install Kali Linux Files in Partition](/data/attachment/album/201611/26/123449wb300b0yh063b4b4.png)

*在分区上安装 Kali Linux 系统*

6、 最后一步是提示用户确认将所有的更改写入到主机硬盘。注意，点确认后将会**清空整个磁盘上的所有数据**。

![Confirm Disk Partition Write Changes](/data/attachment/album/201611/26/123450hkt5mtzta83ldl8d.png)

*确认磁盘分区更改*

7、 一旦确认分区更改，安装包将会进行复制文件的安装过程。安装完成后，你需要设置一个网络镜像源来获取软件包和系统更新。如果你希望使用 Kali 的软件库，确保开启此功能。

![Configure Kali Linux Package Manager](/data/attachment/album/201611/26/123451kv801zjff08v4v10.png)

*配置 Kali Linux 包管理器*

8、 选择网络镜像源后，系统将会询问你安装 Grub 引导程序。再次说明，本文假设你的电脑上仅安装唯一的 Kali Linux 操作系统。

在该屏幕上选择“Yes”，用户需要选择要写入引导程序信息的硬盘引导设备。

![Install GRUB Boot Loader](/data/attachment/album/201611/26/123452zwkmnqqqqmh297w3.png)

*安装 Grub 引导程序*

![Select Partition to Install GRUB Boot Loader](/data/attachment/album/201611/26/123452nvbs7hgsz8u3pu7h.png)

*选择安装 Grub 引导程序的分区*

9、 当 Grub 安装完成后，系统将会提醒用户重启机器以进入新安装的 Kali Linux 系统。

![Kali Linux Installation Completed](/data/attachment/album/201611/26/123453x862e0057m56e37j.png)

*Kali Linux 系统安装完成*

10、 因为本指南使用 Enlightenment 作为 Kali Linux 系统的桌面环境，因此默认情况下是启动进入到 shell 环境。

使用 root 账号及之前安装过程中设置的密码登录系统，以便运行 Enlightenment 桌面环境。

登录成功后输入命令`startx`进入 Enlightenment 桌面环境。

```
# startx

```

![Start Enlightenment Desktop in Kali Linux](/data/attachment/album/201611/26/123453t4cq69s4bhnzik4l.png)

*Kali Linux 下进入 Enlightenment 桌面环境*

初次进入 Enlightenment 桌面环境时，它将会询问用户进行一些首选项配置，然后再运行桌面环境。

 [![Kali Linux Enlightenment Desktop](/data/attachment/album/201611/26/123455bwc9y99dhmxcq67w.png)](http://www.tecmint.com/wp-content/uploads/2016/10/Kali-Linux-Enlightenment-Desktop.png)

*Kali Linux Enlightenment 桌面*

此时，你已经成功地安装了 Kali Linux 系统，并可以使用了。后续的文章我们将探讨 Kali 系统中一些有用的工具以及如何使用这些工具来探测主机及网络方面的安全状况。

请随意发表任何评论或提出相关的问题。

---

via: <http://www.tecmint.com/kali-linux-installation-guide/>

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

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


写一个 JavaScript 框架：比 setTimeout 更棒的定时执行

这是 [JavaScript 框架系列](https://blog.risingstack.com/writing-a-javascript-framework-project-structuring/)的第二章。在这一章里，我打算讲一下在浏览器里的异步代码不同执行方式。你将了解定时器和事件循环之间的不同差异，比如 setTimeout 和 Promises。

这个系列是关于一个开源的客户端框架，叫做 NX。在这个系列里，我主要解释一下写该框架不得不克服的主要困难。如果你对 NX 感兴趣可以参观我们的 [主页](http://nx-framework.com/)。

![](/data/attachment/album/201611/26/134122vaw54o3wockd1u4c.jpg)

这个系列包含以下几个章节：

1. [项目结构](https://blog.risingstack.com/writing-a-javascript-framework-project-structuring/)
2. 定时执行 (当前章节)
3. [沙箱代码评估](https://blog.risingstack.com/writing-a-javascript-framework-sandboxed-code-evaluation/)
4. [数据绑定介绍](https://blog.risingstack.com/writing-a-javascript-framework-data-binding-dirty-checking/)
5. [数据绑定与 ES6 代理](https://blog.risingstack.com/writing-a-javascript-framework-data-binding-es6-proxy/)
6. 自定义元素
7. 客户端路由

### 异步代码执行

你可能比较熟悉 `Promise`、`process.nextTick()`、`setTimeout()`，或许还有 `requestAnimationFrame()` 这些异步执行代码的方式。它们内部都使用了事件循环，但是它们在精确计时方面有一些不同。

在这一章里，我将解释它们之间的不同，然后给大家演示怎样在一个类似 NX 这样的先进框架里面实现一个定时系统。不用我们重新做一个，我们将使用原生的事件循环来达到我们的目的。

### 事件循环

事件循环甚至没有在 [ES6 规范](http://www.ecma-international.org/ecma-262/6.0/)里提到。JavaScript 自身只有任务（Job）和任务队列（job queue）。更加复杂的事件循环是在 NodeJS 和 HTML5 规范里分别定义的，因为这篇是针对前端的，我会在详细说明后者。

事件循环可以被看做某个条件的循环。它不停的寻找新的任务来运行。这个循环中的一次迭代叫做一个滴答（tick）。在一次滴答期间执行的代码称为一次任务（task）。

```
while (eventLoop.waitForTask()) {
  eventLoop.processNextTask()
}

```

任务是同步代码，它可以在循环中调度其它任务。一个简单的调用新任务的方式是 `setTimeout(taskFn)`。不管怎样， 任务可能有很多来源，比如用户事件、网络或者 DOM 操作。

![](/data/attachment/album/201611/26/134135mynxkwxbrmrer2y2.svg)

### 任务队列

更复杂一些的是，事件循环可以有多个任务队列。这里有两个约束条件，相同任务源的事件必须在相同的队列，以及任务必须按插入的顺序进行处理。除此之外，浏览器可以做任何它想做的事情。例如，它可以决定接下来处理哪个任务队列。

```
while (eventLoop.waitForTask()) {
  const taskQueue = eventLoop.selectTaskQueue()
  if (taskQueue.hasNextTask()) {
    taskQueue.processNextTask()
  }
}

```

用这个模型，我们不能精确的控制定时。如果用 `setTimeout()`浏览器可能决定先运行完其它几个队列才运行我们的队列。

![](/data/attachment/album/201611/26/134136c5mjjeemruufjwiz.svg)

### 微任务队列

幸运的是，事件循环还提供了一个叫做微任务（microtask）队列的单一队列。当前任务结束的时候，微任务队列会清空每个滴答里的任务。

```
while (eventLoop.waitForTask()) {
  const taskQueue = eventLoop.selectTaskQueue()
  if (taskQueue.hasNextTask()) {
    taskQueue.processNextTask()
  }

  const microtaskQueue = eventLoop.microTaskQueue
  while (microtaskQueue.hasNextMicrotask()) {
    microtaskQueue.processNextMicrotask()
  }
}

```

最简单的调用微任务的方法是 `Promise.resolve().then(microtaskFn)`。微任务按照插入顺序进行处理，并且由于仅存在一个微任务队列，浏览器不会把时间弄乱了。

此外，微任务可以调度新的微任务，它将插入到同一个队列，并在同一个滴答内处理。

![](/data/attachment/album/201611/26/134136jcffig7ib7cfobbx.svg)

### <ruby> 绘制 <rp>  （ </rp> <rt>  Rendering </rt> <rp>  ） </rp></ruby>

最后是<ruby> 绘制 <rp>  （ </rp> <rt>  Rendering </rt> <rp>  ） </rp></ruby>调度，不同于事件处理和分解，绘制并不是在单独的后台任务完成的。它是一个可以运行在每个循环滴答结束时的算法。

在这里浏览器又有了许多自由：它可能在每个任务以后绘制，但是它也可能在好几百个任务都执行了以后也不绘制。

幸运的是，我们有 `requestAnimationFrame()`，它在下一个绘制之前执行传递的函数。我们最终的事件模型像这样：

```
while (eventLoop.waitForTask()) {
  const taskQueue = eventLoop.selectTaskQueue()
  if (taskQueue.hasNextTask()) {
    taskQueue.processNextTask()
  }

  const microtaskQueue = eventLoop.microTaskQueue
  while (microtaskQueue.hasNextMicrotask()) {
    microtaskQueue.processNextMicrotask()
  }

  if (shouldRender()) {
    applyScrollResizeAndCSS()
    runAnimationFrames()
    render()
  }
}

```

现在用我们所知道知识来创建定时系统！

### 利用事件循环

和大多数现代框架一样，[NX](http://nx-framework.com/) 也是基于 DOM 操作和数据绑定的。批量操作和异步执行以取得更好的性能表现。基于以上理由我们用 `Promises`、 `MutationObservers` 和 `requestAnimationFrame()`。

我们所期望的定时器是这样的：

1. 代码来自于开发者
2. 数据绑定和 DOM 操作由 NX 来执行
3. 开发者定义事件钩子
4. 浏览器进行绘制

#### 步骤 1

NX 寄存器对象基于 [ES6 代理](https://ponyfoo.com/articles/es6-proxies-in-depth) 以及 DOM 变动基于[MutationObserver](https://davidwalsh.name/mutationobserver-api) （变动观测器）同步运行（下一节详细介绍）。 它作为一个微任务延迟直到步骤 2 执行以后才做出反应。这个延迟已经在 `Promise.resolve().then(reaction)` 进行了对象转换，并且它将通过变动观测器自动运行。

#### 步骤 2

来自开发者的代码（任务）运行完成。微任务由 NX 开始执行所注册。 因为它们是微任务，所以按序执行。注意，我们仍然在同一个滴答循环中。

#### 步骤 3

开发者通过 `requestAnimationFrame(hook)` 通知 NX 运行钩子。这可能在滴答循环后发生。重要的是，钩子运行在下一次绘制之前和所有数据操作之后，并且 DOM 和 CSS 改变都已经完成。

#### 步骤 4

浏览器绘制下一个视图。这也有可能发生在滴答循环之后，但是绝对不会发生在一个滴答的步骤 3 之前。

### 牢记在心里的事情

我们在原生的事件循环之上实现了一个简单而有效的定时系统。理论上讲它运行的很好，但是还是很脆弱，一个轻微的错误可能会导致很严重的 BUG。

在一个复杂的系统当中，最重要的就是建立一定的规则并在以后保持它们。在 NX 中有以下规则：

1. 永远不用 `setTimeout(fn, 0)` 来进行内部操作
2. 用相同的方法来注册微任务
3. 微任务仅供内部操作
4. 不要干预开发者钩子运行时间

#### 规则 1 和 2

数据反射和 DOM 操作将按照操作顺序执行。这样只要不混合就可以很好的延迟它们的执行。混合执行会出现莫名其妙的问题。

`setTimeout(fn, 0)` 的行为完全不可预测。使用不同的方法注册微任务也会发生混乱。例如，下面的例子中 microtask2 不会正确地在 microtask1 之前运行。

```
Promise.resolve().then().then(microtask1)
Promise.resolve().then(microtask2)

```

![](/data/attachment/album/201611/26/134137qozwo6xrmbiblrbk.svg)

#### 规则 3 和 4

分离开发者的代码执行和内部操作的时间窗口是非常重要的。混合这两种行为会导致不可预测的事情发生，并且它会需要开发者了解框架内部。我想很多前台开发者已经有过类似经历。

### 结论

如果你对 NX 框架感兴趣，可以参观我们的[主页](http://nx-framework.com/)。还可以在 GIT 上找到我们的[源代码](https://github.com/RisingStack/nx-framework)。

在下一节我们再见，我们将讨论 [沙盒化代码执行](https://blog.risingstack.com/writing-a-javascript-framework-sandboxed-code-evaluation/)！

你也可以给我们留言。

---

via: <https://blog.risingstack.com/writing-a-javascript-framework-execution-timing-beyond-settimeout/>

作者：[Bertalan Miklos](https://blog.risingstack.com/author/bertalan/) 译者：[kokialoves](https://github.com/kokialoves) 校对：[wxy](https://github.com/wxy)

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


一周开源新闻：Fedora 25 、Cinnamon 3.2 正式发布

Summary: 更多：英特尔 Graphics Installer for Linux 2.0.3 支持 Ubuntu 16.10 和 Fedora 24

Fedora 25的Wayland確實流暢～

支持！

可以动态切换吗

装上了 Fedora 25，试了下 Wayland，在我的超低端笔记本上，目前并没有感觉到比 X 流畅，反而有比较明显的卡顿。

我们要什么！<br />
提子！批股！NVIDIA！

还行在intel 6100集显上还行

### Fedora 25 正式发布，首个默认提供 Wayland 的主流 OS

![](/data/attachment/album/201611/26/182621ofghfm24mxflffxp.jpg)

2016 年 11 月 22 日，Fedora 项目组正式[宣布](https://fedoramagazine.org/fedora-25-released/) Fedora 25 发布, 这是代表最新 GNU/Linux 技术和开源软件的里程碑。 开发了 6 个月，两次推迟发布，Fedora 25 Linux 现在已可以下载，而且看起来它是默认带 Wayland 显示服务器的第一个发行版。 不过只用于采用 GNOME 3.22 桌面环境的工作站版本。

“现在默认用 Wayland 取代了之前的 X11 显示服务器。 目标是提供一个更流畅，丰富的体验，” 前 Fedora 项目组长 Paul W. Frields 说。“如果想的话，你还可以选择 X11 。 选择登录用户后， 使用‘设置’按钮来切换。这个新的显示服务器可以更好的匹配现代操作系统和硬件。”

不过 Wayland 距离玩游戏的要求还有距离，这意味着如果要玩需要 GPU 的游戏，还要切换到 X11 显示服务器。

### **Cinnamon 3.2 Desktop 正式发布**

11 月 21 日, Linux Mint 的项目组长 Clement Lefebvre，宣布 [Cinnamon 3.2](http://segfault.linuxmint.com/2016/11/cinnamon-3-2-released/) 正式发布。“我代表整个团队，以及为此版本做出贡献的开发者们，高兴地宣布 Cinnamon 3.2 正式发布。” 我们将在即将于 12 月发布的 Linux Mint 18.1 "Serena" 系统上，充分享受 Cinnamon 3.2 桌面环境。

![](/data/attachment/album/201611/26/182624z36zjy9t940t8t80.jpg)

Cinnamon 3.2 桌面环境有很多优点，其中最令人兴奋的是，支持垂直面板，通知声效，改造的键盘小程序，Qt 5.7 支持，菜单动画设置，全新屏保，以及很多 Nemo 和 控制中心 的变化。

### 英特尔 Graphics Installer for Linux 2.0.3 支持 Ubuntu 16.10 和 Fedora 24

Linux 上的 Intel Graphics Update Tool 2.0.3 终于支持了最新的 Ubuntu 和 Fedora 版本. 之前它被称为 Intel Graphics Installer for Linux，使用该工具用户可以为他们的英特尔 HD GPUs 安装最新图像驱动。它特别支持了 Ubuntu 和 Fedora， 而且最新版本增加了对 Ubuntu 16.10 (Yakkety Yak) 和 Fedora 24 到 25 的支持。

“升级该工具 2.0.3 是为了支持 Ubuntu 16.10 和 Fedora 24。 这些 Linux 发行版的早期发布版本已不被鼓励使用，升级工具将不再支持之前的版本。如果要使用此发布，请先将您的操作系统升级到新版本," [通知](https://01.org/linuxgraphics/downloads/intel-graphics-update-tool-linux-os-v2.0.3)中写到。

![](/data/attachment/album/201611/26/182625lj479q4qdw4ee77a.jpg)


火狐是否在未经授权的情况下搜集您的数据？

担心的话，查代码，改代码，自己编译。

反正firefox移动版没几个人用

我能说，天朝就手机号就没隐私，随便浏览个网页都能接到推销电话

我在用

卸载又快了

安卓上面的火狐不好用。

手机版火狐浏览器确实不好用，但是广告实在太多，一般浏览器实在屏蔽不了就用了火狐。。。。<br />
别说为什么不用chrome,科学上网之类，pc平时不网购什么的可以翻墙，手机真的怕翻墙不安全。

![](/data/attachment/album/201611/26/224212djlk8scqn4lv5zbp.jpg)

打包在 Firefox Web 浏览器里面的地理位置服务即使浏览器关闭后也会在后台运行。

我们还没有从关于浏览器插件丑闻的消息中平复下来。插件原本目的是保卫隐私，[但现在却把信息卖给了第三方公司](https://iwf1.com/shock-this-popular-browser-add-on-sells-your-browsing-history/)。然而更令人愤怒的是其规模完全超出我们的预计。

**MLS**，即 Mozilla 位置服务，其可以让设备基于类似于 WIFI 接入点、无线电基站和蓝牙信标等基础设施确定其位置。

MLS 非常像是 Google 位置服务，后者是需要在 Android 设备上打开 GPS 并选择“高精度”模式时使用的服务。

那些曾经经历过 GPS 问题的人可能会知道这个模式是多么精确。

MLS 服务除了能够准确地确定您的位置以外，这个服务可以通过使用 WiFi 网络收集两种个人身份信息，包括**愿意贡献到数据库的用户**和**被扫描的 WiFi 设备的所有者**。

话虽这么说，Mozilla 也提到说你可以选择退出服务，但你真的可以退出吗？

### 当后台变成你隐私的展台

作为一个众包项目，为了维护和发展 MLS，Mozilla 事实上非常依赖于用户的贡献，因此他们开发了多种方法以便用户参与进来。

其中之一，就是被终端用户使用的一款名为 Stumbler 的 Android 应用程序：

>
> [Mozilla Stumbler](https://location.services.mozilla.com/apps) 是一个开源的无线网络扫描器，它为我们的众包位置数据库收集 GPS、蜂窝网络和无线网络元数据。
>
>
>

这样一来，Stumbler 不仅仅是一个独立的应用程序，同时也是 Firefox 在 Android 设备上提供的一种为 MLS“贡献数据和增强功能”的服务。

该服务的问题在于它在后台运行，而大多数用户都不知道它，**即使您可能已经禁用它**。

根据 Mozilla 提供的[信息](https://location.services.mozilla.com/apps)，要启用该服务，您需要打开“设置”菜单（在 Firefox for Android 版本中） -> 打开“隐私”部分 -> 滚动到底部以查看“数据选择”，最后，勾选 Mozilla 位置服务框。

![](/data/attachment/album/201611/26/224226j9udundr7vukdp1y.jpg)

*Mozilla 定位服务尚未勾选，但 Stumbler 已开启*

实际上，你会发现 Stumbler 服务**运行在你的设备后台**，这意味着它几乎不可见，因为它没有接口，即使 MLS 框未被选中，即使“数据选择”复选框都未选中，甚至 Firefox 浏览器本身已被关闭。

显然，停止 stumbler 的唯一方法是直接结束它。然而，这样做你首先需要一种方法来检测它的运行和结束，最终，这只是一个设备重启前的临时解决方案。

### 如何保证安全

为了避免 MLS 收集您的数据，仍然有一些方法值得您尝试一下，希望这些方法不会像在 Firefox for Android 中的MLS 复选框一样被 Mozilla 忽视。

您可以将您的无线网络 SSID 隐藏或者在 SSID 结尾添加“\_nomap”，例如将您的 SSID 从“myWirelessNetwork”更名为“myWirelessNetwork\_nomap”。这在向 Mozilla 的应用程序暗示，您不希望参与他们的数据收集活动。

对于 Android 上的 Stumbler 服务，由于是一个服务（而不是进程），您可能无法在运行的进程/最近的应用程序列表中看到它。 因此，使用专用应用程序关闭它或启用“开发人员选项”，并转到“运行服务” -> 点击 Firefox，最后，停止“stumbler”。

---

via: <https://iwf1.com/is-mozilla-firefox-collecting-your-data-without-your-consent/>

作者：[Liron](https://iwf1.com/is-mozilla-firefox-collecting-your-data-without-your-consent/) 译者：[flankershen](https://github.com/flankershen) 校对：[wxy](https://github.com/wxy)

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


开源 vs. 闭源

Summary: 开源操作系统和闭源操作系统之间有诸多不同。这里我们仅寥书几笔。

开源是一把双刃剑！

开源协议逼的软件赚不了钱。便是开源最大的恶。程序员也要吃饭的。

开源协议不受法律保护，确实是个问题

开源协议受法律保护啊！但是那是在美国！

呵呵，这锅开源协议不背！

现在看来，确实gpl的自由软件才是保护了软件的自由进化。很多别的所谓开源软件越来越像java了，商家那住最重要的部分，比传统闭源软件还垄断，docker的发展就是这样子，结果呢就是企业间的pk和分化，最终也没有形成有效的社区化大蛋糕

初看标题，以为是一款vs. 的开源软件闭源了，所以点进来看看

开源操作系统和闭源操作系统之间有诸多不同。这里我们仅寥书几笔。

![](/data/attachment/album/201611/27/091930dvkff48fy54vy38f.jpg)

**开源操作系统**和**闭源操作系统**之间有诸多不同。这里我们仅寥书几笔。

### 开源是什么？自由！

这是用户需要知道的最重要的一点。无论我是否打算修改代码，其他人出于善意的修改都不应受到限制。且如果用户喜欢，他们可以分享这个软件。使用**开源**软件，这些都是可能的。

**闭源**操作系统的许可条款很是吓人。但真的所有人都会看吗？不，许多用户只是点了一下‘Accept’ 而已。

### 价格

几乎所有的开源操纵系统是免费的。仅有自愿性质的捐款。且只需有个一个 **CD/DVD 或 USB** 就能将系统安装到所有你想要安装的电脑上。

闭源操作系统相较于开源 OS 就贵了许多，如果你用它来构建 PC，每台 PC 得你花不少于 $100。

我们可以用花在闭源软件上的钱去买更好的东西。

### 选择

开源操作系统的发行版有很多。如果你不中意眼下的这个，你可以尝试其他的发行版，总能找到适合你的那一个。

诸如 Ubuntu studio、Bio Linux、Edubuntu、Kali Linux、Qubes、SteamOS 这些发行版，就是针对特定用户群产生的发行版。

闭源软件有“选择”这种说法吗？我觉得是没有的。

### 隐私

**开源操作系统**无需收集用户数据信息。不会根据用户的个性显示广告，也不会把你的信息卖给第三方机构。如果开发者需要资金，他们会要求捐助，或是在他们的网页上打广告。广告的内容也会与 Linux 相关，对我们有益无害。

你一定知道那个主流的闭源操作系统（名字就不写了，大家都知道的），据说因为收集用户信息这件事，导致多数用户关闭了他们的免费更新服务。多数该系统的用户为了避免升级，将更新功能关闭，他们宁可承担安全风险也不要免费更新。

### 安全

开源软件大多安全。究其缘由不仅有市场占有率低这个原因，其本身的构成方式就比较安全。例如， Qubes Os 是最安全的操作系统之一，它将运行的软件相互隔离。

闭源操作系统向易用性妥协，使其变得愈发脆弱。

### 硬件支持

我们中有大多数人，家里还放着那些不想丢的旧 PC，这时一个轻量级的发行版可能会让这些老家伙们重获新生。你可以试试在文章 [5 个适合旧电脑的轻量级 Linux](http://www.linuxandubuntu.com/home/5-lightweight-linux-for-old-computers) 中罗列的那些轻量级操作系统发行版。基于 Linux 的系统几乎包含所有设备的驱动，所以基本不需要你亲自寻找、安装驱动。

闭源操作系统时不时中止对旧硬件的支持，迫使用户去购买新的硬件。我们还不得不亲自寻找、安装驱动。

### 社区支持

几乎所有的**开源操作系统**都有用户论坛，你可以在那里提问题，并从别的用户那里得到答案。大家在那里分享技巧和窍门，互帮互助。有经验的 Linux 用户往往乐于帮助新手，为此他们常常不遗余力。

**闭源操作系统**社区和开源操作系统社区简直无法相提并论。提出的问题常常得不到回答。

### 商业化

在操作系统上挣钱是非常困难的。（开源）开发者一般通过用户的捐款和在网站上打广告来挣钱。捐款主要用于支付主机的开销和开发者的薪水。

许多闭源操作系统，不仅仅通过出售软件的使用许可这种方式来赚钱，还会推送广告大赚一票。

### 垃圾应用

我承认有些开源操作系统会提供一些我们可能一辈子都不会用到的应用，有些人认为他们是垃圾应用。但是也有发行版只提供最小安装，其中就不包含这些不想要的软件。所以，这不是真正的问题。

而所有的闭源操作系统中都包含厂商安装的垃圾应用，强制你安装，就像在安装一个干净系统一样。

开源软件更像是一门哲学。一种分享和学习的方式。甚至还有益于经济。

我们已经将我们知晓的罗列了出来。如果你觉得我们还漏了些什么，可以评论告诉我们。

---

via: <http://www.linuxandubuntu.com/home/open-source-vs-closed-source>

作者：[Mohd Sohail](https://www.linkedin.com/in/mohdsohail) 译者：[martin2011qi](https://github.com/martin2011qi) 校对：[jasminepeng](https://github.com/jasminepeng)

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


安卓编年史（8）：Android 1.5 Cupcake——虚拟键盘打开设备设计的大门

这个键盘应该被加入多GNOME3桌面中了！！！！

![](/data/attachment/album/201611/27/201437anbnnbvivzf32gtb.jpg)

![安卓 1.5 的屏幕软键盘输入时的输入建议栏，大写状态键盘，数字与符号界面，更多符号弹窗。](/data/attachment/album/201611/27/122438nrg3krl8nsrd8tr8.png)

*安卓 1.5 的虚拟键盘输入时的输入建议栏、大写状态键盘、数字与符号界面、更多符号弹窗。 [Ron Amadeo 供图]*

### Android 1.5 Cupcake——虚拟键盘打开设备设计的大门

在 2009 年 4 月，安卓 1.1 发布后将近三个月后，安卓 1.5 发布了。这是第一个拥有公开的、市场化代号的安卓版本：纸杯蛋糕（Cupcake）。从这个版本开始，每个版本的安卓将会拥有一个按字母表排序，以小吃为主题的代号。

纸杯蛋糕新增功能中最重要的明显当属虚拟键盘。这是 OEM 厂商第一次有可能抛开带有数不清的按键的实体键盘以及复杂的滑动结构，创造出平板风格的安卓设备。

安卓的按键标识可以在大小写之间切换，这取决于大写锁定是否开启。尽管默认情况下它是关闭的，显示在键盘顶部的建议栏有个选项可以打开它。在按键的弹框中带有省略号的，就像“u”，上面图那样的，可以在按住的情况下可以输入弹框中的[发音符号](http://en.wikipedia.org/wiki/Diacritic)。键盘可以切换到数字和符号，长按句号键可以打开更多符号。

![1.5和1.1中的应用程序界面和通知面板的对比。](/data/attachment/album/201611/27/122441w04acvk7o4p4dodi.png)

*1.5 和 1.1 中的应用程序界面和通知面板的对比。 [Ron Amadeo 供图]*

给新的“摄像机”功能增加了新图标，Google Talk 从 IM 中分离出来成为了一个独立的应用。亚马逊 MP3 和浏览器的图标同样经过了重新设计。亚马逊 MP3 图标更改的主要原因是亚马逊即将计划推出其它的安卓应用，而“A”图标所指范围太泛了。浏览器图标无疑是安卓 1.1 中最糟糕的设计，所以它被重新设计了，并且不再像是一个桌面操作系统的对话框。应用抽屉的最后一个改变是“图片”，它被重新命名为了“相册”。

通知面板同样经过了重新设计。面板背景加上了布纹纹理，通知的渐变效果也被平滑化了。安卓 1.5 在系统核心部分有许多设计上的微小改变，这些改变影响到所有的应用。在“清除通知”按钮上，你可以看到全新的系统按钮风格，与旧版本的按钮相比有了渐变、更细的边框线以及更少的阴影。

![安卓1.5和1.1中的“添加到主屏幕”对话框。](/data/attachment/album/201611/27/122444xxxnf8s2h2bejebi.png)

*安卓 1.5 和 1.1 中的“添加到主屏幕”对话框。 [Ron Amadeo 供图]*

第三方小部件是纸杯蛋糕的另一个头等特性，它们现在仍然是安卓的本质特征之一。无论是用来控制应用还是显示应用的信息，开发者们都可以为他们的应用捆绑一个主屏幕小部件。谷歌同样展示了一些它们自己的新的小部件，分别来自日历和音乐这两个应用。

![左：日历小部件，音乐小部件以及一排实时文件夹的截图。中：文件夹列表。右：“带电话号码的联系人”实时文件夹的打开视图。](/data/attachment/album/201611/27/122449dqgrn8ofjjo21g8g.png)

*左：日历小部件，音乐小部件以及一排实时文件夹的截图。中：文件夹列表。右：“带电话号码的联系人”实时文件夹的打开视图。 [Ron Amadeo 供图]*

在上方左边的截图里你可以看到新的日历和音乐图标。日历小部件只能显示当天的一个事件，点击它会打开日历。你不能够选择日历所显示的内容，小部件也不能够重新设置大小——它就是上面看起来的那个样子。音乐小部件是蓝色的——尽管音乐应用里没有一丁点的蓝色——它展示了歌曲名和歌手名，此外还有播放和下一曲按钮。

同样在左侧截图里，底部一排的头三个文件夹是一个叫做“[实时文件夹](http://android-developers.blogspot.com/2009/04/live-folders.html)”的新特性。它们可以在“添加到主屏幕”菜单中的新顶层选项“文件夹”中被找到，就像你在中间那张图看到的那样。实时文件夹可以展示一个应用的内容而不用打开这个应用。纸杯蛋糕带来的都是和联系人相关的实时文件夹，能够显示所有联系人，带有电话号码的联系人和加星标的联系人。

实时文件夹在主屏的弹窗使用了一个简单的列表视图，而不是图标。联系人只是实时文件夹的一个初级应用，它是给开发者使用的一个完整 API。谷歌用 Google Books 应用做了个图书文件夹的演示，它可以显示 RSS 订阅或是一个网站的热门故事。实时文件夹是安卓没有成功实现的想法之一，这个特性最终在蜂巢（3.x）中被取消。

![摄像机和相机界面，屏幕上有触摸快门。](/data/attachment/album/201611/27/122450o1yiizkwcy8i99si.png)

*摄像机和相机界面，屏幕上有触摸快门。 [Ron Amadeo 供图]*

如果你不能认出新的“摄像机”图标，这不奇怪，视频录制是在安卓 1.5 中才被添加进来的。相机和摄像机两个图标其实是同一个应用，你可用过菜单中的“切换至相机”和“切换至摄像机”选项在它们之间切换。T-Mobile G1 上录制的视频质量并不高。一个“高”质量的测试视频输出一个 .3GP 格式的视频文件，其分辨率仅为 352 x 288，帧率只有 4FPS。

除了新的视频特性，相机应用中还可以看到一些急需的 UI 调整。上方左侧的快照展示了最近拍摄的那张照片，点击它会跳转到相册中的相机胶卷。各个界面上方右侧的圆形图标是触摸快门，这意味着，从 1.5 开始，安卓设备不再需要一个实体相机按钮。

这个界面相比于之后版本的相机应用实际上更加接近于安卓 4.2 的设计。尽管后续的设计会向相机加入愚蠢的皮革纹理和更多的控制设置，安卓最终还是回到了基本的设计，安卓 4.2 的重新设计和这里有很多共同之处。安卓 1.5 中的原始布局演变成了安卓 4.2 中的最小化的、全屏的取景器。

![Google Talk运行在Google Talk中vs运行在IM应用中。](/data/attachment/album/201611/27/122451ezbjzpaz5ap44aqa.png)

*Google Talk 运行在 Google Talk 中 vs 运行在 IM 应用中。 [Ron Amadeo 供图]*

安卓 1.0 的 IM 即时通讯应用功能上支持 Google Talk，但在安卓 1.5 中，Google Talk 从中分离出来成为独立应用。IM应用中对其的支持已经被移除。Google Talk（上图左侧）明显是基于 IM 应用（上图右侧）的，但随着独立应用在 1.5 中的发布，在 IM 应用的工作被放弃了。

新的 Google Talk 应用拥有重新设计过的状态栏、右侧状态指示灯、重新设计过的移动设备标识，是个灰色的安卓小绿人图案。聊天界面的蓝色的输入框变成了更加合理的灰色，消息的背景从淡绿和白色变成了淡绿和绿色。有了独立的应用，谷歌可以向其中添加 Gtalk 独有的特性，比如“不保存聊天记录”聊天，该特性可以阻止 Gmail 保存每个聊天记录。

![安卓1.5的日历更加明亮。](/data/attachment/album/201611/27/122452twwsjjpopbwuwjws.png)

*安卓 1.5 的日历更加明亮。 [Ron Amadeo 供图]*

日历抛弃了丑陋的黑色背景上白色方块的设计，转变为全浅色主题。所有东西的背景都变成了白色，顶部的星期日变成了蓝色。单独的约会方块从带有颜色的细条变成了拥有整个颜色背景，文字也变为白色。这将是很长一段时间内日历的最后一次改动。

![从左到右：新的浏览器控件，缩放视图，复制/粘贴文本高亮。](/data/attachment/album/201611/27/122453r114gnnnzmj91abm.png)

*从左到右：新的浏览器控件，缩放视图，复制/粘贴文本高亮。 [Ron Amadeo 供图]*

安卓 1.5 从系统全局修改了缩放控件。缩放控件不再是两个大圆形，取而代之的是一个圆角的矩形从中间分开为左右两个按钮。这些新的控件被用在了浏览器、谷歌地图和相册之中。

浏览器在缩放功能上做了很多工作。在放大或缩小之后，点击“1x”按钮可以回到正常缩放状态。底部右侧的按钮会将缩放整个页面并在页面上显示一个放大矩形框，就像你能在上面中间截图看到的那样。按住矩形框并且释放会将页面的那一部分显示回“1x”视图。安卓并没有加速滚动，这使得最快的滚动速度也着实很慢——这就是谷歌对长网页页面导航的解决方案。

浏览器的另一个新增功能就是从网页上复制文本——之前你只能从输入框中复制文本。在菜单中选择“复制文本”会激活高亮模式，在网页文本上拖动你的手指使它们高亮。G1 的轨迹球对于这种精准的移动十分的方便，并且能够控制鼠标指针。这里并没有可以拖动的光标，当你的手指离开屏幕的时候，安卓就会复制文本并且移除高亮。所以你必须做到荒谬般的精确来使用复制功能。

安卓 1.5 中的浏览器很容易崩溃——比之前的版本经常多了。仅仅是以桌面模式浏览 Ars Technica 就会导致崩溃，许多其它的站点也是一样。

![](/data/attachment/album/201611/27/122454nohbkaahoh6ihfh2.png)

*Ron Amadeo供图*

默认的锁屏界面和图形锁屏都不再是空荡荡的黑色背景，而是和主屏幕一致的壁纸。

图形解锁界面的浅色背景显示出了谷歌在圆圈对齐工作上的草率和马虎。白色圆圈在黑圆圈里从来都不是在正中心的位置——像这样基本的对齐问题对于这一时期的安卓是个频繁出现的问题。

![Youtube上传工具，内容快照，自动旋转设置，全新的音乐应用设计。](/data/attachment/album/201611/27/122455bqmx9nqsi9nc97oc.png)

*Youtube 上传工具，内容快照，自动旋转设置，全新的音乐应用设计。 [Ron Amadeo 供图]*

安卓 1.5 给予了 YouTube 应用向其网站上传视频的能力。上传通过从相册中分享视频到 YouTube 应用来完成，或从 YouTube 应用中直接打开一个视频。这将会打开一个上传界面，用户在这里可以设置像视频标题、标签和权限这样的选项。照片可以以类似的方式上传到 Picasa，这是一个谷歌建立的图片网站。

整个系统的调整没有多少。常用联系人在联系人列表中可以显示图片（尽管常规联系人还是没有图片）。第三张截图展示了设置中全新的自动旋转选项——这个版本同样也是第一个支持基于从设备内部传感器读取的数据来自动切换方向的版本。

![HTC Magic，第二部安卓设备，第一个不带实体键盘的设备。](/data/attachment/album/201611/27/122455tq4huk5ephrhkj44.jpg)

*HTC Magic，第二部安卓设备，第一个不带实体键盘的设备。 [HTC 供图]*

纸杯蛋糕在改进安卓上做了巨大的工作，特别是从硬件方面。虚拟键盘意味着不再需要实体键盘。自动旋转使得系统更加接近 iPhone，屏幕上的虚拟快门按键同样也意味着实体相机按键变成了可选选项。1.5 发布后不久，第二部安卓设备的出现将会展示出这个平台未来的方向：HTC Magic。Magic（上图）没有实体键盘或相机按钮。它是没有间隙、没有滑动结构的平板状设备，依赖于安卓的虚拟按键来完成任务。

安卓旗舰机开始可能有着最多按键——一个实体 qwerty 键盘——后来随着时间流逝开始慢慢减少按键数量。而 Magic 是重大的一步，去除了整个键盘和相机按钮，它仍然使用通话和挂断键、四个系统键以及轨迹球。

#### 谷歌地图是第一个登陆谷歌市场的内置应用

尽管这篇文章为了简单起见，（主要）以安卓版本顺序来组织应用更新，但还是有一些在这时间线之外的东西值得我们特别注意一下。2009 年 6 月 14 日，谷歌地图成为第一个通过谷歌市场更新的预置应用。尽管其它的所有应用更新还是要在一个完整的系统发布中进行更新，但是地图从系统中脱离了出来，只要新特性已经就绪就可以随时接收升级周期之外的更新。

将应用从核心系统分离发布到安卓市场上将成为谷歌前进的主要关注点。总的来说，OTA 更新是个重大的主动改进——这需要 OEM 厂商和运营商的合作，二者都是拖后腿的角色。更新同样没有做到到达每个设备。今天，谷歌市场给了谷歌一个与每个安卓手机之间的联系渠道，而没有了这样的外界干扰。

然而，这是后来才需要考虑的问题。在 2009 年，谷歌只有两种裸机需要支持，而且早期的安卓运营商似乎对谷歌的升级需要反应积极。这些早期的行动对谷歌这方面来说将被证明是非常积极的决定。一开始，公司只在最重要的应用——地图和 Gmail 上——走这条路线，但后来它将大部分预置应用导入安卓市场。后来的举措比如 Google Play 服务甚至将应用 API 从系统移除加入了谷歌商店。

至于这时的新地图应用，得到了一个新的路线界面，此外还有提供公共交通和步行方向的能力。现在，路线只有个朴素的黑色列表界面——逐步风格的导航很快就会登场。

2009 年 6 月同时还是苹果发布第三代 iPhone——3GS——以及第三版 iPhone OS 的时候。iPhone OS 3 的主要特性大多是追赶上来的项目，比如复制/粘贴和对彩信的支持。苹果的硬件依然是更好的，软件更流畅、更整合，还有更好的设计。尽管谷歌疯狂的开发步伐使得它不得不走上追赶的道路。iPhone OS 2 是在安卓 0.5 的 Milestone 5 版本之前发布的，在 iOS 一年的发布周期里安卓发布了五个版本。

---

![](/data/attachment/album/201611/27/122456nl5x6larral6p2nj.jpg)

[Ron Amadeo](http://arstechnica.com/author/ronamadeo) / Ron是Ars Technica的评论编缉，专注于安卓系统和谷歌产品。他总是在追寻新鲜事物，还喜欢拆解事物看看它们到底是怎么运作的。[@RonAmadeo](https://twitter.com/RonAmadeo)

---

via: <http://arstechnica.com/gadgets/2014/06/building-android-a-40000-word-history-of-googles-mobile-os/8/>

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

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


在 Linux 系统下从 ISO 镜像中提取和复制文件的 3 种方法

Summary: 假设你的 Linux 服务器上有一个超大的 ISO 镜像文件，你想要打开它，然后提取或者复制其中的一个文件。你会怎么做呢？其实在 Linux 系统里，有很多方法来实现这个要求。

假设你的 Linux 服务器上有一个超大的 ISO 镜像文件，你想要打开它，然后提取或者复制其中的一个文件。你会怎么做呢？

其实在 Linux 系统里，有很多方法来实现这个要求。

比如说，你可以使用传统的 mount 命令以只读方式把 ISO 镜像文件加载为 loop 设备，然后再把文件复制到另一个目录。

![](/data/attachment/album/201611/27/124918tdyztot1mzyxn1ce.jpg)

### 在 Linux 系统下提取 ISO 镜像文件

为了完成该测试，你得有一个 ISO 镜像文件（我使用 ubuntu-16.10-server-amd64.iso 系统镜像文件）以及用于挂载和提取 ISO 镜像文件的目录。

首先，使用如下命令创建一个挂载目录来挂载 ISO 镜像文件：

```
$ sudo mkdir /mnt/iso

```

目录创建完成后，你就可以运行如下命令很容易地挂载 ubuntu-16.10-server-amd64.iso 系统镜像文件，并查看其中的内容。

```
$ sudo mount -o loop ubuntu-16.10-server-amd64.iso /mnt/iso
$ ls /mnt/iso/

```

![Mount ISO File in Linux](/data/attachment/album/201611/27/125032fwwlw233tsps322l.png)

*在 Linux 系统里挂载 ISO 镜像*

现在你就可以进入到挂载目录 /mnt/iso 里，查看文件或者使用 [cp 命令](http://www.tecmint.com/advanced-copy-command-shows-progress-bar-while-copying-files/)把文件复制到 /tmp 目录了。

```
$ cd /mnt/iso
$ sudo cp md5sum.txt /tmp/
$ sudo cp -r ubuntu /tmp/

```

![Copy Files From ISO File in Linux](/data/attachment/album/201611/27/125032l8mf8occf84uajv2.png)

*在 Linux 系统中复制 ISO 镜像里的文件*

注意：`-r` 选项用于递归复制目录里的内容。如有必要，你也可以[监控复制命令的完成进度](http://www.tecmint.com/monitor-copy-backup-tar-progress-in-linux-using-pv-command/)。

### 使用 7zip 命令提取 ISO 镜像里的内容

如果不想挂载 ISO 镜像，你可以简单地安装一个 7zip 工具，这是一个自由而开源的解压缩软件，用于压缩或解压不同类型格式的文件，包括 TAR、XZ、GZIP、ZIP、BZIP2 等等。

```
$ sudo apt-get install p7zip-full p7zip-rar [On Debian/Ubuntu systems]
$ sudo yum install p7zip p7zip-plugins      [On CentOS/RHEL systems]

```

7zip 软件安装完成后，你就可以使用`7z` 命令提取 ISO 镜像文件里的内容了。

```
$ 7z x ubuntu-16.10-server-amd64.iso

```

![7zip - Extract ISO File Content in Linux](/data/attachment/album/201611/27/125033ju866v77nm6rm8hh.png)

*使用 7zip 工具在 Linux 系统下提取 ISO 镜像里的文件*

注意：跟 Linux 的 mount 命令相比起来，7zip 在压缩和解压缩任何格式的文件时速度更快，更智能。

### 使用 isoinfo 命令来提取 ISO 镜像文件内容

虽然 `isoinfo` 命令是用来以目录的形式列出 iso9660 镜像文件的内容，但是你也可以使用该程序来提取文件。

我说过，isoinfo 程序会显示目录列表，因此先列出 ISO 镜像文件的内容。

```
$ isoinfo -i ubuntu-16.10-server-amd64.iso -l

```

![List ISO Content in Linux](/data/attachment/album/201611/27/125033fcrkkc2m2mb2wmf3.png)

*Linux 里列出 ISO 文件的内容*

现在你可以按如下的方式从 ISO 镜像文件中提取单文件：

```
$ isoinfo -i ubuntu-16.10-server-amd64.iso -x MD5SUM.TXT > MD5SUM.TXT

```

注意：因为 `-x` 解压到标准输出，必须使用重定向来提取指定文件。

![Extract Single File from ISO in Linux](/data/attachment/album/201611/27/125033n55eb54dux4idedr.png)

*从 ISO 镜像文件中提取单个文件*

就到这里吧，其实还有很多种方法来实现这个要求，如果你还知道其它有用的命令或工具来提取复制出 ISO 镜像文件中的文件，请在下面的评论中跟大家分享下。

---

via: <http://www.tecmint.com/extract-files-from-iso-files-linux>

作者：[Ravi Saive](http://www.tecmint.com/author/admin/) 译者：[rusking](https://github.com/rusking) 校对：[wxy](https://github.com/wxy)

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


在 Linux 系统里识别 USB 设备名字的 4 种方法

lsusb

另外两种方法:

1. $ sudo parted -l

2. $ blkid

对于初学者来说，在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备。这也许是你的系统硬盘、外部的存储设备或者是可移动设备，比如 USB 设备或 SD 闪存卡等。

![](/data/attachment/album/201611/28/135759cog62slo6gmoa3gm.jpg)

现如今，使用 USB 设备来传输文件是十分常见的事，对于那些喜欢使用命令行的新手来说，当你需要格式化 USB 设备时，学会使用不同的方法来识别 USB 设备名是非常重要的。

如果在系统中插入一个设备，尤其是在桌面环境下，比如 USB 设备，它会自动挂载到一个指定目录，一般是在 `/media/username/device-label` 目录下，之后你就可以进入到该目录下访问那些文件了。然而，在服务器上就不是这么回事了，你必须[手动挂载](http://www.tecmint.com/mount-filesystem-in-linux/)这个设备，并且指定一个挂载点。

Linux 系统使用 `/dev` 目录下特定的设备文件来标识插入的设备。你会发现该目录下的某些文件，包括 `/dev/sda` 或者 `/dev/hda` 表示你的第一个主设备，每个分区使用一个数字来表示，比如 `/dev/sda1` 或 `/dev/hda1` 表示主设备的第一个分区等等。

```
$ ls /dev/sda*

```

![List All Linux Device Names](/data/attachment/album/201611/28/135808l6nxfufxkwxfz615.png)

*列出 Linux 系统下所有的设备名*

现在让我们来使用下面一些特殊的命令行工具找出设备名：

### 使用 df 命令来找出插入的 USB 设备名

查看插入你系统里的每一个设备及对应的挂载点，你可以使用下图中的 `df` 命令检查 Linux 系统磁盘空间使用情况：

```
$ df -h

```

![Find USB Device Name Using df Command](/data/attachment/album/201611/28/135809q8cfwvxcxvv81x16.png)

*使用 df 命令查找 USB 设备名*

### 使用 lsblk 命令查找 USB 设备名

你也可以使用下面的 `lsblk` 命令（列出块设备）来列出插入你系统里的所有块设备：

```
$ lsblk

```

![List Linux Block Devices](/data/attachment/album/201611/28/135810u303g3nnnvxgnuu0.png)

*列出 Linux 系统里的块设备*

### 使用 fdisk 工具识别 USB 设备名

[fdisk 是一个功能强大的工具](http://www.tecmint.com/fdisk-commands-to-manage-linux-disk-partitions/)，用于查看你系统中的所有分区表，包括所有的 USB 设备，使用 root 权限执行如下命令：

```
$ sudo fdisk -l

```

![List Partition Table of Block Devices](/data/attachment/album/201611/28/135811qgfsa9vf8g0zoh8i.png)

*列出块设备的分区表*

### 使用 dmesg 命令来识别出 USB 设备名

`dmesg` 是一个用于打印或者控制内核环形缓冲区（kernel ring buffer）的重要命令。环形缓冲区是一种数据结构，它[存放着内核操作数据的信息](http://www.tecmint.com/dmesg-commands/)。

运行如下命令来查看内核操作信息，它同时也会打印出 USB 设备的信息：

```
$ dmesg

```

![dmesg - Prints USB Device Name](/data/attachment/album/201611/28/135811m8m3ssnrps8pp3j3.png)

*dmesg – 打印 USB 设备名*

以上就是这篇文章中提及到的所有命令，我们在命令行下使用不同的方法来找出 USB 设备名。你也可以跟大家分享下实现这个目的的其它方法，或者如果你对这篇文章有什么想法也可以在下面跟大家交流下。

---

via: <http://www.tecmint.com/find-usb-device-name-in-linux>

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

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


安卓编年史（9）：安卓 1.6 Donut——CDMA 支持将安卓带给了各个运营商

这个系列的文章又更新了啊！

![](/data/attachment/album/201611/28/222344mei11rpr1951au1m.jpg)

![新版安卓市场——黑色比重减少，白色和绿色增多。](/data/attachment/album/201611/28/222523jj3cwody88p88yd3.png)

*新版安卓市场——黑色比重减少，白色和绿色增多。 [Ron Amadeo 供图]*

### 安卓 1.6 Donut——CDMA 支持将安卓带给了各个运营商

安卓的第四个版本——1.6 甜甜圈——在 2009 年 9 月发布，这时是在纸杯蛋糕面世的 5 个月后。尽管有无数更新，谷歌仍然在给安卓添加基本的功能。甜甜圈带来了对不同屏幕尺寸和 CDMA 的支持，还有一个文本语音转换引擎。

安卓 1.6 是个很好的更新例子，要在今天的话，它将没什么理由作为一个独立更新存在。主要的改进基本上可以总结为新版安卓市场、相机以及 YouTube。从这一年起，像这样的应用已经从系统分离开来，并且谷歌任何时候都能升级它们。然而在完成所有的这些模块化功能工作之前，看起来甚至是一个微小的应用更新似乎都需要完整的系统更新。

另一个重大改进——CDMA 支持——也表明了除了版本号之外，谷歌仍然在忙于将基本功能带到安卓上来。

安卓市场被标注为版本“1.6”，并且得到了一个彻底的改进。原本的全黑设计被抛弃，转向带有绿色高亮的白色应用设计——安卓的设计师很明显使用了安卓吉祥物来获得灵感。

新的市场对谷歌来说一定是个新的应用设计风格。屏幕顶部的五分之一用于显示横幅 logo，表明了这个应用确实是“安卓市场”。在横幅之下是应用、游戏以及下载按钮，一个搜索按钮被安置在横幅的右侧。在导航键下面显示着特色应用的快照，可以在它们之间滑动。再下面是个垂直滚动列表，显示了更多的特色应用。

![新的市场设计，展示了：带有截图的应用页面，应用分类页面，应用榜，下载。](/data/attachment/album/201611/28/222533npkdj6eeh26vemk7.png)

*新的市场设计，展示了：带有截图的应用页面、应用分类页面、应用排行榜、下载。 [Ron Amadeo 供图]*

市场的最大的新增内容是包含应用截图。安卓用户终于可以在安装之前看到应用长什么样子——之前他们只能看到简短的描述和用户评论。你的个人星级评价和评论被放在显著位置，随后是描述，最后是截图。查看截图常常需要一点点滚动来查看——如果你想要找个设计尚佳的应用，那可要费一番功夫了。

点击应用或游戏按钮会打开一个分类列表，就像你在上面第二张图看到的那样。选择一个类别之后，更多的导航显示在了屏幕顶部，用户可以看到“热门付费”、“热门免费”，或在分类里看到各自的“热门新品”应用。尽管这些看起来像是会加载出新页面的按钮，实际上它们仅仅是个笨拙的标签页。每个按钮边有个绿色小灯指示现在哪个标签处于活跃状态。这个界面最赞的地方是应用列表是无穷滚动的（滚动加载）——一旦你到达列表底部的时候，它将加载更多应用。这个特性使得查看应用列表变得轻松，但是你点开任意一个应用再返回的话将会丢失你在列表里的位置——你得从头开始查看。下载部分可以做一些连新的 Google Play 商店都做不到的事：不过是显示一个已购买应用列表而已。

尽管新的市场看起来无疑比旧的好多了，但应用间的一致性更糟糕了。看起来就像是每个应用都是由不同团队制作的，他们之间从没沟通过所有的安卓应用应该有的样子。

![相机取景窗，照片回看界面，菜单。](/data/attachment/album/201611/28/222544buddxcifqvcxsvrx.png)

*相机取景窗，照片回看界面，菜单。 [Ron Amadeo 供图]*

举个例子，相机应用从全屏、精简设计变成一个盒状的边缘带控制的取景窗。在相机应用中，谷歌着手引入拟物化，将应用包装成一个大致复刻了皮革纹经典相机的样子。在相机和摄像机之间切换通过一个缺乏想象力的开关完成，下面是个触摸快门按钮。

点击最近照片快照不再会打开相册，而是一个内建在了相机应用内定制的照片查看器。当你查看照片的时候，皮革质感的控制区从相机操作键变成图片操作键，你可以在这里删除、共享照片，或者把照片设置成壁纸或联系人图像。这里图片之间依然没有滑动操作——切换照片还是要通过照片两侧的箭头按钮完成。

第二张截图展示的是设计师减少对菜单按钮依赖的例子之一，因为安卓团队慢慢开始意识到其在可发现性上的糟糕表现。许多的应用设计者（包括那些在谷歌的）使用菜单作为所有种类的控制和导航元素的集中之处。但大多数用户没想过点击菜单按钮，也从没看到这些指令。

未来版本的安卓的公共主题会将选项从菜单移到主要屏幕上，使得整个系统对用户更加友好。菜单按钮在安卓 4.0 中被完全移除，并且它只在老式应用中被支持。

![电池以及文本语音转换引擎设置。](/data/attachment/album/201611/28/222548vh09d83hjsaqew3s.png)

*电池以及文本语音转换引擎设置。 [Ron Amadeo 供图]*

甜甜圈是第一个持续追踪电池使用量的安卓版本。在“关于手机”菜单里有个选项“电池使用”，它会以百分比的方式显示应用以及硬件功能的电池用量。点击其中一项会打开一个单独的相关状态页面。硬件项目有个按钮可以直接跳转到它们的设置界面，所以，举个例子，如果你觉得显示的电池用量太高你可以更改显示的屏幕超时。

安卓 1.6 同样是第一个支持文本语音转换引擎（TTS）的版本，这意味着系统以及应用能够用机器合成声音来回应你。“语音合成器”选项允许你设置语言，选择语速，以及从安卓市场安装语音数据（慎重）。今天，谷歌在安卓上部署它自己的 TTS 引擎，但是似乎甜甜圈是通过硬编码的方式使用了来自 SVOX 的 TTS 引擎。但 SVOX 的引擎并未部署在甜甜圈上，所以点击“安装语音数据”会链接到安卓市场的一个应用。（甜甜圈的全盛期几年后，这个应用已被撤下。看起来似乎安卓 1.6 再也不能说话了。）

![从左到右：新的小部件，搜索栏界面，新清除通知按钮，新相册控件。](/data/attachment/album/201611/28/222555jxs1vjdhh6n4dunx.png)

*从左到右：新的小部件，搜索栏界面，新清除通知按钮，新相册控件。 [Ron Amadeo 供图]*

前端小部件部分花了更多的功夫。甜甜圈带来了全新的叫做“电量控制”小部件。它包含了常见耗电功能的开关：Wi-Fi、蓝牙、GPS、同步（同谷歌服务器之间），以及亮度。

搜索小部件同样经过了重新设计，变得更加纤细，并且内置了一个麦克风按钮用于语音搜索。它现在有了些实质界面并且够实时搜索，不仅仅是搜索互联网，还能搜索你的应用和历史。

“清除通知”按钮大幅缩水并且去掉了“通知”字样。在稍晚些的安卓后续版本总它还会缩减成仅仅是个方形按钮。相册继续遵循了把功能从菜单里拿出来的趋势，并且将它们放在用户面前——单张图片查看界面得到了“设置为”、“分享”以及“删除”按钮。

---

![](/data/attachment/album/201611/28/222555zz88p4zvzzz84z4m.jpg)

[Ron Amadeo](http://arstechnica.com/author/ronamadeo) / Ron 是 Ars Technica 的评论编缉，专注于安卓系统和谷歌产品。他总是在追寻新鲜事物，还喜欢拆解事物看看它们到底是怎么运作的。 [@RonAmadeo](https://twitter.com/RonAmadeo)

---

via: <http://arstechnica.com/gadgets/2016/10/building-android-a-40000-word-history-of-googles-mobile-os/9/>

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

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


Git 系列（七）：使用 Git 管理二进制大对象

"另人兴奋"<br />
错别字

通过这系列的前六篇文章，我们已经学会使用 Git 来对文本文件进行版本控制的管理。我们不禁要问，还有二进制文件呢，也可进行进行版本控制吗？答案是肯定的，Git 已经有了可以处理像多媒体文件这样的二进制大对象块（blob）的扩展。因此，今天我们会学习使用 Git 来管理所谓的二进制资产。

![](/data/attachment/album/201611/29/175130yorx11s7oo4s9r7o.png)

似乎大家都认可的事就是 Git 对于大的二进制对象文件支持得不好。要记住，二进制大对象与大文本文件是不同的。虽然 Git 对大型的文本文件版本控制毫无问题，但是对于不透明的二进制文件起不了多大作用，只能把它当作一个大的实体黑盒来提交。

设想这样的场景，有一个另人兴奋的第一人称解密游戏，您正在为它制作复杂的 3D 建模，源文件是以二进制格式保存的，最后生成一个 1GB 大小的的文件。您提交过一次，在 Git 源仓库历史中有一个 1GB 大小的新增提交。随后，您修改了下模型人物的头发造型，然后提交更新，因为 Git 并不能把头发从头部及模型中其余的部分离开来，所以您只能又提交 1GB 的量。接着，您改变了模型的眼睛颜色，提交这部分更新：又是 GB 级的提交量。对一个模型的一些微小修改，就会导致三个 GB 级的提交量。对于想对一个游戏所有资源进行版本控制这样的规模，这是个严重的问题。

不同的是如 `.obj` 这种格式的文本文件，和其它类型文件一样，都是一个提交就存储所有更新修改状态，不同的是 `.obj` 文件是一系列描述模型的纯文本行。如果您修改了该模型并保存回 `.obj` 文件，Git 可以逐行读取这两个文件，然后创建一个差异版本，得到一个相当小的提交。模型越精细，提交就越小，这就是标准的 Git 用例。虽然文件本身很大，但 Git 使用覆盖或稀疏存储的方法来构建当前数据使用状态的完整描述。

然而，不是所有的都是纯文本的，但都要使用 Git，所以需要解决方案，并且已经出现几个了。

[OSTree](https://ostree.readthedocs.io/en/latest/) 开始是作为 GNOME 项目出现的，旨在管理操作系统的二进制文件。它不适用于这里，所以我直接跳过。

[Git 大文件存储](https://git-lfs.github.com/)（LFS） 是放在 GitHub 上的一个开源项目，是从 git-media 项目中分支出来的。[git-media](https://github.com/alebedev/git-media) 和 [git-annex](https://git-annex.branchable.com/walkthrough/) 是 Git 用于管理大文件的扩展。它们是对同一问题的两种不同的解决方案，各有优点。虽然它们都不是官方的项目，但在我看来，每个都有独到之处：

* git-media 是集中模式，有一个公共资产的存储库。你可以告诉 git-media 大文件需要存储的位置，是在硬盘、服务器还是在云存储服务器，项目中的每个用户都将该位置视为大型文件的中心主存储位置。
* git-annex 侧重于分布模式。用户各自创建存储库，每个存储库都有一个存储大文件的本地目录 `.git/annex`。这些 annex 会定期同步，只要有需要，每个用户都可以访问到所有的资源。除非通过 annex-cost 特别配置，否则 git-annex 优先使用本地存储，再使用外部存储。

对于这些，我已经在生产中使用了 git-media 和 git-annex，那么下面会向你们概述其工作原理。

### git-media

git-media 是使用 Ruby 语言开发的，所以首先要安装 gem（LCTT 译注：Gem 是基于 Ruby 的一些开发工具包）。安装说明在[其网站](https://github.com/alebedev/git-media)上。想使用 git-meida 的用户都需要安装它，因为 gem 是跨平台的工具，所以在各平台都适用。

安装完 git-media 后，你需要设置一些 Git 的配置选项。在每台机器上只需要配置一次。

```
$ git config filter.media.clean "git-media filter-clean"
$ git config filter.media.smudge "git-media filter-smudge"

```

在要使用 git-media 的每个存储库中，设置一个属性以将刚刚创建的过滤器结合到要您分类为“<ruby> 媒体 <rp>  （ </rp> <rt>  media </rt> <rp>  ） </rp></ruby>”的文件类型里。别被这种术语混淆。一个更好的术语是“资产”，因为“媒体”通常的意思是音频、视频和照片，但您也可以很容易地将 3D 模型，烘焙和纹理等归类为媒体。

例如：

```
$ echo "*.mp4 filter=media -crlf" >> .gitattributes
$ echo "*.mkv filter=media -crlf" >> .gitattributes
$ echo "*.wav filter=media -crlf" >> .gitattributes
$ echo "*.flac filter=media -crlf" >> .gitattributes
$ echo "*.kra filter=media -crlf" >> .gitattributes

```

当您要<ruby> 暂存 <rp>  （ </rp> <rt>  stage </rt> <rp>  ） </rp></ruby>这些类型的文件时，文件会被复制到 `.git/media` 目录。

假设在服务器已经有了一个 Git 源仓库，最后一步就告诉源仓库“母舰”所在的位置，也就是，当媒体文件被推送给所有用户共享时，媒体文件将会存储的位置。这在仓库的 `.git/config` 文件中设置，请替换成您的用户名、主机和路径：

```
[git-media]
transport = scp
autodownload = false #默认为 true，拉取资源
scpuser = seth
scphost = example.com
scppath = /opt/jupiter.git

```

如果您的服务器上 SSH 设置比较复杂，例如使用了非标准端口或非默认 SSH 密钥文件的路径，请使用 `.ssh/config` 为主机设置默认配置。

git-media 的使用和普通文件一样，可以把普通文件和 blob 文件一样对待，一样进行 commit 操作。操作流程中唯一的不同就是，在某些时候，您应该将您的资产（或称媒体）同步到共享存储库中。

当要为团队发布资产或自己备份资料时，请使用如下命令：

```
$ git media sync

```

要用一个变更后的版本替换 git-media 中的文件时（例如，一个已经美声过的音频文件，或者一个已经完成的遮罩绘画，或者一个已经被颜色分级的视频文件），您必须明确的告诉 Git 更新该媒体。这将覆盖 git-media 不会复制远程已经存在的文件的默认设置：

```
$ git update-index --really-refresh

```

当您团队的其他成员（或是您本人，在其它机器上）克隆本仓库时，如果没有在 `.git/config` 中把 `autodownload` 选项设置为 `true` 的话，默认是不会下载资源的。但 git-media 的一个同步命令 `git media sync` 可解决所有问题。

### git-annex

git-annex 的处理流程略微的有些不同，默认是使用本地仓库的，但基本的思想都一样。您可以从你的发行版的软件仓库中安装 git-annex，或者根据需要从该网站上下载安装。与 git-media 一样，任何使用 git-annex 的用户都必须在其机器上安装它。

其初始化设置比 git-media 都简单。运行如下命令，其中替换成您的路径，就可以在您的服务器上创建好裸存储库：

```
$ git init --bare --shared /opt/jupiter.git

```

然后克隆到本地计算机，把它标记为 git-annex 的初始路径：

```
$ git clone seth@example.com:/opt/jupiter.clone
Cloning into 'jupiter.clone'...
warning: You appear to have clonedan empty repository.
Checking connectivity... done.
$ git annex init "seth workstation"
init seth workstation ok

```

不要使用过滤器来区分媒体资源或大文件，您可以使用 `git annex` 命令来配置归类大文件：

```
$ git annex add bigblobfile.flac
add bigblobfile.flac
(checksum) ok
(Recording state in Git...)

```

跟普通文件一样进行提交操作：

```
$ git commit -m 'added flac source for sound fx'

```

但是推送操作是不同的，因为 `git annex` 使用自己的分支来跟踪资产。您首次推送可能需要 `-u` 选项，具体取决于您如何管理您的存储库：

```
$ git push -u origin master git-annex
To seth@example.com:/opt/jupiter.git
* [new branch] master -> master
* [new branch] git-annex -> git-annex

```

和 git-media 一样，普通的 `git push` 命令是不会拷贝资料到服务器的，仅仅只是发送了相关的消息，要真正共享文件，需要运行同步命令：

```
$ git annex sync --content

```

如果别人已经提交了共享资源，您需要拉取它们，`git annex sync` 命令将提示您要在本地检出你本机没有，但在服务器上存在的资源。

git-media 和 git-annex 都非常灵活，都可以使用本地存储库来代替服务器，所以它们也常用于管理私有的本地项目。

Git 是一个非常强大和扩展性非常强的系统应用软件，我们应该毫不犹豫的使用它。现在就开始试试吧！

---

via: <https://opensource.com/life/16/8/how-manage-binary-blobs-git-part-7>

作者：[Seth Kenlon](https://opensource.com/users/seth) 译者：[runningwater](https://github.com/runningwater) 校对：[wxy](https://github.com/wxy)

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


微软呼吁所有的 Linux 开发者转到 Windows 10 平台

Summary: 最近，在微软的  Channel 9 上的一则名为“改进 Bash on Windows 和 Windows 控制台”的视频节目中，其高级程序经理 Rich Turner 呼吁 Linux 开发人员放弃 Linux ，转到 Windows 10 上来。

微软投降Linux，是开源还是阴谋？恐惧

是不是拥抱、然后吃掉的节奏？

巨硬开始对linux下手了？

然而网络相关的工具如ping还不能用

微软贼心不死

这尼玛前面说的好好的, 说翻脸就翻脸.

终于和Linux桌面说拜拜了？

请使用 root 权限。

这不叫投降，这叫阳谋！

呵呵，闲得蛋疼吗？

才不，才不要呢。微软你要给我们发红包，我们也不用windows。

微软发红包我就用 ^_^

微软有阴谋啊

看看尾巴！！！

来自北京的 Microsoft Edge 14.14393|Windows 10 用户

工作用电脑已经转到lubuntu下了，留在win唯一的理由只剩office了

windows是用来玩游戏的。如果一定要用它写代码，你最好先把字体设置成comic sans

我们呼吁微软先把WINDOWS10改成GPLV2授权协议看看。哈哈

按照历史来看，和微软合作的公司下场没几个好的。看来，ubuntu要完

win10强制更新的流氓行为真是操蛋

等你们都进去了，微软就要把猪圈门关上，开始杀猪在羊过新年了

狐狸尾巴终于露出来了

果然是有目的的。。win10最流氓！

不仅强制更新，还会自动安装广告呢！我反反复复升级了四次，最终还是回到了8.1，等8.1停止支持了，就完全转入debian系。

ubuntu下可以用wps office啊,一样的好用

拥抱，扩展，毁灭，老套路了

在不能rm -rf / 的情况下，我还是选择linux

windows一直都是我的娱乐机。如果linux上有可靠的期货或炒股软件。就不用你鸟。

你要用windows 10 ltsb版本就没有广告了

说微软没做过一件好事

真可怕

这招够狠

跟cygwin有什么区别

巨硬又整了一个特罗伊木马，呵呵。

稳定性也不行，我现在偶尔还会出现自动关屏后屏幕就亮不起来的问题，虽然不能排除硬件BUG的可能性

windows只存在于虚拟机之下了。

抛开稳定性不讲，就强制更新一条已经足以让我抛弃它了，自己的电脑改动一定要自己亲自来弄，这样才安全。

哈哈，尾巴已经露出来了

对我来说，逃离win拥抱linux有一部分原因是windows实在是太卡，而且win10老强制更新。

LibreOffice 一样时是神器

除了游戏，我不知道在Windows上还能干啥～哈哈

Linux桌面将永远丑陋，直到被win吃掉。[坏笑][坏笑][坏笑]

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

可以的大胸弟

maopudazahui [Internet Explorer 11.0|Windows 10]

主要是win10扩展，包越来越大，占用的空间越来越大，系统也越来越卡，对这个不喜欢。

开源万岁

windows里有宇宙最强的IDE：Visual Studio，这货太牛了。而且Win10的界面也非常漂亮，透明式的扁平化我最喜欢了。

来自江西南昌的 Microsoft Edge 14.14393|Windows 10 用户

放出你的系统源码在信你微软

求一个邀请码

我们的微信里面有个菜单可以获取。

请转移KDE 5

微软这步棋下的很大啊

我只问一个问题，可以免费吗

![](/data/attachment/album/201611/29/003526nz7eoo11ebr6e35d.png)

微软终于承认了开源世界的潜力，尤其是对 Linux 而言，所以，微软正在尝试以各种方式来在开源领域开疆辟土。

最近，在微软的 [Channel 9](https://channel9.msdn.com/Events/Connect/2016/191) 上的一则名为“改进 Bash on Windows 和 Windows 控制台”的视频节目中，其高级程序经理 Rich Turner 呼吁 Linux 开发人员放弃 Linux ，转到 Windows 10 上来。

他解释说，“（Linux 开发者）可以启动 Windows 10 Insiders 实例，并在其中运行其代码和工具，把网站托管到 Apache 上，并用 Java 代码来访问其 MySQL 数据库。”

他继续补充说，Windows 中的 Linux 子系统将给开发者们提供所有他们在 Linux 开发中必要的工具，而不用丧失 Windows 10 的优势。

“就像在 Linux 中一样构建应用，无论它是用 Go 写的，还是用 Erlang、C，你可以在 Bash on Windows 中试试你要用的任何东西，有 bug 就丢给我们来解决。我们的目标就是构建一个大家都能用的、更高效的产品给大家。”

微软正在致力于改善 [Windows 10 上 Linux 子系统](/article-7177-1.html)，最终目标是让当前 Linux 上的所有开发工具都能兼容地运行在 Windows 10 之中，让所有切换到他们的操作系统的开发者都能够用上。

最近，微软作为[白金会员加入了 Linux 基金会](/article-7966-1.html)，许诺为开源世界的开发做出贡献。这个事情令很多人都很吃惊，特别是其前 CEO 巴尔默还曾经称 Linux 为“癌症”，但是随着新 CEO 萨提亚上任之后，微软的画风大变，这个软件巨人正在逐渐深入到开源生态之中。


安卓编年史（10）：Android 2.0 Éclair——带动 GPS 产业

Summary: 安卓的第一个大的版本号更迭发生在 2009 年 10 月的摩托罗拉 Droid 身上，它是第一部“第二代”安卓设备。

![](/data/attachment/album/201611/29/093228vmxdkvckqn8nq0ku.jpg)

### Android 2.0 Éclair——带动 GPS 产业

41 天——这是从安卓 1.6 到安卓 2.0 所经历的时间。安卓的第一个大的版本号更迭发生在 2009 年 10 月的[摩托罗拉 Droid](http://arstechnica.com/gadgets/2009/12/review-of-the-motorola-droid/) 身上，它是第一部“第二代”安卓设备。相对于 G1 而言，Droid 进行了大幅的硬件升级，拥有巨大的 3.7 英寸（在当时而言），分辨率 854×480 的 LCD 屏幕。它同样带来了更强劲的性能：一个 600Mhz 的德州仪器 TI OMAP Cortex A8 处理器（还是单核），以及 256MB 的内存。

![摩托罗拉Droid凝视着你的灵魂。](/data/attachment/album/201611/29/093539wzbmbpiazpy2bg5a.jpg)

*摩托罗拉 Droid 凝视着你的灵魂。*

但 Droid 最重要的部分是围绕它的大型广告活动。Droid 是美国运营商威瑞森 Verizon 的旗舰设备，这个头衔给它从美国最大运营商那里带来了不少收入。威瑞森从卢卡斯影业那获得了单词“droid”的授权，并且开始了[“Droid Does”运动](http://www.youtube.com/watch?v=e52TSXwj774)——通过广告将设备定位成一个敢于发声、充满突破的（由此也延伸到安卓身上）强力 iPhone 替代品。媒体常常说 T-Mobile G1 想要成为一个“iPhone 杀手”，但是 Droid 走了出来，并拥有了这个称号。

就和 G1 一样，Droid 有个侧滑实体键盘。轨迹球已经不见了，但是还是强制性要求有类似十字方向键的东西，所以摩托罗拉把一个五键十字方向键放在了键盘右侧。Droid 正面按键从实体按键变成了电容式触摸按键，它们只是被印在了玻璃触摸屏上。安卓 2.0 同样最终取消了必须有“呼叫”和“结束”按钮的强制要求。所以连同十字方向键移到键盘那里的变动，正面的按键可以排成漂亮又整洁的一行。所有这些精简结果带来的是有史以来最好看的安卓设备。T-Mobile G1 看起来像是费雪牌的玩具，但摩托罗拉 Droid 看起来像个可以用来削人的工业工具。

![安卓2.0和1.6的锁屏和主屏幕。](/data/attachment/album/201611/29/093541zrumqrjusrslsfss.png)

*安卓 2.0 和 1.6 的锁屏和主屏幕。 [Ron Amadeo 供图]*

威瑞森的一些差劲的广告活动泄漏了这个软件，原本平静、水汪汪的远景默认壁纸变成了脏兮兮的混凝土。开机动画用了红色脉动的哈儿（HAL 9000）的眼球（LCTT 译注：哈儿是英国小说家亚瑟·克拉克所著《太空漫游》小说中出现的一部拥有强人工智能的超级电脑），每当你收到邮件的时候，默认通知铃声还会高喊“[DRRRRROOOOIIIIDDDD](http://www.youtube.com/watch?v=UBL47tHrvMA)”。Éclair 泡芙就像是安卓的忧郁少年阶段。

安卓 2.0 中最先呈现给用户的事情之一就是新的锁屏。滑动解锁是苹果的专利，因此谷歌就采用了来自旋转手机的灵感，使用了弧线解锁手势。把你的手指放在锁定图标上并且向右滑动可以解锁设备，从音量图标向左滑动可以让手机静音。手指的自然移动是圆弧状的，所以这手势感觉比按直线滑动更加自然。

默认主屏幕布局取消了多余的模拟时钟小部件，引入了现如今安卓的一个主要部分：主屏幕顶端的一个搜索栏。短信和安卓市场同样花了大功夫在新布局上。应用抽屉页同样被经过了明显的重新设计。

![应用抽屉和“添加到主屏幕”菜单截图。](/data/attachment/album/201611/29/093543di3a4a6ioaivwi6f.png)

*应用抽屉和“添加到主屏幕”菜单截图。 [Ron Amadeo 供图]*

安卓在早期的阶段以极快的步伐开发前进，而安卓团队在考虑界面设计时也从来没有对未来的设备有过真正的规划。摩托罗拉 Droid——拥有 854×480 分辨率的 LCD 显示屏——相对于 320×480 分辨率的 G1 时代设备在分辨率上是个巨大的提升。几乎所有的东西都需要重绘。界面设计的“从头开始”就几乎成为了安卓 2.0 的主要课题。

谷歌借此机会几乎重新设计了安卓的所有图标，从带有等距轴线的卡通风格图标转变为风格更为正式直观的图标。唯一一套没有重绘的图标是状态栏图标，和经过修改的系统其它部分相比显得格格不入。这些图标会从安卓 0.9 一直使用到安卓 2.3。

应用阵容上同样也有一些改变。摄像机被合并到相机中，IM 应用被去除，并增加了两个新的谷歌应用：Car Home，这是一个被设计为在驾驶时使用的带有大按钮的启动器，还有企业日历，除了它支持 Exchange 而不是谷歌日历以外，它和常规的日历没什么不一样。奇怪的是，谷歌还预装了两个第三方应用程序：Facebook 和 Verizon 的 Visual VM 应用 （现在都不能用了）。第二组图片显示的是“添加到主屏幕”菜单，它同样经过了全新的设计。

![一个地点页面，显示“导航”选项，导航免责声明，实际的导航画面，以及交通信息。](/data/attachment/album/201611/29/093544liqizjcqqtc3n63n.png)

*一个地点页面，显示“导航”选项，导航免责声明，实际的导航画面，以及交通信息。 [Ron Amadeo 供图]*

除了新的设计以外，安卓 2.0 最突出的亮点是谷歌地图导航。谷歌更新了地图，以支持免费的逐向导航，配有兴趣点搜索和文本到语音引擎，这使得它可以像一个独立的 GPS 设备一样大声读出街道名称。把 GPS 导航从一个单独的产品变成免费的智能手机功能，这几乎一夜之间[摧毁](http://techcrunch.com/2009/10/28/googles-new-mobile-app-cuts-gps-nav-companies-at-the-knees/)了独立 GPS 市场。TomTom 的股票在安卓 2.0 推出的一周内下跌了近 40％。

但一开始这个导航应用非常难以找到。你必须打开搜索框，键入一个地点或地址，并点击搜索结果。接下来，点击了“导航”按钮后，谷歌会显示一个警告，声明导航正处于 beta 测试阶段，不应该被信任。点击“接受”后，你可以跳上车，一个粗糙的合成语音会引导你到达目的地。菜单按钮背后隐藏着一个选项，可以查看整个路线上的交通状况和突发事件。导航的设计一直徘徊不前。甚至连谷歌地图主界面都在安卓 4.0 时更新了，安卓 2.0 风格的导航部分还是那么放着，这几乎持续到了安卓 4.3 才有所改观。

地图还会显示路线的概览，其中包含你的路线的交通数据。起初数据只是由常规的交通数据提供商授权，但后来，谷歌通过运行谷歌地图的安卓和 iOS 手机[收集原始交通数据](http://googleblog.blogspot.com/2009/08/bright-side-of-sitting-in-traffic.html)。这是在移动设备地图竞争中谷歌迈向霸主地位的第一步。毕竟，实时交通流量的监控确实仅仅取决于你有多少数据点来源。现在，伴随着数以亿计的 iOS 和安卓的谷歌地图的用户，谷歌已经成为世界上最好的交通数据提供商。

有了地图导航，安卓终于找到了自己的杀手级应用。谷歌公司那时提供了其他人提供不了的东西。“为什么我应该买这个而不是买个 iPhone？”问题终于有了个答案。谷歌地图也不需要像许多 GPS 设备一样通过 PC 更新。有了云，地图能够始终保持最新状态，所有这些更新都是免费的。唯一的缺点是，你需要一个互联网连接来使用谷歌地图。

精确的地图在[苹果地图的惨败](http://arstechnica.com/apple/2012/09/apple-ceo-tim-cook-apologizes-for-ios-6-maps-promises-improvements/)中被大大宣传，它已经成为了智能手机的最重要的功能之一，即使没有人真正在它们工作的时候赞赏它们。绘制世界真的只是借助了无数人的力量，今天，谷歌的“地球”部门是公司最大的部门，拥有超过[7000 名员工](http://www.businessinsider.com/apple-has-7000-fewer-people-working-on-maps-than-google-2012-9)。对于这里的大多数人来说，他们的工作就是驾驶着公司装满了相机的街景车驶过世界上的每一条道路。经过八年的数据收集，谷歌拥有超过[五百万英里](https://developers.google.com/events/io/sessions/383278298)的 360 度街景视图，谷歌地图成为了公司不可撼动的支柱之一。

![Car Home主屏幕，并且因为有空间，加入了一个横版的导航。](/data/attachment/album/201611/29/093546uwksz2i6kskyokka.png)

*Car Home 主屏幕，并且因为有空间，加入了一个横版的导航。 [Ron Amadeo 供图]*

随着和谷歌地图导航一起到来的还有“Car Home”，一个大按钮设计的主屏幕，旨在帮助你在驾驶时使用手机。不能定制，每一个按钮只是一个独立应用的快捷方式。摩托罗拉 Droid 和其官方的[车载 dock 配件](http://www.amazon.com/Motorola-Generation-Vehicle-Charger-Packaging/dp/B002Y3BYQA)之间有特殊的磁铁，二者接触将自动触发 Car Home。在手机接入 dock 时，按压 Droid 的实体 home 键会打开 Car Home 主屏而不是正常的主屏幕，屏幕上的触摸 Home 键可以打开正常的主屏幕。

Car Home，虽然很有用，但并没有存在多久——它在安卓 3.0 中被去掉了，再也没有回来过。GPS 系统几乎全部用在汽车驾驶时，但它鼓励用户使用如“搜索”这样的功能，它会弹出一个键盘，谷歌的律师可能并不是很喜欢这种功能。随着[苹果的 CarPlay](http://arstechnica.com/apple/2014/03/ios-in-the-car-becomes-carplay-coming-to-select-dashboards-this-year/)和谷歌的[开放汽车联盟](http://arstechnica.com/information-technology/2014/01/open-automotive-alliance-aims-to-bring-android-inside-the-car/)的到来，车载电脑看到了复苏的希望。这一次，重点更多的是在安全上，政府机构（如美国国家公路交通安全管理局）也在协助着这一方面的发展。

---

![](/data/attachment/album/201611/29/093546cl2966qcbf9joz6l.jpg)

[Ron Amadeo](http://arstechnica.com/author/ronamadeo) / Ron 是 Ars Technica 的评论编缉，专注于安卓系统和谷歌产品。他总是在追寻新鲜事物，还喜欢拆解事物看看它们到底是怎么运作的。 [@RonAmadeo](https://twitter.com/RonAmadeo)

---

via: <http://arstechnica.com/gadgets/2016/10/building-android-a-40000-word-history-of-googles-mobile-os/10/>

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

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


玩转 GitHub 的问题单（issue）

![](/data/attachment/album/201611/30/084654wsl1s4evg3oqqlld.jpg)

对于大多数开源项目来讲，<ruby> 问题追踪系统 <rp>  （ </rp> <rt>  Issue-tracking system </rt> <rp>  ） </rp></ruby>是至关重要的。虽然有非常多的开源工具提供了这样的功能，但是大量项目还是选择了 GitHub 自带的<ruby> 问题追踪器 <rp>  （ </rp> <rt>  Issue Tracker </rt> <rp>  ） </rp></ruby>。

它结构简单，可以让其他人可以非常轻松地参与进来，但这才仅仅是开始。

如果没有适当的处理，你的<ruby> 储存库 <rp>  （ </rp> <rt>  repository </rt> <rp>  ） </rp></ruby>会变得很庞大，挤满重复的问题单、模糊不明的特性需求单、含混的 bug 报告单。项目维护者会被大量工作压得喘不过气来，新的贡献者也搞不清楚项目当前的工作重点是什么。

接下来，我们一起研究下，如何玩转 GitHub 的问题单。

### 问题单就是用户的故事

我的团队曾经和开源专家 [Jono Bacon](http://www.jonobacon.org/) 做过一次对话，他是<ruby> <a href="http://www.artofcommunityonline.org/">  《社区艺术》 </a> <rp>  （ </rp> <rt>  The Art of Community </rt> <rp>  ） </rp></ruby>一书的作者、一位战略顾问、前 GitHub 社区总监。他告诉我们，高质量的问题单是项目成功的关键。有些人把问题单仅仅看作是一堆你不得不去处理的问题列表，但是如果这些问题单管理完善，进行了分类并打上标签，会令人意想不到的提升我们对代码和社区的了解程度，也让我们更清楚问题的关键点在哪里。

“在提交问题单时，用户不太会有耐心或者有兴趣把问题的细节描述清楚。在这种情况下，你应当努力花最短的时间，尽量多的获取有用的信息。”，Jono Bacon 说。

统一的问题单模板可以大大减轻项目维护者的负担，尤其是开源项目的维护者。我们发现，让用户讲故事的方法总是可以把问题描述的非常清楚。用户讲故事时需要说明“是谁，做了什么，为什么而做”，也就是：我是【何种用户】，为了【达到何种目的】，我要【做何种操作】。

实际操作起来，大概是这样的：

>
> 我是一名**顾客**，我想**购买东西**，所以我想**创建个账户**。
>
>
>

我们建议，问题单的标题始终使用这样的用户故事形式。你可以设置[问题单模板](https://help.github.com/articles/creating-an-issue-template-for-your-repository/)来保证一致性。

![](/data/attachment/album/201611/30/084716xnqd7lbddbb3q60q.png)

*问题单模板让特性需求单保持统一的形式*

这个做法的核心点在于，问题单要清晰的呈现给它涉及的每一个人：它要尽量简单的指明受众（或者说用户），操作（或者说任务），和输出（或者说目标）。不过，不需要过分拘泥于这个模板，只要能把故事里的是什么事情或者是什么原因说清楚，就达到目的了。

### 高质量的问题单

问题单的质量是参差不齐的，这一点任何一个开源软件的贡献者或维护者都能证实。在[《The Agile Samurai》](https://www.amazon.ca/Agile-Samurai-Masters-Deliver-Software/dp/1934356581)中概述过一个良好的问题单所应具备的素质。

好的问题单尽量满足如下条件：

* 客户价值所在
* 避免使用术语或晦涩的文字，就算不是专家也能看懂
* 可以切分，也就是说我们可以逐步解决问题
* 尽量跟其他问题单没有瓜葛，依赖其它问题会降低处理的灵活性
* 可以协商，也就说我们有好几种办法达到目标
* 问题足够小，可以非常容易的评估出所需时间和资源
* 可衡量，我们可以对结果进行测试

### 不满足上述条件的问题单呢? 要有约束

如果一个问题单很难衡量，或者很难在短时间内完成，你也一样有办法搞定它。有些人把这种办法叫做“约束”（constraints）。

例如，“这个产品要快”，这种问题单不符合故事模板，而且是没办法协商的。多快才是快呢？这种模糊的需求没有达到“好问题单”的标准，但是如果你进一步定义一下，例如“每个页面都需要在 0.5 秒内加载完”，那我们就能更轻松地解决它了。我们可以把“约束”看作是成功的标尺，或者要实现的里程碑。每个团队都应该定期的对“约束”进行测试。

### 问题单里面有什么？

敏捷方法中，用户故事里通常要包含验收指标或者标准。在 GitHub 里，建议大家使用 markdown 格式的清单来概括解决这个问题单需要完成的任务。优先级越高的问题单应当包含更多的细节。

比如说，你打算提交一个关于新版网站主页的问题单。那这个问题单的子任务列表可能就是这样的：

![](/data/attachment/album/201611/30/084717fhcxfpbf3hjbzxxj.png)

*使用 markdown 的清单把复杂问题拆分成多个部分*

在必要的情况下，你还可以链接到其他问题单，以进一步明确任务。（GitHub 里做这个挺方便的）

将特性定义的越细化，越容易跟踪进度、测试，最终能更高效的发布有价值的代码。

以问题单的形式收到到问题所在后，还可以用 API 更深入的了解软件的健康度。

“在统计问题单的类型和趋势时，GitHub API 可以发挥巨大作用”，Bacon 告诉我们，“如果再做些数据挖掘工作，你就能发现代码里的问题点、社区里的活跃成员，或者其他有用的信息。”

有些问题单管理工具提供的 API 可以提高额外信息，比如预估时间或者历史进度。

### 团队协同一致

团队决定使用某种问题单模板后，如何让所有人都照做？存储库里的 ReadMe.md 其实也可以是你们项目的 “How-to” 文档。这个文档应描述清楚这个项目是做什么的（最好是用可以搜索的语言），以及其他贡献者应当如何参与进来（比如提交需求单、bug 报告、建议，或者直接贡献代码）。

![](/data/attachment/album/201611/30/084717dcpkczzo3cclx43d.png)

*在 ReadMe 文件里增加清晰的说明，供新协作者参考*

ReadMe 文件是提供“问题单指引”的完美场所。如果希望特性需求单遵循“用户讲故事”的格式，那就把格式写在 ReadMe 里。如果使用某种跟踪工具来管理待办事项，那就标记在 ReadMe 里，这样别人也能看到。

“问题单模板、合理的标签、提交问题单的指导文档、确保问题单被分类并及时回应，这些对于开源项目都至关重要”，Bacon 说。

记住一点：这不是为了完成工作而做的工作。这是让其他人更轻松的发现、了解、融入你的社区而设立的规则。

"关注社区的成长，不仅要关注参与开发者的的数量增长，也要关注那些在问题单上帮助我们的人，他们让问题单更加明确、保持更新，这是活跃沟通和高效解决问题的力量源泉"，Bacon 说。

---

via: <https://opensource.com/life/16/7/how-take-your-projects-github-issues-good-great>

作者：[Matt Butler](https://opensource.com/users/mattzenhub) 译者：[echoma](https://github.com/echoma) 校对：[jasminepeng](https://github.com/jasminepeng)

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