使用火焰图分析CPU性能回退问题

Summary: 你能快速定位CPU性能回退的问题么？ 如果你的工作环境非常复杂且变化快速，那么使用现有的工具是来定位这类问题是很具有挑战性的。当你花掉数周时间把根因找到时，代码已经又变更了好几轮，新的性能问题又冒了出来。 幸亏有了CPU火焰图（flame graphs），CPU使用率的问题一般都比较好定位。但要处理性能回退问题，就要在修改前后的火焰图之间，不断切换对比，来找出问题所在，这感觉就是像在太阳系中搜寻冥王星。虽然，这种方法可以解决问题，但我觉得应该会有更好的办法。 所以，下面就隆重介绍红/蓝差分火焰图（red/blue differential f

码了看

不明觉厉

说实话，主页君也不觉明历。。。所以特别佩服这篇文章的译者。

你能快速定位CPU性能回退的问题么？ 如果你的工作环境非常复杂且变化快速，那么使用现有的工具是来定位这类问题是很具有挑战性的。当你花掉数周时间把根因找到时，代码已经又变更了好几轮，新的性能问题又冒了出来。

幸亏有了[CPU火焰图](http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html)（flame graphs），CPU使用率的问题一般都比较好定位。但要处理性能回退问题，就要在修改前后的火焰图之间，不断切换对比，来找出问题所在，这感觉就是像在太阳系中搜寻冥王星。虽然，这种方法可以解决问题，但我觉得应该会有更好的办法。

![](/data/attachment/album/201501/14/225612n3z2m4m7pku35pm3.jpg)

所以，下面就隆重介绍**红/蓝差分火焰图（red/blue differential flame graphs）**：

![](/blog/images/2014/zfs-flamegraph-diff.svg)

上面是一副交互式SVG格式图片（[链接](http://www.brendangregg.com/blog/images/2014/zfs-flamegraph-diff.svg)）。图中使用了两种颜色来表示状态，**红色表示增长**，**蓝色表示衰减**。

这张火焰图中各火焰的形状和大小都是和第二次抓取的profile文件对应的CPU火焰图是相同的。（其中，y轴表示栈的深度，x轴表示样本的总数，栈帧的宽度表示了profile文件中该函数出现的比例，最顶层表示正在运行的函数，再往下就是调用它的栈）

在下面这个案例展示了，在系统升级后，一个工作载荷的CPU使用率上升了。 下面是对应的CPU火焰图（[SVG格式](http://www.brendangregg.com/blog/images/2014/zfs-flamegraph-after.svg)）

![](/blog/images/2014/zfs-flamegraph-after.svg)

通常，在标准的火焰图中栈帧和栈塔的颜色是随机选择的。 而在红/蓝差分火焰图中，使用不同的颜色来表示两个profile文件中的差异部分。

在第二个profile中deflate\_slow()函数以及它后续调用的函数运行的次数要比前一次更多，所以在上图中这个栈帧被标为了红色。可以看出问题的原因是ZFS的压缩功能被启用了，而在系统升级前这项功能是关闭的。

这个例子过于简单，我甚至可以不用差分火焰图也能分析出来。但想象一下，如果是在分析一个微小的性能下降，比如说小于5%，而且代码也更加复杂的时候，问题就为那么好处理了。

### 红/蓝差分火焰图

这个事情我已经讨论了好几年了，最终我自己编写了一个我个人认为有价值的实现。它的工作原理是这样的：

1. 抓取修改前的堆栈profile1文件
2. 抓取修改后的堆栈profile2文件
3. 使用profile2来生成火焰图。（这样栈帧的宽度就是以profile2文件为基准的）
4. 使用“2 - 1”的差异来对火焰图重新上色。上色的原则是，如果栈帧在profile2中出现出现的次数更多，则标为红色，否则标为蓝色。色彩是根据修改前后的差异来填充的。

这样做的目的是，同时使用了修改前后的profile文件进行对比，在进行功能验证测试或者评估代码修改对性能的影响时，会非常有用。新的火焰图是基于修改后的profile文件生成（所以栈帧的宽度仍然显示了当前的CPU消耗），通过颜色的对比，就可以了解到系统性能差异的原因。

只有对性能产生直接影响的函数才会标注颜色（比如说，正在运行的函数），它所调用的子函数不会重复标注。

### 生成红/蓝差分火焰图

我已经把一个简单的代码实现推送到github上（见[火焰图](https://github.com/brendangregg/FlameGraph)），其中新增了一个程序脚本，difffolded.pl。为了展示工具是如何工作的，用Linux [perf\_events](http://www.brendangregg.com/perf.html) 来演示一下操作步骤。（你也可以使用其他profiler）

#### 抓取修改前的profile 1文件:

```
# perf record -F 99 -a -g -- sleep 30
# perf script > out.stacks1

```

#### 一段时间后 (或者程序代码修改后), 抓取profile 2文件:

```
# perf record -F 99 -a -g -- sleep 30
# perf script > out.stacks2

```

#### 现在将 profile 文件进行折叠（fold）, 再生成差分火焰图:

```
$ git clone --depth 1 http://github.com/brendangregg/FlameGraph
$ cd FlameGraph
$ ./stackcollapse-perf.pl ../out.stacks1 > out.folded1
$ ./stackcollapse-perf.pl ../out.stacks2 > out.folded2
$ ./difffolded.pl out.folded1 out.folded2 | ./flamegraph.pl > diff2.svg

```

difffolded.p只能对“折叠”过的堆栈profile文件进行操作，折叠操作是由前面的stackcollapse系列脚本完成的。（见链接[火焰图](https://github.com/brendangregg/FlameGraph)）。 脚本共输出3列数据，其中一列代表折叠的调用栈，另两列为修改前后profile文件的统计数据。

```
func_a;func_b;func_c 31 33
[...]

```

在上面的例子中"func*a()->func*b()->func\_c()" 代表调用栈，这个调用栈在profile1文件中共出现了31次，在profile2文件中共出现了33次。然后，使用flamegraph.pl脚本处理这3列数据，会自动生成一张红/蓝差分火焰图。

### 其他选项

再介绍一些有用的选项：

**difffolded.pl -n**：这个选项会把两个profile文件中的数据规范化，使其能相互匹配上。如果你不这样做，抓取到所有栈的统计值肯定会不相同，因为抓取的时间和CPU负载都不同。这样的话，看上去要么就是一片红（负载增加），要么就是一片蓝（负载下降）。-n选项对第一个profile文件进行了平衡，这样你就可以得到完整红/蓝图谱。

**difffolded.pl -x**: 这个选项会把16进制的地址删掉。 profiler时常会无法将地址转换为符号，这样的话栈里就会有16进制地址。如果这个地址在两个profile文件中不同，这两个栈就会认为是不同的栈，而实际上它们是相同的。遇到这样的问题就用-x选项搞定。

**flamegraph.pl --negate**: 用于颠倒红/蓝配色。 在下面的章节中，会用到这个功能。

### 不足之处

虽然我的红/蓝差分火焰图很有用，但实际上还是有一个问题：如果一个代码执行路径完全消失了，那么在火焰图中就找不到地方来标注蓝色。你只能看到当前的CPU使用情况，而不知道为什么会变成这样。

一个办法是，将对比顺序颠倒，画一个相反的差分火焰图。例如：

![](/blog/images/2014/zfs-flamegraph-negated.svg)

上面的火焰图是以修改前的profile文件为基准，颜色表达了将要发生的情况。右边使用蓝色高亮显示的部分，从中可以看出修改后CPU Idle消耗的CPU时间会变少。（其实，我通常会把cpu*idle给过滤掉，使用命令行grep -v cpu*idle）

图中把消失的代码也突显了出来（或者应该是说，没有突显），因为修改前并没有使能压缩功能，所以它没有出现在修改前的profile文件了，也就没有了被表为红色的部分。

下面是对应的命令行：

```
$ ./difffolded.pl out.folded2 out.folded1 | ./flamegraph.pl --negate > diff1.svg

```

这样，把前面生成diff2.svg一并使用，我们就能得到：

* **diff1.svg**: 宽度是以修改前profile文件为基准，颜色表明将要发生的情况
* **diff2.svg**: 宽度是以修改后profile文件为基准，颜色表明已经发生的情况

如果是在做功能验证测试，我会同时生成这两张图。

### CPI 火焰图

这些脚本开始是被使用在[CPI火焰图](http://www.brendangregg.com/blog/2014-10-31/cpi-flame-graphs.html)的分析上。与比较修改前后的profile文件不同，在分析CPI火焰图时，可以分析CPU工作周期与停顿周期的差异变化，这样可以凸显出CPU的工作状态来。

### 其他的差分火焰图

[![](/data/attachment/album/201501/14/224925hez6jlbeybyc29c5.jpg)](http://www.slideshare.net/brendangregg/blazing-performance-with-flame-graphs/167)

也有其他人做过类似的工作。[Robert Mustacchi](http://dtrace.org/blogs/rm)在不久前也做了一些尝试，他使用的方法类似于代码检视时的标色风格：只显示了差异的部分，红色表示新增（上升）的代码路径，蓝色表示删除（下降）的代码路径。一个关键的差别是栈帧的宽度只体现了差异的样本数。右边是一个例子。这个是个很好的主意，但在实际使用中会感觉有点奇怪，因为缺失了完整profile文件的上下文作为背景，这张图显得有些难以理解。

[![](/data/attachment/album/201501/14/224928b0bz08k800jtt8at.png)](https://github.com/corpaul/flamegraphdiff)

Cor-Paul Bezemer也制作了一种差分显示方法[flamegraphdiff](http://corpaul.github.io/flamegraphdiff/)，他同时将3张火焰图放在同一张图中，修改前后的标准火焰图各一张，下面再补充了一张差分火焰图，但栈帧宽度也是差异的样本数。 上图是一个[例子](http://corpaul.github.io/flamegraphdiff/demos/dispersy/dispersy_diff.html)。在差分图中将鼠标移到栈帧上，3张图中同一栈帧都会被高亮显示。这种方法中补充了两张标准的火焰图，因此解决了上下文的问题。

我们3人的差分火焰图，都各有所长。三者可以结合起来使用：Cor-Paul方法中上方的两张图，可以用我的diff1.svg 和 diff2.svg。下方的火焰图可以用Robert的方式。为保持一致性，下方的火焰图可以用我的着色方式：蓝->白->红。

火焰图正在广泛传播中，现在很多公司都在使用它。如果大家知道有其他的实现差分火焰图的方式，我也不会感到惊讶。（请在评论中告诉我）

### 结论

如果你遇到了性能回退问题，红/蓝差分火焰图是找到根因的最快方式。这种方式抓取了两张普通的火焰图，然后进行对比，并对差异部分进行标色：红色表示上升，蓝色表示下降。 差分火焰图是以当前（“修改后”）的profile文件作为基准，形状和大小都保持不变。因此你通过色彩的差异就能够很直观的找到差异部分，且可以看出为什么会有这样的差异。

差分火焰图可以应用到项目的每日构建中，这样性能回退的问题就可以及时地被发现和修正。

---

via: <http://www.brendangregg.com/blog/2014-11-09/differential-flame-graphs.html>

作者：[Brendan Gregg](http://www.linux.com/community/forums/person/60160) 译者：[coloka](https://github.com/coloka) 校对：[wxy](https://github.com/wxy)

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


用Grub启动ISO镜像

Summary: 如果你想要使用多个Linux发行版，你没有那么多的选择。你要么安装到你的物理机或虚拟机中，要么以live模式从ISO文件启动。第二个选择，对硬盘空间需求较小，只是有点麻烦，因为你需要将ISO文件写入到U盘或CD/DVD中来启动。不过，这里还有另外一个可选的折中方案：把ISO镜像放在硬盘中，然后以live模式来启动。该方案比完全安装更省空间，而且功能也完备，这对于缓慢的虚拟机而言是个不错的替代方案。下面我将介绍怎样使用流行的Grub启动加载器来实现该方案。  很明显，你将需要使用到Grub，这是几乎所有现代Linux发行版都使用的。你也需要

这个可以有

[太开心][太开心]

@我的印象笔记

好生硬的翻译“你的家目录”[挖鼻屎]

回复@反派大联盟:这有什么问题么。经常有叫做主目录，家目录的啊。

@有道云笔记收藏

回复@Linux中国:好吧，家目录。[嘻嘻]

MARK

Grub启动ISO 是坑 大一点的镜像半天加载不了 最后花屏卡死 <br />
当初想做个不用解压ISO 做个多系统安装U盘 试过Grub4dos，Grub，还有其他一大堆软件，没一个能完美运行的

码

Grub启动ISO镜像

回复@反派大联盟:嗯，其实我开始看这种叫法也特别不适应。。。后来想想，其实人家也没错。[嘻嘻]

谢谢分享经验！

收藏

好

如果你想要使用多个Linux发行版，你没有那么多的选择。你要么安装到你的物理机或虚拟机中，要么以live模式从ISO文件启动。第二个选择，对硬盘空间需求较小，只是有点麻烦，因为你需要将ISO文件写入到U盘或CD/DVD中来启动。不过，这里还有另外一个可选的折中方案：把ISO镜像放在硬盘中，然后以live模式来启动。该方案比完全安装更省空间，而且功能也完备，这对于缓慢的虚拟机而言是个不错的替代方案。下面我将介绍怎样使用流行的Grub启动加载器来实现该方案。

![](/data/attachment/album/201501/15/151728x5gcuco5u0fpgrzo.png)

很明显，你将需要使用到Grub，这是几乎所有现代Linux发行版都使用的。你也需要你所想用的Linux版本的ISO文件，将它下载到本地磁盘。最后，你需要知道启动分区在哪里，并怎样在Grub中描述。对于此，请使用以下命令：

```
# fdisk -l

```

带有‘\*’的就是启动分区。对于我，就是/dev/sda1，用Grub语言描述就是（hd0,1)。

![](/data/attachment/album/201501/15/151731tbx5ab67dx6eed75.jpg)

作为参考，sda2就是(hd0,2)，sdb1就是(hd1,1)，以此类推。（你明白了吧。）

### 我们需要编辑什么？

首先，打开/etc/default/grub并检查以下行：

```
#GRUB_HIDDEN_TIMEOUT=0

```

需要在此行前添加‘#’进行注释。

保存，然后打开/etc/grub.d/40\_custom。

在该文件中，你将添加启动到ISO的参数。结构如下：

```
menuentry "[Entry's title in the grub screen]" {
set isofile="[path to ISO file]"
loopback loop [boot partition in Grub language]$isofile
[some specific] arguments
}

```

例如，如果你想要从ISO文件启动Ubuntu，那么你就是想要添加如下行到40\_custom文件：

```
menuentry "Ubuntu 14.04 (LTS) Live Desktop amd64" {
set isofile="/boot/ubuntu-14.04-desktop-amd64.iso"
loopback loop (hd0,1)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
initrd (loop)/casper/initrd.lz
}

```

![](/data/attachment/album/201501/15/151734ipf2ml4f2qmlop5z.jpg)

如果你想要启动Gparted：

```
menuentry "GParted Live amd64" {
set isofile="/boot/gparted-live-0.18.0-2-amd64.iso"
loopback loop (hd0,1)$isofile
loopback loop $isofile
linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=${isofile}
initrd (loop)/live/initrd.img
}

```

或者甚至是Fedora：

```
menuentry "Fedora 20 Live Desktop x86_64" {
set isofile="/boot/Fedora-Live-Desktop-x86_64-20-1.iso"
loopback loop (hd0,1)$isofile
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile}
initrd (loop)/isolinux/initrd0.img
}

```

注意，参数可根据发行版进行修改。幸运的是，有许多地方你可以查阅到。我喜欢这个发行版，但是还有很多其它的发行版你可以启动。同时，请注意你放置ISO文件的地方。如果你的家目录被加密或者无法被访问到，你可能更喜欢将这些文件放到像例子中的启动分区。但是，请首先确保启动分区有足够的空间。

最后，不要忘了保存40\_custom文件并使用以下命令来更新grub：

```
# sudo update-grub

```

以便在下次启动时看到修改。

![](/data/attachment/album/201501/15/151737obrd31vznbn14ssp.jpg)

### 接下来做什么？

想要更多东西？好吧，那就修改下参数来玩玩。你可以启动一个ISO文件，并让它持续做一些事情。例如，如果你是个彻头彻尾的妄想症患者，想要有个可以快速清除硬盘的选项，那么可以使用[DBAN](http://www.dban.org/)来进行一些设置。现在，真的要当心啊，因为此设置会清除你的硬盘，而且在启动时也没有恢复选项：

```
menuentry "Darik's Boot and Nuke" {
set isofile="/boot/dban.iso"
loopback loop (hd0,1)$isofile
linux (loop)/dban.bzi nuke="dwipe" silent
}

```

另外一个选择

```
menuentry "Darik's Boot and Nuke" {
set isofile="/boot/dban.iso"
loopback loop (hd0,1)$isofile
linux (loop)/dban.bzi
}

```

可以显示DBAN选项，让你选择清除驱动器。**当心，因为它仍然十分危险**。

小结一下，对于ISO文件和Grub有很多事情可做：从快速live会话到一键毁灭，都可以满足你。之后，你也可以试试启动一些针对隐私方面的发行版，如[Tails](https://tails.boum.org/)。

你认为从Grub启动一个ISO这个主意怎样？这是不是你想要做的呢？为什么呢？请在下面留言。

---

via: <http://xmodulo.com/boot-iso-image-from-grub.html>

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

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


Linux有问必答：Linux 中如何安装 7zip

Summary: 问题: 我需要要从 ISO 映像中获取某些文件，为此我想要使用 7zip 程序。那么我应该如何安装 7zip 软件呢，?  7zip 是一款开源的归档应用程序，开始是为 Windows 系统而开发的。它能对多种格式的档案文件进行打包或解包处理，除了支持其原生的 7z 格式的文档外，还支持包括 XZ、GZIP、TAR、ZIP 和 BZIP2 等这些格式。 通常，7zip 也用来解压 RAR、DEB、RPM 和 ISO 等格式的文件。除了简单的归档功能，7zip 还具有支持 AES-256 算法加密以及自解压和建立多卷存档功能。在支持 POSIX 标准的系统上（Linux、Unix、BSD），原生的 7zip 程序被移

ubuntu上默认的图形解压工具实在弱爆，解压出来就是各种ºìÄ´ó½ ÓÏ·´ë

如果7zFM能有成熟的移植到ubuntu的版本就好了

作为基本在图形界面处理的小白，尝试编译7zFM源码结果先天缺失windows.h还是哪个文件

@我的印象笔记

>
> **问题**: 我需要要从 ISO 映像中获取某些文件，为此我想要使用 7zip 程序。那么我应该如何安装 7zip 软件呢，[在 Linux 发布版本上完全安装]?
>
>
>

7zip 是一款开源的归档应用程序，开始是为 Windows 系统而开发的。它能对多种格式的档案文件进行打包或解包处理，除了支持其原生的 7z 格式的文档外，还支持包括 XZ、GZIP、TAR、ZIP 和 BZIP2 等这些格式。 通常，7zip 也用来解压 RAR、DEB、RPM 和 ISO 等格式的文件。除了简单的归档功能，7zip 还具有支持 AES-256 算法加密以及自解压和建立多卷存档功能。在支持 POSIX 标准的系统上（Linux、Unix、BSD），原生的 7zip 程序被移植过来并被命名为 p7zip（“POSIX 7zip” 的简称）。

![](/data/attachment/album/201501/15/222913yqqkzkk6ix3ttfyl.jpg)

下面介绍如何在 Linux 中安装 7zip （或 p7zip）。

### 在 Debian、Ubuntu 或 Linux Mint 系统中安装 7zip

在基于的 Debian 的发布系统中存在有三种 7zip 的软件包。

* **p7zip**: 包含 7zr（最小的 7zip 归档工具），仅仅只能处理原生的 7z 格式。
* **p7zip-full**: 包含 7z ，支持 7z、LZMA2、XZ、ZIP、CAB、GZIP、BZIP2、ARJ、TAR、CPIO、RPM、ISO 和 DEB 格式。
* **p7zip-rar**: 包含一个能解压 RAR 文件的插件。

建议安装 p7zip-full 包（不是 p7zip），因为这是最完全的 7zip 程序包，它支持很多归档格式。此外，如果您想处理 RAR 文件话，还需要安装 p7zip-rar 包，做成一个独立的插件包的原因是因为 RAR 是一种专有格式。

```
$ sudo apt-get install p7zip-full p7zip-rar

```

### 在 Fedora 或 CentOS/RHEL 系统中安装 7zip

基于红帽的发布系统上提供了两个 7zip 的软件包。

* **p7zip**: 包含 7za 命令，支持 7z、ZIP、GZIP、CAB、ARJ、BZIP2、TAR、CPIO、RPM 和 DEB 格式。
* **p7zip-plugins**: 包含 7z 命令，额外的插件，它扩展了 7za 命令（例如支持 ISO 格式的抽取）。

在 CentOS/RHEL 系统中，在运行下面命令前您需要确保 [EPEL 资源库](http://linux.cn/article-2324-1.html) 可用，但在 Fedora 系统中就不需要额外的资源库了。

```
$ sudo yum install p7zip p7zip-plugins

```

注意，跟基于 Debian 的发布系统不同的是，基于红帽的发布系统没有提供 RAR 插件，所以您不能使用 7z 命令来抽取解压 RAR 文件。

### 使用 7z 创建或提取归档文件

一旦安装好 7zip 软件后，就可以使用 7z 命令来打包解包各式各样的归档文件了。7z 命令会使用不同的插件来辅助处理对应格式的归档文件。

![](/data/attachment/album/201501/15/222921sm4k44myk0gktyh0.jpg)

使用 “a” 选项就可以创建一个归档文件，它可以创建 7z、XZ、GZIP、TAR、 ZIP 和 BZIP2 这几种格式的文件。如果指定的归档文件已经存在的话，它会把文件“附加”到存在的归档中，而不是覆盖原有归档文件。

```
$ 7z a <archive-filename> <list-of-files>

```

使用 “e” 选项可以抽取一个归档文件，抽取出的文件会放在当前目录。抽取支持的格式比创建时支持的格式要多的多，包括 7z、XZ、GZIP、TAR、ZIP、BZIP2、LZMA2、CAB、ARJ、CPIO、RPM、ISO 和 DEB 这些格式。

```
$ 7z e <archive-filename>

```

解包的另外一种方式是使用 “x” 选项。和 “e” 选项不同的是，它使用的是全路径来抽取归档的内容。

```
$ 7z x <archive-filename>

```

要查看归档的文件列表，使用 “l” 选项。

```
$ 7z l <archive-filename>

```

要更新或删除归档文件，分别使用 “u” 和 “d” 选项。

```
$ 7z u <archive-filename> <list-of-files-to-update>
$ 7z d <archive-filename> <list-of-files-to-delete>

```

要测试归档的完整性，使用：

```
$ 7z t <archive-filename>

```

---

via:<http://ask.xmodulo.com/install-7zip-linux.html>

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

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


如何在Ubuntu / CentOS 6.x上安装Bugzilla 4.4

Summary: 这里，我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla。Bugzilla是一款基于web，用来记录跟踪缺陷数据库的bug跟踪软件，它同时是一款免费及开源软件(FOSS)，它的bug跟踪系统允许个人和开发团体有效地记录下他们产品的一些突出问题。尽管是"免费"的，Bugzilla依然有很多其它同类产品所没有的珍贵特性。因此，Bugzilla很快就变成了全球范围内数以千计的组织最喜欢的bug管理工具。 Bugzilla对于不同使用场景的适应能力非常强。如今它们应用在各个不同的IT领域，如系统管理中的部署管理、芯片设计及部署的问题跟踪(制造前期和

have fun

@我的印象笔记

这里，我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla。Bugzilla是一款基于web，用来记录跟踪缺陷数据库的bug跟踪软件，它同时是一款免费及开源软件(FOSS)，它的bug跟踪系统允许个人和开发团体有效地记录下他们产品的一些突出问题。尽管是"免费"的，Bugzilla依然有很多其它同类产品所没有的“珍贵”特性。因此，Bugzilla很快就变成了全球范围内数以千计的组织最喜欢的bug管理工具。

Bugzilla对于不同使用场景的适应能力非常强。如今它们应用在各个不同的IT领域，如系统管理中的部署管理、芯片设计及部署的问题跟踪(制造前期和后期)，还有为那些诸如Redhat，NASA，Linux-Mandrake和VA Systems这些著名公司提供软硬件bug跟踪。

![](/data/attachment/album/201501/15/224622lq9ye6yn6pmd7zj7.gif)

### 1. 安装依赖程序

安装Bugzilla相当**简单**。这篇文章特别针对Ubuntu 14.04和CentOS 6.5两个版本(不过也适用于更老的版本)。

为了获取并能在Ubuntu或CentOS系统中运行Bugzilla，我们要安装Apache网络服务器(启用SSL)，MySQL数据库服务器和一些需要来安装并配置Bugzilla的工具。

要在你的服务器上安装使用Bugzilla，你需要安装好以下程序：

* Perl(5.8.1 或以上)
* MySQL
* Apache2
* Bugzilla
* Perl模块
* 使用apache的Bugzilla

正如我们所提到的本文会阐述Ubuntu 14.04和CentOS 6.5/7两种发行版的安装过程，为此我们会分成两部分来表示。

以下就是在你的Ubuntu 14.04 LTS和CentOS 7机器安装Bugzilla的步骤：

**准备所需的依赖包：**

你需要运行以下命令来安装些必要的包：

**Ubuntu版本:**

```
$ sudo apt-get install apache2 mysql-server libapache2-mod-perl2 libapache2-mod-perl2-dev libapache2-mod-perl2-doc perl postfix make gcc g++

```

**CentOS版本:**

```
$ sudo yum install httpd mod_ssl mysql-server mysql php-mysql gcc perl* mod_perl-devel

```

**注意：请在shell或者终端下运行所有的命令并且确保你用root用户（sudo）操作机器。**

### 2. 启动Apache服务

你已经按照以上步骤安装好了apache服务，那么我们现在需要配置apache服务并运行它。我们需要用sodo或root来敲命令去完成它，我们先切换到root连接。

```
$ sudo -s

```

我们需要在防火墙中打开80端口并保存改动。

```
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# service iptables save

```

现在，我们需要启动服务:

CentOS版本:

```
# service httpd start

```

我们来确保Apache会在每次你重启机器的时候一并启动起来：

```
# /sbin/chkconfig httpd on

```

Ubuntu版本:

```
# service apache2 start

```

现在，由于我们已经启动了我们apache的http服务，我们就能在默认的127.0.0.1地址下打开apache服务了。

### 3. 配置MySQL服务器

现在我们需要启动我们的MySQL服务：

CentOS版本:

```
# chkconfig mysqld on
# service start mysqld

```

Ubuntu版本:

```
# service mysql-server start

```

![mysql](/data/attachment/album/201501/15/224649z4e4tqirzdrzdttr.png)

用root用户登录连接MySQL并给Bugzilla创建一个数据库，把你的mysql密码更改成你想要的，稍后配置Bugzilla的时候会用到它。

CentOS 6.5和Ubuntu 14.04 Trusty两个版本：

```
# mysql -u root -p

# password: (You'll need to enter your password)

# mysql > create database bugs;

# mysql > grant all on bugs.* to root@localhost identified by "mypassword";

#mysql > quit

```

**注意：请记住数据库名和mysql的密码，我们稍后会用到它们。**

### 4. 安装并配置Bugzilla

现在，我们所有需要的包已经设置完毕并运行起来了，我们就要配置我们的Bugzilla。

那么，首先我们要下载最新版的Bugzilla包，这里我下载的是4.5.2版本。

使用wget工具在shell或终端上下载：

```
wget http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-4.5.2.tar.gz

```

你也可以从官方网站进行下载。<http://www.bugzilla.org/download/>

**从下载下来的bugzilla压缩包中提取文件并重命名：**

```
# tar zxvf bugzilla-4.5.2.tar.gz -C /var/www/html/

# cd /var/www/html/

# mv -v bugzilla-4.5.2 bugzilla

```

**注意**：这里,**/var/www/html/bugzilla/**就是**Bugzilla主目录**.

现在，我们来配置buzilla：

```
# cd /var/www/html/bugzilla/

```

./checksetup.pl --check-modules
===============================

![bugzilla-check-module](/data/attachment/album/201501/15/224650xha4ufq4mrh4qqzm.png)

检查完成之后，我们会发现缺少了一些组件，我们需要安装它们，用以下命令即可实现：

```
# cd /var/www/html/bugzilla
# perl install-module.pl --all

```

这一步会花掉一点时间去下载安装所有依赖程序，然后再次运行**checksetup.pl --check-modules**命令来验证有没有漏装什么。

现在我们需要运行以下这条命令，它会在/var/www/html/bugzilla路径下自动生成一个名为localconfig的文件。

```
# ./checksetup.pl

```

确认一下你刚才在localconfig文件中所输入的数据库名、用户和密码是否正确。

```
# nano ./localconfig

# checksetup.pl

```

![bugzilla-success](/data/attachment/album/201501/15/224652ocxgynxxj1thjb1j.png)

如果一切正常，checksetup.pl现在应该就成功地配置Bugzilla了。

现在我们需要添加Bugzilla至我们的Apache配置文件中。那么，我们需要用文本编辑器打开 /etc/httpd/conf/httpd.conf 文件(CentOS版本)或者 /etc/apache2/apache2.conf 文件(Ubuntu版本)：

CentOS版本:

```
# nano /etc/httpd/conf/httpd.conf

```

Ubuntu版本:

```
# nano etc/apache2/apache2.conf

```

现在，我们需要配置Apache服务器，我们要把以下配置添加到配置文件里：

```
<VirtualHost *:80>
     DocumentRoot /var/www/html/bugzilla/
</VirtualHost>

<Directory /var/www/html/bugzilla>
     AddHandler cgi-script .cgi
     Options +Indexes +ExecCGI
     DirectoryIndex index.cgi
     AllowOverride Limit FileInfo Indexes
</Directory>

```

接着，我们需要编辑 .htaccess 文件并用“#”注释掉顶部“Options -Indexes”这一行。

让我们重启我们的apache服务并测试下我们的安装情况。

CentOS版本:

```
# service httpd restart

```

Ubuntu版本:

```
# service apache2 restart

```

![bugzilla-install-success](/data/attachment/album/201501/15/224654h7ggs5jx1g1xs404.png)

这样，我们的Bugzilla就准备好在我们的Ubuntu 14.04 LTS和CentOS 6.5上获取bug报告了，你就可以通过本地回环地址或你网页浏览器上的IP地址来浏览bugzilla了。

---

via: <http://linoxide.com/tools/install-bugzilla-ubuntu-centos/>

作者：[Arun Pyasi](http://linoxide.com/author/arunp/) 译者：[ZTinoZ](https://github.com/ZTinoZ) 校对：[wxy](https://github.com/wxy)

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


systemd-nspawn 快速指南

Summary: 我目前已从 chroot（译者注：chroot可以构建类似沙盒的环境，建议各位同学先了解chroot） 迁移到 systemd-nspawn，同时我写了一篇快速指南。简单的说，我强烈建议正在使用 systemd 的用户从 chroot 转为 systemd-nspawn，因为只要你的内核配置正确的话，它几乎没有什么缺点。 想必在各大发行版中的用户对 chroot 都不陌生，而且我猜想 Gentoo 用户要时不时的使用它。  chroot 面临的挑战 大多数交互环境下，仅运行chroot还不够。通常还要挂载 /proc， /sys，另外为了确保不会出现类似丢失 ptys之类的错误，我们还得 bind（译者注：bind 是

Repost

Repost

Repost

Repost

我目前已从 chroot（译者注：chroot可以构建类似沙盒的环境，建议各位同学先了解chroot） 迁移到 systemd-nspawn，同时我写了一篇快速指南。简单的说，我强烈建议正在使用 systemd 的用户从 chroot 转为 systemd-nspawn，因为只要你的内核配置正确的话，它几乎没有什么缺点。

想必在各大发行版中的用户对 chroot 都不陌生，而且我猜想 Gentoo 用户要时不时的使用它。

![](/data/attachment/album/201501/16/092003t2uj2ofoct2mg1e0.jpg)

### chroot 面临的挑战

大多数交互环境下，仅运行chroot还不够。通常还要挂载 /proc， /sys，另外为了确保不会出现类似“丢失 ptys”之类的错误，我们还得 bind（译者注：bind 是 mount 的一个选项） 挂载 /dev。如果你使用 tmpfs，你可能想要以 tmpfs 类型挂载新的 tmp、 var/tmp。接下来你可能还想将其他的挂载点 bind 到 chroot 中。这些都不是特别难，但是一般情况下要写一个脚本来管理它。

现在我按照日常计划执行备份操作，当然有一些不必备份的数据如 tmp 目录，或任何 bind 挂载的内容。当我配置了一个新的 chroot 后就意味着我要更新我的备份配置了，但我经常忘记这点，因为大多数时间里 chroot 挂载点并没有运行。当这些挂载点仍然存在的情况下执行备份的话，那么备份中会多出很多不需要的内容。

当 bind 挂载点包含其他挂载点时（比如挂载时使用 -rbind 选项），这种情况下 systemd 的默认处理方式略有不同。在 bind 挂载中卸载一些东西时，systemd 会将处于 bind 另一边的目录也卸载掉。想像一下，如果我卸载了 chroot 中以 bind 挂载 /dev 的某个目录后，发现主机上的 /dev/pts 与 /dev/shm 也不见了，我肯定会很吃惊。不过好像有其他方法可以避免，但是这不是我们此次讨论的重点。

### Systemd-nspawn 优点

Systemd-nspawn 用于启动一个容器，并且它的最简模式就可以像 chroot 那样运行。默认情况下，它自动配置容器所需的开销如 /dev, /tmp 等等。通过配合一些选项它也可配置其他的 bind 挂载点。当容器退出后，所有的挂载点都会被清除。

容器运行时，从外部看上去没什么变化。事实上，可以从同一个 chroot 产生5个不同的 systemd-nspawn 容器实例，并且除了文件系统（不包括 /dev, /tmp等，只有 /usr,/etc 的改变会传递）外它们之间没有任何联系。你的备份将会忽略 bind 挂载点、tmpfs 及任何挂载在容器中的内容。

它同时具有其它优秀容器的优点，比如 containment - 可以杀死容器内的所有活动但不影响外部，等等。它的安全性并不是无懈可击的-它的作用仅仅是防止意外的错误。

如果你使用的是兼容的 sysvinit（它包含了 systemd，openrc），你可以启动容器。这意味着，你可以在容器中使用 fstab 添加挂载点，运行守护进程等。只需要一个 chroot 的开销，几乎就可以获得虚拟化的所有好处（不需要构建内核等）。在一个看起来像 chroot 的容器中运行systemctl poweroff 看起来很奇怪，但这条命令能够起作用。

注意，如果不做额外配置的话那么容器就会共享主机的网络，所以主机上的容器不要运行 sshd。运行一个分离的网络 namespace 不是太难，为了新的实例可以使用DHCP，分离之后记得绑定接口。

### 操作步骤

让它工作起来是此次讨论中最简短的部分了。

首先系统内核要支持 namespaces 与 devpts：

```
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y

```

像 chroot 那样启动 namespace 是非常简单的：

```
systemd-nspawn -D .

```

也可以像 chroot 那样退出。在内部可以运行 mount 并且可以看到默认它已将 /dev 与 /tmp 准备好了。 ”.“就是 chroot 的路径，也就是当前路径。在它内部运行的是 bash。

如果要添加一些 bind 挂载点也非常简便：

```
systemd-nspawn -D . --bind /usr/portage

```

现在，容器中的 /usr/portage 就与主机的对应目录绑定起来了，我们无需 sync /etc。如果想要绑定到指定的路径，只要在原路径后添加 ”:dest“，相当于 chroot 的 root（--bind foo 与 --bind foo:foo是一样的）。

如果容器具有 init 功能并且可以在内部运行，可以通过添加 -b 选项启动它：

```
systemd-nspawn -D . --bind /usr/portage -b

```

可以观察到 init 的运作。关闭容器会自动退出。

如果容器内运行了 systemd ，你可以使用 -h 选项将它的日志重定向到主机的systemd日志：

```
systemd-nspawn -D . --bind /usr/portage -j -b

```

使用 nspawn 注册容器以便它能够在 machinectl 中显示。如此可以方便的在主机上对它进行操作，如启动新的 getty， ssh 连接，关机等。

如果你正在使用 systemd 那么甩开 chroot 拥抱 nspawn 吧。

---

via: <http://rich0gentoo.wordpress.com/2014/07/14/quick-systemd-nspawn-guide/>

作者：[rich0](http://rich0gentoo.wordpress.com/) 译者：[SPccman](https://github.com/SPccman) 校对：[wxy](https://github.com/wxy)

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


硬盘监控和分析工具：Smartctl

Summary: Smartctl（S.M.A.R.T 自监控，分析和报告技术）是类Unix系统下实施SMART任务命令行套件或工具，它用于打印SMART自检和错误日志，启用并禁用SMRAT自动检测，以及初始化设备自检。 Smartctl对于Linux物理服务器十分有用，在这些服务器上，可以对智能磁盘进行错误检查，并将与硬件RAID相关的磁盘信息摘录下来。 在本帖中，我们将讨论smartctl命令的一些实用样例。如果你的Linux上海没有安装smartctl，请按以下步骤来安装。  安装 Smartctl 对于 Ubuntu $ sudo apt-get install smartmontools  对于 CentOS  RHEL # yum install smartmontools

主页桑，有木有SSD硬盘上安装Linux Mint的注意事项或优化的文章

@我的印象笔记

M

@我的印象笔记

@我的印象笔记

回复@介子K:目前没有。等我找找看。

马克

@我的印象笔记

**Smartctl**（S.M.A.R.T 自监控，分析和报告技术）是类Unix系统下实施SMART任务命令行套件或工具，它用于打印SMART**自检**和**错误日志**，启用并禁用SMRAT**自动检测**，以及初始化设备自检。

Smartctl对于Linux物理服务器十分有用，在这些服务器上，可以对智能磁盘进行错误检查，并将与**硬件RAID**相关的磁盘信息摘录下来。

在本帖中，我们将讨论smartctl命令的一些实用样例。如果你的Linux上海没有安装smartctl，请按以下步骤来安装。

![](/data/attachment/album/201501/16/162204x9qqklzo66kl8j88.png)

### 安装 Smartctl

**对于 Ubuntu**

```
$ sudo apt-get install smartmontools

```

**对于 CentOS & RHEL**

```
# yum install smartmontools

```

### 启动Smartctl服务

**对于 Ubuntu**

```
$ sudo /etc/init.d/smartmontools start

```

**对于 CentOS & RHEL**

```
# service smartd start ; chkconfig smartd on

```

### 样例

#### 样例：1 检查磁盘的 Smart 功能是否启用

```
root@linuxtechi:~# smartctl -i /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Momentus 5400.6
Device Model:     ST9320325AS
Serial Number:    5VD2V59T
LU WWN Device Id: 5 000c50 020a37ec4
Firmware Version: 0002BSM1
User Capacity:    320,072,933,376 bytes [320 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    5400 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 2.6, 1.5 Gb/s
Local Time is:    Sun Nov 16 12:32:09 2014 IST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

```

这里‘/dev/sdb’是你的硬盘。上面输出中的最后两行显示了SMART功能已启用。

#### 样例：2 启用磁盘的 Smart 功能

```
root@linuxtechi:~# smartctl -s on /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.

```

#### 样例：3 禁用磁盘的 Smart 功能

```
root@linuxtechi:~# smartctl -s off  /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Disabled. Use option -s with argument 'on' to enable it.

```

#### 样例：4 显示磁盘的详细 Smart 信息

```
root@linuxtechi:~# smartctl -a /dev/sdb              // For IDE drive
root@linuxtechi:~# smartctl -a -d ata /dev/sdb       // For SATA drive

```

#### 样例：5 显示磁盘总体健康状况

```
root@linuxtechi:~# smartctl -H  /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.
Please note the following marginal Attributes:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
190 Airflow_Temperature_Cel 0x0022   067   045   045    Old_age   Always   In_the_past 33 (Min/Max 25/33)

```

#### 样例：6 使用long和short选项测试硬盘

**Long测试**

```
root@linuxtechi:~# smartctl --test=long /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 102 minutes for test to complete.
Test will complete after Sun Nov 16 14:29:43 2014

Use smartctl -X to abort test.

```

或者，我们可以重定向测试输出到日志文件，就像下面这样

```
root@linuxtechi:~# smartctl --test=long /dev/sdb > /var/log/long.text

```

**Short测试**

```
root@linuxtechi:~# smartctl --test=short /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Sun Nov 16 12:51:45 2014

Use smartctl -X to abort test.

```

或

```
root@linuxtechi:~# smartctl --test=short /dev/sdb > /var/log/short.text

```

**注意**：short测试将花费最多2分钟，而在long测试中没有时间限制，因为它会读取并验证磁盘的每个段。

#### 样例：7 查看驱动器的自检结果

```
root@linuxtechi:~# smartctl -l selftest /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%       492         210841222
# 2  Extended offline    Completed: read failure       90%       492         210841222

```

#### 样例：8 计算测试时间估值

```
root@linuxtechi:~# smartctl -c  /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
General SMART Values:
Offline data collection status:  (0x00)    Offline data collection activity
                    was never started.
                    Auto Offline Data Collection: Disabled.
Self-test execution status:      ( 121)    The previous self-test completed having
                    the read element of the test failed.
Total time to complete Offline
data collection:         (    0) seconds.
Offline data collection
capabilities:              (0x73) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    No Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003)    Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01)    Error logging supported.
                    General Purpose Logging supported.
Short self-test routine
recommended polling time:      (   1) minutes.
Extended self-test routine
recommended polling time:      ( 102) minutes.
Conveyance self-test routine
recommended polling time:      (   2) minutes.
SCT capabilities:            (0x103b)    SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

```

#### 样例：9 显示磁盘错误日志

```
root@linuxtechi:~# smartctl -l error  /dev/sdb

Sample Output

smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
ATA Error Count: 5
    CR = Command Register [HEX]
    FR = Features Register [HEX]
    SC = Sector Count Register [HEX]
    SN = Sector Number Register [HEX]
    CL = Cylinder Low Register [HEX]
    CH = Cylinder High Register [HEX]
    DH = Device/Head Register [HEX]
    DC = Device Command Register [HEX]
    ER = Error register [HEX]
    ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  25 da 08 e7 e5 a5 4c 00      00:30:44.515  READ DMA EXT
  25 da 08 df e5 a5 4c 00      00:30:44.514  READ DMA EXT
  25 da 80 5f e5 a5 4c 00      00:30:44.502  READ DMA EXT
  25 da f0 5f e6 a5 4c 00      00:30:44.496  READ DMA EXT
  25 da 10 4f e6 a5 4c 00      00:30:44.383  READ DMA EXT

```

---

via: <http://www.linuxtechi.com/smartctl-monitoring-analysis-tool-hard-drive/>

作者：[Pradeep Kumar](http://www.linuxtechi.com/author/pradeep/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


怎样在 Ubuntu 14.10 Server 上安装 Cacti

Summary: Cacti 是一个完善的网络监控的图形化解决方案，它被设计用来发挥 RRDTool （一个 Linux 数据存储和绘图工具）的数据存储和绘图的强大功能。Cacti 提供一个快速的轮询器，高级的绘图模版，多种数据获取方法和用户管理功能，并且可以开箱即用。所有的这些都被打包进一个直观，易用的界面，可用于监控简单的 LAN 网络，乃至包含成百上千设备的复杂网络。  功能 绘图 没有数量限制的监控图条目（graph item），每个图形可以视情况使用 Cacti 中的 CDEFs （Calculation Define，可以对图形输出结果进行计算）或者数据源。 自动将 GPRINT 条目分

epel有，赞，一键安装[哈哈]

cati网络监控，监控什么网络，服务器网络还是接入网络，监控网络的什么指标，还是告警

Cacti 是一个完善的网络监控的图形化解决方案，它被设计用来发挥 RRDTool （一个 Linux 数据存储和绘图工具）的数据存储和绘图的强大功能。Cacti 提供一个快速的轮询器，高级的绘图模版，多种数据获取方法和用户管理功能，并且可以开箱即用。所有的这些都被打包进一个直观，易用的界面，可用于监控简单的 LAN 网络，乃至包含成百上千设备的复杂网络。

![](/data/attachment/album/201501/16/164841zvvq4k4tvbkrkevq.jpg)

### 功能

#### 绘图

没有数量限制的监控图条目（graph item），每个图形可以视情况使用 Cacti 中的 CDEFs （Calculation Define，可以对图形输出结果进行计算）或者数据源。

自动将 GPRINT 条目分组至 AREA，STACK 和 LINE[1-3] 中，来对监控图条目进行快速重排序。

自动填充功能支持整齐排列图形内的说明项。

可以使用 RRDTool 中内置的 CDEF 数学函数对图形数据进行处理。这些 CDEF 函数可以定义在 Cacti 中，并且每一个图形都可以使用它们。

支持所有的 RRDTool 图形类型，包括 AREA，STACK，LINE[1-3]，GPRINT，COMMENT，VRULE 和 HRULE。

#### 数据源

数据源可以使用 RRDTool 的 "create" 和 "update" 功能创建。每一个数据源可以用来收集本地或者远程的数据，并将数据输出成图形。

支持包含多个数据源的 RRD 文件，并可以使用存储在本地文件系统中任何位置的 RRD 文件。

可以自定义轮询归档（RRA）设置，用户可以在存储数据时使用非标准的时间间隔（标准时间间隔是5分钟，30分钟，2小时和 1天）。

#### 数据收集

Cacti 包含一个 "data input" 机制，可以让用户定义自定义的脚本用来收集数据。每个脚本可以包含调用参数，每次调用此脚本的创建数据源时必须输入相应的调用参数（如 IP 地址）。

支持 SNMP 功能，可以使用 php-snmp，ucd-snmp 或者 net-snmp。

可以基于索引来使用 SNMP 或者脚本收集数据。例如，可以列出一个服务器上所有网卡接口或者已挂载分区的索引列表。其集成的绘图模版可以用来为主机一键创建图形。

提供了一个基于 PHP 的轮询器执行脚本，可以收集 SNMP数据并更新数据至 RRD 文件中。

#### 模版

绘图模版可以将相同图形分组到为一类。图形中的每一个条目都可以使用模版的默认值或者自定义。

数据源模版可以通过将相同数据源类型分组为一类。数据源中每一个条目都可以使用模版的默认值或者自定义。

主机模版是一组图形和数据源模版，可以用来定义某一类型的主机。创建主机时，它会自动使用相应模版的属性。

#### 图形展示

图形树模式允许用户创建「图形层次结构」并将图形放至树中。这种方法可以方便的管理大量图形。

列表模式将所有图形的链接在一个大列表中展示出来，链接指向用户创建的图形。

预览模式将所有图形在一个大列表中展示出来。这有点类似于 RRDTool/MRTG 的默认视图。

#### 用户管理

用户管理功能允许管理员创建用户并分配给用户访问 Cacti 接口的不同级别的权限。

权限可以为每个用户指定其对每个图形的权限，这适用于主机租用的场景。

每个用户可以保存他自己的图形显示模式。

### 安装

#### 系统准备

在安装 cacti 之前，确保你已经安装了 [Ubuntu 14.10 LAMP server](http://www.ubuntugeek.com/www.ubuntugeek.com/step-by-step-ubuntu-14-10-utopic-unicorn-lamp-server-setup.html)。

#### 在 Ubuntu 14.10 Server 上安装 Cacti

打开终端，运行下面的命令

```
sudo apt-get install cacti-spine

```

上面的命令开始 Cacti 的安装，你会看到下图中 PHP 路径的更改，选择 ok 按回车

![](/data/attachment/album/201501/16/164843x3kb6bhnbnb33z9m.png)

选择你想使用的 Web 服务器 (我使用的是 apache2)

![](/data/attachment/album/201501/16/164844g6aywd8j99s8syao.png)

Cacti 数据库配置，选 yes

![](/data/attachment/album/201501/16/164844mf022ggq90idg89m.png)

输入数据库管理员账户密码

![](/data/attachment/album/201501/16/164845ck5kubv45fcq4r10.png)

输入 Cacti 访问数据库的密码

![](/data/attachment/album/201501/16/164846n14evxnuvxkx4sre.png)

确认密码

![](/data/attachment/album/201501/16/164846osrq3r3qq30reb3r.png)

现在 Cacti 已经安装了，我们可以开始配置它了。

#### Cacti 配置

在浏览器中访问 http://你的服务器IP/cacti/install/ 来进行初始化设置，点击 next 下一步

![](/data/attachment/album/201501/16/164848vz99zh8dfxa8rk8f.png)

选择 New install，点击 next 下一步

![](/data/attachment/album/201501/16/164849l2oc6uukvb2x8c5f.png)

下一个界面中，你需要确保所有的路径都是正确的，点击 finish 完成

![](/data/attachment/album/201501/16/164852h0kkww8wxkaxwsok.png)

现在以 admin/admin 登录 Cacti，修改管理员的默认密码

![](/data/attachment/album/201501/16/164854xpjzk1bs1a11pjaz.png)

![](/data/attachment/album/201501/16/164855ho9np3q3lb0jn1sb.png)

登录 Cacti 之后你会看到类似于下面这样的界面

![](/data/attachment/album/201501/16/164857mjqxokwbqq2227a2.png)

---

via: <http://www.ubuntugeek.com/how-to-install-cacti-monitoring-tool-on-ubuntu-14-10-server.html>

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

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


文件轻松比对，伟大而自由的比较软件们

@mywiz

mark

用过PDFdiffer，没多久就被我删除了

有用过这款软件。

自从依赖meld以后，diff很少再用了

@我的印象笔记

首mark

身外外貌协会的我，还是最喜欢第一款meld哇，又漂亮又实用

[good]

我是在 GNOME 里用 Meld，在 KDE 里用 Kompare。

留用

Kompare

文件比较工具用于比较计算机上的文件的内容，找到他们之间相同与不同之处。比较的结果通常被称为diff。

diff同时也是一个基于控制台的、能输出两个文件之间不同之处的著名的文件比较程序的名字。diff是于二十世纪70年代早期，在Unix操作系统上被开发出来的。diff将会把两个文件之间不同之处的部分进行输出。

Linux拥有很多不错的GUI工具，能使你能清楚的看到两个文件或同一文件不同版本之间的不同之处。这次我从自己最喜欢的GUI比较工具中选出了五个推荐给大家。除了其中的一个，其他的都是开源的。

这些应用程序可以让你更清楚的看到文件或目录的差别，能合并有差异的文件，可以解决冲突并将其输出成一个新的文件或补丁，其也用于那些预览和备注文件改动的产品上（比如，在源代码合并到源文件树之前，要先接受源代码的改变）。因此它们是非常重要的软件开发工具。它们可以帮助开发人员们对文件进行处理，不停的把文件转来转去。这些比较工具不仅仅能用于显示源代码文件中的不同之处；他们还适用于很多种的文本文件。可视化的特性使文件比较变得容易、简单。

---

### Meld

![](/data/attachment/album/201501/18/125815mitvtwzvz0az30ci.png)

Meld是一个适用于Gnome桌面的、开源的、图形化的文件差异查看和合并的应用程序。它支持2到3个文件的同时比较、递归式的目录比较、处于版本控制(Bazaar, Codeville, CVS, Darcs, Fossil SCM, Git, Mercurial, Monotone, Subversion)之下的目录比较。还能够手动或自动合并文件差异。

Meld的重点在于帮助开发人员比较和合并多个源文件，并在他们最喜欢的版本控制系统下能直观的浏览改动过的地方。

功能包括

* 原地编辑文件，即时更新
* 进行两到三个文件的比较及合并
* 在显示的差异和冲突之间的导航
* 使用插入、改变和冲突这几种标记可视化展示本地和全局的差异
* 内置正则表达式文本过滤器，可以忽略不重要的差异
* 语法高亮度显示（使用可选的gtksourceview)
* 将两到三个目录中的文件逐个进行比较，显示新建，缺失和替换过的文件
* 对任何有冲突或差异的文件直接打开比较界面
* 可以过滤文件或目录以避免以忽略某些差异
* 被改动区域的自动合并模式使合并更容易
* 也有一个简单的文件管理
* 支持多种版本控制系统，包括Git, Mercurial, Bazaar 和 SVN
* 在提交前开启文件比较来检查改动的地方和内容
* 查看文件版本状态
* 还能进行简单的版本控制操作（例如，提交、更新、添加、移动或删除文件）
* 继承自同一文件的两个文件进行自动合并
* 标注并在中间的窗格显示所有有冲突的变更的基础版本
* 显示并合并同一文件的无关的独立修改
* 锁定只读性质的基础文件以避免出错
* 可以整合到已有的命令行界面中，包括gitmergetool
* 国际化支持
* 可视化使文件比较更简单
* 网址: [meldmerge.org](http://meldmerge.org/)
* 开发人员: Kai Willadsen
* 证书: GNU GPL v2
* 版本号: 1.8.5

---

### DiffMerge

![](/data/attachment/album/201501/18/125819zhll8h2f0flf8qdf.png)

DiffMerge是一个可以在Linux、Windows和OS X上运行的，可以可视化文件的比较和合并的应用软件。

功能包括:

* 图形化显示两个文件之间的差别。包括插入行，高亮标注以及对编辑的全面支持
* 图形化显示三个文件之间的差别。（安全的前提下）允许自动合并，并对最终文件可以随意编辑
* 并排显示两个文件夹的比较，显示哪一个文件只存在于其中一个文件夹而不存在于另外的一个文件夹，还能一对一的将完全相同的、等价的或不同的文件配对
* 规则设置和选项让你可以个性化它的外观和行为
* 基于Unicode，可以导入多种编码的字符
* 跨平台工具
* 网址: [sourcegear.com/diffmerge](https://sourcegear.com/diffmerge/)
* 开发人员: SourceGear LLC
* 证书: Licensed for use free of charge (not open source)
* 版本号: 4.2

---

### xxdiff

![](/data/attachment/album/201501/18/125825yswtdptxqpxt6poz.png)

xxdiff是个开源的图形化的可进行文件、目录比较及合并的工具。

xxdiff可以用于显示两到三个文件或两个目录的差别，还能产生一个合并后的版本。被比较的两到三个文件会并排显示，并将有区别的文字内容用不同颜色高亮显示以便于识别。

这个程序是个非常重要的软件开发工具。他可以图形化的显示两个文件或目录之间的差别，合并有差异的文件，其也用于那些预览和备注文件改动的产品上（比如，在源代码合并到源文件树之前，要先接受源代码的改变）

功能包括:

* 比较两到三个文件，或是两个目录（浅层或递归）
* 横向高亮显示差异
* 交互式的文件合并，可视化的输出和保存
* 可以辅助合并的评论/监管
* 自动合并文件中时不合并 CVS 冲突，并以两个文件显示以便于解决冲突
* 可以用其它的比较程序计算差异：适用于GNU diff、SGI diff和ClearCase的cleardiff，以及所有与这些程序输出相似的文件比较程序。
* 可以使用资源文件实现完全的个性化设置
* 用起来感觉和Rudy Wortel或SGI的xdiff差不多，与桌面系统无关
* 功能和输出可以和脚本轻松集成
* 网址: [furius.ca/xxdiff](http://furius.ca/xxdiff/)
* 开发人员: Martin Blais
* 证书: GNU GPL
* 版本号: 4.0

---

### Diffuse

![](/data/attachment/album/201501/18/125831cgq9znnviqtoxzt9.png)

Diffuse是个开源的图形化工具，可用于合并和比较文本文件。Diffuse能够比较任意数量的文件，并排显示，并提供手动行匹配调整，能直接编辑文件。Diffuse还能从bazaar、CVS、darcs, git, mercurial, monotone, Subversion和GNU RCS 库中获取版本用于比较及合并。

功能包括:

* 比较任意数量的文件，并排显示（多方合并）
* 行匹配可以被用户人工矫正
* 直接编辑文件
* 语法高亮
* 支持Bazaar, CVS, Darcs, Git, Mercurial, Monotone, RCS, Subversion和SVK
* 支持Unicode
* 可无限撤销
* 易用的键盘导航
* 网址: [diffuse.sourceforge.net][]
* 开发人员: Derrick Moser
* 证书: GNU GPL v2
* 版本号: 0.4.7

---

### Kompare

![](/data/attachment/album/201501/18/125836x5m421qoq4vmm06z.png)

Kompare是个开源的GUI前端程序，可以对不同源文件之间差异的可视化和合并。Kompare可以比较文件或文件夹内容的差异。Kompare支持很多种diff格式，并提供各种选项来设置显示的信息级别。

不论你是个想比较源代码的开发人员，还是只想比较一下研究论文手稿与最终文档的差异，Kompare都是个有用的工具。

Kompare是KDE桌面环境的一部分。

功能包括:

* 比较两个文本文件
* 递归式比较目录
* 显示diff产生的补丁
* 将补丁合并到一个已存在的目录
* 可以让你在编译时更轻松
* 网址: [www.caffeinated.me.uk/kompare/](http://www.caffeinated.me.uk/kompare/)
* 开发者: The Kompare Team
* 证书: GNU GPL
* 版本号: Part of KDE

---

via: <http://www.linuxlinks.com/article/2014062814400262/FileComparisons.html>

作者：Frazer Kline 译者：[H-mudcup](https://github.com/H-mudcup) 校对：[wxy](https://github.com/wxy)

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


Calife：一个轻量级的sudo替代品

Summary: Calife会在登录为另外一个用户前输入自己的密码（如果没有提供登录名，默认是登录为root），在验证具有正确的权限后，就会切换到该用户及其组身份，并就会执行一个shell。如果 calife 是由 root 执行的，不需要密码，会执行一个所需的用户ID的shell。 所用的shell是用户自身所用的，除非在calife.auth配置文件中指定了某个shell。如果在命令行指定了-选项，就会读取该用户的环境文件，该shell就像是一个登录shell。这和su的惯常用法不同。 只有在calife.auth中指定的用户才能使用此方法通过calife成为另外一个用户。calife.auth安装位置处

@小白脑子放了个屁 shenmegui

图！

先 Mark，打工中 //@Judgement_Engineer:@小白脑子放了个屁 shenmegui

![](/data/attachment/album/201501/18/225700y1a1qp63xg3ajjp1.jpg)

Calife会在登录为另外一个用户前输入自己的密码（如果没有提供登录名，默认是登录为root），在验证具有正确的权限后，就会切换到该用户及其组身份，并就会执行一个shell。如果 calife 是由 root 执行的，不需要密码，会执行一个所需的用户ID的shell。

所用的shell是用户自身所用的，除非在calife.auth配置文件中指定了某个shell。如果在命令行指定了“-”选项，就会读取该用户的环境文件，该shell就像是一个登录shell。这和su的惯常用法不同。

只有在calife.auth中指定的用户才能使用此方法通过calife成为另外一个用户。calife.auth安装位置处于/etc/calife.auth。

### Calife特性

这里给出了一个关于calife特性的扩展列表：

* 你可以完整保留你的环境变量和shell别名
* 它可以全程记录会话的开始到结束
* 你可以列出每个许可使用calife的用户，那样，你就可以用户赋予主管权限而不必提供root密码
* 你可以在配置文件中指定哪个组可以使用：只要使用@staff或者%staff，那么所有staff组中的成员都将具有访问calife的权限
* 通过calife也可以登录成为那些没有家目录或甚至没有shell的用户。如果你想要成为uucp或者甚至是bin，那会很方便
* 你可以让calife在会话结束时运行一个指定的系统级的脚本（例如，发送一封邮件告知以root身份做了哪些事）

### ubuntu中安装calife

打开终端，然后运行以下命令

```
sudo apt-get install calife

```

### 使用Calife

### 语法

```
calife [-] [login]

```

详情请参与calife手册页

---

via: <http://www.ubuntugeek.com/calife-a-lightweight-alternative-to-sudo.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 下五款出色的流媒体客户端

装个试试

我把 JACK 当 ASIO/WASAPI 用的//@星之光StarBrilliant: 如果 1、JACK有混音，2、JACK兼容PA API像PA兼容ALSA API一样完美，3、JACK睡眠不会有bug 的话我早就用JACK了。 //@Judgement_Engineer:到了 Linux 下不好好用 JACK 当厚度享受 CD 用啥 Streaming 啊@Price_Hu @星之光StarBrilliant @比尔盖子V

那不如直接挂裸ALSA不用任何高层声音架构。 //@Judgement_Engineer:我把 JACK 当 ASIO/WASAPI 用的//@星之光StarBrilliant: 如果 1、JACK有混音，2、JACK兼容PA API像PA兼容ALSA API一样完美，3、JACK睡眠不会有bug 的话我早就用JACK了。

然后我整个unity或者gnome或者kde就该被卸载干净了，责任人@小白脑子放了个屁 @冰雪聪明琳之风 //@星之光StarBrilliant: 那不如直接挂裸ALSA不用任何高层声音架构。 //@Judgement_Engineer:我把 JACK 当 ASIO/WASAPI 用的//@星之光StarBrilliant: 如果 1、JACK有混音，2、JACK兼容PA API像PA兼容ALSA A

回复@冰雪聪明琳之风:KDE还好，GNOME这样就该被干死了 责任人：上游 //@冰雪聪明琳之风:你可以屏蔽PA啊 //@Judgement_Engineer:然后我整个unity或者gnome或者kde就该被卸载干净了，责任人@小白脑子放了个屁 @冰雪聪明琳之风 //@星之光StarBrilliant: 那不如直接挂裸ALSA不用任何高层声音架构。

明显楼歪了~//@Judgement_Engineer: 我把 JACK 当 ASIO/WASAPI 用的//@星之光StarBrilliant: 如果 1、JACK有混音，2、JACK兼容PA API像PA兼容ALSA API一样完美，3、JACK睡眠不会有bug 的话我早就用JACK了。 //@Judgement_Engineer:到了 Linux 下不好好用 JACK 当厚度享受 CD 用啥 Streaming 啊

Clementine特别好，推荐大家玩玩

我用sptify//@爱开源魅影:Clementine特别好，推荐大家玩玩

只有我用虾米吗

和我想要说的一样：）

我也是pithos+spotify+clementine

…………………………

当然国内的还有网易云

数字流媒体这几天几乎占据了我音乐收听的全部时间。近年来我为了收藏 CD 花费了数量可观的费用；但它们中的大部分现在正静静地躺在满是灰尘的角落里。基本上所有的音乐流媒体服务所提供的的音质都不如 CD 的，但它们受欢迎的原因很大程度上在于其便捷性，而非高度保真的音质再现。音乐流媒体不仅造成了 CD 销量的大幅减少；也使数字音乐的下载开始缓慢下滑。这种趋势还会继续下去。音乐发烧友现在或许也想要拥抱音乐流媒体服务了，某些音乐流媒体服务商如 Tidal 提供了无损的音乐流媒体服务，其中包含了 25 万首比特率为 1411kbps 的 FLAC 格式的音乐。

尽管 CD 暂时不会消失，但音乐流媒体服务商却无法调和那些不满从音乐托管服务中收取的租金的唱片公司及音乐家之间的问题。这一切仍然处于变化之中；我们看到了今年 Led Zeppelin, Pink Floyd, Metallica 签名支持流媒体服务，但仍然有部分知名的老牌乐队如 Beatles, Radiohead 以及 AC/DC 拒绝将自己的作品放到流媒体上供粉丝收听。即使当某个唱片公司或者音乐家已经授权给流媒体服务商访问自己的作品，但只要音乐家发表声明就可以在第一时间将其作品从流媒体服务下架。本月（2014 年 11 月），Taylor Swift 请求将她的所有音乐作品从 Spotify 的流媒体服务下架。有些人还是更偏向于“拥有”他们的音乐，但这看起来像是一种快要过时了的欣赏音乐的方式。

使用 Linux 平台来收听流媒体音乐服务的方法已经逐渐成熟。在 Linux 平台下，你可以找到许多客户端，通过它们你可以使用大部分的音乐流媒体服务；我希望 TIDAL 能在今后合适的时候发行 Linux 桌面客户端，而不是仅仅依赖 web 播放器。本文精选的这些应用都是非常出色的。另外 Amarok，pianobar 还有 Tomahawk 也表现得很不错。

### Spotify

![Spotify 播放界面](/data/attachment/album/201501/18/230642avrvvfrvv6vmr6fr.png)

Spotify 是一种专有的 P2P 音乐流媒体服务，允许用户收听点播曲目或专辑。Spotify 将自己描述为“音乐圣殿。快捷、简易、免费的服务”。Spotify 分别为普通的移动端和桌面端用户提供了 96kbps 和 160kbps 比特率的流媒体服务，并且为高级用户提供了 Ogg Vorbis 格式的 320kbps 比特率的流媒体服务。Spotify 为普通用户提供了免费但是有广告的服务，以及无广告的订阅账户服务。

Spotify 是很奇妙的服务，向用户们提供了涵盖各种类型的数量众多的音乐，如：流行乐、另类摇滚、古典乐、铁克诺电音、摇滚乐等。这是发现新音乐的好方法。Spotify 得到了包括 Sony BMG，EMI，Universal 以及 Warner Music 在内的主流唱片公司，以及 Labrador Records，The Orchard，Alligator Records，Merlin，CD Baby，INgrooves 等独立唱片唱片公司和分销网络，甚至 Chandos，Naxos，EMI Classic，Warner Classics，Denon Essentials 这些古典唱片公司的支持，还有更多的公司在这里就不一一列举了。

Spotify 的音乐涵盖范围还在继续以惊人的步伐扩张着。

Spotify 现在并没有发行官方版的 Linux 客户端。不过，开发团队已经推出了针对 Linux 的客户端预览版，并且表现得还不错。因为仍然是预览版，所以没有得到官方的支持。

Spotify 流媒体服务现已支持以下地区/国家：安道尔，阿根廷，澳大利亚，奥地利，比利时，保加利亚，哥伦比亚，塞浦路斯，丹麦，爱沙尼亚，芬兰，法国，德国，希腊，香港，冰岛，爱尔兰，意大利，拉脱维亚，列支敦士登，立陶宛，卢森堡，马来西亚，马耳他，墨西哥，摩纳哥，荷兰，新西兰，挪威，菲律宾，波兰，葡萄牙，西班牙，新加坡，瑞典，瑞士，台湾，土耳其，英国，美国，乌拉圭等。

**特色包括：**

* 精心设计的界面，导航时非常方便
* 创建和编辑播放列表
* 发现新的音乐
* 共享音乐及播放列表
* 电台功能
* 最受欢迎的的列表
* 额外功能及种类繁多的应用
* 网址：[www.spotify.com/uk/download/previews](https://www.spotify.com/uk/download/previews/)
* 开发者：Spotify
* 许可证：专有许可证
* 当前版本：预览版

### Pithos

![Pithos 播放界面](/data/attachment/album/201501/18/230651vo2e3em8ejj46jrd.png)

Pithons 是一款开源的的本地 Pandora 电台 Linux 客户端。它提供了一个轻量级的界面以替代 Pandora.com 的 web 客户端。其图形用户界面上集成了多媒体快捷键、通知中心以及声音菜单。

Pandora 音乐服务只能通过美国的 IP 地址使用。不过，非美国用户可以通过 VPN 连接来使用 Pandora。

**特色包括：**

* 播放/暂停/下一首
* 切换电台
* 记住用户名和密码
* 给喜欢的音乐和艺术家添加书签
* 获取封面
* 喜欢/讨厌/不再播放这首音乐
* 在通知中心中弹出歌曲信息
* 跳转到 pandora.com 歌曲信息页面/电台页面
* 超时后重连 pandora
* QuickMix 编辑
* 创建电台
* 多媒体按键
* 代理连接
* Last.fm 歌曲记录
* 音量控制
* 屏保暂停等插件
* DBUS 接口：MPRIS 和 Pithos
* 网址：[pithos.github.io](http://pithos.github.io/)
* 开发者：Kevin Mehall
* 许可证：GNU GPL v3
* 当前版本：1.0.0

### Clementine

![Clementine 播放界面](/data/attachment/album/201501/18/230701wjjjgz0jbmrzjglj.png)

Clementine 基于 Amarok 开发，是一款跨平台的轻量级现代化音乐播放器和媒体库管理工具。Clementine 致力于打造快捷简易的界面，使你可以轻松搜索和播放音乐。

Clementine 在 Amarok 1.4 的基础上开发。

**特色包括：**

* 检索、播放本地音乐库
* 从 Last.fm 和 SomaFM 收听互联网电台
* 标签式播放列表，支持导入导出 M3U，XSPF，PLS 及 ASX 格式的播放列表
* 创建智能播放列表和动态播放列表
* 载入 M3U 和 XSPF 播放列表
* 对播放列表的撤销和重做
* 编辑 MP3 和 OGG 文件的信息，管理媒体库
* 从 Last.fm 下载缺失的专辑封面
* 集成 gpodder.net 播客
* 图形化均衡器
* 支持 Windows，Mac OS X 及 Linux
* 支持 Linux（libnotify）及 Mac OS X（Growl）本地桌面通知中心
* 从 MusicBrainz 获取缺失的信息
* 炫彩屏幕显示
* 队列管理
* 支持 Linux 下的 MPRIS，以及命令行远程控制
* 支持索引和播放 Google Drive 中的音乐
* 支持 Soundcloud
* 支持 jazzradio.com
* 支持 Moodbar
* 基于 projectM 的可视化技术
* 拷贝音乐至 iPod，iPhone，MTP 或者 大容量 USB 设备
* 远程控制
* 转码音乐至 MP3，Ogg Vorbis，Ogg Speex，FLAC 以及 AAC
* 网址：[www.clementine-player.org](https://www.clementine-player.org/)
* 开发者：David Sansome，John Maguire
* 许可证：GNU GPL v3
* 当前版本：1.2

### Nuvola Player

![Nuvola Player 播放界面](/portal/content/reviews/Utilities/Screenshot-NuvolaPlayer-Streaming.png)

Nuvola Player 是一个免费的开源项目，能够整合云端音乐到你的桌面中（支持托盘图标、Ubuntu 声音菜单、dock 菜单以及通知中心）。

为了使用全部的流媒体服务，你需要安装 Flash 和 HTML5 的音频支持。某些基于 Web 的流媒体服务可以使用 HTML5 的音频技术播放音乐，而非使用 Flash 插件。Nuvola Player 需要 GStreamr 和 MP3 解码器插件来提供 HTML5 音频支持。

**支持的流媒体服务：**

* 集成了 MP3 商店的亚马逊云播放器，允许用户在亚马逊云端驱动器中存储他们的音乐，并且在任何支持的浏览器上播放音乐
* Bandcamp，是一家在线音乐商店，也是艺人宣传平台，主要适于独立艺术家
* Deezer，一家法国的基于 Web 的音乐流媒体服务商。Deezer 允许用户在多台设备上在线或者离线播放音乐，现在拥有 1800 万的曲目，超过 30000 的电台以及 2200 万的用户（150 万订阅用户）
* 8tracks，是一家融合了互联网电台和社交元素的网站，坚持至少 8 个曲目的为用户量身定制的流媒体播放列表
* Google Play，谷歌运营的一家数字服务商店，其经营项目包括音乐、电影、书籍，以及 Android 应用和游戏，其云端播放器支持播放用户自己上传的音乐和在 Google Play 里购买的音乐
* Grooveshark，提供了国际化在线音乐搜索引擎、音乐流媒体服务以及音乐推荐服务，允许用户进行搜索、使用流媒体以及上传音乐，并且能把这些音乐进行立即播放或者添加到一个播放列表中
* Grooveshark Mobile，基于 HTML5 的 Grooveshark 移动版，不需要 Flash 插件的支持
* Hype Machine，Pandora Radio 和 Pitchfork Media 的融合产物。它从音乐博客上精选了最近发布的歌曲（约 1500 首），并在网站主页上列出了这些歌曲的信息
* Jango，一款免费的在线音乐流媒体服务，允许用户创建和分享自己创建的电台
* Logitech Media Server，是 Logitech Squeezebox devices 的开源流媒体服务。支持许多插件以及如 Deezer 和 Spotify 等其他流媒体服务
* Pandora，智能化音乐推荐服务以及音乐基因组计划“托管人”，服务仅针对美国地区
* Rdio，有广告的音乐订阅服务
* Spotify，商业化流媒体服务，提供来自唱片公司的被严格限制的数字版权内容
* This is My Jam，你可以存放某一刻你非常喜欢的音乐，并且每天都可以收听由朋友们精挑细选的音乐

**特色包括：**

* 多媒体快捷键
* 显示桌面通知
* 集成了众多声音菜单、小程序以及启动器，甚至更多
* Last FM 以及 Libre FM 歌曲记录
* 获取歌词
* 支持 Amazon Music Prime streaming
* 网址：[tiliado.eu/nuvolaplayer](https://tiliado.eu/nuvolaplayer/)
* 开发者：Jiří Janoušek and service maintainers
* 许可证：2-Clause BSD license
* 当前版本：2.4.3

### Atraci

![Atraci 播放界面](/data/attachment/album/201501/18/230723hnsqxinhzssuqvhs.png)

Atraci 是一款多平台的开源流媒体应用，允许用户收听超过 6000 万首音乐。Atraci 仍然处于基础开发阶段，所以很多功能暂时还未完善。

Atraci 使用 iTunes，Last.fm 以及 SoundCLoud 显示歌曲信息 —— 专辑封面、歌曲名称以及艺术家。Atraci 在 YouTube 上搜索最匹配这首音乐信息的视频，并使用其中质量最高的。

**特色包括：**

* 无广告、无需注册
* 直观的用户界面
* 智能匹配搜索任何音乐、艺术家或者专辑。Atraci 会在线校对其信息，以显示正确的歌曲名称、专辑封面以及音轨等等，同时列出最高质量的视频流媒体
* 自动修正所属专辑与艺术家
* 通过默认方式、艺术家姓名或者曲目名称对结果排序
* 以网格或列表模式查询结果
* 检索视频可以全屏模式观看
* 以随机或重复模式创建播放列表
* 应用程序内的音量调整滑块、音轨调节以及专辑封面
* 播放历史
* 网址：[atraci.github.io/Atraci-website](http://atraci.github.io/Atraci-website/)
* 开发者：The Atraci Team
* 许可证：The MIT License
* 当前版本：0.7.0

---

via: <http://www.linuxlinks.com/article/20141116052055674/MusicStreaming.html>

作者：Frazer Kline 译者：[Stevearzh](https://github.com/Stevearzh) 校对：[wxy](https://github.com/wxy)

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


如何手动删除Oracle 11g数据库

Summary: 下面的步骤会教你如何在Linux环境下手动删除Oracle 11g数据库。  我在Centos 6上安装了Oralce 11G数据库。 使用SQLPlus或者其他你喜欢的命令行工具登录数据库，登录用户是sysdba* 输入下面的命令的到不同文件的路径： select name from v$datafile; select member from v$logfile; select name from v$controlfile; select name from v$tempfile;  在SQLPlus中关闭数据库，接着退出SQLPlus sqlplus "/ as sysdba"   shutdown immediate; quit;  在命令行中输入下面的命令停止监听服务： 在Oralce Linux账户中： lsnrctl stop  回忆一下之

重新做个系统可能会更快……

[笑cry]能装这个基本都是服务器， 不能随便重做系统。

[爱你]

嗯嗯

何手动删除Oracle 11g数据库 | 下面的步骤会教你如何在Linux环境下手动删除Oracle 11g数据库。 我在Centos 6上安装了Oralce 11G数据库。 使用SQLPlus或者其他你喜欢的命令行工具登录数据库，登录用户是sysdba* 输入下面的命…

下面的步骤会教你如何在Linux环境下手动删除Oracle 11g数据库。

![](/data/attachment/album/201501/18/231612uenrjwvvcahxfmnj.png)

我在Centos 6上安装了Oralce 11G数据库。

使用SQL*Plus或者其他你喜欢的命令行工具登录数据库，登录用户是**sysdba*\*

输入下面的命令的到不同文件的路径：

```
select name from v$datafile;
select member from v$logfile;
select name from v$controlfile;
select name from v$tempfile;

```

**在SQL*Plus中关闭数据库，接着退出SQL*Plus**

```
sqlplus  "/ as sysdba"

```

---

```
shutdown immediate;
quit;

```

**在命令行中输入下面的命令停止监听服务：**

在Oralce Linux账户中：

```
lsnrctl stop

```

回忆一下之前的文件路径;在删除这些文件的时候作为一个检查项。记住：你备份了数据库了么？当准备好之后，就删除你的数据文件吧，同样还有你的日志文件、控制文件和临时文件。

* 进入 **$ORACLE\_HOME/network/admin** 目录并删除 **tnsnames.ora** 和 **listener.ora** 文件;
* 进入 **$ORACLE\_HOME/dbs** 目录并删除 **init[db\_name].ora**、 **orapw[db\_name]**和 **spfile[db\_name].ora** 文件;
* 进入 **$ORACLE*HOME/admin/[db*name]/pfile** 目录并删除 **init[db\_name].ora** 文件;
* 进入 **$ORACLE*HOME/admin/[db*name]/adump** 目录并删除所有文件;
* 编辑**/etc/oratab** 并移除以你数据库名字开头的行.

这样就好了。

---

via: <http://www.unixmen.com/manually-delete-oracle-11g-database/>

作者：[M.el Khamlichi](http://www.unixmen.com/author/pirat9/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


在 Mac OS X 系统中创建用于 Mac 的 Ubuntu USB 启动盘

Summary: 上个月，在戴尔的服务中心丢失我的笔记本后，我买了一台 Macbook Air 笔记本。买回来后我首先做的一些事就是给机器装上双系统，使 Ubuntu Linux 和 Mac OS X 都可用。随后的文章我会介绍如何在 Macbook 上安装 Linux ,刚开始我们需要学习 如何在 Mac OS X 系统中创建用于 Mac 的 Ubuntu USB 启动盘。 在 Ubuntu 系统或 Windows 系统中创建可启动的 USB 是非常容易的，但在 Mac OS X 系统中就没这么简单了。这就是为什么 Ubuntu 的官方指南上，在 Mac 中安装 live Ubuntu 推荐使用光盘安装而不是 USB 的原因。考虑到我的 Macbook Air 既没

Repost

#mac# #utuntun# #tools#

双系统还是干掉osx只留ubuntu，是个问题...

为什么要Ubuntu？mac os可是工作娱乐两不误啊

Mac OS+Ubuntu

Mac其实够用够优秀的，为什么要换系统？[嘻嘻]

好东西啊，拯救了银河系//@校长Ubuntu: 转发微博

也许有用//@Linux中国: 哈哈，其实这样做成的 USB 启动盘，其它系统也能用的~~//@书窗外的冷雨: 大哥，你咋今天才发呢，我昨天装的吐血哇，哈哈，不过我不是在Mac 上装Ubuntu

vagrant哭晕在厕所！

mark//@Linux中国: 哈哈，其实这样做成的 USB 启动盘，其它系统也能用的~~//@书窗外的冷雨: 大哥，你咋今天才发呢，我昨天装的吐血哇，哈哈，不过我不是在Mac 上装Ubuntu

奇怪了，难道大家都不知道还有一个东西叫做vagrant嘛？//@Linux中国: 哈哈，其实这样做成的 USB 启动盘，其它系统也能用的~~//@书窗外的冷雨: 大哥，你咋今天才发呢，我昨天装的吐血哇，哈哈，不过我不是在Mac 上装Ubuntu

嗯，别小看了这类技巧，因为GNU/Linux是融合了SystemV和Free BSD的特性的Unix,而Mac OS X 是基于Darwin从而也属于Free BSD分支，两者的差别很大，最常用的两个钩子函数fcntl和ioctl在两个平台的差别可谓巨大，导致很多设备的驱动和读写都不同，怒顶@Linux中国

回复@书窗外的冷雨:谢谢~

//@Linux中国:哈哈，其实这样做成的 USB 启动盘，其它系统也能用的~~//@书窗外的冷雨: 大哥，你咋今天才发呢，我昨天装的吐血哇，哈哈，不过我不是在Mac 上装Ubuntu

和 vagrant 有什么关系？

@我的印象笔记 以后装时用

我是用同样的方法安装kali 但是到了启动安装却失败了，说是分出来的第二个分区擦不掉，怎么解决？

![](/data/attachment/album/201501/18/233219vv5ddnn9n7dbgicz.jpg)

上个月，在戴尔的服务中心丢失我的笔记本后，我买了一台 Macbook Air 笔记本。买回来后我首先做的一些事就是给机器装上双系统，使 Ubuntu Linux 和 Mac OS X 都可用。随后的文章我会介绍如何在 Macbook 上安装 Linux ,刚开始我们需要学习 **如何在 Mac OS X 系统中创建用于 Mac 的 Ubuntu USB 启动盘**。

在 Ubuntu 系统或 Windows 系统中创建可启动的 USB 是非常容易的，但在 Mac OS X 系统中就没这么简单了。这就是为什么 Ubuntu 的官方指南上，在 Mac 中安装 live Ubuntu 推荐使用光盘安装而不是 USB 的原因。考虑到我的 Macbook Air 既没有 CD 驱动也没有 DVD 驱动，所以我更愿意在 Mac OS X 下创建一个 live USB。

### 在 Mac OS X 下创建可启动 USB 驱动盘

如前所述，在 Mac OS X 上创建对于像 Ubuntu 或任何其它可引导的操作系统这样的可启动 USB 盘是个比较麻烦的过程。但请别担心，按照下面的步骤一步一步操作就行。让我们就开始创建一个可启动的 USB 盘的操作吧：

#### 步骤 1: 格式化 USB 驱动盘

苹果是以它自定义的标准而闻名的，所以 Mac OS X 系统有自己的文件系统类型就毫不奇怪了，它的文件系统叫做 Mac OS 扩展或 [HFS 插件](http://en.wikipedia.org/wiki/HFS_Plus)。因此，您需要做的第一件事就是用 Mac OS 扩展文件系统来格式化您的 USB 驱动盘。

要格式化 USB 盘，请先插入 USB 盘。从 Launchpad（在底部面板上的一个火箭形状的图标）上前往**磁盘工具**应用程序。

![](/data/attachment/album/201501/18/233220o18qfvl9k11szvq8.jpg)

* 在磁盘工具中，从左手边的面板上选择你的 USB 盘来格式化。
* 点击右边面板的**分区**标签。
* 从下拉菜单中，选择 **1 分区**。
* 给这驱动盘起个您想要的名字。
* 接下来，切换分区格式为**格式化成 Mac OS 扩展 (日志型)**

下面的截屏将会对您有所帮助。

![](/data/attachment/album/201501/18/233221u8n4rrahm0dhdzz8.jpg)

在我们开始真正格式化 USB 盘之前这是唯一一件要做的操作。点击在右边面板的选项按纽，要确保分区的模式是 **GUID 分区表**形式的。

![](/data/attachment/album/201501/18/233222v6fb4zrfdgcgnr0f.jpg)

当所有都已经设置完了后，仅仅只需点击**应用**按纽。它会弹出一个要格式化 USB 驱动盘的警告消息，当然是要点击分区按纽来格式化 USB 驱动盘拉。

#### 步骤 2: 下载 Ubuntu

当然，您需要下载 Ubuntu 桌面版本的 ISO 镜像文件。链接到 [Ubuntu 官网去下载您喜欢的 Ubuntu 桌面版本系统](http://www.ubuntu.com/download/desktop)。因为您使用的是 Macbook Air，我建议您下载 64 位版本中的一款。Ubuntu 14.04 是最新的 LTS 版本，我建议您们使用它。

#### 步骤 3: 把 ISO 格式转成 IMG 格式

您下载的文件是 ISO 格式的，但我们需要它是 IMG 格式的，使用 [hdiutil](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html) 命令工具就可以很容易的转换。打开终端，也可以从 Launchpad 或 Spotlight 中打开，然后使用如下的命令就可以把 ISO 格式的转换成 IMG 格式的了:

```
hdiutil convert -format UDRW -o ~/Path-to-IMG-file ~/Path-to-ISO-file

```

通常下载的文件会在 ~/Downloads 目录下。所以在我的系统来，输入的命令是:

```
hdiutil convert -format UDRW -o ~/Downloads/ubuntu-14.10-desktop-amd64 ~/Downloads/ubuntu-14.10-desktop-amd64.iso

```

![](/data/attachment/album/201501/18/233224mhbrqhvzzr0qrrqi.jpeg)

您可能已经注意到我并没有新转换出的文件加上 IMG 后缀。这是没问题的，因为后缀只是个标志，重要的是文件类型并不是文件的扩展名。转换出来的文件可能会被 Mac OS X 系统自动加上个 .dmg 后缀。别担心，这是正常的。

#### 步骤 4: 获得 USB 盘的设备号

接下来的事情就是获得 USB 盘的设备号。在终端中运行如下命令：

```
diskutil list

```

它会列出系统中当前可用的所有‘磁盘’信息。从它的大小上您应该能识别出此 USB 盘。为了避免混淆，我建议您只插入一个 USB 盘。我的示例中，设置号是 2 （一个大小为 8G 的 USB）: /dev/disk2

![](/data/attachment/album/201501/18/233225r5ldnoajaogosg51.jpeg)

当得到设备号后，运行如下命令：

```
diskutil unmountDisk /dev/diskN

```

这儿的 N 就是前面您得到的 USB 的设备号。所以，我的示例中，上面的命令就变成：

```
diskutil unmountDisk /dev/disk2

```

执行结果应该是：**成功的卸载 disk2 上的所有卷**。

#### 步骤 5: 在 Mac OS X 中创建可启动的 USB 驱动盘

终于我们只有创建可启动的 USB 盘这最后一步了。我们会使用 [dd 命令](http://en.wikipedia.org/wiki/Dd_%28Unix%29)，它非常的强大，必须得小心使用。因此，一定要记得您 USB 驱动盘的正确设备号，要不然会使 Mac OS X 系统崩溃。在终端中使用如下命令:

```
sudo dd if=/Path-to-IMG-DMG-file of=/dev/rdiskN bs=1m

```

这儿我们使用 dd (拷贝和转换) 来把 IMG 输入文件 (if) 拷贝和转换到 磁盘 N 中。我希望您还记得在步骤 3 中已经生成的 IMG 文件的存放位置。对我的机器来说，命令如下所示：

```
sudo dd if=~/Downloads/ubuntu-14.10-desktop-amd64.dmg of=/dev/rdisk2 bs=1m

```

我们用超级用户权限（sudo）来运行上面的命令，还需要您输入密码。跟 Linux 中类似，您从键盘中输入密码时，将看不到任何星号或显示的提示，不用担心，这是 Unix 终端的习惯。

甚至在您输入完密码后，**您都不会看到立即的输出，这是正常的**。需要一小会儿时间才会处理完成。

#### 步骤 6: 完成可启动 USB 驱动盘的整个处理过程

一旦 DD 命令处理完成，会弹出一个对话框：**您插入的磁盘在这机器上不可读**。

![](/data/attachment/album/201501/18/233227b22tsl4wp3xdjtse.png)

别惊慌，一切正常。只是**现在不要点击初始化、忽略或弹出按纽**。回到终端，您会看到最新处理完成的一些信息。我的机器中显示如下：

>
> 1109+1 records in
>
>
> 1109+1 records out
>
>
> 1162936320 bytes transferred in 77.611025 secs (14984164 bytes/sec)
>
>
>

![](/data/attachment/album/201501/18/233228p4wu7djjuzwekdfd.jpeg)

现在，在终端中使用如下命令来弹出我们的 USB 驱动盘：

```
diskutil eject /dev/diskN

```

N 当然指的是我们前面使用过的设备号，在我的示例中是 2 ：

```
diskutil eject /dev/disk2

```

一旦弹出，点击前面出现那对话框上的**忽略**按纽。现在您的可启动 USB 磁盘已经创建好了，把它拔下来吧。

#### 步骤 7: 检查您新创建的可启动 USB 盘

一旦您在 Mac OS X 中完成了创建一个 live USB 这么重大的任务，是时候测试您的新成果了。

* 插入可启动 USB 盘，重启系统。
* 在苹果启动的时候，一直按着 option （或 alt）键。
* 这会引导您进入启动时需要访问的可使用磁盘界面。我假设您知道接下来的操作步骤。

对我机器来说它显示了两个 EFI 启动盘：

![](/data/attachment/album/201501/18/233229xgc7ozgayafzh1cy.jpeg)

我选择第一个，然后它就会直接进入 Grub 界面：

![](/data/attachment/album/201501/18/233230tbz0mm3pbwvk0pzu.jpeg)

我希望这篇教程对您想要在 Mac OS X 下创建可启动的 Ubuntu 系统 USB 驱动盘有所帮助。在接下来的一篇文章中您会学到怎么样安装 OS X 和 Ubuntu 双系统。请继续关注。

---

via: <http://itsfoss.com/create-bootable-ubuntu-usb-drive-mac-os/>

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

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


采用转发服务器增强 Postfix 邮件服务器的安全

Summary: 当你启动并运行应用服务器后，你就需要一台好的邮件服务器来为你传递邮件。我为我所有的服务器开通了postfix邮件服务，下面就是我常用的配置。 CentOS 6上安装Postfix yum install postfix  默认安装了Sendmail，所以最好将它停掉并移除。 service sendmail stop yum remove sendmail  Postfix包含了两个配置文件main.cf和master.cf，对于基本的配置，你需要修改main.cf。同时，postfix可以像shell变量一样定义参数，并通过$来调用。这些参数不需要再使用前定义，Postfix只在运行中需要时才会查询某个参数。 配置postfix vim /etc/postfix

GO

![](/data/attachment/album/201501/19/100749yy85b6l3byrvddrv.png)

当你启动并运行应用服务器后，你就需要一台好的邮件服务器来为你传递邮件。我为我所有的服务器开通了postfix邮件服务，下面就是我常用的配置。

### CentOS 6上安装Postfix

```
yum install postfix

```

默认安装了Sendmail，所以最好将它停掉并移除。

```
service sendmail stop
yum remove sendmail

```

Postfix包含了**两个配置文件main.cf和master.cf**，对于基本的配置，你需要修改main.cf。同时，postfix可以像shell变量一样定义参数，并通过$来调用。这些参数不需要再使用前定义，Postfix只在运行中需要时才会查询某个参数。

### 配置postfix

```
vim /etc/postfix/main.cf

```

去掉以下行的注释

```
# 你的主机名
myhostname = yourhostname.com

# 你的发件域
myorigin = $myhostname

# 指定用于接收邮件的网络接口，这里指定 localhost 是因为我们只用来接受本地的程序投递
inet_interfaces = localhost

# 指定所使用的协议，可以使用“all”来增加 IPv6 支持
inet_protocols = ipv4

# 指定所接受的邮件域
mydestination = $myhostname, localhost.$mydomain, localhost

# 仅转发本地主机的邮件，而不是主机所在的网络
mynetworks_style = host

```

启动postfix

```
service postfix start

```

这些基本的postfix配置可以让你的机器发送邮件，你可以通过发送邮件并检查“maillog”日志文件来验证。

```
echo test mail | mail -s "test"  leo@techarena51.com && sudo tail -f /var/log/maillog

# 输出的日志类似如下
Aug 25 14:16:21 vps postfix/smtp[32622]: E6A372DC065D: to=, relay=smtp.mailserver.org[50.56.21.176], delay=0.8, delays=0.1/0/0.43/0.27, dsn=2.0.0, status=sent (250 Great success)
Aug 25 14:16:21 vps postfix/qmgr[5355]: E6A372DC065D: removed

```

但是，上述配置并不够，因为邮件服务大多数时候都会被垃圾邮件挤满，你需要添加SPF、PTR和DKIM记录。即便如此，你的邮件仍然可能被当作垃圾邮件来投递，因为你的IP地址被列入了黑名单，大多数时候是因为你的vps先前被入侵了。

还有另外一种选择，或者说是更好的方式是使用第三方邮件提供商提供的邮件服务，如Gmail，或者甚至是Mailgun。我使用Mailgun，因为它们提供了每个月10000封免费电子邮件，而Gmail则提供了每天100封左右的邮件。

在“/etc/postfix/main.cf”中，你需要添加“smtp.mailgun.com”作为你的“转发主机”，并启用“SASL”验证，这样postfix就可以连接并验证到远程Mailgun服务器。

添加或取消以下行的注释。

```
relayhost = [smtp.mailgun.org]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps=static:your_username:your_password
smtp_sasl_security_options=noanonymous

```

Postfix本身不会实施“SASL”验证，因此你需要安装“cyrus-sasl-plain”。

```
sudo yum install cyrus-sasl-plain

```

如果你不安装此包，那么你就会收到这条错误信息“SASL authentication failed; cannot authenticate to server smtp.mailgun.org[50.56.21.176]: no mechanism available)”

重启postfix

```
sudo service postfix restart

```

### 使用TLS加固Postfix安全

Postfix支持TLS，它是SSL的后继者，允许你使用基于密钥的验证来加密数据。我推荐你阅读 <http://www.postfix.org/TLS_README.html> ，以了解TLS是怎么和postfix一起工作的。

为了使用TLS，你需要生成一个私钥和一个由证书授权机构颁发的证书。在本例中，我将使用自颁发的证书。

```
sudo yum install mod_ssl openssl
# 生成私钥
openssl genrsa -out smtp.key 2048

# 生成 CSR
openssl req -new -key smtp.key -out smtp.csr

# 生成自签名的钥匙
openssl x509 -req -days 365 -in smtp.csr -signkey smtp.key -out smtp.crt

# 将文件复制到正确的位置
cp smtp.crt /etc/pki/tls/certs
cp smtp.key /etc/pki/tls/private/smtp.key
cp smtp.csr /etc/pki/tls/private/smtp.csr

```

打开postfix配置文件，然后添加以下参数。

```
sudo vim /etc/postfix/main.cf

smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes

smtpd_tls_key_file = /etc/pki/tls/private/smtp.key
smtpd_tls_cert_file = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/ssl/certs/ca.crt
smtp_tls_loglevel = 1

```

安全级别“may”意味着宣告对远程SMTP客户端上的STARTTLS的支持，但是客户端不需要使用加密。我在这里按照[mailgun文档](http://documentation.mailgun.com/user_manual.html#smtp-relay)提示使用“may”，但是如果你想要强制使用TLS加密，可以使用“encrypt”。

```
service postfix restart
# 发送一封测试邮件
echo test mail | mail -s "test"  test@yourdomain.com && sudo tail -f /var/log/maillog

```

你应该会看到以下信息

```
Aug 21 00:00:06 vps postfix/smtp[4997]: setting up TLS connection to smtp.mailgun.org[50.56.21.176]:587
Aug 21 00:00:06 vps postfix/smtp[4997]: Trusted TLS connection established to smtp.mailgun.org[50.56.21.176]:587: TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)

```

如果一切正常，你可以注释掉以下参数。

“smtp\_tls\_loglevel = 1”

对于故障排除，我推荐你阅读[Postfix小建议和排障命令](http://techarena51.com/index.php/postfix-configuration-and-explanation-of-parameters/)

---

via: <http://techarena51.com/index.php/configure-secure-postfix-email-server/>

作者：[Leo G](http://techarena51.com/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

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


如何在Ubuntu上使用MultiSystem创建多启动USB盘

Summary: 介绍 也许还有不少人不知道MultiSystem，它是一个用来在Linux系统中创建多启动usb盘的小型的开源软件。使用这个工具，我们可以在USB中创建任意多的可启动Linux发行版。你所需要的只是网络链接（只在MultiSystem安装的时候需要），以及一个足够大的USB盘，这取决于你想在USB盘中放入发行版的数量。 在 Ubuntu 14.10/14.04 安装MultiSystem 手动安装: 下载 MultiSystem脚本，并解压到任意地方。进入解压的地址，使用下面的命令运行脚本。 sudo ./install-depot-multisystem.sh  使用 PPA 安装: 当然，你也可以用下面的命令来更简单地使用PPA

这软件用了一年多了，真的很好用，装机必备！

### 介绍

也许还有不少人不知道**MultiSystem**，它是一个用来在Linux系统中创建多启动usb盘的小型的开源软件。使用这个工具，我们可以在USB中创建任意多的可启动Linux发行版。你所需要的只是网络链接（只在MultiSystem安装的时候需要），以及一个足够大的USB盘，这取决于你想在USB盘中放入发行版的数量。

### 在 Ubuntu 14.10/14.04 安装MultiSystem

#### 手动安装:

[下载 MultiSystem](http://liveusb.info/multisystem/install-depot-multisystem.sh.tar.bz2)脚本，并解压到任意地方。进入解压的地址，使用下面的命令运行脚本。

```
sudo ./install-depot-multisystem.sh

```

#### 使用 PPA 安装:

当然，你也可以用下面的命令来更简单地使用PPA来安装MultiSystem。

```
sudo apt-add-repository 'deb http://liveusb.info/multisystem/depot all main'
wget -q -O - http://liveusb.info/multisystem/depot/multisystem.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install multisystem

```

安装完之后，它会自动打开MultiSystem。只要点击关闭按钮退出。

### 安装之后

MultiSystem 安装完成后，可以插入你的USB，并通过Unity Dash或者菜单运行MultiSystem。

![](/data/attachment/album/201501/19/102128op4sdepdvs2scnmv.png)

第一次启动时，MultiSystem界面看起来会像下面这样。

![](/data/attachment/album/201501/19/102129jg2iscwzigw2zc4i.png)

选择USB设备，点击**确认**按钮。如果你看到下面的错误窗口，不必担心，它说的是USB设备没有标签。点击OK让MultiSystem自动设置标签。

![](/data/attachment/album/201501/19/102130argxkgdptagkugak.png)

那么，拔出/重新插入USB，再次运行MultiSystem。选择USB盘，再次点击确认。现在，你被要求确认在USB中安装Grub2.点击OK继续。

![](/data/attachment/album/201501/19/102132oqxhjdb1x8zz0xjr.png)

最终，你会高兴地看到MultiSystem的界面。现在，时候创建多启动USB盘。

![](/data/attachment/album/201501/19/102134xt000p2z0typyhy0.png)

### 使用

MultiSystem非常容易使用。将ISO文件拖入MultiSystem窗口中。如果不行的话，点击底部的**cd 按钮**来选择ISO文件。

![](/data/attachment/album/201501/19/102135k1b47zkczc149ba4.png)

现在，MultiSystem会从ISO中拷贝文件，并让USB可启动。

![](/data/attachment/album/201501/19/102138egocu4csocgjgqgi.png)

相似地，你可以在你的USB中加入任意多的发行版。我这次加入了两个Linux发行版：CentOS 6.5和Android。

加完ISO文件后，你会在MultiSystem的主窗口中看到可启动的发行版列表了。

![](/data/attachment/album/201501/19/102141jnjqqqq2tnntukla.png)

就是这样。我们的多启动USB盘就可以使用了。重启系统，并在BIOS中设置USB优先启动。选择你想要安装的发行版并开始安装系统。

![](/data/attachment/album/201501/19/102142ljsazzbbccusb551.png)

此外，MultiSystem含有一些其它的选项：

* Grub 设置
* Grub 和 Burg 的bootloader更新
* 下载 LiveCD
* VirtualBox 安装
* 格式化USB盘
* 还有更多选项

这些额外选项可以在MultiSystem的**菜单**标签里面看到。

![](/data/attachment/album/201501/19/102145d8pispek10rgegok.png)

同样，你也可以在Ubuntu中使用QEMU或者Oracle VirtualBox测试多启动USB盘。

![](/data/attachment/album/201501/19/102148nkkssssaqvsv5paw.png)

MultiSystem工具是我测试到现在最棒和最有用的一款工具。这款工具对那些想要在他们的机器上安装多个系统的人是非常有用的。在你外出的时候，你不必再携带CD/DVD袋了。只要买一个16GB或者32GB的USB就行，并下载所有你想要的系统，随心所欲的安装系统即可。

并且，一个对于Windows系统用户的好消息是它也支持Windows系统。我在Windows 7上测试过，它可以工作！

享受吧！

---

via: <http://www.unixmen.com/create-multiboot-usb-ubuntu-using-multisystem/>

作者：[SK](http://www.unixmen.com/author/sk/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


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下载“官方”容器镜像的时候，我发现这样一句话：

```
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用这套系统来对镜像进行安全加固——我才有机会更深入的发现，逻辑上整个与镜像安全相关的部分具有一系列系统性问题。

![](/data/attachment/album/201501/19/104004n7eort68zxjslt72.png)

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上翻的第一篇

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

[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" 按钮进行转换。

![](/data/attachment/album/201501/22/205425e3jjqzsdjnv9natg.jpg)

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 文件来进行编码，如下所示：

![](/data/attachment/album/201501/22/205428qkxjjjifj2vkkjm2.jpg)

总而言之，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命令分享#

@我的印象笔记

今天我们将会向你展示如何使用 **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** —— 设备的容量

![](/data/attachment/album/201501/22/212218h08kqjjh8q4cj8fa.jpg)

### 显示设备的所有者

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

```
lsblk -m

```

![](/data/attachment/album/201501/22/212219rznn4hn7oz4nqknk.jpg)

### 列出设备块

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

```
lsblk -l

```

### 在脚本中使用

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

```
lsblk -ln

```

![](/data/attachment/album/201501/22/212220y64rpgzr6vk3sz4e.jpg)

blkid
-----

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

### blkid 使用方法

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

```
# blkid

```

![](/data/attachment/album/201501/22/212221kb58c82t55h5g522.jpg)

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

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

```
# blkid /dev/sda1

```

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

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

```

![](/data/attachment/album/201501/22/212222cusr8auqqqpbjuj6.jpg)

### 详细信息

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

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

```

![](/data/attachment/album/201501/22/212225rcwmvnnquc9zvw60.jpg)

### 重置缓存

有时候设备列表可能不会更新，如果遇到这种情况你可以使用 -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

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 服务器。

![](/data/attachment/album/201501/22/214634ey75e65qmhz4h764.jpg)

### 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份额急跌到只有三分之一。并大部份还在中国。

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

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

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

![](/data/attachment/album/201501/24/120454yx2t1w6ptnpbtx6n.jpg)

**超级计算机**: 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 />
还有关于这句 “你不应该用特权模式来运行这个命令”，如果用特权模式来运行这个命令，有什么后果吗？还是用 普通模式就可以运行，而不必要使用特权模式？这两个都没有说清楚。

@我的印象笔记

谢谢，已经修正~~

以前常用现在忘了。。

![](/data/attachment/album/201501/24/215758hkrsrxjpp2dsiadi.png)

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

```
sudo lshw -C network

```

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

![](/data/attachment/album/201501/24/215800z71lkk6hbg91kmll.jpeg)

```
*-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

```

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

![](/data/attachment/album/201501/24/215803g24g6381p2bzzr4j.jpeg)

```
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:可惜不能用管道输出，还需要另开一个页面

收藏了

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

![](/data/attachment/album/201501/24/221941p7k1tt1au71pp3fo.jpg)

### 安装

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

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

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

```
$ make
$ sudo make install

```

### 运行cv

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

```
$ ./cv

```

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

```
$ cv

```

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

![cv no command](/data/attachment/album/201501/24/221944m5wapc52wpbr35zi.png)

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

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

![cv default](/data/attachment/album/201501/24/221945fy3dyzessyd4deoy.png)

### 添加选项到 cv

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

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

```
$ cv -w

```

![cv estimated throughput](/data/attachment/album/201501/24/221946xja22atafaabajbf.png)

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

```
$ cv -wq

```

### cv 和 watch 命令

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

```
$ watch cv -qw

```

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

![cv and watch](/data/attachment/album/201501/24/221948qmxvt2ptpqztttz2.png)

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

正如其所承诺的那样，你可以使用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/) 荣誉推出