Docker 的镜像并不安全！

Summary: 最近使用Docker下载官方容器镜像的时候，我发现这样一句话： ubuntu:14.04: The image you are pulling has been verified （您所拉取的镜像已经经过验证）  起初我以为这条信息引自Docker大力推广的镜像签名系统，因此也就没有继续跟进。后来，研究加密摘要系统的时候Docker用这套系统来对镜像进行安全加固我才有机会更深入的发现，逻辑上整个与镜像安全相关的部分具有一系列系统性问题。  Docker所报告的，一个已下载的镜像经过验证，它基于的仅仅是一个标记清单（signed manifest)，而Docker却从未据此清单对镜像的校验和进行验证。一

@SecPulse @DockerOne @Docker中文社区 @FreeBuf黑客与极客

@有道笔记

@我的印象笔记

# Docker 的镜像并不安全！

最近使用Docker下载“官方”容器镜像的时候，我发现这样一句话：

```
ubuntu:14.04: The image you are pulling has been verified （您所拉取的镜像已经经过验证）

```

起初我以为这条信息引自Docker[大力推广](https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/)的镜像签名系统，因此也就没有继续跟进。后来，研究加密摘要系统的时候——Docker用这套系统来对镜像进行安全加固——我才有机会更深入的发现，逻辑上整个与镜像安全相关的部分具有一系列系统性问题。

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

Docker所报告的，一个已下载的镜像经过“验证”，它基于的仅仅是一个标记清单（signed manifest)，而Docker却从未据此清单对镜像的校验和进行验证。一名攻击者以此可以提供任意所谓具有标记清单的镜像。一系列严重漏洞的大门就此敞开。

镜像经由HTTPS服务器下载后，通过一个未加密的管道流进入Docker守护进程：

```
[decompress] -> [tarsum] -> [unpack]

```

这条管道的性能没有问题，但是却完全没有经过加密。不可信的输入在签名验证之前是不应当进入管道的。不幸的是，Docker在上面处理镜像的三个步骤中，都没有对校验和进行验证。

然而，不论Docker如何[声明](https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/)，实际上镜像的校验和（Checksum）从未经过校验。下面是Docker与镜像校验和的验证相关的代码[片段](https://titanous.com/posts/docker-insecurity#fn:0)，即使我提交了校验和不匹配的镜像，都无法触发警告信息。

```
if img.Checksum != "" && img.Checksum != checksum {
  log.Warnf("image layer checksum mismatch: computed %q,
             expected %q", checksum, img.Checksum)
}

```

### 不安全的处理管道

**解压缩**

Docker支持三种压缩算法：gzip、bzip2和xz。前两种使用Go的标准库实现，是[内存安全（memory-safe)](https://en.wikipedia.org/wiki/Memory_safety)的，因此这里我预计的攻击类型应该是拒绝服务类的攻击，包括CPU和内存使用上的当机或过载等等。

第三种压缩算法，xz，比较有意思。因为没有现成的Go实现，Docker 通过[执行(exec)](https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/pkg/archive/archive.go#L91-L95)xz二进制命令来实现解压缩。

xz二进制程序来自于[XZ Utils](http://tukaani.org/xz/)项目，由[大概](https://titanous.com/posts/docker-insecurity#fn:1)2万行C代码生成而来。而C语言不是一门内存安全的语言。这意味着C程序的恶意输入，在这里也就是Docker镜像的XZ Utils解包程序，潜在地存在可能会执行任意代码的风险。

Docker以root权限*运行* xz 命令，更加恶化了这一潜在威胁。这意味着如果在xz中出现了一个漏洞，对docker pull命令的调用就会导致用户整个系统的完全沦陷。

**Tarsum**

对tarsum的使用，其出发点是好的，但却是最大的败笔。为了得到任意一个加密tar文件的准确校验和，Docker先对tar文件进行解密，然后求出特定部分的哈希值，同时排除剩余的部分，而这些步骤的[顺序都是固定的](https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/pkg/tarsum/tarsum_spec.md)。

由于其生成校验和的步骤固定，它解码不可信数据的过程就有可能被设计成[攻破tarsum的代码](https://titanous.com/posts/docker-insecurity#fn:2)。这里潜在的攻击既包括拒绝服务攻击，还有逻辑上的漏洞攻击，可能导致文件被感染、忽略、进程被篡改、植入等等，这一切攻击的同时，校验和可能都是不变的。

**解包**

解包的过程包括tar解码和生成硬盘上的文件。这一过程尤其危险，因为在解包写入硬盘的过程中有另外三个[已报告的漏洞](https://titanous.com/posts/docker-insecurity#fn:3)。

任何情形下未经验证的数据都不应当解包后直接写入硬盘。

### libtrust

Docker的工具包[libtrust](https://github.com/docker/libtrust)，号称“通过一个分布式的信任图表进行认证和访问控制”。很不幸，对此官方没有任何具体的说明，看起来它好像是实现了一些[javascript对象标记和加密](https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11)规格以及其他一些未说明的算法。

使用libtrust下载一个清单经过签名和认证的镜像，就可以触发下面这条不准确的信息（说不准确，是因为事实上它验证的只是清单，并非真正的镜像）：

```
ubuntu:14.04: The image you are pulling has been verified(您所拉取的镜像已经经过验证)

```

目前只有Docker公司“官方”发布的镜像清单使用了这套签名系统，但是上次我参加Docker[管理咨询委员会](https://titanous.com/posts/docker-insecurity#fn:4)的会议讨论时，我所理解的是，Docker公司正计划在未来扩大部署这套系统。他们的目标是以Docker公司为中心，控制一个认证授权机构，对镜像进行签名和（或）客户认证。

我试图从Docker的代码中找到签名秘钥，但是没找到。好像它并不像我们所期望的把密钥嵌在二进制代码中，而是在每次镜像下载前，由Docker守护进程[通过HTTPS从CDN](https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/trust/trusts.go#L38)远程获取。这是一个多么糟糕的方案，有无数种攻击手段可能会将可信密钥替换成恶意密钥。这些攻击包括但不限于：CDN供应商出问题、CDN初始密钥出现问题、客户端下载时的中间人攻击等等。

### 补救

研究结束前，我[报告](https://github.com/docker/docker/issues/9719)了一些在tarsum系统中发现的问题，但是截至目前我报告的这些问题仍然没有修复。

要改进Docker镜像下载系统的安全问题，我认为应当有以下措施：

**摒弃tarsum并且真正对镜像本身进行验证**

出于安全原因tarsum应当被摒弃，同时，镜像在完整下载后、其他步骤开始前，就对镜像的加密签名进行验证。

**添加权限隔离**

镜像的处理过程中涉及到解压缩或解包的步骤必须在隔离的进程（容器？）中进行，即只给予其操作所需的最小权限。任何场景下都不应当使用root运行xz这样的解压缩工具。

**替换 libtrust**

应当用[更新框架(The Update Framework)](http://theupdateframework.com/)替换掉libtrust，这是专门设计用来解决软件二进制签名此类实际问题的。其威胁模型非常全方位，能够解决libtrust中未曾考虑到的诸多问题，目前已经有了完整的说明文档。除了已有的Python实现，我已经开始着手用[Go语言实现](https://github.com/flynn/go-tuf)的工作，也欢迎大家的贡献。

作为将更新框架加入Docker的一部分，还应当加入一个本地密钥存储池，将root密钥与registry的地址进行映射，这样用户就可以拥有他们自己的签名密钥，而不必使用Docker公司的了。

我注意到使用非Docker公司官方的第三方仓库往往会是一种非常糟糕的用户体验。Docker也会将第三方的仓库内容降为二等地位来看待，即使不因为技术上的原因。这个问题不仅仅是生态问题，还是一个终端用户的安全问题。针对第三方仓库的全方位、去中心化的安全模型既必须又迫切。我希望Docker公司在重新设计他们的安全模型和镜像认证系统时能采纳这一点。

### 结论

Docker用户应当意识到负责下载镜像的代码是非常不安全的。用户们应当只下载那些出处没有问题的镜像。目前，这里的“没有问题”并**不**包括Docker公司的“可信（trusted）”镜像，例如官方的Ubuntu和其他基础镜像。

最好的选择就是在本地屏蔽 index.docker.io，然后使用docker load命令在导入Docker之前手动下载镜像并对其进行验证。Red Hat的安全博客有一篇[很好的文章](https://securityblog.redhat.com/2014/12/18/before-you-initiate-a-docker-pull/)，大家可以看看。

感谢Lewis Marshall指出tarsum从未真正验证。

参考

* [校验和的代码](https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/image/image.go#L114-L116)
* [cloc](http://cloc.sourceforge.net/)介绍了18141行没有空格没有注释的C代码，以及5900行的header代码，版本号为v5.2.0。
* [Android中也发现了](http://www.saurik.com/id/17)类似的bug，能够感染已签名包中的任意文件。同样出现问题的还有[Windows的Authenticode](http://blogs.technet.com/b/srd/archive/2013/12/10/ms13-098-update-to-enhance-the-security-of-authenticode.aspx)认证系统，二进制文件会被篡改。
* 特别的：[CVE-2014-6407](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6407)、 [CVE-2014-9356](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9356)以及 [CVE-2014-9357](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9357)。目前已有两个Docker[安全发布](https://groups.google.com/d/topic/docker-user/nFAz-B-n4Bw/discussion)有了回应。
* 参见[2014-10-28 DGAB会议记录](https://docs.google.com/document/d/1JfWNzfwptsMgSx82QyWH_Aj0DRKyZKxYQ1aursxNorg/edit?pli=1)的第8页。

---

via: <https://titanous.com/posts/docker-insecurity>

作者：[titanous](https://twitter.com/titanous) 译者：[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对：[wxy](https://github.com/wxy)

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


如何在 Ubuntu 上转换图像、音频和视频格式

Summary: 如果你的工作中需要接触到各种不同编码格式的图像、音频和视频，那么你很有可能正在使用多个工具来转换这些多种多样的媒体格式。如果存在一个能够处理所有图像/音频/视频格式的多合一转换工具，那就太好了。 Format Junkie 就是这样一个多合一的媒体转换工具，它有着极其友好的用户界面。更棒的是它是一个免费软件。你可以使用 Format Junkie 来转换几乎所有的流行格式的图像、音频、视频和归档文件（或称压缩文件），所有这些只需要简单地点击几下鼠标而已。 在Ubuntu 12.04, 12.10 和 13.04 上安装 Format Junkie Format Junkie 可以通

马，有用

这个赞啊，在旁边看到了个选项卡，是不是支持光盘刻录[doge]

好强大的样子，在安装中。。。

[挖鼻屎]arch竟然没搜到//@校长Ubuntu: 好强大的样子，在安装中。。。

介绍下ffmepg吧  也是很棒的软件

马克下

我常用的是mmpeg...//@校长Ubuntu: 好强大的样子，在安装中。。。

ffmpeg……呢？

拿了

ffmepg太复杂了。。不过我找两篇来吧

赞//@伪码: 转发微博

刚想着如何下载个格式工厂在win转换呢……

在LinuxCN上翻的第一篇

# 如何在 Ubuntu 上转换图像、音频和视频格式

如果你的工作中需要接触到各种不同编码格式的图像、音频和视频，那么你很有可能正在使用多个工具来转换这些多种多样的媒体格式。如果存在一个能够处理所有图像/音频/视频格式的多合一转换工具，那就太好了。

[Format Junkie](https://launchpad.net/format-junkie) 就是这样一个多合一的媒体转换工具，它有着极其友好的用户界面。更棒的是它是一个免费软件。你可以使用 Format Junkie 来转换几乎所有的流行格式的图像、音频、视频和归档文件（或称压缩文件），所有这些只需要简单地点击几下鼠标而已。

### 在Ubuntu 12.04, 12.10 和 13.04 上安装 Format Junkie

Format Junkie 可以通过 Ubuntu PPA format-junkie-team 进行安装。这个PPA支持Ubuntu 12.04, 12.10 和 13.04。在以上任意一种Ubuntu版本中安装Format Junkie的话，简单的执行以下命令即可：

```
$ sudo add-apt-repository ppa:format-junkie-team/release
$ sudo apt-get update
$ sudo apt-get install formatjunkie
$ sudo ln -s /opt/extras.ubuntu.com/formatjunkie/formatjunkie /usr/bin/formatjunkie

```

### 将 Format Junkie 安装到 Ubuntu 13.10

如果你正在运行Ubuntu 13.10 (Saucy Salamander)，你可以按照以下步骤下载 .deb 安装包来进行安装。由于Format Junkie 的 .deb 安装包只有很少的依赖包，所以使用 [gdebi deb installer](http://xmodulo.com/how-to-install-deb-file-with-dependencies.html) 来安装它。

在32位版Ubuntu 13.10上：

```
$ wget https://launchpad.net/~format-junkie-team/+archive/release/+files/formatjunkie_1.07-1~raring0.2_i386.deb
$ sudo gdebi formatjunkie_1.07-1~raring0.2_i386.deb
$ sudo ln -s /opt/extras.ubuntu.com/formatjunkie/formatjunkie /usr/bin/formatjunkie

```

在32位版Ubuntu 13.10上：

```
$ wget https://launchpad.net/~format-junkie-team/+archive/release/+files/formatjunkie_1.07-1~raring0.2_amd64.deb
$ sudo gdebi formatjunkie_1.07-1~raring0.2_amd64.deb
$ sudo ln -s /opt/extras.ubuntu.com/formatjunkie/formatjunkie /usr/bin/formatjunkie

```

### 将 Format Junkie 安装到 Ubuntu 14.04 或之后版本

现有可供使用的官方 Format Junkie .deb 文件需要 libavcodec-extra-53，不过它从Ubuntu 14.04开始就已经过时了。所以如果你想在Ubuntu 14.04或之后版本上安装Format Junkie，可以使用以下的第三方PPA来代替。

```
$ sudo add-apt-repository ppa:jon-severinsson/ffmpeg
$ sudo add-apt-repository ppa:noobslab/apps
$ sudo apt-get update
$ sudo apt-get install formatjunkie

```

### 如何使用 Format Junkie

安装完成后，只需运行以下命令即可启动 Format Junkie：

```
$ formatjunkie

```

#### 使用 Format Junkie 来转换音频、视频、图像和归档格式

就像下方展示的一样，Format Junkie 的用户界面简单而且直观。在顶部的音频、视频、图像和iso媒体四个标签当中点击你需要的那个。你可以根据需要添加任意数量的文件用于批量转换。添加文件后，选择输出格式，直接点击 "Start Converting" 按钮进行转换。

Format Junkie支持以下媒体格式间的转换：

* **Audio**: mp3, wav, ogg, wma, flac, m4r, aac, m4a, mp2.
* **Video**: avi, ogv, vob, mp4, 3gp, wmv, mkv, mpg, mov, flv, webm.
* **Image**: jpg, png, ico, bmp, svg, tif, pcx, pdf, tga, pnm.
* **Archive**: iso, cso.

#### 用 Format Junkie 进行字幕编码

除了媒体转换，Format Junkie 可提供了字幕编码的图形界面。实际的字幕编码是由MEncoder来完成的。为了使用Format Junkie的字幕编码接口，首先你需要安装MEencoder。

```
$ sudo apt-get install mencoder

```

然后点击Format Junkie 中的 "Advanced"标签。选择 AVI/subtitle 文件来进行编码，如下所示：

总而言之，Format Junkie 是一个非常易于使用和多才多艺的媒体转换工具。但也有一个缺陷，它不允许对转换进行任何定制化（例如：比特率，帧率，采样频率，图像质量，尺寸）。所以这个工具推荐给正在寻找一个简单易用的媒体转换工具的新手使用。

喜欢这篇文章吗？请在下面发表评论吧。多谢！

---

via: <http://xmodulo.com/how-to-convert-image-audio-and-video-formats-on-ubuntu.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[Ping](https://github.com/mr-ping) 校对：[Caroline](https://github.com/carolinewuyan)

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


用 Linux blkid 命令查找块设备详情

Summary: 今天我们将会向你展示如何使用 lsblk 和 blkid 工具来查找关于块设备的信息，我们使用的是一台安装了 CentOS 7.0 的机器。 lsblk lsblk 是一个 Linux 工具，它会显示有关你系统里所有可用块设备的信息。它从 sysfs 文件系统 中获取信息。默认情况下，这个工具将会以树状格式显示（除了内存虚拟磁盘外的）所有块设备。 lsblk 默认输出 默认情况下 lsblk 会将块设备输出为树状格式：   NAME  设备的名称   MAJ:MIN  Linux 操作系统中的每个设备都以一个文件表示，对块（磁盘）设备来说，这里用主次设备编号来描述设备。   RM  可移动设备。

@印象笔记

@我的印象笔记

Repost

#实用Linux命令分享#

@我的印象笔记

# 用 Linux blkid 命令查找块设备详情

今天我们将会向你展示如何使用 **lsblk** 和 **blkid** 工具来查找关于块设备的信息，我们使用的是一台安装了 CentOS 7.0 的机器。

lsblk
-----

**lsblk** 是一个 Linux 工具，它会显示有关你系统里所有可用块设备的信息。它从 [sysfs 文件系统](https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt) 中获取信息。默认情况下，这个工具将会以树状格式显示（除了内存虚拟磁盘外的）所有块设备。

### lsblk 默认输出

默认情况下 lsblk 会将块设备输出为树状格式：

* **NAME** —— 设备的名称
* **MAJ:MIN** —— Linux 操作系统中的每个设备都以一个文件表示，对块（磁盘）设备来说，这里用主次设备编号来描述设备。
* **RM** —— 可移动设备。如果这是一个可移动设备将显示 1，否则显示 0。
* **TYPE** —— 设备的类型
* **MOUNTPOINT** —— 设备挂载的位置
* **RO** —— 对于只读文件系统，这里会显示 1，否则显示 0。
* **SIZE** —— 设备的容量

### 显示设备的所有者

若想显示设备所有者相关的信息，包括文件的所属用户、所属组以及文件系统挂载的模式，你可以使用 -m 选项，像这样：

```
lsblk -m

```

### 列出设备块

如果你只想要列出设备，而不想让他们以树状输出，你可以使用 -l 选项：

```
lsblk -l

```

### 在脚本中使用

高级技巧：如果你想要在脚本中使用而希望剔除表头，你可以这样使用 -n 选项：

```
lsblk -ln

```

blkid
-----

**blkid** 命令是一个命令行工具，它可以显示关于可用块设备的信息。它可以识别一个块设备内容的类型（如文件系统、交换区）以及从内容的元数据（如卷标或 UUID 字段）中获取属性（如 tokens 和键值对）。它主要有两类作用：用指定的键值对搜索一个设备，或是显示一个或多个设备的键值对。

### blkid 使用方法

不添加任何参数直接运行 blkid 将会输出所有可用的设备、它们的通用唯一识别码（UUID）、文件系统类型以及卷标（如果有设置过）。

```
# blkid

```

### 根据名字或 UUID 列出设备

如果你只想显示一个特定设备的信息，你可以将该设备的名字作为选项添加在 blkid 后面：

```
# blkid /dev/sda1

```

如果你知道一个设备的 UUID 而想要知道它的设备名，你可以用 -U 选项，像这样：

```
# blkid -U d3b1dcc2-e3b0-45b0-b703-d6d0d360e524

```

### 详细信息

如果你想要获取更多详细信息，你可以使用 -p 和 -o udev 选项来将它们用整齐的格式显示出来，像这样：

```
# blkid -po udev /dev/sda1

```

### 重置缓存

有时候设备列表可能不会更新，如果遇到这种情况你可以使用 -g 选项来清理 blkid 的缓存，从而清除已经不存在的设备。

```
# blkid -g

```

---

via: <http://linoxide.com/linux-command/linux-command-lsblk-blkid/>

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

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


在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器

Summary: BIND（Berkeley internet Name Daemon)也叫做NAMED，是现今互联网上使用最为广泛的DNS 服务器程序。这篇文章将要讲述如何在 chroot 监牢中运行 BIND，这样它就无法访问文件系统中除监牢以外的其它部分。 例如，在这篇文章中，我会将BIND的运行根目录改为 /var/named/chroot/。当然，对于BIND来说，这个目录就是 /（根目录）。 jail（监牢，下同）是一个软件机制，其功能是使得某个程序无法访问规定区域之外的资源，同样也为了增强安全性（LCTT 译注：chroot 监牢，所谓监牢就是指通过chroot机制来更改某个进程所能看到的根目录，即将某进

@永瑞儿

前几月刚搭完

systemctl start named-chroot执行时报错。麻烦帮忙定位，谢谢。

[root@localhost named]# systemctl status named-chroot.service -l

● named-chroot.service - Berkeley Internet Name Domain (DNS)

   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since Fri 2016-09-23 08:30:55 CST; 10min ago

  Process: 3705 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=1/FAILURE)

Sep 23 08:30:55 localhost.localdomain systemd[1]: named-chroot.service: control process exited, code=exited status=1

Sep 23 08:30:55 localhost.localdomain systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).

Sep 23 08:30:55 localhost.localdomain systemd[1]: Unit named-chroot.service entered failed state.

Sep 23 08:30:55 localhost.localdomain systemd[1]: named-chroot.service failed.

你找到解决方法了吗？

这里我有个疑问，在centos6版本中，bind-chroot可以直接由/etc/init.d/named这个脚本加载/etc/sysconfig/named这个文件。然后在/etc/init.d/named脚本中已经写好了通过mount --bind做目录链接。不需要设置以上这些东西。

请问在centos7中不能这样做吗？也通过mount --bind来做链接，请解答，谢谢！！！

没这样做过，不能确定。以我的观点来的，C7 和 C6 对用户的最大改变是 systemd 的影响，所以我初步判断应该是可行的。

我也想问

我解决了 是named.conf权限问题 ，chown root.named named.conf<br />
之后重启服务，你试一下

这个请求日志怎么输出？

在logging {

        channel里面新添加，都告诉找不到这个文件，我自己touch一个还是找不到，

        file “/var/named/chroot/var/log/dns.log”

        这个路径就是不行chown named.named log chmod 777 log都不行

解决了，缺少category queries { "query_log"; };

怎么说找不到这个文件

可以试下这个cp -rp  /var/named/dynamic  /var/named/chroot/var/named/

我最近也是在学习DNS，启动named-chroot报错

Mar 14 01:26:57 localhost.localdomain named[9969]: generating session key for dynamic DNS

Mar 14 01:26:57 localhost.localdomain named[9969]: sizing zone task pool based on 7 zones

Mar 14 01:26:57 localhost.localdomain named[9969]: none:104: 'max-cache-size 90%' - setting to 175921860444MB (out of 17592186044415MB)

Mar 14 01:26:58 localhost.localdomain named[9969]: invalid managed-keys-d

# 在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器

BIND（Berkeley internet Name Daemon)也叫做NAMED，是现今互联网上使用最为广泛的DNS 服务器程序。这篇文章将要讲述如何在 chroot 监牢中运行 BIND，这样它就无法访问文件系统中除“监牢”以外的其它部分。

例如，在这篇文章中，我会将BIND的运行根目录改为 /var/named/chroot/。当然，对于BIND来说，这个目录就是 /（根目录）。 “jail”（监牢，下同）是一个软件机制，其功能是使得某个程序无法访问规定区域之外的资源，同样也为了增强安全性（LCTT 译注：chroot “监牢”，所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根目录，即将某进程限制在指定目录中，保证该进程只能对该目录及其子目录的文件进行操作，从而保证整个服务器的安全）。Bind Chroot DNS 服务器的默认“监牢”为 /var/named/chroot。

你可以按照下列步骤，在CentOS 7.0 上部署 Bind Chroot DNS 服务器。

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

### 1、安装Bind Chroot DNS 服务器

```
[root@centos7 ~]# yum install bind-chroot bind -y

```

### 2、拷贝bind相关文件,准备bind chroot 环境

```
[root@centos7 ~]# cp -R /usr/share/doc/bind-*/sample/var/named/* /var/named/chroot/var/named/

```

### 3、在bind chroot 的目录中创建相关文件

```
[root@centos7 ~]# touch /var/named/chroot/var/named/data/cache_dump.db
[root@centos7 ~]# touch /var/named/chroot/var/named/data/named_stats.txt
[root@centos7 ~]# touch /var/named/chroot/var/named/data/named_mem_stats.txt
[root@centos7 ~]# touch /var/named/chroot/var/named/data/named.run
[root@centos7 ~]# mkdir /var/named/chroot/var/named/dynamic
[root@centos7 ~]# touch /var/named/chroot/var/named/dynamic/managed-keys.bind

```

### 4、 将 Bind 锁定文件设置为可写

```
[root@centos7 ~]# chmod -R 777 /var/named/chroot/var/named/data
[root@centos7 ~]# chmod -R 777 /var/named/chroot/var/named/dynamic

```

### 5、 将 /etc/named.conf 拷贝到 bind chroot目录

```
[root@centos7 ~]# cp -p /etc/named.conf /var/named/chroot/etc/named.conf

```

### 6、 在/etc/named.conf中对 bind 进行配置。

在 named.conf 文件尾添加 **example.local** 域信息， 创建转发域（Forward Zone）与反向域（Reverse Zone）（LCTT 译注：这里example.local 并非一个真实有效的互联网域名，而是通常用于本地测试的一个域名；如果你需要做权威 DNS 解析，你可以将你拥有的域名如这里所示配置解析。）：

```
[root@centos7 ~]# vi /var/named/chroot/etc/named.conf

```

 -

```
..
..
zone "example.local" {
    type master;
    file "example.local.zone";
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
};
..
..

```

named.conf 完全配置如下：

```
//
// named.conf
//
// 由Red Hat提供，将 ISC BIND named(8) DNS服务器
// 配置为暂存域名服务器 (用来做本地DNS解析).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };

        /*
         - 如果你要建立一个 授权域名服务器 服务器, 那么不要开启 recursion（递归） 功能。
         - 如果你要建立一个 递归 DNS 服务器, 那么需要开启recursion 功能。
         - 如果你的递归DNS服务器有公网IP地址, 你必须开启访问控制功能，
           只有那些合法用户才可以发询问. 如果不这么做的话，那么你的服
           服务就会受到DNS 放大攻击。实现BCP38将有效抵御这类攻击。
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "example.local" {
    type master;
    file "example.local.zone";
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

```

### 7、 为 example.local 域名创建转发域与反向域文件

#### a)创建转发域

```
[root@centos7 ~]# vi /var/named/chroot/var/named/example.local.zone

```

添加如下内容并保存：

```
;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum

;       Define the nameservers and the mail servers

               IN      NS      ns1.example.local.
               IN      NS      ns2.example.local.
               IN      A       192.168.0.70
               IN      MX      10 mx.example.local.

centos7          IN      A       192.168.0.70
mx               IN      A       192.168.0.50
ns1              IN      A       192.168.0.70
ns2              IN      A       192.168.0.80

```

#### b)创建反向域

```
[root@centos7 ~]# vi /var/named/chroot/var/named/192.168.0.zone

```

 -

```
;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum

0.168.192.in-addr.arpa. IN      NS      centos7.example.local.

70.0.168.192.in-addr.arpa. IN PTR mx.example.local.
70.0.168.192.in-addr.arpa. IN PTR ns1.example.local.
80.0.168.192.in-addr.arpa. IN PTR ns2.example.local.。

```

### 8、开机自启动 bind-chroot 服务

```
[root@centos7 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
[root@centos7 ~]# systemctl stop named
[root@centos7 ~]# systemctl disable named
[root@centos7 ~]# systemctl start named-chroot
[root@centos7 ~]# systemctl enable named-chroot
ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'
```

---

via: <http://www.ehowstuff.com/how-to-setup-bind-chroot-dns-server-on-centos-7-0-vps/>

作者：[skytech](http://www.ehowstuff.com/author/mhstar/) 译者：[SPccman](https://github.com/SPccman) 校对：[wxy](https://github.com/wxy)

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


2015:开源已经完胜，但这并不是结束

Summary: 在 2014 年的完胜后，接下来会如何？  新年伊始，习惯上都是回顾已经走过的一年。但只要一直关注我们，就会很容易获得过去一年的总结：开源已经全胜。让我们从头开始说起吧：  超级计算机: Linux 在超级计算机系统 500 强的名单上占据绝对的主导地位这本身就令其它操作系统很尴尬。2014年11月的数据显示前500系统中的485个系统都在运行着 Linux 的发布系统，而仅仅只有一台运行着 Windows 系统。如果您看看所用的处理器数量，这数据更是让人惊叹。截止到目前，运行 Linux 系统的处理器有 22,851,693 个之多，而 windows 系统仅仅只有 30,7

安卓其实算是嵌入式linux

开源完胜 哪方面 吹也要有个限度

超级计算机使用linux是因为它开源可定制，这不代表linux比windows优益！坐等windows开源[挤眼]

free!

在桌面市场要发力啊，现在差太多

自由软件并不存在。在我写了一整本书后，我莫名的忧伤。但这也是我写进文章的一个观点。自由软件和与它一体两面的开源正在不断的变化着。它并不是一直持续不变的，不稳定、不固定、不持久，这正是它的特色的一部分…

我觉得你说反了，超级计算机用linux正是因为它比windows好，而不是因为它开源可定制。windows server完全顶不住压力的。我们部门内部使用的几台服务器都是windows，因为傻瓜式，容易上手，可是我们公司对外的SSN节点全部用LINUX，主要用来对外同步数据，用windows server用不了多久就要宕机，这边有台服务器用linux已经3年没重启过，windows你试试

对，我最长的一台 linux 服务器，5年没重启过了。

Linux在不重启方面确实有一套。原来有个实验室里面配了一台服务器，用于给学生共享资料，一开始装了Windows Server 2003，据那里的管理员说最长记录是一周没有重启，再长就出问题不得不重启了。后来我给他们换成Linux，然后搞个FTP服务器，据管理员说除了偶尔检修时拉闸断电，从来没有重启过，多少人访问都没有出过问题，最长一次半年没停过——一直到几年后这个机子的硬盘挂了（活该，谁让你们不正常关机，只知道拉闸断电）。不过据说还有一个原因使得Linux比较稳定：原来的Windows Server看起来比较好用，哪个学生都想去折腾两下，经常被改配置，换成Linux可好，给他们密码都没人折腾了——不会用。

哈哈，当年据说某些虚拟主机运营商的windows服务器，设置了定时任务，每天夜里重启一次。

阿狸在黑客专用，开发的系统LINUX和安卓越走越远。离死亡越来越近，最近无数黑客在LINUX内安卓的后门给发现了。 全球过半服务器逃离LINUX，2015年LINUX份额急跌到只有三分之一。并大部份还在中国。

这是哪里来的谣言？出处呢？数据呢？

# 2015:开源已经完胜，但这并不是结束

>
> 在 2014 年的完胜后，接下来会如何？
>
>
>

新年伊始，习惯上都是回顾已经走过的一年。但只要一直关注我们，就会很容易获得过去一年的总结：开源已经全胜。让我们从头开始说起吧：

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

**超级计算机**: Linux 在超级计算机系统 500 强的名单上占据绝对的主导地位这本身就令其它操作系统很尴尬。[2014年11月的数据](http://www.top500.org/statistics/list/)显示前500系统中的485个系统都在运行着 Linux 的发布系统，而仅仅只有一台运行着 Windows 系统。如果您看看所用的处理器数量，这数据更是让人惊叹。截止到目前，运行 Linux 系统的处理器有 22,851,693 个之多，而 windows 系统仅仅只有 30,720。这意味着什么？Linux 不仅仅是占据主导地位，在大型系统中已经是绝对的霸主了。

**云计算**: 去年， Linux 基金会撰写了一个有趣的[报告](http://www.linuxfoundation.org/publications/linux-foundation/linux-end-user-trends-report-2014)，是关于大公司在云端使用 Linux 的情况的。它发现 75% 的大公司在使用 Linux 系统作为他们的主要平台，相对的使用 Windows 系统的只占 23%。因为需要考虑云端和非云端的因素，它们已经混淆在一起了，所以很难把这比例对应到真实的市场份额里。但是，鉴于当前云计算的流行度，可以很确定的说明 Linux 使用的高速增长。事实上，同样的调查发现，在云端的 Linux 部署率已经从 45% 增长到 79%，而对于 Windows 来说已经从 45% 下降到 36%。当然了，某些人可能认为 Linux 基金会在这块上并不是完全公正无私的，但即使是有私心或是因统计的不确定性而有失公允，事情也正朝着预料的正确方向迈进。

**Web 服务器**: 开源已经统治这个行业近20年 - 取得了一份很惊人的成绩。然而，最近在市场份额上出现了一些有趣的变动：一点就是，在 Web 服务器的总计数上，微软的 IIS 服务已经超越了 Apache 服务。但正如 Netcraft 公司其最近的[分析](http://news.netcraft.com/archives/2014/12/18/december-2014-web-server-survey.html)解释所说的那样，这儿还有很多令人大饱眼福的地方呢：

>
> 这是网站总数持续大幅回落以来的第二个月，从一月份以来，本月达到了最低点。与十一月份情况一样，损失的仅仅只是集中在一小部分的主机提供商中，只占了5200万主机名数的十大点。这点损失相比于激活的站点和网站来说不是一个数据级的，所以造不成什么影响，但激活的这些站点大部分都是广告类的链接页面池，基本上没有原创的内容。大多数这些站点都是运行在微软的 IIS 服务器上的，所以在2014年7月份的调查中 IIS 的使用数就超过了 Apache。然而，近期跌势已导致其市场份额下降到 29.8％，现在已经低于Apache 10个百分点了。
>
>
>

这表明，微软的所谓“激增”更多的是表象，而事实并非如此，它的大多数增加都是基于没什么有用内容的链接页面池。事实上，Netcraft公司的关于活动网站的数据给我们描绘了一幅完全不同的图表：Apache 拥有 50.57％ 的市场份额，nginx 的是 14.73％ 位居第二;微软的 IIS 很无力，占到了相当微弱的 11.72％。这意味着在活跃 Web 服务器市场上开源大约有65％的份额 - 虽然没有超级计算机那么高的水平，但也还不错。

**移动设备系统**. 目前，开源的大军主要是 Andriod 为基础在不断高歌猛进。最新数据表明，在2014年第三季度的智能手机出货量中，Andriod 设备的市场份额从去年同期的 81.4% 上升到了 [83.6%](http://www.cnet.com/news/android-stays-unbeatable-in-smartphone-market-for-now/)。苹果的从去年同期的 13.4% 下降到 12.3%。对于平板电脑来说，Android 平板遵循同样的轨迹：在2014年第二季度，Android 平板的占有率达到[全球平板电脑的销量的75％](http://timesofindia.indiatimes.com/tech/tech-news/Android-tablet-market-share-hits-70-in-Q2-iPads-slip-to-25-Survey/articleshow/38966512.cms)左右，而苹果的只有25％。

**嵌入式系统**: 虽然很难量化 Linux 在的重要的嵌入式系统市场的市场份额，但来一个自 2013 年的研究数字表明，[按规划，大约一半的嵌入式系统](http://linuxgizmos.com/embedded-developers-prefer-linux-love-android/)将会采用 Linux。

**物联网**: 在很多方面上可以把它们简单的认为是嵌入式系统的另外一个化身，不同之处在于它们被设计为一直在线的。虽然现在谈论它的市场份额还有点为时过早，但如我在[讨论栏目](http://www.computerworlduk.com/blogs/open-enterprise/allseen-3591023/)里说的，AllSeen 的物联网开源框架正进行的如火如荼。他们所缺少的也最引入注目的事情只是还没有任何可信任的闭源项目对手。因此，很有可能物联网将会通过开源的方式来达到 Linux 在超级计算机中的占有率这样的水平。

当然了，这个阶段的成功也带来了一些问题：我们将何去何从？鉴于开源将会使很多成功的行业达到饱和点，想必唯一的办法就是下跌吗？要回答这个问题，我建议浏览下 Christopher Kelty 于2013年写的一篇供同行参阅、发人深省的文章，有个耐人寻味的标题“[天下没有免费的软件](http://peerproduction.net/issues/issue-3-free-software-epistemics/debate/there-is-no-free-software/)”。下面是他的开头段：

>
> 自由软件并不存在。在我写了一整本书后，我莫名的忧伤。但这也是我写进文章的一个观点。自由软件和与它一体两面的开源正在不断的变化着。它并不是一直持续不变的，不稳定、不固定、不持久，这正是它的特色的一部分。
>
>
>

换句话说，无论2014年带给我们多少惊人的免费软件，我们也确信2015年会更多更丰富，因为进化是永无止境的。

---

via: <http://www.computerworlduk.com/blogs/open-enterprise/open-source-has-won-3592314/>

作者：[lyn Moody](http://www.computerworlduk.com/author/glyn-moody/) 译者：[runningwater](https://github.com/runningwater) 校对：[wxy](https://github.com/wxy)

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


如何在Ubuntu上找出可用的网络适配器

Summary: 想知道在Linux中你正在使用的网卡是什么吗？ 在Linux中很容易就找出网卡的生产商。打开一个终端并输入下面的额命令： sudo lshw -C network  如果上面的命令不能在sudo下使用，那就别用 sudo 的特权模式。它的输出看上去有点奇怪但是很有用。  *-network description: Wireless interface product: BCM4360 802.11ac Wireless Network Adapter vendor: Broadcom Corporation physical id: 0 bus info: pci@0000:03:00.0 logical name: wlan0 version: 03 serial: 9c:f3:87:c1:5d:6a width: 64 bits clock: 33MHz capabilities: busmaster

Repost

@我的印象笔记

联想g490不能用fglrx驱动。。。

//@linux命令行精选网:转发微博

" lshw 命令实际上死用来列出硬件的" 这句话中有错别字。<br />
还有关于这句 “你不应该用特权模式来运行这个命令”，如果用特权模式来运行这个命令，有什么后果吗？还是用 普通模式就可以运行，而不必要使用特权模式？这两个都没有说清楚。

@我的印象笔记

谢谢，已经修正~~

以前常用现在忘了。。

# 如何在Ubuntu上找出可用的网络适配器

想知道**在Linux中你正在使用的网卡是什么吗？** 在Linux中很容易就找出网卡的生产商。打开一个终端并输入下面的额命令：

```
sudo lshw -C network

```

如果上面的命令不能在sudo下使用，那就别用 sudo 的特权模式。它的输出看上去有点奇怪但是很有用。

```
*-network
    description: Wireless interface
    product: BCM4360 802.11ac Wireless Network Adapter
    vendor: Broadcom Corporation
    physical id: 0
    bus info: pci@0000:03:00.0
    logical name: wlan0
    version: 03
    serial: 9c:f3:87:c1:5d:6a
    width: 64 bits
    clock: 33MHz
    capabilities: busmaster caplist ethernet physical wireless
    configuration: broadcast=yes driver=wl0 driverversion=6.30.223.248 (r487574) ip=192.168.1.23 latency=0 multicast=yes wireless=IEEE 802.11abg
    resources: irq:18 memory:b0600000-b0607fff memory:b0400000-b05fffff
```

如你所见，我Macbook Air上的无线网卡是BCM4360，这是一款在Ubuntu下面很容易出现无法检测无线网络问题的网卡。

[lshw](http://linux.die.net/man/1/lshw) 命令实际上是用来列出硬件的，因此命令的名字是lshw。带上网络的选项后，就会只过滤出网络硬件了。

### 了解网卡的其他方法

另外你还可以使用lspci命令来显示PCI总线上的信息。你应该使用普通用户来运行这个命令。只需要在命令行下输入：

```
lspci

```

命令的输出看上去想这样：

```
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09)
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09)
00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4)
00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 2 (rev e4)
00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4)
00:1c.4 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 5 (rev e4)
00:1c.5 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 6 (rev e4)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
02:00.0 Multimedia controller: Broadcom Corporation Device 1570
03:00.0 Network controller: Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03)
04:00.0 SATA controller: Marvell Technology Group Ltd. 88SS9183 PCIe SSD Controller (rev 14)
```

这些命令会同时列出有线和无线的网卡。你应该注意到上面的输出中显示我的系统中没有有线网卡。因为我使用的是Macbook Air，它没有以太网端口

我希望这边文章可以帮助你找到你系统中的网卡。欢迎提出问题和建议。

---

via: <http://itsfoss.com/find-network-adapter-ubuntu-linux/>

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

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


一个可以显示Linux命令运行进度的伟大工具

Summary: Coreutils Viewer（cv）是一个简单的程序，它可以用于显示任何核心组件命令（如：cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting）的进度。它使用文件描述信息来确定一个命令的进度，比如cp命令。cv之美在于，它能够和其它Linux命令一起使用，比如你所知道的watch以及I/O重定向命令。这样，你就可以在脚本中使用，或者你能想到的所有方式，别让你的想象力束缚住你。  安装 你可以从cv的github仓库那儿下载所需的源文件。把zip文件下载下来后，将它解压缩，然后进入到解压后的文件夹。 该程序需要ncurse

神器！！求原理！

貌似很实用@owatch

Mark

拯救处女座啊

@我的印象笔记

@我的印象笔记  //@北京Linux用户组:拯救处女座啊

靠这曾经是困扰ast的难题。。。 //@北京Linux用户组:拯救处女座啊

太好了//@北京Linux用户组:拯救处女座啊

马克 //@北京Linux用户组:拯救处女座啊

@我的印象笔记

dd本身似乎好像可以，cp在unix下可以。。无论如何，工具很伟大//@宋宝华Barry: 转发微博

[呵呵]

[馋嘴] //@tobe陈迪豪:[呵呵]

试试 #基础架构平台#

@mark //@宋宝华Barry:转发微博

试试pv//@tobe陈迪豪: [呵呵]

@我的印象笔记

妈妈再也不怕我不知道进度了

M

Repost

[花心]//@To浅墨://@北京Linux用户组:拯救处女座啊

蛮实用的//@pi1ot: [馋嘴] //@tobe陈迪豪:[呵呵]

@我的印象笔记

Repost

好东西

以前一直在找这么个东西，哈哈，也总算找到了[嘻嘻] //@宋宝华Barry:转发微博

好厉害！

怎么指定监控的进程

大数据的时候应该很实用

也许某天能用上

好

很实用的东西 @我的印象笔记

//@宋宝华Barry:转发微博

@我的印象笔记

@mywiz

//@宋宝华Barry:转发微博

nb //@宋宝华Barry:转发微博

Repost

@我的印象笔记

@mark

@我的印象笔记

//@宋宝华Barry:转发微博

可惜不能用管道输出，还需要另开一个页面

好强大。//@宋宝华Barry:转发微博

伟大? 那pv放在哪里?

Mark

//@宋宝华Barry:转发微博

在一定场合还是很有必要查看进度的

感谢作者

@我的印象笔记

哈哈哈真是高端系统

哈哈，pv 也伟大~~

好强大的说

//@ROM民工:收藏！//@小煞-Xs:[嘻嘻]这是个好东西啊//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

好工具。。mark

[good] //@JinWYP:转发微博

赞 //@JinWYP:转发微博

@我的印象笔记

mark

这个牛逼

@我的印象笔记

@JackpGao

回头试试//@billy鹏的足迹:@JackpGao

看看 //@billy鹏的足迹:@JackpGao

//@billy鹏的足迹:@JackpGao

不错@echoisecho

mark //@平凡的香草://@左撇子程序员:@我的印象笔记

什么原理？

保存

@我的印象笔记

@我的印象笔记

转发微博.

溜溜溜溜......

[good]

//@平凡的香草://@左撇子程序员:@我的印象笔记

一个可以显示Linux命令运行进度的伟大工具@我的印象笔记

//@平凡的香草://@左撇子程序员:@我的印象笔记

//@牛秋霖: //@网路冷眼:好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

cv??watch?//@网路冷眼: 好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

为啥这个工具异乎寻常的受到关注？作为发布者，我很纳闷啊~~果然世界是不公平的。

@我的印象笔记

牛啊 //@网路冷眼: 好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

//@陈自欣:挺好的 //@julyclyde:proc？ //@网路冷眼:好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

一直想找这样的工具，收藏！//@Linux中国:为啥这个工具异乎寻常的受到关注？作为发布者，我很纳闷啊~~果然世界是不公平的。

不知道有毛卵用，cp不是自己会显示剩余时间吗

因为这些程序正好缺少显示进度的功能啊～好东西//@Linux中国: 为啥这个工具异乎寻常的受到关注？作为发布者，我很纳闷啊~~果然世界是不公平的。

@我的印象笔记

好东东//@billy鹏的足迹:@JackpGao

搞一搞//@百问科技:可以试一试！//@Linux中国: 为啥这个工具异乎寻常的受到关注？作为发布者，我很纳闷啊~~果然世界是不公平的。

@我的印象笔记

有意思//@Linux中国:为啥这个工具异乎寻常的受到关注？作为发布者，我很纳闷啊~~果然世界是不公平的。

@有道云笔记收藏

mark一下//@网路冷眼: 好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

@我的印象笔记

m

@我的为之笔记

程序“cv”尚未安装。 您可以使用以下命令安装：sudo apt-get install radiance 然后：【警告】：下列软件包不能通过验证！ libtcl8.6 libtk8.6 tcsh tk8.6 tcl8.6 tcl tk radiance radiance-materials//@Linux中国: 为啥这个工具异乎寻常的受到关注？作为发布者，我很纳闷啊~~果然世界是不公平的。

有点意思。

//@itnihao://@网路冷眼:好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

@我的印象笔记

@有道云笔记收藏

很好，谢谢分享！

(⊙。⊙)//@化静要努力://@网路冷眼: 好工具[赞]//@Ru1ing: //@振云_percy:可惜不能用管道输出，还需要另开一个页面

收藏了

# 一个可以显示Linux命令运行进度的伟大工具

Coreutils Viewer（**cv**）是一个简单的程序，它可以用于显示任何核心组件命令（如：cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting）的进度。它使用文件描述信息来确定一个命令的进度，比如cp命令。**cv**之美在于，它能够和其它Linux命令一起使用，比如你所知道的watch以及I/O重定向命令。这样，你就可以在脚本中使用，或者你能想到的所有方式，别让你的想象力束缚住你。

### 安装

你可以从cv的[github仓库那儿](http://github.com/Xfennec/cv)下载所需的源文件。把zip文件下载下来后，将它解压缩，然后进入到解压后的文件夹。

该程序需要**ncurses library**。如果你已经在你的Linux系统中安装了ncurses，那么cv的安装过程对你而言就是那么的轻松写意。

通过以下两个简单步骤来进行编译和安装吧。

```
$ make
$ sudo make install

```

### 运行cv

要运行cv，只需要想其它程序一样，在命令行输入此命令即可。如果你没有执行make install，而选择从当前目录中去运行，那么你可以运行以下命令：

```
$ ./cv

```

否则，就运行以下命令吧。

```
$ cv

```

如果没有核心组件命令在运行，那么cv程序会退出，并告诉你：没有核心组件命令在运行。

要有效使用该程序，请在你系统上运行某个核心组件程序。在本例中，我们将使用**cp**命令。

当拷贝一个打文件时，你就可以看到当前进度了，以百分比显示。

### 添加选项到 cv

你也可以添加几个选项到cv命令，就像其它命令一样。一个有用的选项是让你了解到拷贝或移动大文件时的预计剩余时间。

添加**-w**选项，它就会帮你显示预计的剩余时间。

```
$ cv -w

```

试着添加更多的命令选项吧。像下面这样添加其它选项：

```
$ cv -wq

```

### cv 和 watch 命令

watch是一个用于周期性运行程序并显示输出结果的程序。有时候，你可能想要持续看看命令运行状况而不想将 cv 的结果存储到日志文件中。在这种情况下，watch就会派上用场了，它可以和cv一起使用。

```
$ watch cv -qw

```

该命令将会显示所有运行着的核心组件命令的实例。它也会显示进度和预计完成时间。

### 在日志文件中查看输出结果

正如其所承诺的那样，你可以使用cv来重定向它的输出结果到一个日志文件。这功能在命令运行太快而看不到任何有意义的内容时特别有用。

要在日志文件中查看进度，你仅仅需要重定向输出结果，就像下面这样。

```
$ cv -w >> log.txt

```

要查看该命令的输出结果，请用你喜爱的文本编辑器打开日志文件，也可以用cat命令，就像下面这样：

```
$ cat log.txt

```

### 获得帮助

如果你在任何地方受到阻碍，你总是可以通过查阅手册页或使用help选项来获取帮助信息。 要获取帮助信息，可以使用带**-h**选项的cv命令。

```
$ cv -h

```

如果需要更多详细信息，那么手册页是个很不错的地方。

```
$ man cv

```

但是，要获取上述手册页，你必须执行make install来安装cv。

耶！现在，你的Linux工具箱中又多了个伟大的工具。 你学会么？亲自去试试吧~

---

via: <http://linoxide.com/linux-command/tool-show-command-progress/>

作者：[Allan Mbugua](http://linoxide.com/author/allan/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

Summary: Linux内核是一名了不起的马戏表演者，它在进程和系统资源间小心地玩着杂耍，并保持系统的能够正常运转。 同时，内核也很公正：它将资源公平地分配给各个进程。 但是，如果你需要给一个重要进程提高优先级时，该怎么做呢？ 或者是，如何降低一个进程的优先级？ 又或者，如何限制一组进程所使用的资源呢？ 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同的，因此Linux内核会公平地进行调度。 如果想让一个CPU密集型的进程运行在较低优先级，那么你就得事先配置好调度器。 下面介绍3种控制进程运行时间的方法：

@我的印象笔记

@我的印象笔记

//@童剑://@cwinux:转发微博

好文 //@kewin_文超:转发微博

Linux中国:【使用 nice、cpulimit 和 cgroups 限制 ......】

@我的印象笔记

//@柳烟堆雪:好文 //@kewin_文超:转发微博

@有道云笔记收藏

@我的印象笔记

@我的印象笔记

好文

很有用，Mark。

不过，有些许瑕疵：

1. “并保持系统的能够正常运转” 这句话不太通顺；

2. ”下来介绍一下nice命令的使用方法“ 这句感觉应该是 “下面介绍一下nice命令的使用方法”?

//@柳烟堆雪:好文 //@kewin_文超:转发微博

@我的印象笔记

@mywiz @北邮黄兵

谢谢您的意见，马上去修正。

好东西，收藏

@我的印象笔记  //@唐僧_huangliang://@yangdigital: //@柳烟堆雪:好文 //@kewin_文超:转发微博

@有道云笔记收藏

# 使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

Linux内核是一名了不起的马戏表演者，它在进程和系统资源间小心地玩着杂耍，并保持系统的正常运转。 同时，内核也很公正：它将资源公平地分配给各个进程。

但是，如果你需要给一个重要进程提高优先级时，该怎么做呢？ 或者是，如何降低一个进程的优先级？ 又或者，如何限制一组进程所使用的资源呢？

**答案是需要由用户来为内核指定进程的优先级**

大部分进程启动时的优先级是相同的，因此Linux内核会公平地进行调度。 如果想让一个CPU密集型的进程运行在较低优先级，那么你就得事先配置好调度器。

下面介绍3种控制进程运行时间的方法：

* 使用 nice 命令手动降低任务的优先级。
* 使用 cpulimit 命令不断的暂停进程，以控制进程所占用处理能力不超过特定限制。
* 使用linux内建的**control groups（控制组）**功能，它提供了限制进程资源消耗的机制。

我们来看一下这3个工具的工作原理和各自的优缺点。

### 模拟高cpu占用率

在分析这3种技术前，我们要先安装一个工具来模拟高CPU占用率的场景。我们会用到CentOS作为测试系统，并使用[Mathomatic toolkit](http://www.mathomatic.org/)中的质数生成器来模拟CPU负载。

很不幸，在CentOS上这个工具没有预编译好的版本，所以必须要从源码进行安装。先从 <http://mathomatic.orgserve.de/mathomatic-16.0.5.tar.bz2> 这个链接下载源码包并解压。然后进入 **mathomatic-16.0.5/primes** 文件夹，运行 **make** 和 **sudo make install** 进行编译和安装。这样，就把 **matho-primes** 程序安装到了 **/usr/local/bin** 目录中。

接下来，通过命令行运行：

```
/usr/local/bin/matho-primes 0 9999999999 > /dev/null &

```

程序运行后，将输出从0到9999999999之间的质数。因为我们并不需要这些输出结果，直接将输出重定向到/dev/null就好。

现在，使用top命令就可以看到matho-primes进程榨干了你所有的cpu资源。

好了，接下来（按q键）退出 top 并杀掉 matho-primes 进程（使用 fg 命令将进程切换到前台，再按 CTRL+C）

### nice命令

下面介绍一下nice命令的使用方法，nice命令可以修改进程的优先级，这样就可以让进程运行得不那么频繁。 **这个功能在运行cpu密集型的后台进程或批处理作业时尤为有用。** nice值的取值范围是[-20,19],-20表示最高优先级，而19表示最低优先级。 Linux进程的默认nice值为0。使用nice命令（不带任何参数时）可以将进程的nice值设置为10。这样调度器就会将此进程视为较低优先级的进程，从而减少cpu资源的分配。

下面来看一个例子，我们同时运行两个 **matho-primes** 进程，一个使用nice命令来启动运行，而另一个正常启动运行：

```
nice matho-primes 0 9999999999 > /dev/null &
matho-primes 0 9999999999 > /dev/null &

```

再运行top命令。

看到没，正常运行的进程（nice值为0）获得了更多的cpu运行时间，相反的，用nice命令运行的进程占用的cpu时间会较少（nice值为10）。

在实际使用中，如果你要运行一个CPU密集型的程序，那么最好用nice命令来启动它，这样就可以保证其他进程获得更高的优先级。 也就是说，即使你的服务器或者台式机在重载的情况下，也可以快速响应。

nice 还有一个关联命令叫做 renice，它可以在运行时调整进程的 nice 值。使用 renice 命令时，要先找出进程的 PID。下面是一个例子：

```
renice +10 1234

```

其中，1234是进程的 PID。

测试完 **nice** 和 **renice** 命令后，记得要将 **matho-primes** 进程全部杀掉。

### cpulimit命令

接下来介绍 **cpulimit** 命令的用法。 **cpulimit** 命令的工作原理是为进程预设一个 cpu 占用率门限，并实时监控进程是否超出此门限，若超出则让该进程暂停运行一段时间。cpulimit 使用 SIGSTOP 和 SIGCONT 这两个信号来控制进程。它不会修改进程的 nice 值，而是通过监控进程的 cpu 占用率来做出动态调整。

cpulimit 的优势是可以控制进程的cpu使用率的上限值。但与 nice 相比也有缺点，那就是即使 cpu 是空闲的，进程也不能完全使用整个 cpu 资源。

在 CentOS 上，可以用下面的方法来安装它：

```
wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

```

上面的命令行，会先从从 GitHub 上将源码下载到本地，然后再解压、编译、并安装到 /usr/bin 目录下。

cpulimit 的使用方式和 nice 命令类似，但是需要用户使用 **-l** 选项显式地定义进程的 cpu 使用率上限值。举例说明：

```
cpulimit -l 50 matho-primes 0 9999999999 > /dev/null &

```

从上面的例子可以看出 matho-primes 只使用了50%的 cpu 资源，剩余的 cpu 时间都在 idle。

cpulimit 还可以在运行时对进程进行动态限制，使用 **-p** 选项来指定进程的 PID，下面是一个实例：

```
cpulimit -l 50 -p 1234

```

其中，1234是进程的 PID。

### cgroups 命令集

最后介绍，功能最为强大的控制组（cgroups）的用法。cgroups 是 Linux 内核提供的一种机制，利用它可以指定一组进程的资源分配。 具体来说，使用 cgroups，用户能够限定一组进程的 cpu 占用率、系统内存消耗、网络带宽，以及这几种资源的组合。

对比nice和cpulimit，**cgroups 的优势**在于它可以控制一组进程，不像前者仅能控制单进程。同时，nice 和 cpulimit 只能限制 cpu 使用率，而 cgroups 则可以限制其他进程资源的使用。

对 cgroups 善加利用就可以控制好整个子系统的资源消耗。就拿 CoreOS 作为例子，这是一个专为大规模服务器部署而设计的最简化的 Linux 发行版本，它的 upgrade 进程就是使用 cgroups 来管控。这样，系统在下载和安装升级版本时也不会影响到系统的性能。

下面做一下演示，我们将创建两个控制组（cgroups），并对其分配不同的 cpu 资源。这两个控制组分别命名为“cpulimited”和“lesscpulimited”。

使用 cgcreate 命令来创建控制组，如下所示：

```
sudo cgcreate -g cpu:/cpulimited
sudo cgcreate -g cpu:/lesscpulimited

```

其中“-g cpu”选项用于设定 cpu 的使用上限。除 cpu 外，cgroups 还提供 cpuset、memory、blkio 等控制器。cpuset 控制器与 cpu 控制器的不同在于，cpu 控制器只能限制一个 cpu 核的使用率，而 cpuset 可以控制多个 cpu 核。

cpu 控制器中的 cpu.shares 属性用于控制 cpu 使用率。它的默认值是 1024，我们将 lesscpulimited 控制组的 cpu.shares 设为1024（默认值），而 cpulimited 设为512，配置后内核就会按照2：1的比例为这两个控制组分配资源。

要设置 cpulimited 组的 cpu.shares 为 512，输入以下命令：

```
sudo cgset -r cpu.shares=512 cpulimited

```

使用 cgexec 命令来启动控制组的运行，为了测试这两个控制组，我们先用cpulimited 控制组来启动 matho-primes 进程，命令行如下：

```
sudo cgexec -g cpu:cpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null &

```

打开 top 可以看到，matho-primes 进程占用了所有的 cpu 资源。

因为只有一个进程在系统中运行，不管将其放到哪个控制组中启动，它都会尽可能多的使用cpu资源。cpu 资源限制只有在两个进程争夺cpu资源时才会生效。

那么，现在我们就启动第二个 matho-primes 进程，这一次我们在 lesscpulimited 控制组中来启动它：

```
sudo cgexec -g cpu:lesscpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null &

```

再打开 top 就可以看到，cpu.shares 值大的控制组会得到更多的 cpu 运行时间。

现在，我们再在 cpulimited 控制组中增加一个 matho-primes 进程：

```
sudo cgexec -g cpu:cpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null &

```

看到没，两个控制组的 cpu 的占用率比例仍然为2：1。其中，cpulimited 控制组中的两个 matho-primes 进程获得的cpu 时间基本相当，而另一组中的 matho-primes 进程显然获得了更多的运行时间。

更多的使用方法，可以在 Red Hat 上查看详细的 cgroups 使用[说明](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html)。（当然CentOS 7也有）

### 使用Scout来监控cpu占用率

监控cpu占用率最为简单的方法是什么？[Scout](https://scoutapp.com/) 工具能够监控能够自动监控进程的cpu使用率和内存使用情况。

[Scout](https://scoutapp.com/)的触发器（trigger）功能还可以设定 cpu 和内存的使用门限，超出门限时会自动产生报警。

从这里可以获取 [Scout](https://scoutapp.com/) 的试用版。

### 总结

计算机的系统资源是非常宝贵的。上面介绍的这3个工具能够帮助大家有效地管理系统资源，特别是cpu资源：

* **nice**可以一次性调整进程的优先级。
* **cpulimit**在运行cpu密集型任务且要保持系统的响应性时会很有用。
* **cgroups**是资源管理的瑞士军刀，同时在使用上也很灵活。

---

via: <http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups>

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

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


10个重要的Linux ps命令实战

Summary: Linux作为Unix的衍生操作系统，Linux内建有查看当前进程的工具ps。这个工具能在命令行中使用。  PS 命令是什么 查看它的man手册可以看到，ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态，可以使用top命令。 ps命令支持三种使用的语法格式  UNIX 风格，选项可以组合在一起，并且选项前必须有-连字符 BSD 风格，选项可以组合在一起，但是选项前不能有-连字符 GNU 风格的长选项，选项前有两个-连字符  我们能够混用这几种风格，但是可能会发生冲突。本文使用 UNIX 风格的ps命令。

@有道云笔记收藏

学习。

ps这种组合几种选项风格的命令真是吐血

@我的印象笔记

不错，有用

非常经典。

watch -n 1 ‘ps -aux --sort -pmem, -pcpu’ 好像,后面有空格会报错没有空格正常了

# 10个重要的Linux ps命令实战

Linux作为Unix的衍生操作系统，Linux内建有查看当前进程的工具ps。这个工具能在命令行中使用。

### PS 命令是什么

查看它的man手册可以看到，ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态，可以使用top命令。

ps命令支持三种使用的语法格式

1. UNIX 风格，选项可以组合在一起，并且选项前必须有“-”连字符
2. BSD 风格，选项可以组合在一起，但是选项前不能有“-”连字符
3. GNU 风格的长选项，选项前有两个“-”连字符

我们能够混用这几种风格，但是可能会发生冲突。本文使用 UNIX 风格的ps命令。这里有在日常生活中使用较多的ps命令的例子。

### 1. 不加参数执行ps命令

这是一个基本的 **ps** 使用。在控制台中执行这个命令并查看结果。

结果默认会显示4列信息。

* PID: 运行着的命令(CMD)的进程编号
* TTY: 命令所运行的位置（终端）
* TIME: 运行着的该命令所占用的CPU处理时间
* CMD: 该进程所运行的命令

这些信息在显示时未排序。

### 2. 显示所有当前进程

使用 **-a** 参数。**-a 代表 all**。同时加上x参数会显示没有控制终端的进程。

```
$ ps -ax

```

这个命令的结果或许会很长。为了便于查看，可以结合less命令和管道来使用。

```
$ ps -ax | less

```

### 3. 根据用户过滤进程

在需要查看特定用户进程的情况下，我们可以使用 **-u** 参数。比如我们要查看用户'pungki'的进程，可以通过下面的命令：

```
$ ps -u pungki

```

### 4. 通过cpu和内存使用来过滤进程

也许你希望把结果按照 CPU 或者内存用量来筛选，这样你就找到哪个进程占用了你的资源。要做到这一点，我们可以使用 **aux 参数**，来显示全面的信息:

```
$ ps -aux | less

```

当结果很长时，我们可以使用管道和less命令来筛选。

默认的结果集是未排好序的。可以通过 **--sort**命令来排序。

根据 **CPU 使用**来升序排序

```
$ ps -aux --sort -pcpu | less

```

根据 **内存使用** 来升序排序

```
$ ps -aux --sort -pmem | less

```

我们也可以将它们合并到一个命令，并通过管道显示前10个结果：

```
$ ps -aux --sort -pcpu,+pmem | head -n 10

```

### 5. 通过进程名和PID过滤

使用 **-C 参数**，后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息，就可以使用下面的命令：

```
$ ps -C getty

```

如果想要看到更多的细节，我们可以使用-f参数来查看格式化的信息列表：

```
$ ps -f -C getty

```

### 6. 根据线程来过滤进程

如果我们想知道特定进程的线程，可以使用**-L 参数**，后面加上特定的PID。

```
$ ps -L 1213

```

### 7. 树形显示进程

有时候我们希望以树形结构显示进程，可以使用 **-axjf** 参数。

```
$ps -axjf

```

或者可以使用另一个命令。

```
$ pstree

```

### 8. 显示安全信息

如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

```
$ ps -eo pid,user,args

```

**参数 -e** 显示所有进程信息，**-o 参数**控制输出。**Pid**,**User 和 Args**参数显示**PID，运行应用的用户**和**该应用**。

能够与**-e 参数** 一起使用的关键字是**args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start**。

### 9. 格式化输出root用户（真实的或有效的UID）创建的进程

系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时，可以通过下面的命令:

```
$ ps -U root -u root u

```

**-U 参数**按真实用户ID(RUID)筛选进程，它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

**-u** 参数用来筛选有效用户ID（EUID）。

最后的**u**参数用来决定以针对用户的格式输出，由**User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND**这几列组成。

这里有上面的命令的输出结果：

### 10. 使用PS实时监控进程状态

ps 命令会显示你系统当前的进程状态，但是这个结果是静态的。

当有一种情况，我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程，并且我们希望结果能够每秒刷新一次。为此，我们可以**将ps命令和watch命令结合起来**。

```
$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’

```

如果输出太长，我们也可以限制它，比如前20条，我们可以使用**head**命令来做到。

```
$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’

```

这里的动态查看并不像top或者htop命令一样。**但是使用ps的好处是**你能够定义显示的字段，你能够选择你想查看的字段。

举个例子，**如果你只需要看名为'pungki'用户的信息**，你可以使用下面的命令：

```
$ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’

```

### 结论

你也许每天都会使用ps命令来监控你的Linux系统。但是事实上，你可以通过ps命令的参数来生成各种你需要的报表。

ps命令的另一个优势是ps是各种 Linux系统都默认安装的，因此你只要用就行了。

不要忘了通过 man ps来查看更多的参数。（LCTT 译注：由于 ps 命令古老而重要，所以它在不同的 UNIX、BSD、Linux 等系统中的参数不尽相同，因此如果你用的不是 Linux 系统，请查阅你的文档了解具体可用的参数。）

---

via: <http://linoxide.com/how-tos/linux-ps-command-examples/>

作者：[Pungki Arianto](http://linoxide.com/author/pungki/) 译者：[johnhoow](https://github.com/johnhoow) 校对：[wxy](https://github.com/wxy)

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


《一句话证明你懂linux》的有趣评论

Summary: 上周，@Linux中国 和 @图灵教育 发起了一个活动：一句话证明你懂linux，引来了网友的踊跃参加。网友的智慧是无穷的，我们将其中的一些有趣的回答撷取出来分享给大家。 请关注稍后的中奖名单，欢迎继续吐槽~

有一次我装了 大黄蜂 …… 后来，说多了都是泪……

有个很多人不知道的命令 sl 小编可以试试看 在centos系统下

alias emacs="vim"

最好用的命令 sudo rm -rf / [抱抱]

第一次装的是ubuntu 9.04 server，然后觉得我装失败了，或者说这货就这模样？

alias sudo='Fucking' Fucking reboot//@泰德子_Suji: …rm -rf  //@Aji妹控開源哥_lisp:alias emacs="vim"

我这里有 支持 typecover的 linux 内核 ...3.11.10 虽然我不懂linux,但这东西估计绝版了 //@Judgement_Engineer:rm -rf /usr //@游荡的坎德人:有一次我装了 大黄蜂 …… 后来，说多了都是泪……

rm -rf /

回复@屎捞汉子:苏菲吗

Reply@屎捞汉子:苏菲吗//@屎捞汉子:我这里有 支持 typecover的 linux 内核 ...3.11.10 虽然我不懂linux,但这东西估计绝版了

李那克死

回复@Judgement_Engineer:对的，虽然说是只支持一代的typecover但二代也支持哦//@Judgement_Engineer:回复@屎捞汉子:苏菲吗

原来是说多了都是泪的综合版啊～[羞嗒嗒]

sl，相当拉轰的一条命令。

sudo su

whoami

简直不能再给力[鼓掌] 高手在网上~

在chrome上要装vimium才能用得开心

我竟然不知道那句话能证明我懂linux 。。

vi

我竟无言以对

习惯nano

这个不错呀[赞]

一个法力无边的企鹅

猫也能看文件的

哈哈！好棒！

rm -rf /home 谁用谁知道//@泰德子_Suji: …rm -rf //@Aji妹控開源哥_lisp:alias emacs="vim"

rm -rf /

RedHat

pwd

sudo rm -rf /

→_→//@Linux中国: →_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

ls       [嘻嘻][嘻嘻][嘻嘻]

前面不用 sudo 吗 //@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

@mywiz

来自 - 湖北武汉华中科技大学 的 Chrome/Windows 用户

太精炼了不错了，我要好好学习，步入大神之门

普通用户打这个还有什么意义……//@Linux中国: →_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

亲测可以//@Linux中国: →_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

[最右]高级黑//@Linux中国: →_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

export ORACLE_SID=orcl//@泰德子_Suji: …rm -rf //@Aji妹控開源哥_lisp:alias emacs="vim"

简直超好用[doge]//@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

Linux中国:【《一句话证明你懂linux》的有趣评论 | 上周，๑Linu......】

不懂

算了,我准备重装系统去.........//@Linux中国: →_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

lslslslslslslslslsl…… //@Linux中国:→_→ //@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~ //@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /* //@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

其实很反感这样的话，用Linux的自然懂，但是万一有小白真这么做了，大概这辈子都不会用Linux了吧//@kiseopt: 简直超好用[doge]//@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网

sudo rm -rf /  //@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

左手小拇指放在Tab上。

行走linux世界，只需一条命令：rm -rf /*

亲自实践，太棒了！//@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

竟然没有我如此强大的 sudo !! 。 这两个!! 不是语气助词的！！！ 而是连在一起的命令！！ //@Linux中国_笑语彦然:转发微博

这个要出大事的[闭嘴]//@Linux中国: →_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

yum

init 0

Kill -9 -1 //@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

sudo

[哈哈][哈哈] //@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

[doge]

rm -rf /

→_→//@1031猫: 很好用，不过记得前面要sudo su -[太开心]//@Linux中国:→_→//@攻城氏:亲自实践，右边的命令真是太好用啦！感谢~//@随机: 将普通用户提升为管理员的黑魔法命令 rm -rf /*//@图灵教育: 简直不能再给力[鼓掌] 高手在网上~

这条命令我真的执行过，不过好像不带*，当时我们的培训师都无语了，先告诉我怎么在网络上安装教学用系统，然后看着我执行了这个命令，结果发现几个虚拟目录没法删，其余的都删掉了。然后培训师说，我也是第一次看见有人执行这个命令……

sudo -i

我97年时，在 Solaris 上，本来是要删除一个备份 rm /etc/passwd.1 ，结果，手残，敲键盘敲 high 了（sun 的机械键盘舒服呀），在“passwd”和“.1”之间多敲了一个空格，变成了rm /etc/passwd .1 ，然后我的 passwd 就没了——亏得没重启并有备份。。。

后来，在一个 linux 上，生产服务器，也是忘记自己在哪个目录了（以为是在目录里面，其实是在根下），就 rm -rf * 。。。。结果，我说怎么半天还没删除完——醒过来味赶快 CTRL-C，所有靠前字母的，/bin、/home、/root什么的都没了，/usr和/var还没来得及删除。。。。

@Jason_YJS 获得“最有计谋奖”《Linux程序设计（第4版）》

@小晨主 获得“最有创意奖” 《Linux Shell脚本编程入门》

@revolver_徐 获得“最具幽默奖”《跟阿铭学Linux》

@hunterwan 获得“最炫命令奖”《Linux就是这个范儿》

从lfs开始编译一个linux系统

ifconfig,注意是if ,哈哈哈哈哈哈。

\rm -rf /

人名都能写错  不是叫 linus 嘛 你们都在说什么啊

文本皆一切。

# 《一句话证明你懂linux》的有趣评论

上周，[@Linux中国](http://weibo.com/n/Linux%E4%B8%AD%E5%9B%BD?from=feed&loc=at) 和 [@图灵教育](http://weibo.com/n/%E5%9B%BE%E7%81%B5%E6%95%99%E8%82%B2?from=feed&loc=at) 发起了一个活动：“[一句话证明你懂linux](http://weibo.com/1772191555/C0s1qqeYh)”，引来了网友的踊跃参加。网友的智慧是无穷的，我们将其中的一些有趣的回答撷取出来分享给大家。

<img src="content_image/album_201501_26_114332oug6elcbqh8e9are.gif" alt="" title="">

这里有秀命令的，果然不出所料，“rm -rf /”和 shell 炸弹是一定会出现的：

* @doublemark：cd mkdir rm 小白也能证明！
* @joeren1981：cat /etc/passwd | cut -d ':' -f 1 >>/root/userlist
* @love\_daisy\_love：mkdir ~/tmp; sudo fdisk -l | grep ^\/dev | grep -v swap | awk '{print $1}' | xargs -i sh -c "sudo mount {} ~/tmp; sudo rm -rf ~/tmp/Windows; sudo umount tmp"
* @进击的Manu\_coder：echo "tvir zr gurfr obbxf, gunax lbh" | tr [n-za-m] [a-z]
* @赍思潜行：:w !sudo tee % 偷凤转龙的vi命令
* @Seamile：for i in $'\111' $'\114\157\166\145' $'\114\151\156\165\170';do c=$((($RANDOM)%6+31));printf '\033[0;%sm%s \033[0m' $c $i;done
* @M\_四月天：ruby -e 'require "date"; puts DateTime.now.cweek' 你们知道今天是第几周么？[嘻嘻]
* @灰色的小翅膀飞啊飞：mkdir /tmp/exploit ln /bin/ping /tmp/exploit/target exec 999< /tmp/exploit/target rm -rf /tmp/exploit/ echo 'void \_\_attribute\_\_((constructor)) init(){setuid(0);system('/bin/bash');}' | gcc -w -fPIC -shared -o /tmp/exploit -xc - LD\_AUDIT='\$ORIGIN' ～～～got r00t...
* @hunterwan：kexec -l /mnt/$DEV/boot/uImage --append="console=ttyS0,38400 earlyprintk=ttyS0 root=/dev/ram0 rw initrc=myrc" --ramdisk=/mnt/$DEV/myramdisk.gz

也有炫知识的，我只能说，炫的好！

* @norvid：usr目录不是用户目录，而是 Unix System Resource。[嘻嘻]
* @kunis：用vim编写Linux C程序，并用Makefile构建它们，最后在Linux Shell上执行它们，Linux 就是这个范儿。
* @鱿蚊菟鸶：[喵喵] 被企鹅咬过的那个人说过，专利纠纷是开放源代码最大威胁。
* @一生中最爱6666：一切都是文件，每个软件都有特定的用途。
* @OoO牛奶咖啡：echo 3 > /proc/sys/vm/drop\_caches
* @chunk9：你知道吗？ls还有个–Z选项，那一天我打开了新世界的大门…
* @CodeMu：即使是删空目录，我也不用rmdir
* @吹尽狂沙的地盘： 把书给我吧，这个真没法fork（）一个出来！要不给我ln一个也行？
* @mirage\_hl：init是所有进程的爹[哈哈]
* @木木月yjq： “老公我想买个包包”，“老婆家里已经有很多了”，“我就要这个，sudo 买”，“好的，老大”。
* @骑车去首都：我得用less来看这本书啊@图灵教育 ，不太喜欢用more
* @爱开源魅影：我用grep在右面整理成的文章里找我的名字
* @ToB蓝波湾：每次关闭文件之前，我都习惯性的按一下ESC
* @mengalong：当年就知道a.out
* @比尔盖子V:新版内核已经没有讨厌的 BKL 了

他们说的你也知道么？

当然，还有挖坑的，哈哈——太坏了——大家可别上当：

* @kosmos可视模式：rm -rf / --no-preserve-root [doge]
* @葱花酱：dd if=/iso/file/url of=/dev/sda [泪]手误了[泪]
而 @Junnplus *就善良多了*：sudo dd if=/dev/sda1 of=/dev/null
* @orz卑鄙的我：发现个快捷方式，mksf.ext3 /dev/sda ，可以清除系统垃圾
* @zlidentify：:(){ :|:& };:[xkl转圈]
*放炸弹的也不止一个*
* @爱说小品的方格买提：mv /home /dev/null
* @天舞飞星：dd if=/dev/sr0 of=~/centos7.iso
* @eve\_ouyang：# dd if=/dev/zero of=/dev/sd{a..z} //忘记过去
* @New\_RoRer：sudo rm -rf /一条无比强大的命令，谁用谁知道～

上面这些都是坏银，大家可不要相信他们的命令~

跟小编套磁的，话说，小编该怎么办？

* @跳跳潮妈：Linux是个内核支持小编好活动，如有幸中奖会认真晒奖，积极支持小编工作，协助小编宣传扩散,支持你们！！
* @从春光：开源万岁，学习第一，求求你给我个机会。。。。。。。。。[给力][给力][给力]
* @嗨\_请叫我李小姐：送我送我，正在准备RHCE，作为妹子一枚学linux得鼓励一下是不是？

有些人则觉得求人不如求己，自己动手，丰衣足食：

* @于鸿儒：sudo ./configure --prefix=/post/to/my/home --version=Linux就是这个范
* @Jason\_YJS：echo "Just For Fun" if [ 转发人 -eq 我 ] then 送我《Linux程序设计》 fi
* @一堆好人卡：./configure --winner=me && make && sudo make install
* @higrase：scp $USER@${Linux中国}:$BOOKPATH/Linux就是这个范儿
* @ranyxie：不要怪我太贪心：chown -R 我:我 /Linux中国
* @s7eph4ni3：#echo "中奖"
* @alexle85：sudo apt-get "Linux shell 脚本编程入门"

当然，吐槽的一定是最有趣的：

* @蓝水军梦：新的MacBookAir电源键换位置了，估计大批Vimer会气死[偷乐]
*不懂这条的，请结合下条看*
* @ToB蓝波湾：每次关闭文件之前，我都习惯性的按一下ESC
* @happy的沉思者：Read the fucking source code.这就是Linux的精髓，linus原话。
* @DarkParadises：A:Shift+F3好方便哦.....B:逗比，打个汉子给我看。A:...
* @alive欣：NTFS是整理控，时不时碎片整理一下最好，EXT4自以为很聪明，碎片还是有的。
* @薄荷开源网: kde是华丽的，gnome是激进的
* @小小泛泛：一个企鹅为什么有这么多名字啊[怒]
* @隆隆小宝马：微软面试官问：你是怎么知道微软的？ 答曰：在Linux社区看到的。
* @两块钱的马赛克：dd if=/dev/zero of =/dev/sda，我愿为你格式化自己
* @hop\_ping：Linux是用来玩的
* @xu3stones：elf，后缀名是神马？
* @呦呦斋：一看评论果然有写rm -rf /\*的。
*小编也心有戚戚焉*
* @大米虫Gone：我们是男人，我们要坚挺强硬。----BadGuy
* @宋万伟\_song：自从有了大便，腰不酸了，腿不疼了，上楼也不费劲了[嘻嘻]
* @Edmund\_Dantes：sudo chmod 777 /\* 嘻嘻，话说我不止一次这么干过，linux完整良好的权限管理在当初刚开始学习时觉得无比麻烦，现在觉得自己那时候好傻逼[挖鼻屎]

还有来说幽默笑话的：

* @小晨主：给我一张过去的cd
* @Jeremy-n\_n-：记不住命令找man[doge]
* @revolver\_徐：给我吧，我家连窗户都没有。
*这条得到了大家一致的“最右”*
* @XING\_Lei：刚刚还在和一个叫Linus Torvalds 的男人(man)聊天...
* @炎雪雨：bash对make说：“叫gcc来将hello.c翻译下，我不懂”
* @刹时\_恍惚：mount未来，. umount过去！！
* @风x铃：老师：那同学请你把本班的男同学和女同学按性质不同分个类~~那同学：好的，老师！$ ls -lha~(老师~拉恨啊！)~然后这同学直接走向讲台说一了句：男女配对现在开始~

这些任性的，真的好吗？

* @长弓之健：从来都是在终端里看片~@Linux中国
* @Yoetsu杨小悦：一切皆文件 不要书 不关注 任性[笑cry][笑cry]
* @TinyOS开发者-ytc：谢谢，这些书都不需要了，还是shutdown -h now吧[拜拜]
* @李庆年：如何正确的吵架，vi是世界上最好的编辑器。[喵喵][喵喵][喵喵]
* @2gua:Mint大法好！
* @如若仅此：《linux就这个范儿》 这本书我有了，可以考虑其它三本，谢谢合作！
* @Silly\_Hater：Linux so cool 。开源推动了它的发展。服务器是Linux的天下。而Linux是我的天下

居然还发现了老朋友？哈哈哈，居然还有这么多认识我 wxy 的啊——你说我是照顾呢，还是不照顾啊:>：

* @南非蜘蛛：和wxy一起混过chinaunix论坛
* @刘诗蓓：和wxy的把反垃圾邮件联盟环境迁移到我们这里
* @李永庆520：和wxy一起混过chinaunix论坛

跟着这些“老”朋友的，一些资深人士们也跑出来凑热闹了，话说你们这些老人们够了~~

* @許德華Mr：从事开源N年！！
* @陆文举：Linuxtone论坛元老，51CTO早期博主 [笑cry]
* @davistar：04年以前eden的版主，我应该是最早玩gentoo那拨人吧
* @贤才飞也：混Chinaunix论坛好多年，看Linuxeden好多年的飘过

居然还有做广告的——广告就不列了——直接举报

最后，这里列出的油菜人太多了，可不能人人都中奖，不过中奖的肯定是其中之四（随机抽取哦），等待一会儿我们的小编揭晓吧。


如何在Linux的命令行中使用Evernote

Summary: 这周让我们继续学习如何使用Linux命令行管理和组织信息。在命令行中管理你的个人花费后，我建议你在命令行中管理你的笔记，特别是当你用Evernote记录笔记时。要是你从来没有听说过它，Evernote 专门有一个用户友好的在线服务可以在不同的设备间同步笔记。除了提供花哨的基于Web的API，Evernote还发布了在Windows、Mac、Android和iOS上的客户端。然而至今还没有官方的Linux客户端可用。老实说在众多的非官方Linux客户端中，有一个程序一出现就吸引了所有的命令行爱好者，它就是Geeknote。  Geeknote 的安装 Geeknote是使用Python开发的。因

@我的印象笔记

这是命令行强迫症的兄弟的节奏啊

@我的印象笔记

@我的印象笔记

Linux[笑cry][笑cry][笑cry]

批量处理？

@我的印象笔记

@我的印象笔记

Repost

@我的印象笔记

这看不见图的evernote有啥用啊…

这可以的 @漆黑之牙_leon

真蛋疼。。

mark

Linux有不少好软件，但是就不是中文的。有多少人知道是用来干嘛的

这里面有一个问题就是，在国内，印象笔记的账号和国际版的evernote是不通用的，用它的这个程序我们是无法用我们的印象笔记账号来登录的。嗯，还有一个疑问就是，用命令行记笔记的话也许是个好想法，不过看文中的设计不仅没有简化操作而且仿佛把简单的事情复杂化咯，大家有木有这种感觉哇？或者文章的作者需要补充一个视频来给我们演示一下在实际应用场景下，这么用是否真的炫酷和方便？

怎么看起来还不如everpad

情怀

好东西//@低调内敛的水邪: 这可以的 @漆黑之牙_leon

其实个人觉得，这就是一种命令行偏执狂，或者是只能使用命令行的情况下。

File "setup.py", line 10, in <module> from setuptools import setup ImportError: No module named setuptools //Red Hat 6.5

geeknote的使用

不错,看着很给力的样子,下去试试去!

不过提供了一个不错的接口，也许可以从这上面再用python做一个漂亮的界面

这种所谓的极客是一种病，纯粹是浪费精力。。<br />
我还是用我的wiznote或者用nixnote也行啊。

# 如何在Linux的命令行中使用Evernote

这周让我们继续学习如何使用Linux命令行管理和组织信息。在命令行中管理[你的个人花费](http://xmodulo.com/manage-personal-expenses-command-line.html)后，我建议你在命令行中管理你的笔记，特别是当你用Evernote记录笔记时。要是你从来没有听说过它，[Evernote](https://evernote.com/) 专门有一个用户友好的在线服务可以在不同的设备间同步笔记。除了提供花哨的基于Web的API，Evernote还发布了在Windows、Mac、[Android](http://xmodulo.com/go/android_tutorial)和iOS上的客户端。然而至今还没有官方的Linux客户端可用。老实说在众多的非官方Linux客户端中，有一个程序一出现就吸引了所有的命令行爱好者，它就是[Geeknote](http://www.geeknote.me/)。

### Geeknote 的安装

Geeknote是使用Python开发的。因此，在开始之前请确保你已经安装了Python（最好是2.7的版本）和git。

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

```
$ sudo apt-get install python2.7 git python-setuptools
$ git clone git://github.com/VitaliyRodnenko/geeknote.git
$ cd geeknote
$ sudo python2.7 setup.py install

```

#### 在 Fedora 或者 CentOS/RHEL 中

```
$ sudo yum install git
$ git clone git://github.com/VitaliyRodnenko/geeknote.git
$ cd geeknote
$ sudo python setup.py install

```

#### 在 Arch Linux 中

对于ArchLinux用户，只需要使用[AUR](https://aur.archlinux.org/packages/geeknote-git/)中的包。

### Geeknote 的基本使用

一旦你安装完Geeknote后，你应该将Geeknote与你的Evernote账号关联：

```
$ geeknote login

```

接着输入你的email地址、密码和你的二步验证码。如果你没有后者的话，忽略它并按下回车。

显然你需要一个Evernote账号来完成这些，因此先去注册吧。

完成这些之后，你就可以开始创建新的笔记并编辑它们了。

不过首先，你还需要设置你最喜欢的文本编辑器：

```
$ geeknote settings --editor vim

```

然后，一般创建一条新笔记的语法是：

```
$ geeknote create --title [title of the new note] (--content [content] --tags [comma-separated tags] --notebook [comma-separated notebooks])

```

上面的命令中，只有‘title’是必须的，它会与一条新笔记的标题相关联。其他的标注可以为笔记添加额外的元数据：添加标签来与你的笔记关联、指定放在那个笔记本里。同样，如果你的标题或者内容中有空格，不要忘记将它们放在引号中。

比如:

```
$ geeknote create --title "My note" --content "This is a test note" --tags "finance, business, important" --notebook "Family"

```

然后，你可以编辑你的笔记。语法很相似：

```
$ geeknote edit --note [title of the note to edit] (--title [new title] --tags [new tags] --notebook [new notebooks])

```

注意可选的参数如新的标题、标签和笔记本，用来修改笔记的元数据。你也可以用下面的命令重命名笔记：

```
$ geeknote edit --note [old title] --title [new title]

```

现在基本的创建和编辑已经完成了，更高级的特性是搜索和删除。你可以下面的语法搜索你的笔记：

```
$ geeknote find --search [text-to-search] --tags [comma-separated tags] --notebook [comma-separated notebooks] --date [date-or-date-range] --content-search

```

默认地上面的命令会通过标题搜索笔记。 用"--content-search"选项，就可以按内容搜索。

比如：

```
$ geeknote find --search "*restaurant" --notebooks "Family" --date 31.03.2014-31.08.2014

```

显示指定标题的笔记：

```
$ geeknote show [title]

```

我最喜欢使用的一个技巧是使用：

```
$ geeknote show "*"

```

这会显示所有的笔记并允许你在这中选择一个。

删除一条笔记：

```
$ geeknote remove --note [title]

```

小心这是真正的删除。它会从云存储中删除这条笔记。

最后有很多的选项来管理标签和笔记本。我想最有用的就是显示笔记本列表。

```
$ geeknote notebook-list

```

下面的命令非常相像。你可以猜到，可以用下面的命令列出所有的标签：

```
$ geeknote tag-list

```

创建一个笔记本：

```
$ geeknote notebook-create --title [notebook title]

```

创建一个标签：

```
$ geeknote tag-create --title [tag title]

```

一旦你了解了窍门，很明显这些语法是非常自然明确的。

如果你想要了解更多，不要忘记查看[官方文档](http://www.geeknote.me/documentation/)。

### 福利

作为福利，Geeknote自带的gnsync工具可以让你在Evernote和本地计算机之间同步。不过，我发现它的语法有点枯燥：

```
$ gnsync --path [where to sync] (--mask [what kind of file to sync] --format [in which format] --logpath [where to write the log] --notebook [which notebook to use])

```

下面是这些参数的意义。

* **--path /home/adrien/Documents/notes/**: 与Evernote同步笔记的位置。
* **--mask "\*.txt"**: 只同步纯文本文件。默认gnsync会尝试同步所有文件。
* **--format markdown**: 你希望它们是纯文本或者markdown格式（默认是纯文本）。
* **--logpath /home/adrien/gnsync.log**: 同步日志的位置。为防出错，gnsync会在那里写入日志信息。
* **--notebook "Family"**: 同步哪个笔记本中的笔记。如果留空，程序会创建一个以你同步文件夹命令的笔记本。

总的来说，Geeknote是一款漂亮的Evernote的命令行客户端。我个人不常使用Evernote，但它仍然很漂亮和有用。命令行一方面让它变得很极客且很容易与shell脚本结合。此外，在Git上还有Geeknote的一个分支项目，在ArchLinux AUR上称为[geeknote-improved-git](https://aur.archlinux.org/packages/geeknote-improved-git/)，貌似它有更多的特性和比其他分支更积极的开发。我觉得值得去看看。

你认为Geeknote怎么样？ 有什么你想用的么？或者你更喜欢使用传统的程序？在评论区中让我们知道。

---

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

作者：[Adrien Brochard](http://xmodulo.com/author/adrien) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


如何在终端下以后台模式运行Linux程序

Summary: Linux终端窗口 这是一个简短但是非常有用的教程：它向你展示从终端运行Linux应用程序的同时，如何保证终端仍然可以操作。 在Linux中有许多方式可以打开一个终端，这主要取决于你的发行版的选择和桌面环境。 使用Ubuntu的话，你可以使用CTRL + ALT + T组合键打开一个终端。你也可以点击超级键(Windows键)打开一个终端窗口。在键盘上，打开Ubuntu Dash，然后搜索"TERM"。点击"Term"图标将会打开一个终端窗口。 其他诸如XFCE, KDE, LXDE, Cinnamon和MATE的桌面环境，你将会在菜单中发现终端这个应用。还有一些发行版会把终端图标放在菜单项，

m

后台运行Linux程序

@我的印象笔记

還以為會提到screen/tmux，看完略失望

请问sudo !!是什么意思？

Repost

!!是上一个命令

Repost

回复@stonerzju:不试不知道哦

建议在根目录建立一个指向/dev/null的符号链接 nul，然后gedit 1> /nul 2>&1 &。这样写可以在终端忽略程序的输出信息。

不建议在sudo上用!!，执行什么命令应该明确写清楚，甚至参数都要用长格式。因为sudo执行权限高，一旦看错选错，执行了不该执行的命令，那才麻烦。特别是多开终端的情况下。

用screen

赞同这个意见！

符号链接不是必要的，只是方便。

这篇是小白级的，screen和tmux之前也有文章介绍。哎作为 Linux 技术普及，各种文章得一遍遍发。

@我的印象笔记

咱都用screen

回复@stonerzju: 快点！！ [江南style]

回复@Mr_PingPing:速度！！[嘻嘻]//@Mr_PingPing:回复@stonerzju: 快点！！ [江南style]

@我的印象笔记

ming ling  you dian shao

# 如何在终端下以后台模式运行Linux程序

<img src="content_image/album_201501_26_231411bzzqaqag6cckza6a.jpg" alt="Linux Terminal Window." title="Linux Terminal Window.">

*Linux终端窗口*

这是一个简短但是非常有用的教程：它向你展示从终端运行Linux应用程序的同时，如何保证终端仍然可以操作。

在Linux中有许多方式可以打开一个终端，这主要取决于你的发行版的选择和桌面环境。

使用Ubuntu的话，你可以使用CTRL + ALT + T组合键打开一个终端。你也可以点击超级键(Windows键)打开一个终端窗口。在键盘上，[打开Ubuntu Dash](http://linux.about.com/od/howtos/fl/Learn-Ubuntu-The-Unity-Dash.htm)，然后搜索"TERM"。点击"Term"图标将会打开一个终端窗口。

其他诸如XFCE, KDE, LXDE, Cinnamon和MATE的桌面环境，你将会在菜单中发现“终端”这个应用。还有一些发行版会把终端图标放在菜单项，或者在面板上放置终端启动器。

你可以在终端里面输入一个程序的名字来启动一个应用。举例，你可以通过输入"firefox"启动火狐浏览器。

从终端运行程序的好处是可以使用额外的选项。

举个例子，如果你输入下面的命令，一个新的火狐浏览器将会打开，而且默认的搜索引擎将会搜索引号之间的词语：

```
firefox -search "Linux.About.Com"

```

你会发现，如果你运行火狐浏览器，应用程序打开后，控制权将会回到终端（重新出现了命令提示符），这将意味着你可以继续在终端工作。

通常情况下，如果你通过终端运行一个程序，程序打开后，并且直到那个程序关闭结束，你都将不会获得终端的控制权。这是因为你是在前台打开程序的。

想要从终端运行一个程序，并且立即将终端的控制权返回给你，你需要以后台进程的方式打开程序。

为了以后台进程的方式打开一个程序，只需要添加符号(&)到命令中，如下面所示：

```
libreoffice &

```

在终端中仅仅提供程序的名字，应用程序可能运行不了。如果程序不存在于一个设置在PATH 环境变量的文件夹中，你需要指定完整的路径名来运行程序。

```
/path/to/yourprogram &

```

如果你并不确定一个程序是否存在于Linux文件系统中，使用find或者locate命令来查找该应用程序。

找一个文件的语法如下：

```
find /path/to/start/from -name programname

```

举个例子，可以使用下面的命令寻找Firefox的位置：

```
find / -name firefox

```

输出会很快滚动出很多，所以你可以以管道的方式控制输出的多少：

```
find / -name firefox | more
find / -name firefox | less

```

find命令将会返回因权限拒绝而发生错误的文件夹数量，这些文件夹你没有权限去搜索。

你可以使用sudo命令提升你的权限。如果sudo没有安装，你需要切换到拥有权限的用户：

```
sudo find / -name firefox | more

```

如果你知道你想寻找的文件在你的当前文件夹中，你可以一个点代替先前的斜线，如下：

```
sudo find . -name firefox | more

```

你可能不需要sudo来提升权限。如果你在home文件夹中寻找文件，sudo就不需要。

一些应用程序需要提升用户权限来运行，你可能得到一个缺少权限的错误，除非你使用一个具有足够权限的用户，或者使用sudo提升你的权限。

下面是一个小花招。如果你运行一个程序，而且它需要提升权限来运行，输入下面命令来提升权限重新执行：

```
sudo !!

```

---

via: <http://linux.about.com/od/commands/fl/How-To-Run-Linux-Programs-From-The-Terminal-In-Background-Mode.htm>

作者：[Gary Newell](http://linux.about.com/bio/Gary-Newell-132058.htm) 译者：[su-kaiyao](https://github.com/su-kaiyao) 校对：[wxy](https://github.com/wxy)

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


检测 Linux 内存使用情况的 free 命令的10个例子

Summary: Linux是最有名的开源操作系统之一，它拥有着极其巨大的命令集。确定物理内存和交换内存所有可用空间的最重要、也是唯一的方法是使用free命令。 Linux free命令可以给出类Linux/Unix操作系统中物理内存和交换内存的总使用量、可用量及内核使用的缓冲区情况。  这篇文章提供一些各种参数选项的free命令，这些命令对于你更好地利用你的内存会有帮助。 1. 显示你的系统内存 free命令用于检测物理内存和交换内存已使用量和可用量（默认单位为KB）。下面演示命令的使用情况。 # free total used free shared buffers cached Mem: 1021628 912548

少了个--human -h 显示带单位的

留档

对，这个更有用

@Linux中国

既然都说了命令集很多～确定是唯一么～ 我记得top命令也是可以显示内存和swap的～

@Dr_Hypocrisy 可用的不只是 top 和 free，过几天会有一篇 “Linux有问必答：如何检查Linux的内存使用状况” 的文章，里边介绍了十几种相关工具。

# 检测 Linux 内存使用情况的 free 命令的10个例子

**Linux**是最有名的开源操作系统之一，它拥有着极其巨大的命令集。确定**物理内存**和**交换内存**所有可用空间的最重要、也是唯一的方法是使用“**free**”命令。

Linux “**free**”命令可以给出类**Linux/Unix**操作系统中**物理内存**和**交换内存**的总使用量、可用量及内核使用的**缓冲区**情况。

<img src="content_image/album_201501_26_233642hb15ubpra5wber4q.png" alt="10 Linux Free Command Examples" title="10 Linux Free Command Examples">

这篇文章提供一些各种参数选项的“**free**”命令，这些命令对于你更好地利用你的内存会有帮助。

### 1. 显示你的系统内存

free命令用于检测**物理内存**和**交换内存**已使用量和可用量（默认单位为**KB**）。下面演示命令的使用情况。

```
# free

             total       used       free     shared    buffers     cached
Mem:       1021628     912548     109080          0     120368     655548
-/+ buffers/cache:     136632     884996
Swap:      4194296          0    4194296

```

### 2. 以字节为单位显示内存

加上**-b**参数的free命令，以**字节**为单位显示内存的大小。

```
# free -b

             total       used       free     shared    buffers     cached
Mem:    1046147072  934420480  111726592          0  123256832  671281152
-/+ buffers/cache:  139882496  906264576
Swap:   4294959104          0 4294959104

```

### 3. 以千字节为单位显示内存

加上**-k**参数的free命令（默认单位，所以可以不用使用它），以(KB)**千字节**为单位显示内存大小。

```
# free -k

             total       used       free     shared    buffers     cached
Mem:       1021628     912520     109108          0     120368     655548
-/+ buffers/cache:     136604     885024
Swap:      4194296          0    4194296

```

### 4. 以兆字节为单位显示内存

想以**(兆字节)**显示内存大小，使用**-m**参数。

```
# free -m

             total       used       free     shared    buffers     cached
Mem:           997        891        106          0        117        640
-/+ buffers/cache:        133        864
Swap:         4095          0       4095

```

### 5. 以千兆字节为单位显示内存

使用**-g**为参数，将会以**GB(千兆字节)**为单位显示内存大小。

```
# free -g
             total       used       free     shared    buffers     cached
Mem:             0          0          0          0          0          0
-/+ buffers/cache:          0          0
Swap:            3          0          3

```

### 6. 显示总计行

加上-t选项，将会在屏幕最后列出总计一行。

```
# free -t

             total       used       free     shared    buffers     cached
Mem:       1021628     912520     109108          0     120368     655548
-/+ buffers/cache:     136604     885024
Swap:      4194296          0    4194296
Total: 5215924 912520 4303404

```

### 7. 关闭显示缓冲区调整一行

默认情况下，free命令是显示“**缓冲区调整**”一行的，为了关闭显示，可以加上-o参数。

```
# free -o

             total       used       free     shared    buffers     cached
Mem:       1021628     912520     109108          0     120368     655548
Swap:      4194296          0    4194296

```

### 8. 定期时间间隔更新内存状态

-s选项加上一个整数，用来在定期时间间隔内更新free命令。举个例子，下面的命令将会在每5秒更新一个free命令。

```
# free -s 5

             total       used       free     shared    buffers     cached
Mem:       1021628     912368     109260          0     120368     655548
-/+ buffers/cache:     136452     885176
Swap:      4194296          0    4194296

```

### 9. 显示底和高内存统计信息

-l选项显示了具体的高和低内存的使用统计情况。

```
# free -l

             total       used       free     shared    buffers     cached
Mem:       1021628     912368     109260          0     120368     655548
Low:        890036     789064     100972
High:       131592     123304       8288
-/+ buffers/cache:     136452     885176
Swap:      4194296          0    4194296

```

### 10. 检查free命令版本

-V选项，显示free命令版本信息。

```
# free -V

procps version 3.2.8

```

---

via: <http://www.tecmint.com/check-memory-usage-in-linux/>

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

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


Summary: Jetty提供了一个Web服务器和javax.servlet容器，为SPDY、WebSocket、OSGi、JMX、JNDI、JAAS以及许多其它集成套件添加了支持。这些组件都是开源的，也可用于商业用途和分发。 Jetty被广泛用于多种项目和产品，都可以在开发环境和生产环境中使用。Jetty可以很容易地嵌入到设备、工具、框架、应用服务器以及集群中。更多用途可参见Jetty网页。  Jetty特性  全功能并基于标准 开源与商用两可 灵活和可扩展 小足迹 可嵌入 异步支持 企业弹性扩展 Apache和Eclipse双重许可证  ubuntu 14.10 server上安装Jetty 9 先决条件 在安装Jetty服务器前，

# 在 Ubuntu 14.10 Server 上安装 Jetty 9（Java服务引擎和Web服务器）

Jetty提供了一个Web服务器和javax.servlet容器，为SPDY、WebSocket、OSGi、JMX、JNDI、JAAS以及许多其它集成套件添加了支持。这些组件都是开源的，也可用于商业用途和分发。

Jetty被广泛用于多种项目和产品，都可以在开发环境和生产环境中使用。Jetty可以很容易地嵌入到设备、工具、框架、应用服务器以及集群中。更多用途可参见Jetty网页。

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

### Jetty特性

* 全功能并基于标准
* 开源与商用两可
* 灵活和可扩展
* 小足迹
* 可嵌入
* 异步支持
* 企业弹性扩展
* Apache和Eclipse双重许可证

### ubuntu 14.10 server上安装Jetty 9

#### 先决条件

在安装Jetty服务器前，您需要通过以下命令安装Java

```
sudo apt-get install openjdk-8-jdk

```

Java将会安装到/usr/lib/jvm/java-8-openjdk-i386，同时在该目录下会创建一个名为java-8-openjdk-i386的符号链接，在/usr/bin/java下也会相应创建符号链接。

现在你需要从[这里](http://download.eclipse.org/jetty/stable-9/dist/)下载Jetty9，在下载完成后，你需要使用以下命令来解压缩

```
$tar -xvf jetty-distribution-9.2.5.v20141112.tar.gz

```

该操作会将它解压到jetty-distribution-9.2.5.v20141112，而你需要使用以下命令将归档文件移动到/opt/jetty

```
$mv jetty-distribution-9.2.5.v20141112 /opt/jetty

```

你需要创建jetty用户，并将其设置成/opt/jetty目录的属主

```
sudo useradd jetty -U -s /bin/false
sudo chown -R jetty:jetty /opt/jetty

```

使用以下命令拷贝Jetty脚本到启动目录，以便让它作为一个服务来运行

```
$ cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty

```

现在，你需要使用以下内容来创建Jetty设置文件

```
sudo vi /etc/default/jetty

```

添加以下行

```
JAVA_HOME=/usr/bin/java
JETTY_HOME=/opt/jetty
NO_START=0
JETTY_ARGS=jetty.port=8085
JETTY_HOST=0.0.0.0
JETTY_USER=jetty

```

保存并退出该文件

你需要使用以下命令来启动Jetty服务

```
sudo service jetty start

```

你应该看到和下面类似的输出

```
Starting Jetty: OK Mon Nov 24 11:55:48 GMT 2014

```

如果你看到了下面的错误

#### \*\* ERROR: JETTY\_HOME not set, you need to set it or install in a standard location

你需要确保在/etc/default/jetty文件中设置了正确的Jetty家目录路径，你可以使用以下URL来测试jetty。

Jetty现在应该运行在8085端口，打开浏览器并访问http://服务器IP:8085，你应该可以看到Jetty屏幕。

#### Jetty服务检查

使用以下命令来验证并检查配置

```
sudo service jetty check

```

使用以下命令来让Jetty开重启后自动启动

```
sudo update-rc.d jetty defaults

```

重启服务器并测试Jetty是否自动启动。

要检查Jetty运行在哪个端口上，或者该端口是否与其它程序冲突，可以运行netstat -tln

---

via: <http://www.ubuntugeek.com/install-jetty-9-java-servlet-engine-and-webserver-on-ubuntu-14-10-server.html>

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

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


Linux 有问必答：如何在Ubuntu或者Debian中启动后进入命令行

Summary: 提问：我运行的是Ubuntu桌面，但是我希望启动后临时进入命令行。有什么简便的方法可以启动进入终端？  Linux桌面自带了一个显示管理器（比如：GDM、KDM、LightDM），它们可以让计算机启动自动进入一个基于GUI的登录环境。然而，如果你要直接启动进入终端怎么办？ 比如，你在排查桌面相关的问题或者想要运行一个不需要GUI的应用程序。 注意虽然你可以通过按下Ctrl+Alt+F1到F6临时从桌面GUI切换到虚拟终端。然而，在这种情况下你的桌面GUI仍在后台运行，这不同于纯文本模式启动。 在Ubuntu或者Debian桌面中，你可以通过传递合适的内核参数在

@我的印象笔记

难道不是改inittab或者default.target吗……动内核引导选项大丈夫？

好东西

可以玩一下。

这个我会！把显卡驱动卸掉就可以....上次装显卡驱动失败了就是这样的

vi /etc/inittab 把5改成3

@我的印象笔记

把显卡驱动卸掉？作的不好又要重做。。。

那可不可以从文本输入框组昂太中切换到桌面环境？

init 5 或者 startx

# Linux 有问必答：如何在Ubuntu或者Debian中启动后进入命令行

>
> **提问**：我运行的是Ubuntu桌面，但是我希望启动后临时进入命令行。有什么简便的方法可以启动进入终端？
>
>
>

Linux桌面自带了一个显示管理器（比如：GDM、KDM、LightDM），它们可以让计算机启动自动进入一个基于GUI的登录环境。然而，如果你要直接启动进入终端怎么办？ 比如，你在排查桌面相关的问题或者想要运行一个不需要GUI的应用程序。

注意虽然你可以通过按下Ctrl+Alt+F1到F6临时从桌面GUI切换到虚拟终端。然而，在这种情况下你的桌面GUI仍在后台运行，这不同于纯文本模式启动。

在Ubuntu或者Debian桌面中，你可以通过传递合适的内核参数在启动时启动文本模式。

### 启动临时进入命令行

如果你想要禁止桌面GUI并临时进入一次文本模式，你可以使用GRUB菜单。

首先，打开你的电脑。当你看到初始的GRUB菜单时，按下‘e’。

接着会进入下一屏，这里你可以修改内核启动选项。向下滚动到以“linux”开始的行，这里就是内核参数的列表。删除参数列表中的“quiet”和“splash”。在参数列表中添加“text”。

升级的内核选项列表看上去像这样。按下Ctrl+x继续启动。这会以详细模式启动控制台一次（LCTT译注：由于没有保存修改，所以下次重启还会进入 GUI）。

### 永久启动进入命令行

如果你想要永久启动进入命令行，你需要[更新定义了内核启动参数GRUB设置](http://xmodulo.com/add-kernel-boot-parameters-via-grub-linux.html)。

在文本编辑器中打开默认的GRUB配置文件。

```
$ sudo vi /etc/default/grub

```

查找以GRUB\_CMDLINE*\_*LINUX\_DEFAULT开头的行，并用“#”注释这行。这会禁止初始屏幕，而启动详细模式（也就是说显示详细的的启动过程）。

更改GRUB*CMDLINE*LINUX="" 成：

```
GRUB_CMDLINE_LINUX="text"

```

接下来取消“#GRUB\_TERMINAL=console”的注释。

更新后的GRUB配置看上去像下面这样。

最后，使用update-grub命令来基于这些更改重新生成/boot下的GRUB2配置文件。

```
$ sudo update-grub

```

这时，你的桌面应该可以从GUI启动切换到控制台启动了。可以通过重启验证。

---

via: <http://ask.xmodulo.com/boot-into-command-line-ubuntu-debian.html>

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

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


Linux下如何过滤、分割以及合并 pcap 文件

Summary: 如果你是一个测试入侵侦测系统或一些网络访问控制策略的网络管理员，那么你经常需要抓取数据包并在离线状态下分析这些文件。当需要保存捕获的数据包时，我们一般会存储为 libpcap 的数据包格式 pcap，这是一种被许多开源的嗅探工具以及捕包程序广泛使用的格式。如果 pcap 文件被用于入侵测试或离线分析的话，那么在将他们注入网络之前通常要先对 pcap 文件进行一些操作。  在这篇文章中，我将介绍一些操作 pcap 文件的工具，以及如何使用它们 。 Editcap 与 Mergecap Wireshark，是最受欢迎的 GUI 嗅探工具，实际上它带了一套非常有用的命

学习了

Wireshark的命令行工具

实用！@filmkiller

有用

@我的印象笔记

@我的印象笔记

@mark

//@浪头:转发微博

# Linux下如何过滤、分割以及合并 pcap 文件

如果你是一个测试[入侵侦测系统](http://xmodulo.com/how-to-compile-and-install-snort-from-source-code-on-ubuntu.html)或一些网络访问控制策略的网络管理员，那么你经常需要抓取数据包并在离线状态下分析这些文件。当需要保存捕获的数据包时，我们一般会存储为 libpcap 的数据包格式 pcap，这是一种被许多开源的嗅探工具以及捕包程序广泛使用的格式。如果 pcap 文件被用于入侵测试或离线分析的话，那么在将他们[注入](http://xmodulo.com/how-to-capture-and-replay-network-traffic-on-linux.html)网络之前通常要先对 pcap 文件进行一些操作。

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

在这篇文章中，我将介绍一些操作 pcap 文件的工具，以及如何使用它们 。

### Editcap 与 Mergecap

Wireshark，是最受欢迎的 GUI 嗅探工具，实际上它带了一套非常有用的命令行工具集。其中包括 editcap 与 mergecap。editcap 是一个万能的 pcap 编辑器，它可以过滤并且能以多种方式来分割 pcap 文件。mergecap 可以将多个 pcap 文件合并为一个。 这篇文章就是基于这些 Wireshark 命令行工具的。

如果你已经安装过 Wireshark 了，那么这些工具已经在你的系统中了。如果还没装的话，那么我们接下来就安装 Wireshark 命令行工具。 需要注意的是，在基于 Debian 的发行版上我们可以不用安装 Wireshark GUI 而仅安装命令行工具，但是在 Red Hat 及 基于它的发行版中则需要安装整个 Wireshark 包。

**Debian, Ubuntu 或 Linux Mint**

```
$ sudo apt-get install wireshark-common

```

**Fedora, CentOS 或 RHEL**

```
$ sudo yum install wireshark

```

当安装好工具后， 就可以开始使用 editca 与 mergecap 了。

### pcap 文件过滤

通过 editcap， 我们能以很多不同的规则来过滤 pcap 文件中的内容，并且将过滤结果保存到新文件中。

首先，以“起止时间”来过滤 pcap 文件。 " - A < start-time > 和 " - B < end-time > 选项可以过滤出在这个时间段到达的数据包（如，从 2:30 ～ 2:35）。时间的格式为 “ YYYY-MM-DD HH:MM:SS"。

```
$ editcap -A '2014-12-10 10:11:01' -B '2014-12-10 10:21:01' input.pcap output.pcap

```

也可以从某个文件中提取指定的 N 个包。下面的命令行从 input.pcap 文件中提取100个包（从 401 到 500）并将它们保存到 output.pcap 中：

```
$ editcap input.pcap output.pcap 401-500

```

使用 "-D < dup-window >" （dup-window可以看成是对比的窗口大小，仅与此范围内的包进行对比）选项可以提取出重复包。每个包都依次与它之前的 < dup-window > -1 个包对比长度与MD5值，如果有匹配的则丢弃。

```
$ editcap -D 10 input.pcap output.pcap

```

>
> 遍历了 37568 个包, 在 10 窗口内重复的包仅有一个，并丢弃。
>
>
>

也可以将 < dup-window > 定义成时间间隔。使用"-w < dup-time-window >"选项，对比< dup-time-window > 时间内到达的包。

```
$ editcap -w 0.5 input.pcap output.pcap

```

>
> 检索了 50000 个包, 以0.5s作为重复窗口，未找到重复包。
>
>
>

### 分割 pcap 文件

当需要将一个大的 pcap 文件分割成多个小文件时，editcap 也能起很大的作用。

将一个 pcap 文件分割成数据包数目相同的多个文件

```
$ editcap -c <packets-per-file> <input-pcap-file> <output-prefix>

```

输出的每个文件有相同的包数量，以 < output-prefix >-NNNN的形式命名。

以时间间隔分割 pcap 文件

```
$ editcap -i <seconds-per-file> <input-pcap-file> <output-prefix>

```

### 合并 pcap 文件

如果想要将多个文件合并成一个，用 mergecap 就很方便。

当合并多个文件时，mergecap 默认将内部的数据包以时间先后来排序。

```
$ mergecap -w output.pcap input.pcap input2.pcap [input3.pcap . . .]

```

如果要忽略时间戳，仅仅想以命令行中的顺序来合并文件，那么使用 -a 选项即可。

例如，下列命令会将 input.pcap 文件的内容写入到 output.pcap, 并且将 input2.pcap 的内容追加在后面。

```
$ mergecap -a -w output.pcap input.pcap input2.pcap

```

### 总结

在这篇指导中，我演示了多个 editcap、 mergecap 操作 pcap 文件的例子。除此之外，还有其它的相关工具，如 [reordercap](https://www.wireshark.org/docs/man-pages/reordercap.html)用于将数据包重新排序，[text2pcap](https://www.wireshark.org/docs/man-pages/text2pcap.html) 用于将 pcap 文件转换为文本格式， [pcap-diff](https://github.com/isginf/pcap-diff)用于比较 pcap 文件的异同，等等。当进行网络入侵测试及解决网络问题时，这些工具与[包注入工具](http://xmodulo.com/how-to-capture-and-replay-network-traffic-on-linux.html)非常实用，所以最好了解他们。

你是否使用过 pcap 工具？ 如果用过的话，你用它来做过什么呢？

---

via: <http://xmodulo.com/filter-split-merge-pcap-linux.html>

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

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


如何使用Aptik来备份和恢复Ubuntu中的Apps和PPAs

Summary: 当你想重装Ubuntu或者仅仅是想安装它的一个新版本的时候，如果有个便捷的方法来重新安装之前的应用并且重置其设置会很方便的。此时 Aptik 粉墨登场，它可以帮助你轻松实现。 Aptik（自动包备份和恢复）是一个可以用在Ubuntu，Linux Mint 和其他基于Debian以及Ubuntu的Linux发行版上的应用，它允许你将已经安装过的包括软件库、下载包、安装的应用和主题、用户设置在内的PPAs(个人软件包存档)备份到外部的U盘、网络存储或者类似于Dropbox的云服务上。 注意：当我们在此文章中说到输入某些东西的时候，如果被输入的内容被引号包裹，请不要将

粉墨登场这词是贬义词。[笑cry]

真不希望装一个不卡的乌班图

@我的印象笔记

@我的印象笔记  谢谢

这个不错

@我的印象笔记

回复@顾yc:此词做原意引用时可表中性。以后翻技术文章时尽量严谨直译。

回复@顾yc:此词做原意引用时可表中性。以后翻技术文章时尽量严谨直译。 //@顾yc:粉墨登场这词是贬义词。[笑cry]

Repost

实用工具

@myviz

业界良心。

//@阿里云安全:业界良心。

@我的印象笔记

//@阿里云安全:业界良心。

Ubuntu系统及应用备份工具Aptik

# 如何使用Aptik来备份和恢复Ubuntu中的Apps和PPAs

当你想重装Ubuntu或者仅仅是想安装它的一个新版本的时候，如果有个便捷的方法来重新安装之前的应用并且重置其设置会很方便的。此时 *Aptik* 粉墨登场，它可以帮助你轻松实现。

Aptik（自动包备份和恢复）是一个可以用在Ubuntu，Linux Mint 和其他基于Debian以及Ubuntu的Linux发行版上的应用，它允许你将已经安装过的包括软件库、下载包、安装的应用和主题、用户设置在内的PPAs(个人软件包存档)备份到外部的U盘、网络存储或者类似于Dropbox的云服务上。

注意：当我们在此文章中说到输入某些东西的时候，如果被输入的内容被引号包裹，请不要将引号一起输入进去，除非我们有特殊说明。

想要安装Aptik，需要先添加其PPA。使用Ctrl + Alt + T快捷键打开一个新的终端窗口。输入以下文字，并按回车执行。

```
sudo apt-add-repository –y ppa:teejee2008/ppa

```

当提示输入密码的时候，输入你的密码然后按回车。

在命令行提示符输入下边的命令，来确保资源库已经是最新版本。

```
sudo apt-get update

```

更新完毕后，你就完成了安装Aptik的准备工作。接下来输入以下命令并按回车：

```
sudo apt-get install aptik

```

注意：你可能会看到一些有关于获取不到包更新的错误提示。不过别担心，如果这些提示看起来跟下边图片中类似的话，你的Aptik的安装就没有任何问题。

安装过程会被显示出来。其中一个被显示出来的消息会提到此次安装会使用掉多少磁盘空间，然后提示你是否要继续，按下“y”再按回车，继续安装。

当安装完成后，输入“Exit”并按回车或者按下左上角的“X”按钮，关闭终端窗口。

在正式运行Aptik前，你需要设置好备份目录到一个U盘、网络驱动器或者类似于Dropbox和Google Drive的云帐号上。这儿的例子中，我们使用的是Dropbox。

一旦设置好备份目录，点击启动栏上方的“Search”按钮。

在搜索框中键入 “aptik”。结果会随着你的输入显示出来。当Aptik图标显示出来的时候，点击它打开应用。

此时一个对话框会显示出来要求你输入密码。输入你的密码并按“OK”按钮。

Aptik的主窗口显示出来了。从“Backup Directory”下拉列表中选择“Other…”。这个操作允许你选择你已经建立好的备份目录。

注意：在下拉列表的右侧的 “Open” 按钮会在一个文件管理窗口中打开选择目录功能。

在 “Backup Directory” 对话窗口中，定位到你的备份目录，然后按“Open”。

注意：如果此时你尚未建立备份目录或者想在备份目录中新建个子目录，你可以点“Create Folder”来新建目录。

点击“Software Sources (PPAs).”右侧的 “Backup”来备份已安装的PPAs。

然后“Backup Software Sources”对话窗口显示出来。已安装的包和对应的源（PPA）同时也显示出来了。选择你需要备份的源（PPAs），或者点“Select All”按钮选择所有源。

点击 “Backup” 开始备份。

备份完成后，一个提示你备份完成的对话窗口会蹦出来。点击 “OK” 关掉。

一个名为“ppa.list”的文件出现在了备份目录中。

接下来，“Downloaded Packages (APT Cache)”的项目只对重装同样版本的Ubuntu有用处。它会备份下你系统缓存(/var/cache/apt/archives)中的包。如果你是升级系统的话，可以跳过这个条目，因为针对新系统的包会比现有系统缓存中的包更加新一些。

备份和恢复下载过的包，这可以在重装Ubuntu，并且重装包的时候节省时间和网络带宽。因为一旦你把这些包恢复到系统缓存中之后，他们可以重新被利用起来，这样下载过程就免了，包的安装会更加快捷。

如果你是重装相同版本的Ubuntu系统的话，点击 “Downloaded Packages (APT Cache)” 右侧的 “Backup” 按钮来备份系统缓存中的包。

注意：当你备份下载过的包的时候是没有二级对话框出现的。你系统缓存 (/var/cache/apt/archives) 中的包会被拷贝到备份目录下一个名叫 “archives” 的文件夹中，当整个过程完成后会出现一个对话框来告诉你备份已经完成。

有一些包是你的Ubuntu发行版的一部分。因为安装Ubuntu系统的时候会自动安装它们，所以它们是不会被备份下来的。例如，火狐浏览器在Ubuntu和其他类似Linux发行版上都是默认被安装的，所以默认情况下，它不会被选择备份。

像[package for the Chrome web browser](http://www.howtogeek.com/203768)这种系统安装完后才安装的包或者包含 Aptik 的包会默认被选择上。这可以方便你备份这些后安装的包。

按照需要选择想要备份的包。点击 “Software Selections” 右侧的 “Backup” 按钮备份顶层包。

注意：依赖包不会出现在这个备份中。

备份目录中出现了两个名为 “packages.list” 和“packages-installed.list” 的文件，并且会弹出一个通知你备份完成的对话框。点击 ”OK“关闭它。

注意：“packages-installed.list”文件包含了所有的包，而 “packages.list” 在包含了所有包的前提下还指出了那些包被选择上了。

要备份已安装软件的设置的话，点击 Aptik 主界面 “Application Settings” 右侧的 “Backup” 按钮，选择你要备份的设置，点击“Backup”。

注意：如果你要选择所有设置，点击“Select All”按钮。

被选择的配置文件统一被打包到一个名叫 “app-settings.tar.gz” 的文件中。

当打包完成后，打包后的文件被拷贝到备份目录下，另外一个备份成功的对话框出现。点击“OK”关掉。

放在 “/usr/share/themes” 目录的主题和放在 “/usr/share/icons” 目录的图标也可以备份。点击 “Themes and Icons” 右侧的 “Backup” 来进行此操作。“Backup Themes” 对话框默认选择了所有的主题和图标。你可以安装需要的、取消一些不要的，然后点击 “Backup” 进行备份。

主题被打包拷贝到备份目录下的 “themes” 文件夹中，图标被打包拷贝到备份目录下的 “icons” 文件夹中。然后成功提示对话框出现，点击“OK”关闭它。

一旦你完成了需要的备份，点击主界面左上角的“X”关闭 Aptik 。

备份过的文件已存在于你选择的备份目录中，可以随时查看。

当你重装Ubuntu或者安装新版本的Ubuntu后，在新的系统中安装 Aptik 并且将备份好的文件置于新系统中使用。运行 Aptik，并使用每个条目的 “Restore” 按钮来恢复你的软件源、应用、包、设置、主题以及图标。

---

via: <http://www.howtogeek.com/206454/how-to-backup-and-restore-your-apps-and-ppas-in-ubuntu-using-aptik/>

作者：Lori Kaufman 译者：[Ping](https://github.com/mr-ping) 校对：[wxy](https://github.com/wxy)

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


CentOS 7.x中正确设置时间与时钟服务器同步

Summary: Chrony是一个开源的自由软件，它能帮助你保持系统时钟与时钟服务器（NTP）同步，因此让你的时间保持精确。它由两个程序组成，分别是chronyd和chronyc。chronyd是一个后台运行的守护进程，用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率，并对此进行补偿。chronyc提供了一个用户界面，用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作，也可以在一台不同的远程计算机上工作。 在像CentOS 7之类基于RHEL的操作系统上，已经默认安装有Chrony。  Chrony配置 当Chrony启动时，它会读取/etc

这些都是什么[思考][打脸][伤心]

转发微博.

这个表盘好！

不是用NTPd吗？

@我的印象笔记

文章不错，如果配置项解释更详细一点就更好了，期待更好的作品。

这个程序确实少见，不过看起来比 ntpd 简单些，虽然它底层也是用的 ntp 服务。

你好，请教你一个其他方面的问题：rhel7的网卡team在win8.1为宿主机vmware虚拟机测试存在问题，当我down掉active网卡时，它不会自动切换到另一款网卡上。不知道什么问题引起的？

这个问题不懂，也许你可以去 QQ 群或论坛问问？

好的，谢谢你的回复

好的，谢谢

求指点 配置chronyd server端和client端有什么不一样的地方， 是服务器端就在/etc/chrony.conf 文件里面allow ×client IP× 吗？  还有其他的操作吗？  我这边做实验 A主机同步网络中的NTP服务器  然后A允许B  结果B去同步A的时候  死活不行 chronyc source -v 看到状态是服务器不可达，但是AB之间是可以ping通的，求解

防火墙呢？不行你抓包试试。

两台主机防火墙都关闭了。抓包倒也是个绝招

千恩万谢！提醒我抓包 确实看到问题点了  B主机去向A主机NTP同步，A会先通过ICMP确认B是否可达（应该是种安全措施），但是ICMP确认的结果却显示 主机B不可达。在A上手动PING能通。B上的iptable firewall selinux都关闭了。

所以，解决问题的终极大法：tcpdump & gdb <br />
当你遇到百撕不得骑姐的问题时，就祭出如上神器吧！:D

确实！虽然还是没有解决问题，但是比不知道原因要好的多。谢谢指点

7版本的已经不用NTPD了

关闭Firewall 确实可以解决NTP同步问题，但是如果要启用Firewall，需要怎么配置防火墙呢？

TCP/123 端口

TCP/123 端口

翻译后得意思 让人费解  译者自己能读通顺？

# CentOS 7.x中正确设置时间与时钟服务器同步

**Chrony**是一个开源的自由软件，它能帮助你保持系统时钟与时钟服务器（NTP）同步，因此让你的时间保持精确。它由两个程序组成，分别是chronyd和chronyc。chronyd是一个后台运行的守护进程，用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率，并对此进行补偿。chronyc提供了一个用户界面，用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作，也可以在一台不同的远程计算机上工作。

在像CentOS 7之类基于RHEL的操作系统上，已经默认安装有Chrony。

### Chrony配置

当Chrony启动时，它会读取/etc/chrony.conf配置文件中的设置。CentOS 7操作系统上最重要的设置有：

**server** - 该参数可以多次用于添加时钟服务器，必须以"server "格式使用。一般而言，你想添加多少服务器，就可以添加多少服务器。

```
server 0.centos.pool.ntp.org
server 3.europe.pool.ntp.org

```

**stratumweight** - stratumweight指令设置当chronyd从可用源中选择同步源时，每个层应该添加多少距离到同步距离。默认情况下，CentOS中设置为0，让chronyd在选择源时忽略源的层级。

**driftfile** - chronyd程序的主要行为之一，就是根据实际时间计算出计算机增减时间的比率，将它记录到一个文件中是最合理的，它会在重启后为系统时钟作出补偿，甚至可能的话，会从时钟服务器获得较好的估值。

**rtcsync** - rtcsync指令将启用一个内核模式，在该模式中，系统时间每11分钟会拷贝到实时时钟（RTC）。

**allow / deny** - 这里你可以指定一台主机、子网，或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。

```
allow 192.168.4.5
deny 192.168/16

```

**cmdallow / cmddeny** - 跟上面相类似，只是你可以指定哪个IP地址或哪台主机可以通过chronyd使用控制命令

**bindcmdaddress** - 该指令允许你限制chronyd监听哪个网络接口的命令包（由chronyc执行）。该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级。

```
bindcmdaddress 127.0.0.1
bindcmdaddress ::1

```

**makestep** - 通常，chronyd将根据需求通过减慢或加速时钟，使得系统逐步纠正所有时间偏差。在某些特定情况下，系统时钟可能会漂移过快，导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟，但只有在因为chronyd启动时间超过指定限制（可使用负值来禁用限制），没有更多时钟更新时才生效。

### 使用chronyc

你也可以通过运行chronyc命令来修改设置，命令如下：

**accheck** - 检查NTP访问是否对特定主机可用

**activity** - 该命令会显示有多少NTP源在线/离线

**add server** - 手动添加一台新的NTP服务器。

**clients** - 在客户端报告已访问到服务器

**delete** - 手动移除NTP服务器或对等服务器

**settime** - 手动设置守护进程时间

**tracking** - 显示系统时间信息

你可以通过使用帮助命令查看完整的命令列表：

---

via: <http://linoxide.com/linux-command/chrony-time-sync/>

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

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


使用 HAProxy 配置 HTTP 负载均衡器

Summary: 随着基于 Web 的应用和服务的增多，IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰，流量增大或者内部的挑战比如硬件的损坏或紧急维修，无论如何，你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付（CD）也可能威胁到你的 Web 服务的可靠性和性能的一致性。 不可预测，不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢？大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 HAProxy 配置 HTTP 负载均衡器。  什么是 HTTP 负载均衡？ HTTP 负载

@有道云笔记收藏

有些没用过的配置，留看

# 使用 HAProxy 配置 HTTP 负载均衡器

随着基于 Web 的应用和服务的增多，IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰，流量增大或者内部的挑战比如硬件的损坏或紧急维修，无论如何，你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付（CD）也可能威胁到你的 Web 服务的可靠性和性能的一致性。

不可预测，不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢？大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 [HAProxy](http://www.haproxy.org/) 配置 HTTP 负载均衡器。

### 什么是 HTTP 负载均衡？

HTTP 负载均衡是一个网络解决方案，它将进入的 HTTP 或 HTTPs 请求分配至一组提供相同的 Web 应用内容的服务器用于响应。通过将请求在这样的多个服务器间进行均衡，负载均衡器可以防止服务器出现单点故障，可以提升整体的可用性和响应速度。它还可以让你能够简单的通过添加或者移除服务器来进行横向扩展或收缩，对工作负载进行调整。

### 什么时候，什么情况下需要使用负载均衡？

负载均衡可以提升服务器的使用性能和最大可用性，当你的服务器开始出现高负载时就可以使用负载均衡。或者你在为一个大型项目设计架构时，在前端使用负载均衡是一个很好的习惯。当你的环境需要扩展的时候它会很有用。

### 什么是 HAProxy？

HAProxy 是一个流行的开源的 GNU/Linux 平台下的 TCP/HTTP 服务器的负载均衡和代理软件。HAProxy 是单线程，事件驱动架构，可以轻松的处理 [10 Gbps 速率](http://www.haproxy.org/10g.html) 的流量，在生产环境中被广泛的使用。它的功能包括自动健康状态检查，自定义负载均衡算法，HTTPS/SSL 支持，会话速率限制等等。

### 这个教程要实现怎样的负载均衡

在这个教程中，我们会为 HTTP Web 服务器配置一个基于 HAProxy 的负载均衡。

### 准备条件

你至少要有一台，或者最好是两台 Web 服务器来验证你的负载均衡的功能。我们假设后端的 HTTP Web 服务器已经配置好并[可以运行](http://linux.cn/article-1567-1.html)。

在 Linux 中安装 HAProxy
-------------------

对于大多数的发行版，我们可以使用发行版的包管理器来安装 HAProxy。

### 在 Debian 中安装 HAProxy

在 Debian Wheezy 中我们需要添加源，在 /etc/apt/sources.list.d 下创建一个文件 "backports.list" ，写入下面的内容

```
deb http://cdn.debian.net/debian wheezybackports main

```

刷新仓库的数据，并安装 HAProxy

```
# apt get update
# apt get install haproxy

```

### 在 Ubuntu 中安装 HAProxy

```
# apt get install haproxy

```

### 在 CentOS 和 RHEL 中安装 HAProxy

```
# yum install haproxy

```

配置 HAProxy
----------

本教程假设有两台运行的 HTTP Web 服务器，它们的 IP 地址是 192.168.100.2 和 192.168.100.3。我们将负载均衡配置在 192.168.100.4 的这台服务器上。

为了让 HAProxy 工作正常，你需要修改 /etc/haproxy/haproxy.cfg 中的一些选项。我们会在这一节中解释这些修改。一些配置可能因 GNU/Linux 发行版的不同而变化，这些会被标注出来。

### 1. 配置日志功能

你要做的第一件事是为 HAProxy 配置日志功能，在排错时日志将很有用。日志配置可以在 /etc/haproxy/haproxy.cfg 的 global 段中找到他们。下面是针对不同的 Linux 发型版的 HAProxy 日志配置。

#### CentOS 或 RHEL:

在 CentOS/RHEL中启用日志，将下面的：

```
log         127.0.0.1 local2

```

替换为：

```
log         127.0.0.1 local0

```

然后配置 HAProxy 在 /var/log 中的日志分割，我们需要修改当前的 rsyslog 配置。为了简洁和明了，我们在 /etc/rsyslog.d 下创建一个叫 haproxy.conf 的文件，添加下面的内容：

```
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info /var/log/haproxy.log;Haproxy
local0.notice /var/log/haproxystatus.log;Haproxy
local0.* ~

```

这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

```
# service rsyslog restart

```

#### Debian 或 Ubuntu:

在 Debian 或 Ubuntu 中启用日志，将下面的内容

```
log /dev/log        local0
log /dev/log        local1 notice

```

替换为：

```
log         127.0.0.1 local0

```

然后为 HAProxy 配置日志分割，编辑 /etc/rsyslog.d/ 下的 haproxy.conf （在 Debian 中可能叫 49-haproxy.conf），写入下面你的内容

```
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info /var/log/haproxy.log;Haproxy
local0.notice /var/log/haproxystatus.log;Haproxy
local0.* ~

```

这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。

```
 # service rsyslog restart

```

### 2. 设置默认选项

下一步是设置 HAProxy 的默认选项。在 /etc/haproxy/haproxy.cfg 的 default 段中，替换为下面的配置：

```
    defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
    maxconn 20000
    contimeout      5000
    clitimeout      50000
    srvtimeout      50000

```

上面的配置是当 HAProxy 为 HTTP 负载均衡时建议使用的，但是并不一定是你的环境的最优方案。你可以自己研究 HAProxy 的手册并配置它。

### 3. Web 集群配置

Web 集群配置定义了一组可用的 HTTP 服务器。我们的负载均衡中的大多数设置都在这里。现在我们会创建一些基本配置，定义我们的节点。将配置文件中从 frontend 段开始的内容全部替换为下面的：

```
listen webfarm *:80
       mode http
       stats enable
       stats uri /haproxy?stats
       stats realm Haproxy\ Statistics
       stats auth haproxy:stats
       balance roundrobin
       cookie LBN insert indirect nocache
       option httpclose
       option forwardfor
       server web01 192.168.100.2:80 cookie node1 check
       server web02 192.168.100.3:80 cookie node2 check

```

"listen webfarm \*:80" 定义了负载均衡器监听的地址和端口。为了教程的需要，我设置为 "\*" 表示监听在所有接口上。在真实的场景汇总，这样设置可能不太合适，应该替换为可以从 internet 访问的那个网卡接口。

```
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth haproxy:stats

```

上面的设置定义了，负载均衡器的状态统计信息可以通过 http://<load-balancer-IP>/haproxy?stats 访问。访问需要简单的 HTTP 认证，用户名为 "haproxy" 密码为 "stats"。这些设置可以替换为你自己的认证方式。如果你不需要状态统计信息，可以完全禁用掉。

下面是一个 HAProxy 统计信息的例子

"balance roundrobin" 这一行表明我们使用的负载均衡类型。这个教程中，我们使用简单的轮询算法，可以完全满足 HTTP 负载均衡的需要。HAProxy 还提供其他的负载均衡类型：

* **leastconn**：将请求调度至连接数最少的服务器
* **source**：对请求的客户端 IP 地址进行哈希计算，根据哈希值和服务器的权重将请求调度至后端服务器。
* **uri**：对 URI 的左半部分（问号之前的部分）进行哈希，根据哈希结果和服务器的权重对请求进行调度
* **url\_param**：根据每个 HTTP GET 请求的 URL 查询参数进行调度，使用固定的请求参数将会被调度至指定的服务器上
* **hdr(name**)：根据 HTTP 首部中的 <name> 字段来进行调度

"cookie LBN insert indirect nocache" 这一行表示我们的负载均衡器会存储 cookie 信息，可以将后端服务器池中的节点与某个特定会话绑定。节点的 cookie 存储为一个自定义的名字。这里，我们使用的是 "LBN"，你可以指定其他的名称。后端节点会保存这个 cookie 的会话。

```
server web01 192.168.100.2:80 cookie node1 check
server web02 192.168.100.3:80 cookie node2 check

```

上面是我们的 Web 服务器节点的定义。服务器有由内部名称（如web01，web02），IP 地址和唯一的 cookie 字符串表示。cookie 字符串可以自定义，我这里使用的是简单的 node1，node2 ... node(n)

启动 HAProxy
----------

如果你完成了配置，现在启动 HAProxy 并验证是否运行正常。

### 在 Centos/RHEL 中启动 HAProxy

让 HAProxy 开机自启，使用下面的命令

```
# chkconfig haproxy on
# service haproxy start

```

当然，防火墙需要开放 80 端口，像下面这样

#### CentOS/RHEL 7 的防火墙

```
# firewallcmd permanent zone=public addport=80/tcp
# firewallcmd reload

```

#### CentOS/RHEL 6 的防火墙

把下面内容加至 /etc/sysconfig/iptables 中的 ":OUTPUT ACCEPT" 段中

```
A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT

```

重启**iptables**：

```
# service iptables restart

```

### 在 Debian 中启动 HAProxy

启动 HAProxy

```
# service haproxy start

```

不要忘了防火墙开放 80 端口，在 /etc/iptables.up.rules 中加入：

```
A INPUT p tcp dport 80 j ACCEPT

```

### 在 Ubuntu 中启动HAProxy

让 HAProxy 开机自动启动在 /etc/default/haproxy 中配置

```
ENABLED=1

```

启动 HAProxy：

```
# service haproxy start

```

防火墙开放 80 端口：

```
# ufw allow 80

```

测试 HAProxy
----------

检查 HAProxy 是否工作正常，我们可以这样做

首先准备一个 test.php 文件，文件内容如下

```
<?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?>

```

这个 PHP 文件会告诉我们哪台服务器（如负载均衡）转发了请求，哪台后端 Web 服务器实际处理了请求。

将这个 PHP 文件放到两个后端 Web 服务器的 Web 根目录中。然后用 curl 命令通过负载均衡器（192.168.100.4）访问这个文件

```
$ curl http://192.168.100.4/test.php

```

我们多次运行这个命令此时，会发现交替的输出下面的内容（因为使用了轮询算法）：

```
Server IP: 192.168.100.2
X-Forwarded-for: 192.168.100.4

```

---

```
Server IP: 192.168.100.3
X-Forwarded-for: 192.168.100.4

```

如果我们停掉一台后端 Web 服务，curl 命令仍然正常工作，请求被分发至另一台可用的 Web 服务器。

总结
--

现在你有了一个完全可用的负载均衡器，以轮询的模式对你的 Web 节点进行负载均衡。还可以去实验其他的配置选项以适应你的环境。希望这个教程可以帮助你们的 Web 项目有更好的可用性。

你可能已经发现了，这个教程只包含单台负载均衡的设置。这意味着我们仍然有单点故障的问题。在真实场景中，你应该至少部署 2 台或者 3 台负载均衡以防止意外发生，但这不是本教程的范围。

如果你有任何问题或建议，请在评论中提出，我会尽我的努力回答。

---

via: <http://xmodulo.com/haproxy-http-load-balancer-linux.html>

作者：[Jaroslav Štěpánek](http://xmodulo.com/author/jaroslav) 译者：[Liao](https://github.com/liaoishere) 校对：[wxy](https://github.com/wxy)

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


交友网站的2000万用户数据遭泄露

Summary: 一名黑客非法窃取了在线交友网站Topface一个包含2000万用户资料的数据库。目前并不清楚这些数据是否已经公开，但是根据某些未公开页面的消息说，某个网名为“Mastermind”的人声称掌握着这些数据。泄露数据列表涵盖了全世界数百个域名

国外的交友网站啊

现在的交友网站是越来越不安全了。但我还是想上。、

对此最好的防范方法是：找个对象……

# 交友网站的2000万用户数据遭泄露

*泄露数据包括Gmail、Hotmail以及Yahoo邮箱*

[](https://camo.githubusercontent.com/1408b552c16bec14fabb3420af3533a10a402ef3/687474703a2f2f69312d6e6577732e736f667470656469612d7374617469632e636f6d2f696d616765732f6e657773322f446174612d6f662d32302d4d696c6c696f6e2d55736572732d53746f6c656e2d66726f6d2d446174696e672d576562736974652d3437313137392d322e6a7067)

### 一名黑客非法窃取了在线交友网站Topface一个包含2000万用户资料的数据库。

目前并不清楚这些数据是否已经公开，但是根据某些未公开页面的消息说，某个网名为“Mastermind”的人声称掌握着这些数据。

### 泄露数据列表涵盖了全世界数百个域名

此人号称泄露数据的内容100%真实有效，而Easy Solutions的CTO，Daniel Ingevaldson 周日在一篇博客中说道，泄露数据包括Hotmail、Yahoo和Gmail等邮箱地址。

Easy Solutions是一家位于美国的公司，提供多个不同平台的网络检测与安全防护产品。

据Ingevaldson所说，泄露的数据中，700万来自于Hotmail，250万来自于Yahoo，220万来自于Gmail.com。

我们并不清楚这些数据是可以直接登录邮箱账户的用户名和密码，还是登录交友网站的账户。另外，也不清楚这些数据在数据库中是加密状态还是明文存在的。

邮箱地址常常被用于在线网站的登录用户名，用户可以凭借唯一密码进行登录。然而重复使用同一个密码是许多用户的常用作法，同一个密码可以登录许多在线账户。

[Ingevaldson 还说](https://github.com/LCTT/TranslateProject/blob/master/translated/news/1)：“看起来，这些数据事实上涵盖了全世界数百个域名。除了原始被黑的网页，黑客和不法分子很可能利用窃取的帐密进行暴库、自动扫描、危害包括银行业、旅游业以及email提供商在内的多个网站。”

### 预计将披露更多信息

据我们的多个消息源爆料，数据的泄露源就是Topface，一个包含9000万用户的在线交友网站。其总部位于俄罗斯圣彼得堡，超过50%的用户来自于俄罗斯以外的国家。

我们联系了Topface，向他们求证最近是否遭受了可能导致如此大量数据泄露的网络攻击；但目前我们仍未收到该公司的回复。

攻击者可能无需获得非法访问权限就窃取了这些数据，Easy Solutions 推测攻击者很可能针对网站客户端使用钓鱼邮件直接获取到了用户数据。

我们无法通过Easy Solutions的在线网站联系到他们，但我们已经尝试了其他交互通讯方式，目前正在等待更多信息的披露。

---

via:<http://news.softpedia.com/news/Data-of-20-Million-Users-Stolen-from-Dating-Website-471179.shtml>

发布时间:26 Jan 2015, 10:20 GMT

作者：[Ionut Ilascu](http://news.softpedia.com/editors/browse/ionut-ilascu) 译者：[Mr小眼儿](https://github.com/tinyeyeser) 校对：[Caroline](https://github.com/carolinewuyan)

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


Docker 的现状与未来

Summary: Docker - 迄今为止发生的那些事情 Docker 是一个专为 Linux 容器而设计的工具集，用于构建、交付和运行分布式应用。它最初是 DotCloud 的一个开源项目，于2013年3月发布。这个项目越来越受欢迎，以至于 DotCloud 公司都更名为 Docker 公司（并最终出售了原有的 PaaS 业务)。Docker 1.0是在2014年6月发布的，而且延续了之前每月更新一个版本的传统。 Docker 1.0版本的发布标志着 Docker 公司认为该平台已经充分成熟，足以用于生产环境中（由该公司与合作伙伴提供付费支持选择）。每个月发布的更新表明该项目正在迅速发展，比如增添一些新特

赞

好产品往往是随着刚需浮出水面的，而不是凭空拍脑袋想出来的。

刚需 //@特价萝卜：好产品往往是随着刚需浮出水面的，而不是凭空拍脑袋想出来的。

//@特价萝卜:好产品往往是随着刚需浮出水面的，而不是凭空拍脑袋想出来的。

Docker 到底是用来干嘛呢，那玩意到底有什么用呢，最开始开发她是为了什么

# Docker 的现状与未来

### Docker - 迄今为止发生的那些事情

Docker 是一个专为 Linux 容器而设计的工具集，用于‘构建、交付和运行’分布式应用。它最初是 DotCloud 的一个开源项目，于2013年3月发布。这个项目越来越受欢迎，以至于 DotCloud 公司都更名为 Docker 公司（并最终[出售了原有的 PaaS 业务](http://blog.dotcloud.com/dotcloud-paas-joins-cloudcontrol))。[Docker 1.0](http://www.infoq.com/news/2014/06/docker_1.0)是在2014年6月发布的，而且延续了之前每月更新一个版本的传统。

Docker 1.0版本的发布标志着 Docker 公司认为该平台已经充分成熟，足以用于生产环境中（由该公司与合作伙伴提供付费支持选择）。每个月发布的更新表明该项目正在迅速发展，比如增添一些新特性、解决一些他们发现的问题。该项目已经成功地分离了‘运行’和‘交付’两件事，所以来自任何版本的 Docker 镜像源都可以与其它版本共同使用（具备向前和向后兼容的特性），这为 Docker 应对快速变化提供了稳定的保障。

Docker 之所以能够成为最受欢迎的开源项目之一可能会被很多人看做是炒作，但是也是由其坚实的基础所决定的。Docker 的影响力已经得到整个行业许多大企业的支持，包括亚马逊, Canonical 公司, CenturyLink, 谷歌, IBM, 微软, New Relic, Pivotal, 红帽和 VMware。这使得只要有 Linux 的地方，Docker 就可以无处不在。除了这些鼎鼎有名的大公司以外，许多初创公司也在围绕着 Docker 发展，或者改变他们的发展方向来与 Docker 更好地结合起来。这些合作伙伴们（无论大或小）都将帮助推动 Docker 核心项目及其周边生态环境的快速发展。

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

### Docker 技术简要综述

Docker 利用 Linux 的一些内核机制例如 [cGroups](https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt)、命名空间和 [SElinux](http://selinuxproject.org/page/Main_Page) 来实现容器之间的隔离。起初 Docker 只是 [LXC](https://linuxcontainers.org/) 容器管理器子系统的前端，但是在 0.9 版本中引入了 [libcontainer](http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/)，这是一个原生的 go 语言库，提供了用户空间和内核之间的接口。

容器是基于 [AUFS](http://aufs.sourceforge.net/aufs.html) 这样的联合文件系统的，它允许跨多个容器共享组件，如操作系统镜像和已安装的相关库。这种文件系统的分层方法也被 [Dockerfile](https://docs.docker.com/reference/builder/) 的 DevOps 工具所利用，这些工具能够缓存成功完成的操作。这就省下了安装操作系统和相关应用程序依赖包的时间，极大地加速测试周期。另外，在容器之间的共享库也能够减少内存的占用。

一个容器是从一个镜像开始运行的，它可以来自本地创建，本地缓存，或者从一个注册库（registry）下载。Docker 公司运营的 [Docker Hub 公有注册库](https://registry.hub.docker.com/)，为各种操作系统、中间件和数据库提供了官方仓库存储。各个组织和个人都可以在 docker Hub 上发布的镜像的公有库，也可以注册成私有仓库。由于上传的镜像可以包含几乎任何内容，所以 Docker 提供了一种自动构建工具（以往称为“可信构建”），镜像可以从一种称之为 Dockerfile 的镜像内容清单构建而成。

### 容器 vs. 虚拟机

容器会比虚拟机更高效，因为它们能够分享一个内核和分享应用程序库。相比虚拟机系统，这也将使得 Docker 使用的内存更小，即便虚拟机利用了内存超量使用的技术。部署容器时共享底层的镜像层也可以减少存储占用。IBM 的 Boden Russel 已经做了一些[基准测试](http://bodenr.blogspot.co.uk/2014/05/kvm-and-docker-lxc-benchmarking-with.html?m=1)来说明两者之间的不同。

相比虚拟机系统，容器具有较低系统开销的优势，所以在容器中，应用程序的运行效率将会等效于在同样的应用程序在虚拟机中运行，甚至效果更佳。IBM 的一个研究团队已经发表了一本名为[虚拟机与 Linux 容器的性能比较]的文章[11](http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf)。

容器只是在隔离特性上要比虚拟机逊色。虚拟机可以利用如 Intel 的 VT-d 和 VT-x 技术的 ring-1 [硬件隔离](https://en.wikipedia.org/wiki/X86_virtualization#Hardware-assisted_virtualization)技术。这种隔离可以防止虚拟机突破和彼此交互。而容器至今还没有任何形式的硬件隔离，这使它容易受到攻击。一个称为 [Shocker](http://stealth.openwall.net/xSports/shocker.c) 的概念攻击验证表明，在 Docker 1.0 之前的版本是存在这种脆弱性的。尽管 Docker 1.0 修复了许多由 Shocker 漏洞带来的较为严重的问题，Docker 的 CTO Solomon Hykes 仍然[说](https://news.ycombinator.com/item?id=7910117)，“当我们可以放心宣称 Docker 的开箱即用是安全的，即便是不可信的 uid0 程序（超级用户权限程序），我们将会很明确地告诉大家。”Hykes 的声明承认，其漏洞及相关的风险依旧存在，所以在容器成为受信任的工具之前将有更多的工作要做。

对于许多用户案例而言，在容器和虚拟机之间二者选择其一是种错误的二分法。Docker 同样可以在虚拟机中工作的很好，这让它可以用在现有的虚拟基础措施、私有云或者公有云中。同样也可以在容器里跑虚拟机，这也类似于谷歌在其云平台的使用方式。像 IaaS 服务这样普遍可用的基础设施，能够即时提供所需的虚拟机，可以预期容器与虚拟机一起使用的情景将会在数年后出现。容器管理和虚拟机技术也有可能被集成到一起提供一个两全其美的方案；这样，一个硬件信任锚微虚拟化所支撑的 libcontainer 容器，可与前端 Docker 工具链和生态系统整合，而使用提供更好隔离性的不同后端。微虚拟化（例如 Bromium 的 [vSentry](http://www.bromium.com/products/vsentry.html) 和 VMware 的 [Project Fargo](http://cto.vmware.com/vmware-docker-better-together/))已经用于在桌面环境中以提供基于硬件的应用程序隔离，所以类似的方法也可以用于 libcontainer，作为 Linux内核中的容器机制的替代技术。

### ‘容器化’ 的应用程序

几乎所有 Linux 应用程序都可以在 Docker 容器中运行，并没有编程语言或框架的限制。唯一的实际限制是以操作系统的角度来允许容器做什么。即使如此，也可以在特权模式下运行容器，从而大大减少了限制（与之对应的是容器中的应用程序的风险增加，可能导致损坏主机操作系统）。

容器都是从镜像开始运行的，而镜像也可以从运行中的容器获取。本质上说，有两种方法可以将应用程序放到容器中，分别是手动构建和 Dockerfile。

#### 手动构建

手动构建从启动一个基础的操作系统镜像开始，然后在交互式终端中用你所选的 Linux 提供的包管理器安装应用程序及其依赖项。Zef Hemel 在‘[使用 Linux 容器来支持便携式应用程序部署](http://www.infoq.com/articles/docker-containers)’的文章中讲述了他部署的过程。一旦应用程序被安装之后，容器就可以被推送至注册库（例如Docker Hub）或者导出为一个tar文件。

#### Dockerfile

Dockerfile 是一个用于构建 Docker 容器的脚本化系统。每一个 Dockerfile 定义了开始的基础镜像，以及一系列在容器中运行的命令或者一些被添加到容器中的文件。Dockerfile 也可以指定对外的端口和当前工作目录，以及容器启动时默认执行的命令。用 Dockerfile 构建的容器可以像手工构建的镜像一样推送或导出。Dockerfile 也可以用于 Docker Hub 的自动构建系统，即在 Docker 公司的控制下从头构建，并且该镜像的源代码是任何需要使用它的人可见的。

#### 单进程?

无论镜像是手动构建还是通过 Dockerfile 构建，有一个要考虑的关键因素是当容器启动时仅启动一个进程。对于一个单一用途的容器，例如运行一个应用服务器，运行一个单一的进程不是一个问题（有些关于容器应该只有一个单独的进程的争议）。对于一些容器需要启动多个进程的情况，必须先启动 [supervisor](http://docs.docker.com/articles/using_supervisord/) 进程，才能生成其它内部所需的进程。由于容器内没有初始化系统，所以任何依赖于 systemd、upstart 或类似初始化系统的东西不修改是无法工作的。

### 容器和微服务

全面介绍使用微服务结构体系的原理和好处已经超出了这篇文章的范畴（在 [InfoQ eMag: Microservices](http://www.infoq.com/minibooks/emag-microservices) 有全面阐述）。然而容器是绑定和部署微服务实例的捷径。

大规模微服务部署的多数案例都是部署在虚拟机上，容器只是用于较小规模的部署上。容器具有共享操作系统和公用库的的内存和硬盘存储的能力，这也意味着它可以非常有效的并行部署多个版本的服务。

### 连接容器

一些小的应用程序适合放在单独的容器中，但在许多案例中应用程序需要分布在多个容器中。Docker 的成功包括催生了一连串新的应用程序组合工具、编制工具及平台作为服务(PaaS)的实现。在这些努力的背后，是希望简化从一组相互连接的容器来创建应用的过程。很多工具也在扩展、容错、性能管理以及对已部署资产进行版本控制方面提供了帮助。

#### 连通性

Docker 的网络功能是相当原始的。在同一主机，容器内的服务可以互相访问，而且 Docker 也可以通过端口映射到主机操作系统，使服务可以通过网络访问。官方支持的提供连接能力的库叫做 [libchan](https://github.com/docker/libchan)，这是一个提供给 Go 语言的网络服务库，类似于[channels](https://gobyexample.com/channels)。在 libchan 找到进入应用的方法之前，第三方应用仍然有很大空间可提供配套的网络服务。例如，[Flocker](http://www.infoq.com/news/2014/08/clusterhq-launch-flocker) 已经采取了基于代理的方法使服务实现跨主机（以及底层存储）的移植。

#### 合成

Docker 本身拥有把容器连接在一起的机制，与元数据相关的依赖项可以被传递到相依赖的容器中，并用于环境变量和主机入口。如 [Fig](http://www.fig.sh/) 和 [geard](http://openshift.github.io/geard/) 这样的应用合成工具可以在单一文件中展示出这种依赖关系图，这样多个容器就可以汇聚成一个连贯的系统。CenturyLink 公司的 [Panamax](http://panamax.io/) 合成工具类似 Fig 和 geard 的底层实现方法，但新增了一些基于 web 的用户接口，并直接与 GitHub 相结合，以便于应用程序分享。

#### 编制

像 [Decking](http://decking.io/)、New Relic 公司的 [Centurion](https://github.com/newrelic/centurion) 和谷歌公司的 [Kubernetes](https://github.com/GoogleCloudPlatform/kubernetes) 这样的编制系统都是旨在协助容器的部署和管理其生命周期系统。也有许多 [Apache Mesos](http://mesos.apache.org/) （特别是 [Marathon（马拉松式）持续运行很久的框架]）的案例（例如[Mesosphere](https://mesosphere.io/2013/09/26/docker-on-mesos/)）已经被用于配合 Docker 一起使用。通过为应用程序与底层基础架构之间（例如传递 CPU 核数和内存的需求）提供一个抽象的模型，编制工具提供了两者的解耦，简化了应用程序开发和数据中心操作。有很多各种各样的编制系统，因为许多来自内部系统的以前开发的用于大规模容器部署的工具浮现出来了；如 Kubernetes 是基于谷歌的 [Omega](http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/41684.pdf) 系统的，[Omega](http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/41684.pdf) 是用于管理遍布谷歌云环境中容器的系统。

虽然从某种程度上来说合成工具和编制工具的功能存在重叠，但这也是它们之间互补的一种方式。例如 Fig 可以被用于描述容器间如何实现功能交互，而 Kubernetes pods（容器组）可用于提供监控和扩展。

#### 平台（即服务）

有一些 Docker 原生的 PaaS 服务实现，例如 [Deis](http://deis.io/) 和 [Flynn](https://flynn.io/) 已经显现出 Linux 容器在开发上的的灵活性（而不是那些“自以为是”的给出一套语言和框架）。其它平台，例如 CloudFoundry、OpenShift 和 Apcera Continuum 都已经采取将 Docker 基础功能融入其现有的系统的技术路线，这样基于 Docker 镜像（或者基于 Dockerfile）的应用程序也可以与之前用支持的语言和框架的开发的应用一同部署和管理。

### 所有的云

由于 Docker 能够运行在任何正常更新内核的 Linux 虚拟机中，它几乎可以用在所有提供 IaaS 服务的云上。大多数的主流云厂商已经宣布提供对 Docker 及其生态系统的支持。

亚马逊已经把 Docker 引入它们的 Elastic Beanstalk 系统（这是在底层 IaaS 上的一个编制系统）。谷歌使 Docker 成为了“可管理的 VM”，它提供了GAE PaaS 和GCE IaaS 之间的中转站。微软和 IBM 也都已经宣布了基于 Kubernetes 的服务，这样可以在它们的云上部署和管理多容器应用程序。

为了给现有种类繁多的后端提供可用的一致接口，Docker 团队已经引进 [libswarm](https://github.com/docker/libswarm), 它可以集成于众多的云和资源管理系统。Libswarm 所阐明的目标之一是“通过切换服务来源避免被特定供应商套牢”。这是通过呈现一组一致的服务（与API相关联的）来完成的，该服务会通过特定的后端服务所实现。例如 Docker 服务器将支持本地 Docker 命令行工具的 Docker 远程 API 调用，这样就可以管理一组服务供应商的容器了。

基于 Docker 的新服务类型仍在起步阶段。总部位于伦敦的 Orchard 实验室提供了 Docker 的托管服务，但是 Docker 公司表示，收购 Orchard 后，其相关服务不会置于优先位置。Docker 公司也出售了之前 DotCloud 的PaaS 业务给 cloudControl。基于更早的容器管理系统的服务例如 [OpenVZ](http://openvz.org/Main_Page) 已经司空见惯了，所以在一定程度上 Docker 需要向主机托管商们证明其价值。

### Docker 及其发行版

Docker 已经成为大多数 Linux 发行版例如 Ubuntu、Red Hat 企业版（RHEL)和 CentOS 的一个标准功能。遗憾的是这些发行版的步调和 Docker 项目并不一致，所以在发布版中找到的版本总是远远落后于最新版本。例如 Ubuntu 14.04 版本中的版本是 Docker 0.9.1，而当 Ubuntu 升级至 14.04.1 时 Docker 版本并没有随之升级（此时 Docker 已经升至 1.1.2 版本）。在发行版的软件仓库中还有一个名字空间的冲突，因为 “Docker” 也是 KDE 系统托盘的名字；所以在 Ubuntu 14.04 版本中相关安装包的名字和命令行工具都是使用“Docker.io”的名字。

在企业级 Linux 的世界中，情况也并没有因此而不同。CentOS 7 中的 Docker 版本是 0.11.1，这是 Docker 公司宣布准备发行 Docker 1.0 产品版本之前的开发版。Linux 发行版用户如果希望使用最新版本以保障其稳定、性能和安全，那么最好地按照 Docker 的[安装说明](https://docs.docker.com/installation/#installation)进行，使用 Docker 公司的所提供的软件库而不是采用发行版的。

Docker 的到来也催生了新的 Linux 发行版，如 [CoreOS](https://coreos.com/) 和红帽的 [Project Atomic](http://www.projectatomic.io/)，它们被设计为能运行容器的最小环境。这些发布版相比传统的发行版，带着更新的内核及 Docker 版本，对内存的使用和硬盘占用率也更低。新发行版也配备了用于大型部署的新工具，例如 [fleet](https://github.com/coreos/fleet)（一个分布式初始化系统）和[etcd](https://github.com/coreos/etcd)（用于元数据管理）。这些发行版也有新的自我更新机制，以便可以使用最新的内核和 Docker。这也意味着使用 Docker 的影响之一是它抛开了对发行版和相关的包管理解决方案的关注，而对 Linux 内核（及使用它的 Docker 子系统）更加关注。

这些新发行版也许是运行 Docker 的最好方式，但是传统的发行版和它们的包管理器对容器来说仍然是非常重要的。Docker Hub 托管的官方镜像有 Debian、Ubuntu 和 CentOS，以及一个‘半官方’的 Fedora 镜像库。RHEL 镜像在Docker Hub 中不可用，因为它是 Red Hat 直接发布的。这意味着在 Docker Hub 的自动构建机制仅仅用于那些纯开源发行版下（并愿意信任那些源于 Docker 公司团队提供的基础镜像）。

Docker Hub 集成了如 Git Hub 和 Bitbucket 这样源代码控制系统来自动构建包管理器，用于管理构建过程中创建的构建规范（在Dockerfile中）和生成的镜像之间的复杂关系。构建过程的不确定结果并非是 Docker 的特定问题——而与软件包管理器如何工作有关。今天构建完成的是一个版本，明天构建的可能就是更新的版本，这就是为什么软件包管理器需要升级的原因。容器抽象（较少关注容器中的内容）以及容器扩展（因为轻量级资源利用率）有可能让这种不确定性成为 Docker 的痛点。

### Docker 的未来

Docker 公司对核心功能（libcontainer），跨服务管理(libswarm) 和容器间的信息传递（libchan）的发展上提出了明确的路线。与此同时，该公司已经表明愿意收购 Orchard 实验室，将其纳入自身生态系统。然而 Docker 不仅仅是 Docker 公司的，这个项目的贡献者也来自许多大牌贡献者，其中不乏像谷歌、IBM 和 Red Hat 这样的大公司。在仁慈独裁者、CTO Solomon Hykes 掌舵的形势下，为公司和项目明确了技术领导关系。在前18个月的项目中通过成果输出展现了其快速行动的能力，而且这种趋势并没有减弱的迹象。

许多投资者正在寻找10年前 VMware 公司的 ESX/vSphere 平台的特征矩阵，并试图找出虚拟机的普及而带动的企业预期和当前 Docker 生态系统两者的距离（和机会）。目前 Docker 生态系统正缺乏类似网络、存储和（对于容器的内容的）细粒度版本管理，这些都为初创企业和创业者提供了机会。

随着时间的推移，在虚拟机和容器（Docker 的“运行”部分）之间的区别将变得没那么重要了，而关注点将会转移到“构建”和“交付”方面。这些变化将会使“Docker发生什么？”变得不如“Docker将会给IT产业带来什么？”那么重要了。

---

via: <http://www.infoq.com/articles/docker-future>

作者：[Chris Swan](http://www.infoq.com/author/Chris-Swan) 译者：[disylee](https://github.com/disylee) 校对：[wxy](https://github.com/wxy)

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