如何用Puppet和Augeas管理Linux配置

Summary: 虽然Puppet是一个真正独特的有用工具，但在有些情况下你可以使用一点不同的方法来用它。比如，你要修改几个服务器上已有的配置文件，而且它们彼此稍有不同。Puppet实验室的人也意识到了这一点，他们在 Puppet 中集成了一个叫做Augeas的伟大的工具，它是专为这种使用情况而设计的。 Augeas可被认为填补了Puppet能力的空白，比如在其中一个指定对象的资源类型（例如用于维护/etc/hosts中的条目的主机资源）还不可用时。在这个文档中，您将学习如何使用Augeas来减轻你管理配置文件的负担。 Augeas是什么?  Augeas基本上就是一个配置编辑工具

没用过，不觉明厉！

谢谢分享，@我的印象笔记 linux

虽然[Puppet](http://linux.cn/article-3959-1.html)是一个真正独特的有用工具，但在有些情况下你可以使用一点不同的方法来用它。比如，你要修改几个服务器上已有的配置文件，而且它们彼此稍有不同。Puppet实验室的人也意识到了这一点，他们在 Puppet 中集成了一个叫做[Augeas](http://augeas.net/)的伟大的工具，它是专为这种使用情况而设计的。

Augeas可被认为填补了Puppet能力的空白，比如在其中一个指定对象的资源类型（例如用于维护/etc/hosts中的条目的主机资源）还不可用时。在这个文档中，您将学习如何使用Augeas来减轻你管理配置文件的负担。

### Augeas是什么?

![](/data/attachment/album/201411/25/163727yz7ejia7eic969i3.png)

Augeas基本上就是一个配置编辑工具。它以他们原生的格式解析配置文件并且将它们转换成树。配置的更改可以通过操作树来完成，并可以以原生配置文件格式保存配置。

### 这篇教程要达成什么目的？

我们会针对[我们之前构建的Puppet服务器](http://linux.cn/article-3959-1.html)安装并配置Augeas。我们会使用这个工具创建并测试几个不同的配置文件，并学习如何适当地使用它来管理我们的系统配置。

### 前置阅读

我们需要一台工作的Puppet服务器和客户端。如果你还没有，请先按照我先前的[教程](http://linux.cn/article-3959-1.html)来。

Augeas安装包可以在标准CentOS/RHEL仓库中找到。不幸的是，Puppet用到的Augeas的ruby封装只在puppetlabs仓库中（或者[EPEL](http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html)）中才有。如果你系统中还没有这个仓库，请使用下面的命令：

在CentOS/RHEL 6.5上:

```
 # rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabsrelease610.noarch.rpm

```

在CentOS/RHEL 7上:

```
 # rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabsrelease710.noarch.rpm

```

在你成功地安装了这个仓库后，在你的系统中安装RubyAugeas：

```
 # yum install rubyaugeas

```

或者如果你是从我的[上一篇教程中继续](http://linux.cn/article-3959-1.html)的，使用puppet的方法安装这个包。在/etc/puppet/manifests/site.pp中修改你的custom\_utils类，在packages这行中加入“rubyaugeas”。

```
class custom_utils {
        package { ["nmap","telnet","vimenhanced","traceroute","rubyaugeas"]:
                ensure => latest,
                allow_virtual => false,
        }
}

```

### 不带Puppet的Augeas

如我先前所说，最初Augeas并不是来自Puppet实验室，这意味着即使没有Puppet本身我们仍然可以使用它。这种方法可在你将它们部署到Puppet环境之前，验证你的修改和想法是否是正确的。要做到这一点，你需要在你的系统中安装一个额外的软件包。请执行以下命令：

```
# yum install augeas

```

### Puppet Augeas 示例

用于演示，这里有几个Augeas使用案例。

#### 管理 /etc/sudoers 文件

1. 给wheel组加上sudo权限。

这个例子会向你展示如何在你的GNU/Linux系统中为%wheel组加上sudo权限。

```
# 安装sudo包
package { 'sudo':
    ensure => installed, # 确保sudo包已安装
}

# 允许用户属于wheel组来使用sudo
augeas { 'sudo_wheel':
    context => '/files/etc/sudoers', # 目标文件是 /etc/sudoers
    changes => [
        # 允许wheel用户使用sudo
        'set spec[user = "%wheel"]/user %wheel',
        'set spec[user = "%wheel"]/host_group/host ALL',
        'set spec[user = "%wheel"]/host_group/command ALL',
        'set spec[user = "%wheel"]/host_group/command/runas_user ALL',
    ]
}

```

现在来解释这些代码做了什么：**spec**定义了/etc/sudoers中的用户段，**[user]**定义了数组中给定的用户，所有的定义放在该用户的斜杠( / ) 后那部分。因此在典型的配置中这个可以这么表达：

```
user host_group/host host_group/command host_group/command/runas_user

```

这个将被转换成/etc/sudoers下的这一行：

```
%wheel ALL = (ALL) ALL

```

1. 添加命令别称

下面这部分会向你展示如何定义命令别名，它可以在你的sudoer文件中使用。

```
# 创建新的SERVICE别名，包含了一些基本的特权命令。
augeas { 'sudo_cmdalias':
    context => '/files/etc/sudoers', # 目标文件是 /etc/sudoers
    changes => [
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/name SERVICES",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[1] /sbin/service",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[2] /sbin/chkconfig",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[3] /bin/hostname",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[4] /sbin/shutdown",
    ]
}

```

sudo命令别名的语法很简单：**Cmnd\_Alias**定义了命令别名字段，**[alias/name]**绑定所有给定的别名，/alias/name **SERVICES** 定义真实的别名，alias/command 是属于该别名的所有命令的数组。以上将被转换如下：

```
Cmnd_Alias SERVICES = /sbin/service , /sbin/chkconfig , /bin/hostname , /sbin/shutdown

```

关于/etc/sudoers的更多信息，请访问[官方文档](http://augeas.net/docs/references/lenses/files/sudoers-aug.html)。

#### 向一个组中加入用户

要使用Augeas向组中添加用户，你也许要添加一个新用户，不管是排在 gid 字段还是最后的用户 uid 之后。我们在这个例子中使用SVN组。这可以通过下面的命令达成：

在Puppet中:

```
augeas { 'augeas_mod_group:
    context => '/files/etc/group', #目标文件是 /etc/group
    changes => [
        "ins user after svn/*[self::gid or self::user][last()]",
        "set svn/user[last()] john",
    ]
}

```

使用 augtool:

```
 augtool> ins user after /files/etc/group/svn/*[self::gid or self::user][last()] augtool> set /files/etc/group/svn/user[last()] john

```

### 总结

目前为止，你应该对如何在Puppet项目中使用Augeas有点明白了。随意地试一下，你肯定需要浏览官方的Augeas文档。这会帮助你了解如何在你的个人项目中正确地使用Augeas，并且它会让你知道可以用它节省多少时间。

如有任何问题，欢迎在下面的评论中发布，我会尽力解答和向你建议。

### 有用的链接

* <http://www.watzmann.net/categories/augeas.html>: 包含许多关于 Augeas 使用的教程。
* <http://projects.puppetlabs.com/projects/1/wiki/puppet_augeas>: Puppet wiki 带有许多实例。

---

via: <http://xmodulo.com/2014/09/manage-configurations-linux-puppet-augeas.html>

作者：[Jaroslav Štěpánek](http://xmodulo.com/author/jaroslav) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


使用GDB命令行调试器调试C/C++程序

Summary: 没有调试器的情况下编写程序时最糟糕的状况是什么？编译时跪着祈祷不要出错？用血祭召唤恶魔帮你运行程序？或者在每一行代码间添加printf("test")语句来定位错误点？如你所知，编写程序时不使用调试器的话是不方便的。幸好，linux下调试还是很方便的。大多数人使用的IDE都集成了调试器，但 linux 最著名的调试器是命令行形式的C/C++调试器GDB。然而，与其他命令行工具一致，DGB需要一定的练习才能完全掌握。这里，我会告诉你GDB的基本情况及使用方法。  安装GDB 大多数的发行版仓库中都有GDB Debian 或 Ubuntu $ sudo apt-get install gdb

南望Visual Studio王师又一年

GDB是个有好工具，有了GDB让我觉得自己当年printf("123\n");是一种多么SB的行为[偷笑][偷笑][偷笑]

直接attach进程

回复@施先进:嗯，直接 attach 进程，这个是神器啊，这篇只是给小白看的。

感觉自己不会用gdb

@比尔盖子V //@马鹿峻鋒連聊C: 感觉自己不会用gdb

Repost

Mark

w

@我的印象笔记

[doge]

@我的印象笔记

[思考]

马克

GBD调试core[熊貓] //@比尔盖子V:简单调试只记住 b, r, w, bt, next, step 就行了 //@Murakumo叢雲: @比尔盖子V //@马鹿峻鋒連聊C: 感觉自己不会用gdb

GBD调试core[熊貓]

@我的印象笔记

好难。

这个Po我感觉来得很是时候~ //@尼可熊吉:转发微博

感觉是有帮助的，调试一定离不开，和gcc一起让我对Linux开发有了信心

来自 - 山东青岛青岛职业技术学院 的 MSIE/Windows 用户

像Lua这样的脚本语言就只能print调试了

→_→//@比尔盖子V: →_→//@Cth_framebuffer: →_→//@Linux中国:→_→//@游荡的坎德人: 用客户做祭品血祭恶魔之后一切都运行的丝滑流畅……//@比尔盖子V: 简单调试只记住 b, r, w, bt, next, step 就行了//@Murakumo叢雲: @比尔盖子V //@马鹿峻鋒連聊C: 感觉自己不会用gdb

如果和Vim搞一块也是极好的。。。至少，我可以一次性完成写完代码后的所有工作了

对初步熟悉GDB的人很合适，但是在实际项目中很多人都比较迷茫啦，要是能结合实际项目来讲解可能实用性会更强

很不错，言简意赅，特别喜欢Linux中国的代码风格

简单明了，赞一个。

没有调试器的情况下编写程序时最糟糕的状况是什么？编译时跪着祈祷不要出错？用血祭召唤恶魔帮你运行程序？或者在每一行代码间添加printf("test")语句来定位错误点？如你所知，编写程序时不使用调试器的话是不方便的。幸好，linux下调试还是很方便的。大多数人使用的IDE都集成了调试器，但 linux 最著名的调试器是命令行形式的C/C++调试器GDB。然而，与其他命令行工具一致，DGB需要一定的练习才能完全掌握。这里，我会告诉你GDB的基本情况及使用方法。

![](/data/attachment/album/201411/25/214812k9he3imidt9z1939.png)

### 安装GDB

大多数的发行版仓库中都有GDB

Debian 或 Ubuntu

```
$ sudo apt-get install gdb

```

Arch Linux

```
$ sudo pacman -S gdb

```

Fedora,CentOS 或 RHEL：

```
$sudo yum install gdb

```

如果在仓库中找不到的话，可以从[官网中下载](https://www.gnu.org/software/gdb/)。

### 示例代码

当学习GDB时，最好有一份代码，动手试验。下列代码是我编写的简单例子，它可以很好的体现GDB的特性。将它拷贝下来并且进行实验——这是最好的方法。

```
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int i;
    int a=0, b=0, c=0;
    double d;
    for (i=0; i<100; i++)
    {
        a++;
        if (i>97)
            d = i / 2.0;
        b++;
    }
    return 0;
}

```

### GDB的使用

首先最重要的，你需要使用编译器的 “-g“选项来编译程序，这样可执行程序才能通过GDB来运行。通过下列语句开始调试：

```
$ gdb -tui [可执行程序名]

```

使用”-tui“选项可以将代码显示在一个漂亮的交互式窗口内（所以被称为“文本用户界面 TUI”），在这个窗口内可以使用光标来操控，同时在下面的GDB shell中输入命令。

![](/data/attachment/album/201411/25/214816o1bzk8n34yz44uk4.jpg)

现在我们可以在程序的任何地方设置断点。你可以通过下列命令来为当前源文件的某一行设置断点。

```
break [行号]

```

或者为一个特定的函数设置断点：

```
break [函数名]

```

甚至可以设置条件断点

```
break [行号] if [条件]

```

例如，在我们的示例代码中，可以设置如下：

```
break 11 if i > 97

```

![](/data/attachment/album/201411/25/214819u358dd35vxdvrhsr.png)

这样，程序循环97次之后停留在“a++”语句上。这样是非常方便的，避免了我们需要手动循环97次。

最后但也是很重要的是，我们可以设置一个“观察断点”，当这个被观察的变量发生变化时，程序会被停止。

```
watch [变量]

```

这里我们可以设置如下：

```
watch d

```

当d的值发生变化时程序会停止运行（例如，当i>97为真时）。

当设置断点后，使用"run"命令开始运行程序，或按如下所示：

```
r [程序的输入参数（如果有的话）]

```

gdb中，大多数的命令单词都可以简写为一个字母。

不出意外，程序会停留在11行。这里，我们可以做些有趣的事情。下列命令：

```
bt

```

回溯功能（backtrace）可以让我们知道程序如何到达这条语句的。

![](/data/attachment/album/201411/25/214820d2evv028v0lkvpko.jpg)

```
info locals

```

这条语句会显示所有的局部变量以及它们的值（你可以看到，我没有为ｄ设置初始值，所以它现在的值是任意值）。

当然：

![](/data/attachment/album/201411/25/214827aijcxqxcuibi0mm8.jpg)

```
p [变量]

```

这个命令可以显示特定变量的值，而更进一步：

```
ptype [变量]

```

可以显示变量的类型。所以这里可以确定d是double型。

![](/data/attachment/album/201411/25/214829h8gk9g1t47mm758t.jpg)

既然已经到这一步了，我么不妨这么做：

```
set var [变量] = [新的值]
```

这样会覆盖变量的值。不过需要注意，你不能创建一个新的变量或改变变量的类型。我们可以这样做：

```
set var a = 0
```

![](/data/attachment/album/201411/25/214831ilo303cqk7ql7ka3.png)

如其他优秀的调试器一样，我们可以单步调试：

```
step

```

使用如上命令，运行到下一条语句，有可能进入到一个函数里面。或者使用：

```
next

```

这可以直接运行下一条语句，而不进入子函数内部。

![](/data/attachment/album/201411/25/214832kr5yyxuxksfz5c2b.jpg)

结束测试后，删除断点：

```
delete [行号]

```

从当前断点继续运行程序：

```
continue

```

退出GDB：

```
quit

```

总之，有了GDB，编译时不用祈祷上帝了，运行时不用血祭了，再也不用printf(“test“）了。当然，这里所讲的并不完整，而且GDB的功能远远不止于此。所以我强烈建议你自己更加深入的学习它。我现在感兴趣的是将GDB整合到Vim中。同时，这里有一个[备忘录](http://users.ece.utexas.edu/%7Eadnan/gdb-refcard.pdf)记录了GDB所有的命令行，以供查阅。

你对GDB有什么看法？你会将它与图形调试器对比吗，它有什么优势呢？对于将GDB集成到Vim有什么看法呢？将你的想法写到评论里。

---

via: <http://xmodulo.com/gdb-command-line-debugger.html>

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

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


如何将 Ubuntu14.04 Server 安全的升级到14.10

Summary: 你可能已经知道如何将你的 Ubuntu 桌面升级到最新版本了，不过如果你用的 Ubuntu Server，而且也正好又希望升级一下的话（前提是，不会影响你的应用。一般来说，对于服务器操作系统，应该采用保守态度。如果不是必须升级才能解决的安全问题，最好不要升级，而是采用各种外部手段来解决。）  如果想从Ubuntu14.04/13.10/13.04/12.10/12.04或者更老的版本升级到14.10，只要遵循下面给出的步骤。注意，你不能直接从13.10升级到14.10。你应该先将13.10升级到14.04在从14.04升级到14.10。下面是详细步骤。 下面的步骤不仅能用于14.10，也兼容于

新版本来了？

Ubuntu半年一个版本对服务器来说太快了

回复@开源新闻发布台:是的，而且还不是 LTS，基本上没人会升级的吧。。。

只用LTS版

LTS五年的支持对服务器来说都不算长，何况14.10这样的短期试验版本

你可能已经知道如何将你的 Ubuntu 桌面升级到最新版本了，不过如果你用的 Ubuntu Server，而且也正好又希望升级一下的话（前提是，不会影响你的应用。一般来说，对于服务器操作系统，应该采用保守态度。如果不是必须升级才能解决的安全问题，最好不要升级，而是采用各种外部手段来解决。）

![](/data/attachment/album/201411/25/221920hbqtmusynu7aa8qb.png)

如果想从Ubuntu14.04/13.10/13.04/12.10/12.04或者更老的版本升级到14.10，只要遵循下面给出的步骤。注意，你不能直接从13.10升级到14.10。你应该先将13.10升级到14.04在从14.04升级到14.10。下面是详细步骤。

下面的步骤不仅能用于14.10，也兼容于一些像Lubuntu14.10，Kubuntu14.10和Xubuntu14.10等的Ubuntu衍生版本

**重要**：在升级之前，保险起见，不要忘了将你的数据在U盘或外部硬盘上保存一下。

### 服务器升级

从ubuntu14.04的服务器升级到14.10的服务器，采用下面的步骤。

安装update-manager-core 这个包如果之前没唷安装的话：

```
sudo apt-get install update-manager-core

```

编辑 /etc/update-manager/release-upgrades这个文件。

```
sudo nano /etc/update-manager/release-upgrades

```

像下面那样设置Prompt=normal或者Prompt=lts

```
# Default behavior for the release upgrader.

[DEFAULT]
# Default prompting behavior, valid options:
#
#  never  - Never check for a new release.
#  normal - Check to see if a new release is available.  If more than one new
#           release is found, the release upgrader will attempt to upgrade to
#           the release that immediately succeeds the currently-running
#           release.
#  lts    - Check to see if a new LTS release is available.  The upgrader
#           will attempt to upgrade to the first LTS release available after
#           the currently-running one.  Note that this option should not be
#           used if the currently-running release is not itself an LTS
#           release, since in that case the upgrader won't be able to
#           determine if a newer release is available.
Prompt=normal

```

现在可以通过下面的命令来更新你的服务系统了。

```
sudo do-release-upgrade -d

```

直到屏幕提示你已完成。

---

via: <http://www.unixmen.com/upgrade-ubuntu-14-04-trusty-ubuntu-14-10-utopic/>

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

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


Linux 有问必答：如何修复“hda-duplex not supported in this QEMU binary”

Summary: 提问： 当我尝试在虚拟机中安装一个新的Linux时，虚拟机不能启动且报了下面这个错误："unsupported configuration: hda-duplex not supported in this QEMU binary."（不支持的配置：hda-duplex在此QEMU文件中不支持。） 我该如何修复？   这个错误可能来自一个当默认声卡型号不能被识别时的一个qemu bug。  无法完成安装：不支持的配置：hda-duplex在此QEMU文件中不支持  要解决这个问题，按照下面的做。 方案一: virt-manager 在virt-manager中，打开虚拟机的虚拟硬件详细菜单，进入声卡选项，改变默认的设备型号为ac97。  点击应用按钮

回答：我不用虚拟机

[思考]

>
> **提问**： 当我尝试在虚拟机中安装一个新的Linux时，虚拟机不能启动且报了下面这个错误："unsupported configuration: hda-duplex not supported in this QEMU binary."（“不支持的配置：hda-duplex在此QEMU文件中不支持。”） 我该如何修复？
>
>
>

![](/data/attachment/album/201411/25/223052khxxx0f96lolxumr.png)

这个错误可能来自一个当默认声卡型号不能被识别时的一个qemu bug。

![](/data/attachment/album/201411/25/223055ot43juu06j4u6ho8.png)

```
无法完成安装：‘不支持的配置：hda-duplex在此QEMU文件中不支持’

```

要解决这个问题，按照下面的做。

### 方案一: virt-manager

在**virt-manager**中，打开虚拟机的虚拟硬件详细菜单，进入声卡选项，改变默认的设备型号为ac97。

![](/data/attachment/album/201411/25/223057s8p1xllz8zsh16x7.jpg)

点击“应用”按钮并保存设置。看一下虚拟机现在是否可以启动了。

### 方案二: Virsh

如果你使用的是**virsh** 而不是**virt-manager**， 你可以编辑VM相应的配置文件。在节点中查找**sound**节点，并按照下面的默认声卡型号改成**ac97**。

```
<devices>
  . . .
  <sound model='ac97'>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
  </sound>
  . . .
</device>

```

---

via: <http://ask.xmodulo.com/hda-duplex-not-supported-in-this-qemu-binary.html>

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

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


Linux 有问必答：如何在wget中禁用HTTP转发

Summary: 提问： 当我用wget获取一个重定向到URL Y的URL X的时候，wget默认会自动获取URL Y。然而我想要强制获取不带重定向的URL X。我该如何禁用wget重定向URL的功能。  在HTTP标准中，重定向响应（带3XX的HTTP响应）说明请求的URL被移到了新的位置。重定向相应接着包含了目标重定向的URL。  像常规的HTTP客户端，wget支持URL重定向（也叫URL转发），意味着当你尝试下载一个重定向的URL时，wget会自动跟随URL重定向获取重定向后的资源。如果你由于一些原因想要禁用URL重定向，并停止3XX的状态码，你可以使用wget的--max-redirect=number选项。这个

[呵呵]

Curl和wget在处理url跳转的不同！

腻害

@老坛酸醋面

我怎么了....

Repost

>
> **提问**： 当我用wget获取一个重定向到URL Y的URL X的时候，wget默认会自动获取URL Y。然而我想要强制获取不带重定向的URL X。我该如何禁用wget重定向URL的功能。
>
>
>

在HTTP标准中，重定向响应（带3XX的HTTP响应）说明请求的URL被移到了新的位置。重定向相应接着包含了目标重定向的URL。

![](/data/attachment/album/201411/26/224721v4w6u5e44h400h4e.png)

像常规的HTTP客户端，wget支持URL重定向（也叫URL转发），意味着当你尝试下载一个重定向的URL时，wget会自动跟随URL重定向获取重定向后的资源。如果你由于一些原因想要禁用URL重定向，并停止3XX的状态码，你可以使用wget的“--max-redirect=number”选项。这个选项用来指定最大（递归）重定向的数字，默认是20。

如果你想要禁用wget中的HTTP重定向，使用“--max-redirect=0”

```
$ wget --max-redirect=0 http://www.aaa.com/a.html

```

---

```
--2014-10-31 23:08:58--  http://www.aaa.com/a.html
Resolving aaa.com (aaa.com)... 1.2.3.4
Connecting to aaa.com (aaa.com)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.bbb.com/b.html [following]
0 redirections exceeded.

```

如你所见，当wget遇到HTTP重定向响应时，它不会跟着重定向，并以“0 redirections exceeded”（超出0次重定向）的错误信息停止。它同样会显示一个HTTP的状态码（比如301）。

注意一下curl，另外一个类似的HTTP客户端，行为正好相反。默认上，curl并不会跟随URL重定向。要强制使cutl重定向到一个URL，你要使用“-L”选项。

---

via: <http://ask.xmodulo.com/disable-http-redirect-wget.html>

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

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


教你在 Ubuntu 上使用 LXC 容器

Summary: 使用容器来保证主机环境的安全性，这个概念早在十年前就已经存在（例如 FreeBSD 的 jail 虚拟化技术），但是直到最近，随着部署云架构需求越来越多，像 LXC 和 Docker 这种 Linux 下的容器才成为被关注的焦点。当然，由于主流厂商（云服务商如亚马逊主推 AWS，微软主推 Azure；发行版如红帽、Ubuntu等）组成的强大靠山，Docker 已经被放在媒体的聚光灯下面，其实，Docker 里面所谓的容器技术是由 LXC 提供的。 你只是一个普通的 Linux 用户，那 Docker/LXC 能为你带来什么好处呢？容器可以将你的应用在不同的 Linux 发行版之间迁移。想像

openVZ？

mark

赞一个

赞！！！

使用“容器”来保证主机环境的安全性，这个概念早在十年前就已经存在（例如 FreeBSD 的 jail 虚拟化技术），但是直到最近，随着部署云架构需求越来越多，像 LXC 和 [Docker](http://xmodulo.com/docker-containers-centos-fedora.html) 这种 Linux 下的容器才成为被关注的焦点。当然，由于主流厂商（云服务商如亚马逊主推 AWS，微软主推 Azure；发行版如红帽、Ubuntu等）组成的强大靠山，[Docker](http://xmodulo.com/manage-linux-containers-docker-ubuntu.html) 已经被放在媒体的聚光灯下面，其实，Docker 里面所谓的“容器”技术是由 LXC 提供的。

你只是一个普通的 Linux 用户，那 Docker/LXC 能为你带来什么好处呢？容器可以将你的应用在不同的 Linux 发行版之间迁移。想像一下这个场景：你正在用的发行版是 Debian，你喜欢它的稳定性，同时你又想玩一款最新的 Ubuntu 游戏，你不需要在电脑上装双系统然后重启进入 Ubuntu，也不需要在 Debian 上跑一个耗资源的 Ubuntu 虚拟机，你只需要简单地生成一个 Ubuntu 容器就够了。

![](/data/attachment/album/201411/26/230112t4t6ujx14zc6o6o6.jpg)

抛开 Docker 的好处不谈，让我们聊一下 LXC 容器的好处：我可以使用 libvirt 提供的接口来管理 LXC，这些接口和 Docker 没有任何关系。如果你有使用基于 libvirt 库的管理工具（例如 virt-manager 和 virsh），你就可以使用它们来管理 LXC 容器。

在这篇教程中，我只介绍标准 LXC 容器管理工具的命令行操作，来教你**如何在 Ubuntu 下创建和管理 LXC 容器**。

### Ubuntu 下安装 LXC

使用下面的命令安装 LXC 在用户态的工具：

```
$ sudo apt-get install lxc

```

然后检查当前内核是否支持 LXC。如果所有结果都是“enable”，说明内核支持：

```
$ lxc-checkconfig

```

![](/data/attachment/album/201411/26/230118ci6mip9bmjc9wihi.jpg)

安装完 LXC 工具后，就能看到 LXC 自动创建了一块桥接网卡（lxcbr0，可以在 /etc/lxc/default.conf 中设置）。

![](/data/attachment/album/201411/26/230130b4jmv2p2t2z59f2t.jpg)

当你创建了 LXC 容器后，它的网口会自动链接到这个桥接网卡上，然后这个容器就能和外部世界通信了。

### 创建 LXC 容器

为了在指定环境下（比如 Debian Wheezy 64位）创建 LXC 容器，你需要一个相应的 LXC 模板。幸运的是 LXC 提供的工具集成了一整套现成的 LXC 模板，你可以在 /usr/share/lxc/templates 目录下找到它们。

```
 $ ls /usr/share/lxc/templates

```

![](/data/attachment/album/201411/26/230133h505t4i975za5gd4.jpg)

一个 LXC 模板实质上就是一个脚本，用于创建指定环境下的容器。当你创建 LXC 容器时，你需要用到它们。

比如你要新建 Ubuntu 容器，使用下面的命令即可：

```
$ sudo lxc-create -n <container-name> -t ubuntu

```

![](/data/attachment/album/201411/26/230140j5yugxxnu4nhgkhc.jpg)

默认情况下，这个命令会创建一个最小的 Ubuntu 环境，版本号与你的宿主机一致，我这边是“活泼的蝾螈”（版本号是13.10），64位。

当然你也可以创建任何你喜欢的版本，只要在命令里面加一个版本参数即可。举个例子，创建 Ubuntu 14.10 的容器：

```
$ sudo lxc-create -n <container-name> -t ubuntu -- --release utopic

```

这个命令就会下载安装指定环境下的软件包，创建新容器。整个过程需要几分钟时间，与容器的类型有关，所以，你可能需要耐心等待。

![](/data/attachment/album/201411/26/230142f4l7020libbi2b13.jpg)

下载安装完所有软件包后，LXC 容器镜像就创建完成了，你可以看到默认的登录界面。容器被放到 /var/lib/lxc/<容器名> 这个目录下，容器的根文件系统放在 /var/lib/lxc/<容器名>/rootfs 目录下。

创建过程中下载的软件包保存在 /var/cache/lxc 目录下面，当你想另外建一个一样的容器时，可以省去很多下载时间。

用下面的命令看看主机上所有的 LXC 容器：

```
$ sudo lxc-ls --fancy

```

---

```
NAME  STATE    IPV4  IPV6  AUTOSTART
------------------------------------
test-lxc   STOPPED  -     -     NO

```

使用下面的命令启动容器。参数“-d”将容器作为后台进程打开。如果没有指定这个参数，你可以在控制台界面上直接把容器的运行程序关闭（LCTT译注：Ctrl+C组合键）。

```
$ sudo lxc-start -n <container-name> -d

```

打开容器后，看看状态：

```
$ sudo lxc-ls --fancy

```

---

```
NAME  STATE    IPV4       IPV6  AUTOSTART
-----------------------------------------
lxc   RUNNING  10.0.3.55  -     NO

```

容器状态是“运行中”，容器 IP 是10.0.3.55。

你也可以看到容器的网络接口（比如我这里是 vethJ06SFL）自动与 LXC 内部网桥（lxcbr0）连上了：

```
$ brctl show lxcbr0

```

![](/data/attachment/album/201411/26/230144mdldjwfe8lmwv08k.jpg)

### 管理 LXC 容器

我们已经学习了怎么创建和启动 LXC 容器，现在来看看怎么玩一个正在运行着的容器。

第一步：打开容器控制台：

```
$ sudo lxc-console -n <container-name>

```

![](/data/attachment/album/201411/26/230149yyworzksrnywnyvk.jpg)

使用“Crtl+a q”组合键退出控制台。

停止、删除容器：

```
$ sudo lxc-stop -n <container-name>
$ sudo lxc-destroy -n <container-name>

```

复制容器，用下面的命令：

```
$ sudo lxc-stop -n <container-name>
$ sudo lxc-clone -o <container-name> -n <new-container-name>

```

### 常见问题

这个小节主要介绍你们在使用 LXC 过程中碰到过的问题。

1. 创建 LXC 容器时遇到下面的错误：

$ sudo lxc-create -n test-lxc -t ubuntu

---

```
lxc-create: symbol lookup error: /usr/lib/x86_64-linux-gnu/liblxc.so.1: undefined symbol: cgmanager_get_pid_cgroup_abs_sync

```

错误的原因是你运行了最新的 LXC，但是它所依赖的 libcgmanager 版本较老，两者不兼容。升级下 libcmanager 即可解决问题：

```
$ sudo apt-get install libcgmanager0

```

---

via: <http://xmodulo.com/lxc-containers-ubuntu.html>

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

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


CentOS 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)

Summary: LEMP 组合包是一款日益流行的网站服务组合软件包，在许多生产环境中的核心网站服务上起着强有力的作用。正如其名称所暗示的， LEMP 包是由 Linux、nginx、MariaDB/MySQL 和 PHP 组成的。在传统的 LAMP 包中使用的 Apache HTTP 协议服务器性能低下而且难于大规模集群，相比来说 nginx 的高性能及轻量级等特性，正是其的替代方案。 MariaDB 是一款社区支持驱动的 MySQL 数据库的分支，其功能更多性能更佳。PHP，服务端编程语言，具体是由 PHP FastCGI 的增强版 PHP-FPM 组件来处理，生成网页动态内容。 这篇文章里，我们示范如何在 CentOS

为什么不叫lnmp组合

学学先

不要瞎起名字啊

@Linux中国 人家是首字母组合，哪有把音标写上去的，不要杜撰好吗！你也不是权威

是lnmp

很及时 很有用

不是LNMP吗

有空看！

LEMP是LNMP的小号吗？

回复@火云仙圣:又不是我杜撰的。

微博不是人工发的吧

回复@Linux中国:@Linux中国 即便不是你杜撰的，你也最好改正，错误的东西你也要传播吗？百度都没有，这不是理由！lemp  lnmp希望你百度下

@有道云笔记收藏

不知道何时出现了一个LEMP的缩写法，究竟应该称之为LNMP还是LEMP？支持LNMP的点"支持"，支持LEMP的请"评论"。//@RSnoder:LEMP是LNMP的小号吗？

每次在openSUSE上部署都会有问题。到底是英语不过关。

是LNMP吧？

回复@火云仙圣:国外原文如此，而且不是一个地方这样说，话说好像lnmp才是我们国内杜撰的。

回复@Linux中国:好吧，尊重原文也对。

@我的印象笔记

Repost

哇，LEMP这个高端呀，有时间要测试研究一下！

LEMP?LNMP?大家弄明白再评论吧，反正小编没乱搞

百度了,lemp也可以这么叫,Nginx 发音为 Engine X....

谢谢分享

@蓝蓝小脚丫 挺好的！

最后放test.php的文件夹位置错了~~~nginx配置文件里面是/usr/share/nginx/html，小编你写放在 /var/www/html/ 目录~~~~

谢谢指正！我修改啦~~

配置nginx的default.conf文件完成后，重启出现如下错误：

nginx.service - nginx - high performance web server

   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)

   Active: failed (Result: exit-code) since 日 2015-06-14 21:30:10 CST; 45s ago

     Docs: http://nginx.org/en/docs/

  Process: 4954 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)

  Process: 6469 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)

 Main PID: 1695 (code=exited, status=0/SUCCESS)

6月 14 21:30:10 localhost.localdomain systemd[1]: Starting nginx - high performance web server...

6月 14 21:30:10 localhost.localdomain nginx[6469]: nginx: [emerg] invalid number of arguments in "try_files" directive in /e...onf:34

6月 14 21:30:10 localhost.localdomain nginx[6469]: nginx: configuration file /etc/nginx/nginx.conf test failed

6月 14 21:30:10 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1

6月 14 21:30:10 localhost.localdomain systemd[1]: Failed to start nginx - high performance web server.

6月 14 21:30:10 localhost.localdomain systemd[1]: Unit nginx.service entered failed state.

Hint: Some lines were ellipsized, use -l to show in full.

当我去除不是很理解的：try_files $uri =404;这行后，重启正常。请问这行是怎么意思呢？

有关 try_files 的解释可参见： http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files<br />
在 0.7.51 之后，才支持 =404 这样的数字参数，所以请确认你没写错，你的 nginx 版本足够新。

$ sudo yum php php-fpm php-mysql    此处命令是不是少了个install？？

确实

原文，作者也是少了，挺粗心的哈...新手安装，肯定会莫名其妙。^_^

学习

LEMP 组合包是一款日益流行的网站服务组合软件包，在许多生产环境中的核心网站服务上起着强有力的作用。正如其名称所暗示的， LEMP 包是由 Linux、nginx、MariaDB/MySQL 和 PHP 组成的。在传统的 LAMP 包中使用的 Apache HTTP 协议服务器性能低下而且难于大规模集群，相比来说 nginx 的高性能及轻量级等特性，正是其的替代方案。 MariaDB 是一款社区支持驱动的 MySQL 数据库的分支，其功能更多性能更佳。PHP，服务端编程语言，具体是由 PHP FastCGI 的增强版 PHP-FPM 组件来处理，生成网页动态内容。

（LCTT 译注：为何采用 LEMP 而不是 LNMP 的缩写？据 <https://lemp.io/> 的解释：Nginx 的发音是 Engine-X，重要的发音而不是首字母，而且 LEMP 实际上是可读的，而 LNMP 看起来只是字母表。）

这篇文章里，我们示范**如何在 CentOS 操作平台上安装 LEMP 包**。我们安装的目标是 CentOS 6 和 CentOS 7 两个操作平台，如有必要会指出它们的不同。

![](/data/attachment/album/201411/26/233324q0600r8wuu27sw6f.png)

### 第一步: Nginx

让我们在 CentOS 上安装 nginx 作为第一步，然后对它作些基本的配置，比如使其能引导时启动和[对防火墙做个性化设置](http://linux.cn/article-4243-1.html)。

#### 安装 Nginx

让我们从它的官方的 RPM 源来安装一个预构建的稳定版本的 nginx 包。

在 CentOS 7 系统上:

```
$ sudo rpm --import http://nginx.org/keys/nginx_signing.key
$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ sudo yum install nginx

```

在 CentOS 6 系统上:

```
$ sudo rpm --import http://nginx.org/keys/nginx_signing.key
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx

```

注意在安装 nginx RPM 包之前，如果您没有导入 nginx 的官方 GPG 密钥的话，会出一如下所示的警告:

```
warning: /var/tmp/rpm-tmp.KttVHD: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY

```

#### 启动 Nginx

安装完成后，nginx 是不会自动启动的。现在让我们来启动它吧，还要做些配置让其可以随着操作系统启动而启动。我们也需要在防火墙里打开 TCP/80 端口，以使得可以远程访问 nginx 的 web 服务。所有这些操作、设置都只需要输入如下命令就可实现。

在 CentOS 7 系统上:

```
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
$ sudo firewall-cmd --reload

```

在 CentOS 6 系统上:

```
$ sudo service nginx start
$ sudo chkconfig nginx on
$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo service iptables save

```

#### 测试 Nginx

nginx 的默认文档要目录是 /usr/share/nginx/html。默认的 index.html 文件一定已经在这目录下了。让我们检测下是否可以访问到这个测试 web 页，输入 http://nginx的ip地址/ 访问。

![](/data/attachment/album/201411/26/233402ogs66v2e22ce63vo.jpg)

如果您看到的是如上所示的页面的话，说明 nginx 已经正常启动。继续往下。

### 第二步: MariaDB/MySQL

下一步就是安装 LEMP 包的数据库组件。CentOS/RHEL 6 或早期的版本中提供的是 MySQL 的服务器/客户端安装包，但 CentOS/RHEL 7 已使用了 MariaDB 替代了默认的 MySQL。作为 MySQL 的简单替代品，MariaDB 保证了与 MySQL 的 API 和命令行用法方面最大的兼容性。下面是关于怎么在 CentOS 上安装和配置 MaraDB/MySQL 的操作示例。

在 CentOS 7 系统上:

如下所示操作来安装 MariaDB 服务/客户端包以及启动 MariaDB 服务。

```
$ sudo yum install mariadb-server
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb

```

在 CentOS 6 系统上:

如下示，安装 MySQL 服务/客户端包并且启动 MySQL 服务。

```
$ sudo yum install mysql-server
$ sudo service mysqld start
$ sudo chkconfig mysqld on

```

在成功启动 MariaDB/MySQL 服务后，执行在 MariaDB/MySQL 服务包中的脚本。这一次的运行会为为数据库服务器进行一些安全强化措施，如设置（非空）的 root 密码、删除匿名用户、锁定远程访问。

```
 $ sudo mysql_secure_installation

```

![](/data/attachment/album/201411/26/233406vvq6a0iklq6b6bxz.jpg)

这就是数据库的设置。现在进行下一步。

### 第三步: PHP

PHP 是 LEMP 包中一个重要的组件，它负责把存储在 MariaDB/MySQL 服务器的数据取出生成动态内容。为了 LEMP 需要，您至少需要安装上 PHP-FPM 和 PHP-MySQL 两个模块。PHP-FPM（FastCGI 进程管理器）实现的是 nginx 服务器和生成动态内容的 PHP 应用程序的访问接口。PHP-MySQL 模块使 PHP 程序能访问 MariaDB/MySQL 数据库。

#### 安装 PHP 模块

在 CentOS 7 系统上:

```
$ sudo yum install php php-fpm php-mysql

```

在 CentOS 6 系统上:

首先，您需要从仓库中安装 REMI 库（参见[本指南](http://linux.cn/article-4192-1.html)），并安装软件包。

```
$ sudo yum --enablerepo=remi install php php-fpm php-mysql

```

![](/data/attachment/album/201411/26/233411mvfa3v3anz6af6md.jpg)

在安装 PHP 时，得注意两个地方:

在 CentOS 6 系统中，安装 REMI仓库中最新的 php-mysql 模块时，MySQL 的服务端包和客户端包会被当做一部分依赖包而自动的更新。

在 CentOS 6 和 CentOS 7 中，在安装 PHP 包的同时会把 Apache web 服务器（即 httpd）当做它的依赖包一起安装。这会跟 nginx web 服务器起冲突。这个问题会在下一节来讨论。

取决于您的使用情况，可以使用 yum 命令来定制您的 PHP 引擎，也许会想安装下面的任意一个扩展 PHP 模块包。

* **php-cli**: PHP 的命令行界面。从命令行里测试 PHP 时非常有用。
* **php-gd**: PHP 的图像处理支持。
* **php-bcmath**: PHP 的数学支持。
* **php-mcrypt**: PHP 的加密算法支持 (例如 DES、Blowfish、CBC、 CFB、ECB ciphers 等)。
* **php-xml**: PHP 的 XML 解析和处理支持。
* **php-dba**: PHP 的数据抽象层支持。
* **php-pecl-apc**: PHP 加速器/缓存支持。

安装时，要查看可用的 PHP 模块的完整列表的话，可以运行：

```
$ sudo yum search php- (CentOS 7)
$ sudo yum --enablerepo=remi search php- (CentOS 6)

```

#### 启动 PHP-FPM

您需要启动 PHP-FPM ，然后把它放到自动启动服务列表。

在 CentOS 7 系统上:

```
$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm

```

在 CentOS 6 系统上:

```
$ sudo chkconfig php-fpm on
$ sudo service php-fpm start

```

### 第四步: 配置 LEMP 组合包

本教程的最后一步是调整 LEMP 组合包的配置。

#### 使 Httpd 不可用

首先，让我们把早先随 PHP 包安装的 httpd 服务给禁用掉。

在 CentOS 7 系统上:

```
$ sudo systemctl disable httpd

```

在 CentOS 6 系统上:

```
$ sudo chkconfig httpd off

```

#### 配置 Nginx

接下来，让我们配置 nginx 虚拟主机，使得 nginx 可以通过 PHP-FPM 来处理 PHP 的任务。用文本编辑器打开 /etc/nginx/conf.d/default.conf ，然后按如下所示修改。

```
 $ sudo vi /etc/nginx/conf.d/default.conf

```

---

```
server {
    listen       80;
    server_name  www.server_domain.com;
    root   /usr/share/nginx/html;
    index  index.php index.html index.htm;

    location / {
    }

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    }

    # nginx passes PHP scripts to FastCGI server via a TCP/9000 socket
    # this setting much be consistent with /etc/php-fpm.d/www.conf
    # try_files prevents nginx from passing bad scripts to FastCGI server
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

```

nginx 的默认工作线程数（在 /etc/nginx/nginx.conf 文件中指定的）是 1，让我们也来调整一下这个数字。通常来说我们创建的工作线程数应该和 CPU 核数相同。要确信您的 CPU 的核数，请运行下面这命令：

```
$ grep processor /proc/cpuinfo | wc -l

```

如果您的 CPU 是 4 核的，就如下所示修改 /etc/nginx/nginx.conf 文件。

```
$ sudo vi /etc/nginx/nginx.conf

```

---

```
worker_processes  4;

```

#### 配置 PHP

接下来，让我们对 PHP 的配置文件 /etc/php.ini 做自定义设置。更具体的就是在 /etc/php.ini 文件中增加以下两行。

```
cgi.fix_pathinfo=0
date.timezone = "PRC"

```

为了安全起见，我们希望的是 PHP 解释器只是处理指定文件路径的文件任务，而不是预测搜索一些并不存在的文件任务。上面的第一行起的就是这个作用。（LCTT 译注：原文用的时区是“America/New York”，根据国内情况，应该用 PRC或 Asia 下的中国城市。）

第二行定义的是 PHP 中日期/时间相关函数使用相关的默认时区。使用[本指南](http://ask.xmodulo.com/set-default-timezone-php.html)，找出您所在的时区，并设置相应 **date.timezone 的值**。

#### 测试 PHP

最后，让我们来测试下 nginx 是否能处理 PHP 页面。在测试之前，请确保重启 nginx 和 PHP-FPM。

在 CentOS 7 系统上:

```
$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm

```

在 CentOS 6 系统上:

```
$ sudo service nginx restart
$ sudo service php-fpm restart

```

创建一个叫名叫 test.php 的文件，然后写入如下内容，并放入 /usr/share/nginx/html 目录。

```
<?php phpinfo(); ?>

```

打开浏览器，输入 http://nginx的IP地址/test.php 。

![](/data/attachment/album/201411/26/233416ixeaxyx4vvilyaxy.jpg)

如果您能看到如上所示的页面，说明设置的 LEMP 完全成功！

---

via: <http://xmodulo.com/install-lemp-stack-centos.html>

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

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


小技巧：如何修复Lubuntu中的Docky混合错误

Summary: 总所周知，Docky是Unix/Linux类系统中的轻量级应用启动器。我是 Lubuntu 和 Docky 的忠实粉丝，因为它们不需要占用我的所有系统资源，这样就可以同时运行更多应用。我在笔记本上使用Docky应用启动器，系统为Lubuntu 14.04. 但是，如果你使用LXDE发行版，你也许肯定遇到过使用Docky时报混合的错误。看下面的截图。  如果不开启混合功能，就不能使用Docky一些特别功能，如3D背景、自动隐藏。如果你想开启这些Docky的功能，那么你需要在你的LXDE系统中开启混合功能。 就像这样，首先安装 xcompmgr包： sudo apt-get install xcompmgr  然后，

总所周知，**Docky**是Unix/Linux类系统中的轻量级应用启动器。我是 Lubuntu 和 Docky 的忠实粉丝，因为它们不需要占用我的所有系统资源，这样就可以同时运行更多应用。我在笔记本上使用Docky应用启动器，系统为Lubuntu 14.04.

但是，如果你使用LXDE发行版，你也许肯定遇到过使用Docky时报混合的错误。看下面的截图。

![](/data/attachment/album/201411/27/130334xsx09jjm0ym79zom.png)

如果不开启混合功能，就不能使用Docky一些特别功能，如3D背景、自动隐藏。如果你想开启这些Docky的功能，那么你需要在你的LXDE系统中开启混合功能。

就像这样，首先安装 **xcompmgr**包：

```
sudo apt-get install xcompmgr

```

然后，选择**菜单（Menu） -> 偏好（Preferences） -> LXSession默认程序（Default applications for LXSession）**。选择自动开始（Autostart）选项卡。 在**（+增加）+Add**框中输入“**@xcompmgr -n**”不带引号。最后点击增加按钮。

![](/data/attachment/album/201411/27/130336pcq7nnquxhznvxfg.png)

这样就搞定了。关掉LXSession配置窗口，注销或重启系统。之后，你就可以看见混合功能已经打开。

![](/data/attachment/album/201411/27/130340wkwcf7hkznq6nykv.png)

这时，你就可以使用3D背景和隐藏功能，如自动隐藏（Auto-hide），Intellihide和窗口闪烁（Window dodge）等。

![](/data/attachment/album/201411/27/130342dn9q8zhz88qmc0m3.png)

搞定！干杯！

---

via: <http://www.unixmen.com/quick-tip-fix-docky-compositing-error-lubuntu/>

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

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


Ubuntu也许能在中国给Windows以致命打击

开源加油……

Ubuntu听说很好用，但现在的笔记本电脑ThinkPAd，怕找不到驱动。在官网上也没有看对支持Ubuntu的驱动。不知道这点，Ubuntu的公司考虑了没有。硬盘太小了，只有100多G，装两个系统，几乎就没有空间了。

别扯淡了， 欧洲那么高的素质和教育水平，linux都不能成主流；韩国的实验也失败了。我看这些人是受大忽悠倪光南的影响。倪光南就像苏联的李森科一样

竞争是好，希望不要闭关[挖鼻屎]

ubuntu垃圾

力挺linux，开源加油！！

回复@小罗KeyBoy:现在这墙的高度，还有一批一批的屏蔽节奏不是闭关么[汗]

校园网客户端都用不了，你让我们学生怎么爱

不现实，桌面版不稳定，小白用户用不来。

Ubuntu？呵呵！Ubuntu！

别闹了，不可能。

你要说LinuxDeepin，我还能稍微相信一下（如果你说Fedora我一定信了）。Ubuntu？ //@火志溟:Ubuntu？呵呵！Ubuntu！

要是有linux版QQ就齐了

想多了

不太可能吧。。各种问题。

我只转发~~~~

不现实

呵呵，对于各种意见，智者见智吧。[嘻嘻]

感觉想多了。。。

这是说，“国产”搞不出来了？？//@Linux中国:呵呵，对于各种意见，智者见智吧。[嘻嘻]

感觉Ubuntu Kylin太渣了，根本没有deepin做得好。@Deepin官方微博 //@Linux中国: 呵呵，对于各种意见，智者见智吧。[嘻嘻]

@校长Ubuntu

使用哪种发行版不重要，重要的是如果政府要推行替代政策就要找准方向，应用为王，你有了linux或其它系统的应用，还怕没有人换系统？换了系统没有应用，我傻啊？换它干嘛？？？政府不是喜欢一刀切么？统一规定，国内出的应用，都要有除了WIN系统之外的版本，先从政府内部的应用开始！

转发微博.

那些院士太高调了，这个事情应该悄悄的来，学校开始。。。

虽然不确定成不成功，但这个事情至少听起来觉得很顺心，不像之前那个。

你们楼下的说Ubuntu不好的是怎么回事？！[挖鼻屎][哼]

//@Linux中国:呵呵，对于各种意见，智者见智吧。[嘻嘻]

桌面系统，除了苹果对抗微软。其他还是要谦虚的//@Linux中国:呵呵，对于各种意见，智者见智吧。[嘻嘻]

deepin!@Deepin官方微博 //@Linux中国:呵呵，对于各种意见，智者见智吧。[嘻嘻]

只要有更多的应用，完全不是问题

先转发，让时间去验证一切

就两点感觉ubuntu还是比较靠谱，1，他是一个公司在运作而不是社区，2，他在做自己的显示服务器。

最近也在装，只不过很麻烦，下载还要分几次，无语了，要下载torrent类型文件。到现在还没有安装成功。。。。不过近期会安装好，体验一下！

国内那些互联网公司会允许Linux取代windows吗

这是一个持久战，想要胜利要从娃娃抓起！想一下，我们刚开始接触计算机的操作系统，应该大多数都是诸如win98，winxp，win7之类的微软操作系统，其中XP更是经典的不败神话；如果孩提时代刚开始接触就是Linux的发行版，这样的话就会有无限遐想了。。。

中国也有许多linux的桌面版了，不过真的好烂啊 //@京葛:这样又会有官方的qq了。 //@Linux中国:呵呵，对于各种意见，智者见智吧。[嘻嘻]

@红旗Linux 不统一吧~就算用linux，好多选乌班图！红旗什么东西留着普通用户？当初就弄得好像政府才可以用的样子~没人其他人第三方支援红旗？？？？好像俺都是用Deepin来玩玩而已！好多菜鸟不会安装的......

引狼入室

Ubuntu 里面有第三方软件

还是搞自己有自主知识产权的系统，用别人的系统都是养肥别人，也容易被别人掌控，可以随便给你安个后门，结果是一样的危险，到时候，还不是又要回到开发自己系统的问题上

禁止微软进入中国市场，LINUX就会很快在中国流行起来。

脑子有病

感觉这辈子是见不到那一天了。

mirrors.163.com，mirrors.aliyun.com等都是比较好的镜像源。还有mirrors.ustc.edu.cn等教育网镜像站。如果是教育网用户，推荐选择这样的镜像站，速度非常非常快。推荐直接下载.iso镜像文件，u盘安装（ultraiso, unetbootin, Win32DiskImager）。也可以在线安装。还可以用easybcd等引导.iso。或者grub2 loopback，或者grub4dos map。

并不需要分几次的

>
> Ubuntu Kylin也许能在中国用来替代Windows
>
>
>

**Windows操作系统将退出中国的前门，而它的位置将由一个Linux发行版替代，用于官方和政府部门。问题是目前还没有一个真正的可替代系统，尽管还是有一款操作系统也许已经准备接下这个任务，它就是Ubuntu Kylin。**

**![](/data/attachment/album/201411/27/132844ds3umub83iyaajc6.jpg)**

至少可以这么说，中国政府和微软目前的关系很紧张。[就像新闻里说的](http://news.softpedia.com/news/China-Starts-Windows-Eradication-15-of-Govt-PCs-to-Switch-to-Linux-Every-Year-463393.shtml)，一个用Linux类似系统在全国逐步替换Windows的计划已经在准备了。还不清楚具体会采用哪个系统，因为情况很复杂而且这是一个非常大的国家。

通常，这种问题没有一个普适的解决方案，而且中国的行动确实看起来有点呆板。不管怎样，这为Ubuntu Keylin打开了一扇巨大的机会之窗，它是一个基于Ubuntu由中国开发者和Canonical共同开发的发行版。它已经稳定一段时间了，而且已经发布了几个连续版本。

### Ubuntu Kylin在敲Windows的大门

有趣的是，在这个关于中国意图的新闻冒出来的同一天里，发布了一篇对国防科技大学（NUDT）副教授Dr. Jonas Zhang的采访，关于[最新的14.10分支开发计划](http://news.softpedia.com/news/Ubuntu-Kylin-14-10-Utopic-Unicorn-Consolidates-Its-Position-in-China-463068.shtml)。

“在这次的14.10版本中，有许多很好的功能。比如，新手也可以轻松地通过Ubuntu Kylin软件中心找到Windows软件的替代；用户可以使用Ubuntu Kylin的SSO（Ubuntu Kylin的单一登录系统，我们叫它UKID）来登录到Ubuntu Kylin的软件和社区；Sogou输入法（一款世界知名的中文输入法，上个月已经在苹果的应用市场上线了）减少了40%的CPU和内存占用。”

“来自CSIP（中国政府的一个部门），超过50个 Canonical 和 NUDT（国防科技大学）的项目经理、工程师和社区管理员在为 Ubuntu Kylin 工作。大部分全职工程师来自NUDT。许多来自Ubuntu，Debian和其他社区的开发者也参与到Ubuntu Kylin的开发中了。”Dr. Jonas Zhang[说](http://news.softpedia.com/news/Ubuntu-Kylin-14-10-Utopic-Unicorn-Consolidates-Its-Position-in-China-463068.shtml)。

中国政府也许自己也正想办法搭建另一个Linux发行版（不是第一次尝试了），但是目前看来已经有一个很好的用来替代Windows的候选者了。这对于Canonical也是很好的商机，至少从被承认这个角度看。

如果Ubuntu，通过它和Kylin的联系，想在像中国这样的大国里取代Windows，对这家公司将会是个巨大的促进。让我们拭目以待，看看开发者们让Ubuntu Kylin变成一个有竞争力的操作系统所花费的努力是不是白费力气。

---

via: <http://news.softpedia.com/news/Ubuntu-Could-Give-a-Fatal-Blow-to-Windows-in-China-463500.shtml>

作者：[Silviu Stahie](http://news.softpedia.com/editors/browse/silviu-stahie) 译者：[zpl1025](https://github.com/zpl1025) 校对：[Caroline](https://github.com/carolinewuyan)

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


在 Linux 中使用"avconv"工具录制计算机桌面视频和音频

Summary: Libav是一款跨平台的工具库，能够用来处理多媒体文件、流和协议。它最初是源自ffmpeg。Libav带有一些工具，比如：  Avplay： 一款视频音频播放器。 Avconv： 能够记录多个设备输入源的一个多媒体转换器和视频音频录制器。 Avprobe： 一个连接多媒体文件流并且返回关于这个文件流的统计信息的工具。 Libavfilter： 一个Libav工具的过滤器(filtering)API。  在这篇文章里面，我们就要展示如何通过'Avconv'程序在Debian/Ubuntu/Linux Mint发行版上录制Linux桌面视频音频。  第一步：下载 Avconv 工具 1. avconv是 libav-tools 的一部分， 可

转需

很赞得说,已安装,源码93M,编译时间不太长.学习试用中...

**Libav**是一款跨平台的工具库，能够用来处理多媒体文件、流和协议。它最初是源自ffmpeg。Libav带有一些工具，比如：

* **Avplay**： 一款视频音频播放器。
* **Avconv**： 能够记录多个设备输入源的一个多媒体转换器和视频音频录制器。
* **Avprobe**： 一个连接多媒体文件流并且返回关于这个文件流的统计信息的工具。
* **Libavfilter**： 一个Libav工具的过滤器(filtering)API。

在这篇文章里面，我们就要展示如何通过'Avconv'程序在**Debian/Ubuntu/Linux Mint**发行版上录制Linux桌面视频音频。

![](/data/attachment/album/201411/27/133627t96w0a882zy8p6q9.jpg)

### 第一步：下载 Avconv 工具

**1.** **avconv**是 “**libav-tools**” 的一部分， 可以通过官方的基于debian的仓库下载，比如Mint、Ubuntu。输入下面命令即可：

```
$ sudo apt-get update
$ sudo apt-get install libav-tools

```

![Install Avconv Tool](/data/attachment/album/201411/27/133630f71p421zhp77u2gv.jpeg)

*下载Avconv工具*

**注意**： 如果从默认仓库下载的话， ‘**avconv**’ 的版本可能比较老。 因此我们推荐你拉取最新的git官方版本。

```
$ sudo apt-get install yasm
$ git clone git://git.libav.org/libav.git
$ cd libav
$ ./configure
$ make
$ sudo make install

```

**注意**： 你应该运行 ‘**./configure –help**’ 来列出所有的可选配置选项并且安装相应的解码器和库，你还需要做很多工作来解决依赖问题。

也要注意，如果你是从源代码编译的，就需要使用**sudo avconv**而不是**avconv**来运行这个工具。

### 第二步：开始录制桌面视频

**2.**一切就绪，现在可以通过运行下面的命令录制你的视频了：

```
$ avconv -f x11grab -r 25 -s 1920x1080 -i :0.0 -vcodec libx264 -threads 4 $HOME/output.avi

```

简单解释一下这个命令:

* **avconv -f x11grab** 默认从X服务捕捉画面。
* **-r 25** 这是你需要的视频帧率，可以自行设置。
* **-s 1920×1080** 是你的系统的桌面分辨率，要设置成你当前桌面的分辨率，这一点非常重要。
* **-i :0.0** 我们要记录的位置（X 服务输出端口），设置成这样就可以了。
* **-vcodec libx264** 我们用来录制视频的编码器。
* **-threads 4** 线程数，可以根据情况更改。
* **$HOME/output** 输出的目标文件路径。
* **.avi** 使用的视频格式，可以换成 “flv”、“mp4″、 “wmv”、 “mov”、 “mkv”等。

**3.**在运行命令之后，就会在terminal上自动运行一个进程进行记录，按"Ctrl+C"键来终止记录。

![Record Desktop Screen](/data/attachment/album/201411/27/133632beztzstjse909ld4.jpeg)

*录制桌面视频*

**4.** 现在，你可以使用VLC或者其他的播放器，或者使用来自Libav包里的播放器"avplay"来播放你录制的视频。

```
$ avplay $HOME/output.avi

```

**注意:** 别忘了替换输出文件的路径为你自己的，录制效果还是很好的。

![Play Recorded Video](/data/attachment/album/201411/27/133635fhy6ddh6qyp1p3qa.jpeg)

*播放录制的文件*

这有一段我用 “**avconv**” 录制的[视频](http://www.youtube.com/embed/g1FEh4wByGE) （墙外）。

### 第三步： 开始录制桌面的音频和视频

**5.** 如果也想同时录制音频，先运行这个命令，列出所有的音频输入源：

```
$ arecord -l

```

结果类似这样：

![Check Audio Input](/data/attachment/album/201411/27/133637oo4hl8fll8y8l4sz.png)

*检查音频输入源*

在我这里，我只有一个音频输入源，所以数量是**1**，这就是我使用如下命令来捕捉我的视频以及麦克风的音频的原因。

```
$ avconv -f alsa -i hw:1 -f x11grab -r 25 -s 1920x1080 -i :0.0 -vcodec libx264 -threads 4 output-file2.avi

```

我修改了部分地方，下面做个简短的解释：

* **-f** alsa 一个从alsa设备捕捉声音的选项。
* **-i** hw:1 是一个从 “hw:1” 设备捕捉音频的选项，这个设备是我电脑上仅有的一个音频输入设备。

**注意**: 如果你想用**arecord -l**显示的**1**之外的设备的话，别忘了替换 “**1**”。

结束录制，再来一次“**Ctrl + C**” 就可以。

### 第四步： 开始录制桌面音频

**6.** 如果只想录制音频的话，使用下面的命令。

```
$ avconv -f alsa -i hw:1 out.wav

```

**7.** 替换成 **.mp3** 等Libav支持的格式都可以，播放 **out.wav**就能听到你自己的声音了。

![Record Desktop Audio](/data/attachment/album/201411/27/133640fl14z1pm4jfsfvn4.png)

*录制桌面音频*

### 最后

“**avconv**” 工具可以用来做很多其他事情，不仅仅是录制桌面视频，更多的教程和文档请移步到官网。

* <https://libav.org/avconv.html>

你对"avconv"的体验如何，你使用过其他工具录制桌面视频么？在评论里面和我们分享吧。

---

via: <http://www.tecmint.com/record-ubuntu-desktop-screen-using-avconv/>

作者：[Hanny Helal](http://www.tecmint.com/author/hannyhelal/) 译者：[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对：[wxy](https://github.com/wxy)

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


iproute2 对决 net-tools

@热情萧远山 @kykij

学习下

都用的路过//@相公12345:转发微博

原来是两套工具…

@我的印象笔记 //@平凡的香草:一直不知道 netstat -s 的输出怎么用ss 来代替，求解//@ruochen_SH: @热情萧远山 @kykij

//@亚瑟小马甲:转发微博

//@亚瑟小马甲:转发微博

我觉得也时候适应一下新的命令了@我的印象笔记

Repost

[炸鸡和啤酒]

看看

@我的印象笔记

如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具（统称为net-tools）来配置网络功能，解决网络故障。net-tools起源于BSD的TCP/IP工具箱，后来成为老版本Linux内核中配置网络功能的工具。但自2001年起，Linux社区已经对其停止维护。同时，一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools，只支持iproute2。 作为网络配置工具的一份子，iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置，而iproute2则通过netlink

如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具（统称为net-tools）来配置网络功能，解决网络故障。net-tools起源于BSD的TCP/IP工具箱，后来成为老版本Linux内核中配置网络功能的工具。**但自2001年起，Linux社区已经对其停止维护。**同时，一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools，只支持iproute2。

作为网络配置工具的一份子，iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置，而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言，iproute2的用户接口比net-tools显得更加直观。比如，各种网络资源（如link、IP地址、路由和隧道等）均使用合适的对象抽象去定义，使得用户可使用一致的语法去管理不同的对象。更重要的是，到目前为止，iproute2仍处在[持续开发](https://www.kernel.org/pub/linux/utils/net/iproute2/)中。

如果你仍在使用net-tools，而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话，那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。

对于那些想要转到使用iproute2的用户，有必要了解下面有关net-tools和iproute2的众多对比。

![](/data/attachment/album/201411/27/210202acx7xn665a6c6m85.png)

### 显示所有已连接的网络接口

下面的命令显示出所有可用网络接口的列表（无论接口是否激活）。

使用**net-tools**：

```
$ ifconfig -a

```

使用**iproute2**：

```
$ ip link show

```

![](/data/attachment/album/201411/27/210415ovdbxplhxg2god9i.jpg)

### 激活或停用网络接口

使用这些命令来激活或停用某个指定的网络接口。

使用**net-tools**：

```
$ sudo ifconfig eth1 up
$ sudo ifconfig eth1 down

```

使用**iproute2**：

```
$ sudo ip link set down eth1
$ sudo ip link set up eth1

```

### 为网络接口分配IPv4地址

使用这些命令配置网络接口的IPv4地址。

使用**net-tools**：

```
$ sudo ifconfig eth1 10.0.0.1/24

```

使用**iproute2**：

```
$ sudo ip addr add 10.0.0.1/24 dev eth1

```

值得注意的是，可以使用iproute2给同一个接口分配多个IP地址，ifconfig则无法这么做。使用ifconfig的变通方案是使用[IP别名](http://xmodulo.com/2013/02/how-to-assign-multiple-ip-addresses-to-one-network-interface-on-centos.html)。

```
$ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1

```

### 移除网络接口的IPv4地址

就IP地址的移除而言，除了给接口分配全0地址外，net-tools没有提供任何合适的方法来移除网络接口的IPv4地址。相反，iproute2则能很好地完全。

使用**net-tools**：

```
$ sudo ifconfig eth1 0

```

使用**iproute2**：

```
$ sudo ip addr del 10.0.0.1/24 dev eth1

```

### 显示网络接口的IPv4地址

按照如下操作可查看某个指定网络接口的IPv4地址。

使用**net-tools**：

```
$ ifconfig eth1

```

使用**iproute2**：

```
$ ip addr show dev eth1

```

同样，如果接口分配了多个IP地址，iproute2会显示出所有地址，而net-tools只能显示一个IP地址。

![](/data/attachment/album/201411/27/210421xumjgapd9t7bo73t.jpg)

### 为网络接口分配IPv6地址

使用这些命令为网络接口添加IPv6地址。net-tools和iproute2都允许用户为一个接口添加多个IPv6地址。

使用**net-tools**：

```
$ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
$ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64

```

使用**iproute2**：

```
$ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
$ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1

```

### 显示网络接口的IPv6地址

按照如下操作可显示某个指定网络接口的IPv6地址。net-tools和iproute2都可以显示出所有已分配的IPv6地址。

使用**net-tools**：

```
$ ifconfig eth1

```

使用**iproute2**：

```
$ ip -6 addr show dev eth1

```

![](/data/attachment/album/201411/27/210425rxjldhuexlujhpfu.jpg)

### 移除网络设备的IPv6地址

使用这些命令可移除接口中不必要的IPv6地址。

使用**net-tools**：

```
$ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64

```

使用**iproute2**：

```
$ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1

```

### 改变网络接口的MAC地址

使用下面的命令可[篡改网络接口的MAC地址](http://xmodulo.com/2014/02/spoof-mac-address-network-interface-linux.html)，请注意在更改MAC地址前，需要停用接口。

使用**net-tools**：

```
$ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66

```

使用**iproute2**：

```
$ sudo ip link set dev eth1 address 08:00:27:75:2a:67

```

### 查看IP路由表

net-tools中有两个选择来显示内核的IP路由表：route和netstat。在iproute2中，使用命令ip route。

使用**net-tools**：

```
$ route -n

```

---

```
$ netstat -rn

```

使用**iproute2**：

```
$ ip route show

```

![](/data/attachment/album/201411/27/210431gkv9r6l9fala66ag.jpg)

### 添加和修改默认路由

这里的命令用来添加或修改内核IP路由表中的默认路由规则。请注意在net-tools中可通过添加新的默认路由、删除旧的默认路由来实现修改默认路由。在iproute2使用ip route命令来代替。

使用**net-tools**：

```
$ sudo route add default gw 192.168.1.2 eth0
$ sudo route del default gw 192.168.1.1 eth0

```

使用**iproute2**:

```
$ sudo ip route add default via 192.168.1.2 dev eth0
$ sudo ip route replace default via 192.168.1.2 dev eth0

```

### 添加和移除静态路由

使用下面命令添加或移除一个静态路由。

使用**net-tools**：

```
$ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
$ sudo route del -net 172.16.32.0/24

```

使用**iproute2**：

```
$ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
$ sudo ip route del 172.16.32.0/24

```

### 查看套接字统计信息

这里的命令用来查看套接字统计信息（比如活跃或监听状态的TCP/UDP套接字）。

使用**net-tools**：

```
$ netstat
$ netstat -l

```

使用**iproute2**：

```
$ ss
$ ss -l

```

![](/data/attachment/album/201411/27/210436jts9v2k55brwwncy.jpg)

### 查看ARP表

使用这些命令显示内核的ARP表。

使用**net-tools**:

```
$ arp -an

```

使用**iproute2**:

```
$ ip neigh

```

![](/data/attachment/album/201411/27/210439r7kwu9zwcgwgpggf.jpg)

### 添加或删除静态ARP项

按照如下操作在本地ARP表中添加或删除一个[静态ARP项](http://xmodulo.com/2013/02/how-to-add-or-remove-static-arp-entry-on-linux.html)。

使用**net-tools**：

```
$ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
$ sudo arp -d 192.168.1.100

```

使用**iproute2**：

```
$ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
$ sudo ip neigh del 192.168.1.100 dev eth0

```

### 添加、删除或查看多播地址

使用下面的命令配置或查看网络接口上的多播地址。

使用**net-tools**:

```
$ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
$ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
$ ipmaddr show dev eth0
$ netstat -g

```

使用**iproute2**：

```
$ sudo ip maddr add 33:44:00:00:00:01 dev eth0
$ sudo ip maddr del 33:44:00:00:00:01 dev eth0
$ ip maddr list dev eth0

```

---

via: <http://xmodulo.com/2014/09/linux-tcpip-networking-net-tools-iproute2.html>

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

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


Linux有问必答：如何检查Linux上的glibc版本

Summary: 问题：我需要找出我的Linux系统上的GNU C库（glibc）的版本，我怎样才能检查Linux上的glibc版本呢？  GNU C库（glibc）是标准C库的GNU实现。glibc是GNU工具链的关键组件，用于和二进制工具和编译器一起使用，为目标架构生成用户空间应用程序。 当从源码进行构建时，一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下，你可能想要检查已安装的glibc信息以查看是否满足依赖关系。 这里介绍几种简单的方法，方便你检查Linux上的glibc版本。  方法一 下面给出了命令行下检查GNU C库的简单命令。 $ ldd --version   在本例中，gli

[耶]

[吃惊]//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

长见识了

有//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

一直都可以啊啊啊啊，都是标准elf可执行文件//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

@我的印象笔记

这是一个好文章 //@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

@我的印象笔记

我擦，第一次[哼]//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

win下的dll却不可以，地址空间不同。//@cjacker:loader当然是可以执行的啦，只不过起了个.so的名字。//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

这样也可以.... //@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

mark //@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

>
> **问题**：我需要找出我的Linux系统上的GNU C库（glibc）的版本，我怎样才能检查Linux上的glibc版本呢？
>
>
>

GNU C库（glibc）是标准C库的GNU实现。glibc是GNU工具链的关键组件，用于和二进制工具和编译器一起使用，为目标架构生成用户空间应用程序。

当从源码进行构建时，一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下，你可能想要检查已安装的glibc信息以查看是否满足依赖关系。

这里介绍几种简单的方法，方便你检查Linux上的glibc版本。

![](/data/attachment/album/201411/27/213309wsz6so4w31b44oyn.jpg)

### 方法一

下面给出了命令行下检查GNU C库的简单命令。

```
$ ldd --version

```

![](/data/attachment/album/201411/27/213350rfwa9zfr5z5urzuz.jpg)

在本例中，**glibc**版本是**2.19**。

### 方法二

另一个方法是在命令行“输入”**glibc 库的名称**（如，libc.so.6），就像命令一样执行。

输出结果会显示更多关于**glibc库**的详细信息，包括glibc的版本以及使用的GNU编译器，也提供了glibc扩展的信息。glibc变量的位置取决于Linux版本和处理器架构。

在基于Debian的64位系统上：

```
$ /lib/x86_64-linux-gnu/libc.so.6

```

在基于Debian的32位系统上：

```
$ /lib/i386-linux-gnu/libc.so.6

```

在基于Red Hat的64位系统上：

```
$ /lib64/libc.so.6

```

在基于Red Hat的32位系统上：

```
$ /lib/libc.so.6

```

下图中是输入glibc库后的输出结果样例。

![](/data/attachment/album/201411/27/213354ak5czcjrezexpc1c.jpg)

---

via: <http://ask.xmodulo.com/check-glibc-version-linux.html>

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

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


DebianFork 将发布没有 systemd 的 Debian 分支

Summary: 编者按：Debian 8 Jessie的 init 系统默认使用 systemd，这一选择在社区引发了大量争议，导致了技术委员会的多名成员辞职。现在，老兵 Unix 管理员宣布要创建一个新的不使用 sytemd 的Debian 分支。这群 Unix 哲学拥护者们请求外界捐赠支持他们的新使命。 以下内容来自 debianfork.org 的相关内容：    我们是谁？！ 我们是老兵 Unix 管理员（Veteran Unix Admins），我们非常关注Debian GNU/Linux 在 systemd 上的分歧，并且决定分支（fork）Debian 项目。 为什么我们要这样做？ 我们中的一些人是上游开发者，一些人是专业的系统管理员：

这是要搞分裂么？

被redhat那sb给惹毛了吧

但是我也对其有担忧……"还是脚本比较容易学习，如果把它硬编码但程式里面，那能学到的东西就更少了不是么？"//@sub7:systemd还是不错的，开关机速度都大幅提升，争议这么多主要还是操作习惯之争[doge]

@shengofbig @天天天蓝zju

行行行

=，=这不就解决了吗=，=各取所需就好了=，=非得吵//@土星人小白: 行行行

统一所有人的观点本来就不现实=，=个人认为这样的结果是最理想的。。。//@土星人小白: Now here's the birth to a new, non-universal Debian. //@非洲Aji開源哥_lisp:=，=这不就解决了吗=，=各取所需就好了=，=非得吵//@土星人小白: 行行行

实在是…蛮无语的…我觉得systemd还蛮好的呀//@土星人小白:Now here's the birth to a new, non-universal Debian. //@非洲Aji開源哥_lisp:=，=这不就解决了吗=，=各取所需就好了=，=非得吵//@土星人小白: 行行行

Debian分裂了！

分裂了...

分裂了的debian希望能够变好

硬编码？学到的东西就很少了？那干脆不要用Linux内核，因为内核不是用脚本语言写的。日志文件必须文本化理由也牵强，照这样说也可以不要数据库。

这种事在开源界大概也是见怪不怪了。有意见？那就fork一个呗

个人倾向于桌面系统支持SystemD，而服务器还是免了吧

systemd写启动脚本更方便了，从用户角度来说操作也方便。至于实现太复杂的话kernel不是更复杂。

桌面systemd，服务器sysV

对于桌面来说，systemd确实是个不错的选择，但是对于SA来说，对于系统的可控制行降低了，出了问题，只能等上游更新，这是很要命的。

从这个角度讲，开源产品允许用户自己修改源代码是理论性的。可否自己修改代码，被多种条件限制，比如用户能否读懂，以后能否同上游代码合并等。至于可控制方面，光靠脚本对系统进行控制程度有多深，不好下定论。

其实我个人觉得，即便 systemd 以后不兼容 sysV，但依然存在变通方法来实现脚本方法启动的可能。自己建立一个 root.sh, 然后在里面写入要调用的脚本，最后将 root.sh 配置为 systemd 的一个服务。

不是脚本的问题，而是系统管理员们对缺乏对底层控制的恐惧——和 WINDOWS 的注册表一样，你只能修改这些值，而并不知道他们是如何发生作用的——当然，你可以去看源代码，但是庞大而无所不包的 systemd 将事情搞得很复杂，也不够透明，自然困难得多。

其实我赞同一个意见，就是 Linux 一分为二，一方面是桌面，采用 systemd，有利于桌面的控制，反正桌面用户也是通过各种控制界面来操作的，并不需要关心底层；另外一方面是服务器，则采用古典的 sysvinit，便于对底层的直接干预和调整。

确实是这样。这种分割也不是不可行，就如同 android，也是 linux 分支，但是其走了完全不同的一个路线。

真乱[挖鼻屎][挖鼻屎][挖鼻屎]//@Linux中国:我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有相当一部分人继续坚守 CentOS 6//@ZERO___O: CentOS也fork一个就好了，这傻屌用了反人类 //@开源新闻发布台: 这是要搞分裂么？

CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門針對桌面的，服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……//@Linux中国: 我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有…

在系统内部//@Linux中国: 对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門針對桌面的，服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……

有那功夫 fork 不如想想办法怎么让启动脚本兼容 sysvinit 和 systemd。CoreOS 也用了 systemd 呢，火的很。//@Linux中国: 对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門

美术姑娘这里不妨也影射一下 ：用户是分层次的，胡乱一气的至上会影响管理员的职业素养的！反正也没想看如文章里面影射的东西。而管理员的职业素养有很重要的一个维度就是始终如一的审美框架和实质～！

systemd兼容sysvinit的啓動腳本的……只是不推薦（因爲不能利用很多高級特性）。 //@纤夫张:有那功夫 fork 不如想想办法怎么让启动脚本兼容 sysvinit 和 systemd。CoreOS 也用了 systemd 呢，火的很。

作为个人用户，当过开发/打包/系统管理者，对systemd一点吐槽点也木有。。老外就是矫情 //@Linux中国:对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: 服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……

作为一名用户，我觉得 systemd 用起来也很方便的呀。开发者/打包者写好了service文件，我只需要start就好了。多爽。 //@Linux中国:对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？

//@Linux中国:对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門針對桌面的，服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……

这个我就不说什么了。。。。

分吧，反正这个圈的人都爱折腾，不折腾不舒服斯基。 //@dtrace://@Linux中国:我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有相当一部分人继续坚守 CentOS 6//@ZERO___O: CentOS也fork一个就好了，这傻屌用了反人类 //

要的就是那些高级特性能够 gracefully fail on sysvinit，不至于整个服务完全没法用。 //@farseerfc: systemd兼容sysvinit的啓動腳本的……只是不推薦（因爲不能利用很多高級特性）。 //@纤夫张:有那功夫 fork 不如想想办法怎么让启动脚本兼容 sysvinit 和 systemd。CoreOS 也用了 systemd 呢，火的很

不會沒法用，如果用sysvinit那麼也沒有那些高級特性(socket激活、dbus激活，失敗自動重啓，pid文件檢測等)，於是systemd下就算沒有也影響不大呀。不過還是有一個高級特性是透明可用的：並行啓動。我自己的arch機器在2012年9月開始用systemd到2013年12月刪掉sysinit-tools期間一直在用個別sysv的舊服務

如果能让用户自己选 init 就好了……但个人还是比较喜欢 systemd 的，too young 了吧 //@Linux中国:我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有相当一部分人继续坚守 CentOS 6//@ZERO___O: CentOS也fork一个就好了，这傻屌用了反

每当争议无法和解的时候，新分支就会诞生。但是这个分支的前途会怎样，谁也无法预料。

物竞天择吧。

这篇文章很有意思。也可能是翻译的有趣。@wxy 赞一个！

首先是题图。太像拿叉子吃面条了。

另外，文中也有很多有意思的句子：

你也许认为我不够强大，但是你也太胖了！

放开那个 Init ！不要和 systemd 和它的那堆零碎纠缠在一起。

这不是比谁的胡子更长，放心，毛茸茸的不总是绵羊！

哈哈，谬赞谬赞，原文也比较轻松风趣，我也尽量翻译时候跟随~~题图是他们的 LOGO，SVG，我专门换成 PNG 的。。

分裂了好，名字我都想好了，就叫dabian吧//@rmrf:分吧，反正这个圈的人都爱折腾，不折腾不舒服斯基。

DebianFork 的项目名称正式定名为： Devuan - http://t.cn/RzVvkTW

编者按：Debian 8 Jessie的 init 系统默认使用 systemd，这一选择在社区引发了大量争议，导致了技术委员会的[多名成员辞职](http://linux.cn/article-4256-1.html)。现在，“老兵 Unix 管理员”宣布要创建一个新的不使用 sytemd 的 [Debian 分支](http://debianfork.org/)。这群 Unix 哲学拥护者们请求外界[捐赠](http://debianfork.org/donate.html)支持他们的新使命。

以下内容来自 debianfork.org 的相关内容：

---

// 更新： 项目名称正式命名为：[Devuan](https://devuan.org/)。

![](/data/attachment/album/201411/29/010211lt44nnckfkzakd4m.png)

#### 我们是谁？！

我们是老兵 Unix 管理员（Veteran Unix Admins），我们非常关注 Debian GNU/Linux 在 systemd 上的分歧，并且决定分支（fork）Debian 项目。

#### 为什么我们要这样做？

我们中的一些人是上游开发者，一些人是专业的系统管理员：我们每天都要和 Debian 打各种交道。

我们不想被强迫使用 systemd 来替代传统的 UNIX sysvinit 初始化系统，因为 systemd 背离了 UNIX 哲学。

我们考虑采用贴近 sysvinit 的架构，而不是那种破坏了“做一件事，把它做好”的原则、带着数十个紧密耦合的二进制文件和不透明的日志的东西。

#### 有比创建分支更好的解决方案么？

不幸的是，目前没有！

在下一代的 Debian v.8 "Jessie" 发行版中，默认的初始化系统将是 systemd，它将挟裹着一堆紧密纠缠的东西来到。

我们需要分离这些依赖的牵扯，从所有受到影响的软件包中清除这些，并提供相应的替代品。我们所要创建的分支的稳定性是目前阶段所要考虑的首要重点。

#### 你觉得为什么会走到了这一步？

现在的 Debian 项目的领导者受到了 GNOME 开发者太多的影响，而且在项目中考虑了太多的桌面需求的因素，而 Debian 用户却大多数是精通技术的系统管理员。

而且，今天 Debian 正逐渐背离自己最初愿景，也是开源软件的基石：用户至上。这到底是怎么了？所谓的“do-ocracy”开发者和包维护者正在给用户强加他们的选择。

#### 你可以说一下你对 systemd 的意见吗？

套用一下 Eric S. Raymond 在这个问题上的看法，我们认为 systemd 很容易就会发生嬗变，进而臃肿不堪、最后变成了那种讨厌的纠结在一起的毛球。

我们希望能够用可以阅读的 shell 脚本来控制系统的启动，因为可读性能够给我们这些有能力的人更多的控制和洞悉。我们认为，在一个守护进程中集中控制服务、socket、设备、挂载等等，是对传统的 UNIX 哲学的一记响亮耳光。

某些支持 systemd 的人对此的快速回应可以在 [forkfedora.org](https://web.archive.org/web/20141020161905/http://forkfedora.org/) （已经关闭，需要翻墙才能看历史归档）上看到。这个页面突出了两者之间的根本不同：systemd 也许对于配置 init 来说很简单，但是它增加了 init 过程中的不透明度。在 systemd 中很明确是这样的：可以通过更少的变量来调整，而通过远超 sysvinit 大小的程序将大部分细节隐藏在一个巨大的二进制程序里面。

```
  ls -lH /sbin/init
  sysvinit: -rwxr-xr-x 1 root root 36992 Jul 14  2013 /sbin/init
  systemd: -rwxr-xr-x 1 root root 1317632 Sep  1 14:41 /sbin/init
# 你也许认为我不够强大，但是你也太胖了！
```

可以说 systemd 的安全模式更多的依赖于开发者和包维护者，而不怎么指望系统管理员。作为 Debian 用户，我们只是希望不要被强迫必须如此，看看 [CTTE 关于这个问题的投票就会知道](https://news.ycombinator.com/item?id=7203364)，我们相信这样下去会越来越多的听到用户要求：**放开那个 Init ！不要和 systemd 和它的那堆零碎纠缠在一起。**

#### 你们能坚持多久？

这不是比谁的胡子更长，放心，毛茸茸的不总是绵羊！

#### 概括一下计划?

“放开那个 Init”（ Init Freedom），这是我们的承诺，我们会建立一个 Debian 项目的分支，创建一个新的基础发行版。

这需要一些时间，我们会一步步来。

首先我们会配合 Debian 8 "Jessie" 的发布，给当前的 Debian 用户平滑升级提供一个完整的解决方案。

如果你也需要这个，请帮助我们： [捐赠](http://debianfork.org/donate.html) 或者参与进来。

#### 我们需要谈谈。

当然，您可以写电子邮件给 [VUA@debianfork.org](mailto:VUA@debianfork.org) 。

我们也有一些人聚集在 IRC ， Freenode 频道号是 #debianfork ，欢迎加入。

[可以订阅邮件列表](https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng)。喜欢的话来发布意见吧，不管是什么。

#### 只有你们这些家伙吗？

不是，有很多用户都对 systemd 有意见。

有一篇文章是对这个问题的很好的介绍： [Systemd: Linux 世界末日的预兆](http://www.infoworld.com/article/2608798/data-center/systemd--harbinger-of-the-linux-apocalypse.html)。

有个 [boycott systemd](http://boycottsystemd.org/) 网站也有一些相关的资料。那里有个叫做 [uselessd](http://uselessd.darknedgy.net/) 的 “systemd 分支”，有些不错的地方和许多笑点（lulz）。

还有人提出了一个 [当世界 systemd 了](http://the-world-after-systemd.ungleich.ch/)之后的撤退战略。

在维基百科的 [systemd reception](http://en.m.wikipedia.org/wiki/Systemd#Reception) 章节也有一些对其提出的批评意见。

#### 谢谢你做的这些，我怎么帮助你们？

老兵 Unix 管理员（Veteran Unix Admins）的一个小型的核心小组正在积极建设分支的相关框架和一些用于开发的基础设施。

这时的捐赠有助于我们确定可以在基础架构上投入多少以及人们的对我们的预期。

如果你会捐赠，那么[来吧](http://debianfork.org/donate.html)。

如我们现在做的，我们会在此一直更新我们的项目进展。

#### 对于你做的这些，人们是怎么看的?

下面是我们收到的一些邮件（略，请参照[原链接](http://debianfork.org/)），我们会匿名发表这些信息，除非你申明不用。

我们会保密你的邮件地址，并会通知你我们的下一步进展。


Systemd这个有争议的项目正在接管你身边的Linux发行版

Summary: Systemd 是目前为止在Linux平台上最有争议的项目之一。它到底有多大的争议？它的争议大到systemd的开发者之一Lennart Poettering 声称有人使用比特币雇佣职业杀手要干掉他。但是还是有比较理智的做法的，有一个抵制systemd网站在技术角度上提出了抵制systemd的原因。 如此强烈的抵制也反映了systemd的成功。它已经被或将要被Fedroa、OpenSUSE、Ubuntu、Debian、Arch Linux等众多发行版采用。随着时间推移，GNOME越来越依赖它，Debian回归GNOME的原因之一就是它采用了systemd。systemd无处不在！ 那么如此激烈的争论到底是关于什么呢？让我

Systemd：不要跟我抢！全都是我的~

原来如此

ubuntu接纳商业代码也受抨击，但解决了可用性，并使开源向前进步。如果没有亲身体验开源的产品，又不曾沟通与贡献。可以认为对所言之事没有充份理解，也不应获得发言权。给予真正动手贡献价值的人合适的权力，让他们决定作什么。只会叫喊的人不会给世界带来任何帮助，蚊字般的噪音。

在桌面端用systemd好像没有什么不妥，但用在服务器上……系统管理员岂不是要哭了

哈哈哈哈哈哈哈哈哈有人使用比特币雇佣杀手干掉他

新老交替引发的血案

个人感受就是systemd太复杂了，而且也没感觉比sysv快。

开源社区革命派与保守派之间的斗争//@Hadoop中国:新老交替引发的血案

//@Hadoop中国:新老交替引发的血案

[哈哈] 用比特币雇佣杀手暗杀他，开源社区的正反派斗争真是血雨腥风

就别管他有没有争议了，有没有干货好好介绍一下．

争议是难以避免的。我没有仔细研究过，没有发言权。

@Linux_cn @校长Ubuntu @Deepin官方微博 //@Go语言中文论坛_golang: 就别管他有没有争议了，有没有干货好好介绍一下．

虽然还没太深入了解过，稍微用了下表示不太喜欢

复杂的东西都是由简单的东西组成的，那些人把UNIX哲学的东西学得有些死，如果这个systemd的各模块间易于管理，条理分明而又合作无间，它就是不错的。而且对linux桌面的标准化有利。（以上个人观点）

就用过的CentOS7的改动来说，不习惯firewalld，还是改回了iptables。systemd倒不排斥，整合了chkconfig，init，service这些之后觉得挺方便的，就是runlevel变成target管理之后不习惯

回复@西安气象爱好者:systemd自带daemontools功能，这个还是不错的，现在所有sysvinit管理的服务不会自动重启，很多人没意识到吧。//@西安气象爱好者:变动太大，没啥必要，以前的init用的好好的，配置什么的都很顺手，也许我就是一个保守派。

自从arch转向systemd以来就十分讨厌这个项目了

关键是systemd难用啊！//@Hadoop中国:新老交替引发的血案

难道那个人名不应该是linus？

回复@FindBlog:晕倒。。。抱歉笔误。。

systemd的开发者之一Lennart Poettering 声称有人使用比特币雇佣职业杀手要干掉他，那么问题来了，通过bitcion作为匿名交易媒介能否开发一个杀手网站呢？

任何一个试图降低Linux使用门槛的工具都会遭到很多开源狗的反对——同时它们还反对Win32系统，我很怀疑这帮人究竟在反对什么，是商业软件还是一般水平市民也能使用计算机这件事？

用了systemd之后，觉得整个系统有一种很统一的感觉，总体体验是不错，不过相应的扩展性应该会差一点，但是个人还是倾向于使用sysyemd的。<br />
感觉社区一般会反对大而全的东西，这也挺正常的啦。就像iproute2和net-tool之间的争论一样。

相比起来，我对iproute2 感觉可以接受多了。。

要发生命案了，linus都没表态

gentood在这方面还是非常不错的

不懂

我到觉得systemd管得太多了，平时用着挺好，但是一旦出了问题，你是无从下手的。也许从桌面端来看systemd是一个很棒的东西，但对于管服务器那帮人来说，可能就。。。

mark

那么问题来了，如果发生比特币雇凶杀人，万年一年级生柯南可以破案么？

早就意识到了啊。不过sysvinit管理的服务一般都比较成熟，质量过得去//@纤夫张: 回复@西安气象爱好者:systemd自带daemontools功能，这个还是不错的，现在所有sysvinit管理的服务不会自动重启，很多人没意识到吧

用arch爱上systemd觉得init丑陋不堪，用centos7爱上firewalld觉得iptables丑陋不堪，期待接下来会爱上什么

“并且处理设备接入或推出时所产生的事件” 这里的“推出”应该是“退出”； 当然，这只是个细节问题，感谢译者和校对人员的辛勤付出！

不是，确实是“推出”，类似光盘一样的。在磁盘卷上，应该是指卸载。不过意思到了，大家明白就行。

我爱上了networkd，觉得dhcpcd丑陋不堪！还有systemd-boot，也随之抛弃了grub

Systemd macht frei. noch CC卐V ...

来自河南郑州的 Yandex Browser 20.4|GNU/Linux 用户

ueber D: d-mk-ultra点bokee点com/

systemd: D=Deutschland  CC卐V的设计者来自德国城市Karlsruhe.

Hitler: "Demoralize the enemy from within by surprise, terror, sabotage, assassination. That is the war of the future."

Josef Goebbells: “If you tell a lie big enough and keep repeating it, people will eventually come to believe it.”

更多: d-mk-ultra.bokee.com

来自河南郑州的 Yandex Browser 20.9|GNU/Linux 用户

Arbeit macht frei. Systemd macht frei. Nazis machen frei ...

![](/data/attachment/album/201411/30/100852jyzrby2g62bc666c.jpg)

Systemd 是目前为止在Linux平台上最有争议的项目之一。它到底有多大的争议？它的争议大到systemd的开发者之一Lennart Poettering 声称有人使用[比特币](http://www.pcworld.com/article/2033715/7-things-you-need-to-know-about-bitcoin.html)雇佣职业杀手要干掉他。但是还是有比较理智的做法的，有一个[抵制systemd网站](http://boycottsystemd.org/)在技术角度上提出了抵制systemd的原因。

如此强烈的抵制也反映了systemd的成功。它已经被或将要被Fedroa、OpenSUSE、Ubuntu、Debian、Arch Linux等众多发行版采用。随着时间推移，GNOME越来越依赖它，Debian[回归GNOME](http://www.pcworld.com/article/2691192/how-gnome-3-14-is-winning-back-disillusioned-linux-users.html)的原因之一就是它采用了systemd。systemd无处不在！

那么如此激烈的争论到底是关于什么呢？让我们近距离观察这场战争。

### Systemd是一个全新的init

[Systemd](http://www.freedesktop.org/wiki/Software/systemd/)的核心是取代老旧的[SysV init](http://en.wikipedia.org/wiki/Init#SysV-style)。init用来初始化你的操作系统，当你启动系统时，init负责加载需要的驱动，激活你的网络链接，启动众多的系统服务，最后进入图形登陆界面。而SysV init 是一个老旧的系统，它基本上仅运行**/etc/init.d**目录下的一些脚本。

Systemd是一个现代技术，用以取代老旧以及粗糙的SysV init。它可以在接收到事件响应时启动相关服务；比如，当你接入了一个USB打印机，systemd可以在接收到设备接入响应时启动打印服务。当它接收到某个网络端口的连接请求时，它可以启动在此端口上监听的服务并且传递这个连接。

获取更多关于SysV init 与 systemd的信息，可以参考Jorgen Schäfer的 “[Why systemd?](http://blog.jorgenschaefer.de/2014/07/why-systemd.html)”

### 但是systemd远不止此

systemd的反对者之中也有部分人认为SysV太老了，应该被取代掉。但是批评systemd的人发现Systemd是一个巨大的项目，其中包括了很多其他的功能。它是一个软件套件，而不仅仅是一个init。

![An illustration of systemd's structure.](/images/article/2014/10/systemd-diagram-100528171-orig.png)

*[维基共享资源](http://en.wikipedia.org/wiki/File:Systemd_components.svg) systemd 结构图解*

Systemd包括用于管理用户登陆的守护进程logind，还包括journald，并且journald 颇有争议的使用了二进制形式保存系统日志而不是以文本形式。systemd也采用了[udev](http://en.wikipedia.org/wiki/Udev)的思想及代码，它对**/dev/**目录下的虚拟设备文件进行管理，并且处理设备接入或推出时所产生的事件。除了这些还有很多其他的，如：systemd还包括了[cron](http://en.wikipedia.org/wiki/Cron)风格的任务调度器与网络守护进程networkd等等。

### 抨击者认为systemd不是类UNIX风格

多数的抱怨源于人们认为systemd项目太大以至于超出了它的工作范围，并且它从Linux系统接管的部分太多了。不要感到惊奇，systemd的抵制活动是以下面的抱怨开始的：

>
> "systemd文件是一大堆的复杂的高度耦合的二进制组成的，这违反了UNIX哲学：‘做一件事情，并把它做好’。它超出了一个init程序的职责范围，因为它还有电源管理，设备管理，挂载管理，cron（定时执行工具），磁盘加密，socket接口/inetd，syslog，网络配置，登陆/会话管理，文件预读，GPT分区发现，容器注册，hostname/locale/time管理，mDNS/DNS-SD等功能，它将Linux控制台以及其他的一些功能都包装在一个程序里面。
>
>
>

那么，systemd是好是坏？
---------------

到这里，我判断一下，到底谁是正确的。

![](/images/article/2013/09/linux-penguin-100055693-medium.png)

systemd最初的想法是非常好的。Linux需要一个新的东西来替换老的 SysV init 和沉重的 SysV init 脚本，这个新的程序应该是灵活的，现代化的系统守护进程，它可以响应更多类型，并且智能化的管理众多的守护进程。然而，事实上systemd好像成为了**一个仅依赖Linux核心的完全统一的系统层**。

*但是*，尽管Linux是一个社区开发项目，但它不是为PC世界的专栏作家或者是一群网络评论者提供的，这些人都不能决定它的进化与发展。只有那些亲手贡献代码以及全身心投入的人才有这个资格。巧的是，Linux发行版以及那些参与者好像大部分都倾向与systemd。

>
> '我对于systemd本身并没有很强烈的个人看法。我与核心开发人员争论过它的bug与兼容性，并且我认为它的一些设计是愚蠢的（比如二进制的日志），但这只是细节，不是大问题。
>
>
>

如果 Linus Torvalds 对于systemd的设计没有什么反对意见，那么说明它可能还是不错的。如果你想平静的看下为什么Linux发行版要使用systemd的话，我推荐这篇文章，[Debian's systemd discussion document](http://www.markshuttleworth.com/archives/1295)。

你是如何看systemd的，可以在评论回复！但是请文明讨论。

*更新这篇文章以澄清之前的错误的消息，ubuntu 桌面版将在下一个版本中纳入systemd。之前我们错误的认为ubuntu已经使用了systemd*。

---

via: <http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-over-a-linux-distro-near-you.html>

作者：[Chris Hoffman](http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-over-a-linux-distro-near-you.html#chrishoffman) 译者：[SPccman](https://github.com/SPccman) 校对：[wxy](https://github.com/wxy)

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


安卓编年史（4）：Android 0.9 Beta——嘿，这看起来很眼熟！

[赞]

还是5.0犀利，art技术。

安卓0.9。。

好老啊

![](/data/attachment/album/201611/27/201258o5v06fklqlrkdw4b.jpg)

![安卓0.9显示着横屏的主屏幕——后续一些版本无法实现的一个特性。](/data/attachment/album/201411/30/102719p8mz0d4eoou30zfh.png)

*安卓 0.9 显示着横屏的主屏幕——后续一些版本无法实现的一个特性 [Ron Amadeo供图]*

尽管从功能上很难将模拟器和操作系统区分开，但安卓 0.9 是第一个支持横屏显示的版本。更让人惊讶的是，几乎所有东西都支持横屏模式，在某些方面安卓 0.9 甚至做的比 KitKat 更好。在 Kiakat 中，主屏幕和拨号被锁定为竖向并且无法旋转。但在安卓 0.9 这里，对任何一个应用横向显示都不是问题。（有谁知道怎么把 Nexus 5 从 Kitkat 升/降级到安卓 0.9 吗？）

截图同样显示了安卓 0.9 中的新的音量显示设计。它抛弃了在 Milestone 3 中初次登场的旧铃铛式控制界面。那是一个巨大的，充满屏幕的界面。实际上，安卓 4.0 的重新设计中让它变得更小了，但它仍然是个问题。（你想增加音量却因此没法看到视频了这种情况特别烦人。）

![新通知面板，抛弃了应用快捷方式并添加了顶部部分。](/data/attachment/album/201411/30/102719u3ntuqcendk3yj3c.png)

*新通知面板，抛弃了应用快捷方式并添加了顶部部分 [Ron Amadeo供图]*

几乎每个安卓版本中的通知面板都有一定的调整，安卓 0.9 也不例外。电池电量图标进行了重绘，变成了黑底绿色图标，其它的状态栏图标变为黑色，白色以及灰色。状态栏左侧部分明智地选择在通知面板打开的时候显示日期。

通知面板加入了一个新的顶部部分，它能够显示运营商名称（在模拟器里显示“安卓”），以及一个巨大的写着“清除通知”的按钮，它能够让你不用打开应用而彻底清除通知。应用程序图标被取消了，替换为通知到达的时间，“最新事件”文字被更换为简单的“通知”。面板的空白部分现在是灰色的而不是之前的白色，底部的滑动条也进行了重新设计。上面两张图片的底部看起来并没有对齐，但这是因为 Milestone 5 的通知面板在面板底部有一圈空白。安卓 0.9 的通知面板是完全直达底部边缘的。

![安卓0.9和0.5的浏览器，展现出新的无色彩菜单。](/data/attachment/album/201411/30/102720dqdhds8qo61qid1x.png)

*安卓 0.9 和 0.5 的浏览器，展现出新的无色彩菜单 [Ron Amadeo供图]*

浏览器主页现在是加载一个真正的网站，而不是像 Milestone 5 中那样的本地存储的假 Google 页面。Webkit 的版本升至 525.10，但是看起来它似乎没法正确渲染更现代的 Google.com 搜索按钮。纵观安卓 0.9，Milestone 5 中的菜单设计已经被抛弃，取而代之的是重新设计的灰色图标。这些截图的区别十分的明显，因为所有的颜色都被去除了。

“更趋向于”列表式的菜单变得更高了一点，并且只是一个没有图标的列表而已。安卓 0.9 已经获得了其它搜索方式，这次是在浏览器菜单里。和主屏幕小部件，主屏幕菜单按钮，以及浏览器主页，它们共同组成了四个搜索框。谷歌从未隐藏它的主要业务是什么，就连在它的操作系统中也是这样。

![从左到右：安卓0.9的浏览器缩放控件，页面内搜索界面，浏览器窗口，以及设置。](/data/attachment/album/201411/30/102721qqu27zy2xu7x8krg.png)

*从左到右：安卓 0.9 的浏览器缩放控件，页面内搜索界面，浏览器窗口，以及设置 [Ron Amadeo供图]*

安卓 0.9 带来了许多浏览器改进。谢天谢地缩放控件又能正常使用了，而且从疯狂的垂直控制变成了简单的加减按钮。谷歌做了个符合常识的决定，将缩放控制从屏幕中间移到了屏幕底部。在这些缩放控件中，安卓在一致性方面的努力显而易见。这些看起来是系统中唯一的圆形按钮。

安卓 0.9 中的新特性“页面内查找”会高亮显示页面内的关键词。但总的来说，UI 还是十分粗糙的——文本框比它应有的高度高了许多，“完成”按钮带的勾选框对这个页面来说只是一种图标而已。“完成”基本上是个“关闭”按钮，这意味着它也许应该是个右对齐的“X”按钮。

这个版本的系统没有设置界面，但是浏览器最终还是有了自己的设置界面。它会有个桌面式选项的弹窗，Javascript，隐私和 cookie，保存的密码以及表单数据。甚至还有 Google Gears 整合（还记得 Google Gears 吗？）。

![拨号盘以及打开菜单的正在通话界面。](/data/attachment/album/201411/30/102726fm909993ty0tjr99.jpg)

*拨号盘以及打开菜单的正在通话界面 [Ron Amadeo供图]*

拨号和联系人在安卓0.9中实际上是同一个应用——两个图标只是打开不同的标签而已。将联系人像这样附到拨号盘表明了智能手机联系人的第一目的还是通话，不是短信，电子邮件，即时通讯或查找地址。最终谷歌还是会完全接受非传统的智能手机沟通，将联系人和拨号分为两个独立的应用程序。

Milestone 5中大多数拨号盘的缺陷在安卓0.9中得到了修复。“最小化”标签被一组正常的亮/暗标签替代。对话气泡式的退格键被替换为正常的退格图标并集成到了拨号数字显示界面。数字键变成了圆形，尽管这个系统的其它东西是圆角矩形的（至少这次文本是垂直对齐的）。谷歌还修复了Milestone 5中“-”键，“\*”键和“#”键不平衡的问题。

在安卓0.9中点击显示的号码会开始一个通话。这是十分重要的，因为这是摆脱安卓设备硬件实体“拨号”和“结束”键的一大步。另一方面，来电界面却走的是完全相反的道路，去除了在安卓0.5中显示于屏幕之上的“接听”和“拒绝”按键。谷歌会花上接下来几个版本的时间去摸索在特定的显示之下是否需要硬件实体拨号键。但是直到安卓2.0和摩托罗拉Droid面世，实体拨号按钮才最终变成了可选选项。

来电界面的所有选项隐藏在目录按钮之后。Milestone 5不支持距离传感器，所以它采取了简单粗暴的路线，在通话过程中禁用触摸屏。安卓0.9为G1开发，它有个距离传感器。最终谷歌没有在通话的时候禁用触摸传感器。

![安卓0.9和0.5中独立的联系人界面和联系人编缉界面。](/data/attachment/album/201411/30/102728ngcg0w8pieu88ize.png)

*安卓 0.9 和 0.5 中独立的联系人界面和联系人编缉界面 [Ron Amadeo供图]*

Milestone 5 的一些联系人信息有令人困惑的标签，像电子邮件只被打上“主要的”标签而不是“主电子邮箱”标签。安卓 0.9 用各部分的水平标题纠正了这个错误。而且现在左侧的每个联系人类型都有了<ruby> 手形图标 <rp>  （ </rp> <rt>  Action icons </rt> <rp>  ） </rp></ruby>。

编缉联系人界面如今是个更加繁忙的地方。每个输入框都有删除按钮，特定联系人铃声，一个显示在屏幕上的“更多信息”按钮用来添加输入框，一个是否将通话直接发送到语音信箱的复选框，以及在列表底部的“保存”和“放弃修改”按钮。从功能上来说，相对于旧版本这是个巨大的进步，但它看起来仍然很混乱。

---

![](/data/attachment/album/201411/30/102729xxnxnllhdsvhhaxo.jpg)

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

---

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

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

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


如何在 CentOS 7 上安装 Docker

Summary: Docker 是一个开源工具，它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机，并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序，并且可以扩展到成千上万的节点。 容器和 VM（虚拟机）的主要区别是，容器提供了基于进程的隔离，而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动，而容器只需要一秒钟或更短。容器使用宿主操作系统的内核，而虚拟机使用独立的内核。 Docker 的局限性之一是，它只能用在 64 位的操作系统上。  在这篇文章中我们将讨论如何在 CentOS 7.x 中

好用的Docker！

正在学习

@马全一 谢谢您的镜像~~

自带的版本太低了

[嘻嘻]

安装应该是yum -y install docker-io

并且要卸载掉前面安装的docker #yum remove docker

建议看看docker官方文档

您说的安装 docker-io 应该是 CentOS 6的情况，在 CentOS 7上，Docker 已经正式收录到CentOS-Extras 库内，名字已经是 docker 了。

请问Docker怎么改源

好评！！实用。板书很不错

好评！！实用。板书很不错

好评！！实用。板书很不错

好评！！实用。板书很不错

实用，板书不错

实用，板书不错

实用，板书不错

实用，板书不错

可以的·

Docker 是一个开源工具，它可以让创建和管理 **Linux 容器**变得简单。容器就像是轻量级的虚拟机，并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序，并且可以扩展到成千上万的节点。

容器和 VM（虚拟机）的主要区别是，容器提供了**基于进程的隔离**，而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动，而容器只需要一秒钟或更短。容器使用宿主操作系统的内核，而虚拟机使用独立的内核。

Docker 的局限性之一是，它只能用在 **64 位**的操作系统上。

![](/data/attachment/album/201411/30/205455ti24vl086694tvs2.jpg)

在这篇文章中我们将讨论如何在 CentOS 7.x 中安装 docker。

### CentOS 7 中 Docker 的安装

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker，只需要运行下面的 yum 命令：

```
[root@localhost ~]# yum install docker

```

### 启动 Docker 服务

安装完成后，使用下面的命令来启动 docker 服务，并将其设置为开机启动：

```
[root@localhost ~]# service docker start
[root@localhost ~]# chkconfig docker on

```

（LCTT 译注：此处采用了旧式的 sysv 语法，如采用CentOS 7中支持的新式 systemd 语法，如下：

```
[root@localhost ~]# systemctl  start docker.service
[root@localhost ~]# systemctl  enable docker.service

```

）

**下载官方的 CentOS 镜像到本地** （LCTT 译注：由于 Docker 被**墙** :-< ，所以请使用 <http://docker.cn> 的[镜像](https://docker.cn/h/how-to-use-docker-official-repositories)，感谢 [@马全一](http://weibo.com/genedna) 的镜像。 ）

```
[root@localhost ~]# docker pull centos
Pulling repository centos
192178b11d36: Download complete
70441cac1ed5: Download complete
ae0c2d0bdc10: Download complete
511136ea3c5a: Download complete
5b12ef8fd570: Download complete

```

**确认 CentOS 镜像已经被获取：**

```
[root@localhost ~]# docker images centos
REPOSITORY    TAG          IMAGE ID      CREATED       VIRTUAL SIZE
centos        centos5      192178b11d36  2 weeks ago   466.9 MB
centos        centos6      70441cac1ed5  2 weeks ago   215.8 MB
centos        centos7      ae0c2d0bdc10  2 weeks ago   224 MB
centos        latest       ae0c2d0bdc10  2 weeks ago   224 MB

```

**运行一个 Docker 容器：**

```
[root@localhost ~]# docker run -i -t centos /bin/bash
[root@dbf66395436d /]#

```

我们可以看到，CentOS 容器已经被启动，并且我们得到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。若要断开与容器的连接，输入 exit。

```
[root@cd05639b3f5c /]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[root@cd05639b3f5c /]# exit
exit
[root@localhost ~]#

```

我们还可以搜索基于 Fedora 和 Ubuntu 操作系统的容器。

```
[root@localhost ~]# docker search ubuntu
[root@localhost ~]# docker search fedora

```

**显示当前正在运行容器的列表**

![](/data/attachment/album/201411/30/205536tmq6hzl6mq165sqq.png)

---

via: <http://www.linuxtechi.com/install-docker-on-centos-7/>

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

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


系统之锹sysdig：Linux服务器监控和排障利器

Summary: 当你需要追踪某个进程产生和接收的系统调用时，首先浮现在你脑海中的是什么？你可能会想到strace，那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢？如果你想到了tcpdump，你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件（在Unix意义上：一切皆文件）的需求，可能你会使用lsof。 strace、tcpdump以及lsof，确实是些伟大的工具，它们应该成为每个系统管理员工具集之中的一部分，而这也正是你为什么应该爱上sysdig的原因。它是一个强大的开源工具，用于系统级别的勘察和排障，它的创建者在介绍它时称之为strace+

//@lidaobing:转发微博

@我的印象笔记

保存学习//@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

Repost

[太开心] //@-神仙-: //@lidaobing:转发微博

非常棒的一个工具 //@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

sysdig//@Linux中国: 它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

是个好东西

@我的印象笔记  //@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

MA

仅仅是整合了一下子吗

嗯  //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

@mywiz

看看

这工具很不错，收藏！

系统工具@我的印象笔记

马克//@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

cool //@易到用车王柏://@mylua: //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

收藏 //@fengyuncrawl:这工具很不错，收藏！

试试//@宋超_去哪儿呢: //@3rddayFPA:  //@KissDev:Cool tool //@mylua: //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

真心高级了：）

马一下//@马全一: //@sunbiao将军://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

好东西 //@iSunshow://@周明智:收藏 //@fengyuncrawl:这工具很不错，收藏！

@我的印象笔记

//@fengyuncrawl:这工具很不错，收藏！

mark //@fengyuncrawl:这工具很不错，收藏！

@我的印象笔记

//@来炜没睡醒:真心高级了：）

//@-神仙-: //@lidaobing:转发微博

@Linuxyunwei

//@ASTA谢: //@-神仙-: //@lidaobing:转发微博

收藏

@我的印象笔记

@我的印象笔记

//@ASTA谢: //@-神仙-: //@lidaobing:转发微博

@我的印象笔记 //@n4mine: //@ASTA谢: //@-神仙-: //@lidaobing:转发微博

//@ASTA谢: //@-神仙-: //@lidaobing:转发微博

@我的印象笔记

回头研究一下

mark//@ruochen_SH: @热情萧远山 @kykij @cjfeii //@KissDev:Cool tool //@mylua: //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

//@-浩泓-:转发微博

@我的印象笔记

m//@n4mine: //@ASTA谢: //@-神仙-: //@lidaobing:转发微博

@我的印象笔记

@我的印象笔记 //@团团爱荛六://@lidaobing：转发微博

@我的印象笔记

不错不错

@胶布虫 @___枫恋寒

学习了

当你需要追踪某个进程产生和接收的系统调用时，首先浮现在你脑海中的是什么？你可能会想到strace，那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢？如果你想到了tcpdump，你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件（在Unix意义上：一切皆文件）的需求，可能你会使用lsof。

strace、tcpdump以及lsof，确实是些伟大的工具，它们应该成为每个系统管理员工具集之中的一部分，而这也正是你为什么应该爱上[sysdig](http://www.sysdig.org/)的原因。它是一个强大的开源工具，用于系统级别的勘察和排障，它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”。抛开幽默不说，sysdig的最棒特性之一在于，它不仅能分析Linux系统的“现场”状态，也能将该状态保存为转储文件以供离线检查。更重要的是，你可以自定义sysdig的行为，或者甚至通过内建的（你也可以自己编写）名为凿子（chisel）的小脚本增强其功能。单独的凿子可以以脚本指定的各种风格分析sysdig捕获的事件流。

![](/data/attachment/album/201411/30/212928sfllnunlu88kpueo.png)

在本教程中，我们将探索sysdig的安装及其基本用法，在Linux上实施系统监控和排障。

### 安装Sysdig

对于本教程，由于为了简便、缩短安装流程以及版本的不可知，我们将选择使用官方网站提供的自动化安装过程。在自动化过程中，安装脚本会自动检测操作系统并安装必需的依赖包。

以root身份运行以下命令来从官方apt/yum仓库安装sysdig：

```
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash

```

![](/data/attachment/album/201411/30/213114hdh8fh9gh1bggfgf.jpg)

安装完成后，我们可以通过以下方法调用sysdig来感受一下它：

```
# sysdig

```

我们的屏幕将马上被系统上发生的所有事件填满，对于这些信息，不便于我们做更多操作。要进一步处理，我们可以运行：

```
# sysdig -cl | less

```

来查看可用的凿子列表。

![](/data/attachment/album/201411/30/213117v29uqfeaqjbsp2tk.jpg)

默认有以下类目可用，各个类目中分布有多个内建的凿子。

* CPU Usage：CPU使用量
* Errors：错误
* I/O
* Logs：日志
* Misc：混杂
* Net：网络
* Performance：性能
* Security：安全
* System State：系统状态

要显示指定凿子上的信息（包括详细的命令行用法），运行以下命令：

```
# sysdig -cl [凿子名称]

```

例如，我们可以检查“网络”类目下关于spy\_port凿子的信息：

```
# sysdig -i spy_port

```

![](/data/attachment/album/201411/30/213120teec01llsdua0juj.jpg)

凿子可以通过过滤器（可同时应用于实时数据和记录文件）组合，以获取更多有用的输出。

过滤器遵从“类.字段”结构。例如：

* **fd.cip**：客户端IP地址。
* **evt.dir**：事件方向，可以是‘>’用于进入事件，或‘<’用于退出事件。

完整的过滤器列表可以通过以下命令显示：

```
# sysdig -l

```

在本教程剩余部分，我将演示几个sysdig的使用案例。

### Sysdig实例： 服务器性能排障

假定你的服务器发生了性能问题（如，没有回应，或者重大的回应延迟）。你可以使用瓶颈凿子来显示当前10个最慢系统调用的列表。

使用以下命令在存活服务器上进行实时检查。“-c”标识，后跟凿子名称告诉sysdig运行指定的凿子。

```
# sysdig -c bottlenecks

```

或者，你可以离线对服务器实施性能分析。在此种情况下，你可以保存完整的sysdig记录到文件，然后像下面这样针对记录运行瓶颈凿子。

首先，保存sysdige记录（使用Ctrl+c来停止收集）：

```
# sysdig -w trace.scap

```

收集完记录后，你可以运行以下命令来检查捕获间隔中最慢的系统调用：

```
# sysdig -r trace.scap -c bottlenecks

```

![](/data/attachment/album/201411/30/213124mrtttsi873rik5wh.jpg)

你需要关注栏#2，#3和#4，这些分别表示执行时间、进程名和PID。

### Sysdig实例： 监控交互用户活动

假定你作为系统管理员想要监控系统中交互的用户活动（如，用户在命令行输入了什么命令，以及用户去了什么目录），这时spy\_user凿子就派上用场了。

让我们首先通过一些额外选项来收集一个sysdig记录。

```
# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz

```

* “-s 4096”告诉sysdig每个事件捕获4096字节。
* “-z” （与“-w”一起使用）为记录文件启用压缩。
* “-w ”保存sysdig记录到指定的文件。

在上面的例子中，我们自定义了基于每个主机的压缩的记录文件的名称。记住，你可以在任何时候按下Ctrl+c来打断sysdig的执行。

在我们收集到了合理数量的数据后，我们可以通过运行以下命令来查看每个用户的交互活动：

```
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users

```

![](/data/attachment/album/201411/30/213126gu3ix5dk5y5kzuct.jpg)

上面输出的第一栏表示与指定用户的活动相关进程的PID。

如果你想要定位一个指定的用户，以及只监控该用户的活动又怎么样呢？你可以通过用户名对spy\_users凿子的结果进行过滤：

```
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"

```

![](/data/attachment/album/201411/30/213128nb0isikzzpi1jhl2.jpg)

### Sysdig实例： 监控文件I/O

我们可以使用“-p”标识来自定义sysdig记录的输出格式，并指定双引号括起来的想要的字段（如用户名、进程名，以及文件或套接口名称）。在本例中，我们将创建一个记录文件，该文件将只包含在家目录中的写入事件（我们今后可以使用“sysdig -r writetrace.scap.gz”来检测该文件）。

```
# sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz

```

![](/data/attachment/album/201411/30/213134kulb8b3eeu3r3zg3.jpg)

### Sysdig实例： 监控网络I/O

作为服务器排障的一部分，你可能想要监听网络通信，此工作通常由tcpdump做。对于sysdig，可以很容易进行通信嗅探，其风格更为对用户友好。

例如，你可以检查由特定IP地址，特定进程（如apache2）提供的数据（ASCII编码格式）：

```
# sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2

```

如果你想要监控原生数据传输（二进制格式），请把“-A”替换为“-X”：

```
# sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2

```

要获取更多信息、实例以及案例分析，你可以查阅[项目网站](http://www.sysdig.org/)。相信我，会有着无限可能，但请不要仅仅局限于我所写的这些。安装sysdig，请从今天开始深入挖掘吧！

---

via: <http://xmodulo.com/monitor-troubleshoot-linux-server-sysdig.html>

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

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


20个关于Postfix的面试题

Summary: 问题1：什么是 Postfix，它的默认端口是多少？ 答：Postfix 是一个开源的 MTA（邮件传送代理，英文名：Mail Transfer Agent）,用于转发 email。相信很多人知道 Sendmail，而 Postfix 是它的替代品。默认端口是25。 问题2：Postfix 和 Sendmail 有什么区别？ 答：Postfix 使用模块化设计，由多个独立的可执行程序组成；而 Sendmail 被设计成有一个强大的后台进程提供所有服务。 问题3：什么是 MTA，它在邮件系统中扮演什么角色？ 答：MTA 是 Mail Transfer Agent （邮件传输代理）的缩写。MTA 负责接收和发送邮件、确定发送路径和地址重写

都是很基本的…

除了第一个，其他都不会了。

还可以.

邮件的知识都快忘光了[衰]

Mark

@我的印象笔记

mark

@我的印象笔记

![](/data/attachment/album/201412/01/201220h2vh2vvisw43cttt.jpg)

### 问题1：什么是 Postfix，它的默认端口是多少？

答：Postfix 是一个开源的 MTA（邮件传送代理，英文名：Mail Transfer Agent）,用于转发 email。相信很多人知道 Sendmail，而 Postfix 是它的替代品。默认端口是25。

### 问题2：Postfix 和 Sendmail 有什么区别？

答：Postfix 使用模块化设计，由多个独立的可执行程序组成；而 Sendmail 被设计成有一个强大的后台进程提供所有服务。

### 问题3：什么是 MTA，它在邮件系统中扮演什么角色？

答：MTA 是 Mail Transfer Agent （邮件传输代理）的缩写。MTA 负责接收和发送邮件、确定发送路径和地址重写（LCTT译注：address rewriting，就是完善发送地址，比如将“username”这个地址重写为“[username@example.com](mailto:username@example.com)”）。本地转发就是将邮件发送给 MDA。Qmail、Postix、Sendmail 都是 MTA。

### 问题4：什么是 MDA？

答：MDA 是 Mail Delivery Agent （邮件投递代理）的缩写。MDA 这个程序用于从 MTA 获取邮件并投递至本地收件人的邮箱。MDA 通常可以过滤邮件或为邮件分类。一个 MDA 也能决定一封邮件是否需要转发到另一个邮箱地址。Procmail 就是一个 MDA。

### 问题5：什么是 MUA？

答：MUA 是 Mail User Agent （邮件用户代理）的缩写。MUA 是一个邮件客户端软件，可以用来写邮件、发送邮件、接收邮件。发送邮件时使用的是 MTA；接收邮件时可以从邮件存储区直接收取，也可以通过 POP/IMAP 服务器间接收取。Outlook、Thunkerbird、Evolution 都是 MUA。

### 问题6：邮件服务器里 postmaster 的作用是什么？

答：邮件管理者一般就是 postmaster。一个 postmaster 的责任就是保证邮件系统正常工作、更新系统配置、添加/删除邮箱帐号，以及其他工作。每个域中必须存在一个 postmaster 的别名（LCTT译注：postmaster 别名用于接受一些其它服务器/用户对该邮件系统的沟通邮件，如关于垃圾邮件拒收的投诉等，通常都会直接被邮件服务器的管理员所接受。一些系统错误和提示的邮件，也往往以postmaster 作为发件人），用于将邮件发往正确的用户。

### 问题7：Postfix 都有些什么重要的进程？

答：以下是 Postfix 邮件系统里最重要的后台进程列表：

* **master**：这条进程是 Postfix 邮件系统的大脑，它产生所有其他进程。
* **smtpd**：作为服务器端程序处理所有外部连进来的请求。
* **smtp**：作为客户端程序处理所有对外发起连接的请求。
* **qmgr**：它是 Postfix 邮件系统的心脏，处理和控制邮件队列里面的所有消息。
* **local**：这是 Postfix 自有的本地投递代理MDA，就是它负责把邮件保存到邮箱里。

### 问题8：Postfix 服务器的配置文件是什么？

答：有两个主要配置文件：

* **/etc/postfix/main.cf**：这个文件保存全局配置信息，所有进程都会用到，除非这些配置在 master.cf 文件中被重新设置了。
* **/etc/postfix/master.cf**：这个文件保存了额外的进程运行时环境参数，在 main.cf 文件中定义的配置可能会被本文件的配置覆盖掉。

### 问题9：如何将 Postfix 重启以及设为开机启动？

答：使用这个命令重启：service postfix restart；使用这个命令设为开机启动：chkconfig postfix on

### 问题10：怎么查看 Postfix 的邮件队列？

答：Postfix 维护两个队列：未决邮件队列（pending mails queue）和等待邮件队列（deferred mail queue）。等待队列包含了暂时发送失败、需要重新发送的邮件，Postfix 会定期重发（默认5分钟，可自定义设置）。（LCTT译注：其实 Postfix 维护5个队列：输入队列，邮件进入 Postfix 系统的第一站；活动队列，qmgr 将输入队列的邮件移到活动队列；等待队列，保存暂时不能发送出去的邮件；故障队列，保存受损或无法解读的邮件；保留队列，将邮件无限期留在 Postfix 队列系统中。）

列出邮件队列里面所有邮件：

```
# postqueue -p

```

保存邮件队列名单：

```
# postqueue -p > /mnt/queue-backup.txt

```

让 Postfix 马上处理队列：

```
# postqueue -f

```

### 问题11：如何删除邮件队列里面的邮件？

答：以下命令删除所有邮件：

```
# postsuper -d ALL

```

以下命令只删除等待队列中的邮件：

```
# postsuper -d ALL deferred

```

### 问题12：如何通过命令来检查 Postfix 配置信息？

答：使用postconf -n命令可以查看，它会过滤掉配置文件里面被注释掉的配置信息。

### 问题13：实时查看邮件日志要用什么命令？

答：

```
tail -f /var/log/maillog 或 tailf /var/log/maillog
```

### 问题14：如何通过命令行发送测试邮件？

答：参考下面的命令：

```
# echo "Test mail from postfix" | mail -s "Plz ignore" info@something.com

```

### 问题15：什么是“开放邮件转发（Open Relay）”？

答：开放邮件转发是 SMTP 服务器的一项设定，允许因特网上任意的其他用户能通过该服务器转发邮件，而不是直接发送到某个帐号的服务器或只允许授权用户通过它来发送邮件。过去，这项功能在许多邮件服务器中都是默认开启的，但是现在已经不再流行了，因为邮件转发会导致大量垃圾邮件和病毒邮件在网络上肆虐。

### 问题16：什么是 Postfix 上的邮件转发主机？

答：转发主机是 SMTP 的地址，如果在配置文件中有配置，那么所有输入邮件都将被 SMTP 服务器转发。

### 问题17：什么是灰名单？

答：灰名单（LCTT译注：介于白名单和黑名单之间）是一种用于拦截垃圾邮件的技术。一个 MTA 使用灰名单时就会“暂时拒绝”未被识别的发送者发来的所有邮件。如果邮件是正当合理的，发起者会在一段时间后重新发送，然后这份邮件就能被接收。（LCTT译注：灰名单基于这样一个事实，就是大多数的垃圾邮件服务器和僵尸网络的邮件只发送一次，而会忽略要求它们在一定的时间间隔后再次发送的请求。）

### 问题18：邮件系统中 SPF 记录有什么重要作用？

答：SPF 是 Sender Policy Framework 的缩写，用于帮助邮件域的拥有者确认发送方是否来自他们的域，目的是其他邮件系统能够保证发送方在发送邮件时来自经过授权的来源 —— 这种方法可以减小遇到邮件地址欺骗、网络钓鱼和垃圾邮件的风险。

### 问题19：邮件系统中 DKIM 有什么用处？

答：域名密匙是一套电子邮件身份认证系统，用于验证邮件发送方的 DNS 域和邮件的完整性。域名密匙规范采用互联网电子邮件认证技术，建立了一套加强版协议：域名密匙识别邮件（就是 DKIM）。

### 问题20：邮件系统中 ASSP 的规则是什么？

答：ASSP(Anti-Spam SMTP Proxy，反垃圾代理) 是一个网关服务器，安装在你的 MTA 前面，通过自建白名单、自动学习贝叶斯算法、灰名单、DNS 黑名单（DNSBL）、DNS 白名单（DNSWL）、URI黑名单（URIBL）、SPF、SRS、Backscatter、病毒扫描功能、附件阻拦功能、基于发送方等多种方法来反垃圾邮件。

---

via: <http://www.linuxtechi.com/postfix-interview-questions-answers/>

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

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


Linux系统管理员的命令行工具箱目录

Summary: 系统管理员（sysadmins）负责日常维护生产系统和服务。其中一个关键任务就是保证功能性服务能24小时工作。为了这个，他们得很小心地计划备份方式，灾难管理策略，定时维护，安全审查，等等。和任意其他管理一样，系统管理员也有他们的必备工具。在正确的时间正确的情况下使用合适的工具，可以帮助维护操作系统的健壮，达到最小的服务中断时间和最大的运行时间。  这篇文章会介绍一些系统管理员日常活动中最常用和有效的命令行工具。如果你想推荐其他没在这里列出来的好用的工具，别忘了在评论区里分享一下。 网络工具   ping：通过ICMP回

挺好的。“效率工具”我就只认识一个screen还不熟练，难道这就是我没效率的原因？

Repost

@我的印象笔记

看看

Repost @根据相关政策法律该名称不予显示

转起

@有道云笔记收藏

@有道云笔记收藏

@我的印象笔记

@我的印象笔记

@我的印象笔记

大赞！

phpping应该是hping吧

对不起，是笔误，马上修改。

@我的印象笔记

系统管理员（sysadmins）负责日常维护生产系统和服务。其中一个关键任务就是保证功能性服务能24小时工作。为了这个，他们得很小心地计划备份方式，灾难管理策略，定时维护，安全审查，等等。和任意其他管理一样，系统管理员也有他们的必备工具。在正确的时间正确的情况下使用合适的工具，可以帮助维护操作系统的健壮，达到最小的服务中断时间和最大的运行时间。

![](/data/attachment/album/201412/01/203727i8skuaqv448pbjxf.jpg)

这篇文章会介绍一些系统管理员日常活动中最常用和有效的命令行工具。如果你想推荐其他没在这里列出来的好用的工具，别忘了在评论区里分享一下。

### 网络工具

1. **ping**：通过ICMP回应/回复报文来检查远端主机的端到端连接性（RTT延时，抖动，丢包）。用来检查系统状态和可连接性很不错。
2. **[hping](http://www.hping.org/)**：网络扫描和检测工具，可以产生ICMP/TCP/UDP ping数据包。常常用于高级端口扫描，防火墙测试，手动MTU路径发现和碎片测试。
3. **traceroute**：通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径。用来调试网络连接性和路由问题。
4. **mtr**：traceroute的一个变种，能根据运行时统计数据整理出每一跳的包丢失/抖动。用来评估路由路径延时很不错。
5. **[netcat](http://netcat.sourceforge.net/)/[socat](http://www.dest-unreach.org/socat/)**：TCP/IP网络里的瑞士军刀，可以读/写 TCP/UDP 协议字节流。用来调试防火墙策略和服务可用性很不错。
6. **dig**：DNS调试工具，可以生成正向查询，反向查询，搜索域名服务器，检查CNAME，MX和其他DNS记录。可以在侦错的时候查询特定的DNS服务器。
7. **nslookup**：另外一个DNS检查/调试工具。支持所有DNS查询和记录。可以查询特定DNS服务器。
8. **dnsyo**：一个DNS测试工具，通过对全世界1500个不同网络中的大量开放解析器执行DNS查询来测试DNS传输。
9. **lsof**：显示进程打开的文件信息（例如，普通文件，管道或套接字）。用来监视网络连接很不错。
10. **iftop**：一个基于ncurses的命令行界面应用，可以实时监视各个网络物理接口上的网络连接和带宽占用。用来记录霸占带宽的应用、用户、目的地和端口等很不错。
11. **netstat**：一个网络统计工具，可以显示状态以及统计信息，当前网络连接（TCP/UDP端口，IP地址）、路由表、TX/RX traffic以及网络协议。用来做网络相关诊断和性能调试很不错。
12. **[tcpdump](http://www.tcpdump.org/)**：一个常用的基于libpcap抓包库的包侦测工具。可以按伯克利包过滤器格式定义抓包条件。
13. **[tshark](https://www.wireshark.org/docs/man-pages/tshark.html)**：另一个命令行抓包工具，和它的GUI版本Wireshark完全兼容。支持[1000种协议](https://www.wireshark.org/docs/dfref/)而且这个列表还在增加。用来调试、分析和保存实时网络封包信息很不错。
14. **ip**：一个多功能的命令行网络工具，是iproute2包的一部分。可以检查和修改路由表、网络设备状态以及IP隧道设置。用来查看路由表、增加/删除静态路由、配置网络接口、以及调试路由问题很有用。
15. **ifup/ifdown**：用来激活和关闭特定的网络接口。经常用于重启整个网络服务。
16. **[autossh](http://www.harding.motd.ca/autossh/)**：一个能建立SSH连接并在断线后自动重新连接的程序。用来创建长时间保持的穿越严格企业网络的SSH隧道很有用。
17. **iperf**：一个网络测试工具，通过在发送自定义TCP/UDP数据流来衡量主机间双向最大吞吐量。
18. **[elinks](http://elinks.or.cz/)/[lynx](http://lynx.isc.org/)**：为基于命令行的服务器环境下使用的基于文字的网页浏览器。

### 安全工具

1. **[iptables](http://www.netfilter.org/projects/iptables/)**：一个用户空间下的命令行工具，用于配置Linux内核防火墙。可以创建和修改Linux内核空间的网络包接收、转发和发送规则。
2. **[nmap](http://nmap.org/)**：一个常用的为了安全审查目的的端口扫描和网络发现工具。用来在本地网络中找出哪些主机开机并运行起来了以及某台特定主机打开了哪些端口很有用。
3. **[TCP Wrappers](http://en.wikipedia.org/wiki/TCP_Wrapper)**：一个主机端的网络访问控制列表工具，可以过滤进入/出去的网络请求/回复。经常配合iptables一起使用，作为额外一层安全保护。
4. **getfacl/setfacl**：查看和定制文件和目录的访问控制列表，作为传统文件权限的扩展。
5. **cryptsetup**：用于创建和管理LUKS加密磁盘分区。
6. **lynis**：一个命令行的漏洞扫描工具。可以扫描整个Linux系统，并汇报潜在的漏洞以及相关可能解决方案。
7. **maldet**：一个恶意软件扫描命令行工具，可以检测和隔离潜在的感染文件。可以在后台运行长期监视。
8. **[rkhunter](http://rkhunter.sourceforge.net/)/[chkrootkit](http://www.chkrootkit.org/)**：一个命令行工具，可以扫描本地系统里的潜在木马、隐藏后门和可疑利用，并禁用它们。

### 存储工具

1. **fdisk**：一个磁盘分区编辑工具。用于查看、创建和修改本地磁盘或可移动磁盘的分区。
2. **sfdisk**：fdisk的一个变种，能用一种非交互的方式访问或更新磁盘分区表。用来自动化备份和恢复过程中的磁盘分区很有用。
3. **[parted](http://www.gnu.org/software/parted/)**：另一个磁盘分区编辑器，支持超过2TB的磁盘的GPT（GUID分区表）格式。gparted是parted的一个前端GTK+图形界面。
4. **df**：用来查看不同分区或文件路径的已用/可用存储空间和挂载点。还有一个更易用的变种dfc。
5. **du**：用来查看不同文件和目录的当前磁盘占用情况（例如，du -sh \*）。
6. **mkfs**：一个磁盘格式化命令，用来在独立磁盘分区上建立文件系统。有多个文件系统相关的版本：ext2、ext3、ext4、bfs、ntfs、vfat/fat。
7. **fsck**：一个命令行工具，用来检查文件系统错误并尝试可能的修复。通常在启动时自动运行，但是在卸载一个分区后也可以根据需要手动运行。
8. **mount**：用来映射一个物理磁盘分区、网络共享或远程存储到一个本地挂载点。任何对挂载点里的读/写操作都是对应实际存储的实际数据读/写。
9. **mdadm**：一个命令行工具，用来管理物理块设备上的软件RAID设备。可以创建、构造、增长或监视RAID阵列。
10. **lvm**：一套命令行工具集，用来管理卷分组和物理/逻辑卷，可以用最小的停机时间在多个物理磁盘上创建、调整大小、拆分和合并卷。

### 日志访问工具

1. **tail**：用来查看一个（增长中的）日志文件的尾部。有几个变种，包括multitail（多窗口查看）和[ztail](https://hackage.haskell.org/package/ztail)（支持inotify和正则表达式过滤以及颜色）。
2. **logrotate**：一个命令行工具，可以在根据设定的时间段拆分、压缩并通过邮件发送旧的/大的日志文件。用来管理可能产生大量日志文件的繁忙主机很有用。
3. **grep/egrep**：可以通过特定的模式或正则表达式过滤日志内容。变种包括用户更友好的ack和速度更快的ag。
4. **awk**：一个多功能的文本扫描和处理工具。常用于从文本/日志文件中找出特定的列或内容，并输出给其他工具。
5. **sed**：一个文本流编辑工具，可以过滤和改变（例如，删除行/空格、替换/转换单词、增加计数）文本流并通过管道连接到stdout/stderr或者其他工具。

### 备份工具

1. **[rsync](http://rsync.samba.org/)**：一个快速的单向增量备份和镜像工具（LCTT 译注：rsync 应是双向的）。常用于复制一个数据仓库到线下存储，可以选择通过SSH或stunnel的加密连接。
2. **[rdiff-backup](http://www.nongnu.org/rdiff-backup/)**：另一个有效利用带宽的增量备份工具。管理两个连续快照之间的差分。
3. **duplicity**：一个加密的增量备份工具。使用GnuPG加密备份，并通过SSH上传到远程服务器。

### 性能监视工具

1. **top**：一个命令行的进程查看程序。可以监视系统负载、进程状态、CPU和内存占用。有一个更易用的变种htop。
2. **ps**：显示系统所有运行中进程的一个快照。输出可以定制成显示PID、PPID、用户、负载、内存、积累的用户/系统时间、启动时间、以及更多。有一个变种pstree可以用树结构显示进程。
3. **[nethogs](http://nethogs.sourceforge.net/)**：一个带宽监视工具，按进程来分组显示活动网络连接，实时汇报每个进程占用的（上传/下载）带宽。
4. **ngxtop**：一个网页服务器访问日志解析和监视工具，界面受到了top命令启发。它可以实时汇报整理过的页面请求列表，包括频率、大小、HTTP返回值、IP地址，等等。
5. **vmstat**：一个简单的命令行工具，可以显示多个实时系统特征，例如进程数、剩余内存、分页状态、CPU占用、块设备I/O活动、中断/上下文切换统计、等等。
6. **iotop**：一个基于ncurses的I/O监视工具，可以实时排序显示所有运行中进程的磁盘I/O活动。
7. **iostat**：一个命令行工具，可以汇报当前CPU使用情况，以及设备I/O使用情况，这里的I/O使用情况（例如，块传输速度、字节读/写速度）是按设备或分区来汇报的。

### 效率工具

1. **screen**：用来把一个单一的终端拆分成多个持久的虚拟终端，也支持远程用户访问，类似teamviewer的屏幕分享功能。
2. **tmux**：另一个终端复用工具，可以支持多个长期会话，还可以横向/纵向拆分终端。
3. **cheat**：一个简单的命令行工具，可以让你查看多个常用Linux命令的备忘录，就在手边非常方便。内建的备忘录也可以完全定制。
4. **apropos**：用来在帮助手册里查找描述或关键字很有用。

### 包管理工具

1. **apt**：基于Debian系统的事实上的包管理工具，例如Debian、Ubuntu或Backtrack。一个救生圈。
2. **apt-fast**：apt-get的一个支撑应用，可以通过多个并行连接明显提高apt-get的下载速度。
3. **apt-file**：用来查看某个特定文件属于哪个.deb包，或者显示一个特定.deb包里的所有文件。已安装和未安装的包都能支持。
4. **dpkg**：一个用来手动安装.deb包的命令行工具。强烈建议尽可能的使用apt。
5. **yum**：用于基于红帽的系统的自动包管理工具，比如RHEL、CentOS或Fedora。这是另一个救生圈！
6. **rpm**：通常我都是使用 rpm 来配合 yum 使用。有很多有用的参数，比如-q、-f、-l可以分别用来查询、指定文件和路径。

### 硬件工具

1. **lspci**：一个命令行工具，可以显示已安装的PCI设备的各种信息，比如型号名称、设备驱动、设备功能、内存地址、PCI总线地址。
2. **lshw**：一个命令行工具，可以查询和显示不同分类下的硬件配置的详细信息（例如，处理器、内存、主板、网络、存储）。支持多重输出格式：html、xml、json、text。
3. **[inxi](http://code.google.com/p/inxi/)**：一个综合硬件查看工具，可以提供不同硬件模块的总览，例如CPU，显卡，声卡，网卡，温度/风扇传感器，等等。

如果你希望推荐没有列在这里的好用的工具，不要客气，在评论区里分享一下。

---

via: <http://xmodulo.com/2014/08/useful-cli-tools-linux-system-admins.html>

作者：[Sarmed Rahman](http://xmodulo.com/author/sarmed) 译者：[zpl1025](https://github.com/zpl1025) 校对：[wxy](https://github.com/wxy)

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


解决八种Linux硬盘问题的技巧

Summary: 不能在Linux或者类UNIX系统的硬盘上写入数据？想解决服务器上磁盘损坏的问题吗？想知道你为什么总是在屏幕上看到磁盘已满的字眼吗？想学习处理这些问题的办法吗？试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。  #1 - 错误: 设备上无剩余空间 当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中，我运行fallocate命令然后我的系统就会提示磁盘空间已经耗尽： $ fallocate -l 1G test4.img fallocate: test4.img: fallocate failed: No space left on device  第一步是运行df命令来查看一个有分区的文件系统的总磁

好文章

@我的印象笔记

如何解决Linux硬盘问题

@我的印象笔记

不能在Linux或者类UNIX系统的硬盘上写入数据？想解决服务器上磁盘损坏的问题吗？想知道你为什么总是在屏幕上看到“磁盘已满”的字眼吗？想学习处理这些问题的办法吗？试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。

![](/data/attachment/album/201412/01/210833dhfbd610uh067dh1.jpg)

### #1 - 错误: 设备上无剩余空间

当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中，我运行[fallocate命令](http://www.cyberciti.biz/faq/howto-create-lage-files-with-dd-command/)然后我的系统就会提示磁盘空间已经耗尽：

```
$ fallocate -l 1G test4.img
fallocate: test4.img: fallocate failed: No space left on device

```

第一步是运行df命令来查看一个有分区的文件系统的总磁盘空间和可用空间的信息：

```
$ df

```

或者试试可读性比较强的输出格式：

```
$ df -h

```

部分输出内容：

```
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda6       117G   54G   57G  49% /
udev            993M  4.0K  993M   1% /dev
tmpfs           201M  264K  200M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none           1002M     0 1002M   0% /run/shm
/dev/sda1       1.8G  115M  1.6G   7% /boot
/dev/sda7       4.7G  145M  4.4G   4% /tmp
/dev/sda9       9.4G  628M  8.3G   7% /var
/dev/sda8        94G  579M   89G   1% /ftpusers
/dev/sda10      4.0G  4.0G     0 100% /ftpusers/tmp

```

使用df命令输出可以清楚地发现，在 /dev/sda10 分区下总共4.0Gb的空间被全部写满了。

#### 修复磁盘写满的问题

1.[用gzip，bzip2或tar命令压缩未压缩的日志和其它文件](http://www.cyberciti.biz/howto/question/general/compress-file-unix-linux-cheat-sheet.php)：

```
gzip /ftpusers/tmp/*.log
bzip2 /ftpusers/tmp/large.file.name

```

2.在类UNIX系统中[用rm命令删除不想要的文件](http://www.cyberciti.biz/faq/howto-linux-unix-delete-remove-file/)：

```
rm -rf /ftpusers/tmp/*.bmp

```

3.[用rsync命令移动文件至其它系统或外置硬盘](http://www.cyberciti.biz/faq/linux-unix-bsd-appleosx-rsync-delete-file-after-transfer/):

```
rsync --remove-source-files -azv /ftpusers/tmp/*.mov /mnt/usbdisk/
rsync --remove-source-files -azv /ftpusers/tmp/*.mov server2:/path/to/dest/dir/

```

4.在类UNIX系统中[找出最占磁盘空间的目录或文件](http://www.cyberciti.biz/faq/how-do-i-find-the-largest-filesdirectories-on-a-linuxunixbsd-filesystem/)：

```
du -a /ftpusers/tmp | sort -n -r | head -n 10
du -cks * | sort -rn | head

```

5.[清空指定文件](http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/)。这招对日志文件很有效：

```
truncate -s 0 /ftpusers/ftp.upload.log
### bash/sh等 ##
>/ftpusers/ftp.upload.log
## perl ##
perl -e'truncate "filename", LENGTH'

```

6.在Linux和UNIX中找出并删除显示着但已经被删除的大文件：

```
## 基于Linux/Unix/OSX/BSD等系统 ##
lsof -nP | grep '(deleted)'

## 只基于Linux ##
find /proc/*/fd -ls | grep  '(deleted)'

```

清空它：

```
 ## 基于Linux/Unix/OSX/BSD等所有系统 ##
> "/path/to/the/deleted/file.name"
## 只基于Linux ##
> "/proc/PID-HERE/fd/FD-HERE"

```

### #2 - 文件系统是只读模式吗？

当你尝试新建或保存一个文件时，你可能最终得到诸如以下的错误：

```
$ cat > file
-bash: file: Read-only file system

```

运行mount命令来查看被挂载的文件系统是否处于只读状态：

```
$ mount
$ mount | grep '/ftpusers'

```

在基于Linux的系统中要修复这个问题，只需将这个处于只读状态的文件系统重新挂载即可：

```
# mount -o remount,rw /ftpusers/tmp

```

（LCTT 译注：如果硬盘由于硬件故障而 fallback 到只读模式，建议不要强制变回读写模式，而是赶快替换硬盘）

另外，我是这样[用rw模式重新挂载FreeBSD 9.x服务器的根目录](http://www.cyberciti.biz/faq/howto-freebsd-remount-partition/)的:

```
# mount -o rw /dev/ad0s1a /

```

### #3 - Am I running out of inodes?

有时候，df命令能显示出磁盘有空余的空间但是系统却声称文件系统已经写满了。此时你需要用以下命令来检查能在文件系统中识别文件及其属性的[索引节点](http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-inodes.html)：

```
$ df -i
$ df -i /ftpusers/

```

部分输出内容：

```
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda8      6250496 11568 6238928    1% /ftpusers

```

如上 /ftpusers 下有总计62,50,496KB大小的索引节点但是只有11,568KB被使用。你可以在 /ftpusers 位置下另外创建62,38,928KB大小的文件。如果你的索引节点100%被使用了，试试看以下的选项：

* 找出不想要的文件并删除它，或者把它移动到其它服务器上。
* 找出不想要的大文件并删除它，或者把它移动到其它服务器上。

（LCTT 译注：如果一个分区存储了太多的小文件，会出现 inode 用完而存储扇区还有空闲的情况，这种情况下要么清除小文件或在不需要独立访问的情况下将它们打包成一个大文件；要么将数据保存好之后重新分区，并设置分区的 -t news 属性，增加 inode 分配）

### #4 - 我的硬盘驱动器宕了吗？

[日志文件中的输入/输出错误(例如 /var/log/messages)](http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html)说明硬盘出了一些问题并且可能已经失效，你可以用smartctl命令来查看硬盘的错误，这是一个在类UNIX系统下控制和监控硬盘状态的一个命令。语法如下：

```
smartctl -a /dev/DEVICE
# 在Linux服务器下检查 /dev/sda
smartctl -a /dev/sda

```

你也可以用"Disk Utility"这个软件来获得同样的信息。

[![](/data/attachment/album/201412/01/210842m1mt1zpyffq57u1q.png)](http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html)

图 01: Gnome磁盘工具(Applications > System Tools > Disk Utility)

>
> **注意**: 不要对S.M.A.R.T.工具期望太高，它在某些状况下无法工作，我们要定期做备份。
>
>
>

### #5 - 我的硬盘驱动器和服务器是不是太热了？

高温会引起服务器低效，所以你需要把服务器和磁盘维持在一个平稳适当的温度，高温甚至能导致服务器宕机或损坏文件系统和磁盘。[用hddtemp或smartctl功能，通过从支持S.M.A.R.T.功能的硬盘上读取数据的方式，从而查出你的Linux或基于UNIX系统上的硬盘温度](http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html)。只有现代硬驱动器有温度传感器。hddtemp功能也支持从SCSI驱动器读取S.M.A.R.T.信息。hddtemp能作为一个简单的命令行工具或守护程序来从所有服务器中获取信息：

```
hddtemp /dev/DISK
hddtemp /dev/sg0

```

部分输出内容如下：

[![](/data/attachment/album/201412/01/210843g82634jq6j8gt2yf.jpg)](http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/hddtemp-on-rhel/)

图 02: hddtemp正在运行

你也可以像下面显示的那样使用smartctl命令：

```
smartctl -d ata -A /dev/sda | grep -i temperature

```

#### 我怎么获取CPU的温度

你可以使用Linux硬件监控工具，例如像[用基于Linux系统的lm\_sensor功能来获取CPU温度](http://www.cyberciti.biz/faq/howto-linux-get-sensors-information/)：

```
sensors

```

Debian服务器的部分输出内容：

[![](/data/attachment/album/201412/01/210845f3r4lz8v5pvzvebm.jpg)](http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/sensors-command-on-debian-server/)

图 03: sensors命令提供了一台Linux计算机的CPU核心温度和其它信息

### #6 - 处理损坏的文件系统

服务器上的文件系统可能会因为硬件重启或一些其它的错误比如坏的扇区而损坏。你可以[用fsck命令来修复损坏的文件系统](http://www.cyberciti.biz/tips/repairing-linux-ext2-or-ext3-file-system.html)：

```
umount /ftpusers
fsck -y /dev/sda8

```

来看看[怎么应对Linux文件系统故障](http://www.cyberciti.biz/tips/surviving-a-linux-filesystem-failures.html)的更多信息。

### #7 - 处理Linux中的软阵列

输入以下命令来查看Linux软阵列的最近状态：

```
 ## 获得 /dev/md0 上磁盘阵列的具体内容 ##
mdadm --detail /dev/md0

## 查看状态 ##
cat /proc/mdstat
watch cat /proc/mdstat

```

部分输出内容：

[![](/data/attachment/album/201412/01/210846dvqii8udxhia38l8.jpg)](http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/linux-mdstat-output/)

图 04: 查看Linux软阵列状态命令

你需要把有故障的硬件驱动器更换掉，别删错了。本例中，我更换了 /dev/sdb (RAID 6中的第二个硬件驱动器)。没必要依靠离线存储文件来修复Linux上的磁盘阵列，因为这只在你的服务器支持热插拔硬盘的情况下才能工作：

```
## 从一个md0阵列中删除磁盘 ##
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdb1

# 对 /dev/sdbX 的剩余部分做相同操作 ##
# 如果不是热插拔硬盘就执行关机操作 ##
shutdown -h now

## 从 /dev/sda 复制分区表至新的 /dev/sdb 下 ##
sfdisk -d /dev/sda | sfdisk /dev/sdb
fdisk -l

## 添加 ##
mdadm --manage /dev/md0 --add /dev/sdb1
# 对 /dev/sdbX 的剩余部分做相同操作 ##

# 现在md0会再次同步，通过显示屏查看 ##
watch cat /proc/mdstat

```

来看看[加快Linux磁盘阵列同步速度的小贴士](http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html)来获取更多信息。

### #8 - 处理硬阵列

你可以用samrtctl命令或者供应商特定的命令来查看磁盘阵列和你所管理的磁盘的状态：

```
## SCSI磁盘
smartctl -d scsi --all /dev/sgX

## Adaptec磁盘阵列
/usr/StorMan/arcconf getconfig 1

## 3ware磁盘阵列
tw_cli /c0 show

```

对照供应商特定文档来更换你的故障磁盘。

### 监控磁盘的健康状况

来看看我们先前的教程：

1. [Monitoring hard disk health with smartd under Linux or UNIX operating systems](http://www.cyberciti.biz/tips/monitoring-hard-disk-health-with-smartd-under-linux-or-unix-operating-systems.html)
2. [Shell script to watch the disk space](http://www.cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html)
3. [UNIX get an alert when disk is full](http://www.cyberciti.biz/faq/mac-osx-unix-get-an-alert-when-my-disk-is-full/)
4. [Monitor UNIX / Linux server disk space with a shell scrip](http://bash.cyberciti.biz/monitoring/shell-script-monitor-unix-linux-diskspace/)
5. [Perl script to monitor disk space and send an email](http://www.cyberciti.biz/tips/howto-write-perl-script-to-monitor-disk-space.html)
6. [NAS backup server disk monitoring shell script](http://bash.cyberciti.biz/backup/monitor-nas-server-unix-linux-shell-script/)

### 结论

我希望以上这些小贴士会帮助你改善在基于Linux/Unix服务器上的系统磁盘问题。我还建议执行一个好的备份计划从而有能力从磁盘故障、意外的文件删除操作、文件损坏和服务器完全被破坏等意外情况中恢复：

* [Debian / Ubuntu: Install Duplicity for encrypted backup in cloud](http://www.cyberciti.biz/faq/duplicity-installation-configuration-on-debian-ubuntu-linux/)
* [HowTo: Backup MySQL databases, web server files to a FTP server automatically](http://www.cyberciti.biz/tips/how-to-backup-mysql-databases-web-server-files-to-a-ftp-server-automatically.html)
* [How To Set Red hat & CentOS Linux remote backup / snapshot server](http://www.cyberciti.biz/faq/redhat-cetos-linux-remote-backup-snapshot-server/)
* [Debian / Ubuntu Linux install and configure remote filesystem snapshot with rsnapshot incremental backup utility](http://www.cyberciti.biz/faq/linux-rsnapshot-backup-howto/)
* [Linux Tape backup with mt And tar command tutorial](http://www.cyberciti.biz/faq/linux-tape-backup-with-mt-and-tar-command-howto/)

---

via: <http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/>

作者：[nixCraft](http://www.cyberciti.biz/tips/about-us) 译者：[ZTinoZ](https://github.com/ZTinoZ) 校对：[wxy](https://github.com/wxy)

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


使用 UbuTricks 在ubuntu上安装最新游戏和应用

Summary: UbuTricks是一个可以帮助你在ubuntu上安装几个最新版本的游戏和应用的程序。 UbuTricks是一个有简单界面，基于Zenity的图形脚本。虽然早期开发中，它的目标是通过简单的界面操作来安装Ubuntu14.04 及以后发行版上应用程序的更新。 应用程序会自动下载安装。一些更新可能会需要ppa，其它的将会通过编译源代码安装。编译过程可能会需要一些时间，当从ppa或者deb文件安装应该会快一点，取决于你的下载速度。 一共有以下几种安装方式：  PPA - 程序将会从PPA下载安装 DEB - 程序将会从DEB文件进行安装 Source - 程序会进行编译安装 (可能需要

咦？可以通过这个安装google earth，不错不错

UbuTricks是一个可以帮助你在ubuntu上安装几个最新版本的游戏和应用的程序。

UbuTricks是一个有简单界面，基于Zenity的图形脚本。虽然早期开发中，它的目标是通过简单的界面操作来安装Ubuntu14.04 及以后发行版上应用程序的更新。

应用程序会自动下载安装。一些更新可能会需要ppa，其它的将会通过编译源代码安装。编译过程可能会需要一些时间，当从ppa或者deb文件安装应该会快一点，取决于你的下载速度。

### 一共有以下几种安装方式：

* PPA - 程序将会从PPA下载安装
* DEB - 程序将会从DEB文件进行安装
* Source - 程序会进行编译安装 (可能需要一点时间)
* Script - 程序会通过开发者提供的脚本进行安装
* Archive - 程序会通过压缩文件安装
* Repository - 程序从仓库安装 (不是PPA)

### 你可以安装的应用程序列表

通过UbuTricks可以安装下面应用的最新版本：

### 游戏

* 0 A.D.
* Battle for Wesnoth (Dev)
* VCMI (Heroes III Engine)

### 文件管理

* PCManFM

### 互联网应用

* Geary
* HexChat
* QupZilla
* QuiteRSS

### 多媒体

* SMPlayer
* Transmageddon
* Kdenlive
* Fotoxx
* jAlbum
* GIMP
* Shutter
* Qmmp
* XBMC

### 办公/电子书/文档

* Calibre
* LibreOffice

### 工具

* Ubuntu Tweak

### 桌面环境

* Cinnamon

### 其他

* Google Earth
* Wine

### 下载，安装Ubuntutricks

你可以从[这里](http://www.tuxarena.com/intro/files/ubutricks.sh)下载ubuntutricks，让它可执行然后双击脚本或者从终端里运行它。

### 截图

![](/data/attachment/album/201412/02/104953kunhn7tsggyz5yzj.png)

![](/data/attachment/album/201412/02/104956j1ef2s24ah1wcae2.png)

![](/data/attachment/album/201412/02/104958lv0vzc0osx8k0n0v.png)

![](/data/attachment/album/201412/02/105000f7i709suxits5ia0.png)

---

via: <http://www.ubuntugeek.com/ubutricks-script-to-install-the-latest-versions-of-several-games-and-applications-in-ubuntu.html>

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

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


Qshutdown – 一个先进的关机神器

Summary: qshutdown是一个QT程序，用于让计算机在指定时间或者在几分钟后关机/重启/挂起/睡眠。对于那些只在特定时间使用计算机工作的人而言，可能很有用。  qshutdown将在最后70秒时显示3次警告提醒。（如果设置了1分钟或者本地时间+1，它只会显示一次。） 该程序使用qdbus来发送关机/重启/挂起/睡眠请求到gnome或kde会话管理器，或者到HAL或DeviceKit，而如果这些都没有工作，那么就会使用sudo shutdown -P now命令进行关机（注意，当发送请求到HAL或DeviceKit，或者使用shutdown命令时，会话不会被保存。如果使用shutdown命令，该程序只会被关机

定时关机，写个脚本不就解决了。造轮子

同意楼上[黑线]

好东西

Repost

定时关机，写个c程序不就解决了。造轮子

定时关机，写个汇编不就解决了。造轮子

定时关机，写个机器语言不就解决了。造轮子

sudo sleep 60&&echo "We will poweroff after 30s!"&&sleep 30&&sudo poweroff

qshutdown是一个QT程序，用于让计算机在指定时间或者在几分钟后关机/重启/挂起/睡眠。对于那些只在特定时间使用计算机工作的人而言，可能很有用。

![](/data/attachment/album/201412/02/112507qi3zg403dg4qr5c4.png)

qshutdown将在最后70秒时显示3次警告提醒。（如果设置了1分钟或者“本地时间+1”，它只会显示一次。）

该程序使用qdbus来发送关机/重启/挂起/睡眠请求到gnome或kde会话管理器，或者到HAL或DeviceKit，而如果这些都没有工作，那么就会使用‘sudo shutdown -P now’命令进行关机（注意，当发送请求到HAL或DeviceKit，或者使用shutdown命令时，会话不会被保存。如果使用shutdown命令，该程序只会被关机或重启）。所以，如果在shutdown或reboot时间到时却什么都没发生，这就意味着用户缺少使用shutdown命令的权限。

在这种情况下，你可以进行以下操作：

粘贴以下信息到终端：“EDITOR:nano sudo -E visudo”并添加此行：“\* ALL = NOPASSWD:/sbin/shutdown”这里\*替换为你的“用户名”或“%组名”。

倒计时最大计数为1440分钟（24小时）。配置文件（和日志文件）位于~/.qshutdown，配置文件为：qshutdown.conf。

对于管理员：

在将qshutdonw.conf中的Lock\_all选项设置为true后，用户将不能修改设置。如果你使用“sudo chown root -R ~/.qshutdown”和“sudo chmod 744 ~/.qshutdown/qshutdown.conf”命令修改qshutdown.conf的权限后，用户将不能修改配置文件。

### Ubuntu中安装Qshutdown

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

```
sudo apt-get install qshutdown

```

### 屏幕截图

![](/data/attachment/album/201412/02/112509lgae532eajy2zjd4.png)

![](/data/attachment/album/201412/02/112511javmwnjizcwjjdbt.png)

![](/data/attachment/album/201412/02/112513z0sssxto6xgo6bm6.png)

---

via: <http://www.ubuntugeek.com/qshutdown-an-avanced-shutdown-tool.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 有问必答：如何从VirtualBox中从主机访问NAT客户机

Summary: 提问: 我有一台运行在VirtualBox上的使用NAT的虚拟机，因此虚拟机会被VirtualBox分配一个私有IP地址(10.x.x.x)。如果我想要从主机SSH到虚拟机中，我该怎么做？  VirtualBox对虚拟机支持几种不同的网络方式，其中一种是NAT网络。当虚拟机启用NAT后，VirtualBox会自动在虚拟机和主机之间进行网络翻译，因此你不必在虚拟机和主机之间配置任何东西。这也意味着NAT中的虚拟机对于外部网络以及主机本身是不可见的。这会在你想要从主机访问虚拟机时会产生问题（比如SSH）。 如果你想从VirtualBox的NAT环境的虚拟机，你可以在GUI或者命令行下启用V

太麻烦了，还是vmware workstation吧

太麻烦了，直接vmware吧

学习

[good]

哦，我之前都是双网卡。

回复@ontheway2015: 同太麻烦，vagrant 自动帮你完成这些 //@ontheway2015:太麻烦了，直接vmware吧

回复@ontheway2015: 同太麻烦，vagrant 自动帮你完成这些

双网卡。

>
> **提问**: 我有一台运行在VirtualBox上的使用NAT的虚拟机，因此虚拟机会被VirtualBox分配一个私有IP地址(10.x.x.x)。如果我想要从主机SSH到虚拟机中，我该怎么做？
>
>
>

VirtualBox对虚拟机支持几种不同的网络方式，其中一种是NAT网络。当虚拟机启用NAT后，VirtualBox会自动在虚拟机和主机之间进行网络翻译，因此你不必在虚拟机和主机之间配置任何东西。这也意味着NAT中的虚拟机对于外部网络以及主机本身是不可见的。这会在你想要从主机访问虚拟机时会产生问题（比如SSH）。

如果你想从VirtualBox的NAT环境的虚拟机，你可以在GUI或者命令行下启用VirtualBox NAT的端口转发。本篇教程将会演示**如何通过启用22端口转发而从主机SSH连接到NAT环境的客户机**。如果你先想要从HTTP访问NAT的客户机，用80端口代替22端口即可。

### 通过GUI配置VirtualBox端口转发

在VirtualBox中选择你想要访问的虚拟机，打开虚拟机的“设置”。点击左侧的“网络”菜单，点击网络适配选项的“高级”。

![](/data/attachment/album/201412/02/114444syq7h72lch7vyk2d.jpg)

点击“端口转发”按钮

![](/data/attachment/album/201412/02/114447cr9kzmjkje99pk3k.jpg)

你会看到一个配置端口转发规则的窗口。点击右上角的“添加”图标。

![](/data/attachment/album/201412/02/114449m9y5lc999clc9lcc.jpg)

就会看到像下面那样的转发规则。

* **Name**: SSH (可以是任意唯一名)
* **Protocol**: TCP
* **Host IP**: 127.0.0.1
* **Host Port**: 2222 (任何大于1024未使用的端口)
* **Guest IP**: 虚拟机IP
* **Guest Port**: 22 (SSH 端口)

![](/data/attachment/album/201412/02/114451csbxtu0xlbttvlv8.png)

端口转发的规则会自动在你启动虚拟机的时候启用。为了验证。可以在你启用虚拟机后检查端口2222是否被VirtualBox开启了。

```
$ sudo netstat -nap | grep 2222

```

![](/data/attachment/album/201412/02/114453q8n48oiig3ivrizo.jpg)

现在端口转发可以使用了，你可以用下面的命令SSH到虚拟机。

```
 $ ssh -p 2222 <login>@127.0.0.1

```

发送到127.0.0.1:2222的登录请求会自动被VirtualBox翻译成10.0.2.15:22，这可以让你SSH到虚拟机中。

### 通过命令行配置VirtualBox端口转发

VirtualBox有一个称为VBoxManage的命令行管理工具。使用命令行工具，你也可以为你的虚拟机设置端口转发。

下面的命令会为IP地址为10.0.2.15的虚拟机设置一个名字为"centos7"的端口转发规则，SSH的端口号为22,映射到本地主机的端口为2222。规则的名字（本例中是SSH）必须是唯一的。

```
$ VBoxManage modifyvm "centos7" --natpf1 "SSH,tcp,127.0.0.1,2222,10.0.2.15,22"

```

规则创建之后，你可以用下面的命令来验证。

```
 $ VBoxManage showvminfo "centos7" | grep NIC

```

![](/data/attachment/album/201412/02/114455b8378d2hdhudaavd.jpg)

---

via: <http://ask.xmodulo.com/access-nat-guest-from-host-virtualbox.html>

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

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